219 lines
5.5 KiB
Markdown
219 lines
5.5 KiB
Markdown
# Task Patterns
|
|
|
|
Deep patterns for using Tasks as your persistent state layer.
|
|
|
|
> **TL;DR**: Tasks survive compaction—your reasoning doesn't. One `in_progress` at a time. Mark completed immediately. Encode decisions in task descriptions. Before compaction, detail your current state. Track background agents with IDs in metadata.
|
|
|
|
## Why Tasks Matter for Context Management
|
|
|
|
Tasks survive context compaction. When context resets, you lose:
|
|
- Your reasoning chains
|
|
- Files you read
|
|
- Intermediate conclusions
|
|
- Decisions you made
|
|
|
|
But Tasks persist. They're your memory across compaction events.
|
|
|
|
## Core Principles
|
|
|
|
1. **Create immediately** — When scope is clear, `TaskCreate`
|
|
2. **One in_progress** — Only one active task at a time
|
|
3. **Complete as you go** — `TaskUpdate` to completed immediately, don't batch
|
|
4. **Expand dynamically** — `TaskCreate` as you discover work
|
|
5. **Reflect reality** — `TaskList` should match actual work remaining
|
|
6. **Encode decisions** — Completed task descriptions should capture what was decided
|
|
|
|
## Initial Pattern
|
|
|
|
Start with baseline tasks, expand as scope becomes clear:
|
|
|
|
```
|
|
TaskCreate: "Understand request and determine scope"
|
|
TaskCreate: "Execute primary task"
|
|
TaskCreate: "Synthesize and report"
|
|
```
|
|
|
|
Expand dynamically as you discover specific work items.
|
|
|
|
## Evolution Example
|
|
|
|
**Initial** (after reading request):
|
|
|
|
```
|
|
#1: "Understand request" → completed, description: "security review of auth module"
|
|
#2: "Identify files to review" → in_progress
|
|
```
|
|
|
|
**After scope discovery**:
|
|
|
|
```
|
|
#1: completed - "Understand request → security review of auth module"
|
|
#2: completed - "Identify files → 3 files in src/auth/"
|
|
#3: pending - "Load security skill"
|
|
#4: pending - "Check JWT token handling"
|
|
#5: pending - "Check session management"
|
|
#6: pending - "Check password hashing"
|
|
#7: pending - "Synthesize findings"
|
|
#8: pending - "Compile report"
|
|
```
|
|
|
|
**During execution** (discovered issue):
|
|
|
|
```
|
|
#5: completed - "Check session management → found issue"
|
|
#9: pending - "Investigate session fixation vulnerability" ← TaskCreate for discovery
|
|
```
|
|
|
|
## Agent-Specific Templates
|
|
|
|
### Implementation Tasks
|
|
|
|
```
|
|
- Understand requirements
|
|
- Explore existing patterns
|
|
- Plan implementation approach
|
|
- { expand: per-component tasks }
|
|
- Write tests (TDD: tests first)
|
|
- Implement
|
|
- Verify tests pass
|
|
- Self-review for quality
|
|
```
|
|
|
|
### Review Tasks
|
|
|
|
```
|
|
- Detect review type and scope
|
|
- Load primary skill
|
|
- { expand: per-concern tasks }
|
|
- Load additional skills if needed
|
|
- Synthesize findings
|
|
- Compile report with severity ranking
|
|
```
|
|
|
|
### Research Tasks
|
|
|
|
```
|
|
- Clarify research question
|
|
- Identify sources
|
|
- { expand: per-source tasks }
|
|
- Cross-reference findings
|
|
- Synthesize with citations
|
|
```
|
|
|
|
### Debugging Tasks
|
|
|
|
```
|
|
- Reproduce the issue
|
|
- Gather evidence (logs, errors, state)
|
|
- Form hypothesis
|
|
- { expand: investigation steps }
|
|
- Validate root cause
|
|
- Implement fix
|
|
- Verify fix resolves issue
|
|
```
|
|
|
|
### Multi-Agent Tasks
|
|
|
|
Use `[agent-name]` prefix in task subjects and `blockedBy` for dependencies:
|
|
|
|
```
|
|
#1: "[analyst] Research stage" - pending
|
|
#2: "[engineer] Implementation stage" - pending, blockedBy: #1
|
|
#3: "[reviewer] Review stage" - pending, blockedBy: #2
|
|
#4: "[tester] Validation stage" - pending, blockedBy: #3
|
|
#5: "Synthesize results" - pending, blockedBy: #4
|
|
```
|
|
|
|
## Encoding Decisions
|
|
|
|
Completed task descriptions should capture what was decided, not just what was done.
|
|
|
|
**Bad** (no decision context):
|
|
|
|
```
|
|
Task: "Research auth libraries" - completed
|
|
Description: (empty)
|
|
```
|
|
|
|
**Good** (decision encoded):
|
|
|
|
```
|
|
Task: "Research auth libraries" - completed
|
|
Description: "Selected jose (already in deps, ES module support)"
|
|
```
|
|
|
|
## Pre-Compaction State Capture
|
|
|
|
When context is filling, `TaskUpdate` your `in_progress` task with maximum detail:
|
|
|
|
```
|
|
Task: "Implementing token refresh flow" - in_progress
|
|
Description:
|
|
- File: src/auth/refresh.ts
|
|
- Current line: 42
|
|
- Done: validateToken(), extractClaims()
|
|
- Next: rotateToken() implementation
|
|
- Note: Using jose library, RS256 algorithm
|
|
- Blocked: Need JWKS endpoint URL from config
|
|
```
|
|
|
|
This level of detail lets you resume exactly where you left off.
|
|
|
|
## Tracking Background Agents
|
|
|
|
Include agent IDs in task metadata so you can resume them later:
|
|
|
|
```
|
|
Task: "[reviewer] Security review auth module"
|
|
Status: pending
|
|
Metadata: { agentId: "abc123", background: true }
|
|
```
|
|
|
|
When agents complete, `TaskUpdate`:
|
|
|
|
```
|
|
Task: "[reviewer] Security review auth module" - completed
|
|
Description: "2 issues found"
|
|
Metadata: { agentId: "abc123" }
|
|
```
|
|
|
|
Then `TaskCreate` for follow-up:
|
|
|
|
```
|
|
Task: "Address security issues from reviewer"
|
|
Status: pending
|
|
```
|
|
|
|
## When to TaskCreate
|
|
|
|
Add tasks when you discover:
|
|
- **New files** to process
|
|
- **New concerns** to address
|
|
- **Follow-up investigations** from findings
|
|
- **Dependencies** that must complete first (use `addBlockedBy`)
|
|
- **Validation steps** needed
|
|
- **Blockers** requiring resolution
|
|
|
|
## Status Management
|
|
|
|
```
|
|
pending → Work not started
|
|
in_progress → Currently working (one at a time)
|
|
completed → Done (mark immediately)
|
|
```
|
|
|
|
If blocked:
|
|
1. `TaskCreate` for the blocker
|
|
2. Use `addBlockedBy` to link
|
|
3. Either keep blocked task `in_progress` or revert to `pending`
|
|
4. Never mark a blocked task completed
|
|
|
|
## Visibility Goal
|
|
|
|
**Anyone reading your task list should understand:**
|
|
- What you're currently doing (in_progress task)
|
|
- What remains to be done (pending tasks)
|
|
- What you've completed (completed tasks with descriptions)
|
|
- What decisions were made (in descriptions)
|
|
- What's blocking progress (blockedBy relationships)
|