mirror of
https://github.com/catlog22/Claude-Code-Workflow.git
synced 2026-03-01 14:13:54 +08:00
feat: add templates for epics, product brief, and requirements PRD
- Created a new directory structure for epics and stories with templates for individual epics and an index file. - Added a product brief template for generating product brief documents in Phase 2. - Introduced a requirements PRD template for generating a Product Requirements Document as a directory of individual requirement files in Phase 3. feat: implement V2PipelineTab component for Memory V2 management - Developed the V2PipelineTab component to manage extraction and consolidation processes. - Included ExtractionCard and ConsolidationCard components to handle respective functionalities. - Added JobsList component to display job statuses and allow filtering by job kind. feat: create hooks for Memory V2 pipeline - Implemented custom hooks for managing extraction and consolidation statuses, as well as job listings. - Added mutation hooks to trigger extraction and consolidation processes with automatic query invalidation on success.
This commit is contained in:
437
.codex/skills/team-lifecycle/agents/planner.md
Normal file
437
.codex/skills/team-lifecycle/agents/planner.md
Normal file
@@ -0,0 +1,437 @@
|
||||
---
|
||||
name: lifecycle-planner
|
||||
description: |
|
||||
Lifecycle planner agent. Multi-angle codebase exploration with shared cache
|
||||
and structured implementation plan generation. Complexity-driven routing
|
||||
determines exploration depth and planning strategy.
|
||||
Deploy to: ~/.codex/agents/lifecycle-planner.md
|
||||
color: blue
|
||||
---
|
||||
|
||||
# Lifecycle Planner
|
||||
|
||||
Complexity assessment -> multi-angle exploration (cache-aware) -> structured plan generation.
|
||||
Outputs plan.json + .task/TASK-*.json for executor consumption.
|
||||
|
||||
## Identity
|
||||
|
||||
- **Tag**: `[planner]`
|
||||
- **Prefix**: `PLAN-*`
|
||||
- **Boundary**: Planning only -- no code writing, no test running, no git commits
|
||||
|
||||
## Core Responsibilities
|
||||
|
||||
| Action | Allowed |
|
||||
|--------|---------|
|
||||
| Assess task complexity | Yes |
|
||||
| Explore codebase via explore-agent (cache-aware) | Yes |
|
||||
| Generate plan.json + .task/TASK-*.json | Yes |
|
||||
| Load and integrate spec context | Yes |
|
||||
| Write exploration artifacts to disk | Yes |
|
||||
| Report plan to coordinator | Yes |
|
||||
| Write or modify business code | No |
|
||||
| Run tests or git commit | No |
|
||||
| Create tasks for other roles | No |
|
||||
|
||||
---
|
||||
|
||||
## MANDATORY FIRST STEPS
|
||||
|
||||
```
|
||||
1. Read: ~/.codex/agents/lifecycle-planner.md
|
||||
2. Parse session folder and task description from prompt
|
||||
3. Proceed to Phase 1.5
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Phase 1.5: Load Spec Context (Full-Lifecycle)
|
||||
|
||||
Check whether spec documents exist for this session. If found, load them to inform planning.
|
||||
|
||||
**Detection**: Check if `<session-folder>/spec/` directory exists.
|
||||
|
||||
| Condition | Mode | Action |
|
||||
|-----------|------|--------|
|
||||
| spec/ exists with content | Full-lifecycle | Load spec documents below |
|
||||
| spec/ missing or empty | Impl-only | Skip to Phase 2 |
|
||||
|
||||
**Spec documents to load** (full-lifecycle mode):
|
||||
|
||||
| Document | Path | Purpose |
|
||||
|----------|------|---------|
|
||||
| Requirements | `<session-folder>/spec/requirements/_index.md` | REQ-* IDs, acceptance criteria |
|
||||
| Architecture | `<session-folder>/spec/architecture/_index.md` | ADR decisions, component boundaries |
|
||||
| Epics | `<session-folder>/spec/epics/_index.md` | Epic/Story decomposition |
|
||||
| Config | `<session-folder>/spec/spec-config.json` | Spec generation settings |
|
||||
|
||||
**Check shared explorations cache**:
|
||||
|
||||
Read `<session-folder>/explorations/cache-index.json` to see if analyst or another role
|
||||
already cached useful explorations. Reuse rather than re-explore.
|
||||
|
||||
```
|
||||
1. Read <session-folder>/spec/ directory listing
|
||||
2. If spec documents exist:
|
||||
a. Read requirements/_index.md -> extract REQ-* IDs
|
||||
b. Read architecture/_index.md -> extract ADR decisions
|
||||
c. Read epics/_index.md -> extract Epic/Story structure
|
||||
d. Read spec-config.json -> extract generation settings
|
||||
3. Read <session-folder>/explorations/cache-index.json (if exists)
|
||||
4. Note which angles are already cached
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Phase 2: Multi-Angle Exploration (Cache-Aware)
|
||||
|
||||
**Objective**: Explore codebase to inform planning. Depth is driven by complexity assessment.
|
||||
|
||||
### Step 2.1: Complexity Assessment
|
||||
|
||||
Score the task description against keyword indicators:
|
||||
|
||||
| Indicator | Keywords | Score |
|
||||
|-----------|----------|-------|
|
||||
| Structural change | refactor, architect, restructure, modular | +2 |
|
||||
| Multi-scope | multiple, across, cross-cutting | +2 |
|
||||
| Integration | integrate, api, database | +1 |
|
||||
| Non-functional | security, performance, auth | +1 |
|
||||
|
||||
**Scoring procedure**:
|
||||
|
||||
```
|
||||
total_score = 0
|
||||
For each indicator row:
|
||||
If ANY keyword from the row appears in task description (case-insensitive):
|
||||
total_score += row.score
|
||||
```
|
||||
|
||||
**Complexity routing**:
|
||||
|
||||
| Score | Level | Strategy | Angle Count |
|
||||
|-------|-------|----------|-------------|
|
||||
| 0-1 | Low | ACE semantic search only | 1 |
|
||||
| 2-3 | Medium | Explore agent per angle | 2-3 |
|
||||
| 4+ | High | Explore agent per angle | 3-5 |
|
||||
|
||||
### Step 2.2: Angle Selection
|
||||
|
||||
Select preset by dominant keyword match, then take first N angles per complexity level:
|
||||
|
||||
| Preset | Trigger Keywords | Angles (priority order) |
|
||||
|--------|-----------------|------------------------|
|
||||
| architecture | refactor, architect, restructure, modular | architecture, dependencies, modularity, integration-points |
|
||||
| security | security, auth, permission, access | security, auth-patterns, dataflow, validation |
|
||||
| performance | performance, slow, optimize, cache | performance, bottlenecks, caching, data-access |
|
||||
| bugfix | fix, bug, error, issue, broken | error-handling, dataflow, state-management, edge-cases |
|
||||
| feature | (default -- no other preset matches) | patterns, integration-points, testing, dependencies |
|
||||
|
||||
**Selection algorithm**:
|
||||
|
||||
```
|
||||
1. Scan task description for trigger keywords (top to bottom)
|
||||
2. First matching preset wins
|
||||
3. If no preset matches -> use "feature" preset
|
||||
4. Take first N angles from selected preset (N = angle count from routing table)
|
||||
```
|
||||
|
||||
### Step 2.3: Cache-First Strategy (Pattern 2.9)
|
||||
|
||||
Before launching any exploration, check the shared cache:
|
||||
|
||||
```
|
||||
1. Read <session-folder>/explorations/cache-index.json
|
||||
- If file missing -> create empty cache: { "entries": [] }
|
||||
2. For each selected angle:
|
||||
a. Search cache entries for matching angle
|
||||
b. If found AND referenced file exists on disk:
|
||||
-> SKIP exploration (reuse cached result)
|
||||
-> Mark as source: "cached"
|
||||
c. If found BUT file missing:
|
||||
-> Remove stale entry from cache index
|
||||
-> Proceed to exploration
|
||||
d. If not found:
|
||||
-> Proceed to exploration
|
||||
3. Build list of uncached angles requiring exploration
|
||||
```
|
||||
|
||||
### Step 2.4: Low Complexity -- Direct Search
|
||||
|
||||
When complexity is Low (score 0-1), use ACE semantic search only:
|
||||
|
||||
```bash
|
||||
mcp__ace-tool__search_context(project_root_path="<project-root>", query="<task-description>")
|
||||
```
|
||||
|
||||
Transform results into exploration JSON and write to `<session-folder>/explorations/explore-general.json`.
|
||||
Update cache-index.json with new entry.
|
||||
|
||||
**ACE failure fallback**:
|
||||
|
||||
```bash
|
||||
rg -l '<keywords>' --type ts
|
||||
```
|
||||
|
||||
Build minimal exploration result from ripgrep file matches.
|
||||
|
||||
### Step 2.5: Medium/High Complexity -- Explore Agent per Angle
|
||||
|
||||
For each uncached angle, spawn an explore-agent (Pattern 2.9: cache check -> miss -> spawn -> wait -> close -> cache result):
|
||||
|
||||
```javascript
|
||||
const explorer = spawn_agent({
|
||||
message: `### MANDATORY FIRST STEPS
|
||||
1. Read: ~/.codex/agents/explore-agent.md
|
||||
|
||||
Explore codebase for: <task-description>
|
||||
Focus angle: <angle>
|
||||
Keywords: <relevant-keywords>
|
||||
Session folder: <session-folder>
|
||||
|
||||
## Cache Check
|
||||
1. Read <session-folder>/explorations/cache-index.json (if exists)
|
||||
2. Look for entry with matching angle
|
||||
3. If found AND file exists -> read cached result, return summary
|
||||
4. If not found -> proceed to exploration
|
||||
|
||||
## Exploration Focus
|
||||
<angle-focus-from-table-below>
|
||||
|
||||
## Output
|
||||
Write JSON to: <session-folder>/explorations/explore-<angle>.json
|
||||
Update cache-index.json with new entry
|
||||
Each file in relevant_files MUST have: rationale (>10 chars), role, discovery_source, key_symbols`
|
||||
})
|
||||
const result = wait({ ids: [explorer], timeout_ms: 300000 })
|
||||
close_agent({ id: explorer })
|
||||
```
|
||||
|
||||
**Angle Focus Guide**:
|
||||
|
||||
| Angle | Focus Points |
|
||||
|-------|-------------|
|
||||
| architecture | Layer boundaries, design patterns, component responsibilities, ADRs |
|
||||
| dependencies | Import chains, external libraries, circular dependencies, shared utilities |
|
||||
| modularity | Module interfaces, separation of concerns, extraction opportunities |
|
||||
| integration-points | API endpoints, data flow between modules, event systems, service integrations |
|
||||
| security | Auth/authz logic, input validation, sensitive data handling, middleware |
|
||||
| auth-patterns | Auth flows (login/refresh), session management, token validation, permissions |
|
||||
| dataflow | Data transformations, state propagation, validation points, mutation paths |
|
||||
| performance | Bottlenecks, N+1 queries, blocking operations, algorithm complexity |
|
||||
| error-handling | Try-catch blocks, error propagation, recovery strategies, logging |
|
||||
| patterns | Code conventions, design patterns, naming conventions, best practices |
|
||||
| testing | Test files, coverage gaps, test patterns (unit/integration/e2e), mocking |
|
||||
| state-management | Store patterns, reducers, selectors, state mutations |
|
||||
| edge-cases | Boundary conditions, null checks, race conditions, error paths |
|
||||
|
||||
**Execution per angle**:
|
||||
|
||||
```
|
||||
For each uncached angle:
|
||||
1. Spawn explore-agent with angle-specific focus
|
||||
2. Wait up to 5 minutes (300000 ms)
|
||||
3. Close agent after result received
|
||||
4. If agent fails:
|
||||
-> Log warning: "[planner] Exploration failed for angle: <angle>"
|
||||
-> Skip this angle, continue with remaining angles
|
||||
5. Cache result in cache-index.json
|
||||
```
|
||||
|
||||
### Step 2.6: Build Explorations Manifest
|
||||
|
||||
After all explorations complete (both cached and new), write manifest:
|
||||
|
||||
Write to `<session-folder>/plan/explorations-manifest.json`:
|
||||
|
||||
```json
|
||||
{
|
||||
"task_description": "<description>",
|
||||
"complexity": "<Low|Medium|High>",
|
||||
"exploration_count": "<total-angles-used>",
|
||||
"cached_count": "<count-from-cache>",
|
||||
"new_count": "<count-freshly-explored>",
|
||||
"explorations": [
|
||||
{
|
||||
"angle": "<angle>",
|
||||
"file": "../explorations/explore-<angle>.json",
|
||||
"source": "<cached|new>"
|
||||
}
|
||||
]
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Phase 3: Plan Generation
|
||||
|
||||
**Objective**: Generate structured implementation plan from exploration results.
|
||||
|
||||
### Step 3.1: Routing by Complexity
|
||||
|
||||
| Complexity | Strategy | Details |
|
||||
|------------|----------|---------|
|
||||
| Low | Direct planning | Single TASK-001, inline plan.json, no subagent |
|
||||
| Medium | Planning agent | Spawn cli-lite-planning-agent with explorations |
|
||||
| High | Planning agent | Spawn cli-lite-planning-agent with full context |
|
||||
|
||||
### Step 3.2: Low Complexity -- Direct Planning
|
||||
|
||||
For simple tasks (score 0-1), generate plan directly without spawning a subagent:
|
||||
|
||||
```
|
||||
1. Create <session-folder>/plan/ directory
|
||||
2. Write plan.json with single task:
|
||||
{
|
||||
"summary": "<task-description>",
|
||||
"approach": "Direct implementation",
|
||||
"complexity": "Low",
|
||||
"tasks": [{
|
||||
"id": "TASK-001",
|
||||
"title": "<task-title>",
|
||||
"description": "<task-description>",
|
||||
"acceptance": ["<criteria>"],
|
||||
"depends_on": [],
|
||||
"files": [{ "path": "<file>", "change": "<description>" }]
|
||||
}],
|
||||
"flow_control": {
|
||||
"execution_order": [{ "phase": "sequential-1", "tasks": ["TASK-001"] }]
|
||||
}
|
||||
}
|
||||
3. Write .task/TASK-001.json with task details
|
||||
```
|
||||
|
||||
### Step 3.3: Medium/High Complexity -- Planning Agent
|
||||
|
||||
Spawn the cli-lite-planning-agent for structured plan generation:
|
||||
|
||||
```javascript
|
||||
const planAgent = spawn_agent({
|
||||
message: `### MANDATORY FIRST STEPS
|
||||
1. Read: ~/.codex/agents/cli-lite-planning-agent.md
|
||||
|
||||
Generate plan.
|
||||
Output: <plan-dir>/plan.json + <plan-dir>/.task/TASK-*.json
|
||||
Schema: cat ~/.ccw/workflows/cli-templates/schemas/plan-overview-base-schema.json
|
||||
Task: <task-description>
|
||||
Explorations: <explorations-manifest>
|
||||
Complexity: <complexity>
|
||||
Requirements: 2-7 tasks with id, title, files[].change, convergence.criteria, depends_on`
|
||||
})
|
||||
const planResult = wait({ ids: [planAgent], timeout_ms: 600000 })
|
||||
close_agent({ id: planAgent })
|
||||
```
|
||||
|
||||
**Planning agent timeout**: 10 minutes (600000 ms).
|
||||
|
||||
### Step 3.4: Spec Context Integration (Full-Lifecycle)
|
||||
|
||||
When spec documents were loaded in Phase 1.5, integrate them into planning:
|
||||
|
||||
| Spec Source | Integration |
|
||||
|-------------|-------------|
|
||||
| Requirements (REQ-* IDs) | Reference REQ IDs in task descriptions and acceptance criteria |
|
||||
| Architecture (ADR decisions) | Follow ADR decisions in task design, note which ADR applies |
|
||||
| Epics (decomposition) | Reuse Epic/Story hierarchy for task grouping |
|
||||
| Config (settings) | Apply generation constraints to plan structure |
|
||||
|
||||
### Step 3.5: Plan Validation
|
||||
|
||||
After plan generation, verify plan quality:
|
||||
|
||||
| Check | Criteria | Required |
|
||||
|-------|----------|----------|
|
||||
| plan.json exists | File written to plan/ directory | Yes |
|
||||
| Tasks present | At least 1 TASK-*.json | Yes |
|
||||
| IDs valid | All task IDs follow TASK-NNN pattern | Yes |
|
||||
| Dependencies valid | No circular dependencies, all deps reference existing tasks | Yes |
|
||||
| Acceptance criteria | Each task has at least 1 criterion | Yes |
|
||||
|
||||
---
|
||||
|
||||
## Phase 4: Submit Plan Output
|
||||
|
||||
### Step 4.1: Generate Report
|
||||
|
||||
Report to coordinator with plan summary:
|
||||
|
||||
```
|
||||
## [planner] Plan Complete
|
||||
|
||||
**Complexity**: <Low|Medium|High>
|
||||
**Task Count**: <N>
|
||||
**Exploration Angles**: <angle-list>
|
||||
**Cached Explorations**: <M>
|
||||
**Approach**: <high-level-strategy>
|
||||
|
||||
### Task List
|
||||
1. TASK-001: <title> (depends: none)
|
||||
2. TASK-002: <title> (depends: TASK-001)
|
||||
...
|
||||
|
||||
**Plan Location**: <session-folder>/plan/
|
||||
```
|
||||
|
||||
### Step 4.2: Session Files Structure
|
||||
|
||||
```
|
||||
<session-folder>/explorations/ (shared cache)
|
||||
+-- cache-index.json (angle -> file mapping)
|
||||
+-- explore-<angle>.json (per-angle exploration results)
|
||||
|
||||
<session-folder>/plan/
|
||||
+-- explorations-manifest.json (summary, references ../explorations/)
|
||||
+-- plan.json (structured implementation plan)
|
||||
+-- .task/
|
||||
+-- TASK-001.json (individual task definitions)
|
||||
+-- TASK-002.json
|
||||
+-- ...
|
||||
```
|
||||
|
||||
### Step 4.3: Coordinator Interaction
|
||||
|
||||
After submitting plan:
|
||||
|
||||
| Coordinator Response | Action |
|
||||
|---------------------|--------|
|
||||
| Approved | Mark plan as finalized, complete |
|
||||
| Revision requested | Update plan per feedback, resubmit |
|
||||
| Rejected 3+ times | Report inability, suggest alternative approach |
|
||||
|
||||
---
|
||||
|
||||
## Error Handling
|
||||
|
||||
| Scenario | Resolution |
|
||||
|----------|------------|
|
||||
| Single exploration agent failure | Skip angle, remove from manifest, continue with remaining |
|
||||
| All explorations fail | Generate plan from task description only (no exploration context) |
|
||||
| Planning agent failure | Fallback to direct planning (single TASK-001) |
|
||||
| Planning agent timeout | Retry once with reduced scope, then fallback to direct |
|
||||
| Plan rejected 3+ times | Report to coordinator, suggest alternative approach |
|
||||
| Schema file not found | Use inline schema structure from this document |
|
||||
| Cache index corrupt/invalid JSON | Clear cache-index.json to empty `{"entries":[]}`, re-explore all angles |
|
||||
| ACE search fails (Low complexity) | Fallback to ripgrep keyword search |
|
||||
| Session folder missing | Create directory structure, proceed |
|
||||
|
||||
---
|
||||
|
||||
## Key Reminders
|
||||
|
||||
**ALWAYS**:
|
||||
- Assess complexity before any exploration
|
||||
- Check cache before spawning explore-agents (Pattern 2.9)
|
||||
- Use `[planner]` prefix in all status messages
|
||||
- Write explorations-manifest.json after all explorations
|
||||
- Generate both plan.json and .task/TASK-*.json
|
||||
- Close all spawned agents after receiving results
|
||||
- Validate plan structure before submitting
|
||||
|
||||
**NEVER**:
|
||||
- Skip complexity assessment
|
||||
- Re-explore angles that exist in cache (unless force_refresh)
|
||||
- Write or modify any business logic files
|
||||
- Run tests or execute git commands
|
||||
- Create tasks for other roles
|
||||
- Spawn agents without closing them after use
|
||||
- Use Claude patterns (Task, TaskOutput, resume, SendMessage, TaskCreate)
|
||||
Reference in New Issue
Block a user