with one click
agkan-subtask-direct
Use when a task has been selected and you need to implement it directly without PR/branch creation - handles in_progress update, implementation, and marking done.
Menu
Use when a task has been selected and you need to implement it directly without PR/branch creation - handles in_progress update, implementation, and marking done.
Use when managing tasks with the agkan CLI tool - creating, listing, updating tasks, managing tags, blocking relationships, or tracking project progress with the kanban board.
Use when reviewing backlog tasks to assess decomposition, implementation readiness, and priority ordering before development begins.
Use when starting a development session to pick the highest priority Todo task from agkan, implement it directly without PR/branch, and mark it done.
Use when starting a development session to pick the highest priority Todo task from agkan, implement it, create a pull request, and mark it done.
Use when a task has been selected and you need to implement it in an isolated (forked) context - handles in_progress update, branch creation, implementation, PR creation, and marking review.
Use when checking review tasks against GitHub PR status to automatically move them to done or closed.
| name | agkan-subtask-direct |
| description | Use when a task has been selected and you need to implement it directly without PR/branch creation - handles in_progress update, implementation, and marking done. |
| user-invokable | false |
A workflow to directly implement a selected task without creating a branch or PR and mark it as complete.
agkan task update <id> status in_progress
Read the branch from the task's first-class branch column:
BRANCH=$(agkan task get <id> --json | jq -r '.task.branch // empty')
Case A โ Branch is non-null:
Check out the existing branch:
git fetch origin
git checkout "$BRANCH"
All subsequent commits and pushes must target this branch.
Case B โ Branch is null:
Generate a branch name from the task ID and title. Use the following naming convention:
bug or security tag โ prefix fix/feat/<prefix>/<id>-<title-slug> (e.g., feat/42-add-login-page)DEFAULT_BRANCH=$(git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's@^refs/remotes/origin/@@')
git fetch origin
git checkout -b <branch-name> origin/$DEFAULT_BRANCH
Persist the generated branch name to the task:
agkan task update <id> --branch <branch-name>
Implement according to the task requirements.
Refer to /key-guidelines during implementation to maintain code quality.
If the project has a static analysis or lint tool configured, run it before committing:
npx tsc --noEmitnpx eslint .bundle exec rubocopruff check .Fix any errors before proceeding.
MANDATORY: Committing and pushing the implementation is required and MUST NOT be skipped. This step must complete before advancing to Steps 7 and 8. Skipping commit for any reason โ including when approaching context limits or after running tests/lint โ is forbidden.
Stage files by specifying them explicitly. Do not use git add -A as it risks including unintended files such as .env or credentials.
git add <file1> <file2> ...
git commit -m "<commit message>"
# If a branch was checked out from the task's branch column, push to it; otherwise push to current branch
git push -u origin <branch-name-or-current>
Note: Do not use
git add -Aorgit add .. Files containing.env,credentials.*, or secrets may be committed unintentionally.
After push, verify it succeeded before proceeding to Step 7:
git ls-remote --heads origin <branch-name-or-current>
If push failed (empty output or non-zero exit code), record the error in the task body and do NOT proceed to Step 7. Leave the task as in_progress.
Recovery: If interrupted during Steps 3โ5
If an error, permission denial, or user interruption occurs during implementation (Step 3), lint check (Step 4), or commit/push (Step 5):
donein_progress โ complete the remaining steps before re-evaluatingIf the task body contains - [ ] checklist items, update items completed during this implementation.
TASK_JSON=$(agkan task get <id> --json)
CURRENT_BODY=$(echo "$TASK_JSON" | jq -r '.task.body // empty')
echo "$CURRENT_BODY" | grep -q -- '- \[ \]' || echo "No unchecked items โ skipping"
- [ ] with - [x]. Write the updated body to a temp file and apply:cat > /tmp/agkan_checkbox_$$.md << 'BODY'
<updated body with completed items marked as - [x]>
BODY
agkan task update <id> --file /tmp/agkan_checkbox_$$.md
Only mark items that were actually completed in this session. Leave pending items as
- [ ].
Before updating the task status, perform a self-review of the implementation using the superpowers:code-reviewer sub-agent:
Agent(
subagent_type="superpowers:code-reviewer",
description="Self-review task #<id> implementation",
prompt="""Review the implementation of the following task.
Task #<id>: <title>
Task body:
<body>
Review the git changes (run `git diff HEAD~1 HEAD` to see them) against the original plan and coding standards. Check for correctness, security issues, and code quality. Report critical issues that must be fixed before completing the task.
"""
)
If the code reviewer identifies critical issues, fix them and commit the fixes before proceeding.
Only execute this step if implementation succeeded โ specifically, if ALL of the following conditions are met:
Scope note: The interruption guard below applies only to this status transition decision โ not to Steps 3โ6. If a confirmation or interruption occurred during implementation and has since been resolved, complete Steps 3โ6 before evaluating the guard below.
Implementation succeeded means ALL of the following:
git commit was executed in this session (verify with git log --oneline -1)git push completed without errorsThe following do NOT count as implementation:
agkan task comment add (comment additions only)agkan task update --body / --file (body/metadata updates only)Before updating to done, verify a commit was made:
git log --oneline -1
If no commits were made in this session (output is empty or only shows pre-existing commits), do NOT update the status to done. Surface the failure by appending an error line to the task body, then leave the task as in_progress:
# Surface silent failure: no commit was made
agkan task get <id> --json
# Write body to tmp file and update using --file to preserve newlines
cat > /tmp/agkan_body_$$.md << 'BODY'
<existing body>
Error: Skill reached end without a commit. Implementation was not completed โ files may remain uncommitted in the working tree. Manual intervention required.
BODY
agkan task update <id> --file /tmp/agkan_body_$$.md
# Do NOT run: agkan task update <id> status done
If a critical error occurred (e.g., git push failed, permission denied, commit failed), do NOT update the status to done. Leave the task as in_progress and record the error details in the task body:
# On error: record what went wrong in the task body (optional but recommended)
agkan task get <id> --json
# Write body to tmp file and update using --file to preserve newlines
cat > /tmp/agkan_body_$$.md << 'BODY'
<existing body>
Error: <error description>
BODY
agkan task update <id> --file /tmp/agkan_body_$$.md
# Do NOT run: agkan task update <id> status done
If only task management operations were performed (comments, body updates, no commits), do NOT update the status to done. Leave the task as in_progress.
If implementation succeeded (commits were made and pushed), update to done:
agkan task update <id> status done
.task.branch is non-null; otherwise auto-generate a name and create the branch, then persist it via agkan task update <id> --branch <name>in_progressgit commit was made โ task management operations alone (comments, body updates) do NOT qualify as implementationin_progress and record the errorin_progressagkan-run-direct skill)