Skip to content

feat: boards (rename + working dirs) + per-item archive - #40

Merged
jwarykowski merged 8 commits into
masterfrom
feat/agentic-tasks
Jul 24, 2026
Merged

feat: boards (rename + working dirs) + per-item archive#40
jwarykowski merged 8 commits into
masterfrom
feat/agentic-tasks

Conversation

@jwarykowski

@jwarykowski jwarykowski commented Jul 18, 2026

Copy link
Copy Markdown
Owner

what

Board ergonomics for shepherd. The branch started as an agentic-tasks
experiment; that has been removed and replaced with work that makes boards
first-class. Net change vs master:

  • rename projects → boards everywhere: CLI verbs (board rename|archive| unarchive|delete|dir), the --board flag and SHEPHERD_BOARD env, JSON
    keys (by_board), TUI modes and stats. "project" is gone from the vocabulary
    (Sentry's own "project" concept is unrelated and lives in drover).
  • board working directories: each board can carry a working dir, stored in
    a sidecar boards.toml (the .md is still rewritten from items, so the dir
    can't live there). New board dir <name> [<path>] CLI verb, a board-dir
    view/edit in the interactive board, and dir in boards --json.
  • per-item archive: archive <ref>... moves whole items into the sibling
    archive.md, with a terminal archived watch event distinct from removed.

removed: agentic tasks

The agentic-task feature (earlier commits on this branch) is stripped:
Item.Agentic/Action, the hold→go→running hand-off, the agentic/
action: quick-add tokens, the TUI ◆ glyph + toggle, and the CLI JSON fields.
Generic per-item status (in-progress cycling) is kept. Agentic tasks now
live in drover, not on a shepherd board — shepherd stays a plain,
hand-editable todo board.

test

gofmt, go vet, go test ./... all clean.

Add an `agentic` boolean to items: a task raised and driven by an autonomous
agent (e.g. drover). The status lifecycle (hold/go/running) is meaningful only
on agentic tasks — a human toggles the status to hand work to, or hold it from,
the agent — so marking the task first-class lets consumers tell agent-managed
items from the board's own todos instead of overloading category.

- quick-add token `agentic` sets the flag; `agentic:false` clears it
- serialised as an `agentic: true` meta line; parsed back on load
- exposed in `list --json` and described in `schema` (property + token), so the
  drift guard keeps the DTO and schema in step
- shown as `*agentic` in the CLI list line

Bumps plugin version to 0.18.0.
Add an optional `action` to items: the effect a consumer (e.g. drover) fires
when an agentic task is released. It is an opaque label, NEVER a command —
shepherd stores and echoes it and interprets nothing; the agent maps the name
to a command in its own trusted config and runs it only on release.

That boundary is deliberate: the todo file is synced and hand-editable, so a
command sitting in it would be an RCE vector, whereas a name resolved against
the agent's allowlist is safe.

- quick-add token `action:<name>` sets it; bare `action:` clears
- serialised as an `action:` meta line; parsed back on load
- exposed in `list --json`, described in `schema` (property + token)
- shown as `→<name>` in the CLI list line
- documented in AGENTS.md and README (agentic tasks section)

Bumps plugin version to 0.19.0.
@jwarykowski jwarykowski changed the title feat: agentic tasks — first-class marker for agent-driven items feat: agentic tasks + action field — agent-driven items Jul 18, 2026
Add a per-item `shepherd archive <ref>...` verb that moves whole items off
the live board into the sibling archive.md — the per-item counterpart to
whole-board `project archive` and the TUI's bulk `c`. Refuses subtask refs,
supports --json echo and the not_found envelope like the other mutators.

watch now retags a "removed" event as "archived" when the vanished id turns
up in archive.md, so a consumer (drover) can tell a terminal archive from a
plain delete. Bump 0.19.0 -> 0.20.0.
@jwarykowski jwarykowski changed the title feat: agentic tasks + action field — agent-driven items feat: agentic tasks, action field + per-item archive Jul 20, 2026
Add C to archive just the item under the cursor (whole items only), alongside
c which sweeps all done items. C is a no-op and dimmed in the legend on a
subtask row, matching the shepherd archive <ref> CLI which rejects subtasks.

Relabel c to 'sweep' to disambiguate the two, document both in the key table,
help page and README archive section, and add the missing shepherd archive
<ref> CLI verb to the README examples and SKILL reference.
Display agentic items prominently and constrain their status control to
the human↔agent hand-off.

- pin agentic items to a `◆ agentic` group above overdue, with a `◆`
  accent marker on every row across all views (list, global, table)
- detail view shows the `agentic` flag and the opaque `action` id
- `tab` toggles only the human-settable states (hold ↔ go); running and
  done are the agent's to set
- once running/done is set the item is locked from the board (tab no-op)
  and dimmed to show it's agent-owned
- `space` (done toggle) is disabled on agentic items so tab is the sole
  status control
Reshapes the branch away from the agentic-task experiment toward board
ergonomics. Committed as one change because the edits are entangled across
the same files (store, cli, tui) and only build together.

- remove the agentic-task feature: Item.Agentic/Action, the hold→go→running
  hand-off vocab (AgenticLocked/ToggleAgenticStatus), the agentic/action:
  quick-add tokens, TUI ◆ glyph + hold/go toggle, CLI JSON agentic/action
  fields, and store serialisation. Generic per-item status (in-progress
  cycling via tab, space toggles done) is kept. Agentic tasks now live in
  drover, not on a shepherd board.
- rename "project" → "board" throughout: CLI verbs and flags (--board,
  SHEPHERD_BOARD, ResolveBoard), JSON keys (by_board), TUI modes, stats.
- add board working directories: a sidecar boards.toml, store BoardDir/
  SetBoardDir, a `board dir <name> [<path>]` CLI verb, and a board-dir
  view/edit in the interactive board.
@jwarykowski jwarykowski changed the title feat: agentic tasks, action field + per-item archive feat: boards (rename + working dirs) + per-item archive Jul 22, 2026
- saveConfig: plain rewrite of managed keys (shepherd owns config.toml);
  drop the comment/unknown-key preservation round-trip
- dedupe three inline json.MarshalIndent blocks into emitJSON
- remove shepherd --stats/--legend launch flags (the `stats` subcommand
  already covers both)
- README: sweep stale projects->boards naming to match current CLI
@jwarykowski
jwarykowski merged commit 7610d95 into master Jul 24, 2026
1 check passed
@jwarykowski
jwarykowski deleted the feat/agentic-tasks branch July 24, 2026 11:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant