Reflex

Convention-based meta-skill dispatcher for Claude. 78 modules, zero context overhead for the ones you don't use.

78
Modules
~50
Startup Tokens
8
Evaluation Lenses
3
Entry Points
0
Registry Files

Progressive Disclosure — Four Levels Deep

Anthropic's skill system loads in 3 tiers. Reflex adds a 4th: convention-based module dispatch that routes in Python before the LLM sees anything.

Level 0 — Always

SKILL.md Frontmatter

Only the trigger word "reflex" and a one-line description. Loaded into every conversation at startup.

Cost: ~50 tokens regardless of module count
Level 1 — On Trigger

SKILL.md Body

Routing instructions. Tells Claude to run dispatch.py and follow the protocol output. No module content yet.

Cost: ~800 tokens for the router instructions
Level 2 — Dispatch

Python Routing

dispatch.py resolves the module, extracts params, builds chains, runs resolvers — all in Python. Zero LLM tokens.

Cost: 0 tokens — Python, not inference
Level 3 — Load

MODULE.md

Only the matched module's instructions enter context. 77 other modules remain on disk, unread, costing nothing.

Cost: 1 MODULE.md — the one you asked for

Standard Skill vs. Reflex

A standard Claude skill puts all instructions in one SKILL.md. Reflex splits them across 78 modules and loads only what's needed.

Standard Skill (1 SKILL.md)

Startup cost
All instructions loaded
10 capabilities
~5K tokens always
100 capabilities
~50K tokens always
Composability
Manual

Reflex (78 Modules)

Startup cost
~50 tokens
10 capabilities
~50 tokens
100 capabilities
~50 tokens
Composability
+ chains, DEPENDS, resolvers

Composable Chains

Modules connect with + syntax. Each step writes structured JSON to disk. Downstream steps read it. The workspace is the data bus.

Evidence-Certified GTM Strategy
reflex websearch+gtm-strategy+certify+report target:"RouteForge"
Sourcewebsearch
Analyzergtm-strategy
Transformercertify
Formatterreport
📄 .docx with evidence appendix
Self-Improving Email
reflex websearch+email+perspective target:"launch" recipient:"investors"
Sourcewebsearch
Formatteremail
Transformerperspective
✉️ Revised email via compose tool
Auto-Resolving Dependency Chain (Level 2)
reflex launch-plan target:"RouteForge"
Autowebsearch
Autocompetitors
Autopositioning
Autoaudience
Autogtm-strategy
Autokeywords
Invokedlaunch-plan
📄 90-day execution playbook

Evidence Traceability

Every claim in the final document traces back through the chain to its source. The certify module maps this explicitly.

🔍
Research
Web search writes JSON with source URLs for every finding
📊
Analyze
Modules read findings, add interpretation, flag confidence levels
Certify
Maps every claim to its source: sourced, inferred, assumed, or unverified
📄
Deliver
Document ships with embedded evidence appendix and methodology

Persona System — Conversational Access

Personas make the module system accessible without knowing the grammar. The user talks. Walt decides when to invoke modules.

personas/walt/

MDPERSONA.mdidentity
JSPARAMS.jsoninject
JSTRIGGERS.jsonpatterns
JSSTYLE.jsonvoice
User"I need to understand our competitive landscape and write a report"
Walt"Let me dig into that..." (recognizes needs_research trigger)
dispatch.pyreflex websearch+competitors+report target:"competitive landscape"
WaltWeaves module output into conversation. Ends with a question, not a summary.

Why Personas Are Not Modules

The parallel architecture isn't cosmetic. It protects a type-level invariant.

Modules (modules/)

Bounded Composable Chainable
  • Input → process → output → done
  • Composable with + syntax
  • Referenceable in DEPENDS.json
  • Visible in plan's module registry
  • Defined output shape (JSON to disk)

Personas (personas/)

Persistent Conversational Not chainable
  • Stays active across entire conversation
  • Cannot appear in + chains
  • Cannot be a DEPENDS.json target
  • Invisible to plan and module registry
  • No output shape — conversation IS the output
If walt lived in modules/, then websearch+walt would be valid syntax — jamming a persistent behavioral overlay into a bounded chain step. The parallel directory means the composition engine never sees it. No flags. No exclusion lists. The filesystem is the type system.

Convention Is the Interface

dispatch.py has never been modified to support a new module. Adding capability means adding a folder.

Add a Module

mkdir modules/my-module
echo "# My Module\n\nDo the thing." > modules/my-module/MODULE.md

That's it. dispatch.py discovers it. reflex my-module works. No registry, no config, no engine changes.

Add a Persona

mkdir personas/strategist
echo "# Strategist\n\nYou think in frameworks." > personas/strategist/PERSONA.md

Same convention. persona.py discovers it. reflex persona strategist works. dispatch.py never knows it exists.