From 6041379e9849d4d1d522625a31225ff3640f8dc8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Padez?= Date: Tue, 25 Aug 2026 05:10:51 +0000 Subject: [PATCH] the first message is two sentences, and the question is tappable MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit the opening brief was thirty lines and the commander answered in kind: it explained what the machine already has, what it can be told to do, what it would not do on its own, and what it inferred from the filenames about whether a person or a device named them. all of it true, none of it asked, and the one question was at the bottom. the brief is five lines now. look in the path, look at what the platform can already do, ask which of those it should be — or whether the owner has something else in mind. that is the whole of the first message. and it asks with AskUserQuestion, so the owner picks instead of typing. that was already wired end to end — QuestionActivity renders it and useChat has the answer channel — and nothing was using it here. the template's first-turn section went the same way: "one question at a time" stays, the list of five things to settle goes. it was a checklist, and a checklist gets answered as a checklist. Co-Authored-By: Claude Opus 5 Officer-Session: 656f5c85-e49a-4f1f-b9f3-042a04b4d043 --- src/servers/api/command-hq/directory.ts | 49 +++++++------------ .../src/apps/CommandHQ/CommandHqDetail.tsx | 32 +++--------- 2 files changed, 23 insertions(+), 58 deletions(-) diff --git a/src/servers/api/command-hq/directory.ts b/src/servers/api/command-hq/directory.ts index 4ee8ca6a..7479af0e 100644 --- a/src/servers/api/command-hq/directory.ts +++ b/src/servers/api/command-hq/directory.ts @@ -275,44 +275,29 @@ 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.', '', - '## The first turn', + '## Talking to the owner', '', - "Two things were named before anything was said: this commander's name, and the reference path above.", - 'Everything else is settled in conversation, and it is settled ONE QUESTION AT A TIME.', + 'ONE question at a time, answerable by picking rather than by typing. Use **AskUserQuestion** — it puts', + 'options on screen and the owner taps one. Free text is for when they want to say something you did not', + 'think of, not for the ordinary case.', '', - '**Assume the person answering is busy and knows less about this than you do.** Every question should', - 'be answerable with "yes" or "no, do this instead". If they have to read a paragraph to reply, or choose', - 'between options you have laid out, the question was too big. Break it up and take more turns. Turns are', - 'cheap; a wrong guess armed for a week is not.', + 'Short, and in plain words. A sentence of what you found, then the question. Nothing about how the', + 'platform works, what you could be told to do, or what you are choosing not to do — none of it was', + 'asked, and every line of it is another thing to read before answering.', '', - '**Look, then look again, then ask.**', + 'Say what is there, not what you infer from it. How many, what kind. Not who made them or how they', + 'arrived: that is you thinking out loud, and it reads as padding even when it is right.', '', - '1. Read the reference path. What is in there, what kinds of file, how they are named, how recently they', - ' arrive.', - '2. Ask the platform what it can already do — `GET /api/tasks` lists every task on this machine, and', - ' your skills index names the rest. If one of them plainly fits what you just saw, that is your', - ' suggestion. It has to come from what this platform actually has, not from a guess about what would', - ' be useful.', - '3. Then ask ONE question: when a new one of these appears, should I do ?', + 'Settle one thing, then the next. The action first. Categories, dispatching and how often to look are', + 'separate questions for later turns, and most commanders never need the first two.', '', - 'That is the whole of the first turn. Nothing else.', + '**Never arm a watcher before the owner has agreed what it does.** Arming ahead of that is arming a', + 'guess, and a wrong condition either never fires or fires constantly — either way it is found out days', + 'later.', '', - '**Do not ask where the output goes.** It goes in this directory — see "Where things go" above, which', - 'is the same for every commander. Putting it somewhere else is a later decision and usually never comes', - 'up at all.', - '', - '**Do not ask about categories, dispatching, or how often to look.** Those are separate steps and most', - 'commanders never need the first two. They come up later, one at a time, once the action is agreed and', - 'has actually run.', - '', - '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.', - '', - '**Never arm a watcher on this turn.** Arming before the action is agreed is arming a guess, and a wrong', - 'condition either never fires or fires constantly — either way it is found out days later.', - '', - '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.', + 'Once the job is settled, write it into this file, replacing this section: what you watch for, what you', + 'do about it, and which numbers were guesses. The next session should read the answer, not the', + 'questions.', '', ].join('\n'); } diff --git a/src/workspaces/officerdev/src/apps/CommandHQ/CommandHqDetail.tsx b/src/workspaces/officerdev/src/apps/CommandHQ/CommandHqDetail.tsx index e38f29ff..658f2372 100644 --- a/src/workspaces/officerdev/src/apps/CommandHQ/CommandHqDetail.tsx +++ b/src/workspaces/officerdev/src/apps/CommandHQ/CommandHqDetail.tsx @@ -96,35 +96,15 @@ const NewCommanderGuide = () => { const startBrief = (name: string, referencePath: string): string => [ // i18n-exempt: agent brief — the MODEL reads this; the transcript shows displayText to the person - `You have been named "${name}", and that is the only thing I have told you about what I want.`, - `It is not decoration — I chose it before anything else, so treat it as the subject. Your own`, - `CLAUDE.md already names what to look at: \`${referencePath}\`. Go read that before anything else —`, - "this directory is yours, not what you're here to watch.", + `You have been named "${name}". Look in \`${referencePath}\` and see whether there is anything there`, + 'already.', '', - 'Read the **Commanders** skill before you reply. It is how this works, and it is short.', + 'Then look at what this platform can already do — `GET /api/tasks`, and your skills — and ask me', + 'whether one of those is what you should be doing with them, or whether I have something else in mind.', '', - 'Go and LOOK at that path, then talk to me.', + 'Ask it with AskUserQuestion, so I can answer by picking rather than by typing.', '', - 'Your first message is SHORT. A sentence or two on what is actually in there — how many, what kind —', - 'and then one question. Nothing else. Not how the platform works, not what you could be told to do,', - 'not what you are declining to do, not what happens next. I have not asked any of that and all of it', - 'gets in the way of the one thing I have to answer.', - '', - 'Plain words. If a sentence would need explaining to someone who has never seen this software, it does', - 'not go in.', - '', - '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.', - 'The job panel is not where I read things. The skill explains how to wake this conversation yourself.', - '', - 'Either way, say it plainly. No headings, no bullet points, no file paths, no commit hashes, no tag', - 'names. Do not open with "Oriented" and do not tell me you verified anything — I asked you to look,', - 'so saying you looked is not news. Length is whatever the answer honestly needs and no more.', - '', - 'Take as long as you like reading first. The constraint is on what you say, not on what you do.', + 'That is the whole of your first message: what you found, and that question. Nothing else.', ].join('\n'); const StartCommanderButton = ({ ready, blockedBy, onStart }: StartCommanderButtonProps) => {