task-management
Manage tasks across nested projects with sequential ID tracking. Use when working with TODO.md files, task management, marking tasks complete/started/blocked, or tracking project status across multiple subprojects. Auto-discovers TODO.md files in subdirectories and maintains sequential ID management.
SKILL.md
| Name | task-management |
| Description | Manage tasks across nested projects with sequential ID tracking. Use when working with TODO.md files, task management, marking tasks complete/started/blocked, or tracking project status across multiple subprojects. Auto-discovers TODO.md files in subdirectories and maintains sequential ID management. |
name: task description: Manage tasks across nested projects. Use with /task list, /task complete [id], /task update [id], /task show [id], /task validate. argument-hint: [list|list-all|complete|update|show|validate|new] [task-id]
Task Management
This skill provides task tracking across nested projects with strict formatting for reliable automation.
Arguments received: $ARGUMENTS
Slash Command Routing
Based on the argument, run the appropriate action:
| Command | Action |
|---|---|
/task or /task list | Run scripts/list-tasks.sh and copy output into response |
/task list-all | Run scripts/list-tasks.sh --include-completed and copy output into response |
/task complete <id> | Run scripts/complete-task.sh <id> |
/task update <id> [--status <v>] [--priority <v>] [--title <v>] | Run scripts/update-task.sh <id> [flags] |
/task show <id> | Read the task from the appropriate TODO.md or COMPLETED.md |
/task validate | Run scripts/validate-todos.py |
/task new | Follow the "Creating a New Task" workflow below |
All script paths are relative to .claude/skills/task-management/.
ā NEVER during list commands:
- Run validation checks
- Fix TODO.md files
- Add extra summaries after the script output
File Structure
Each project has two files:
| File | Purpose | Edit By |
|---|---|---|
TODO.md | Active tasks only | Scripts + manual |
COMPLETED.md | Completed tasks only | complete-task.sh script only |
Strict Format Specification
Task Boundaries (MANDATORY)
Every task is wrapped in explicit markers:
<!-- TASK:123 -->
### 123. Task Title
| Field | Value |
|-------|-------|
| **id** | 123 |
| **status** | in_progress |
| **priority** | high |
**Description**
Task description here.
<!-- END TASK:123 -->
Rules:
- Opening marker:
<!-- TASK:{id} --> - Closing marker:
<!-- END TASK:{id} --> - One blank line before opening marker
- Content between markers is the task body
Metadata Table (MANDATORY)
All tasks MUST have this exact table format:
| Field | Value |
|-------|-------|
| **id** | 123 |
| **status** | pending | in_progress | blocked | complete |
| **priority** | critical | high | medium | low |
| **created** | 2026-02-08 |
Allowed Values (STRICT):
| Field | Allowed Values |
|---|---|
| status | pending, in_progress, blocked, complete |
| priority | critical, high, medium, low |
NO synonyms, NO emojis in data values.
Description Section (MANDATORY)
**Description**
Task description goes here. Can be multiple lines.
Optional Sections
**Notes**
Additional notes.
**Files**
- `path/to/file.rs`
- `path/to/other.rs`
**Depends On**
- Task 45
- Task 67
**Acceptance Criteria**
- [ ] Criterion one
- [ ] Criterion two
Quick Reference Section (AUTO-GENERATED)
The Quick Reference table is generated by scripts, never edited manually.
## Quick Reference
| ID | Title | Status | Priority |
|----|-------|--------|----------|
| 122 | Contact Import | š” In Progress | š High |
| 123 | Profile Export | š Pending | š” Medium |
*Auto-generated. Last updated: 2026-02-08T15:30:00Z*
Status Emojis (rendering only):
pendingā šin_progressā š”blockedā š«completeā ā
Priority Emojis (rendering only):
criticalā š“highā šmediumā š”lowā š¢
File Header Template
TODO.md Template
<!--
TODO.md - Active Tasks for [Project]
ā ļø IMPORTANT: This file uses strict formatting. See:
.claude/skills/task-management/SKILL.md
Generated sections are marked - DO NOT EDIT MANUALLY.
-->
# [Project] Tasks
*Active tasks only. See [COMPLETED.md](./COMPLETED.md) for history.*
**Quick Links**: [Active Tasks](#quick-reference) | [Completed Tasks](./COMPLETED.md)
---
## Quick Reference
<!-- QR-START (AUTO-GENERATED - DO NOT EDIT) -->
| ID | Title | Status | Priority |
|----|-------|--------|----------|
<!-- QR-END -->
---
## Tasks
<!-- TASKS-START -->
<!-- Put new tasks here -->
<!-- TASKS-END -->
COMPLETED.md Template
<!--
COMPLETED.md - Completed Tasks for [Project]
ā ļø IMPORTANT: This file is APPEND-ONLY at the top.
Newest completed tasks go in "## Current Month" section.
See SKILL.md for completion workflow.
-->
# Completed Tasks - [Project]
**Stats**: 47 total | [Current Year]: 12
---
## Current Month (2026-02)
<!-- New completed tasks go HERE (at the top) -->
---
## Previous Months
### 2026-01
<!-- Completed tasks from January -->
## 2025
### 2025-12
<!-- Completed tasks from December 2025 -->
Task ID System
- Sequential IDs: Start at 1, increment across ALL subprojects
- No ranges: IDs are simply sequential (1, 2, 3, 49, 50, etc.)
- Cross-project: Task 1 in one folder and Task 2 in another - IDs are unique across all projects
- Never reuse: If task 5 is deleted, next task is 6 (not 5)
User Commands
| Command | Action |
|---|---|
/task or /task list | Run scripts/list-tasks.sh |
/task list-all | Run scripts/list-tasks.sh --include-completed |
/task show 51 | Read task from appropriate TODO.md |
/task complete 51 | Run scripts/complete-task.sh 51 |
/task update 51 --status in_progress | Run scripts/update-task.sh 51 --status in_progress |
/task validate | Run scripts/validate-todos.py |
/task new | Create a new task using the workflow below |
Workflows
Creating a New Task
-
Find the next available task ID (shown at the bottom of list output):
.claude/skills/task-management/scripts/list-tasks.sh -
Determine the correct file:
- Single-project task ā
cli/TODO.md,contracts/TODO.md, etc. - Cross-project task (spans 2+ projects) ā Root
TODO.md
- Single-project task ā
-
Add task with proper format:
<!-- TASK:126 --> ### 126. Task Title | Field | Value | |-------|-------| | **id** | 126 | | **status** | pending | | **priority** | high | | **created** | 2026-02-08 | **Description** Task description here. <!-- END TASK:126 --> -
Regenerate Quick Reference:
.claude/skills/task-management/scripts/regenerate-qr.sh cli/TODO.md -
Validate:
.claude/skills/task-management/scripts/validate-todos.py
Completing a Task (USE THE SCRIPT)
ALWAYS use the completion script - never manually move tasks:
.claude/skills/task-management/scripts/complete-task.sh 122
This script will:
- Find task 122 in TODO.md files
- Update status to
complete - Add
completeddate field - Move task to appropriate COMPLETED.md (top of current month)
- Remove from TODO.md
- Regenerate Quick Reference
- Validate the result
Why use the script?
- Ensures consistent formatting
- Prevents mistakes in date formats
- Maintains proper ordering in COMPLETED.md
- Keeps Quick Reference in sync
Updating a Task
ALWAYS use the update script - never manually edit task metadata:
.claude/skills/task-management/scripts/update-task.sh 3 --status in_progress
.claude/skills/task-management/scripts/update-task.sh 7 --priority critical --title "Urgent fix"
This script will:
- Find the task in TODO.md files
- Validate the new field values
- Apply updates (status, priority, and/or title)
- Show before/after for changed fields
- Regenerate Quick Reference
- Validate the result
Note: To mark a task as complete, use complete-task.sh instead.
Task Location Rules
| File | What Goes Here |
|---|---|
| Root TODO.md | Cross-project tasks only (spans 2+ subprojects) |
| cli/TODO.md | CLI-only tasks |
| contracts/TODO.md | Contract-only tasks |
| discovery/TODO.md | Discovery service tasks |
If a task is in the wrong file:
- Move it to the correct file
- Run
regenerate-qr.shon both files - Run
validate-todos.pyto verify
Validation Script
The validation script checks:
- Task boundaries: Every
<!-- TASK:{id} -->has matching<!-- END TASK:{id} --> - Required fields: Every task has
id,status,priority,description - Enum values:
statusandpriorityuse allowed values only - ID uniqueness: No duplicate task IDs across all files
- ID matching: Task marker ID matches metadata table ID
- QR section: Quick Reference markers are present
- No completed in TODO: Tasks with
status: completeare in COMPLETED.md - QR accuracy: Quick Reference contains all active tasks, no extras
Run validation:
.claude/skills/task-management/scripts/validate-todos.py
With verbose output:
.claude/skills/task-management/scripts/validate-todos.py --verbose
Script Reference
| Script | Purpose |
|---|---|
list-tasks.sh | List all active tasks |
list-tasks.sh --include-completed | List all tasks including completed |
complete-task.sh <id> | Mark task complete and move to COMPLETED.md |
update-task.sh <id> [--status <v>] [--priority <v>] [--title <v>] | Update task fields in TODO.md |
validate-todos.py | Validate all TODO.md files |
regenerate-qr.sh <file> | Regenerate Quick Reference for one file |
regenerate-qr.sh --all | Regenerate all Quick References |
Common Issues
"Task boundary mismatch"
A <!-- TASK:{id} --> marker doesn't have a matching <!-- END TASK:{id} -->. Check the task formatting.
"Missing required field"
The metadata table is missing id, status, priority, or description. Add the missing field.
"Invalid status value"
Status must be exactly: pending, in_progress, blocked, or complete. No spaces, no emojis, no variations.
"Duplicate task ID"
The same ID exists in multiple files. Tasks must have unique IDs across all projects.
"Completed task in TODO.md"
A task with status: complete is still in a TODO.md file. Run complete-task.sh to move it to COMPLETED.md.
File Organization
project/
āāā TODO.md # Cross-project tasks
āāā COMPLETED.md # Cross-project completed tasks
āāā cli/
ā āāā TODO.md # CLI active tasks
ā āāā COMPLETED.md # CLI completed tasks
āāā contracts/
ā āāā TODO.md # Contracts active tasks
ā āāā COMPLETED.md # Contracts completed tasks
āāā .claude/skills/task-management/
āāā SKILL.md # This file
āāā scripts/
āāā list-tasks.sh
āāā complete-task.sh
āāā update-task.sh
āāā validate-todos.py
āāā regenerate-qr.sh