name: sync-docs description: Keep the agent-facing manual under docs/ in sync with the implementation. Diff-driven from a committed commit baseline; makes conservative, minimal edits only where the code has actually changed user-facing behavior. Run on demand or as part of release prep.
Sync Docs
Keep the agent-facing documentation under docs/ accurate as the implementation
evolves. This skill is diff-driven (it only looks at source that changed since
a committed baseline) and deliberately conservative (it makes the smallest
edits needed to restore accuracy — it does not rewrite, restyle, or expand the
docs).
Read docs/README.md first for the doc set's structure and intent. The docs are
written for AI agents to read, are plain Markdown, and are designed to be
verifiable: each file lists Keywords/Related, and the reference/ files name
their source-of-truth.
Guiding principle: be conservative
The goal is to keep facts correct with low churn, not to perfect the prose.
- Default to leaving a doc unchanged. Only edit when a documented fact is now demonstrably wrong, a documented feature was removed, or a clearly significant new user-facing feature/shortcut/setting was added.
- Make the smallest possible edit. Fix the wrong cell/line; don't reflow tables, reorder sections, or reword surrounding prose.
- Tolerate a wide range. Ignore internal refactors, renames, and code reshuffles that don't change user-facing behavior. Ignore stylistic/wording differences. Approximate phrasings ("roughly", "typically", "best-effort") are fine — don't tighten them just because you can.
- Don't grow the doc set casually. Do not add new sections or new files unless a genuinely new top-level feature appeared. If a change is large (a new feature that needs a whole new component manual, or a structural overhaul), do not do it silently — describe it in the report and let the human decide.
- Keep "source of truth" pointers correct if files move or are renamed.
- Prefer touching few files per run. If you find yourself about to edit many files, stop and re-read this section — most of those are probably tolerable.
Steps
Read the baseline. Open
docs/.sync-meta.jsonand read thelast_synced_commitfield (the last-synced commit hash).Diff the implementation since the baseline. List source files that changed:
git diff --name-only <baseline_commit>..HEAD -- \ supacode/ ProwlCLI/ Package.swift Resources/git-wtIf nothing relevant changed, report "Docs up to date as of
<HEAD>." then go to step 6 (bump the baseline) and stop.Map changed source → docs to re-check. Use this table; only open the docs whose source actually changed. (Most changes touch zero or one doc.)
Source that changed Docs to re-check supacode/App/AppShortcuts.swift,supacode/Commands/**reference/keyboard-shortcuts.md(+ shortcut mentions in the relevantcomponents/*.md)supacode/Features/Settings/Models/GlobalSettings.swift,RepositorySettings.swift,UserRepositorySettings.swiftreference/settings-fields.md,components/settings.md,components/custom-actions.mdProwlCLI/**,supacode/CLIService/**components/cli.mdsupacode/Clients/CLIInstall/**components/cli.md,components/settings.mdsupacode/Features/Repositories/**,supacode/Domain/Worktree*.swift,supacode/Domain/Repository*.swift,supacode/Clients/Git/**,Resources/git-wtcomponents/repositories-and-worktrees.mdsupacode/Features/Terminal/**,supacode/Infrastructure/Ghostty/**components/terminal.mdsupacode/Features/Canvas/**components/canvas.mdsupacode/Features/Shelf/**components/shelf.mdsupacode/Features/CommandPalette/**components/command-palette.mdsupacode/Features/ActiveAgents/**components/active-agents.mdsupacode/Domain/AgentDetection/**,supacode/Infrastructure/AgentDetection/**components/agent-detection.mdsupacode/Clients/Notifications/**,WorktreeTerminalState+Notifications.swift,supacode/Clients/Dock/**components/notifications.mdsupacode/Features/DiffView/**components/diff-view.mdsupacode/Clients/Github/**components/github-pull-requests.mdsupacode/Clients/Updates/**,supacode/Features/Updates/**components/updates.mdview-mode switching ( supacode/Features/App/**,ContentView.swift)components/view-modes.mdoverview.md,concepts.md, andREADME.mdonly need touch-ups for the addition/removal of a major feature — leave them alone otherwise.Verify against the source of truth. For each doc identified, check its falsifiable claims against the authoritative source — not against the diff summary — and apply minimal edits per the conservative rules above:
Claim type Source of truth Keyboard shortcuts (key + modifiers + command ID, remappability) supacode/App/AppShortcuts.swift; menu wiring insupacode/Commands/*.swiftSettings field names / types / defaults supacode/Features/Settings/Models/GlobalSettings.swift,RepositorySettings.swiftCLI commands / flags / ranges / error codes / JSON fields ProwlCLI/**andsupacode/CLIService/**(and, if the CLI is installed,prowl <cmd> --helpfor confirmation)Feature behavior / entry points the corresponding supacode/Features/**orsupacode/Clients/**When in doubt whether something is a real, user-facing change, leave the doc as-is and flag it in the report rather than editing.
Check internal links if files moved. If you renamed/added/removed any doc file, re-run a quick relative-link check so nothing in
docs/is broken.Bump the baseline. Set
last_synced_commit(andlast_synced_date,note) indocs/.sync-meta.jsonto the currentHEAD. This file is committed to git so the baseline persists across sessions and machines — never leave it uncommitted.Report. Output a short summary:
## Docs Sync Baseline: <old_hash> → <new_hash> Source files changed in range: <count> ### Updated - docs/<file> — <one-line what & why> ### Checked, left unchanged (tolerated) - <area> — <why it didn't need a doc change> ### Needs human decision (not applied) - <large/ambiguous change> — <what & suggested doc action>
Committing
- Standalone run: stage and commit only
docs/**(which includesdocs/.sync-meta.json); nevergit add .. If anything indocs/changed and you're not onmain, open a PR targetingonevcat/Prowl. - As part of release prep (the
releaseskill, onmain): commit the doc +docs/.sync-meta.jsonchanges as their own commit before the version bump and tag — e.g.git commit -m "Sync docs for <VERSION>". Do not leave them staged/uncommitted:release.shaborts on a dirty working tree, and the doc commit must already be onmainso it becomes an ancestor of the tag and ships inside the release. Bump/tag happen after, never before. - Always bump and commit
docs/.sync-meta.jsoneven when no doc edits were needed, so the next run starts from a tight diff range. The baseline records the commit the docs were verified against (the current HEAD at run time) — for a release that is the code being shipped, captured before the later doc/bump/tag commits, which is correct (those commits touch no implementation files).