Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Run the Agent Kanban task lifecycle: create, assign, monitor, and either hand review to an active board maintainer or review and finish the task as leader. Use only when the user explicitly asks for AK Task, Agent Kanban, an AK task, or delegation through an AK board. Do not use for ordinary feature implementation, bug fixing, or generic task creation.
.claude/skills/saltbo-ak-task/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-04 | ✗→✓ | ▲ Improved | 640% | 0% |
| case-05 | ✗→✓ | ▲ Improved | 481% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 303% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 438% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 290% | 0% |
Create a task, assign it, then monitor it to completion. Review ownership depends on whether the selected board has an active maintainer.
This is a leader workflow.
If ak says no leader identity exists for the current runtime, create one first:
bashak auth login --leader-agent --username <username> [--name <name>]
The leader chooses its own username and optional full name.
Assume this workflow runs in two explicit modes:
If execution hits a blocker after confirmation, use the available tools and repository context to resolve it. If the blocker cannot be resolved without external authorization or production mutation, fail fast with the exact blocker and the next required action instead of waiting in the middle of the workflow.
Immediately after this skill is invoked, create and maintain an explicit task plan/checklist in the agent UI. This checklist is a guardrail against attention drift during clarification, preview, and execution handoff.
The checklist must include the full lifecycle:
Keep this checklist current:
that item completed as not applicable instead of leaving it pending.
ak create task, explicitly mark planning/creation complete and markmonitoring/completion as in progress before any final user-facing summary.
pending, unless the user explicitly says to stop, cancel, abort, or only create the task.
deciding the next action.
Parse the user's input:
Before choosing or creating workers, read references/runtime-delegation.md. Before creating any worker, also read references/agent-creation.md and follow its Worker Profile Preview.
bashak get board # pick the right board ak get maintainer --board <board-id> -o json ak get label --board <board> # existing board label taxonomy ak get agent -o json # agents, status.schedulable, and status.tasks load ak get model --runtime <name> # provider-reported models for a runtime ak get repo # registered repos
If there's only one board, use it. Otherwise ask which board.
Resolve review ownership immediately after selecting the board and before previewing or creating the task:
bashak get maintainer --board <board-id> -o json
status is active, usemaintainer-review mode. Record its id in the task preview. The leader creates, assigns, and monitors the task, but does not review the PR, reject the task, post verification evidence, merge the PR, or complete the task.
status: active—including an emptyarray or paused maintainer records—use leader-review mode and follow the original review workflow in this skill.
heartbeat_enabled to choose the mode. A maintainer can remainactive for event-driven review while scheduled heartbeats are disabled.
in_review. Switch toleader-review mode only when no returned maintainer is active. If any maintainer is active, remain in or switch to maintainer-review mode and record an active maintainer id.
The CLI already exposes the required board-level check. Do not infer maintainer state from agents, taints, task assignment, or heartbeat history.
Before creating the task, understand what's involved:
ak get task --board <board-id>Use AskUserQuestion to interactively resolve any uncertainties before creating the task. For each ambiguous point, present options for the user to choose from:
Labels are board-level taxonomy, not free-form task notes. Use them only for stable filtering dimensions that will remain useful across tasks.
Before previewing the task:
ak get label --board <board-id> and reuse existing labels whenever possible.## Spec.Recommended categories:
vX.Y, for example v1.4; avoid patch versions or suffixes unless the board already uses that granularity.frontend, backend, api, database, cli, infra, docs, ui, security, or test.feature, bug, or refactor.Avoid labels for temporary process state, runtime/provider choice, tools, libraries, branches, files, or one-off implementation details. Examples that usually belong in the task description instead of labels: blocked, testing, needs-review, codex, copilot, gemini, github, cloudflare, tailwind, sqlite, prompt-fix, and file names.
When labels overlap, prefer the canonical stable form: infra over infrastructure, bug over bugfix, database over db, and frontend for UI implementation unless the task is specifically visual polish.
Create missing reusable labels before task creation:
bashak create label --board <board-id> --name v1.4 --color "#22C55E" --description "Version 1.4" ak create label --board <board-id> --name backend --color "#38BDF8" --description "Backend/API work" ak create label --board <board-id> --name bug --color "#F87171" --description "Bug fix"
Useful color defaults:
#22C55E#A78BFA#38BDF8#22D3EE#F87171#F59E0B#71717ABefore creating workers or tasks, determine the worker runtime.
runtime matches it and whose status.schedulable is true.references/agent-creation.md.ak get model --runtime <runtime> -o json and use a provider-reported model ID.Keep iterating — each answer may reveal new questions. Only proceed to create when all points are resolved and the user has confirmed the final task spec.
If nothing is ambiguous (simple, clear-cut request), skip straight to the task preview below.
Use the runtime's structured question tool during the pre-task-creation phase:
AskUserQuestion.request_user_input.For Codex Default mode, verify the feature flag before relying on interactive prompts:
bashcodex features list | rg default_mode_request_user_input
Expected:
textdefault_mode_request_user_input under development true
If it is not enabled, tell the user to enable the feature flag themselves and restart Codex before continuing:
bashcodex features enable default_mode_request_user_input
Do not run this command for the user. The current Codex session will not gain the tool after an automatic config change; the user must enable it and reopen Codex. Do not switch Codex into Plan mode as a workaround. Plan mode injects Codex-native planning behavior and conflicts with this leader workflow.
Before creating, show the user the exact task that will be created using AskUserQuestion. Format the preview as:
📋 Task Preview
Title: <concise action phrase>
Board: <board-name>
Repo: <repo-name>
Agent: <agent-name>
Runtime: <agent-runtime>
Review owner: <active maintainer id or "leader">
Labels: <labels>
Depends on: <task-ids or "none">
## Goal
<one sentence>
## Files
- <file path> — <what changes>
## Spec
<concrete behavior: inputs, outputs, edge cases, error handling>
## Checks
- [ ] <verifiable condition — reviewer will check each one in Gate 2>
Examples by task type:
- API: "POST /api/items returns 201 with { id, name }"
- API: "empty name returns 400 with validation error"
- UI: "clicking Submit creates the item and navigates to detail page"
- UI: "empty form shows inline validation, submit button stays disabled"
- CLI: "ak get task --board xxx prints task table with status column"
---
Create this task? (y/n)Everything from ## Goal through ## Checks is the exact text that will be passed to --description. The header fields above it (Title, Board, Agent, Runtime, etc.) are metadata for display only — do not include them in --description. The user must see the full description before it's sent to the agent.
Before running ak create task, verify:
status.schedulable: true.--assign-to uses the selected agent ID.On confirmation, create the task:
bashak create task \ --board <board-id> \ --repo <repo-id> \ --assign-to <agent-id> \ --title "<concise action phrase>" \ --description "<detailed spec>" \ --labels "<comma-separated>"
--assign-to is mandatory. Always include it on create. Only assign to an agent whose status.schedulable is true. If the right role only exists on an unschedulable runtime, create a new worker with the required capability profile on a schedulable runtime and assign to that worker. Use references/agent-creation.md; do not create workers from role/runtime alone.
Dependencies: If this task touches files that overlap with other in-flight tasks, add --depends-on <task-id>. Create all related tasks upfront with DAG dependencies — don't wait for one to finish before creating the next.
--description; do not rely on chat context.status.schedulable: true.--depends-on for real blockers or overlapping context. Parallel tasks must not fight over the same files, data model, or API contract.ak create label --board <board-id> --name <name> --color <hex> --description "<desc>".Report to user: task ID, title, assigned agent.
Block on ak wait instead of writing polling loops. Exit codes: 0 condition met, 2 task cancelled, 124 timeout.
In maintainer-review mode, wait for the terminal outcome:
bashak wait task <task-id> --until done --timeout 1h
Do not stop at in_review to perform review work. On timeout, inspect task and runtime state, then re-check review ownership with ak get maintainer --board <board-id> -o json. If any maintainer is still active, inspect that active maintainer's status and recent runs with ak get maintainer <maintainer-id> --board <board-id> --runs; resolve runtime or platform blockers and continue waiting without taking over review. If no active maintainer remains, switch to leader-review mode.
In leader-review mode, wait for review:
bashak wait task <task-id> --until in_review --timeout 1h case $? in 0) ;; # ready for review → Step 6 2) echo "task cancelled — report unsuccessful terminal outcome" ; exit 1 ;; 124) echo "timed out — investigate" ;; # fall through to investigation esac
Run ak wait task --help for the full flag list.
Before starting or recovering any wait, follow references/wait-monitoring.md. The same wait policy applies to task waits and board waits.
On timeout (124) or if you suspect the agent is stuck, investigate immediately — don't just re-wait:
ak logs --lines 20ps aux | grep "claude.*session"Skip this step entirely in maintainer-review mode.
Pre-check: CI status. Before reviewing, verify CI has passed on the PR:
bashgh pr checks <pr-number> --repo <owner>/<repo>
If CI is pending or failed, reject immediately — worker must wait for CI to pass before submitting for review:
bashak task reject <task-id> --reason "CI not green — wait for CI to pass before submitting for review"
Three gates — code review, functional acceptance, and agent notes review — must pass before merging. Follow the shared verification policy in references/leader-verification.md, including waiver evidence and verification infrastructure learning.
Read the full PR diff and review against the task spec:
bashgh pr view <pr-number> --repo <owner>/<repo> --json title,body,additions,deletions,changedFiles gh pr diff <pr-number> --repo <owner>/<repo>
Check:
Fails → reject immediately, don't proceed to Gate 2.
Apply references/leader-verification.md. Passing tests, CI, and code review is not completion. Validate every task check from the product/user perspective. If verification cannot be completed, follow the shared attempt budget, waiver, and verification infrastructure learning rules.
Read task notes before merging:
bashak get note --task <task-id>
Check:
Agent YAML using the same metadata.name username as the current agent.If the completion summary is missing or unclear, reject and ask the worker to add it.
If no proposal is present, continue. If a proposal is present, review it using references/runtime-delegation.md. Apply it only when the proposal is durable, role-appropriate, and not task-specific.
Any gate fails or is blocked → Reject. List all issues in the reason.
bashak task reject <task-id> --reason "<all issues, specific and actionable>"
After reject, go back to Step 5 and keep monitoring. If the failure reveals a durable worker behavior problem, apply references/runtime-delegation.md#leader-driven-profile-iteration: use reject to correct the current active session, or close/cancel the task if it is too far off-course; update the worker profile only after the current task is no longer being worked, and never change the agent runtime.
All gates pass, or Gate 2 is explicitly waived after the required attempt budget → Post verification comment, then merge.
Post evidence on the PR before merging using the verification comment template in references/leader-verification.md. Before running gh pr merge, re-read the comment and confirm it satisfies the shared policy.
If the PR has merge conflicts, reject instead of merging — the worker agent will rebase, fix, and resubmit:
bashak task reject <task-id> --reason "merge conflicts with main — rebase and resubmit"
Then merge:
bashgh pr merge <pr-number> --repo <owner>/<repo> --squash --delete-branch
The daemon's PR Monitor will mark the task done. Do not manually run ak task complete unless the PR Monitor lag rule in references/wait-monitoring.md applies.
Remove local review artifacts from the repo root after verifying each path belongs to this workflow:
/tmp/ak-review-*playwright-report/test-results/In maintainer-review mode, use the following cancellation procedures only for an explicit user cancellation or non-review operational teardown. Never close, cancel, or recreate a task merely because maintainer review is slow, blocked, or disagrees with the leader; investigate maintainer/runtime state instead.
Tasks in todo status cannot be cancelled — delete them directly:
bashak delete task <task-id>
For tasks in in_progress or in_review: always close the PR first, then cancel. Closing the PR without canceling is fine — PR Monitor will auto-cancel. But canceling without closing the PR leaves orphaned PRs.
bashgh pr close <pr-number> --repo <owner>/<repo> --delete-branch ak task cancel <task-id>
If a rejected task stays in_progress without being picked up:
--assign-to on recreate.In leader-review mode, investigate the failure. If it is a source bug, reject with details. If it is flaky CI, re-trigger. In maintainer-review mode, do not make the review decision or reject the task; let the active maintainer handle CI evidence while the leader continues operational monitoring.
If the blocker appears to be an ak bug, missing capability, confusing UX, documentation gap, or skill workflow problem, file an issue in the official repo after collecting a minimal reproduction.
If the leader agent makes a process error, violates this skill, merges/rejects incorrectly, skips a required gate, misinterprets conflicting skill instructions, or has to be corrected by the user about expected skill behavior, do not stop at a chat apology or "next time" promise. Summarize the failure as a durable skill-improvement issue so future agents and external projects can benefit from the lesson. Include:
bashgh issue create \ --repo saltbo/agent-kanban \ --title "ak-task: <short process or skill problem summary>" \ --body "$(cat <<'EOF' ## Summary <what failed or what capability is missing> ## Command ak <command and flags> ## Expected <what should have happened> ## Actual <exact error text or observed behavior> ## Context - ak version: - OS: - Runtime: - Auth type: user | machine | agent - Board/task/repo IDs, if relevant: ## Reproduction 1. <step> 2. <step> ## Proposed Skill Change <specific wording or rule that would prevent recurrence> EOF )"
Never include API keys, session tokens, private keys, .env contents, or private repository data. If gh is unavailable, open https://github.com/saltbo/agent-kanban/issues/new and paste the same content.
done; cancelled is an unsuccessful terminal outcome that must be reported, not left pending or described as completion.ak create task, continue immediately into monitoring (ak wait task ...) in the same turn whenever possible. Do not send a final answer merely reporting that the task was created unless the user explicitly says to stop, cancel, abort, or only create the task.ak get maintainer --board <board-id> -o json; only status: active delegates review, and heartbeat_enabled does not affect ownership--depends-on or be merged--assign-to on create — never create a task without assigning an agentsaltbo/agent-kanban documenting the failure and proposed skill change. Do this in addition to any immediate local skill edit; do not replace it with an apology or private note.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 3,403 | 4,763 | +40% | 1 | 1 | 0% | 488 | 7,028 | +1340% | 0 | 0 | — |
case-02 | fail→fail | 4,350 | 6,342 | +46% | 1 | 1 | 0% | 321 | 6,962 | +2069% | 0 | 0 | — |
case-03 | fail→fail | 2,104 | 4,517 | +115% | 1 | 1 | 0% | 269 | 7,012 | +2507% | 0 | 0 | — |
case-04 | fail→pass | 6,580 | 6,734 | +2% | 1 | 1 | 0% | 1,021 | 7,556 | +640% | 0 | 0 | — |
case-20 | pass→fail | 13,076 | 9,267 | -29% | 1 | 1 | 0% | 2,101 | 6,912 | +229% | 0 | 0 | — |
case-05 | fail→pass | 7,605 | 3,322 | -56% | 1 | 1 | 0% | 1,198 | 6,959 | +481% | 0 | 0 | — |
case-06 | fail→pass | 10,244 | 2,295 | -78% | 1 | 1 | 0% | 1,666 | 6,720 | +303% | 0 | 0 | — |
case-07 | fail→pass | 8,534 | 4,800 | -44% | 1 | 1 | 0% | 1,333 | 7,169 | +438% | 0 | 0 | — |
case-08 | fail→pass | 12,345 | 4,582 | -63% | 1 | 1 | 0% | 1,841 | 7,173 | +290% | 0 | 0 | — |
case-18 | fail→pass | 6,382 | 3,068 | -52% | 1 | 1 | 0% | 899 | 6,819 | +659% | 0 | 0 | — |
case-09 | pass→pass | 5,791 | 4,188 | -28% | 1 | 1 | 0% | 906 | 7,073 | +681% | 0 | 0 | — |
case-10 | fail→pass | 12,833 | 2,776 | -78% | 1 | 1 | 0% | 2,238 | 6,890 | +208% | 0 | 0 | — |
case-11 | fail→pass | 6,291 | 3,524 | -44% | 1 | 1 | 0% | 1,015 | 6,932 | +583% | 0 | 0 | — |
case-12 | fail→pass | 21,906 | 1,999 | -91% | 1 | 1 | 0% | 3,494 | 6,650 | +90% | 0 | 0 | — |
case-19 | fail→fail | 4,808 | 2,264 | -53% | 1 | 1 | 0% | 654 | 6,686 | +922% | 0 | 0 | — |
case-13 | fail→pass | 6,869 | 6,531 | -5% | 1 | 1 | 0% | 1,128 | 7,599 | +574% | 0 | 0 | — |
case-14 | fail→pass | 12,208 | 2,530 | -79% | 1 | 1 | 0% | 1,763 | 6,775 | +284% | 0 | 0 | — |
case-15 | fail→pass | 11,789 | 1,856 | -84% | 1 | 1 | 0% | 1,943 | 6,628 | +241% | 0 | 0 | — |
case-16 | fail→pass | 5,884 | 2,025 | -66% | 1 | 1 | 0% | 972 | 6,724 | +592% | 0 | 0 | — |
case-17 | fail→pass | 13,831 | 1,838 | -87% | 1 | 1 | 0% | 2,076 | 6,644 | +220% | 0 | 0 | — |
case-21 | pass→fail | 5,244 | 11,159 | +113% | 1 | 1 | 0% | 779 | 7,297 | +837% | 0 | 0 | — |
case-22 | pass→pass | 3,504 | 5,045 | +44% | 1 | 1 | 0% | 563 | 7,199 | +1179% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 20 counted toward the lift figure. The other 2 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +55 percentage points is the difference between those two pass rates over the 20 comparable cases. 2 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.