CLAUDE.md is the platform's; the commander writes its own files

it was told to extend and rewrite this file as the job settled, which
makes every improvement to the template fight a commander's edits and means
a backfill can never replace it. the file is the same for every commander
and should stay that way.

so: never edit it. everything the commander decides goes in files beside
it. JOB.md — what it watches for and what it does — written the moment that
is agreed, and read before anything else on every session, because
CLAUDE.md is the method and JOB.md is the answer. then a file per thing
with rules of its own: CLASSIFICATION.md, DISPATCHING.md. those change, and
a rule that changes needs somewhere it can be read, argued with and edited
without touching anything else.

the spawned-agent rule points at those by name now instead of at a
procedures/ file nobody had a reason to open.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Officer-Session: 656f5c85-e49a-4f1f-b9f3-042a04b4d043
This commit is contained in:
2026-08-25 07:29:45 +00:00
co-authored by Claude Opus 5
parent 02d44b93a4
commit ed2a343676
+27 -10
View File
@@ -165,10 +165,22 @@ export function commanderClaudeMd(params: CommanderClaudeMdParams): string {
return [ return [
`# ${params.name}`, `# ${params.name}`,
'', '',
'This is a commander: an agent that keeps working when nobody is watching. This file is its own —', 'This is a commander: an agent that keeps working when nobody is watching.',
'extend it as the job gets settled, and again whenever what it watches or what it does about that', '',
'changes. Open the **Commanders** skill before starting or changing a watcher; it carries how the', "**This file is the platform's, not yours. Never edit it.** It says how being a commander works, it is",
'pieces fit, what to establish first, and the mistakes that are expensive.', 'the same for every commander, and it is replaced wholesale when the platform has something better to',
'say. An edit here is lost on the next update and fights every commander that comes after you.',
'',
'**Everything YOU decide goes in files you create, beside this one.** `JOB.md` first: what you watch',
'for and what you do about it, written the moment it is agreed. Then one file per thing that has rules',
'of its own — `CLASSIFICATION.md`, `DISPATCHING.md` — because those change, and a rule that changes',
'needs somewhere it can be read, argued with and edited without touching anything else.',
'',
'**Read `JOB.md` before you do anything, on every session.** It is the answer; this file is only the',
'method. If it does not exist yet, the job has never been settled and you are on your first turn.',
'',
'Open the **Commanders** skill before starting or changing a watcher; it carries how the pieces fit,',
'what to establish first, and the mistakes that are expensive.',
'', '',
'## What this watches', '## What this watches',
'', '',
@@ -272,9 +284,9 @@ export function commanderClaudeMd(params: CommanderClaudeMdParams): string {
'watch — that holds its subject, not your work. Getting the result there is your problem to solve with', 'watch — that holds its subject, not your work. Getting the result there is your problem to solve with',
'whatever ran the action; where it ends up is not negotiable.', 'whatever ran the action; where it ends up is not negotiable.',
'', '',
'**A spawned agent follows a FILE, not a prompt.** Put the rules in `procedures/<something>.md` here and', '**A spawned agent follows a FILE, not a prompt.** Point it at `CLASSIFICATION.md`, `DISPATCHING.md`,',
'point the agent at it. When the rule changes you edit one document; a prompt baked into a loop is a', 'or whatever else you wrote for the job. When the rule changes you edit one document; a prompt baked',
'rule nobody can find and nobody reviews.', 'into a loop is a rule nobody can find and nobody reviews.',
'', '',
'**Say what is provisional.** A two-minute cadence chosen for testing reads a week later as a decision', '**Say what is provisional.** A two-minute cadence chosen for testing reads a week later as a decision',
'somebody made. Write down which numbers were guesses, so the next turn knows what it may change.', 'somebody made. Write down which numbers were guesses, so the next turn knows what it may change.',
@@ -292,6 +304,11 @@ export function commanderClaudeMd(params: CommanderClaudeMdParams): string {
'something broken.', 'something broken.',
'', '',
'```', '```',
"CLAUDE.md this file. the platform's. never edited.",
'JOB.md what was agreed: what you watch for and what you do. yours, written once',
' the job is settled and kept true after that.',
'CLASSIFICATION.md the category rules, if it classifies. yours, and expected to change.',
'DISPATCHING.md what happens to a result beyond keeping it, if anything. yours.',
'data/ everything this commander has produced. ALWAYS called data.', 'data/ everything this commander has produced. ALWAYS called data.',
' <category>/ only if it classifies — one directory per category, as they are agreed', ' <category>/ only if it classifies — one directory per category, as they are agreed',
' unclassified/ only if it classifies — produced and recorded, placement still open', ' unclassified/ only if it classifies — produced and recorded, placement still open',
@@ -439,9 +456,9 @@ export function commanderClaudeMd(params: CommanderClaudeMdParams): string {
'If something DOES go wrong in the backlog, that is worth saying — in the conversation if it is still', 'If something DOES go wrong in the backlog, that is worth saying — in the conversation if it is still',
'open, or as a notification if it is not. A failure is news. A success is not.', 'open, or as a notification if it is not. A failure is news. A success is not.',
'', '',
'Once the job is settled, write it into this file, replacing this section: what you watch for, what you', 'Once the job is settled, write it into `JOB.md` — what you watch for, what you do about it, and which',
'do about it, and which numbers were guesses. The next session should read the answer, not the', 'numbers were guesses. Not into this file. The next session reads `JOB.md` for the answer and this one',
'questions.', 'for the method.',
'', '',
].join('\n'); ].join('\n');
} }