Persistent task workflow with state machine. Every message MUST announce state. Uses .claude/ files for multi-session continuity. Never use TodoWrite. Never auto-advance tasks.
npx claudepluginhub jagreehal/jagreehal-claude-skills --plugin jagreehal-claude-skillsThis skill uses the workspace's default tool permissions.
Persistent task workflow that survives session restarts.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Searches prompts.chat for AI prompt templates by keyword or category, retrieves by ID with variable handling, and improves prompts via AI. Use for discovering or enhancing prompts.
Checks Next.js compilation errors using a running Turbopack dev server after code edits. Fixes actionable issues before reporting complete. Replaces `next build`.
Persistent task workflow that survives session restarts.
EVERY SINGLE MESSAGE MUST START WITH YOUR CURRENT STATE
Format:
CHECK_STATUS
WORKING
VERIFY
COMPLETE
AWAITING_COMMIT
MARK_COMPLETE
BLOCKED
NOT JUST THE FIRST MESSAGE. EVERY. SINGLE. MESSAGE.
When you read a file → prefix with state When you run tests → prefix with state When you explain results → prefix with state When you ask a question → prefix with state
Example:
CHECK_STATUS
Reading session.md...
CHECK_STATUS
Status shows "in progress". Routing to WORKING.
TRANSITION: CHECK_STATUS → WORKING
WORKING
Reading requirements.md for task specs...
WORKING
Implementing getUser function with deps...
user: "continue"
↓
┌────────────────┐
┌───│ CHECK_STATUS │←──────────┬──────────┐
│ │ Read session.md│ │ │
│ └────────┬───────┘ │ │
│ │ │ │
Status= │ │ Status= │ │
"Complete" │ │ "in progress" │ │
│ │ │ │
↓ ↓ │ │
┌───────────┐ ┌──────────────┐ │ │
│ AWAITING_ │ │ WORKING │←────┐ │ │
│ COMMIT │ │ │ │ │ │
│ │ │ Read: │ │ │ │
│ Ask │ │ requirements │ │ │ │
│ permission│ │ tasks.md │ │ │ │
│ STOP │ └──────┬───────┘ │ │ │
└─────┬─────┘ │ │ │ │
│ │ task done │ │ │
user: yes │ │ │ │ │
│ ↓ │ │ │
│ ┌──────────────┐ │ │ │
│ │ VERIFY │ │ │ │
│ │ │ │ │ │
│ │ Run steps │─────┘ │ │
│ │ from │ fail │ │
│ │ requirements │ │ │
│ └──────┬───────┘ │ │
│ │ │ │
│ │ pass │ │
│ │ │ │
│ ↓ │ │
│ ┌──────────────┐ │ │
│ │ COMPLETE │ │ │
│ │ │ │ │
│ │ Update: │ │ │
│ │ session.md │─────────┘ │
│ │ Status= │ │
│ │ "Complete" │ │
│ └──────────────┘ │
│ │
↓ │
┌──────────────────┐ │
│ MARK_COMPLETE │ │
│ │ │
│ Update: tasks [x]│ │
│ Update: session │──────────────────────────────┘
│ (next task) │
└──────────────────┘
All files live in the project's .claude/ directory:
| File | Purpose |
|---|---|
.claude/tasks.md | Checklist of tasks |
.claude/requirements.md | Implementation specs, verification steps |
.claude/session.md | Current state for resume |
Prefix: CHECK_STATUS
Purpose: Read session.md and route based on Status field.
pwd to verify project directory.claude/session.mdPrefix: AWAITING_COMMIT
Purpose: Task is complete. Ask permission to mark done.
Prefix: MARK_COMPLETE
Purpose: Update task files after user approval.
[ ] to [x] for current taskPrefix: WORKING
Purpose: Implement the current task.
Update at these triggers:
| Trigger | Update |
|---|---|
| Start task | Status="in progress" |
| TDD cycle | Brief note in Notes |
| Hit blocker | Status="blocked", describe |
| Task done | → transition to VERIFY |
Prefix: VERIFY
Purpose: Run verification before claiming complete.
npm test
npm run lint
npm run build
Prefix: COMPLETE
Purpose: Update session.md to reflect completion.
Prefix: BLOCKED
Purpose: Cannot proceed, need user guidance.
When user says "create a plan" or "setup tasks":
.claude/tasks.md
- [ ] Task 1: [exact user wording]
- [ ] Task 2: [exact user wording]
.claude/requirements.md
## Verification
Before marking complete:
- `npm test` - all pass
- `npm run lint` - no errors
- `npm run build` - succeeds
## Task 1: [name]
- [specs from conversation]
- [constraints]
.claude/session.md
**Current:** Task 1
**Status:** in progress
## Done
(none yet)
## Notes
- [context for resume]
User: "continue"
Claude: *Reads tasks.md*
Claude: "Let me investigate the codebase to understand what's done"
Claude: *Searches 10+ files, runs git log*
Claude: *Wastes tokens figuring out state*
Problem: All that info is in session.md already.
User: "continue"
Claude: "CHECK_STATUS"
Claude: *Reads session.md*
Claude: "Status shows 'in progress'. Routing to WORKING."
Claude: "WORKING"
Claude: "Continuing Task 2..."
Claude: *Completes implementation*
Claude: "Task 1 is complete!"
*User commits and pushes*
*CI fails - tests broken*
Problem: Skipped verification, introduced bugs.
Claude: "VERIFY"
Claude: *Runs npm test* → All pass
Claude: *Runs npm lint* → All pass
Claude: *Runs npm build* → Success
Claude: "COMPLETE"
Claude: "Task 1 complete, all verification passed."
Claude: *Completes task*
Claude: *Runs git add . && git commit*
Problem: User loses control over commits.
Claude: "Task complete, ready for you to commit."
Claude: "May I mark this task as complete?"
Claude: "Task 1 done. Starting Task 2..."
Claude: *Explores codebase for Task 2*
Problem: User didn't approve advancing.
Claude: "Task 1 complete. May I mark it done?"
*Waits for user*
This skill REPLACES Claude Code's built-in todos:
WRONG: TodoWrite tool
RIGHT: .claude/tasks.md file
WRONG: Internal todo state
RIGHT: Visible, editable files
Why: TodoWrite state is lost between sessions. Files persist.
Symptom: "File not found" on continue
Fix:
pwd./.claude/session.md (project root)| State | Prefix | Action | Exit |
|---|---|---|---|
| CHECK_STATUS | CHECK_STATUS | Read session.md, route | Status-based |
| AWAITING_COMMIT | AWAITING_COMMIT | Ask permission, STOP | User response |
| MARK_COMPLETE | MARK_COMPLETE | Update files | → CHECK_STATUS |
| WORKING | WORKING | Implement task | → VERIFY |
| VERIFY | VERIFY | Run verification | Pass/Fail |
| COMPLETE | COMPLETE | Update session.md | → CHECK_STATUS |
| BLOCKED | BLOCKED | Explain, STOP | User guidance |