| name | seemseam-ccb-multi-agent-cli |
| description | Orchestrate multi-agent AI teams (Claude, Codex, Gemini, OpenCode, Droid) with tmux-based supervision, project memory, and inter-agent communication |
| triggers | ["set up ccb multi-agent team","configure claude codex bridge agents","create agent team with ccb","add inter-agent communication","configure ccb project layout","troubleshoot ccb agent teams","use ccb ask for agent delegation","manage ccb agent worktrees"] |
SeemSeam CCB Multi-Agent CLI
Skill by ara.so — Codex Skills collection.
CCB (Claude Codex Bridge) is a multi-agent orchestration framework that runs Claude, Codex, Gemini, OpenCode, and Droid agents in supervised tmux panes with shared project memory, inter-agent communication via /ask, and isolated worktree support for parallel work.
What CCB Does
- Unified CLI entry point: Start, attach, recover, and supervise multiple AI agent CLIs from one command
- Inter-agent communication: Agents can
/ask each other, broadcast updates, and delegate work
- Project-level teams: Define role-based teams with custom pane layouts, provider state, and worktree isolation
- Shared memory: All agents access
.ccb/ccb_memory.md for project-wide context
- Tmux supervision: Every agent runs in a named tmux pane with lifecycle management
Installation
Unix-like (Linux, macOS, WSL)
git clone https://github.com/SeemSeam/claude_codex_bridge.git
cd claude_codex_bridge
./install.sh install
Windows
git clone https://github.com/SeemSeam/claude_codex_bridge.git
cd claude_codex_bridge
powershell -ExecutionPolicy Bypass -File .\install.ps1 install
Update to Latest Release
ccb update
ccb update 6
ccb update 6.1
ccb update 6.1.21
Requirements
Core Commands
ccb
ccb -s
ccb -n
ccb kill
ccb kill -f
ccb uninstall
ccb reinstall
Configuration
CCB is configured via .ccb/ccb.config (project-local, user-authored). If missing, CCB uses built-in defaults without creating a file.
Basic Layout Syntax
The first line defines the team and pane layout:
cmd; writer:codex, reviewer:claude; qa:gemini(worktree)
Layout rules:
; splits panes left-to-right
, stacks panes top-to-bottom
cmd is the shell pane
name:provider defines an agent
(worktree) runs agent in isolated git worktree
- Without
(worktree), agent runs inplace
Common Layouts
# Two-agent team
writer:codex, reviewer:claude
# Shell + three agents
cmd; writer:codex, reviewer:claude; qa:gemini(worktree)
# Same provider, different roles
cmd; fast:codex, deep:codex
Per-Agent API Configuration
Add TOML tables after the layout line for agents needing custom API keys, URLs, or models:
cmd
[agents.builder]
key = "$OPENAI_API_KEY"
url = "https://api.openai.com/v1"
model = "gpt-4"
[agents.reviewer]
key = "$ANTHROPIC_API_KEY"
url = "https://api.anthropic.com"
model = "claude-3-5-sonnet-20241022"
[agents.research]
key = "$GEMINI_API_KEY"
model = "gemini-2.0-flash-exp"
Notes:
- Use environment variables for API keys (
$VAR_NAME)
key and url override global provider credentials
model sets agent-specific model
- Do not commit real API keys
Same Provider, Multiple API Keys
cmd
[agents.fast]
key = "$OPENAI_FAST_KEY"
model = "gpt-4o-mini"
[agents.deep]
key = "$OPENAI_DEEP_KEY"
url = "https://api.example.com/v1"
model = "gpt-4o"
Advanced Provider Environment
[agents.builder.provider_profile.env]
OPENAI_API_KEY = "$OPENAI_BUILDER_KEY"
OPENAI_BASE_URL = "https://custom.endpoint.com/v1"
Do not mix key/url shortcuts with provider_profile.env on the same agent.
Inter-Agent Communication
CCB agents can communicate using /ask or $ask syntax.
Explicit /ask Delegation
/ask reviewer review the parser changes in src/parser.ts
Explicit $ask Delegation
$ask reviewer review the parser changes in src/parser.ts
Implicit Delegation (Natural Language)
Ask reviewer to check the parser edge cases, then summarize the issues back to me.
For implicit delegation to work, add the ask skill basics to your system memory or agent prompt.
Broadcasting to All Agents
Agents can broadcast context updates to all live agents when the whole team needs the same information.
Agent Discovery
Named agents can discover each other and use named targets for delegation without copy/paste.
Project Memory
.ccb/ccb_memory.md is the shared project memory document. All agents in the team can read and write to this file for persistent context.
with open('.ccb/ccb_memory.md', 'a') as f:
f.write('\n## Feature X Implementation\n')
f.write('- Completed API endpoint `/api/v1/feature`\n')
f.write('- Added tests in `tests/test_feature.py`\n')
Worktree Isolation
Agents marked with (worktree) run in isolated git worktrees, enabling parallel work without conflicts.
Example: QA Agent in Worktree
cmd; builder:codex, reviewer:claude; qa:gemini(worktree)
The qa agent runs in a separate worktree under .ccb/worktrees/qa/, allowing it to:
- Test changes without affecting main working tree
- Run parallel test suites
- Isolate experimental work
Real-World Examples
Example 1: Full-Stack Development Team
.ccb/ccb.config:
cmd
[agents.frontend]
key = "$OPENAI_API_KEY"
model = "gpt-4o"
[agents.backend]
key = "$ANTHROPIC_API_KEY"
model = "claude-3-5-sonnet-20241022"
[agents.test]
key = "$GEMINI_API_KEY"
model = "gemini-2.0-flash-exp"
Workflow:
- Start team:
ccb
- Frontend agent builds React component
- Backend agent implements API endpoint
- Frontend asks backend:
/ask backend does the /api/users endpoint support pagination?
- Test agent runs integration tests in isolated worktree
- Test agent reports back:
/ask frontend found CORS issue in login flow
Example 2: Code Review Pipeline
.ccb/ccb.config:
cmd
[agents.writer]
key = "$OPENAI_WRITER_KEY"
model = "gpt-4o"
[agents.reviewer]
key = "$ANTHROPIC_API_KEY"
model = "claude-3-5-sonnet-20241022"
[agents.qa]
key = "$OPENAI_QA_KEY"
model = "gpt-4o-mini"
Workflow:
- Writer implements feature in
src/feature.py
- Writer asks reviewer:
/ask reviewer review src/feature.py for security issues
- Reviewer provides feedback in chat
- Writer applies fixes
- QA agent runs tests in worktree:
/ask qa run test suite for feature.py
Example 3: Research and Documentation
cmd
[agents.research]
key = "$GEMINI_API_KEY"
model = "gemini-2.0-flash-exp"
[agents.writer]
key = "$OPENAI_API_KEY"
model = "gpt-4o"
Workflow:
- Research agent explores API documentation
- Research broadcasts findings: agent updates
.ccb/ccb_memory.md
- Writer reads memory and generates documentation
- Writer asks research:
/ask research verify these GraphQL schema examples
Python Integration Examples
Programmatically Reading Project Memory
import os
def read_project_memory():
"""Read shared project memory for context."""
memory_path = os.path.join('.ccb', 'ccb_memory.md')
if os.path.exists(memory_path):
with open(memory_path, 'r') as f:
return f.read()
return ""
context = read_project_memory()
print(f"Current project context:\n{context}")
Writing to Project Memory
import os
from datetime import datetime
def append_to_memory(section, content):
"""Append structured content to project memory."""
memory_path = os.path.join('.ccb', 'ccb_memory.md')
timestamp = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
with open(memory_path, 'a') as f:
f.write(f'\n## {section} ({timestamp})\n\n')
f.write(content)
f.write('\n')
append_to_memory(
'API Endpoint Implementation',
'- Created `/api/v1/users` endpoint\n'
'- Added authentication middleware\n'
'- Tests passing in `tests/test_users.py`'
)
Inter-Agent Ask Wrapper
import subprocess
def ask_agent(agent_name, query):
"""Send query to another agent via CCB ask."""
result = subprocess.run(
['ask', agent_name, query],
capture_output=True,
text=True
)
return result.stdout
response = ask_agent('reviewer', 'review src/auth.py for security issues')
print(f"Reviewer feedback:\n{response}")
Tmux Integration
CCB runs all agents in tmux panes. Useful tmux commands:
tmux ls
tmux attach -t <session-name>
Ctrl+b <arrow-key>
Troubleshooting
Issue: ccb command not found
Solution:
which ccb
cd claude_codex_bridge
./install.sh install
echo $PATH | grep ccb
Issue: Agents not starting
Solution:
cat .ccb/ccb.config
ccb kill -f
ccb -n
which claude
which codex
Issue: /ask not working
Causes:
- Agent doesn't have
ask skill in system memory
- Agent is using built-in multi-agent behavior instead
Solution:
Add to agent system prompt or .ccb/ccb_memory.md:
## Inter-Agent Communication
Use `/ask <agent_name> <query>` to delegate tasks to other agents.
Use `$ask <agent_name> <query>` as alternative syntax.
Available agents: [list agent names from layout]
Issue: API key errors
Solution:
echo $OPENAI_API_KEY
echo $ANTHROPIC_API_KEY
cat .ccb/ccb.config
git diff .ccb/ccb.config
Issue: Worktree conflicts
Solution:
git worktree list
git worktree remove .ccb/worktrees/<agent-name>
ccb kill -f
ccb
Issue: Stale processes after kill
Solution:
ccb kill -f
ps aux | grep ccb
kill -9 <pid>
ccb
Best Practices
- Use environment variables for API keys: Never commit real keys to
.ccb/ccb.config
- Name agents by role:
writer, reviewer, tester are clearer than agent1, agent2
- Use worktrees for isolation: Mark test/experimental agents with
(worktree)
- Update shared memory: Keep
.ccb/ccb_memory.md current for team context
- Explicit delegation first: Use
/ask when you know the target; let agents decide only when workflow is clear
- Start safe: Use
ccb -s to preserve manual permission settings during development
- Clean restarts: Use
ccb -n when changing layouts or providers
Configuration Examples
Minimal Two-Agent Setup
.ccb/ccb.config:
writer:codex, reviewer:claude
Complex Multi-Provider Team
.ccb/ccb.config:
cmd
[agents.builder]
key = "$OPENAI_BUILDER_KEY"
model = "gpt-4o"
[agents.reviewer]
key = "$ANTHROPIC_REVIEWER_KEY"
model = "claude-3-5-sonnet-20241022"
[agents.qa]
key = "$GEMINI_QA_KEY"
model = "gemini-2.0-flash-exp"
[agents.researcher]
key = "$GEMINI_RESEARCH_KEY"
model = "gemini-1.5-pro"
Same Provider, Different Endpoints
.ccb/ccb.config:
cmd
[agents.prod]
key = "$OPENAI_PROD_KEY"
url = "https://api.openai.com/v1"
model = "gpt-4o"
[agents.staging]
key = "$OPENAI_STAGING_KEY"
url = "https://staging.example.com/v1"
model = "gpt-4o-mini"
Additional Resources
CCB is agent-orchestration infrastructure. It does not bundle agent CLIs—install them separately and configure their API keys via environment variables.