Every built-in preamble in one plain register - #190
Merged
Conversation
The explorer preamble carried three capitalized section labels (HOW TO
READ, HOW TO INVESTIGATE, WHAT TO PRODUCE), a figurative attach directive
("aims a file past you"), and a vocabulary that assumed source code:
imports, impls, call sites, symbols. The other preambles each read in a
slightly different voice. The kaijutsu prompt drafts showed a register
that all of them can share: identity in one sentence, one concern per
paragraph, plain imperative sentences, and the deliverable obligation
closing the prompt.
Decisions:
- Restyle, do not rewrite. Every phrase the tests pin survives except
"WHICH files matter", now lowercase, and "the report is the finished
deliverable", now a sentence of its own. The whole-file rule keeps all
four of its registers; the test that holds them records the
measurement behind the repetition.
- The explorer reads "one project tree" and "the files a question
touches", and follows "each key name" rather than "each key symbol".
A docs-only repository is a normal target and the old wording was
wrong there. RelevantLocations names headings beside functions, types,
and fields.
- One instruction is new, in every prompt that produces a deliverable:
separate what you read from what you infer and from what remains
unknown. It is the compact form of the "observations, inferences,
unknowns" line from the kaijutsu drafts.
- The consult driver's context paragraph now precedes the answer
paragraph, so the prompt ends on the obligation to write the answer.
Small models attend most to the tail, and stopping early is the
failure kaibo measured.
- The house-rules splice now says that each section is headed by the
path of the file it came from; the headers were already there, the
framing did not mention them.
- The reading guidance still repeats what the kaish sandbox addendum
says. Folding the two together is a later pass.
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The engine test that proves the synth slot received the consult preamble pinned the phrase "second tool, `explore`". The restyle says "You also have `explore`". The pin moves with it; the routing it guards is unchanged. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
A kaibo review of the restyle (cast crusoe: GLM-5.3 synth over a DeepSeek-V4-Flash explorer) read the rendered prompts whole. It found no contradiction and no lost obligation, and four things to change: - The explorer said "project tree" while the consult driver, the deliberation prompt, the house-rules header, and the history framing still said "codebase", so one rendered system prompt used two words for one concept. All now say project or files. The oneshot and batch "no codebase access" stays; a test pins it, and those phases never see a project. - Two code-only phrases survived in the explorer: "every definition, every reference" and "every place it is used". A documentation file has neither. The sentences now speak of the text around each part and every place a name appears. - For the calling agent, the gap sentence put "it" three nouns from its antecedent. It is now two sentences, and each reader's gap phrase names the agent again. "in these sections" moved next to the verb so it cannot attach to "asked". - The report_preamble doc comment said "don't conclude" above a report template whose first section asks what the explorer concluded. The doc now says what the text says: the report, not the answer, is the deliverable. Reviewed-by: kaibo (crusoe: zai-org/GLM-5.3 synth, deepseek-ai/Deepseek-V4-Flash explorer) Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Same pin as the engine test, in the integration suite: "second tool, `explore`" is now "You also have `explore`". The routing it guards is unchanged. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
tobert
added a commit
that referenced
this pull request
Sep 10, 2026
The terms table said `docs/` was converted and the tool descriptions and CLI help were not. The preambles are published prose too — a model reads one every call — and they carry 39 uses of `sweep`. #190 restyled every one of them and kept the word, which is the right call for an unfinished retirement, but it leaves the inventory naming two of the three unconverted surfaces. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
tobert
added a commit
that referenced
this pull request
Sep 10, 2026
A kaibo deliberation over the merged 0.5.0 prompts (cast `gpt-deliberate` — GPT-5.6-sol reasoning offline over a GPT-5.6-luna dossier) found that #190's restyle is right in every preamble read alone, and undone by composition. Each claim below was checked against source before I acted on it. Several other claims in the same report did not survive that check and are not here. **The obligation was no longer the last thing read.** `phase_preamble` splices the project file map and the operator's house rules in after a preamble's closing line, and `run_explorer` appends the attach directive after that. So a composed explorer prompt ended on "Up to 32 files this sweep." and a composed consult prompt ended on "It is background about how this project works, not the question you are answering." The close is where a model attends most, and we had put a file count there. The closing obligation is now restated after anything spliced in, and the attach directive ends on the report rather than on a number. An operator override keeps its own last word — `[prompts]` replaces the role framing in full, so appending kaibo's closing would put back a piece of what the operator removed. **The history framing contradicted the preamble it ships with.** It ordered "re-read any `file:line` an earlier answer cited before you rely on it" — the exact re-verification the consult preamble argues against four paragraphs earlier in the same request, and the behavior the cheap-explorer/capable-synth split exists to avoid paying for. It now names prior citations as trusted and spends the turns on what the new question reaches. The tiebreaker for genuine conflicts stays. **`deliberate` ended with the dossier**, which is the longest thing in the request. It now closes on the answer. **One obligation, one phrasing.** The three-way separation sentence appears in every prompt that hands work to someone else, in the same words; oneshot and batch each carried their own variant. Same reason the attach directive now calls its reader "the synthesis agent" — "the consult driver" was a second name for the model the explorer preamble already names. Six tests, each run against the code with its guard removed. Two of those sabotage runs matched no anchor on the first attempt and reported clean; they were re-run against the real source text before being believed, which is the failure mode that check exists to catch. Suite 1358/0, clippy clean. Not done here, and deliberately: the report's list of figurative phrasings ("costs you every read after it", "where the evidence runs out"), the CamelCase report-schema labels, and the `1,200 lines` reading cue. The first two are a prose pass over text the pending prompt-analysis import would rewrite anyway, and the third is a fact about the shell rather than a size target for the deliverable. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Every built-in preamble in
src/consult/prompts.rsnow reads in one plain register: identity in one sentence, one concern per paragraph, plain imperative sentences, no capitalized section labels, and the deliverable obligation closing each prompt. The explorer used to assume source code (imports, impls, call sites, symbols). It now reads a project tree and the files a question touches, so a documentation-only repository is a normal target, and the consult driver, deliberation prompt, house-rules splice, and history framing use the same word for the same thing.This is a restyle, not a rewrite. Every phrase the tests pin survives except two that moved with their sentences, and the whole-file rule keeps all four of its registers, because the test that holds them records the measurement behind the repetition.
One instruction is new in every prompt that produces a deliverable:
The house-rules splice now says each section is headed by the path of the file it came from; the headers were already there. The consult driver's context paragraph now precedes the answer paragraph, so the prompt ends on the obligation to write the answer, where a small model attends most. For the calling agent, the gap sentence is split so "it" sits next to its antecedent:
Left for a later pass: the explorer's reading guidance still repeats the kaish sandbox addendum.
Stacks on #183, which must merge first.
🤖 Generated with Claude Code