Deep Analysis Workflow
Execute a structured exploration + synthesis workflow using Agent Teams with hub-and-spoke coordination. The lead performs rapid reconnaissance to generate dynamic focus areas, composes a team plan for review, workers explore independently, and a synthesizer merges findings with Bash-powered investigation.
This skill can be invoked standalone or loaded by other skills as a reusable building block. Approval behavior is configurable via .claude/agent-alchemy.local.md.
Settings Check
Goal: Determine whether the team plan requires user approval before execution.
Read settings file:
Determine invocation mode:
- Direct invocation: The user invoked
/deep-analysis directly, or you are running this skill standalone
- Skill-invoked: Another skill (e.g., codebase-analysis, feature-dev, docs-manager) loaded and is executing this workflow
Resolve settings:
- If settings were found, use them as-is
- If the file is missing or the
deep-analysis section is absent, use defaults:
direct-invocation-approval: true
invocation-by-skill-approval: false
- If the file exists but is malformed (unparseable), warn the user and use defaults
Set REQUIRE_APPROVAL:
- If direct invocation → use
direct-invocation-approval value (default: true)
- If skill-invoked → use
invocation-by-skill-approval value (default: false)
Parse session settings (also under the deep-analysis section):
- **deep-analysis**:
- **cache-ttl-hours**: 24
- **enable-checkpointing**: true
- **enable-progress-indicators**: true
cache-ttl-hours: Number of hours before exploration cache expires. Default: 24. Set to 0 to disable caching entirely.
enable-checkpointing: Whether to write session checkpoints at phase boundaries. Default: true.
enable-progress-indicators: Whether to display [Phase N/6] progress messages. Default: true.
Set behavioral flags:
CACHE_TTL = value of cache-ttl-hours (default: 24)
ENABLE_CHECKPOINTING = value of enable-checkpointing (default: true)
ENABLE_PROGRESS = value of enable-progress-indicators (default: true)
Phase 0: Session Setup
Goal: Check for cached exploration results, detect interrupted sessions, and initialize the session directory.
Skip this phase entirely if CACHE_TTL = 0 AND ENABLE_CHECKPOINTING = false.
Step 1: Exploration Cache Check
If CACHE_TTL > 0:
- Check if
.claude/sessions/exploration-cache/manifest.md exists
- If found, read the manifest and verify:
analysis_context matches the current analysis context (or is a superset)
codebase_path matches the current working directory
timestamp is within CACHE_TTL hours of now
- Config files referenced in
config_checksum haven't been modified since the cache was written (check mod-times of package.json, tsconfig.json, pyproject.toml, etc.)
- If cache is valid:
- Skill-invoked mode: Auto-accept the cache. Set
CACHE_HIT = true. Read cached synthesis.md and recon_summary.md. Skip to Phase 6 step 2 (present/return results).
- Direct invocation: Use
AskUserQuestion to offer:
- "Use cached results" — Set
CACHE_HIT = true, skip to Phase 6 step 2
- "Refresh analysis" — Set
CACHE_HIT = false, proceed normally
- If cache is invalid or absent: Set
CACHE_HIT = false
Step 2: Interrupted Session Check
If ENABLE_CHECKPOINTING = true:
- Check if
.claude/sessions/__da_live__/checkpoint.md exists
- If found, read the checkpoint to determine
last_completed_phase
- Use
AskUserQuestion to offer:
- "Resume from Phase [N+1]" — Load checkpoint state, proceed from the interrupted phase (see Session Recovery in Error Handling)
- "Start fresh" — Archive the interrupted session to
.claude/sessions/da-interrupted-{timestamp}/ and proceed normally
- If not found: proceed normally
Step 3: Initialize Session Directory
If ENABLE_CHECKPOINTING = true AND CACHE_HIT = false:
- Create
.claude/sessions/__da_live__/ directory
- Write
checkpoint.md:## Deep Analysis Session
- **analysis_context**: [context from arguments or caller]
- **codebase_path**: [current working directory]
- **started**: [ISO timestamp]
- **current_phase**: 0
- **status**: initialized
- Write
progress.md:## Deep Analysis Progress
- **Phase**: 0 of 6
- **Status**: Session initialized
### Phase Log
- [timestamp] Phase 0: Session initialized
Phase 1: Reconnaissance & Planning
Goal: Perform codebase reconnaissance, generate dynamic focus areas, and compose a team plan.
If ENABLE_PROGRESS = true: Display "[Phase 1/6] Reconnaissance & Planning — Mapping codebase structure..."
Determine analysis context:
- If
$ARGUMENTS is provided, use it as the analysis context (feature area, question, or general exploration goal)
- If no arguments and this skill was loaded by another skill, use the calling skill's context
- If no arguments and standalone invocation, set context to "general codebase understanding"
- Set
PATH = current working directory
- Inform the user: "Exploring codebase at:
PATH" with the analysis context
Rapid codebase reconnaissance:
Use Glob, Grep, and Read to quickly map the codebase structure. This should take 1-2 minutes, not deep investigation.
- Directory structure: List top-level directories with
Glob (e.g., */ pattern) to understand the project layout
- Language and framework detection: Read config files (
package.json, tsconfig.json, pyproject.toml, Cargo.toml, go.mod, etc.) to identify primary language(s) and framework(s)
- File distribution: Use
Glob with patterns like src/**/*.ts, **/*.py to gauge the size and shape of different areas
- Key documentation: Read
README.md, CLAUDE.md, or similar docs if they exist for project context
- For feature-focused analysis: Use
Grep to search for feature-related terms (function names, component names, route paths) to find hotspot directories
- For general analysis: Identify the 3-5 largest or most architecturally significant directories
Fallback: If reconnaissance fails (empty project, unusual structure, errors), use the static focus area templates from Step 3b.
Generate dynamic focus areas:
Based on reconnaissance findings, create focus areas tailored to the actual codebase. Default to 3 focus areas, but adjust based on codebase size and complexity (2 for small projects, up to 4 for large ones).
a) Dynamic focus areas (default):
Each focus area should include:
- Label: Short description (e.g., "API layer in src/api/")
- Directories: Specific directories to explore
- Starting files: 2-3 key files to read first
- Search terms: Grep patterns to find related code
- Complexity estimate: Low/Medium/High based on file count and apparent structure
For feature-focused analysis, focus areas should track the feature's actual footprint:
Example:
Focus 1: "API routes and middleware in src/api/ and src/middleware/" (auth-related endpoints, request handling)
Focus 2: "React components in src/pages/profile/ and src/components/user/" (UI layer for user profiles)
Focus 3: "Data models and services in src/db/ and src/services/" (persistence and business logic)
For general analysis, focus areas should map to the codebase's actual structure:
Example:
Focus 1: "Next.js app layer in apps/web/src/" (pages, components, app router)
Focus 2: "Shared library in packages/core/src/" (utilities, types, shared logic)
Focus 3: "CLI and tooling in packages/cli/" (commands, configuration, build)
b) Static fallback focus areas (only if recon failed):
For feature-focused analysis:
Focus 1: Explore entry points and user-facing code related to the context
Focus 2: Explore data models, schemas, and storage related to the context
Focus 3: Explore utilities, helpers, and shared infrastructure
For general codebase understanding:
Focus 1: Explore application structure, entry points, and core logic
Focus 2: Explore configuration, infrastructure, and shared utilities
Focus 3: Explore shared utilities, patterns, and cross-cutting concerns
Compose the team plan:
Assemble a structured plan document from the reconnaissance and focus area findings:
## Team Plan: Deep Analysis
### Analysis Context
[context from Step 1]
### Reconnaissance Summary
- **Project:** [name/type]
- **Primary language/framework:** [detected]
- **Codebase size:** [file counts, key directories]
- **Key observations:** [2-3 bullets]
### Focus Areas
#### Focus Area 1: [Label]
- **Directories:** [list]
- **Starting files:** [2-3 files]
- **Search patterns:** [Grep patterns]
- **Complexity:** [Low/Medium/High]
- **Assigned to:** explorer-1 (sonnet)
#### Focus Area 2: [Label]
- **Directories:** [list]
- **Starting files:** [2-3 files]
- **Search patterns:** [Grep patterns]
- **Complexity:** [Low/Medium/High]
- **Assigned to:** explorer-2 (sonnet)
[... repeated for each focus area]
### Agent Composition
| Role | Count | Model | Purpose |
|------|-------|-------|---------|
| Explorer | [N] | sonnet | Independent focus area exploration |
| Synthesizer | 1 | opus | Merge findings, deep investigation |
### Task Dependencies
- Exploration Tasks 1-[N]: parallel (no dependencies)
- Synthesis Task: blocked by all exploration tasks
Checkpoint (if ENABLE_CHECKPOINTING = true):
- Update
.claude/sessions/__da_live__/checkpoint.md: set current_phase: 1
- Write
.claude/sessions/__da_live__/team_plan.md with the full team plan from Step 4
- Write
.claude/sessions/__da_live__/recon_summary.md with reconnaissance findings from Step 2
- Append to
progress.md: [timestamp] Phase 1: Reconnaissance complete — [N] focus areas identified
Phase 2: Review & Approval
Goal: Present the team plan for user review and approval before allocating resources.
If ENABLE_PROGRESS = true: Display "[Phase 2/6] Review & Approval — Presenting team plan..."
If REQUIRE_APPROVAL = false
Skip to Phase 3 with a brief note: "Auto-approving team plan (skill-invoked mode). Proceeding with [N] explorers and 1 synthesizer."
If REQUIRE_APPROVAL = true
Present the team plan to the user (output the plan from Phase 1 Step 4), then use AskUserQuestion:
- "Approve" — Proceed to Phase 3 as-is
- "Modify" — User describes changes (adjust focus areas, add/remove explorers, change scope)
- "Regenerate" — Re-run reconnaissance with user feedback
If "Modify" (up to 3 cycles):
- Ask what to change using
AskUserQuestion
- Apply modifications to the team plan (adjust focus areas, agent count, scope)
- Re-present the updated plan for approval
- If 3 modification cycles are exhausted, offer "Approve current plan" or "Abort analysis"
If "Regenerate" (up to 2 cycles):
- Ask for feedback/new direction using
AskUserQuestion
- Return to Phase 1 Step 2 with the user's feedback incorporated
- Re-compose and re-present the team plan
- If 2 regeneration cycles are exhausted, offer "Approve current plan" or "Abort analysis"
Checkpoint (if ENABLE_CHECKPOINTING = true):
- Update
.claude/sessions/__da_live__/checkpoint.md: set current_phase: 2, record approval_mode (approved/auto-approved)
- Append to
progress.md: [timestamp] Phase 2: Plan approved (mode: [approval_mode])
Phase 3: Team Assembly
Goal: Create the team, spawn agents, create tasks, and assign work using the approved plan.
If ENABLE_PROGRESS = true: Display "[Phase 3/6] Team Assembly — Creating team and spawning agents..."
Create the team:
- Use
TeamCreate with name deep-analysis-{timestamp} (e.g., deep-analysis-1707300000)
- Description: "Deep analysis of [analysis context]"
Spawn teammates:
Use the Task tool with the team_name parameter to spawn teammates based on the approved plan:
N explorers (one per focus area) — subagent_type: "code-explorer", model: sonnet
- Named:
explorer-1, explorer-2, ... explorer-N
- Prompt each with: "You are part of a deep analysis team. Wait for your task assignment. The codebase is at: [PATH]. Analysis context: [context]"
1 synthesizer — subagent_type: "code-synthesizer"
- Named:
synthesizer
- Prompt with: "You are the synthesizer for a deep analysis team. You have Bash access for git history, dependency analysis, and static analysis. Wait for your task assignment. The codebase is at: [PATH]. Analysis context: [context]"
Create tasks:
Use TaskCreate for each task based on the approved plan's focus areas:
- Exploration Task per focus area: Subject: "Explore: [Focus area label]", Description: detailed exploration instructions including directories, starting files, search terms, and complexity estimate
- Synthesis Task: Subject: "Synthesize and evaluate exploration findings", Description: "Merge and synthesize findings from all exploration tasks into a unified analysis. Investigate gaps using Bash (git history, dependency trees). Evaluate completeness before finalizing."
- Use
TaskUpdate to set addBlockedBy pointing to all exploration task IDs
Assign exploration tasks (with status guard):
For each exploration task, apply the following status-guarded assignment:
- Use
TaskGet to check the task's current status and owner
- Only assign if status is
pending AND owner is empty
- If already assigned or completed: log "Task [ID] already [status], skipping" and move on
- Use
TaskUpdate to set the owner to the corresponding explorer
- Send the explorer a message with the task details via
SendMessage:SendMessage type: "message", recipient: "[explorer-N]",
content: "Your exploration task [ID] is assigned. Focus area: [label]. Directories: [list]. Starting files: [list]. Search patterns: [list]. Begin exploration now.",
summary: "Exploration task assigned"
Never re-assign a completed or in-progress task.
Checkpoint (if ENABLE_CHECKPOINTING = true):
- Update
.claude/sessions/__da_live__/checkpoint.md: set current_phase: 3, record team_name, explorer_names (list), task_ids (map of explorer → task ID), synthesis_task_id
- Append to
progress.md: [timestamp] Phase 3: Team assembled — [N] explorers, 1 synthesizer
Phase 4: Focused Exploration
Goal: Workers explore their assigned areas independently.
If ENABLE_PROGRESS = true: Display "[Phase 4/6] Focused Exploration — 0/[N] explorers complete"
Monitoring Loop
After assigning exploration tasks, monitor progress with status-aware tracking:
- When an explorer goes idle or sends a message, use
TaskGet to check their task status
- If task is
completed: Record the explorer's findings. If ENABLE_CHECKPOINTING = true, write explorer-{N}-findings.md to .claude/sessions/__da_live__/ and update checkpoint.
- If task is
in_progress: The explorer is still working — do NOT re-send the assignment
- If task is
pending and owner is set: The explorer received the assignment but hasn't started yet — wait, do NOT re-send
- If task is
pending and owner is empty: Assignment may have been lost — re-assign using the status guard from Phase 3 step 4
Never re-assign a completed or in-progress task. This is the primary duplicate prevention mechanism.
If ENABLE_PROGRESS = true: Update the progress display as explorers complete: "[Phase 4/6] Focused Exploration — [completed]/[N] explorers complete"
- Workers explore their assigned focus areas independently — no cross-worker messaging
- Workers can respond to follow-up questions from the synthesizer
- Each worker marks its task as completed when done
- You (the lead) receive idle notifications as workers finish
- Wait for all exploration tasks to be marked complete before proceeding to Phase 5
Phase 5: Evaluation and Synthesis
Goal: Verify exploration completeness, launch synthesis with deep investigation.
If ENABLE_PROGRESS = true: Display "[Phase 5/6] Synthesis — Merging findings and investigating gaps..."
Step 1: Structural Completeness Check
This is a structural check, not a quality assessment:
- Use
TaskList to verify all exploration tasks are completed
- Check that each worker produced a report with content (review the messages/reports received)
- If a worker failed completely (empty or error output):
- Create a follow-up exploration task targeting the gap
- Assign it to an idle worker
- Add the new task to the synthesis task's
blockedBy list
- Wait for the follow-up task to complete
- If all produced content: proceed immediately to Step 2
Step 2: Launch Synthesis
Use TaskUpdate to assign the synthesis task: owner: "synthesizer"
Send the synthesizer a message with exploration context and recon findings:
SendMessage type: "message", recipient: "synthesizer",
content: "All exploration tasks are complete. Your synthesis task is now assigned.
Analysis context: [analysis context]
Codebase path: [PATH]
Recon findings from planning phase:
- Project structure: [brief summary of directory layout]
- Primary language/framework: [what was detected]
- Key areas identified: [the focus areas and why they were chosen]
The workers are: [list of explorer names from the approved plan]. You can message them with follow-up questions if you find conflicts or gaps in their findings.
You have Bash access for deep investigation — use it for git history analysis, dependency trees, static analysis, or any investigation that Read/Glob/Grep can't handle.
Read the completed exploration tasks via TaskGet to access their reports, then synthesize into a unified analysis. Evaluate completeness before finalizing.",
summary: "Synthesis task assigned, begin work"
Wait for the synthesizer to mark the synthesis task as completed
Checkpoint (if ENABLE_CHECKPOINTING = true):
- Update
.claude/sessions/__da_live__/checkpoint.md: set current_phase: 5
- Write
.claude/sessions/__da_live__/synthesis.md with the synthesis results
- Append to
progress.md: [timestamp] Phase 5: Synthesis complete
Phase 6: Completion + Cleanup
Goal: Collect results, present to user, and tear down the team.
If ENABLE_PROGRESS = true: Display "[Phase 6/6] Completion — Collecting results and cleaning up..."
Collect synthesis output:
- The synthesizer's findings are in the messages it sent and/or the task completion output
- Read the synthesis results
Write exploration cache (if CACHE_TTL > 0):
Present or return results:
- Standalone invocation: Present the synthesized analysis to the user. The results remain in conversation memory for follow-up questions.
- Loaded by another skill: The synthesis is complete. Control returns to the calling workflow — do not present a standalone summary.
Shutdown teammates:
Send shutdown requests to all spawned teammates (iterate over the actual agents from the approved plan):
SendMessage type: "shutdown_request", recipient: "explorer-1", content: "Analysis complete"
SendMessage type: "shutdown_request", recipient: "explorer-2", content: "Analysis complete"
[... for each explorer spawned]
SendMessage type: "shutdown_request", recipient: "synthesizer", content: "Analysis complete"
Archive session and cleanup team:
- If
ENABLE_CHECKPOINTING = true: Move .claude/sessions/__da_live__/ to .claude/sessions/da-{timestamp}/
- Use
TeamDelete to remove the team and its task list
Error Handling
Settings Check Failure
- If
.claude/agent-alchemy.local.md exists but is malformed or the deep-analysis section is unparseable: warn the user ("Settings file found but could not parse deep-analysis settings — using defaults") and proceed with default approval values.
Planning Phase Failure
- If reconnaissance fails (errors, empty results, unusual structure): fall back to static focus area templates (Step 3b)
- If the codebase appears empty: inform the user and ask how to proceed
Approval Phase Failure
- If maximum modification cycles (3) or regeneration cycles (2) are reached without approval: use
AskUserQuestion with options:
- "Approve current plan" — Proceed with the latest version of the plan
- "Abort analysis" — Cancel the analysis entirely
Partial Worker Failure
- If one worker fails: create a follow-up task targeting the missed focus area, assign to an idle worker, add to synthesis
blockedBy
- If two workers fail: attempt follow-ups, but if they also fail, instruct the synthesizer to work with partial results
- If all workers fail: inform the user and offer to retry or abort
Synthesizer Failure
- If the synthesizer fails: present the raw exploration results to the user directly
- Offer to retry synthesis or let the user work with partial results
General Failures
If any phase fails:
- Explain what went wrong
- Ask the user how to proceed:
- Retry the phase
- Continue with partial results
- Abort the analysis
Session Recovery
When resuming from an interrupted session (detected in Phase 0 Step 2), use the following per-phase strategy:
| Interrupted At |
Recovery Strategy |
| Phase 1 |
Restart from Phase 1 (reconnaissance is fast, ~1-2 min) |
| Phase 2 |
Load saved team_plan.md from session dir, re-present for approval |
| Phase 3 |
Load approved plan from checkpoint, restart team assembly |
| Phase 4 |
Read completed explorer-{N}-findings.md files from session dir. Only spawn and assign explorers whose findings files are missing. Add existing findings to synthesizer context. |
| Phase 5 |
Load all explorer findings from session dir. Spawn a fresh synthesizer and launch synthesis with the persisted findings. |
| Phase 6 |
Load synthesis.md from session dir. Proceed directly to present/return results and cleanup. |
Recovery procedure:
- Read
checkpoint.md to determine last_completed_phase and session state (team_name, explorer_names, task_ids)
- Load any persisted artifacts from the session directory (team_plan, explorer findings, synthesis)
- Resume from Phase
last_completed_phase + 1 using the loaded state
- For Phase 4 recovery: compare persisted
explorer-{N}-findings.md files against expected explorer list to determine which explorers still need to run
Agent Coordination
- The lead (you) acts as the planner: performs recon, composes the team plan, handles approval, assigns work
- Workers explore independently — no cross-worker messaging (hub-and-spoke topology)
- The synthesizer can ask workers follow-up questions to resolve conflicts and fill gaps
- The synthesizer has Bash access for deep investigation (git history, dependency trees, static analysis)
- Wait for task dependencies to resolve before proceeding
- Handle agent failures gracefully — continue with partial results
- Agent count and focus area details come from the approved plan, not hardcoded values
When calling Task tool for teammates:
- Use
model: "opus" for the synthesizer
- Use
model: "sonnet" for workers
- Always include
team_name parameter to join the team
1---2name: deep-analysis-53description: Deep exploration and synthesis workflow using Agent Teams with dynamic planning and hub-and-spoke coordination. Use when asked for "deep analysis", "deep understanding", "analyze codebase", "explore and analyze", or "investigate codebase".4---5
6# Deep Analysis Workflow
7
8Execute a structured exploration + synthesis workflow using Agent Teams with hub-and-spoke coordination. The lead performs rapid reconnaissance to generate dynamic focus areas, composes a team plan for review, workers explore independently, and a synthesizer merges findings with Bash-powered investigation.
9
10This skill can be invoked standalone or loaded by other skills as a reusable building block. Approval behavior is configurable via `.claude/agent-alchemy.local.md`.
11
12## Settings Check
13
14**Goal:** Determine whether the team plan requires user approval before execution.
15
161. **Read settings file:**
17 - Check if `.claude/agent-alchemy.local.md` exists
18 - If it exists, read it and look for a `deep-analysis` section with nested settings:
19 ```markdown
20 - **deep-analysis**:
21 - **direct-invocation-approval**: true
22 - **invocation-by-skill-approval**: false
23 ```
24 - If the file does not exist or is malformed, use defaults (see step 4)
25
262. **Determine invocation mode:**
27 - **Direct invocation:** The user invoked `/deep-analysis` directly, or you are running this skill standalone
28 - **Skill-invoked:** Another skill (e.g., codebase-analysis, feature-dev, docs-manager) loaded and is executing this workflow
29
303. **Resolve settings:**
31 - If settings were found, use them as-is
32 - If the file is missing or the `deep-analysis` section is absent, use defaults:
33 - `direct-invocation-approval`: `true`
34 - `invocation-by-skill-approval`: `false`
35 - If the file exists but is malformed (unparseable), warn the user and use defaults
36
374. **Set `REQUIRE_APPROVAL`:**
38 - If direct invocation → use `direct-invocation-approval` value (default: `true`)
39 - If skill-invoked → use `invocation-by-skill-approval` value (default: `false`)
40
415. **Parse session settings** (also under the `deep-analysis` section):
42 ```markdown
43 - **deep-analysis**:
44 - **cache-ttl-hours**: 24
45 - **enable-checkpointing**: true
46 - **enable-progress-indicators**: true
47 ```
48 - `cache-ttl-hours`: Number of hours before exploration cache expires. Default: `24`. Set to `0` to disable caching entirely.
49 - `enable-checkpointing`: Whether to write session checkpoints at phase boundaries. Default: `true`.
50 - `enable-progress-indicators`: Whether to display `[Phase N/6]` progress messages. Default: `true`.
51
526. **Set behavioral flags:**
53 - `CACHE_TTL` = value of `cache-ttl-hours` (default: `24`)
54 - `ENABLE_CHECKPOINTING` = value of `enable-checkpointing` (default: `true`)
55 - `ENABLE_PROGRESS` = value of `enable-progress-indicators` (default: `true`)
56
57---
58
59## Phase 0: Session Setup
60
61**Goal:** Check for cached exploration results, detect interrupted sessions, and initialize the session directory.
62
63> Skip this phase entirely if `CACHE_TTL = 0` AND `ENABLE_CHECKPOINTING = false`.
64
65### Step 1: Exploration Cache Check
66
67If `CACHE_TTL > 0`:
68
691. Check if `.claude/sessions/exploration-cache/manifest.md` exists
702. If found, read the manifest and verify:
71 - `analysis_context` matches the current analysis context (or is a superset)
72 - `codebase_path` matches the current working directory
73 - `timestamp` is within `CACHE_TTL` hours of now
74 - Config files referenced in `config_checksum` haven't been modified since the cache was written (check mod-times of `package.json`, `tsconfig.json`, `pyproject.toml`, etc.)
753. **If cache is valid:**
76 - **Skill-invoked mode:** Auto-accept the cache. Set `CACHE_HIT = true`. Read cached `synthesis.md` and `recon_summary.md`. Skip to Phase 6 step 2 (present/return results).
77 - **Direct invocation:** Use `AskUserQuestion` to offer:
78 - **"Use cached results"** — Set `CACHE_HIT = true`, skip to Phase 6 step 2
79 - **"Refresh analysis"** — Set `CACHE_HIT = false`, proceed normally
804. **If cache is invalid or absent:** Set `CACHE_HIT = false`
81
82### Step 2: Interrupted Session Check
83
84If `ENABLE_CHECKPOINTING = true`:
85
861. Check if `.claude/sessions/__da_live__/checkpoint.md` exists
872. If found, read the checkpoint to determine `last_completed_phase`
883. Use `AskUserQuestion` to offer:
89 - **"Resume from Phase [N+1]"** — Load checkpoint state, proceed from the interrupted phase (see Session Recovery in Error Handling)
90 - **"Start fresh"** — Archive the interrupted session to `.claude/sessions/da-interrupted-{timestamp}/` and proceed normally
914. If not found: proceed normally
92
93### Step 3: Initialize Session Directory
94
95If `ENABLE_CHECKPOINTING = true` AND `CACHE_HIT = false`:
96
971. Create `.claude/sessions/__da_live__/` directory
982. Write `checkpoint.md`:
99 ```markdown
100 ## Deep Analysis Session
101 - **analysis_context**: [context from arguments or caller]
102 - **codebase_path**: [current working directory]
103 - **started**: [ISO timestamp]
104 - **current_phase**: 0
105 - **status**: initialized
106 ```
1073. Write `progress.md`:
108 ```markdown
109 ## Deep Analysis Progress
110 - **Phase**: 0 of 6
111 - **Status**: Session initialized
112
113 ### Phase Log
114 - [timestamp] Phase 0: Session initialized
115 ```
116
117---
118
119## Phase 1: Reconnaissance & Planning
120
121**Goal:** Perform codebase reconnaissance, generate dynamic focus areas, and compose a team plan.
122
123> If `ENABLE_PROGRESS = true`: Display "**[Phase 1/6] Reconnaissance & Planning** — Mapping codebase structure..."
124
1251. **Determine analysis context:**
126 - If `$ARGUMENTS` is provided, use it as the analysis context (feature area, question, or general exploration goal)
127 - If no arguments and this skill was loaded by another skill, use the calling skill's context
128 - If no arguments and standalone invocation, set context to "general codebase understanding"
129 - Set `PATH = current working directory`
130 - Inform the user: "Exploring codebase at: `PATH`" with the analysis context
131
1322. **Rapid codebase reconnaissance:**
133 Use Glob, Grep, and Read to quickly map the codebase structure. This should take 1-2 minutes, not deep investigation.
134
135 - **Directory structure:** List top-level directories with `Glob` (e.g., `*/` pattern) to understand the project layout
136 - **Language and framework detection:** Read config files (`package.json`, `tsconfig.json`, `pyproject.toml`, `Cargo.toml`, `go.mod`, etc.) to identify primary language(s) and framework(s)
137 - **File distribution:** Use `Glob` with patterns like `src/**/*.ts`, `**/*.py` to gauge the size and shape of different areas
138 - **Key documentation:** Read `README.md`, `CLAUDE.md`, or similar docs if they exist for project context
139 - **For feature-focused analysis:** Use `Grep` to search for feature-related terms (function names, component names, route paths) to find hotspot directories
140 - **For general analysis:** Identify the 3-5 largest or most architecturally significant directories
141
142 **Fallback:** If reconnaissance fails (empty project, unusual structure, errors), use the static focus area templates from Step 3b.
143
1443. **Generate dynamic focus areas:**
145
146 Based on reconnaissance findings, create focus areas tailored to the actual codebase. Default to 3 focus areas, but adjust based on codebase size and complexity (2 for small projects, up to 4 for large ones).
147
148 **a) Dynamic focus areas (default):**
149
150 Each focus area should include:
151 - **Label:** Short description (e.g., "API layer in src/api/")
152 - **Directories:** Specific directories to explore
153 - **Starting files:** 2-3 key files to read first
154 - **Search terms:** Grep patterns to find related code
155 - **Complexity estimate:** Low/Medium/High based on file count and apparent structure
156
157 For feature-focused analysis, focus areas should track the feature's actual footprint:
158 ```
159 Example:
160 Focus 1: "API routes and middleware in src/api/ and src/middleware/" (auth-related endpoints, request handling)
161 Focus 2: "React components in src/pages/profile/ and src/components/user/" (UI layer for user profiles)
162 Focus 3: "Data models and services in src/db/ and src/services/" (persistence and business logic)
163 ```
164
165 For general analysis, focus areas should map to the codebase's actual structure:
166 ```
167 Example:
168 Focus 1: "Next.js app layer in apps/web/src/" (pages, components, app router)
169 Focus 2: "Shared library in packages/core/src/" (utilities, types, shared logic)
170 Focus 3: "CLI and tooling in packages/cli/" (commands, configuration, build)
171 ```
172
173 **b) Static fallback focus areas** (only if recon failed):
174
175 For feature-focused analysis:
176 ```
177 Focus 1: Explore entry points and user-facing code related to the context
178 Focus 2: Explore data models, schemas, and storage related to the context
179 Focus 3: Explore utilities, helpers, and shared infrastructure
180 ```
181
182 For general codebase understanding:
183 ```
184 Focus 1: Explore application structure, entry points, and core logic
185 Focus 2: Explore configuration, infrastructure, and shared utilities
186 Focus 3: Explore shared utilities, patterns, and cross-cutting concerns
187 ```
188
1894. **Compose the team plan:**
190
191 Assemble a structured plan document from the reconnaissance and focus area findings:
192
193 ```markdown
194 ## Team Plan: Deep Analysis
195
196 ### Analysis Context
197 [context from Step 1]
198
199 ### Reconnaissance Summary
200 - **Project:** [name/type]
201 - **Primary language/framework:** [detected]
202 - **Codebase size:** [file counts, key directories]
203 - **Key observations:** [2-3 bullets]
204
205 ### Focus Areas
206
207 #### Focus Area 1: [Label]
208 - **Directories:** [list]
209 - **Starting files:** [2-3 files]
210 - **Search patterns:** [Grep patterns]
211 - **Complexity:** [Low/Medium/High]
212 - **Assigned to:** explorer-1 (sonnet)
213
214 #### Focus Area 2: [Label]
215 - **Directories:** [list]
216 - **Starting files:** [2-3 files]
217 - **Search patterns:** [Grep patterns]
218 - **Complexity:** [Low/Medium/High]
219 - **Assigned to:** explorer-2 (sonnet)
220
221 [... repeated for each focus area]
222
223 ### Agent Composition
224 | Role | Count | Model | Purpose |
225 |------|-------|-------|---------|
226 | Explorer | [N] | sonnet | Independent focus area exploration |
227 | Synthesizer | 1 | opus | Merge findings, deep investigation |
228
229 ### Task Dependencies
230 - Exploration Tasks 1-[N]: parallel (no dependencies)
231 - Synthesis Task: blocked by all exploration tasks
232 ```
233
2345. **Checkpoint** (if `ENABLE_CHECKPOINTING = true`):
235 - Update `.claude/sessions/__da_live__/checkpoint.md`: set `current_phase: 1`
236 - Write `.claude/sessions/__da_live__/team_plan.md` with the full team plan from Step 4
237 - Write `.claude/sessions/__da_live__/recon_summary.md` with reconnaissance findings from Step 2
238 - Append to `progress.md`: `[timestamp] Phase 1: Reconnaissance complete — [N] focus areas identified`
239
240---
241
242## Phase 2: Review & Approval
243
244**Goal:** Present the team plan for user review and approval before allocating resources.
245
246> If `ENABLE_PROGRESS = true`: Display "**[Phase 2/6] Review & Approval** — Presenting team plan..."
247
248### If `REQUIRE_APPROVAL = false`
249
250Skip to Phase 3 with a brief note: "Auto-approving team plan (skill-invoked mode). Proceeding with [N] explorers and 1 synthesizer."
251
252### If `REQUIRE_APPROVAL = true`
253
2541. **Present the team plan** to the user (output the plan from Phase 1 Step 4), then use `AskUserQuestion`:
255 - **"Approve"** — Proceed to Phase 3 as-is
256 - **"Modify"** — User describes changes (adjust focus areas, add/remove explorers, change scope)
257 - **"Regenerate"** — Re-run reconnaissance with user feedback
258
2592. **If "Modify"** (up to 3 cycles):
260 - Ask what to change using `AskUserQuestion`
261 - Apply modifications to the team plan (adjust focus areas, agent count, scope)
262 - Re-present the updated plan for approval
263 - If 3 modification cycles are exhausted, offer "Approve current plan" or "Abort analysis"
264
2653. **If "Regenerate"** (up to 2 cycles):
266 - Ask for feedback/new direction using `AskUserQuestion`
267 - Return to Phase 1 Step 2 with the user's feedback incorporated
268 - Re-compose and re-present the team plan
269 - If 2 regeneration cycles are exhausted, offer "Approve current plan" or "Abort analysis"
270
2714. **Checkpoint** (if `ENABLE_CHECKPOINTING = true`):
272 - Update `.claude/sessions/__da_live__/checkpoint.md`: set `current_phase: 2`, record `approval_mode` (approved/auto-approved)
273 - Append to `progress.md`: `[timestamp] Phase 2: Plan approved (mode: [approval_mode])`
274
275---
276
277## Phase 3: Team Assembly
278
279**Goal:** Create the team, spawn agents, create tasks, and assign work using the approved plan.
280
281> If `ENABLE_PROGRESS = true`: Display "**[Phase 3/6] Team Assembly** — Creating team and spawning agents..."
282
2831. **Create the team:**
284 - Use `TeamCreate` with name `deep-analysis-{timestamp}` (e.g., `deep-analysis-1707300000`)
285 - Description: "Deep analysis of [analysis context]"
286
2872. **Spawn teammates:**
288 Use the Task tool with the `team_name` parameter to spawn teammates based on the approved plan:
289
290 - **N explorers** (one per focus area) — `subagent_type: "code-explorer"`, model: sonnet
291 - Named: `explorer-1`, `explorer-2`, ... `explorer-N`
292 - Prompt each with: "You are part of a deep analysis team. Wait for your task assignment. The codebase is at: [PATH]. Analysis context: [context]"
293
294 - **1 synthesizer** — `subagent_type: "code-synthesizer"`
295 - Named: `synthesizer`
296 - Prompt with: "You are the synthesizer for a deep analysis team. You have Bash access for git history, dependency analysis, and static analysis. Wait for your task assignment. The codebase is at: [PATH]. Analysis context: [context]"
297
2983. **Create tasks:**
299 Use `TaskCreate` for each task based on the approved plan's focus areas:
300
301 - **Exploration Task per focus area:** Subject: "Explore: [Focus area label]", Description: detailed exploration instructions including directories, starting files, search terms, and complexity estimate
302 - **Synthesis Task:** Subject: "Synthesize and evaluate exploration findings", Description: "Merge and synthesize findings from all exploration tasks into a unified analysis. Investigate gaps using Bash (git history, dependency trees). Evaluate completeness before finalizing."
303 - Use `TaskUpdate` to set `addBlockedBy` pointing to all exploration task IDs
304
3054. **Assign exploration tasks (with status guard):**
306
307 For each exploration task, apply the following status-guarded assignment:
308
309 1. Use `TaskGet` to check the task's current status and owner
310 2. **Only assign if** status is `pending` AND owner is empty
311 3. If already assigned or completed: log "Task [ID] already [status], skipping" and move on
312 4. Use `TaskUpdate` to set the owner to the corresponding explorer
313 5. Send the explorer a message with the task details via `SendMessage`:
314 ```
315 SendMessage type: "message", recipient: "[explorer-N]",
316 content: "Your exploration task [ID] is assigned. Focus area: [label]. Directories: [list]. Starting files: [list]. Search patterns: [list]. Begin exploration now.",
317 summary: "Exploration task assigned"
318 ```
319
320 **Never re-assign a completed or in-progress task.**
321
3225. **Checkpoint** (if `ENABLE_CHECKPOINTING = true`):
323 - Update `.claude/sessions/__da_live__/checkpoint.md`: set `current_phase: 3`, record `team_name`, `explorer_names` (list), `task_ids` (map of explorer → task ID), `synthesis_task_id`
324 - Append to `progress.md`: `[timestamp] Phase 3: Team assembled — [N] explorers, 1 synthesizer`
325
326---
327
328## Phase 4: Focused Exploration
329
330**Goal:** Workers explore their assigned areas independently.
331
332> If `ENABLE_PROGRESS = true`: Display "**[Phase 4/6] Focused Exploration** — 0/[N] explorers complete"
333
334### Monitoring Loop
335
336After assigning exploration tasks, monitor progress with status-aware tracking:
337
3381. When an explorer goes idle or sends a message, use `TaskGet` to check their task status
3392. **If task is `completed`**: Record the explorer's findings. If `ENABLE_CHECKPOINTING = true`, write `explorer-{N}-findings.md` to `.claude/sessions/__da_live__/` and update checkpoint.
3403. **If task is `in_progress`**: The explorer is still working — do NOT re-send the assignment
3414. **If task is `pending` and owner is set**: The explorer received the assignment but hasn't started yet — wait, do NOT re-send
3425. **If task is `pending` and owner is empty**: Assignment may have been lost — re-assign using the status guard from Phase 3 step 4
343
344**Never re-assign a completed or in-progress task.** This is the primary duplicate prevention mechanism.
345
346If `ENABLE_PROGRESS = true`: Update the progress display as explorers complete: "**[Phase 4/6] Focused Exploration** — [completed]/[N] explorers complete"
347
348- Workers explore their assigned focus areas independently — no cross-worker messaging
349- Workers can respond to follow-up questions from the synthesizer
350- Each worker marks its task as completed when done
351- You (the lead) receive idle notifications as workers finish
352- **Wait for all exploration tasks to be marked complete** before proceeding to Phase 5
353
354---
355
356## Phase 5: Evaluation and Synthesis
357
358**Goal:** Verify exploration completeness, launch synthesis with deep investigation.
359
360> If `ENABLE_PROGRESS = true`: Display "**[Phase 5/6] Synthesis** — Merging findings and investigating gaps..."
361
362### Step 1: Structural Completeness Check
363
364This is a structural check, not a quality assessment:
365
3661. Use `TaskList` to verify all exploration tasks are completed
3672. Check that each worker produced a report with content (review the messages/reports received)
3683. **If a worker failed completely** (empty or error output):
369 - Create a follow-up exploration task targeting the gap
370 - Assign it to an idle worker
371 - Add the new task to the synthesis task's `blockedBy` list
372 - Wait for the follow-up task to complete
3734. **If all produced content**: proceed immediately to Step 2
374
375### Step 2: Launch Synthesis
376
3771. Use `TaskUpdate` to assign the synthesis task: `owner: "synthesizer"`
3782. Send the synthesizer a message with exploration context and recon findings:
379 ```
380 SendMessage type: "message", recipient: "synthesizer",
381 content: "All exploration tasks are complete. Your synthesis task is now assigned.
382
383 Analysis context: [analysis context]
384 Codebase path: [PATH]
385
386 Recon findings from planning phase:
387 - Project structure: [brief summary of directory layout]
388 - Primary language/framework: [what was detected]
389 - Key areas identified: [the focus areas and why they were chosen]
390
391 The workers are: [list of explorer names from the approved plan]. You can message them with follow-up questions if you find conflicts or gaps in their findings.
392
393 You have Bash access for deep investigation — use it for git history analysis, dependency trees, static analysis, or any investigation that Read/Glob/Grep can't handle.
394
395 Read the completed exploration tasks via TaskGet to access their reports, then synthesize into a unified analysis. Evaluate completeness before finalizing.",
396 summary: "Synthesis task assigned, begin work"
397 ```
3983. Wait for the synthesizer to mark the synthesis task as completed
399
4004. **Checkpoint** (if `ENABLE_CHECKPOINTING = true`):
401 - Update `.claude/sessions/__da_live__/checkpoint.md`: set `current_phase: 5`
402 - Write `.claude/sessions/__da_live__/synthesis.md` with the synthesis results
403 - Append to `progress.md`: `[timestamp] Phase 5: Synthesis complete`
404
405---
406
407## Phase 6: Completion + Cleanup
408
409**Goal:** Collect results, present to user, and tear down the team.
410
411> If `ENABLE_PROGRESS = true`: Display "**[Phase 6/6] Completion** — Collecting results and cleaning up..."
412
4131. **Collect synthesis output:**
414 - The synthesizer's findings are in the messages it sent and/or the task completion output
415 - Read the synthesis results
416
4172. **Write exploration cache** (if `CACHE_TTL > 0`):
418 - Create `.claude/sessions/exploration-cache/` directory (overwrite if exists)
419 - Write `manifest.md`:
420 ```markdown
421 ## Exploration Cache Manifest
422 - **analysis_context**: [the analysis context used]
423 - **codebase_path**: [current working directory]
424 - **timestamp**: [ISO timestamp]
425 - **config_checksum**: [comma-separated list of config files and their mod-times]
426 - **ttl_hours**: [CACHE_TTL value]
427 - **explorer_count**: [N]
428 ```
429 - Write `synthesis.md` with the full synthesis output
430 - Write `recon_summary.md` with the Phase 1 reconnaissance findings
431 - Write `explorer-{N}-findings.md` for each explorer's findings (if not already persisted from Phase 4 checkpoints)
432
4333. **Present or return results:**
434 - **Standalone invocation:** Present the synthesized analysis to the user. The results remain in conversation memory for follow-up questions.
435 - **Loaded by another skill:** The synthesis is complete. Control returns to the calling workflow — do not present a standalone summary.
436
4374. **Shutdown teammates:**
438 Send shutdown requests to all spawned teammates (iterate over the actual agents from the approved plan):
439 ```
440 SendMessage type: "shutdown_request", recipient: "explorer-1", content: "Analysis complete"
441 SendMessage type: "shutdown_request", recipient: "explorer-2", content: "Analysis complete"
442 [... for each explorer spawned]
443 SendMessage type: "shutdown_request", recipient: "synthesizer", content: "Analysis complete"
444 ```
445
4465. **Archive session and cleanup team:**
447 - If `ENABLE_CHECKPOINTING = true`: Move `.claude/sessions/__da_live__/` to `.claude/sessions/da-{timestamp}/`
448 - Use `TeamDelete` to remove the team and its task list
449
450---
451
452## Error Handling
453
454### Settings Check Failure
455- If `.claude/agent-alchemy.local.md` exists but is malformed or the `deep-analysis` section is unparseable: warn the user ("Settings file found but could not parse deep-analysis settings — using defaults") and proceed with default approval values.
456
457### Planning Phase Failure
458- If reconnaissance fails (errors, empty results, unusual structure): fall back to static focus area templates (Step 3b)
459- If the codebase appears empty: inform the user and ask how to proceed
460
461### Approval Phase Failure
462- If maximum modification cycles (3) or regeneration cycles (2) are reached without approval: use `AskUserQuestion` with options:
463 - **"Approve current plan"** — Proceed with the latest version of the plan
464 - **"Abort analysis"** — Cancel the analysis entirely
465
466### Partial Worker Failure
467- If one worker fails: create a follow-up task targeting the missed focus area, assign to an idle worker, add to synthesis `blockedBy`
468- If two workers fail: attempt follow-ups, but if they also fail, instruct the synthesizer to work with partial results
469- If all workers fail: inform the user and offer to retry or abort
470
471### Synthesizer Failure
472- If the synthesizer fails: present the raw exploration results to the user directly
473- Offer to retry synthesis or let the user work with partial results
474
475### General Failures
476If any phase fails:
4771. Explain what went wrong
4782. Ask the user how to proceed:
479 - Retry the phase
480 - Continue with partial results
481 - Abort the analysis
482
483### Session Recovery
484
485When resuming from an interrupted session (detected in Phase 0 Step 2), use the following per-phase strategy:
486
487| Interrupted At | Recovery Strategy |
488|----------------|-------------------|
489| **Phase 1** | Restart from Phase 1 (reconnaissance is fast, ~1-2 min) |
490| **Phase 2** | Load saved `team_plan.md` from session dir, re-present for approval |
491| **Phase 3** | Load approved plan from checkpoint, restart team assembly |
492| **Phase 4** | Read completed `explorer-{N}-findings.md` files from session dir. Only spawn and assign explorers whose findings files are missing. Add existing findings to synthesizer context. |
493| **Phase 5** | Load all explorer findings from session dir. Spawn a fresh synthesizer and launch synthesis with the persisted findings. |
494| **Phase 6** | Load `synthesis.md` from session dir. Proceed directly to present/return results and cleanup. |
495
496**Recovery procedure:**
4971. Read `checkpoint.md` to determine `last_completed_phase` and session state (team_name, explorer_names, task_ids)
4982. Load any persisted artifacts from the session directory (team_plan, explorer findings, synthesis)
4993. Resume from Phase `last_completed_phase + 1` using the loaded state
5004. For Phase 4 recovery: compare persisted `explorer-{N}-findings.md` files against expected explorer list to determine which explorers still need to run
501
502---
503
504## Agent Coordination
505
506- The lead (you) acts as the planner: performs recon, composes the team plan, handles approval, assigns work
507- Workers explore independently — no cross-worker messaging (hub-and-spoke topology)
508- The synthesizer can ask workers follow-up questions to resolve conflicts and fill gaps
509- The synthesizer has Bash access for deep investigation (git history, dependency trees, static analysis)
510- Wait for task dependencies to resolve before proceeding
511- Handle agent failures gracefully — continue with partial results
512- Agent count and focus area details come from the approved plan, not hardcoded values
513
514When calling Task tool for teammates:
515- Use `model: "opus"` for the synthesizer
516- Use `model: "sonnet"` for workers
517- Always include `team_name` parameter to join the team