# Specification: System Context Exposure ## 1. Overview This track exposes the hidden system prompt from `ai_client.py` to users for customization. **Current Problem:** - `_SYSTEM_PROMPT` in `ai_client.py` (lines ~118-143) is hardcoded - It contains foundational instructions: "You are a helpful coding assistant with access to a PowerShell tool..." - Users can only see/appending their custom portion via `_custom_system_prompt` - The base prompt that defines core agent capabilities is invisible **Goal:** - Make `_SYSTEM_PROMPT` visible and editable in the UI - Allow users to customize the foundational agent instructions - Maintain sensible defaults while enabling expert customization ## 2. Current State Audit ### Hidden System Prompt Location `src/ai_client.py`: ```python _SYSTEM_PROMPT: str = ( "You are a helpful coding assistant with access to a PowerShell tool (run_powershell) and MCP tools (file access: read_file, list_directory, search_files, get_file_summary, web access: web_search, fetch_url). " "When calling file/directory tools, always use the 'path' parameter for the target path. " ... ) ``` ### Related State - `_custom_system_prompt` - user-defined append/injection - `_get_combined_system_prompt()` - merges both - `set_custom_system_prompt()` - setter for user portion ### UI Current State - AI Settings → System Prompts shows global and project prompts - These are injected as `[USER SYSTEM PROMPT]` after `_SYSTEM_PROMPT` - But `_SYSTEM_PROMPT` itself is never shown ## 3. Functional Requirements ### 3.1 Base System Prompt Visibility - Add "Base System Prompt" section in AI Settings - Display current `_SYSTEM_PROMPT` content - Allow editing with syntax highlighting (it's markdown text) ### 3.2 Default vs Custom Base - Maintain default base prompt as reference - User can reset to default if they mess it up - Show diff between default and custom ### 3.3 Persistence - Custom base prompt stored in config or project TOML - Loaded on app start - Applied before `_custom_system_prompt` in `_get_combined_system_prompt()` ### 3.4 Provider Considerations - Some providers handle system prompts differently - Verify behavior across Gemini, Anthropic, DeepSeek - May need provider-specific base prompts ## 4. Data Model ### 4.1 Config Storage ```toml [ai_settings] base_system_prompt = """...""" use_default_base = true ``` ### 4.2 Combined Prompt Order 1. `_SYSTEM_PROMPT` (or custom base if enabled) 2. `[USER SYSTEM PROMPT]` (from AI Settings global/project) 3. Tooling strategy (from bias engine) ## 5. UI Design **Location:** AI Settings panel → System Prompts section ``` ┌─ System Prompts ──────────────────────────────┐ │ ☑ Use Default Base System Prompt │ │ │ │ Base System Prompt (collapsed by default): │ │ ┌──────────────────────────────────────────┐ │ │ │ You are a helpful coding assistant... │ │ │ └──────────────────────────────────────────┘ │ │ │ │ [Show Editor] [Reset to Default] │ │ │ │ Global System Prompt: │ │ ┌──────────────────────────────────────────┐ │ │ │ [current global prompt content] │ │ │ └──────────────────────────────────────────┘ │ └──────────────────────────────────────────────┘ ``` When "Show Editor" clicked: - Expand to full editor for base prompt - Syntax highlighting for markdown - Character count ## 6. Acceptance Criteria - [ ] `_SYSTEM_PROMPT` visible in AI Settings - [ ] User can edit base system prompt - [ ] Changes persist across app restarts - [ ] "Reset to Default" restores original - [ ] Provider APIs receive modified prompt correctly - [ ] No regression in agent behavior with defaults ## 7. Out of Scope - Changes to actual agent behavior logic - Changes to tool definitions or availability - Changes to aggregation or context handling ## 8. Dependencies - `ai_client.py` - `_SYSTEM_PROMPT` and `_get_combined_system_prompt()` - `gui_2.py` - AI Settings panel rendering - `models.py` - Config structures