# Phase 1 PR #1 Checklist: Context Levels Created: 2026-02-12 Owner: Flynn core Status: ready to implement ## Goal Add configurable prompt context levels so Flynn can trade off speed/cost vs depth: - `minimal` - `normal` (default) - `detailed` - `debug` This PR only adds config + prompt assembly behavior. It does not add command routing or runtime switching. ## PR Boundary In scope: - Schema support for `prompt.context_level` - Pass `context_level` into prompt assembly - Context-level behavior in `assembleSystemPrompt` - Unit tests for parsing and prompt output differences Out of scope: - Per-agent overrides - Slash-command switching (`/context ...`) - Adaptive auto-switching by token budget - Tool-list verbosity tuning inside `NativeAgent` ## File-by-File Diff Plan 1) `src/config/schema.ts` - Add enum and default under `promptSchema`. - Export type for use by prompt module. ```diff @@ const promptSchema = z.object({ search_dirs: z.array(z.string()).default([]), extra_sections: z.array(z.object({ name: z.string(), content: z.string(), })).default([]), + context_level: z.enum(['minimal', 'normal', 'detailed', 'debug']).default('normal'), }).default({}); @@ +export type ContextLevel = z.infer; export type PromptConfig = z.infer; ``` 2) `src/prompt/template.ts` - Accept `contextLevel` in `PromptTemplateConfig`. - Implement level-based assembly behavior: - `minimal`: load `SOUL.md` + runtime only, skip extra sections - `normal`: current behavior (all templates + runtime) - `detailed`: `normal` + include extra sections explicitly (same as current, documented) - `debug`: `detailed` + append loaded file list and directory resolution notes in a debug section ```diff @@ +import type { ContextLevel } from '../config/schema.js'; @@ export interface PromptTemplateConfig { searchDirs: string[]; extraSections?: Array<{ name: string; content: string }>; + contextLevel?: ContextLevel; } @@ -export function assembleSystemPrompt(config: PromptTemplateConfig): PromptTemplateResult { +export function assembleSystemPrompt(config: PromptTemplateConfig): PromptTemplateResult { + const level = config.contextLevel ?? 'normal'; + const includeAllTemplates = level !== 'minimal'; + const includeExtraSections = level !== 'minimal'; + const includeDebugSection = level === 'debug'; const sections: string[] = []; const loadedFiles: string[] = []; - for (const { name, section } of PROMPT_FILES) { + for (const { name, section } of PROMPT_FILES) { + if (!includeAllTemplates && name !== 'SOUL.md') { continue; } ... } - if (config.extraSections) { + if (includeExtraSections && config.extraSections) { ... } + if (includeDebugSection) { + sections.push(`# Prompt Debug\n\nContext level: ${level}\nLoaded files:\n${loadedFiles.map(f => `- ${f}`).join('\n') || '- none'}`); + } ... } ``` 3) `src/daemon/services.ts` - Pass config value through `loadSystemPrompt`. ```diff @@ const result = assembleSystemPrompt({ searchDirs, extraSections: config.prompt.extra_sections, + contextLevel: config.prompt.context_level, }); ``` 4) `src/prompt/template.test.ts` - Add focused tests for level behavior. ```diff @@ +it('uses normal as default context level', ...) +it('minimal loads SOUL plus runtime only', ...) +it('normal keeps current template behavior', ...) +it('detailed includes extra sections', ...) +it('debug appends prompt debug section with loaded files', ...) +it('minimal skips extra sections', ...) ``` 5) `config/default.yaml` (optional but recommended) - Add commented prompt block to advertise the new setting. ```diff @@ +# prompt: +# search_dirs: [] +# extra_sections: [] +# context_level: normal # minimal | normal | detailed | debug ``` ## Implementation Steps 1. Add schema enum + exported type in `src/config/schema.ts`. 2. Update prompt template types and logic in `src/prompt/template.ts`. 3. Thread config value in `src/daemon/services.ts`. 4. Add/adjust tests in `src/prompt/template.test.ts`. 5. Optionally document setting in `config/default.yaml`. 6. Run validation commands and fix any regressions. ## Validation Commands Run in this order: ```bash pnpm typecheck pnpm test:run src/prompt/template.test.ts pnpm test:run pnpm lint pnpm build ``` ## Acceptance Criteria - Config parses with no `prompt.context_level` set (defaults to `normal`). - Invalid context levels are rejected by schema. - `minimal` omits AGENTS/IDENTITY/USER/TOOLS sections. - `normal` output matches current behavior. - `detailed` keeps full prompt and extra sections. - `debug` adds an explicit debug section with loaded file paths. - Existing prompt tests continue to pass. ## Risk Notes - Main risk: prompt regressions from changed assembly order. - Mitigation: keep `normal` behavior byte-close to current output and pin tests. ## Suggested Commit Message `feat(prompt): add configurable context levels for system prompt assembly` ## Follow-up PRs 1. Add runtime/session override (`/context minimal|normal|detailed|debug`). 2. Extend levels to tool-list verbosity and memory injection depth. 3. Add per-agent `context_level` override in `agent_configs`.