Ship built-in operator skills, seeded on API startup

Seven skills now travel with Handler itself and are seeded into the
managed skill store when the API boots: gate recovery, the test
authorship standard, checkpoint quality, memory discipline, mise-task
rules, scheduled-run continuity, and secrets hygiene. They cover the
judgment layer the hard gates cannot enforce — the gates check that
tests pass, not that an agent responded to a blocked gate sensibly or
kept credentials out of logs.

Seeding is idempotent by name: existing rows are never touched, so
operator edits and enable/disable choices survive every upgrade;
deleting a built-in restores it as shipped on the next start (disable
is the supported off-switch). Rows are created shared and enabled, so
they sync to every worker like any managed skill and remain
admin-editable from the dashboard or the mobile app. Seeding failures
log and never block the API from serving.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01731mKtVzsfeT4Vi3TvkR48
This commit is contained in:
Claude
2026-08-13 14:43:30 +00:00
parent 8463da45d2
commit b1cdc3d55d
5 changed files with 343 additions and 0 deletions
+6
View File
@@ -334,6 +334,12 @@ What the dashboard can now do (all state-changing actions require `ADMIN_TOKEN`)
Headless means nobody can answer questions mid-install, so the wrapped prompt makes the
choices a human would be asked — always user scope, the instructions' defaults — and
reports them in the command result for after-the-fact review.
- **Built-in operator skills** ship with Handler and are seeded into the managed store
on API startup (`handler.builtin_skills`): gate recovery, testing standard,
checkpoint quality, memory discipline, mise-task rules, scheduled-run continuity,
and secrets hygiene — the judgment layer the hard gates can't enforce. Seeding is
idempotent by name, so operator edits and disables survive upgrades; deleting one
brings it back as shipped on the next start (disable is the off-switch).
The command queue is exposed over HTTP as `POST …/agents/spawn`, `POST …/agents/{n}/kill`,
`POST …/approvals`, `POST …/forge-init`, `POST …/poll-ci`, `POST …/sync`,