// Issue-driven development workflow using GitHub issues as the source of truth. Use when asking "what's next?", checking project status, updating progress, or managing work priorities.
| name | issue-workflow |
| description | Issue-driven development workflow using GitHub issues as the source of truth. Use when asking "what's next?", checking project status, updating progress, or managing work priorities. |
Use GitHub issues as the north star for all project work. This skill defines how to check status, pick work, track progress, and maintain issue hygiene.
Use this skill when:
At the start of each new conversation, pull issue context to understand current state:
# View the active epic with all comments
gh issue view 70 --repo owner/repo --comments
# View recently completed issues with learnings
gh issue view 78 --repo owner/repo --comments
This gives you:
Why this matters:
From the issue comments, identify:
Now you have full context to continue work seamlessly.
When user asks what to work on:
# Check for active epics (label:epic, state:open)
gh issue list --label epic --state open
Or use MCP tool:
mcp__github__search_issues with q: "repo:owner/repo is:issue is:open label:epic"
Fetch the epic issue and look for:
From the epic's build order, find the first unchecked item. Consider:
Score each option using complexity-scoring skill (1-5 scale):
## Next Steps from Epic #XX
Based on the build order, here are your options:
1. **[Task Name]** - [Brief description]
- Complexity: [1-5]/5 → [No plan / Plan recommended]
- Blocked by: None / [Blocker]
2. **[Alternative Task]** - [Brief description]
- Complexity: [1-5]/5 → [No plan / Plan recommended]
What would you like to work on?
→ See complexity-scoring skill for how to score tasks.
When user selects a task, route based on complexity score:
| Score | Action |
|---|---|
| 1-2 | Proceed directly with implementation |
| 3 | Use judgment - proceed or enter plan mode |
| 4-5 | Enter plan mode before writing code |
Example routing:
User: "let's do FilterPanel"
Claude: "FilterPanel scores **4/5** on complexity:
- Multiple design decisions (price range, checkboxes, layout)
- Integrates with search state
- Needs responsive behavior
Entering plan mode to design the approach first."
[Uses EnterPlanMode tool]
For tasks scoring ≤2:
User: "fix the typo in Button"
Claude: "Simple fix (1/5). Handling directly."
[Proceeds without plan mode]
After completing work:
Always close issues immediately when their work is complete. Don't leave completed work with open issues.
mcp__github__update_issue({
owner: "sernstberger",
repo: "base-joy",
issue_number: XX,
state: "closed"
})
Always run checks before committing. This catches issues early and keeps the codebase clean.
# TypeScript check (zero errors required)
npx tsc --noEmit -p libs/ui/styled/tsconfig.json
# Run tests (all must pass)
yarn test
# Optional: lint check
yarn lint
If errors exist:
Always commit completed work before updating issues. This keeps code and issue state in sync.
git add <changed-files>
git commit -m "feat(scope): description
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>"
Commit message prefixes:
feat - New features/componentsfix - Bug fixesrefactor - Code restructuringdocs - Documentationtest - TestsAlways update the epic checklist immediately after completing work. This is essential for cross-conversation continuity.
Use mcp__github__update_issue to:
- [x] Item ✅Example:
gh issue edit 70 --body "$(cat <<'EOF'
[Full updated epic body with checked boxes]
EOF
)"
Document key decisions and learnings on closed issues. This creates context for future conversations.
When closing a sub-issue, add a comment capturing:
Example:
gh issue comment 78 --repo owner/repo --body "## Learnings from Scaffolding
**Pattern Followed:**
- Used vacation-rental demo as reference
- Port 5175 (next sequential port)
**Key Decisions:**
1. Created RESEARCH.md upfront to capture specs
2. Added Settings page early (not in original spec)
3. Decided on org simulation approach
**Files Created:**
- 22 files, 681 lines
- Complete app structure ready
**Next Steps:**
- Sprint 0, task 5: Mock data (#80)
- Sprint 1: Enhanced components"
Update the epic with progress commentary. This helps understand the journey when reviewing later.
Add a comment to the epic summarizing:
Example:
gh issue comment 70 --repo owner/repo --body "## Sprint 0 Progress Update
✅ **Completed:**
- #78 - Scaffold calendar demo app
- RESEARCH.md created
**Status:** Phase 0: Infrastructure - 80% complete (4/5 tasks)
**Key Discoveries:**
1. Settings needs 8 major sections (created #79)
2. Mock org data needed (created #80)
**Next Task:** Sprint 0, #5 - Mock data"
Before ending a session, check:
When creating new epics, use this structure:
## Overview
[Brief description of the initiative]
## Current Status
**Phase X: [Phase Name]** [✅ Complete / 🔄 In Progress]
- Bullet points of what's done
- What's currently being worked on
**Next Up:** [Specific next task]
---
## [Section 1 - e.g., Pages]
- [ ] **Item 1** - Description
- [ ] **Item 2** - Description
- [x] **Item 3** - Description ✅
## [Section 2 - e.g., Components]
### Priority Level
- [ ] #XX Item (links to sub-issue if exists)
- [x] #YY Item ✅
## Build Order
1. ~~Completed item~~ ✅
2. ~~Another completed~~ ✅
3. **Current item** ← Next
4. Future item
5. Future item (blocked by #3)
## Related
- Parent: #XX (if this is part of larger initiative)
- Sub-issues: #YY, #ZZ
For significant tasks, create dedicated issues:
## Summary
[What needs to be built]
## Acceptance Criteria
- [ ] Criterion 1
- [ ] Criterion 2
## Technical Notes
[Implementation hints, patterns to follow]
## Related
- Epic: #XX
| Label | Purpose |
|---|---|
epic | Large multi-part initiatives |
component | Library component work |
demo-app | Demo application work |
docs | Documentation |
bug | Bug fixes |
P0, P1, P2 | Priority levels |
blocked | Waiting on something |
gh issue list --label epic --state open
gh issue view 43
mcp__github__update_issue with owner, repo, issue_number, body
mcp__github__create_issue with owner, repo, title, body, labels
mcp__github__search_issues with q: "repo:owner/repo [search terms]"
Between tasks in the same session, use /compact to:
Use /clear when:
User: "what's next?"
Claude: [Pulls epic #70 with --comments]
[Reads learnings from #78]
[Understands: Sprint 0 is 80% done, mock data is next]
[Presents: "Based on epic #70, next is task #5: Mock data (#80)"]
User: "let's do it"
Claude: [Creates TodoWrite for tracking]
[Implements mock data]
[Runs type check]
[Commits the changes]
[Updates epic #70: checks box for task #5]
[Adds learnings comment to #80]
[Adds progress comment to #70]
User: "what's next?"
Claude: [Fetches updated epic #70]
[Shows: "Sprint 0 complete! Sprint 1 starts with CalendarHeader"]
User: "commit the scaffolding changes"
Claude: [Runs git status, git diff]
[Creates commit with proper message]
⚠️ **CRITICAL STEP - Update Issues** ⚠️
[gh issue edit 70 - checks box for #78]
[gh issue comment 78 - adds learnings]
[gh issue comment 70 - adds progress update]
"✅ Committed and updated epic #70!"
When building pages or complex features, prefer a stub-first approach:
function Stub({ name, className = '' }: { name: string; className?: string }) {
return (
<div className={`bg-neutral-100 border-2 border-dashed border-neutral-300
rounded-lg flex items-center justify-center
text-neutral-500 font-mono text-sm ${className}`}>
{name}
</div>
);
}
// Usage
<Stub name="ImageGallery" className="h-[400px]" />
<Stub name="ReviewsSection (RatingBreakdown + ReviewCards)" className="h-[300px]" />
When running type checks or linting, you may encounter pre-existing errors unrelated to your current work. Don't ignore these - clean them up in a separate commit.
yarn workspace @base-joy/[app] tsc --noEmitTask tool with subagent_type: "general-purpose"
Prompt: "Fix the following pre-existing TypeScript/ESLint errors.
Keep fixes minimal and focused. Do NOT modify [list of files
from current feature]. Commit fixes separately."
fix: clean up pre-existing lint/type errors@typescript-eslint/no-unused-vars)complexity-scoring - 1-5 scale for task complexity (used in Step 4-5)task-orchestration - Model selection, parallelization based on complexitydemo-app-researcher - Research apps before creating epicscomponent-generator - Build new library componentsplaywright-dev-workflow - Show user progress in real-time during UI development