This repository turns Pi Coding Agent into a coordinated swarm platform with:
- multi-agent orchestration
- dynamic provider/model routing (Gemini / Codex / RuvLLM / OpenRouter)
- RVF vector memory (
.rvf/) - self-learning (AgentDB + Reflexion + SONA)
- team and chain execution across domain experts
Primary use case: run multiple coordinated Pi coding agents and dynamically choose the best provider/model per task.
extensions/orchestration.ts- Provider tools:
gemini_run,codex_run,ruvllm_run,auto_route - Swarm tools:
swarm_init,swarm_dispatch,swarm_broadcast,conflict_check
- Provider tools:
extensions/agent-team.ts- Dispatcher model with team selection + agent grid + RVF memory patterns
extensions/agent-chain.ts- Sequential pipelines (
planner -> coder -> reviewer -> tester, etc.)
- Sequential pipelines (
extensions/claude-flow.ts- Claude-Flow CLI bridge for swarm lifecycle, memory, agents, monitoring
extensions/learning.ts- AgentDB + Reflexion + SONA (adaptive learning)
extensions/ruvector.ts- Document indexing / semantic retrieval over
.rvf/docs.json
- Document indexing / semantic retrieval over
- Core agents in
.pi/agents/*.md - Domain experts in
.pi/agents/experts/* - Provider agents in
.pi/agents/providers/* - Team definitions in
.pi/agents/teams.yaml - Chain definitions in
.pi/agents/agent-chain.yaml
Install:
- Bun
- just
- Pi Coding Agent CLI (
pi) - Optional provider CLIs:
geminicodex- local
ruvllmserver (if using local inference) claude-flowCLI (forextensions/claude-flow.ts)
Install dependencies:
bun installPi does not auto-load .env unless your launcher does. Use one of:
source .env && pior run through just recipes (dotenv enabled there).
Typical variables:
OPENAI_API_KEYANTHROPIC_API_KEYGEMINI_API_KEYOPENROUTER_API_KEY
just pijust ext-orchestrationjust ext-agent-teamjust ext-learningjust ext-megaThere are two levels:
- Session model selection (Pi runtime model)
- Tool-level routing (choose provider per subtask)
Launch Pi with a specific model:
pi --model openrouter/google/gemini-3.1-pro -e extensions/orchestration.tsYou can replace with any configured provider/model:
openrouter/google/gemini-3.1-proopenrouter/anthropic/claude-sonnet-4openrouter/openai/gpt-5-mini- local / custom provider IDs
Current default fallback in several agent-runner extensions is now
openrouter/google/gemini-3.1-pro.
With extensions/orchestration.ts, call tools directly:
gemini_run(prompt, files?, model?)codex_run(prompt, files?, model?)ruvllm_run(prompt, model?)auto_route(prompt, priority?)
This lets one parent agent dynamically split workload:
- research tasks -> Gemini
- code transforms -> Codex
- local/private inference -> RuvLLM
- unknown/mixed ->
auto_route
Example workflow:
auto_route("Investigate API auth best practices", "quality")codex_run("Implement middleware based on findings", ["src/auth.ts"])gemini_run("Review security assumptions and edge cases")
You have 4 main orchestration patterns.
pi -e extensions/agent-team.tsThen use dispatcher tools to fan out tasks to selected team experts.
Best for:
- domain decomposition
- parallel specialist execution
- persistent agent session memory
- RVF task-pattern recall
pi -e extensions/agent-chain.tsRun predefined chain pipelines from .pi/agents/agent-chain.yaml.
Best for:
- deterministic multi-step flows
- handoff-based quality gates
- reproducible build/test/review loops
pi -e extensions/orchestration.ts -e extensions/learning.tsUse provider routing tools and swarm dispatch together, with learning feedback loops.
Best for:
- dynamic cost/quality balancing
- provider fallback
- adaptive behavior via memory signals
pi -e extensions/claude-flow.tsTools exposed:
cf_swarm_startcf_swarm_statuscf_swarm_stopcf_swarm_scalecf_memory_storecf_memory_searchcf_memory_statscf_agent_listcf_agent_infocf_monitor
Commands exposed:
/cf-swarm/cf-status/cf-stop/cf-agents/cf-memory/cf-strategies
A practical approach:
- Parent coordinator runs with strong planner model (e.g. Gemini 3.1 Pro).
- Subtasks route by tool/provider:
- architecture/research -> Gemini
- implementation/refactor -> Codex
- offline/private -> RuvLLM
- Reviewer/tester agents run with quality-oriented models.
- Store outcomes in RVF/learning memory to improve future routing.
pi \
-e extensions/orchestration.ts \
-e extensions/agent-team.ts \
-e extensions/learning.ts \
--model openrouter/google/gemini-3.1-proNow in one session you can:
- dispatch specialist agents
- route each subtask to different providers
- capture reward feedback via learning tools
Persistent vector data lives under .rvf/:
.rvf/
├── docs.json
├── patterns.json
└── learning/
├── episodes.json
├── skills.json
└── sona-weights.json
Used by:
ruvector.ts(RAG chunks)agent-team.ts(pattern memory)learning.ts(episodes/skills/weights)- swarm/coordination workflows that persist retrieval context
gemini_runfails gracefully if Gemini CLI missingcodex_runfails gracefully if Codex CLI missingruvllm_runrequires local server availability
Use explicit tool calls (gemini_run / codex_run / ruvllm_run) for hard routing.
Use auto_route(prompt, priority):
priority: "speed"for quick turnaroundpriority: "quality"for stronger reasoning/review
Where tool supports model, pass explicit model ID.
- Start:
just ext-mega- In session:
- Planner agent decomposes feature
gemini_runfor design/researchcodex_runfor implementationcf_monitoror swarm status tools for progressagentdb_feedbackafter task completion
pi -e extensions/claude-flow.ts -e extensions/learning.tsThen:
cf_swarm_startwithstrategy: "testing",review: true,testing: true- run checks
- persist findings via memory/learning tools
pi -e extensions/orchestration.tsUse ruvllm_run for local inference; combine with agent-team for multi-agent local workflows.
pi -e extensions/orchestration.ts -e extensions/ruvector.ts --model openrouter/google/gemini-3.1-propi -e extensions/agent-chain.ts -e extensions/learning.ts --model openrouter/google/gemini-3.1-propi -e extensions/agent-team.ts -e extensions/orchestration.ts -e extensions/learning.ts -e extensions/claude-flow.tsInstall missing CLI and ensure it is on PATH.
Check API keys are exported in current shell before launch.
Confirm .rvf/ exists and extension with memory support is loaded.
Verify model exists for your provider endpoint (OpenRouter / native provider / local backend).
- Never hardcode secrets in extension files.
- Never commit
.env. - Validate and sanitize file/path inputs when extending tools.
- Prefer least-privilege tool sets for spawned subagents.
# list recipes
just
# core sessions
just pi
just ext-agent-team
just ext-orchestration
just ext-learning
just ext-mega
# sync agents to Claude-compatible format
just sync-agents
bun scripts/sync-agents.tsIf you want, I can also generate a provider/model decision matrix (latency/cost/quality routing policy) and add it as a dedicated section in this README.