Skip to content

Agents and skills

A plant repository is made to be worked on by coding agents such as Claude Code as well as by people: the files are text, every check prints file:line findings, and the template installs skills that say how to work on each part of the design.

skills

cheme skills status [NAME...] [--json] compares the skills installed in .claude/skills/ with the bundled ones: each file is current, outdated (an earlier bundled version, known from the package's templates/skills-manifest.json), modified (changed in this repository) or missing. cheme skills update [NAME...] installs missing and outdated files and keeps a modified one, reporting cheme.skill-modified (exit 1); --force replaces it and still reports it. cheme init reports a modified skill it kept, or replaced under --force. The licence notice .claude/skills/NOTICE.md is tracked the same way; an update naming skills leaves it alone.

Agent design runs

docs/agent-design-run.md describes a repeatable staged agent design run: the runner scripts/agent-run/run_stage.py (in every plant repository), stage and reviewer prompts built from the repository (cheme status --json), budgets per stage type and the record layout.

Running agents headless

Claude Code reads a repository's .claude/settings.json (the template's allowlist: cheme, read-only git, grep, ls, wc, head, tail, cat, cmp, sed -n, Edit and Write) only once the folder is trusted. In a folder that was never opened interactively, a headless run (claude -p ...) prints Ignoring N permissions.allow entries from .claude/settings.json: this workspace has not been trusted and every command outside the defaults is denied. Either open the folder in Claude Code once and accept the trust dialog (or set projects["<path>"].hasTrustDialogAccepted: true in ~/.claude.json), or pass the allowlist explicitly:

claude -p "$(cat build/prompt.txt)" --settings .claude/settings.json --output-format json
# or: --allowedTools "Bash(cheme:*)" "Bash(git log:*)" ... Edit Write

With --settings the Ignoring N permissions.allow entries line is still printed, because the project copy of the file stays untrusted, but the same entries apply from the flag. Check the permission_denials of the JSON result, not that line: in an untrusted folder freshly made by cheme init (Claude Code 2.1.311), the same short task (cheme validate, git log, wc, an Edit of DESIGN.md, git commit) had cheme validate and the Edit denied without the flag, and no denials with --settings .claude/settings.json.

The allowlist deliberately leaves out sed -i, awk, cp and heredocs: allowing them would approve shell rewrites of 50,000-line sheets. The template's AGENTS.md and the pid-edit / pid-draft skills tell agents to change files with Edit/Write only, to run one command per Bash call (no loops, && chains or VAR=...; prefixes, which prefix rules do not match) and to keep scratch files in build/. cheme init prints a reminder. docs/agent-design-run.md packages a staged design run with these flags.