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.