The project template¶
cheme init creates the layout from src/chemeascode/templates/project/ and the bundled skills
(src/chemeascode/domains/<domain>/skills/, src/chemeascode/project/skills/) (also published as the
project-template repository): plant.yaml, pid/, process/, equipment/, piping/,
control/, checks/, reviews/, layout/ (3D layout, see its README.md), DESIGN.md, PROGRESS.md, AGENTS.md, and Claude Code
skills in .claude/skills/:
| skill | for |
|---|---|
dexpi-xml |
reading and writing DEXPI 2.0.1 XML by hand: conventions (coordinates, segment ends, tees, instrument bubbles), recipes (tee and branch, remove an item, instrument on a nozzle, change a line's DN) and verbatim snippets from the DEXPI reference P&ID (pump, tank, piping system with valve, tee with branch, instrument function, instrument nozzle) |
process-design |
materials and flowsheet YAML, process build, balances, refinement into the PFD, process props, links, layout pins, DESIGN.md holding decisions rather than numbers |
reaction-evidence-search |
the evidence behind a reaction model in process/reaction-evidence.yaml: searches with the agent's own tools (logged with dates), sources with DOI or patent number, access reached and reuse terms, one observation per experiment or patent example at its exact location (conversion, selectivity and yield kept apart; kinetics with units, basis and range), conflicts and gaps, never a value a source does not give |
route-selection |
comparing the routes (cheme chemistry evidence), selecting one with its rationale, the model_basis (reactions, evidence, assumptions, validation plan) and the handoff to reactions.yaml with each value citing its observation |
reactions |
process/reactions.yaml (stoichiometry, conversion, heat of reaction, catalyst, sources), reactions on reactor steps, element and extent balances, conversion reactors in process propagate |
electrochemical-cell-modelling |
process/cells.yaml: reactions and electrons, half-reactions, specified or measured performance (performance: measured, never extrapolated), the membrane block with FE and WDE kept apart, cheme process cell and the flowsheet link |
electrolysis-duty-assessment |
process/duties.yaml: current, power or on/off schedules against the anolyte reservoir, the stated pH threshold, dosing, bleed, cheme process duty, comparison at equal delivered product, the measured range never left unflagged, measured points kept apart from simulated transients |
skid-design |
an electrolyser skid from one design basis: the cell, the stacks: section of process/cells.yaml and a duty, cheme process cell, duty and stack --write, the control P&ID and control report, datasheets draft/fill, layout build/render, assess lca; the vendor envelope, clearances, hazardous area and H2/CO handling left to a human |
experiment-reproduction |
reproducing a published measured series: the data set pinned by DOI and checksum, tolerances frozen before comparing, reproduction kept apart from validation and design use, no third-party content copied, cheme experiments electrochem |
process-simulation |
process/simulation.yaml (property package, step specs), process simulate --check and --fill with DWSIM, deviations from assumed values, shortcut before rigorous columns, recycles |
pid-edit |
changing a sheet: edit, fmt, validate, render, diff, commit |
pid-draft |
a new sheet (cheme sheet new) started from the PFD, drafted with fragments or with a generator script on chemeascode.domains.piping.authoring (cheme run), and whether it stays generated |
lists-sync |
equipment, line and instrument lists consistent with the P&IDs and the flowsheet links |
review |
validation, checks, drawing review backed by the drawing counts and a tile sweep, engineering review, layout review backed by the plot plan and section PNGs and layout report, a review record with Drawing and Layout sections |
layout-yaml |
site plan, buildings, structures, zones and equipment placement (mount, nozzles, access): placing equipment, avoiding clashes, tags consistent with the equipment list, the layout build loop |
pipe-routing |
routing intent in piping/routing.yaml (tiers per service, battery limits, pipe-way elevation, vias, pins, skips with a reason, buried lines), iterating with layout route, report and plan/section renders, fixing clashes; what the router cannot decide |
structures-access |
what goes on a steel structure, frames, cold boxes and enclosures, platforms, ladders and stairs for manways and valves above 2.5 m, escape routes, maintenance envelopes |
tea |
techno-economic analysis: estimate/tea.yaml (decision, basis, capex build-up from the estimate, prices with sources, fixed opex, finance, uncertainty, scenarios), cheme assess tea, the dominating premises and break-even values, --compare on a shared basis |
area-classification |
layout/zones.yaml: hazardous, oxygen-enriched and oxygen-deficient zones from release sources (release grade, substance) and the ASSUMED radius table, keep-clear and escape zones; review by a competent person |
Agents edit the XML files directly. There is deliberately no MCP server and no edit-operation
API: the experiment is how far direct file editing with validation goes. copy and fragment
are text helpers in that spirit: they write XML for the agent to place, and the file stays the
only state. The builder library chemeascode.domains.piping.authoring for generator scripts fits the same
principle (decided in 0.4): it loads a file, inserts XML built by the same functions as
fragment, writes the file and formats it; it holds no state between runs, and its output is
validated like any hand edit.
The template's own README¶
Every new plant repository starts with this README (from
src/chemeascode/templates/project/README.md). Below the title, a row of badges and a short
introduction, it maps the repository:
| Path | Contents |
|---|---|
plant.yaml |
name, stage, sheets |
pid/ |
P&ID sheets (DEXPI 2.0.1 XML) |
process/design-basis.yaml |
capacity, feeds, products, utilities, site |
process/materials.yaml, process/flowsheet.yaml |
components, blocks and streams: the source of the block flow and process flow diagrams (BFD, PFD) in process/*.xml |
equipment/equipment-list.yaml, piping/line-list.yaml, control/instrument-list.yaml |
lists, consistent with the P&IDs |
control/cause-effect.yaml |
interlocks and trips (cause and effect) |
piping/special-items.yaml (optional) |
tagged piping components: safety valves, silencers, rupture discs (skill lists-sync) |
safety/ |
HAZOP studies (safety/hazop/<id>/study.yaml) and the risk matrix they rate against; safety/README.md says how |
layout/, electrical/, estimate/, lca/ |
3D layout, electrical, cost estimate and life cycle assessment; each folder's README.md says what goes there |
checks/checks.yaml |
engineering-step gates (checks that must pass before a stage is signed off); checks/status.json their result at the last sign-off |
reviews/ |
review records |
runs/ |
one record per design session, written by cheme runs record (runs/README.md); never edited |
DESIGN.md, PROGRESS.md, STAGES.md |
decisions, change log, stage definitions |
scripts/ |
scripts that generate sheets (see generator: in plant.yaml) |
.claude/skills/ |
skills: the instructions an AI agent follows when it works here |
| It also says where the tools come from: |
- This repository holds your plant: drawings, lists, decisions. It does not hold the tools.
- The tools come from
cheme-as-code, installed once on your computer (uv tool install git+https://github.com/ChemE-as-Code/core.git). Every check, drawing and generated file is made by thechemecommand, so you need it to work here. The continuous integration (CI) in.github/workflows/installs it too. - The skills in
.claude/skills/are copies of the ones in cheme-as-code, so that Claude Code finds them here. After upgrading (uv tool upgrade cheme-as-code), runcheme skills updateto refresh them;cheme skills statusshows which are out of date. A skill you changed here is kept. - While cheme-as-code is private, you need read access to it, and the CI needs the secrets
named in
.github/workflows/validate.yml.