Skip to content

feat(framework): bootstrap via a wrapped user prompt, not a system-prompt preamble#458

Draft
suleimansh wants to merge 1 commit into
mainfrom
feat/bootstrap-wrap-prompt-457
Draft

feat(framework): bootstrap via a wrapped user prompt, not a system-prompt preamble#458
suleimansh wants to merge 1 commit into
mainfrom
feat/bootstrap-wrap-prompt-457

Conversation

@suleimansh

Copy link
Copy Markdown
Member

Closes #457. Part of #297.

Rom's steer on #297: treat Claude Code as a black box and wrap the user prompt rather than inject via --append-system-prompt / --system-prompt. Instructions carried in the prompt itself outweigh "contextual" system-prompt text the agent is tempted to skip. #448 shipped bootstrap as a forceful system-prompt preamble; this reworks it to the wrap-the-prompt approach.

What

  • New wrapBootstrapPrompt(userPrompt): rewords a brand-new-project intent into instructions (analyze the request, showMarkdown() the analysis + plan, await approval, no code before approval). Original request rides at the end unchanged.
  • Direct-prompt path (runPrompt): wraps its first user prompt when bootstrap is on.
  • Build path (runFramework): prepends the lighter BOOTSTRAP_ARCHITECT_NOTE to the architect turn only; its plan-approval gate already awaits the plan, and the note is JSON-shape compatible so it does not fight the architect's answer contract. Build/scaffold turns keep the raw intent.
  • Removes the BOOTSTRAP_PREAMBLE export and the bootstrap option on systemPromptBlock (bootstrap left the system channel entirely).
  • CLI --bootstrap flag + daemon flag mapping unchanged.

Verify

  • framework tests 472 (471 pass / 0 fail / 1 skipped), incl. new: wrapBootstrapPrompt shape, runPrompt wraps the user prompt (system channel unchanged), runFramework note scoped to the architect turn only.
  • Workspace typecheck clean; framework build clean; --bootstrap --fake prompt run prints bootstrap: on, exit 0.
  • Composed prompts confirmed byte-correct against a real claude -p invocation (bootstrap framing now rides the user prompt, not the append-system-prompt). The real-LLM behavioral confirmation (stops for a plan, writes nothing) is a one-command run in a logged-in shell; the plumbing is covered by the unit tests above.

… system-prompt preamble

Closes #457. Part of #297.

Rom's steer on #297: treat Claude Code as a black box and wrap the user
prompt rather than injecting via --append-system-prompt. New
wrapBootstrapPrompt() rewords a brand-new-project intent into instructions
(analyze, showMarkdown the analysis + plan, await approval, no code first),
with the original request preserved at the end. The direct-prompt path wraps
its first user prompt; the build path prepends the lighter
BOOTSTRAP_ARCHITECT_NOTE to the architect turn, whose plan-approval gate
already awaits. Removes the BOOTSTRAP_PREAMBLE system-prompt export and the
bootstrap option on systemPromptBlock. CLI --bootstrap and daemon mapping
unchanged.
@suleimansh suleimansh added enhancement New feature or request priority: low Nice to have / latent the-framework ♻️ labels Jul 13, 2026
@suleimansh suleimansh self-assigned this Jul 13, 2026
@suleimansh suleimansh marked this pull request as draft July 13, 2026 14:18
@suleimansh

Copy link
Copy Markdown
Member Author

Holding this as draft. Rom is redesigning the anti-laziness into a single always-injected 'analyze' prompt (ANALYZE_PROMPT.md, #457 comment), which subsumes bootstrap-as-a-mode. Keeping this open as the wrap-the-user-prompt reference; will fold into the unified prompt rather than merge as-is.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

enhancement New feature or request priority: low Nice to have / latent the-framework ♻️

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[The Framework] Bootstrap: wrap the user prompt instead of a system-prompt preamble

1 participant