Skip to content

feat(kanban): 1:1 port of Hermes multi-agent kanban board - #56

Open
kleopasevan wants to merge 1 commit into
mainfrom
feat/kanban-port
Open

feat(kanban): 1:1 port of Hermes multi-agent kanban board#56
kleopasevan wants to merge 1 commit into
mainfrom
feat/kanban-port

Conversation

@kleopasevan

Copy link
Copy Markdown
Member

Summary

Adds a durable SQLite-backed multi-agent task board to rantaiclaw at v1 feature parity with Hermes kanban — every CLI verb, slash verb, and kanban_* agent tool maps 1:1 so existing playbooks transfer without rewrites.

This is the engineering primitive Hermes calls "the shape that covers the workloads delegate_task can't": research triage, scheduled ops, digital twins, engineering pipelines, fleet farming. Tasks are SQLite rows, handoffs are SQLite rows, and every worker is a full process with its own identity.

What ships

  • Storage kernel (src/kanban/) — schema (tasks, task_links, task_comments, task_events, task_runs, kanban_notify_subs) byte-compatible with Hermes v1; WAL + BEGIN IMMEDIATE + CAS UPDATEs; multi-board (per-project) isolation; runs attempt history with structured handoff; gateway notify-subscribe table; triage specifier; in-process dispatcher loop with set_spawner extension point.
  • CLI (rantaiclaw kanban …) — init, create, list, show, assign, link, unlink, claim, comment, complete, block, unblock, archive, tail, watch, heartbeat, runs, dispatch, stats, context, specify, assignees, notify-{subscribe,list,unsubscribe}, boards {list,create,switch,show,rename,rm}, and the --board <slug> one-shot scope flag.
  • Slash (/kanban … in TUI) — same clap subcommand tree as the CLI; output captured into a writer so any channel adapter can deliver it as a message.
  • 9 agent tools (kanban_show, kanban_list, kanban_complete, kanban_block, kanban_heartbeat, kanban_comment, kanban_create, kanban_link, kanban_unblock) — env-gated availability (RANTAICLAW_KANBAN_TASK for workers, RANTAICLAW_KANBAN_ORCHESTRATOR for orchestrators) so non-kanban sessions see zero tool bloat.
  • Docsdocs/kanban.md user guide, docs/kanban/skills/{kanban-worker,kanban-orchestrator}.md pattern docs, docs/superpowers/specs/2026-05-16-kanban-port-design.md design rationale.

Non-goals (called out explicitly in spec + user guide)

  • React/web dashboard. Rantaiclaw has no web-dashboard subsystem yet; the REST shape is reserved for when one lands.
  • Auxiliary-LLM-driven specify. Ships with a deterministic template; auxiliary-provider wire-up is a follow-up that doesn't touch the CLI surface.
  • Workspace subprocess spawning. Schema persists workspace_kind / workspace_path and the dispatcher exposes the env vars; the actual worker spawn is a Dispatcher::set_spawner(|task_id| { … }) away once the team picks the worker model.

Risk + rollback

  • Blast radius: one new top-level module (src/kanban/), one new clap subtree, 9 tool registrations, 1 TUI slash handler. No edits to existing critical paths (gateway / security / agent loop).
  • Storage: writes only to $RANTAICLAW_HOME/kanban.db (default ~/.rantaiclaw/kanban.db) and ~/.rantaiclaw/kanban/. Revert + delete those paths to fully roll back.
  • Migration: schema is purely additive on first connect. No pre-existing user data is mutated.

Verification

cargo check --lib                       # clean
cargo check --bin rantaiclaw            # clean
cargo test --lib kanban                 # 27 passed; 0 failed
cargo clippy --lib --no-deps            # 0 errors (style nags only; on par with existing repo)

Full-crate cargo test deliberately not run locally — it OOMs the dev box (matrix-sdk, wa-rs, all features). CI will exercise it.

Test plan

  • Reviewer runs rantaiclaw kanban init then rantaiclaw kanban create \"test\" --assignee me, confirms ~/.rantaiclaw/kanban.db exists with a task row.
  • Reviewer runs rantaiclaw kanban boards create alpha --switch then rantaiclaw kanban list — confirms isolation from default.
  • Reviewer runs rantaiclaw kanban dispatch on a ready task — confirms it claims (status → running) without a spawner.
  • Reviewer runs /kanban list from the TUI — confirms slash output matches CLI.
  • Reviewer reads docs/kanban.md and docs/superpowers/specs/2026-05-16-kanban-port-design.md.

🤖 Generated with Claude Code

Durable SQLite-backed task board for multi-profile, multi-project
collaboration — feature parity with Hermes Agent kanban v1.

What ships:

- src/kanban/{store,schema,paths,boards,runs,notify,events,context,
  dispatcher,notifier,specify,cli,slash}.rs — kernel + lifecycle
  (claim/heartbeat/complete/block/unblock/specify/archive), boards
  multi-project, runs attempt history, gateway notify-subscribe,
  triage specifier (template stub), in-process dispatcher loop with
  pluggable worker spawn.
- `rantaiclaw kanban …` clap subcommand surface — every Hermes verb
  (init/create/list/show/assign/link/comment/complete/block/unblock/
  archive/tail/watch/heartbeat/runs/dispatch/stats/context/specify/
  notify-{subscribe,list,unsubscribe}/boards) and the --board scope flag.
- `/kanban …` slash command (TUI command router) sharing the same clap
  tree; output captured into a writer so the channel can deliver it as a
  message.
- 9 agent tools (kanban_show, kanban_list, kanban_complete, kanban_block,
  kanban_heartbeat, kanban_comment, kanban_create, kanban_link,
  kanban_unblock) with env-gated availability so non-worker sessions see
  zero kanban tool bloat.
- Schema is byte-compatible with Hermes v1 (tasks, task_links,
  task_comments, task_events, task_runs, kanban_notify_subs) — same
  columns, same indexes, same WAL + BEGIN IMMEDIATE concurrency model.
- 27 unit + integration tests covering schema idempotence, parent-gates-
  status, claim mutual exclusion, idempotency-key dedup, link cycle
  rejection, board isolation, slash parsing, dispatcher tick, notifier
  delivery, triage promotion.
- docs/kanban.md user guide + docs/kanban/skills/{worker,orchestrator}.md
  pattern docs + docs/superpowers/specs/2026-05-16-kanban-port-design.md
  design rationale.

Out of scope (called out in spec + user guide):

- React/web kanban dashboard (rantaiclaw has no web dashboard subsystem).
- Auxiliary-LLM-driven specify (deterministic template ships; LLM wire-up
  is a 50-line follow-up).
- Workspace subprocess spawning (schema persists workspace_kind /
  workspace_path; dispatcher exposes env vars; Dispatcher::set_spawner
  hook ready for whatever worker model the team picks).

Risk + rollback:

- New top-level module + clap subtree + 9 tool registrations + 1 TUI
  slash handler. Existing critical paths (gateway, security, agent loop)
  untouched.
- Storage: writes only to $RANTAICLAW_HOME/kanban.db (default
  ~/.rantaiclaw/kanban.db) and ~/.rantaiclaw/kanban/. Revert + delete
  those paths to fully roll back.
- Migration: schema is purely additive on first connect. No pre-existing
  user data is mutated.

Verification:
  cargo check --lib                       # clean
  cargo check --bin rantaiclaw            # clean
  cargo test --lib kanban                 # 27 passed; 0 failed
  cargo clippy --lib --no-deps            # 0 errors

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

PR intake checks found warnings (non-blocking)

Fast safe checks found advisory issues. CI lint/test/build gates still enforce merge quality.

  • Missing required PR template sections: ## Validation Evidence (required), ## Security Impact (required), ## Privacy and Data Hygiene (required), ## Rollback Plan (required)
  • Incomplete required PR template fields: summary problem, summary why it matters, summary what changed, validation commands, security risk/mitigation, privacy status, rollback plan

Action items:

  1. Complete required PR template sections/fields.
  2. Remove tabs, trailing whitespace, and merge conflict markers from added lines.
  3. Re-run local checks before pushing:
    • ./scripts/ci/rust_quality_gate.sh
    • ./scripts/ci/rust_strict_delta_gate.sh
    • ./scripts/ci/docs_quality_gate.sh

Run logs: https://github.com/RantAI-dev/RantAIClaw/actions/runs/25967917731

Detected blocking line issues (sample):

  • none

Detected advisory line issues (sample):

  • none

@github-actions github-actions Bot added docs Auto scope: docs/markdown/template files changed. dependencies Auto scope: dependency manifest/lock/policy changed. core Auto scope: root src/*.rs files changed. tool Auto scope: src/tools/** changed. size: XL Auto size: >1000 non-doc changed lines. risk: high Auto risk: security/runtime/gateway/tools/workflows. principal contributor Contributor with 20+ merged PRs. labels May 16, 2026
@kleopasevan
kleopasevan force-pushed the main branch 2 times, most recently from 2746031 to a641405 Compare May 20, 2026 08:08
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

core Auto scope: root src/*.rs files changed. dependencies Auto scope: dependency manifest/lock/policy changed. docs Auto scope: docs/markdown/template files changed. principal contributor Contributor with 20+ merged PRs. risk: high Auto risk: security/runtime/gateway/tools/workflows. size: XL Auto size: >1000 non-doc changed lines. tool Auto scope: src/tools/** changed.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant