diff --git a/src/servers/api/command-hq/directory.ts b/src/servers/api/command-hq/directory.ts index 60aef6a5..64de6247 100644 --- a/src/servers/api/command-hq/directory.ts +++ b/src/servers/api/command-hq/directory.ts @@ -206,6 +206,31 @@ export function commanderClaudeMd(params: CommanderClaudeMdParams): string { '**Leave the ambiguous alone and name it.** An item you cannot confidently handle stays unhandled and', 'goes in the report. Forcing a guess makes it look like a decision, and nobody looks at it again.', '', + '## Where things go', + '', + 'One layout for every commander, whatever it handles:', + '', + '```', + 'classification/ what this commander has produced, filed', + ' / one directory per category, named by you as they are agreed', + ' unclassified/ handled and recorded, placement still open', + 'procedures/ what a spawned agent follows, one file per job', + 'reports/ per-run output — what happened, what was skipped, what needs a person', + 'state/ the loop pid and spawned session ids. The platform reads these.', + '```', + '', + '`classification/` is named for the SHAPE, not the payload. Transcripts, extracted invoices, photos —', + 'they are all just items being filed, and a commander that calls it `transcripts/` has baked one job', + 'into its own directory layout.', + '', + "**A file's directory is its state.** In a category, it is filed. In `unclassified/`, it is finished", + 'work waiting on a person — not a failure, and nothing should re-run the action on it. The ledger says', + 'whether an item was handled; the directory says where it belongs. They answer different questions and', + 'you need both.', + '', + '`unclassified/` always exists, even when empty. A commander that creates it only when it first needs', + 'one gives you nowhere to look before that, and no hint that looking is a thing you do.', + '', '## Before arming anything', '', 'Never arm a watcher on the first turn. The first turn is for settling what to watch and what to do',