by junhoyeo
🎸 A project-level orchestrator for AI coding agents — Go & Charm stack implementation of OpenAI's Symphony
# Add to your Claude Code skills
git clone https://github.com/junhoyeo/contrabassLast scanned: 5/30/2026
{
"issues": [
{
"type": "npm-audit",
"message": "@astrojs/check: Vulnerability found",
"severity": "medium"
},
{
"type": "npm-audit",
"message": "@astrojs/language-server: Vulnerability found",
"severity": "medium"
},
{
"type": "npm-audit",
"message": "astro: Astro's `X-Forwarded-Host` is reflected without validation",
"severity": "high"
},
{
"type": "npm-audit",
"message": "esbuild: esbuild enables any website to send any requests to the development server and read the response",
"severity": "medium"
},
{
"type": "npm-audit",
"message": "vite: Vite Vulnerable to Path Traversal in Optimized Deps `.map` Handling",
"severity": "medium"
},
{
"type": "npm-audit",
"message": "volar-service-yaml: Vulnerability found",
"severity": "medium"
},
{
"type": "npm-audit",
"message": "yaml: yaml is vulnerable to Stack Overflow via deeply nested YAML collections",
"severity": "medium"
},
{
"type": "npm-audit",
"message": "yaml-language-server: Vulnerability found",
"severity": "medium"
}
],
"status": "WARNING",
"scannedAt": "2026-05-30T15:58:43.180Z",
"npmAuditRan": true,
"pipAuditRan": true
}contrabass is an open-source ai agents skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by junhoyeo. 🎸 A project-level orchestrator for AI coding agents — Go & Charm stack implementation of OpenAI's Symphony. It has 192 GitHub stars.
contrabass returned warnings in SkillsLLM's automated security scan. It has no critical vulnerabilities, but review the flagged issues in the Security Report section before adding it to your workflow.
Clone the repository with "git clone https://github.com/junhoyeo/contrabass" and add it to your Claude Code skills directory (see the Installation section above).
contrabass is primarily written in Go. It is open-source under junhoyeo on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other AI Agents skills you can browse and compare side by side. Open the AI Agents category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh contrabass against similar tools.
No comments yet. Be the first to share your thoughts!
Requires a passing catalog security scan. Resolve the flagged issues and resubmit to enable featuring.
A project-level orchestrator for AI coding agents Go + Charm stack reimplementation of OpenAI's Symphony (openai/symphony) — manage work, not agents

Contrabass is a terminal-first orchestrator for issue-driven agent runs, with an optional local web dashboard for live visibility.
Today Contrabass ships with:
WORKFLOW.md parser with YAML front matter, Liquid prompt rendering, and $ENV_VAR interpolationworkspaces/<issue-id> with non-git fallback for repositories without gitgit worktree)codex app-serveropencode serveoh-my-opencodeomx (oh-my-codex team runtime)omc (oh-my-claudecode team runtime)LINEAR_API_KEYGITHUB_TOKENFrom a fresh clone, run bun install once before using the JS/landing build and test commands.
brew install junhoyeo/contrabass/contrabass
Pre-built binaries for macOS and Linux (amd64/arm64) are available on the Releases page.
git clone https://github.com/junhoyeo/contrabass.git
cd contrabass
bun install
make build
make build first builds packages/dashboard/dist/ and then embeds it into the Go binary.
Note:
go install github.com/junhoyeo/contrabass/cmd/contrabass@latestworks for the CLI and TUI, but the embedded web dashboard (--port) will be empty becausego installdoes not run the JS build step.
LINEAR_API_KEY=your-linear-token \
./contrabass --config testdata/workflow.demo.md
LINEAR_API_KEY=your-linear-token \
./contrabass --config testdata/workflow.demo.md --port 8080
Then open http://localhost:8080.
LINEAR_API_KEY=your-linear-token \
./contrabass --config testdata/workflow.demo.md --no-tui
--config string path to WORKFLOW.md file (required)
--dry-run exit after first poll cycle
--log-file string log output path (default "contrabass.log")
--log-level string log level (debug/info/warn/error) (default "info")
--no-tui headless mode — skip TUI, log events to stdout
--port int web dashboard port (0 = disabled)
contrabass team run --config workflow.md [flags]
--worker-mode string override worker mode (goroutine|tmux, default from config)
BlockedBy dependencies (BlockedBy gating).workspaces/<issue-id> (falls back to plain directory when git is unavailable).WORKFLOW.md using issue data.| Feature | Description |
|---|---|
| BlockedBy gating | Issues with unresolved blockers are deferred from dispatch |
| Orphan claim recovery | Claimed-but-not-running issues are reclaimed on restart |
| Branch advance verification | Verifies agents made commits before marking success |
| Agent stage classification | Monotonic 5-stage progression based on diff velocity and token patterns |
| Completion ETA | Confidence-banded estimates (requires 3+ min elapsed, stage ≥ 3 for high confidence) |
| Liveness snapshots | Per-agent heartbeat age, activity timestamps, diff stats, iteration progress |
| Stall detection | Flags runs lacking recent events beyond stall_timeout_ms |
| Deterministic backoff | Exponential growth with FNV-hash jitter (reproducible across restarts) |
| Graceful shutdown | Drains running agents before process exit |
WORKFLOW.md is watched with fsnotify; on parse errors, Contrabass keeps the last known good config.JSONL) to codex app-server rather than Content-Length framed messages. See docs/codex-protocol.md.-32001 server overload errors with exponential backoff retry (up to 5 attempts) and detects stalled streams via configurable read timeouts.workspace, hooks, and some codex settings are parsed, but the current runtime mainly uses tracker selection, timeouts, retry settings, binary paths, and prompt/template fields.Teams support two worker modes, configured via team.worker_mode in the workflow file or the --worker-mode CLI flag:
| Mode | Description | Default |
|---|---|---|
tmux |
Each worker runs in a separate tmux pane with process isolation, cross-process IPC via JSONL events, and file-based heartbeats | Yes |
goroutine |
Workers run as goroutines within the contrabass process — lighter weight, no tmux dependency |
tmux mode (default) provides:
flock(2) for safe concurrent accessgoroutine mode runs all workers in-process using Go's errgroup and sync.Mutex. It requires no external dependencies but shares the process address space.
Team state is persisted as JSON files under .contrabass/state/team/{teamName}/.
Contrabass reads a Markdown workflow file with YAML front matter followed by the prompt template body.
---
max_concurrency: 3
poll_interval_ms: 2000
max_retry_backoff_ms: 240000
model: openai/gpt-5-codex
project_url: https://linear.app/acme/project/example
agent_timeout_ms: 900000
stall_timeout_ms: 60000
tracker:
type: linear
linear:
issue_details:
enabled: true
sync_comments:
enabled: false
mode: reply_thread
agent:
type: codex
codex:
binary_path: codex app-server
---
# Workflow Prompt
Issue title: {{ issue.title }}
Issue description: {{ issue.description }}
Issue URL: {{ issue.url }}
Produce code and tests that satisfy the issue requirements.
When tracker.type: linear is used, the dashboard can load richer issue
metadata through the Contrabass backend without exposing Linear credentials to
browser code.
linear:
issue_details:
enabled: true
sync_comments:
enabled: false
mode: reply_thread # reply_thread by default; top_level is the fallback-safe mode
linear.issue_details.enabled controls backend issue detail reads used by
the issue detail sheet. Candidate polling remains lean.linear.sync_comments.enabled is opt-in and defaults to `fals