# Plugin Architecture & Execution Order

## Lifecycle

1. **SessionStart hook** — initializes Codex session state
2. **User triggers** `/codeflash-optimize start` (skill)
3. **Language router** (`codeflash`) — detects project language, delegates to language-specific router
4. **Language-specific router** (e.g., `codeflash-python`) — detects domain, asks user questions, launches setup
5. **Setup agent** (e.g., `codeflash-setup`) — detects env, installs deps/profilers, writes `.codeflash/setup.md`
6. **Router validates** setup, runs test suite, researches deps via context7
7. **Router creates team** and dispatches optimizer agent

## Optimization Loop

8. **Optimizer** (`codeflash-deep` or domain-specific: `-cpu`, `-memory`, `-async`, `-structure`) — profiles all dimensions, ranks targets
9. **Researcher** (`codeflash-researcher`) — launched alongside to analyze targets in parallel, sends findings back to optimizer
10. **Experiment cycle**: profile → reason → implement → test → benchmark → keep/discard → commit → re-profile → repeat
11. **Plateau detection** (3+ consecutive discards) → optimizer sends `[complete]`

## Review Gate

12. **Review agent** (`codeflash-review`) — 6-pass deep review (comprehension → correctness → safety → benchmark verification → quality → disclosure)
13. Writes `.codeflash/review-report.md` with verdict (APPROVE/REQUEST CHANGES/BLOCK)

## Cleanup

14. Router shuts down teammates, deletes team
15. Preserves `learnings.md`, `results.tsv`, `changelog.md`; deletes temp files
16. **SessionEnd hook** — finalizes Codex session

## Hooks

Defined in `plugin/hooks/hooks.json`, fire at session boundaries:

| Hook | When | What |
|------|------|------|
| **SessionStart** | New Claude session begins | Initializes Codex session state, records metadata |
| **SessionEnd** | Session ends | Cleans up Codex jobs, saves final state |
| **Stop** | User clicks Stop (900s timeout) | Optionally runs Codex adversarial review gate before allowing termination |

## Agents

### Language-agnostic (`plugin/agents/`)

| Agent | Role | Triggered by |
|-------|------|-------------|
| `codeflash` | Language router — detects language, delegates to language-specific router | `/codeflash-optimize` skill, user request |
| `codeflash-researcher` | Read-only research teammate | Domain agents, after baseline profiling |
| `codeflash-review` | Independent 6-pass deep review | `/codex-review`, post-optimization gate |

### Python-specific (`plugin/languages/python/agents/`)

| Agent | Role | Triggered by |
|-------|------|-------------|
| `codeflash-python` | Python domain router/team lead — orchestrates Python sessions | Language router after detecting Python |
| `codeflash-setup` | Environment detection & preparation | Python router, before first optimization |
| `codeflash-scan` | Quick cross-domain diagnosis | `/codeflash-optimize scan` or router recon |
| `codeflash-deep` | Primary optimizer (all dimensions) | Python router (default unless single-domain requested) |
| `codeflash-cpu` | CPU/runtime specialist | Python router or deep agent dispatch |
| `codeflash-memory` | Memory specialist | Python router or deep agent dispatch |
| `codeflash-async` | Async/concurrency specialist | Python router or deep agent dispatch |
| `codeflash-structure` | Import-time/module structure specialist | Python router or deep agent dispatch |
| `codeflash-ci` | CI mode agent for GitHub webhooks | CI service |
| `codeflash-pr-prep` | PR preparation agent | Post-session |

## Commands (`plugin/commands/`)

User-invocable anytime:

| Command | Purpose |
|---------|---------|
| `/codex-review` | Manual adversarial review via Codex companion |
| `/codex-setup` | Check/install Codex CLI, configure review gate |
| `/codex-status` | Check active and recent Codex jobs |

## Skills (`plugin/languages/python/skills/`)

| Skill | Purpose |
|-------|---------|
| `codeflash-optimize` | Entry point: `start\|resume\|status\|scan\|review` |
| `memray-profiling` | Advanced memory profiling utilities (used by codeflash-memory) |

## References

### Language-agnostic (`plugin/references/shared/`)

Methodology, templates, and frameworks that apply to any language:

| File | Purpose |
|------|---------|
| `agent-base-protocol.md` | Shared operational rules (experiment discipline, commit rules, stuck recovery) |
| `experiment-loop-base.md` | Shared experiment loop framework (keep/discard tree, guard, plateau) |
| `pre-submit-review.md` | Shared pre-submit checklist (resource ownership, concurrency, correctness) |
| `e2e-benchmarks.md` | Two-phase measurement concept (micro-benchmark → E2E) |
| `micro-benchmark.md` | A/B pre-screen pattern |
| `pr-body-templates.md` | Generic PR body structure and writing guidelines |
| `pr-preparation.md` | PR workflow (inventory, folding, conventions) |
| `adversarial-review.md` | Codex adversarial review methodology |
| `changelog-template.md` | Changelog generation structure |
| `handoff-template.md` | HANDOFF.md template |
| `learnings-template.md` | Cross-session learnings template |

### Python-specific (`plugin/languages/python/references/`)

Python implementations of shared protocols, plus domain-specific deep-dive docs:

| File/Dir | Purpose |
|----------|---------|
| `agent-base-protocol.md` | Python profilers (cProfile, tracemalloc, memray), test runners, package managers |
| `e2e-benchmarks.md` | `codeflash compare` usage, pytest-benchmark, fallback tools |
| `micro-benchmark.md` | Python A/B template (timeit, memray, asyncio), domain thresholds |
| `pre-submit-review.md` | Python checks (asyncio, .pyc, os.environ, monkey-patching) |
| `pr-body-templates.md` | Python PR variants (codeflash compare output, memray memory table) |
| `unified-profiling-script.py` | CPU+memory+GC profiling script for deep agent |
| `library-replacement.md` | Library boundary breaking guide |
| `async/` | Async domain: asyncio patterns, blocking detection, concurrency |
| `data-structures/` | CPU domain: containers, algorithms, bytecode, stdlib |
| `memory/` | Memory domain: tracemalloc, memray, leak detection, framework leaks |
| `structure/` | Structure domain: import time, module decomposition, circular deps |

## State Files

Created during execution in `.codeflash/`:

| File | Created by | Purpose |
|------|-----------|---------|
| `setup.md` | codeflash-setup | Environment summary |
| `scan-report.md` | codeflash-scan | Ranked targets + domain recommendations |
| `results.tsv` | optimizer agents | Experiment log (baseline, speedup, keep/discard) |
| `HANDOFF.md` | optimizer agents | Session state for resume |
| `conventions.md` | router | Binding constraints from maintainer feedback |
| `learnings.md` | router | Cross-session discoveries |
| `review-report.md` | codeflash-review | 6-pass review findings + verdict |
| `changelog.md` | router | PR-ready optimization summary |

## Ordering Guarantees

**Sequential:**
1. SessionStart hook fires before any agent acts
2. Language detection before domain routing
3. Setup agent completes before domain agents start
4. Baseline profiling before any optimization experiment
5. Re-profiling after every KEEP to update rankings
6. Review gate runs after optimizer `[complete]`, before cleanup
7. SessionEnd hook fires as session terminates

**Parallel allowed:**
- Researcher analyzes targets #2-5 while optimizer works on target #1
- Multiple domain agents can run in separate worktrees
- Deep agent can dispatch domain agents while continuing its own profiling

## Assembly

`make build-plugin` merges `plugin/` (base, excluding `languages/`) + `plugin/languages/python/` (overlay) into `dist/`. Set `LANG=javascript` to build for JS instead. Agent files use `${CLAUDE_PLUGIN_ROOT}` for references — paths differ between source and assembled output.
