codeflash-agent/plugin
Kevin Turcios 7e00007569
Improve deep optimizer: profiling script + failure modes + dist fix (#24)
* Exclude dev docs from plugin dist builds

README.md, ARCHITECTURE.md, and ROADMAP.md are development docs that
shouldn't ship in the assembled plugin distributions.

* Improve deep optimizer: fix profiling script, add failure mode awareness

Profiling script: Accept source root and command as CLI args instead of
hardcoding `src` and requiring manual `# === RUN TARGET HERE ===` edits.
The agent now copies the script from references and runs it with the
project's actual source root and test command.

Failure modes: Wire failure-modes.md into the on-demand reference table
and stuck recovery checklist so the agent consults it when workflows
break (deadlocks, silent failures, context loss, stale results).

* Fix ruff lint errors in unified profiling script

Refactor main() into parse_args(), profile_command(), and
report_results() to fix C901 (complexity) and PLR0915 (too many
statements). Also fix S306 (mktemp → NamedTemporaryFile), PLW1510
(explicit check=False), and add noqa for intentional os.path usage
(PTH112) and subprocess with CLI args (S603).
2026-04-15 04:11:52 -05:00
..
.claude-plugin squash 2026-04-13 14:12:17 -05:00
agents Feat/java language support (#12) 2026-04-14 18:49:41 -05:00
commands squash 2026-04-13 14:12:17 -05:00
hooks Migrate .codeflash/ to {teammember}/{org}/{project}/ format (#15) 2026-04-14 23:04:34 -05:00
languages Improve deep optimizer: profiling script + failure modes + dist fix (#24) 2026-04-15 04:11:52 -05:00
references/shared Migrate .codeflash/ to {teammember}/{org}/{project}/ format (#15) 2026-04-14 23:04:34 -05:00
vendor/codex squash 2026-04-13 14:12:17 -05:00
ARCHITECTURE.md squash 2026-04-13 14:12:17 -05:00
README.md squash 2026-04-13 14:12:17 -05:00
ROADMAP.md squash 2026-04-13 14:12:17 -05:00

Plugin Architecture

The codeflash plugin is a multi-language Claude Code plugin for autonomous performance optimization.

Session Flow

/codeflash-optimize start
  └─ Skill asks user for context (AskUserQuestion)
  └─ Skill launches language router (FOREGROUND, run_in_background: false)
       └─ Router runs setup agent (waits for completion)
       └─ Router reads CLAUDE.md, library research, etc.
       └─ Router creates team: TeamCreate("codeflash-session")
       └─ Router creates tasks: TaskCreate("Setup", "Baseline", "Experiment loop")
       └─ Router launches optimizer (BACKGROUND, run_in_background: true)
       └─ Router STAYS ALIVE coordinating:
            ├─ Receives [baseline], [progress], [experiment] via SendMessage
            ├─ Relays progress directly to user (foreground output)
            ├─ Handles [complete] → cleanup, changelog, TeamDelete
            └─ Returns result to skill when session ends

The skill launches the language router in the foreground so its progress output streams directly to the user. The router launches the optimizer in the background as a named teammate and stays alive to coordinate via SendMessage. This is the Team Lead + Specialists pattern — the router is the team lead, the optimizer and any domain agents are specialists.

Agent Hierarchy

Tier 1: Top Router (plugin/agents/codeflash.md)
         └─ Detects language, delegates immediately

Tier 2: Language Router / Team Lead
         ├─ codeflash-python   (plugin/languages/python/agents/)
         └─ codeflash-javascript (plugin/languages/javascript/agents/)
         Tools: TeamCreate, TeamDelete, Agent, SendMessage, TaskCreate/Update

Tier 3: Deep Agent / Sub-Team Lead
         ├─ codeflash-deep     (Python)
         └─ codeflash-js-deep  (JavaScript)
         Tools: TeamCreate, Agent, SendMessage (can dispatch domain specialists)

Tier 4: Domain Specialists
         ├─ cpu, memory, async, structure    (Python)
         └─ cpu, memory, async, structure, bundle (JavaScript)
         Tools: SendMessage only (report to parent, no team authority)

Shared (language-agnostic):
         ├─ codeflash-researcher  (read-only, parallel investigation)
         └─ codeflash-review      (standalone or post-session gate)

File Layout

Language-agnostic (base)

  • agents/codeflash.md — language router that detects the project language and delegates
  • agents/codeflash-review.md — review agent (works on any language)
  • agents/codeflash-researcher.md — research agent (works on any language)
  • commands/ — codex CLI commands
  • vendor/codex/ — codex companion scripts and schemas (vendored)
  • references/shared/ — shared methodology (experiment loop, templates, benchmarks)
  • hooks/ — session lifecycle and review gate hooks

Python (languages/python/)

  • agents/codeflash-python.md — Python domain router (Team Lead)
  • agents/codeflash-deep.md — primary optimizer (profiles all dimensions jointly)
  • agents/codeflash-cpu.md, -memory.md, -async.md, -structure.md — one agent per domain
  • agents/codeflash-setup.md — detects project env, installs deps
  • agents/codeflash-scan.md, -ci.md, -pr-prep.md — scan, CI, and PR preparation
  • skills//codeflash-optimize entry point, memray profiling
  • references/ — Python-specific protocol implementations + domain deep-dive docs

JavaScript (languages/javascript/)

  • agents/codeflash-javascript.md — JS/TS domain router (Team Lead)
  • agents/codeflash-js-deep.md — primary optimizer (profiles all dimensions jointly)
  • agents/codeflash-js-cpu.md, -memory.md, -async.md, -structure.md, -bundle.md — one agent per domain (5 domains)
  • agents/codeflash-js-setup.md — detects runtime/package manager, installs deps
  • agents/codeflash-js-scan.md, -ci.md, -pr-prep.md — scan, CI, and PR preparation
  • skills//codeflash-optimize entry point, V8 profiling reference
  • references/ — JS-specific references (Prisma performance, domain deep-dives)

Adding a New Language

Follow this template — Team Lead + Deep Agent are required, domain specialists are added as needed:

Component Required? Role
codeflash-<lang> Yes Language Router / Team Lead (TeamCreate, Agent, SendMessage)
codeflash-<lang>-deep Yes Primary optimizer / Sub-Team Lead (TeamCreate, Agent, SendMessage)
codeflash-<lang>-setup Yes Environment setup utility (one-off, no team membership)
codeflash-<lang>-cpu As needed CPU/algorithm specialist (SendMessage only)
codeflash-<lang>-memory As needed Memory specialist (SendMessage only)
codeflash-<lang>-async As needed Concurrency specialist (SendMessage only)
codeflash-<lang>-structure As needed Module/import specialist (SendMessage only)
Language-specific domains As needed e.g., bundle for JS, compile for Go/Rust
codeflash-<lang>-scan Optional Quick diagnostic (one-off)
codeflash-<lang>-ci Optional CI webhook handler
codeflash-<lang>-pr-prep Optional PR preparation

Shared agents (codeflash-researcher, codeflash-review) work across all languages.

Build

make build-plugin                  # default: LANG=python → dist/ is a Python-only plugin
make build-plugin LANG=javascript  # dist/ is a JavaScript-only plugin
make clean                         # remove dist/

Each build produces a single-language plugin in dist/. The Makefile copies language-agnostic files from plugin/, overlays plugin/languages/<LANG>/ (agents, references, skills), and rewrites internal paths so everything is flat. You pick the language at build time — there is no multi-language dist yet, because loading all languages at once is extremely heavy on context and compute.