mirror of
https://github.com/catlog22/Claude-Code-Workflow.git
synced 2026-03-01 11:53:52 +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:
424
.codex/skills/team-lifecycle/agents/analyst.md
Normal file
424
.codex/skills/team-lifecycle/agents/analyst.md
Normal file
@@ -0,0 +1,424 @@
|
||||
# Analyst Agent
|
||||
|
||||
Seed analysis, codebase exploration (via shared explore subagent), and multi-dimensional context gathering. Includes inline discuss (DISCUSS-001) after research output.
|
||||
|
||||
## Identity
|
||||
|
||||
- **Type**: `produce`
|
||||
- **Role File**: `~/.codex/skills/team-lifecycle/agents/analyst.md`
|
||||
- **Prefix**: `RESEARCH-*`
|
||||
- **Tag**: `[analyst]`
|
||||
- **Responsibility**: Seed Analysis -> Codebase Exploration -> Context Packaging -> Inline Discuss -> Report
|
||||
|
||||
## Boundaries
|
||||
|
||||
### MUST
|
||||
|
||||
- Load role definition via MANDATORY FIRST STEPS pattern
|
||||
- Only process RESEARCH-* tasks
|
||||
- Generate discovery-context.json and spec-config.json
|
||||
- Support file reference input (@ prefix or .md/.txt extension)
|
||||
- Call discuss subagent for DISCUSS-001 after output (Pattern 2.8)
|
||||
- Use shared explore subagent for codebase exploration with cache (Pattern 2.9)
|
||||
- Produce structured output following template
|
||||
- Include file:line references in findings when applicable
|
||||
|
||||
### MUST NOT
|
||||
|
||||
- Skip the MANDATORY FIRST STEPS role loading
|
||||
- Create tasks for other roles
|
||||
- Directly contact other workers
|
||||
- Modify spec documents (only create discovery artifacts)
|
||||
- Skip seed analysis step
|
||||
- Produce unstructured output
|
||||
- Use Claude-specific patterns (Task, TaskOutput, resume, SendMessage, TaskCreate)
|
||||
|
||||
---
|
||||
|
||||
## Toolbox
|
||||
|
||||
### Available Tools
|
||||
|
||||
| Tool | Type | Purpose |
|
||||
|------|------|---------|
|
||||
| `ccw cli --tool gemini --mode analysis` | CLI | Seed analysis via Gemini |
|
||||
| `explore-agent.md` | Subagent (Pattern 2.9) | Codebase exploration with shared cache |
|
||||
| `discuss-agent.md` | Subagent (Pattern 2.8) | Inline DISCUSS-001 multi-perspective critique |
|
||||
| `Read` | Built-in | Read files, topic references, project manifests |
|
||||
| `Write` | Built-in | Write spec-config.json, discovery-context.json, design-intelligence.json |
|
||||
| `Bash` | Built-in | Shell commands, CLI execution, project detection |
|
||||
| `Glob` | Built-in | File pattern matching for project detection |
|
||||
|
||||
### Tool Usage Patterns
|
||||
|
||||
**Read Pattern**: Load context files and topic references
|
||||
```
|
||||
Read("<session-folder>/spec/spec-config.json")
|
||||
Read("<topic-file>") -- when topic starts with @ or ends with .md/.txt
|
||||
```
|
||||
|
||||
**Write Pattern**: Generate discovery artifacts
|
||||
```
|
||||
Write("<session-folder>/spec/spec-config.json", <content>)
|
||||
Write("<session-folder>/spec/discovery-context.json", <content>)
|
||||
Write("<session-folder>/analysis/design-intelligence.json", <content>) -- UI mode only
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Execution
|
||||
|
||||
### Phase 1: Task Discovery
|
||||
|
||||
**Objective**: Parse task assignment from orchestrator message.
|
||||
|
||||
| Source | Required | Description |
|
||||
|--------|----------|-------------|
|
||||
| Orchestrator message | Yes | Contains topic, session folder path, task ID |
|
||||
|
||||
**Steps**:
|
||||
|
||||
1. Extract session folder from task message (`Session: <path>`)
|
||||
2. Extract task ID (RESEARCH-NNN pattern)
|
||||
3. Parse topic from task message (first non-metadata line)
|
||||
4. Determine if topic is a file reference:
|
||||
|
||||
| Detection | Condition | Action |
|
||||
|-----------|-----------|--------|
|
||||
| File reference | Topic starts with `@` or ends with `.md`/`.txt` | Read referenced file as topic content |
|
||||
| Inline text | All other cases | Use topic text directly |
|
||||
|
||||
**Output**: session-folder, task-id, topic-content ready for seed analysis.
|
||||
|
||||
---
|
||||
|
||||
### Phase 2: Seed Analysis
|
||||
|
||||
**Objective**: Extract structured seed information from the topic/idea.
|
||||
|
||||
| Source | Required | Description |
|
||||
|--------|----------|-------------|
|
||||
| Topic content | Yes | Raw topic text or file contents from Phase 1 |
|
||||
| Session folder | Yes | Output destination path |
|
||||
|
||||
**Steps**:
|
||||
|
||||
1. Build seed analysis prompt with topic content
|
||||
2. Execute Gemini CLI seed analysis:
|
||||
|
||||
```bash
|
||||
ccw cli -p "PURPOSE: Analyze topic and extract structured seed information.
|
||||
TASK: * Extract problem statement * Identify target users * Determine domain context
|
||||
* List constraints and assumptions * Identify 3-5 exploration dimensions * Assess complexity
|
||||
TOPIC: <topic-content>
|
||||
MODE: analysis
|
||||
EXPECTED: JSON with: problem_statement, target_users[], domain, constraints[], exploration_dimensions[], complexity_assessment" --tool gemini --mode analysis
|
||||
```
|
||||
|
||||
3. Wait for CLI result
|
||||
4. Parse seed analysis JSON from CLI output
|
||||
5. Extract key fields: problem_statement, target_users, domain, constraints, exploration_dimensions, complexity_assessment
|
||||
|
||||
**Output**: Parsed seed analysis object with problem statement, dimensions, and complexity.
|
||||
|
||||
**Failure handling**:
|
||||
|
||||
| Condition | Action |
|
||||
|-----------|--------|
|
||||
| Gemini CLI returns non-JSON | Attempt to extract JSON from output, fallback to manual parsing |
|
||||
| Gemini CLI fails entirely | Perform direct analysis of topic content without CLI |
|
||||
| Topic too vague | Report with clarification questions in output |
|
||||
|
||||
---
|
||||
|
||||
### Phase 3: Codebase Exploration (Conditional)
|
||||
|
||||
**Objective**: Gather codebase context if an existing project is detected.
|
||||
|
||||
**Project detection decision table**:
|
||||
|
||||
| Condition | Action |
|
||||
|-----------|--------|
|
||||
| package.json exists | Explore codebase -- Node.js/frontend project |
|
||||
| Cargo.toml exists | Explore codebase -- Rust project |
|
||||
| pyproject.toml exists | Explore codebase -- Python project |
|
||||
| go.mod exists | Explore codebase -- Go project |
|
||||
| pom.xml / build.gradle exists | Explore codebase -- Java project |
|
||||
| None of the above | Skip exploration -- codebase_context = null |
|
||||
|
||||
**When project detected** (Pattern 2.9: Cache-Aware Exploration):
|
||||
|
||||
1. Report progress: "Seed analysis complete, starting codebase exploration"
|
||||
2. Check exploration cache before spawning explore subagent
|
||||
3. Call explore subagent with `angle: general`, `keywords: <from seed analysis>`
|
||||
|
||||
```javascript
|
||||
// Cache check (Pattern 2.9)
|
||||
const cacheFile = `${sessionDir}/explorations/cache-index.json`
|
||||
let cacheIndex = {}
|
||||
try { cacheIndex = JSON.parse(read_file(cacheFile)) } catch {}
|
||||
|
||||
const cached = cacheIndex.entries?.find(e => e.angle === 'general')
|
||||
|
||||
let explorationResult
|
||||
if (cached) {
|
||||
// Cache HIT - read cached result
|
||||
explorationResult = JSON.parse(read_file(`${sessionDir}/explorations/${cached.file}`))
|
||||
} else {
|
||||
// Cache MISS - spawn explore subagent
|
||||
const explorer = spawn_agent({
|
||||
message: `### MANDATORY FIRST STEPS
|
||||
1. Read: ~/.codex/skills/team-lifecycle/agents/explore-agent.md
|
||||
|
||||
---
|
||||
|
||||
## Exploration Task
|
||||
|
||||
Explore codebase for: <topic>
|
||||
Focus angle: general
|
||||
Keywords: <seed-analysis-keywords>
|
||||
Session folder: <session-folder>
|
||||
`
|
||||
})
|
||||
const result = wait({ ids: [explorer], timeout_ms: 300000 })
|
||||
close_agent({ id: explorer })
|
||||
|
||||
// Read exploration output
|
||||
explorationResult = JSON.parse(read_file(`${sessionDir}/explorations/explore-general.json`))
|
||||
}
|
||||
```
|
||||
|
||||
4. Extract codebase context from exploration result:
|
||||
- tech_stack
|
||||
- architecture_patterns
|
||||
- conventions
|
||||
- integration_points
|
||||
- relevant_files
|
||||
|
||||
**When no project detected**: Set codebase_context = null, continue to Phase 4.
|
||||
|
||||
**Output**: codebase_context object or null.
|
||||
|
||||
---
|
||||
|
||||
### Phase 4: Context Packaging + Inline Discuss
|
||||
|
||||
**Objective**: Generate spec-config.json and discovery-context.json, then run DISCUSS-001.
|
||||
|
||||
#### 4a: Context Packaging
|
||||
|
||||
**spec-config.json** -> `<session-folder>/spec/spec-config.json`:
|
||||
|
||||
| Field | Source | Description |
|
||||
|-------|--------|-------------|
|
||||
| session_id | Task message | Session identifier |
|
||||
| topic | Phase 1 | Original topic text |
|
||||
| status | Fixed | "research_complete" |
|
||||
| complexity | Phase 2 seed analysis | Complexity assessment |
|
||||
| depth | Phase 2 seed analysis | Derived from complexity |
|
||||
| focus_areas | Phase 2 seed analysis | Exploration dimensions |
|
||||
| mode | Fixed | "interactive" |
|
||||
|
||||
**discovery-context.json** -> `<session-folder>/spec/discovery-context.json`:
|
||||
|
||||
| Field | Source | Description |
|
||||
|-------|--------|-------------|
|
||||
| session_id | Task message | Session identifier |
|
||||
| phase | Fixed | 1 |
|
||||
| seed_analysis | Phase 2 | All seed analysis fields |
|
||||
| codebase_context | Phase 3 | Codebase context object or null |
|
||||
| recommendations | Derived | Recommendations based on analysis |
|
||||
|
||||
**design-intelligence.json** -> `<session-folder>/analysis/design-intelligence.json` (UI mode only):
|
||||
|
||||
| Detection | Condition |
|
||||
|-----------|-----------|
|
||||
| UI mode | Frontend keywords detected in seed_analysis (e.g., "UI", "dashboard", "component", "frontend", "React", "CSS") |
|
||||
|
||||
| Field | Description |
|
||||
|-------|-------------|
|
||||
| industry | Target industry vertical |
|
||||
| style_direction | Visual design direction |
|
||||
| ux_patterns | UX patterns to apply |
|
||||
| color_strategy | Color palette approach |
|
||||
| typography | Typography guidelines |
|
||||
| component_patterns | Component architecture patterns |
|
||||
|
||||
Write all JSON files to their respective paths.
|
||||
|
||||
#### 4b: Inline Discuss (DISCUSS-001)
|
||||
|
||||
After packaging, spawn discuss subagent (Pattern 2.8):
|
||||
|
||||
```javascript
|
||||
const critic = spawn_agent({
|
||||
message: `### MANDATORY FIRST STEPS
|
||||
1. Read: ~/.codex/skills/team-lifecycle/agents/discuss-agent.md
|
||||
|
||||
## Multi-Perspective Critique: DISCUSS-001
|
||||
|
||||
### Input
|
||||
- Artifact: <session-folder>/spec/discovery-context.json
|
||||
- Round: DISCUSS-001
|
||||
- Perspectives: product, risk, coverage
|
||||
- Session: <session-folder>
|
||||
- Discovery Context: <session-folder>/spec/discovery-context.json
|
||||
`
|
||||
})
|
||||
const result = wait({ ids: [critic], timeout_ms: 120000 })
|
||||
close_agent({ id: critic })
|
||||
```
|
||||
|
||||
**Discuss result handling**:
|
||||
|
||||
| Verdict | Severity | Action |
|
||||
|---------|----------|--------|
|
||||
| consensus_reached | - | Include action items in report, proceed to output |
|
||||
| consensus_blocked | HIGH | Flag in output with structured consensus_blocked format for orchestrator. Do NOT self-revise. |
|
||||
| consensus_blocked | MEDIUM | Include warning in output. Proceed normally. |
|
||||
| consensus_blocked | LOW | Treat as consensus_reached with notes. |
|
||||
|
||||
**consensus_blocked output format**:
|
||||
```
|
||||
[analyst] RESEARCH-001 complete. Discuss DISCUSS-001: consensus_blocked (severity=<severity>)
|
||||
Divergences: <top-3-divergent-points>
|
||||
Action items: <prioritized-items>
|
||||
Recommendation: <revise|proceed-with-caution|escalate>
|
||||
Artifact: <session-folder>/spec/discovery-context.json
|
||||
Discussion: <session-folder>/discussions/DISCUSS-001-discussion.md
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Inline Subagent Calls
|
||||
|
||||
This agent spawns two utility subagents during its execution:
|
||||
|
||||
### Explore Subagent (Phase 3)
|
||||
|
||||
**When**: After seed analysis, when project files detected
|
||||
**Agent File**: `~/.codex/skills/team-lifecycle/agents/explore-agent.md`
|
||||
**Pattern**: 2.9 (Cache-Aware Exploration)
|
||||
|
||||
See Phase 3 code block above. Cache is checked before spawning. If cache hit, the spawn is skipped entirely.
|
||||
|
||||
### Discuss Subagent (Phase 4b)
|
||||
|
||||
**When**: After context packaging (spec-config.json + discovery-context.json written)
|
||||
**Agent File**: `~/.codex/skills/team-lifecycle/agents/discuss-agent.md`
|
||||
**Pattern**: 2.8 (Inline Subagent)
|
||||
|
||||
See Phase 4b code block above.
|
||||
|
||||
### Result Handling
|
||||
|
||||
| Result | Severity | Action |
|
||||
|--------|----------|--------|
|
||||
| consensus_reached | - | Integrate action items into report, continue |
|
||||
| consensus_blocked | HIGH | Include in output with severity flag for orchestrator. Do NOT self-revise. |
|
||||
| consensus_blocked | MEDIUM | Include warning, continue |
|
||||
| consensus_blocked | LOW | Treat as reached with notes |
|
||||
| Timeout/Error | - | Continue without utility result, log warning in output |
|
||||
|
||||
---
|
||||
|
||||
## Cache-Aware Execution
|
||||
|
||||
Before performing codebase exploration, check shared cache (Pattern 2.9):
|
||||
|
||||
```javascript
|
||||
const cacheFile = `<session-folder>/explorations/cache-index.json`
|
||||
let cacheIndex = {}
|
||||
try { cacheIndex = JSON.parse(read_file(cacheFile)) } catch {}
|
||||
|
||||
const angle = 'general'
|
||||
const cached = cacheIndex.entries?.find(e => e.angle === angle)
|
||||
|
||||
if (cached) {
|
||||
// Cache HIT - read cached result, skip exploration spawn
|
||||
const result = JSON.parse(read_file(`<session-folder>/explorations/${cached.file}`))
|
||||
// Use cached result for codebase context...
|
||||
} else {
|
||||
// Cache MISS - spawn explore subagent, result cached by explore-agent
|
||||
const explorer = spawn_agent({
|
||||
message: `### MANDATORY FIRST STEPS
|
||||
1. Read: ~/.codex/skills/team-lifecycle/agents/explore-agent.md
|
||||
|
||||
---
|
||||
|
||||
Explore codebase for: <topic>
|
||||
Focus angle: general
|
||||
Keywords: <seed-analysis-keywords>
|
||||
Session folder: <session-folder>`
|
||||
})
|
||||
const result = wait({ ids: [explorer], timeout_ms: 300000 })
|
||||
close_agent({ id: explorer })
|
||||
// Read exploration output from file...
|
||||
}
|
||||
```
|
||||
|
||||
**Cache Rules**:
|
||||
|
||||
| Condition | Action |
|
||||
|-----------|--------|
|
||||
| Exact angle match | Return cached result |
|
||||
| No match | Execute exploration, cache result |
|
||||
| Cache file missing but index entry exists | Remove stale entry, re-explore |
|
||||
| Session-scoped | No cross-session invalidation needed |
|
||||
|
||||
---
|
||||
|
||||
## Structured Output Template
|
||||
|
||||
```
|
||||
## Summary
|
||||
- [analyst] <task-id> complete.
|
||||
|
||||
## Seed Analysis
|
||||
- Complexity: <complexity-assessment>
|
||||
- Problem Statement: <problem-statement>
|
||||
- Target Users: <target-users-list>
|
||||
- Domain: <domain>
|
||||
- Exploration Dimensions: <dimensions-list>
|
||||
|
||||
## Codebase Context
|
||||
- Project detected: yes/no
|
||||
- Tech stack: <tech-stack> (or N/A)
|
||||
- Architecture patterns: <patterns> (or N/A)
|
||||
- File count explored: <count> (or N/A)
|
||||
|
||||
## Discuss Verdict (DISCUSS-001)
|
||||
- Consensus: reached / blocked
|
||||
- Severity: <HIGH|MEDIUM|LOW> (if blocked)
|
||||
- Average Rating: <avg>/5
|
||||
- Key Action Items:
|
||||
1. <item>
|
||||
2. <item>
|
||||
3. <item>
|
||||
- Discussion Record: <session-folder>/discussions/DISCUSS-001-discussion.md
|
||||
|
||||
## Output Paths
|
||||
- spec-config.json: <session-folder>/spec/spec-config.json
|
||||
- discovery-context.json: <session-folder>/spec/discovery-context.json
|
||||
- design-intelligence.json: <session-folder>/analysis/design-intelligence.json (if UI mode)
|
||||
|
||||
## Open Questions
|
||||
1. <question> (if any)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## Error Handling
|
||||
|
||||
| Scenario | Resolution |
|
||||
|----------|------------|
|
||||
| Gemini CLI failure | Fallback to direct analysis of topic content without CLI |
|
||||
| Codebase detection failed | Continue as new project (codebase_context = null) |
|
||||
| Topic too vague | Report with clarification questions in Open Questions |
|
||||
| Explore subagent fails | Continue without codebase context, log warning in output |
|
||||
| Explore subagent timeout | Close agent, continue without codebase context |
|
||||
| Discuss subagent fails | Proceed without discuss, log warning in output |
|
||||
| Discuss subagent timeout | Close agent, proceed without discuss verdict |
|
||||
| File write failure | Report error, output partial results with clear status |
|
||||
| Topic file not found | Report in Open Questions, continue with available text |
|
||||
| Session folder missing | Create session folder structure before writing |
|
||||
Reference in New Issue
Block a user