SKILL.md
agkan-review
Overview
Workflow to retrieve tasks with Review status in agkan, check the merge/close status of GitHub PRs, and automatically update their status.
Workflow
Primary: Run the bundled script
Run the bundled review.sh script to process all review tasks in one command:
bash "$(dirname "$(agkan skill path agkan-review 2>/dev/null || echo "$BASE_DIR")")/review.sh"
The base directory for this skill is provided at session start. Use it to resolve the script path:
bash "$BASE_DIR/review.sh"
Where $BASE_DIR is the base directory shown at the top of the skill (e.g. /home/gen/.claude/skills/agkan-review).
The script:
- Fetches all tasks with
--status review - Extracts the PR URL from each task body (
PR: <URL>) or metadata (prkey) - Calls
gh pr view <URL> --json state,mergedAtfor each PR - Updates task status to
done(MERGED) orclosed(CLOSED without merge), skips OPEN - Adds a comment recording the reason and timestamp
- Prints a summary:
done: X, closed: X, skipped (OPEN): X, no PR: X
To register the script in .claude/settings.json to eliminate per-command permission prompts, add the script path to allowedTools or the relevant bash allowlist.
Fallback: Manual step-by-step workflow
Use the manual steps below if the script is unavailable or you need to process tasks individually.
1. Retrieve Review tasks
agkan task list --status review --json
2. Initialize summary counters
Before processing tasks, initialize the following counters to track results:
done_count = 0closed_count = 0skippedopencount = 0noprcount = 0
3. Confirm PR URL for each task
First, extract the PR URL from the task body in the format PR: <URL>.
If no URL is found in the body, check the task metadata as a fallback:
agkan task meta list <id>
Use the value of the pr key if present.
If no URL is found in either the body or metadata, increment noprcount, skip the task and output a message indicating manual verification is needed.
4. Check PR status on GitHub
gh pr view <PR URL> --json state,mergedAt
| Field | Meaning |
|---|---|
state |
OPEN / CLOSED / MERGED |
mergedAt |
Merge date/time (null if not merged) |
5. Move status based on PR status
| PR State | agkan Status | Command | Counter |
|---|---|---|---|
MERGED |
done |
agkan task update <id> status done |
Increment done_count |
CLOSED (mergedAt is null) |
closed |
agkan task update <id> status closed |
Increment closed_count |
OPEN |
No change | Skip (still under review) | Increment skippedopencount |
6. Add comment recording the reason for status change
After updating status to done or closed, record the merge date/time and reason:
agkan task comment add <id> "<comment>"
Comment format by status:
| Status | Comment Example |
|---|---|
done |
Merged at <mergedAt>. PR was merged and task is complete. |
closed |
PR was closed without merging. Task moved to closed. |
7. Display summary after all tasks are processed
done: <done_count>, closed: <closed_count>, skipped (OPEN): <skipped_open_count>, no PR: <no_pr_count>
Decision Flow
Retrieve all Review tasks
↓
Initialize counters (done=0, closed=0, skipped_open=0, no_pr=0)
↓
Repeat for each task
↓
Does the body contain "PR: <URL>"?
Yes → Use that URL
No → Check metadata: agkan task meta list <id>
Does metadata contain "pr" key?
Yes → Use that URL
No → Increment no_pr_count → Skip (output message prompting manual verification)
↓
Check PR status
↓
What is the PR state?
MERGED → Move to done → Increment done_count → Add comment with mergedAt timestamp
CLOSED → Move to closed → Increment closed_count → Add comment noting PR closed without merge
OPEN → Skip (waiting for review) → Increment skipped_open_count
↓
Move to next task (repeat until all tasks are processed)
↓
Display summary: done: X, closed: X, skipped (OPEN): X, no PR: X
Notes
- PR URL is first looked up in the task body in the format
PR: <URL> - If not found in the body, the
prkey fromagkan task meta list <id>is used as a fallback - If PR URL is not found in either location, prompt for manual verification (skip task)
donemeans successful completion,closedmeans suspended or withdrawn- The
ghcommand is required and will not work in environments where it is unavailable
Troubleshooting
grep: invalid option -- P on macOS
BSD grep (shipped with macOS) does not support the -P (Perl-compatible regex) flag. If you see this error, you are likely running an older version of review.sh that used grep -oP.
Symptom: PR URLs are not extracted from task bodies, and the script silently falls back to metadata lookup (which may also be empty), resulting in PR未設定 for tasks that do have a PR: <URL> line.
Fix: The current review.sh uses sed instead of grep -oP:
# Compatible with macOS (BSD) and Linux (GNU)
pr_url=$(echo "$body" | sed -n 's/.*PR: \(https:\/\/[^[:space:]]*\).*/\1/p' | head -1 || true)
If you are still seeing the error after updating, confirm you are running the latest version of the skill.