This skill should be used when executing tasks from ai-state/active/tasks.yaml sequentially. It loads tasks, gathers context, implements features with phase-appropriate testing, updates task status in tasks.yaml, organizes tests into ai-state/regressions/ folders, and logs all operations to operations.log. Use after write-plan creates tasks.yaml or when resuming development work.
Scanned 2/12/2026
Install via CLI
openskills install majiayu000/claude-skill-registry---
name: execute-tasks
description: This skill should be used when executing tasks from ai-state/active/tasks.yaml sequentially. It loads tasks, gathers context, implements features with phase-appropriate testing, updates task status in tasks.yaml, organizes tests into ai-state/regressions/ folders, and logs all operations to operations.log. Use after write-plan creates tasks.yaml or when resuming development work.
---
# Execute-Tasks Skill
## Purpose
Sequentially execute tasks from `ai-state/active/tasks.yaml` with proper context gathering, phase-appropriate testing, automatic test organization, status tracking, and comprehensive logging.
## When to Use
Use this skill when:
- After `/write-plan` creates tasks.yaml
- Starting development work
- Resuming work after breaks
- Processing task backlog
- Executing sprint work
## CRITICAL: Logging Requirements
**BEFORE YOU DO ANYTHING ELSE, LOG IT!**
Use the unified logging system via `.claude\scripts\log_task.bat` (Windows) or `log_operation.py`:
```bash
# Simple format (Windows):
.claude\scripts\log_task.bat TYPE TASK_ID "message"
# Full format (cross-platform):
python .claude/scripts/log_operation.py --type TYPE --task TASK_ID "message"
```
**Required logging for EVERY task:**
1. Log "Step X: [Step Name]" BEFORE starting each major step (1-8)
2. Log narrative BEFORE executing each substep that modifies state
3. Log all mandatory operation events (task.started, context.gathered, etc.)
**Example logging sequence for Step 2:**
```bash
# Log step header
.claude\scripts\log_task.bat narrative task-001-fastapi-setup "Step 2: Gather Context"
# Log substep 2.1
.claude\scripts\log_task.bat narrative task-001-fastapi-setup "Step 2.1: Load relevant files"
# Log substep 2.2
.claude\scripts\log_task.bat narrative task-001-fastapi-setup "Step 2.2: Save context snapshot"
# Log narrative before action (substep 2.3)
.claude\scripts\log_task.bat narrative task-001-fastapi-setup "Gathering context from backend standards and checking existing project files"
# Log completion (substep 2.4)
.claude\scripts\log_task.bat context task-001-fastapi-setup
```
**DO NOT skip these logs!** They provide visibility into your execution process.
**See `.claude/scripts/LOGGING_GUIDE.md` for complete reference.**
## Step-by-Step Execution Process
For each task with `status: pending` in tasks.yaml, follow these steps in exact order:
### Step 1: Load and Prepare Task
**FIRST: Log this step header**
```bash
.claude\scripts\log_task.bat narrative {task_id} "Step 1: Load and Prepare Task"
```
**1.1 Read the task and sprint context**:
- Read `ai-state/active/tasks.yaml`
- Extract top-level: phase
- Navigate into `sprints` array, find current sprint
- Extract sprint context: sprint, milestone, complexity_range
- Find first task with `status: pending` within the sprint's tasks
- Extract task fields: id, status, complexity, context, who, where, what, how, goal, check, close
**1.2 Update status to in_progress**:
- Use Edit tool to change task status from `pending` to `in_progress` in tasks.yaml
- Save the file
**1.3 Log task start**:
```bash
.claude\scripts\log_task.bat started {task_id} "{what}"
```
**1.4 Create progress tracking**:
- Use TodoWrite to create entry for this task with status `in_progress`
### Step 2: Gather Context
**FIRST: Log this step header**
```bash
.claude\scripts\log_task.bat narrative {task_id} "Step 2: Gather Context"
```
**2.1 Load relevant files**:
```bash
.claude\scripts\log_task.bat narrative {task_id} "Step 2.1: Load relevant files"
```
- Read files mentioned in task's `where` field
- Read standards from `ai-state/standards/{standard}.md` if referenced in `how`
- Search for related code in codebase
**2.2 Save context snapshot**:
```bash
.claude\scripts\log_task.bat narrative {task_id} "Step 2.2: Save context snapshot"
```
- Create `ai-state/contexts/{sprint}/{task_id}.md` with:
- Full task specification
- Relevant code snippets
- Standards being followed
- Dependencies noted
- **NOTE**: Contexts are organized by sprint folder for better organization
**2.3 Log narrative action**:
```bash
.claude\scripts\log_task.bat narrative {task_id} "Gathering context from backend standards and checking existing project files"
```
**2.4 Log context gathering**:
```bash
.claude\scripts\log_task.bat context {task_id}
```
### Step 3: Execute Implementation
**FIRST: Log this step header**
```bash
.claude\scripts\log_task.bat narrative {task_id} "Step 3: Execute Implementation"
```
**3.1 Implement the feature**:
- Follow the `what` description exactly
- Achieve the `goal` criteria
- Reference standards from `how` field
- Write files to locations in `where` field
**3.2 Use appropriate tools**:
- Write tool for new files
- Edit tool for existing files
- Follow coding standards from the `how` field
**3.3 Log narrative action**:
```bash
.claude\scripts\log_task.bat narrative {task_id} "Creating requirements.txt and main.py with FastAPI initialization"
```
**3.4 Log implementation**:
```bash
.claude\scripts\log_task.bat implemented {task_id}
```
### Step 4: Write Phase-Appropriate Tests
**FIRST: Log this step header**
```bash
.claude\scripts\log_task.bat narrative {task_id} "Step 4: Write Phase-Appropriate Tests"
```
**4.1 Determine required test count**:
Read `.khujta/phase.json` and write tests based on phase:
- **Prototype**: 2 tests (smoke + happy path)
- **MVP**: 4 tests (smoke, happy, error, auth)
- **Growth**: 5 tests (+ edge cases)
- **Scale**: 6-8 tests as needed
**4.2 Create test file**:
- Name: `test_{component}.py` (or appropriate for stack)
- Location: Project root directory (will move later)
- Use Write tool to create file
**4.3 Write test cases**:
- Test 1 (smoke): Basic functionality from `check.valid`
- Test 2 (happy path): Main use case from goal
- Additional tests per phase requirements
- Cover `check.error` scenarios
**4.4 Log narrative action**:
```bash
.claude\scripts\log_task.bat narrative {task_id} "Writing 2 tests (smoke + happy path) for FastAPI server startup validation"
```
**4.5 Log test creation**:
```bash
.claude\scripts\log_task.bat tests-written {task_id} "2 tests"
```
### Step 5: Run Tests and Verify
**FIRST: Log this step header**
```bash
.claude\scripts\log_task.bat narrative {task_id} "Step 5: Run Tests and Verify"
```
**5.1 Execute tests**:
- Use Bash tool: `pytest test_{component}.py -v`
- Capture output
**5.2 If tests FAIL**:
1. Debug the issue
2. Fix implementation or test
3. Re-run tests
4. Repeat until ALL tests pass
5. **DO NOT proceed** until tests pass
**5.3 Log test results**:
```bash
.claude\scripts\log_task.bat tests-passed {task_id} "2/2 passing"
```
### Step 6: Organize Tests into Regressions
**FIRST: Log this step header**
```bash
.claude\scripts\log_task.bat narrative {task_id} "Step 6: Organize Tests into Regressions"
```
**6.1 Determine destination**:
- Use task's `context` field (backend/frontend/database/devops)
- Destination: `ai-state/regressions/{context}/`
**6.2 Create directory if needed**:
- Use Bash: `mkdir -p ai-state/regressions/{context}`
**6.3 Log narrative action**:
```bash
.claude\scripts\log_task.bat narrative {task_id} "Moving tests to ai-state/regressions/backend/ directory for organization"
```
**6.4 Move test file**:
- Use Bash: `mv test_{component}.py ai-state/regressions/{context}/`
**6.5 Verify tests still work**:
- Run: `pytest ai-state/regressions/{context}/test_{component}.py -v`
- Update imports if paths changed
**6.6 Log organization**:
```bash
.claude\scripts\log_task.bat tests-organized {task_id} "ai-state/regressions/{context}/"
```
### Step 7: Complete Task
**7.1 Verify completion criteria**:
- Check task meets the `close` criteria
- Verify all `check` requirements passed
**7.2 Update status to completed**:
- Use Edit tool to change status from `in_progress` to `completed` in tasks.yaml
- Save tasks.yaml
**7.3 Log completion**:
```bash
.claude\scripts\log_task.bat completed {task_id} "{close}"
```
**7.4 Update progress tracking**:
- Use TodoWrite to mark task as completed
### Step 8: Proceed to Next Task
**8.1 Check sprint boundary**:
- Read tasks.yaml and identify current sprint (sprint with in_progress or just-completed tasks)
- Check if current sprint has any remaining `status: pending` tasks
- If current sprint is complete BUT next sprint has pending tasks:
- **STOP EXECUTION** - Do not proceed to next sprint automatically
- Show message: "Sprint {N} complete. Run `/core:execute-tasks` again to start Sprint {N+1}"
- This allows human review of sprint completion before starting next sprint
**8.2 Find next task in CURRENT sprint**:
- Look for next task with `status: pending` **in the current sprint only**
- Check task's `when` field for dependencies
- If dependencies not met, skip to next available task **in current sprint**
**8.3 Repeat process**:
- If pending task found in current sprint: Return to Step 1 with the new task
- If no pending tasks in current sprint: Proceed to Step 9
**8.4 When current sprint complete**:
- If no more pending tasks **in current sprint**, proceed to Step 9: Sprint Completion
- Do NOT automatically continue to next sprint
### Step 9: Sprint Completion (When Current Sprint Done)
**TRIGGER**: When no more `pending` tasks remain **in the current sprint**
**9.1 Verify sprint completion**:
- Count tasks with `status: completed` **in current sprint**
- Count tasks with `status: blocked` or failed **in current sprint**
- Confirm all tasks in current sprint have a final status (no pending remain)
**9.2 Run sprint completion script**:
```bash
python .claude/scripts/complete_sprint.py
```
This automatically generates:
1. **Test runner scripts**: `ai-state/regressions/{context}/run.bat` and `run.sh`
2. **Sprint report**: `ai-state/reports/{sprint}-report.md`
3. **Test results**: `ai-state/reports/{sprint}-test-results.json`
4. **Human docs**: `ai-state/human-docs/{sprint}-summary.md`
5. **Operations log entry**: Sprint completion logged
**9.3 Verify outputs**:
- Check that all regression tests passed
- Review sprint report for completeness
- Confirm human docs are stakeholder-ready
**9.4 Check for next sprint**:
- If more sprints exist in tasks.yaml with pending tasks:
- **Display message**: "✅ Sprint {N} complete! Review reports in ai-state/reports/ and ai-state/human-docs/"
- **Display message**: "📋 Sprint {N+1} is ready. Run `/core:execute-tasks` when ready to start."
- **STOP** - Do not continue automatically
- If no more sprints:
- Display message: "🎉 All sprints complete! Project ready for next phase."
**NOTE**: Sprint completion runs in ALL phases including prototype. It's no longer just for Growth/Scale phases.
## Required Log Entries Per Task
Every task execution MUST create these log entries in `ai-state/operations.log`:
### Mandatory Operation Logs (7 minimum)
1. `[timestamp] [phase] [sprint] task.started: {task_id} - {what}`
2. `[timestamp] [phase] [sprint] context.gathered: {task_id}`
3. `[timestamp] [phase] [sprint] implementation.complete: {task_id}`
4. `[timestamp] [phase] [sprint] tests.written: {task_id} - {count} tests`
5. `[timestamp] [phase] [sprint] tests.passed: {task_id} - {count}/{count} passing`
6. `[timestamp] [phase] [sprint] tests.organized: {task_id} → ai-state/regressions/{context}/`
7. `[timestamp] [phase] [sprint] task.completed: {task_id} - {close}`
### Narrative Logs (4 minimum - logged BEFORE executing each major step)
Before Step 2: `[timestamp] [phase] [sprint] narrative: {task_id} - {description of what you're about to do}`
Before Step 3: `[timestamp] [phase] [sprint] narrative: {task_id} - {description of implementation about to execute}`
Before Step 4: `[timestamp] [phase] [sprint] narrative: {task_id} - {description of tests about to write}`
Before Step 6: `[timestamp] [phase] [sprint] narrative: {task_id} - {description of test organization}`
**Examples of narrative logs:**
- "narrative: task-001 - Gathering context from backend standards and checking existing files"
- "narrative: task-001 - Creating requirements.txt and main.py with FastAPI initialization"
- "narrative: task-001 - Writing 2 tests (smoke + happy path) for server startup validation"
- "narrative: task-001 - Moving tests to ai-state/regressions/backend/ directory"
**Total minimum log entries per task: 11** (7 mandatory operations + 4 narratives)
**Log Format**:
- `[timestamp]`: ISO 8601 format (YYYY-MM-DDTHH:MM:SSZ)
- `[phase]`: Phase from top-level tasks.yaml (e.g., prototype, mvp)
- `[sprint]`: Sprint name from sprints array (e.g., sprint-1)
- `{task_id}`: Task identifier (e.g., task-001-fastapi-setup)
- Additional context as specified per entry
## Phase Requirements Reference
**Prototype** (0-100 users, 30 min to ship):
- Tests: 2 (smoke + happy path)
- Coverage: 40%
- Quality: 6.0/10
**MVP** (100-1K users, 1-2 hours):
- Tests: 4 (+ errors + auth)
- Coverage: 60%
- Quality: 7.0/10
**Growth** (1K-10K users, 2-4 hours):
- Tests: 5 (+ edge cases)
- Coverage: 70%
- Quality: 7.5/10
**Scale** (10K+ users, 4-8 hours):
- Tests: 6-8 as needed
- Coverage: 80%
- Quality: 8.0/10
## Error Handling
**If implementation fails**:
1. Log error to operations.log: `[timestamp] [epic] [sprint] task.failed: {task_id} - {error}`
2. Update status to `blocked` in tasks.yaml
3. Create note in `ai-state/debt/{task_id}-failure.md`
4. Skip to next task
**If tests fail after 3 attempts**:
1. Log: `[timestamp] [epic] [sprint] tests.failed: {task_id} - {failure_details}`
2. Mark task as `blocked`
3. Save test output to `ai-state/debt/{task_id}-test-failures.txt`
4. Skip to next task
**If dependencies missing**:
1. Log: `[timestamp] [epic] [sprint] task.blocked: {task_id} - waiting for {dependency}`
2. Update status to `blocked`
3. Skip to next available task
## Files Modified
**Reads from**:
- `ai-state/active/tasks.yaml`
- `.khujta/phase.json`
- `ai-state/standards/{standard}.md`
- Files mentioned in task's `where`
**Writes to**:
- `ai-state/operations.log` (append all operations)
- `ai-state/active/tasks.yaml` (update status fields)
- `ai-state/contexts/{sprint}/{task_id}.md` (save context)
- `ai-state/regressions/{context}/` (move test files)
- Implementation files per task's `where` field
- `ai-state/reports/{sprint}-*.md` (on sprint completion)
- `ai-state/human-docs/{sprint}-*.md` (on sprint completion)
## Tools Required
- **Read**: Load tasks, context, standards
- **Write**: Create new implementation files, tests, context docs
- **Edit**: Modify existing files, update tasks.yaml status
- **Bash**: Run tests, create directories, move files
- **TodoWrite**: Track real-time progress
## Success Criteria
A successful execution produces:
✅ All pending tasks now `completed` or `blocked` with documented reason
✅ All tests passing and organized in `ai-state/regressions/{context}/`
✅ Complete `operations.log` with minimum 11 entries per task (7 operations + 4 narratives)
✅ Updated `tasks.yaml` with all status changes
✅ Context preserved in `ai-state/contexts/{sprint}/{task_id}.md` for each task
✅ TodoWrite list reflects final state
✅ Sprint completion reports generated (when all tasks done)
## Critical Rules
- **Sequential only**: Execute one task at a time, never skip ahead
- **Status updates required**: Always update tasks.yaml before and after each task
- **Tests must pass**: Never mark task completed if tests are failing
- **Tests must be organized**: Always move tests to ai-state/regressions/
- **Logging is mandatory**: Every operation AND narrative must be logged to operations.log (min 11 per task)
- **Narrative before action**: Always log narrative description BEFORE executing each major step
- **TodoWrite for visibility**: Use TodoWrite for real-time progress tracking
- **Phase/Sprint context**: Always extract and include phase/sprint in ALL log entries
## Example Log Entries
For task-001-fastapi-setup in prototype phase, sprint-1:
```
[2025-11-07T01:35:00Z] [prototype] [sprint-1] task.started: task-001-fastapi-setup - Setup FastAPI project structure
[2025-11-07T01:35:10Z] [prototype] [sprint-1] narrative: task-001-fastapi-setup - Gathering context from backend standards and checking existing project files
[2025-11-07T01:35:15Z] [prototype] [sprint-1] context.gathered: task-001-fastapi-setup
[2025-11-07T01:36:00Z] [prototype] [sprint-1] narrative: task-001-fastapi-setup - Creating requirements.txt and main.py with FastAPI initialization
[2025-11-07T01:36:30Z] [prototype] [sprint-1] implementation.complete: task-001-fastapi-setup
[2025-11-07T01:36:45Z] [prototype] [sprint-1] narrative: task-001-fastapi-setup - Writing 2 tests (smoke + happy path) for server startup validation
[2025-11-07T01:37:00Z] [prototype] [sprint-1] tests.written: task-001-fastapi-setup - 2 tests
[2025-11-07T01:37:10Z] [prototype] [sprint-1] tests.passed: task-001-fastapi-setup - 2/2 passing
[2025-11-07T01:37:15Z] [prototype] [sprint-1] narrative: task-001-fastapi-setup - Moving tests to ai-state/regressions/backend/ directory
[2025-11-07T01:37:20Z] [prototype] [sprint-1] tests.organized: task-001-fastapi-setup → ai-state/regressions/backend/
[2025-11-07T01:37:25Z] [prototype] [sprint-1] task.completed: task-001-fastapi-setup - Server running on localhost:8000
```
This format enables easy filtering:
- `grep "prototype" operations.log` - All operations for this phase
- `grep "sprint-1" operations.log` - All operations for this sprint
- `grep "task-001" operations.log` - All operations for specific task
- `grep "task.completed" operations.log` - All completed tasks
- `grep "narrative:" operations.log` - All narrative descriptions showing what was done
No comments yet. Be the first to comment!