Skip to content

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 the cheme command, 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), run cheme skills update to refresh them; cheme skills status shows 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.