Use for any development work - the master 13-step coding process that orchestrates all other skills, ensuring GitHub issue tracking, proper branching, TDD, code review, and CI verification
/plugin marketplace add troykelly/claude-skills/plugin install issue-driven-development@troykelly-skillsThis skill is limited to using the following tools:
The master coding process. Every step references specific skills. Follow in order.
Core principle: No work without an issue. No shortcuts. No exceptions.
Announce at start: "I'm using issue-driven-development to implement this work."
Create TodoWrite items for each step you'll execute. This is not optional.
Question: Am I working on a clearly defined GitHub issue that is tracked in the project board?
Actions:
issue-prerequisite skillVerification (MANDATORY) - uses cached data:
# Verify issue is in project board (0 API calls - uses cache)
ITEM_ID=$(echo "$GH_CACHE_ITEMS" | jq -r ".items[] | select(.content.number == [ISSUE_NUMBER]) | .id")
if [ -z "$ITEM_ID" ] || [ "$ITEM_ID" = "null" ]; then
echo "BLOCKED: Issue not in project board. Add it before proceeding."
# Add to project (1 API call) and refresh cache (1 API call)
gh project item-add "$GITHUB_PROJECT_NUM" --owner "$GH_PROJECT_OWNER" \
--url "$(gh issue view [ISSUE_NUMBER] --json url -q .url)"
export GH_CACHE_ITEMS=$(gh project item-list "$GITHUB_PROJECT_NUM" --owner "$GH_PROJECT_OWNER" --format json)
ITEM_ID=$(echo "$GH_CACHE_ITEMS" | jq -r ".items[] | select(.content.number == [ISSUE_NUMBER]) | .id")
fi
# Verify Status field is set (0 API calls - uses cache)
STATUS=$(echo "$GH_CACHE_ITEMS" | jq -r ".items[] | select(.id == \"$ITEM_ID\") | .status.name")
if [ -z "$STATUS" ] || [ "$STATUS" = "null" ]; then
echo "BLOCKED: Issue has no Status in project. Set Status before proceeding."
fi
Skill: issue-prerequisite, project-board-enforcement
Gate: Do not proceed unless:
Question: Are there comments on the issue I need to read?
Actions:
Skill: issue-lifecycle
Question: Is this issue too large for a single task?
Indicators of too-large:
If too large:
issue-decompositionparent labelSkill: issue-decomposition
Question: Is there previous work on this issue or related issues?
Actions:
episodic-memory for issue number, feature name, related termsmcp__memory knowledge graph for related entitiesSkill: memory-integration
Question: Do I need to perform research to complete this task?
Research types:
Actions:
Skill: pre-work-research
Question: Am I on the correct branch AND has the project status been updated?
Rules:
mainmain, sometimes existing feature branch)Naming: feature/issue-123-short-description or fix/issue-456-bug-name
Project Status Update (MANDATORY) - uses cached IDs:
When starting work, update project board Status to "In Progress":
# Use cached IDs (0 API calls for lookups)
# GH_PROJECT_ID, GH_STATUS_FIELD_ID, GH_STATUS_IN_PROGRESS_ID set by session-start
# Update status to In Progress (1 API call)
gh project item-edit --project-id "$GH_PROJECT_ID" --id "$ITEM_ID" \
--field-id "$GH_STATUS_FIELD_ID" --single-select-option-id "$GH_STATUS_IN_PROGRESS_ID"
# Refresh cache and verify (1 API call)
export GH_CACHE_ITEMS=$(gh project item-list "$GITHUB_PROJECT_NUM" --owner "$GH_PROJECT_OWNER" --format json)
NEW_STATUS=$(echo "$GH_CACHE_ITEMS" | jq -r ".items[] | select(.id == \"$ITEM_ID\") | .status.name")
if [ "$NEW_STATUS" != "In Progress" ]; then
echo "ERROR: Failed to update project status. Cannot proceed."
exit 1
fi
Skill: branch-discipline, project-board-enforcement
Gate: Do not proceed if:
main branchProcess: RED → GREEN → REFACTOR
Standards to apply simultaneously:
tdd-full-coverage - Write test first, watch fail, minimal code to passstrict-typing - No any types, full typinginline-documentation - JSDoc/docstrings for all public APIsinclusive-language - Respectful terminologyno-deferred-work - No TODOs, do it nowActions:
Skills: tdd-full-coverage, strict-typing, inline-documentation, inclusive-language, no-deferred-work
Question: Did I succeed in delivering what is documented in the issue?
Actions:
research-after-failureSkill: acceptance-criteria-verification, research-after-failure
Question: Minor change or major change?
Minor change (Step 9.1):
comprehensive-review checklistMajor change (Step 9.2):
comprehensive-review checklist7 Review Criteria:
Security-Sensitive Check:
# Check if any changed files are security-sensitive
git diff --name-only HEAD~1 | grep -E '(auth|security|middleware|api|password|token|secret|session|routes|\.sql)'
If matches found:
security-reviewer subagent OR perform security-review skillHARD REQUIREMENT: Post review artifact to issue comment:
<!-- REVIEW:START -->
## Code Review Complete
| Property | Value |
|----------|-------|
| Issue | #[ISSUE] |
| Scope | [MINOR|MAJOR] |
| Security-Sensitive | [YES|NO] |
| Reviewed | [ISO_TIMESTAMP] |
[... full artifact per comprehensive-review skill ...]
**Review Status:** ✅ COMPLETE
<!-- REVIEW:END -->
Gate: PR creation will be BLOCKED by hooks if artifact not found.
Skills: review-scope, comprehensive-review, security-review, review-gate
Rule: Implement ALL recommendations from code review, regardless how minor.
ABSOLUTE: Every finding must result in ONE of:
deferred-finding skillThere is NO third option. "Won't fix without tracking" is NOT permitted.
Actions:
deferred-finding skill to create tracking issuereview-finding and spawned-from:#ISSUE labelsGate: Review artifact must show "Unaddressed: 0" before proceeding.
Skills: apply-all-findings, deferred-finding
Actions:
Skill: tdd-full-coverage
Prerequisites (verified by hooks):
Actions:
CRITICAL: The PreToolUse hook will BLOCK gh pr create if:
If blocked, return to Step 9 or Step 10.
Skills: clean-commits, pr-creation, review-gate
Actions:
When CI is green (MANDATORY):
gh pr merge [PR_NUMBER] --squash --delete-branch# When CI passes
gh pr merge [PR_NUMBER] --squash --delete-branch
# Update project status to Done
# ... project board update commands ...
# Continue to next issue (do not stop)
Do NOT:
Skills: ci-monitoring
Issue AND project board updates happen CONTINUOUSLY, not as a separate step.
These updates are NOT optional. They are gates.
| Moment | Project Status | Verification |
|---|---|---|
| Starting work (Step 6) | → In Progress | Verify status changed |
| PR created (Step 12) | → In Review | Verify status changed |
| Work complete | → Done | Verify status changed |
| Blocked | → Blocked | Verify status changed |
At minimum, update the issue:
CRITICAL: Use cached project data for state queries, NOT labels and NOT repeated API calls.
# WRONG - do not use labels for state
gh issue list --label "status:in-progress"
# WRONG - do not make repeated API calls
gh project item-list "$GITHUB_PROJECT_NUM" --owner "$GH_PROJECT_OWNER" \
--format json | jq -r '.items[] | select(.status.name == "In Progress")'
# RIGHT - use cached data (0 API calls)
echo "$GH_CACHE_ITEMS" | jq -r '.items[] | select(.status.name == "In Progress")'
Skill: github-api-cache, issue-lifecycle, project-status-sync, project-board-enforcement
If any step fails unexpectedly:
error-recoverySkill: error-recovery
Work is complete when:
| Step | Skill(s) | Gate |
|---|---|---|
| 1 | issue-prerequisite, project-board-enforcement | Must have issue IN PROJECT BOARD |
| 2 | issue-lifecycle | - |
| 3 | issue-decomposition | - |
| 4 | memory-integration | - |
| 5 | pre-work-research | - |
| 6 | branch-discipline, project-board-enforcement | Must not be on main, Status → In Progress |
| 7 | tdd-full-coverage, strict-typing, inline-documentation, inclusive-language, no-deferred-work | - |
| 8 | acceptance-criteria-verification, research-after-failure | - |
| 9 | review-scope, comprehensive-review, security-review, review-gate | Review artifact required |
| 10 | apply-all-findings, deferred-finding | Unaddressed: 0 required |
| 11 | tdd-full-coverage | - |
| 12 | clean-commits, pr-creation, review-gate, project-board-enforcement | Hook blocks without artifact, Status → In Review |
| 13 | ci-monitoring, verification-before-merge | Must be green, Status → Done on merge |
This process is enforced by:
gh pr create - Blocks without review artifactgh pr merge - Verifies CI and reviewgit checkout -b - Verifies issue is in project boardgit checkout -b - Updates Status → In Progressgh pr create - Updates Status → In ReviewIf project board verification fails:
## BLOCKED: Project Board Compliance Failed
**Issue:** #[NUMBER]
**Problem:** [Issue not in project / Status not set / Update failed]
**Required Action:**
1. Add issue to project board
2. Set required fields (Status, Type, Priority)
3. Retry the blocked action
**Command to add:**
gh project item-add $GITHUB_PROJECT_NUM --owner $GH_PROJECT_OWNER --url [ISSUE_URL]
Do NOT proceed past a project board gate failure. Fix it first.
This skill should be used when the user asks to "create a slash command", "add a command", "write a custom command", "define command arguments", "use command frontmatter", "organize commands", "create command with file references", "interactive command", "use AskUserQuestion in command", or needs guidance on slash command structure, YAML frontmatter fields, dynamic arguments, bash execution in commands, user interaction patterns, or command development best practices for Claude Code.
This skill should be used when the user asks to "create an agent", "add an agent", "write a subagent", "agent frontmatter", "when to use description", "agent examples", "agent tools", "agent colors", "autonomous agent", or needs guidance on agent structure, system prompts, triggering conditions, or agent development best practices for Claude Code plugins.
This skill should be used when the user asks to "create a hook", "add a PreToolUse/PostToolUse/Stop hook", "validate tool use", "implement prompt-based hooks", "use ${CLAUDE_PLUGIN_ROOT}", "set up event-driven automation", "block dangerous commands", or mentions hook events (PreToolUse, PostToolUse, Stop, SubagentStop, SessionStart, SessionEnd, UserPromptSubmit, PreCompact, Notification). Provides comprehensive guidance for creating and implementing Claude Code plugin hooks with focus on advanced prompt-based hooks API.