- factory-audit: no-op hooks, ./ after interpreters, split-quote and
spaced ${PLUGIN_ROOT} paths, camelCase events in Claude-targeted flat
files, case-insensitive routing stems, and non-string YAML keys are
now caught; input: forms and prompt boundary clauses align with
primitive-author; bats 347 -> 367
- primitive-author: routing forms, quoting guidance, install exit on
hidden Unicode, argument-hint exception
- forge: drop duplicated gotcha, fit description and body budgets (#143)
- skill-author: primitive-author boundary, Claude-only env vars
- hook: exit unless CLAUDE_PROJECT_DIR is set, so Copilot/Codex never
run apm update; ADR-0019 correction, ADR-0025 amendment, docs fixes
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01KkT7RSDwDbmrM9T34b6sTi
4.0 KiB
4.0 KiB
name, description, allowed-tools, metadata
| name | description | allowed-tools | metadata | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| primitive-author | Use when the user wants an apm hook, instruction or prompt file created, or audit findings or feedback applied to an existing one. Not read-only review -> factory-audit. Not skills -> skill-author. Not agents -> agent-author. | Bash Read Write Edit |
|
Gotchas
apm compile --validateis not a gate: it only warns on instructions, exits 0, and never reads prompts.apm installexits 1 only on a hook payload Copilot would reject or on critical hidden Unicode, which also blocks the package's deployment; bad prompt input names and dropped keys merely warn —/factory-auditis the only check that fails on the rest.- Never draft with the real suffix outside
.apm/<type>/. apm's local discovery globs**/*.instructions.mdacross the whole tree, so a draft or template named that way anywhere in the repo is picked up as a real instruction. The templates carry a trailing.templatefor this reason; drop it only on the final path. - Never hand-write
.claude/settings.json, even to test a hook. apm owns that file (ADR-0019), overwrites it outright when it is malformed, andapm audit --cifails on anything it would not have written.
Step 1 — Dispatch
| Target or intent | Type | Reference |
|---|---|---|
A hook — .apm/hooks/<name>.json, or "run X whenever Y happens" |
hook | references/hook.md |
An instruction — .apm/instructions/<name>.instructions.md, or a rule for files matching a pattern |
instruction | references/instruction.md |
A prompt — .apm/prompts/<name>.prompt.md, or a reusable message the user types to kick off work |
prompt | references/prompt.md |
| A skill or an agent | — | stop: route to skill-author or agent-author |
Read only the reference matching the resolved type — each is self-contained. If the target sits inside a git worktree, capture rtk git log --oneline -1 before touching the filesystem; Step 4 needs it.
Step 2 — Boundary gate
Run the reference's Gate section before writing anything. A failed gate stops this skill: name the owner it points to — skill-author for procedure, agentsmd-author for a repo-only rule, apm-workflow for reach or targets: — and hand over. Never bend the artifact to pass the gate.
Step 3 — Create or improve
| Condition | Action |
|---|---|
| No file at the target path | Create: copy the reference's template from assets/templates/, drop .template, fill every FILL IN and FILL_IN_ placeholder, and apply the reference's checklist |
| File exists, at least one signal | Improve: read the whole file, then apply each signal against the reference's checklist |
| File exists, no signal | Stop and ask whether the user meant a new file or has feedback to apply |
Signals: grill output, /factory-audit findings, inline feedback, session context describing what went wrong. Group findings by root cause and fix the cause once.
Step 4 — Validate and close
- Run
/factory-auditon the file, inline in this context; resolve every FAIL before reporting done, including the### ProseFAILs Vale raises on an instruction or prompt body. - Run
rtk apm install --dry-runfrom the repo root and read what each target will receive. On a feature branch, discardapm.lock.yamlchurn afterwards (rtk git checkout -- apm.lock.yaml). - Bump the owning package's
apm.ymlversion:— minor for a new hook, instruction or prompt, patch for a fix — unless this branch already bumped it for unreleased work. None of these has a version of its own. - Commit verification. Inside a git worktree, once the audit is clean, run
rtk git addandrtk git commit, then re-runrtk git log --oneline -1and confirm the hash changed from Step 1's. Staged-but-uncommitted work is silently lost if the tree is cleaned up. Outside a worktree, report done on a clean audit and name that as the reason.