kanban-md-22b28a — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited kanban-md-22b28a (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Manage kanban boards stored as Markdown files with YAML frontmatter. Each task is a .md file in kanban/tasks/. The CLI is kanban-md (alias kbmd if installed via Homebrew).
!kanban-md board 2>/dev/null || echo 'No board found — run: kanban-md init --name PROJECT_NAME'
--compact for listing commands (list, board, metrics, log) to gettoken-efficient one-line output.
kanban-md show ID (default table format) to read task details — it includesthe full body and task-owned fields in a human-readable layout. Only add --json when you need to pipe the output to another tool or parse fields programmatically.
--yes when deleting (kanban-md delete ID --yes).YYYY-MM-DD format.kanban-md board to discover valid values before using them.
| User wants to... | Command |
|---|---|
| See board overview / standup | kanban-md board --compact |
| Get a unique agent name (for claims) | kanban-md agent-name |
| List all tasks | kanban-md list --compact |
| List tasks by status | kanban-md list --compact --status todo,in-progress |
| List tasks by priority | kanban-md list --compact --priority high,critical |
| List tasks by assignee | kanban-md list --compact --assignee alice |
| List tasks by tag | kanban-md list --compact --tag bug |
| Filter a selected scalar property | kanban-md list --compact --property kind=chapter |
| Group by a selected property | kanban-md list --group-by property:kind |
| List blocked tasks | kanban-md list --compact --blocked |
| List ready-to-start tasks | kanban-md list --compact --not-blocked --unblocked --status todo |
| List tasks with resolved deps | kanban-md list --compact --unblocked |
| Find a specific task | kanban-md show ID |
| Claim next available task | kanban-md pick --claim <agent> --status todo --move in-progress |
| Create a task | kanban-md create "TITLE" --priority P --tags T |
| Create a task with body | kanban-md create "TITLE" --body "DESC" |
| Create and immediately claim a task | kanban-md create "TITLE" --priority P --claim <agent> |
| Start working on a task | kanban-md move ID in-progress --claim <agent> |
| Advance to next status | kanban-md move ID --next |
| Move a task back | kanban-md move ID --prev |
| Complete a task | kanban-md move ID done |
| Edit task fields | kanban-md edit ID --title "NEW" --priority P |
| Set/clear user properties | kanban-md edit ID --set-property kind=chapter --clear-property note |
| Add/remove tags | kanban-md edit ID --add-tag T --remove-tag T |
| Set a due date | kanban-md edit ID --due 2026-03-01 |
| Block a task | kanban-md edit ID --block "REASON" |
| Unblock a task | kanban-md edit ID --unblock |
| Add a dependency | kanban-md edit ID --add-dep DEP_ID |
| Set a parent task | kanban-md edit ID --parent PARENT_ID |
| Append a note to task body | kanban-md edit ID --append-body "note" --timestamp |
| Hand off a task to review | kanban-md handoff ID --claim <agent> --note "…" --release |
| Soft-delete with confirmation semantics | kanban-md delete ID --yes |
| Archive a task explicitly | kanban-md archive ID |
| See flow metrics | kanban-md metrics --compact |
| See activity log | kanban-md log --compact --limit 20 |
| See recent activity for a task | kanban-md log --compact --task ID |
| Get a board context summary | kanban-md context |
| Initialize a new board | kanban-md init --name "NAME" |
kanban-md list [--status S] [--priority P] [--assignee A] [--tag T] \
[--sort FIELD] [-r] [-n LIMIT] [--blocked] [--not-blocked] \
[--parent ID] [--unblocked] [--unclaimed] [--claimed-by AGENT] \
[--class C] [--archived] [--property KEY=LITERAL] \
[--show-property KEY] [--group-by FIELD|property:KEY]Sort fields: id, title, status, priority, created, updated, due. -r reverses. --unblocked shows tasks whose dependencies are all at terminal status.
kanban-md create "TITLE" [--status S] [--priority P] [--assignee A] \
[--tags T1,T2] [--due YYYY-MM-DD] [--estimate E] [--body "TEXT"] \
[--parent ID] [--depends-on ID1,ID2] [--class C] [--claim AGENT] \
[--set-property KEY=LITERAL]Prints the created task ID and summary. --claim immediately claims the task for an agent, combining creation and claiming in one step.
kanban-md show ID
kanban-md show ID --archived # include archived direct children
kanban-md show ID --json # only when piping to another toolDefault format shows task-owned fields and the body in a readable layout. Direct children use ID order unless children.detail_sort selects a numeric property. That setting affects detail order only, not list or pick. Use --json only when you need to parse fields programmatically. For the JSON schema, see references/json-schemas.md.
kanban-md agent-nameGenerates a random two-word identifier (e.g. frost-maple) to use as a claim name. Run once per agent session and remember the result.
kanban-md edit ID[,ID,...] [--title T] [--status S] [--priority P] [--assignee A] \
[--add-tag T] [--remove-tag T] [--due YYYY-MM-DD] [--clear-due] \
[--estimate E] [--body "TEXT"] [-a "TEXT"] [--started YYYY-MM-DD] [--clear-started] \
[--completed YYYY-MM-DD] [--clear-completed] [--parent ID] \
[--clear-parent] [--add-dep ID] [--remove-dep ID] \
[--block "REASON"] [--unblock] [--class C] \
[--claim AGENT] [--release] [-t] \
[--set-property KEY=LITERAL] [--clear-property KEY]Only specified fields are changed. Prints a confirmation message. -a / --append-body appends text to the existing body without replacing it. -t / --timestamp prefixes a timestamp line when appending. --claim claims (or renews a claim on) the task for the agent. --release releases the claim on the task. Accepts comma-separated IDs for bulk edits.
Unknown task frontmatter survives ordinary edits but stays out of default output. Select a simple top-level value explicitly when it serves the board:
kanban-md create "Draft chapter" --parent 1 --set-property kind=chapter --set-property reading_order=20
kanban-md list --compact --property kind=chapter --show-property reading_order
kanban-md show 1 --json --show-property kind --show-property reading_order
kanban-md edit 2 --clear-parent --clear-property reading_orderThe set/clear/filter/show flags are repeatable for distinct keys. Property keys are case-sensitive literal identifiers; dots do not traverse nested data. Task-owned names are reserved. CLI literals are bare or JSON-quoted strings, strict JSON numbers, lowercase booleans or null. For example, reading_order=20 is numeric; 'reading_order="20"' is a string. Null is not a missing key. Do not supply conflicting set/clear operations or duplicate keys.
Property filters are exact, typed and ANDed. list --group-by property:kind shows aggregate counts; it cannot combine with --show-property. A configured group order is not an enum: typos remain visible unknown groups.
Only ungrouped list and show accept --show-property. Requested JSON records add only selected supported scalars in properties; show projects the same keys on children. Missing values are omitted; null is retained; unsupported values are omitted with a warning. No wildcard or all-properties export exists. Nested objects, aliases and custom-tag values stay opaque. Configured badges and child order do not select JSON values.
Property values survive reparenting and detaching. Explicitly clear an ordering hint in the same edit when resetting placement. Selected mutations use normal claim/write checks and may refuse if retained YAML bindings would become unsafe; do not strip unrelated metadata to force success.
kanban-md move ID[,ID,...] STATUS
kanban-md move ID --next
kanban-md move ID --prev
kanban-md move ID STATUS --claim AGENTAuto-sets Started on first move from initial status. Auto-sets Completed on move to terminal status. Accepts comma-separated IDs for bulk moves. --claim claims the task during the move (useful when resuming a parked task).
kanban-md pick --claim AGENT [--status S] [--move STATUS] [--tags T1,T2] \
[--parent ID] [--no-body]Finds the highest-priority unclaimed, unblocked task and claims it in the same command. Use --status to restrict which column to pick from. Use --move to move the task in that operation. This replaces the slower list → claim → move sequence. Claims are cooperative leases rather than a distributed transaction. By default the result includes full task details; use --no-body when the one-line confirmation is enough.
kanban-md handoff ID --claim AGENT [--note "TEXT"] [--block "REASON"] [--release] [-t]Moves the task to review, appends a handoff note, and optionally marks it blocked and/or releases the claim. Use when parking work for another agent or waiting on user input. -t adds a timestamp.
kanban-md context [--sections in-progress,blocked,overdue,recently-completed] \
[--days N] [--write-to FILE]Generates a markdown board summary suitable for embedding in CLAUDE.md or AGENTS.md. --write-to writes (or updates) the summary inside a delimited block in the target file.
kanban-md delete ID --yesMoves the task to archived; the task file remains on disk. Always pass --yes because non-interactive contexts cannot answer the confirmation prompt.
kanban-md archive ID[,ID,...] [--claim AGENT]Moves tasks to archived without a confirmation prompt. Pass the current claim name when archiving an actively claimed task.
kanban-md boardShows board overview: task counts per status, WIP utilization, blocked/overdue counts, priority distribution.
kanban-md metrics [--since YYYY-MM-DD]Shows throughput (7d/30d), avg lead/cycle time, flow efficiency, aging items.
kanban-md log [--since YYYY-MM-DD] [--limit N] [--action TYPE] \
[--task ID]Common action types: create, edit, move, delete, block, unblock, claim, release, handoff, and priority.
All commands accept: --json, --table, --compact (alias --oneline), --dir PATH, --no-color.
kanban-md board --compact — board overviewkanban-md list --compact --status in-progress — in-flight workkanban-md list --compact --blocked — stuck itemskanban-md metrics --compact — throughput and agingkanban-md list --compact --status backlog --sort priority — review backlogkanban-md move ID todokanban-md create "TITLE" --priority P --tags Tkanban-md archive IDkanban-md board --compact — current statekanban-md list --compact --status backlog,todo --sort priority — candidateskanban-md move ID todokanban-md edit ID --assignee NAMEkanban-md edit ID --due YYYY-MM-DDkanban-md move ID done — marks complete, sets Completed timestampkanban-md show ID --json — verify status and timestampskanban-md create "Fix: DESCRIPTION" --priority high --tags bugkanban-md edit ID --body "Steps to reproduce: ..."kanban-md create "Epic title"kanban-md create "Subtask" --parent PARENT_IDkanban-md create "Task B" --depends-on TASK_A_IDkanban-md list --compact --unblockedQuick-reference for the agent task lifecycle. These are combination commands — multiple flags in one call to minimize round-trips. Replace <agent> with your session's agent-name output.
kanban-md agent-name # generate a unique claim name; remember it
kanban-md board --compact # orient: what's active, blocked, overdue# Pick highest-priority unclaimed task from todo and move it to in-progress in one step
kanban-md pick --claim <agent> --status todo --move in-progress
# If todo is empty, pick from backlog
kanban-md pick --claim <agent> --status backlog --move in-progress
Pick already prints full task details; add --no-body only when they are unnecessary.
# Create a task and immediately claim it
kanban-md create "TITLE" --priority high --tags bug --claim <agent>
# Add a body separately (or use --body inline if short)
kanban-md edit <ID> --body "Steps to reproduce: ..."# Leave a timestamped note while keeping your claim active
kanban-md edit <ID> -a "Implemented X, running tests." -t --claim <agent># Run from board home, after merging
kanban-md edit <ID> --release
kanban-md move <ID> done# Waiting on user decision or external action
kanban-md handoff <ID> --claim <agent> \
--note "Ready to merge: branch task/<ID>-…; waiting for: ..." \
-t --release
# Blocked on something specific
kanban-md handoff <ID> --claim <agent> \
--block "Reason for block" \
--note "What's needed to unblock and next step." \
-t --releasekanban-md edit <ID> --claim <agent> # re-claim
kanban-md edit <ID> --unblock --claim <agent> # unblock (if it was blocked)
kanban-md move <ID> in-progress --claim <agent> # move back to in-progress# Tag multiple tasks at once
kanban-md edit <ID1>,<ID2>,<ID3> --add-tag layer-3
# Move multiple tasks
kanban-md move <ID1>,<ID2> todo
# List with combined filters
kanban-md list --compact --status backlog --priority high,critical --sort priority
kanban-md list --compact --not-blocked --status todo # tasks ready to start
kanban-md list --compact --status in-progress,review # all active/parked work--compact for listing, board, metrics, and log commands — it is the most token-efficient format.kanban-md show ID (default format) to read task details — it is readable and includes the full body.--yes on delete. Without it, a non-interactive command exits witha confirmation-required error.
pick --claim <agent> --status todo --move in-progress rather thanlist → edit → move — one operation minimizes the coordination window and records ownership immediately.
-a / --append-body with --claim <agent> when adding progress notes — this renews the claim and appends without overwriting the body.--json unless you are piping output to another tool or parsing fields programmatically. Default and --compact formats are sufficient for reading.kanban-md board --compact.--next or --prev without checking current status. They fail at boundary statuses.--status and --next/--prev to move. Use one or the other.kanban-md create "Fix: the 'login' bug".--body and --append-body values. Shell interprets backticks (` `) and $(...) inside double quotes as command substitution, which will **execute the text as commands**. Escape every backtick with a backslash: \ `` or use single quotes for the outer string if possible.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.