Powder
Powder is a self-hostable work tool. It exposes one core through API, CLI, MCP,
and this skill. Treat cards as context objects with acceptance oracles, not
status rows. Real card data belongs in a deployed instance database, not in the
product repository. Read VISION.md before changing Powder's product scope,
card/run model, runner boundary, or self-hosting assumptions.
For local MCP use, set POWDER_DB_PATH to the instance SQLite database. A
POWDER_BACKLOG_DIR value imports markdown into that database on startup. To
reach a deployed instance instead, set POWDER_API_BASE_URL (and
POWDER_API_KEY). One of these two must be set — MCP refuses to start
otherwise; there is no ephemeral in-memory mode, since claims and completions
must never silently evaporate on process exit.
Operating Contract
- Use
list_ready before claiming work.
- Claim exactly one card at a time unless the operator authorizes a batch.
- Keep the card updated through lease heartbeats, renewals, audit events,
relations, and status changes.
- Release the claim when stopping voluntarily so another worker can pick the
card up immediately.
- In API-key mode, claim as the authenticated key actor; do not supply another
agent name to impersonate a different worker.
- Use
get_card, get_run, and list_awaiting_input to read timelines before
answering or completing work.
- Use
request_input when a human decision is needed; do not invent approvals.
- Use
answer_input only with an actor and the actual answer text.
- Use
update_status or complete_card to record the current truth; proof is
optional, and Powder audits the actor/time/change instead of enforcing a
lifecycle matrix.
- Do not spawn agents from Powder core. Dispatch belongs to a separate runner.
Expected MCP Tools
list_ready: return claimable cards sorted by priority, age, and identifier.
list_cards: enumerate cards by optional status/repo filter, including
blocked, review, and done cards list_ready never surfaces.
claim_card: acquire an expiring lock for one card and open a run.
release_claim: clear an active claim by run id and make the card ready.
renew_claim: extend an active claim lease by run id.
heartbeat: record liveness for an active claim without changing ownership.
get_card: read one card with runs, activities, links, comments, and claim state.
get_run: read one run with its card, activities, links, comments, and run state.
list_awaiting_input: list runs paused for human or agent input.
answer_input: append an actor-attributed answer and resume the run.
update_status: set a card to any status in one call and record an audit event.
update_relations: replace a card's related, blocks, and blocked_by
relation lists.
add_link: attach a PR, CI run, artifact, or reference URL to a card.
add_comment: attach an actor-attributed comment, visible immediately via
get_card/get_run.
request_input: move the run to awaiting_input with the exact question.
complete_card: mark the card done, optionally attaching proof.
Instance CLI
powder init-db --db ./data/powder.db --show-secret
powder import backlog.d --db ./data/powder.db
powder list-ready --db ./data/powder.db --limit 10
powder claim 001 --db ./data/powder.db --agent codex
powder heartbeat 001 --db ./data/powder.db --run run-id
powder renew-claim 001 --db ./data/powder.db --run run-id --ttl 3600
powder release-claim 001 --db ./data/powder.db --run run-id
powder get-card 001 --db ./data/powder.db
powder update-relations 001 --db ./data/powder.db --related 002 --blocks 003 --blocked-by 000
powder update-status 001 --db ./data/powder.db --status running
powder request-input run-id --db ./data/powder.db --question "Approve?"
powder list-awaiting-input --db ./data/powder.db
powder answer-input run-id --db ./data/powder.db --actor operator --answer approved
powder get-run run-id --db ./data/powder.db
powder complete-card 001 --db ./data/powder.db
Local Gate
cargo fmt --all -- --check
cargo clippy --workspace --all-targets -- -D warnings
cargo test --workspace
Red Lines
- Do not import from Gradient or Hermes
kanban.db.
- Do not add personal or operator backlog data to the Powder repository.
- Do not treat exit zero as completion without a status update and audit trail.
1---2name: powder3description: Use when an agent needs to inspect, claim, update, request input for, or complete work cards in a Powder instance. Powder is the self-hostable, agent-first work board: a durable card store with run sessions, activity, audit events, relations, optional proof, and human-in-loop states.4---56# Powder78Powder is a self-hostable work tool. It exposes one core through API, CLI, MCP,9and this skill. Treat cards as context objects with acceptance oracles, not10status rows. Real card data belongs in a deployed instance database, not in the11product repository. Read `VISION.md` before changing Powder's product scope,12card/run model, runner boundary, or self-hosting assumptions.1314For local MCP use, set `POWDER_DB_PATH` to the instance SQLite database. A15`POWDER_BACKLOG_DIR` value imports markdown into that database on startup. To16reach a deployed instance instead, set `POWDER_API_BASE_URL` (and17`POWDER_API_KEY`). One of these two must be set — MCP refuses to start18otherwise; there is no ephemeral in-memory mode, since claims and completions19must never silently evaporate on process exit.2021## Operating Contract2223- Use `list_ready` before claiming work.24- Claim exactly one card at a time unless the operator authorizes a batch.25- Keep the card updated through lease heartbeats, renewals, audit events,26 relations, and status changes.27- Release the claim when stopping voluntarily so another worker can pick the28 card up immediately.29- In API-key mode, claim as the authenticated key actor; do not supply another30 agent name to impersonate a different worker.31- Use `get_card`, `get_run`, and `list_awaiting_input` to read timelines before32 answering or completing work.33- Use `request_input` when a human decision is needed; do not invent approvals.34- Use `answer_input` only with an actor and the actual answer text.35- Use `update_status` or `complete_card` to record the current truth; proof is36 optional, and Powder audits the actor/time/change instead of enforcing a37 lifecycle matrix.38- Do not spawn agents from Powder core. Dispatch belongs to a separate runner.3940## Expected MCP Tools4142- `list_ready`: return claimable cards sorted by priority, age, and identifier.43- `list_cards`: enumerate cards by optional status/repo filter, including44 `blocked`, `review`, and `done` cards `list_ready` never surfaces.45- `claim_card`: acquire an expiring lock for one card and open a run.46- `release_claim`: clear an active claim by run id and make the card ready.47- `renew_claim`: extend an active claim lease by run id.48- `heartbeat`: record liveness for an active claim without changing ownership.49- `get_card`: read one card with runs, activities, links, comments, and claim state.50- `get_run`: read one run with its card, activities, links, comments, and run state.51- `list_awaiting_input`: list runs paused for human or agent input.52- `answer_input`: append an actor-attributed answer and resume the run.53- `update_status`: set a card to any status in one call and record an audit event.54- `update_relations`: replace a card's `related`, `blocks`, and `blocked_by`55 relation lists.56- `add_link`: attach a PR, CI run, artifact, or reference URL to a card.57- `add_comment`: attach an actor-attributed comment, visible immediately via58 `get_card`/`get_run`.59- `request_input`: move the run to `awaiting_input` with the exact question.60- `complete_card`: mark the card done, optionally attaching proof.6162## Instance CLI6364```sh65powder init-db --db ./data/powder.db --show-secret66powder import backlog.d --db ./data/powder.db67powder list-ready --db ./data/powder.db --limit 1068powder claim 001 --db ./data/powder.db --agent codex69powder heartbeat 001 --db ./data/powder.db --run run-id70powder renew-claim 001 --db ./data/powder.db --run run-id --ttl 360071powder release-claim 001 --db ./data/powder.db --run run-id72powder get-card 001 --db ./data/powder.db73powder update-relations 001 --db ./data/powder.db --related 002 --blocks 003 --blocked-by 00074powder update-status 001 --db ./data/powder.db --status running75powder request-input run-id --db ./data/powder.db --question "Approve?"76powder list-awaiting-input --db ./data/powder.db77powder answer-input run-id --db ./data/powder.db --actor operator --answer approved78powder get-run run-id --db ./data/powder.db79powder complete-card 001 --db ./data/powder.db80```8182## Local Gate8384```sh85cargo fmt --all -- --check86cargo clippy --workspace --all-targets -- -D warnings87cargo test --workspace88```8990## Red Lines9192- Do not import from Gradient or Hermes `kanban.db`.93- Do not add personal or operator backlog data to the Powder repository.94- Do not treat exit zero as completion without a status update and audit trail.