feat: send tasks to your coding agent through drover #63

Merged
jwarykowski merged 4 commits from feat/agents into pro 2026-10-12 12:35:48 +00:00
jwarykowski commented 2026-10-12 00:14:37 +00:00 (Migrated from github.com)

Closes #60, #61, #62. Makes shepherd the one front door to the agent loop: drover does the work behind it, and Shepherd only ever calls the drover command (drover keeps its config, runs and licence).

Changes

  • shepherd agents setup [--runner claude|codex]: drover init (keeps an existing config), then drover service install, then says what to do next.
  • shepherd agents start|stop|status [--json]: wrap drover service.
  • @ in the board, or shepherd go <ref> [--json]: send an item or subtask to the agent. A run drover holds for it is released; otherwise one starts now, as if the item had just been added (same event data as drover's Shepherd source: title, note, url, board, dir). Saves first so a new item has its id; refuses done items.
    • g was taken (category), so the key is @.
  • Run marks: the board asks drover runs --json every 3 seconds; rows drover is holding show waiting, rows it's working on show running. Nothing shows, and nothing fails, without drover.
  • shepherd pro activate <key> / pro status [--json]: wrap drover license.
  • internal/drover: the bridge. drovertest puts a fake drover on the PATH for tests.
  • Footer notice line (how @ went, cleared on the next key), help grid and help screen, README section, AGENTS.md and the skill.

Replaces the handoff command in #58: one way to send a task to an agent, with every run logged by drover.

Needs (drover)

Testing

  • go vet ./..., go test ./... pass. New tests against a fake drover: go starts a run with the item's data and gives a hand-written item an id first; JSON; done, unknown and missing refs; no drover installed; agents setup with and without an existing config; pass-through of agents/pro; @ sends in the background and reports; run marks.
  • End to end with real binaries (drover #17 and #18 merged locally): drover watch running, shepherd add then shepherd go 1 → the run went through and drover runs --all showed it done. With no drover action, shepherd go exits 1 and points at shepherd agents setup.
Closes #60, #61, #62. Makes `shepherd` the one front door to the agent loop: drover does the work behind it, and Shepherd only ever calls the `drover` command (drover keeps its config, runs and licence). ## Changes - **`shepherd agents setup [--runner claude|codex]`**: `drover init` (keeps an existing config), then `drover service install`, then says what to do next. - **`shepherd agents start|stop|status [--json]`**: wrap `drover service`. - **`@` in the board, or `shepherd go <ref> [--json]`**: send an item or subtask to the agent. A run drover holds for it is released; otherwise one starts now, as if the item had just been added (same event data as drover's Shepherd source: title, note, url, board, dir). Saves first so a new item has its id; refuses done items. - `g` was taken (category), so the key is `@`. - **Run marks**: the board asks `drover runs --json` every 3 seconds; rows drover is holding show **waiting**, rows it's working on show **running**. Nothing shows, and nothing fails, without drover. - **`shepherd pro activate <key>` / `pro status [--json]`**: wrap `drover license`. - **`internal/drover`**: the bridge. `drovertest` puts a fake `drover` on the PATH for tests. - Footer notice line (how `@` went, cleared on the next key), help grid and help screen, README section, AGENTS.md and the skill. Replaces the `handoff` command in #58: one way to send a task to an agent, with every run logged by drover. ## Needs (drover) - `drover runs`, `go`, `run`: jwarykowski/drover#17 - `drover init`: jwarykowski/drover#18 - `drover service`: jwarykowski/drover#19 - `drover license`: jwarykowski/drover#20 (on #11) ## Testing - `go vet ./...`, `go test ./...` pass. New tests against a fake drover: `go` starts a run with the item's data and gives a hand-written item an id first; JSON; done, unknown and missing refs; no drover installed; `agents setup` with and without an existing config; pass-through of `agents`/`pro`; `@` sends in the background and reports; run marks. - End to end with real binaries (drover #17 and #18 merged locally): `drover watch` running, `shepherd add` then `shepherd go 1` → the run went through and `drover runs --all` showed it done. With no drover action, `shepherd go` exits 1 and points at `shepherd agents setup`.
Sign in to join this conversation.
No description provided.