Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
764f4e8
✨ feat: live workflow supervision (herdr) — steer, hijack, effort, su…
N0xMare Jul 26, 2026
9cd8c7f
🔧 chore(rebase): refresh lockfiles, declarations and CLI flag docs
Jul 30, 2026
d7ef418
📝 docs(nav): add herdr, workflow-supervisor, token-free-visibility-te…
roninjin10 Jul 30, 2026
f39e2b1
🔒 fix(agents): stop leaking settings-file secrets onto Claude Code argv
roninjin10 Jul 30, 2026
847efb9
🔧 fix(db): renumber conflicting migration ids to 0035/0036
roninjin10 Jul 30, 2026
bc0c226
🐛 fix: harden Herdr integration after Effect 4 rebase
N0xMare Jul 31, 2026
f762ce0
🧪 test(cli): exercise detached resume with a real stub
roninjin10 Aug 1, 2026
0c033c5
🧪 test(testing): gate migration gaps and campaign artifacts
roninjin10 Aug 1, 2026
1979d73
🔧 chore: refresh rebased generated bundles
roninjin10 Aug 1, 2026
d0e958f
🐛 fix(cli): report actual full UI browser state
roninjin10 Aug 1, 2026
891ba2b
🔒 fix(cli,herdr): harden run ownership and approval resume
roninjin10 Aug 1, 2026
9c45bad
🧪 test(cli): stabilize detached descendant resume
roninjin10 Aug 1, 2026
13fe769
🧪 test(agents): read private Claude settings fixtures
roninjin10 Aug 1, 2026
cbb1137
📝 fix(docs): align Herdr feature evidence schema
roninjin10 Aug 1, 2026
1942a26
🐛 fix(cli): keep tail JSONL event-only
roninjin10 Aug 1, 2026
7d6c44a
🔧 chore: refresh rebased declaration bundles
roninjin10 Aug 1, 2026
846e508
📝 fix(docs): synchronize Herdr feature inventory
roninjin10 Aug 1, 2026
63996ba
🧪 test(cli): exercise detached resume with real spawn
roninjin10 Aug 1, 2026
1a9fc90
🐛 fix(agents): preserve Codex array config with effort
roninjin10 Aug 1, 2026
787d6b7
🐛 fix(steer): fence enqueue against terminal runs
roninjin10 Aug 1, 2026
6ce8b4d
🐛 fix(cli): resume built-in runs after decisions
roninjin10 Aug 1, 2026
6dda891
🧪 test: make overview and Herdr checks portable
roninjin10 Aug 1, 2026
ba00d6a
🐛 fix(db): upgrade existing external SQLite attempts with the effort …
roninjin10 Aug 2, 2026
14679ce
🐛 fix(steer): expire queued steers inside the terminal cancel transac…
roninjin10 Aug 2, 2026
a8ec2fc
🐛 fix(herdr): publish synchronized per-subpath declarations
roninjin10 Aug 2, 2026
c1d7279
🐛 fix(cli): quote herdr stub shell text
roninjin10 Aug 2, 2026
45e15f2
🐛 fix(engine): make steer finalization durable
roninjin10 Aug 2, 2026
5638f2e
🔧 fix(db): move Herdr migrations to 0039 and 0040
Aug 11, 2026
999d352
🐛 fix(supervision): preserve typed steer errors and atomic resume fix…
Aug 11, 2026
39ba898
🔧 chore(herdr): align rebased integration with current packages
Aug 11, 2026
77ce5a4
fix(supervision): harden rebased herdr workflow support
Aug 11, 2026
81a04be
🐛 fix(herdr): gate real-server suites on protocol, not just the binary
Aug 11, 2026
db7d144
📝 fix(docs): describe the real herdr protocol-mismatch behavior
Aug 11, 2026
4193e6d
🔧 chore(cli): keep the dependency list alphabetical
Aug 11, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
81 changes: 81 additions & 0 deletions .smithers/spec/content/features/herdr-supervision.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
# Herdr supervision, steer, and hijack

> **Status:** Partial | **Priority:** P1 | **Owner:** smithers-maintainers | **Group:** Recover & replay

Mirror a run into a herdr terminal workspace and supervise it beside your coding agent: a pane per agent node, a cockpit outline, one-key steer, live hijack, first-class reasoning effort, and `approve/deny` auto-resume. Fully degradable.

## What you can do

Watch and steer long-running agent workflows from the same terminal as the agent driving them, without leaving the CLI.

## Capabilities

### Herdr workspace mirroring

Mirror any run into a Herdr workspace with `smithers up` --herdr or smithers herdr attach.

### Portable workflow supervisor

Inspect live workflow state with smithers supervisor and its top alias.

### Durable steer queue

Queue an instruction against a running node with smithers steer.

### Live session handoff

Hand off a live agent session with `smithers hijack` and resume the workflow afterward.

### In-pane approvals

Answer approval gates with `smithers approve` --watch and auto-resume parked detached runs.

## Endpoints and commands

- `CLI smithers herdr` ([docs](docs/integrations/herdr.mdx))

## Related docs

- [herdr integration](docs/integrations/herdr.mdx)
- [workflow supervisor](docs/guide/workflow-supervisor.mdx)
- [watch and steer](docs/guide/watch-and-steer.mdx)

## Test cases

- `packages/herdr/tests/createHerdrRunSurface.test.js`
- `packages/herdr/tests/cockpitPolicy.test.js`
- `apps/cli/tests/herdr-cli.e2e.test.js`
- `apps/cli/tests/herdr-full-loop.e2e.test.js`
- `apps/cli/tests/smithers-top.test.js`
- `apps/cli/tests/steer-command.e2e.test.js`
- `apps/cli/tests/tail-steer-keys.test.js`
- `apps/cli/tests/approve-watch.e2e.test.js`

## Observability

- SteerQueued and SteerExpired carry runId, nodeId, and steerId; SteerConsumed additionally carries attempt and iteration attribution.
- RunHijackRequested / RunHijacked mark the park-and-hand-off transition; attempt effort is queryable on \_smithers\_attempts.effort.

## Debugging

- smithers herdr status reports server version, protocol, and client compatibility; a missing server emits one stderr warning and the run continues unchanged.
- `smithers inspect` <runId> lists `queued/consumed/expired` steers; `smithers why` <runId> shows steers alongside blockers.

## Architecture

- `packages/herdr` owns the herdr client and HerdrRunSurface; it renders and relays only — Smithers keeps execution, isolation, and durability.
- `apps/cli/src/herdr.js` mirrors runs into `workspaces/panes`; smithers-top.js is the portable workflow supervisor (gateway-sourced by default, --direct for local store).
- `packages/engine/src/steers.js` queues and expires steers; the engine consumes them at the next generate() boundary.

## Fixes and diffs

- 2026-07-26 initial record: herdr supervision, steer, hijack, first-class effort, and `approve/deny` auto-resume.
- `packages/herdr/src/HerdrRunSurface.ts`
- `apps/cli/src/herdr.js`
- `apps/cli/src/smithers-top.js`
- `apps/cli/src/steer.js`
- `packages/engine/src/steers.js`

## Open gaps

- Mid-turn steer injection (landing an instruction between an agent's tool calls) is deferred; steers apply at the next generate() boundary.
2 changes: 1 addition & 1 deletion .smithers/spec/content/features/workflow-testing.md
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ Integration and e2e harnesses require executable database and process adapters a
## Test cases

- `packages/testing/tests/simulate.test.ts`
- `packages/testing/tests/fakeAgent.test.ts`
- `packages/testing/tests/unit/fakeAgent.test.ts`
- `packages/testing/tests/runtimeConformance.test.ts`
- `packages/testing/tests/replay-identity-fresh-process.test.ts`
- `e2e/testing-framework/real-db-integration.test.ts`
Expand Down
92 changes: 91 additions & 1 deletion .smithers/spec/features.json
Original file line number Diff line number Diff line change
Expand Up @@ -2721,7 +2721,7 @@
{
"tests": [
"packages/testing/tests/simulate.test.ts",
"packages/testing/tests/fakeAgent.test.ts",
"packages/testing/tests/unit/fakeAgent.test.ts",
"packages/testing/tests/runtimeConformance.test.ts",
"packages/testing/tests/replay-identity-fresh-process.test.ts",
"e2e/testing-framework/real-db-integration.test.ts",
Expand Down Expand Up @@ -2976,5 +2976,95 @@
"href": "docs/rpc/cron-create.mdx"
}
]
},
{
"tests": [
"packages/herdr/tests/createHerdrRunSurface.test.js",
"packages/herdr/tests/cockpitPolicy.test.js",
"apps/cli/tests/herdr-cli.e2e.test.js",
"apps/cli/tests/herdr-full-loop.e2e.test.js",
"apps/cli/tests/smithers-top.test.js",
"apps/cli/tests/steer-command.e2e.test.js",
"apps/cli/tests/tail-steer-keys.test.js",
"apps/cli/tests/approve-watch.e2e.test.js"
],
"observability": [
"SteerQueued and SteerExpired carry runId, nodeId, and steerId; SteerConsumed additionally carries attempt and iteration attribution.",
"RunHijackRequested / RunHijacked mark the park-and-hand-off transition; attempt effort is queryable on _smithers_attempts.effort."
],
"debug": [
"smithers herdr status reports server version, protocol, and client compatibility; a missing server emits one stderr warning and the run continues unchanged.",
"smithers inspect <runId> lists queued/consumed/expired steers; smithers why <runId> shows steers alongside blockers."
],
"architecture": [
"packages/herdr owns the herdr client and HerdrRunSurface; it renders and relays only \u2014 Smithers keeps execution, isolation, and durability.",
"apps/cli/src/herdr.js mirrors runs into workspaces/panes; smithers-top.js is the portable workflow supervisor (gateway-sourced by default, --direct for local store).",
"packages/engine/src/steers.js queues and expires steers; the engine consumes them at the next generate() boundary."
],
"changes": [
"2026-07-26 initial record: herdr supervision, steer, hijack, first-class effort, and approve/deny auto-resume."
],
"diffHints": [
"packages/herdr/src/HerdrRunSurface.ts",
"apps/cli/src/herdr.js",
"apps/cli/src/smithers-top.js",
"apps/cli/src/steer.js",
"packages/engine/src/steers.js"
],
"missing": [
"Mid-turn steer injection (landing an instruction between an agent's tool calls) is deferred; steers apply at the next generate() boundary."
],
"id": "herdr-supervision",
"title": "Herdr supervision, steer, and hijack",
"summary": "Mirror a run into a herdr terminal workspace and supervise it beside your coding agent: a pane per agent node, a cockpit outline, one-key steer, live hijack, first-class reasoning effort, and approve/deny auto-resume. Fully degradable.",
"status": "partial",
"priority": "p1",
"owner": "smithers-maintainers",
"tier": "feature",
"group": "Recover & replay",
"userValue": "Watch and steer long-running agent workflows from the same terminal as the agent driving them, without leaving the CLI.",
"capabilities": [
{
"title": "Herdr workspace mirroring",
"detail": "Mirror any run into a Herdr workspace with smithers up --herdr or smithers herdr attach."
},
{
"title": "Portable workflow supervisor",
"detail": "Inspect live workflow state with smithers supervisor and its top alias."
},
{
"title": "Durable steer queue",
"detail": "Queue an instruction against a running node with smithers steer."
},
{
"title": "Live session handoff",
"detail": "Hand off a live agent session with smithers hijack and resume the workflow afterward."
},
{
"title": "In-pane approvals",
"detail": "Answer approval gates with smithers approve --watch and auto-resume parked detached runs."
}
],
"endpoints": [
{
"method": "CLI",
"path": "smithers herdr",
"doc": "docs/integrations/herdr.mdx"
}
],
"links": [
{
"href": "docs/integrations/herdr.mdx",
"label": "herdr integration"
},
{
"href": "docs/guide/workflow-supervisor.mdx",
"label": "workflow supervisor"
},
{
"href": "docs/guide/watch-and-steer.mdx",
"label": "watch and steer"
}
]
}
]
Loading
Loading