the first turn: look, then ask

setup opened blank. the commander was told the name and the path and then
asked whether it could guess the job — so the first message back was
generic, and the owner had to explain the subject from nothing.

it should read the reference path FIRST and open with what is there: nine
.m4a files, newest twenty minutes ago, all named memo-<date>-<time>, are
those what i am watching for. that is worth ten generic questions, and it
shows immediately whether it is looking at the right thing.

and the section now lists what has to be settled before anything is armed
— what counts as a new item, what happens to one, where the result goes,
whether there is classification at all, how often to look and that the
number is a guess. "have a conversation" was too vague to act on.

the name is a clue, not a specification. it says what the subject is and
never what to do about it, which is how a commander ends up doing
something nobody asked for.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Officer-Session: 656f5c85-e49a-4f1f-b9f3-042a04b4d043
This commit is contained in:
2026-08-24 17:02:02 +00:00
co-authored by Claude Opus 5
parent 5ee09a3fb6
commit dd6d0a8e12
2 changed files with 35 additions and 13 deletions
+29 -7
View File
@@ -246,15 +246,37 @@ export function commanderClaudeMd(params: CommanderClaudeMdParams): string {
'when first needed gives the owner nowhere to look before that, and no hint that looking is a thing they',
'do.',
'',
'## Before arming anything',
'## The first turn',
'',
'Never arm a watcher on the first turn. The first turn is for settling what to watch and what to do',
'about it — arming before that is arming a guess, and a wrong condition either never fires or fires',
'constantly and is found out days later. Ask, and arm once it is agreed.',
"Two things were named before anything was said: this commander's name, and the reference path above.",
'That is all anybody has decided. Everything else is settled in conversation, on this turn.',
'',
'This section describes turn one, and it is true for as long as it stays here unedited. Once the job',
'is settled, replace it with what was agreed — what this commander watches for and what it does when',
'that happens — so the next turn reads the answer instead of the question.',
'**Look before you ask.** Go and read the reference path first — how many items, what kinds, how they',
'are named, how recently they arrive. A first question grounded in what is actually there is worth ten',
'generic ones: "there are nine `.m4a` files, newest twenty minutes ago, all named',
'`memo-<date>-<time>` — are those what I am watching for?" tells the owner you understand the subject',
'and gives them something concrete to correct.',
'',
'The name is a clue, not a specification. It says what the subject is. It never says what to do about',
'it, and guessing that is how a commander ends up doing something nobody asked for.',
'',
'**One question at a time.** This is a conversation, not a form. Ask, listen, and let the answer change',
'what you ask next.',
'',
'What has to be settled before anything is armed:',
'',
'- **What counts as a new item.** Which extensions, top level or recursive, anything to ignore.',
'- **What happens to one.** The action — or that there is none, and the trigger is the whole job.',
'- **Where the result goes.** Beside the source, into `classification/`, somewhere else entirely.',
'- **Whether there is classification at all.** Most commanders do not need it. Do not invent it.',
'- **How often to look**, and say out loud that the number is provisional until it has run a while.',
'',
'**Never arm a watcher on this turn.** Arming before the above is agreed is arming a guess, and a wrong',
'condition either never fires or fires constantly — either way it is found out days later. Ask, agree,',
'then arm.',
'',
'When it is settled, REPLACE this section with what was agreed: what this commander watches for, what it',
'does about it, and which numbers were guesses. The next turn should read the answer, not the questions.',
'',
].join('\n');
}
@@ -106,10 +106,12 @@ const startBrief = (name: string, referencePath: string): string =>
'are setting you up, and not on a first run. If you find work of that kind already waiting here, it',
'is mine to start, not yours to volunteer for.',
'',
'Now: can you tell what the job is from what is written here, or not?',
'So: go and LOOK at it first, then talk to me. How many things are in there, what kinds, how they are',
'named, how recently they arrive. Open with what you actually found and one question about it — that',
'is worth ten generic ones, and it tells me straight away whether you are looking at the right thing.',
'',
'If you CAN — say what you understood, in your own words, and ask me to confirm or correct it.',
'If you CANNOT — ask me what you should be watching for here. One question, and wait.',
'The name tells you the subject. It never tells you what to do about it, so do not decide that part on',
'your own. One question, and wait.',
'',
'Once you are running, you owe me exactly two messages here per event, and I should never have to ask',
'for them: one line when the thing you watch for happens, and a short report when the work is done.',
@@ -202,9 +204,7 @@ const CommanderSetup = ({
}`}
>
<FolderOpen className="h-4 w-4 shrink-0" />
<span className="min-w-0 flex-1 truncate font-mono text-xs">
{referencePath ?? 'Choose a directory…'}
</span>
<span className="min-w-0 flex-1 truncate font-mono text-xs">{referencePath ?? 'Choose a directory…'}</span>
</button>
<span className="text-[11px] text-muted-foreground">{t('commandHq.referencePathHint')}</span>
</div>