|
| 1 | +# BetterHarness: Core Harness Skills + Slim System Prompt |
| 2 | + |
| 3 | +## Context |
| 4 | + |
| 5 | +The current system prompt (`system_prompt.rs`) is ~470 lines and embeds full documentation for 50+ tools inline. This bloats every API request, consuming tokens and making prompt maintenance fragile. The goal is to extract tool documentation into **Core Skills** — built-in Markdown skill files shipped with the app — and reduce the system prompt to a minimal checklist + compact tool-name index. The Skills panel UI is extended to separate Core (built-in) from User (installed) skills. |
| 6 | + |
| 7 | +--- |
| 8 | + |
| 9 | +## Overview of Changes |
| 10 | + |
| 11 | +### 1. Core Harness Skill Files (new embedded assets) |
| 12 | +Create `src-tauri/src/agent/harness_skills/` with 6 Markdown skill files (embedded via `include_str!`): |
| 13 | + |
| 14 | +| File | Covers | |
| 15 | +|---|---| |
| 16 | +| `memory.md` | `memory_*`, `memory_context_*`, `image_context_*` | |
| 17 | +| `plans.md` | `plan_*`, `plan_context_*` | |
| 18 | +| `tasks.md` | `task_*` | |
| 19 | +| `rules-skills.md` | `rules_*`, `skills_*` | |
| 20 | +| `file-access.md` | `list_workspace_files`, `read_workspace_file`, `list_tools` | |
| 21 | +| `harness.md` | `harness.*` client tools | |
| 22 | + |
| 23 | +Each file contains usage guidance, parameter notes, and patterns — exactly as a user-authored `SKILL.md` would. |
| 24 | + |
| 25 | +### 2. Backend: Add `Core` skill source + load harness skills |
| 26 | + |
| 27 | +**`src-tauri/src/skills_rules/types.rs`** |
| 28 | +- Add `Core` variant to `SkillSourceKind` enum |
| 29 | + |
| 30 | +**`src-tauri/src/skills_rules/store.rs`** |
| 31 | +- Add `CORE_SKILLS: &[(&str, &str)]` array — pairs of `(name, content)` using `include_str!` |
| 32 | +- `list_skills()` prepends core skills into the result (enabled state from workspace index, default `true`) |
| 33 | +- `read_skill()` serves core skill content from the embedded array |
| 34 | +- Core skills cannot be removed (error on `remove_skill` for core names) |
| 35 | +- `set_skill_enabled` works for both core and user skills (persisted in workspace index) |
| 36 | + |
| 37 | +**`src-tauri/src/agent/system_prompt.rs`** — major reduction (~470 → ~240 lines): |
| 38 | +- Remove all per-tool documentation sections |
| 39 | +- Keep: workspace scope, security policy, turn checklist |
| 40 | +- Replace tool catalog with compact grouped name list (~25 lines) |
| 41 | +- Add: *"Call `skills_read` with a core skill name to get full usage guidance"* |
| 42 | + |
| 43 | +**`src/skills_rules_wire.rs`** |
| 44 | +- Add `Core` variant to `SkillSourceKind` (mirrors backend type) |
| 45 | + |
| 46 | +### 3. Frontend: Skills Tab — Core / User tabs |
| 47 | + |
| 48 | +**`src/workbench/skills_rules_panel/skills_tab.rs`** |
| 49 | +- Add `SkillsView` signal: `Core | User` (default: `Core`) |
| 50 | +- Render a two-button sub-tab strip below the header |
| 51 | +- Filter displayed skills by view; "Install skill" button only visible in User view |
| 52 | + |
| 53 | +**`src/workbench/skills_rules_panel/skill_card.rs`** |
| 54 | +- Add `"core"` badge with `blx-sr-card__badge--core` CSS class |
| 55 | +- Remove button suppressed for core skills (`is_core` flag) |
| 56 | + |
| 57 | +**I18n strings added** (all 13 locale files): |
| 58 | +- `SrSkillsTabCore` — "Core" / locale equivalents |
| 59 | +- `SrSkillsTabUser` — "User" / locale equivalents |
| 60 | +- `SrSourceCore` — "core" |
| 61 | + |
| 62 | +--- |
| 63 | + |
| 64 | +## Critical Files |
| 65 | + |
| 66 | +| File | Change | |
| 67 | +|---|---| |
| 68 | +| `src-tauri/src/skills_rules/types.rs` | Add `Core` to `SkillSourceKind` | |
| 69 | +| `src-tauri/src/skills_rules/store.rs` | Embed + serve core skills, merge with index | |
| 70 | +| `src-tauri/src/skills_rules/install.rs` | Add `Core` arm to install match | |
| 71 | +| `src-tauri/src/agent/system_prompt.rs` | Reduce to ~240 lines; add core skill reference | |
| 72 | +| `src-tauri/src/agent/harness_skills/*.md` | 6 new embedded skill files | |
| 73 | +| `src/skills_rules_wire.rs` | Add `Core` to `SkillSourceKind` | |
| 74 | +| `src/workbench/skills_rules_panel/skills_tab.rs` | Core/User sub-tab strip + filtering | |
| 75 | +| `src/workbench/skills_rules_panel/skill_card.rs` | Core badge + no-remove guard | |
| 76 | +| `src/workbench/skills_rules_panel/install_dialog.rs` | `Core` arm in source kind matches | |
| 77 | +| `src/i18n/locales/*.rs` (all 13 locales) | 3 new I18n keys | |
| 78 | + |
| 79 | +## Tasks |
| 80 | + |
| 81 | +- [x] `create-skill-files` - Create 6 harness skill .md files in src-tauri/src/agent/harness_skills/ |
| 82 | +- [x] `extend-source-kind` - Add Core variant to SkillSourceKind (backend + frontend wire) |
| 83 | +- [x] `update-store` - Embed + serve core skills, guard remove, enable/disable |
| 84 | +- [x] `slim-system-prompt` - Replace inline tool docs with compact list + core skill reference |
| 85 | +- [x] `i18n-keys` - Add SrSkillsTabCore, SrSkillsTabUser, SrSourceCore to all locales |
| 86 | +- [x] `skill-card-ui` - Core badge + remove button suppression |
| 87 | +- [x] `skills-tab-ui` - Core/User sub-tab strip with filtering |
| 88 | +- [x] `fix-match-exhaustive` - Add Core arms to install.rs and install_dialog.rs |
| 89 | +- [x] `update-tests` - Fix store tests to account for core skills always being present |
0 commit comments