Prerequisites
Before installing Shazam, ensure you have the following tools and accounts set up.
Shazam is built on Elixir/OTP. Erlang/OTP, SQLite (via Exqlite), and standard build tools come bundled with the Elixir installation. Install via asdf, mise, or your system package manager.
Install guide โShazam uses Claude Code to run AI agents. Install and configure with your Anthropic API key.
Install guide โInstallation & Setup
Get Shazam running in under 5 minutes with these steps.
git clone https://github.com/raphaelbarbosaqwerty/shazam-cli.git && cd shazam-climix deps.get./build.shBuilds the Elixir escript and compiles the Rust TUI binary. Installs both to ~/bin/.
shazam initCreates a shazam.yaml with the interactive wizard โ choose your company name, mission, and team template.
shazam shellLaunches the Rust-powered TUI with real-time events, overlays, and ghost text autocomplete. This is the primary way to use Shazam.
Interactive Shell
The interactive shell is the primary way to use Shazam. It provides a Rust-powered TUI with real-time events, overlays, and ghost text autocomplete.
Core Commands
/startStart the orchestrator and begin processing tasks/stopStop the orchestrator and all running agents/pausePause the orchestrator โ agents finish current work but pick up no new tasks/resumeResume a paused orchestrator/statusShow system status including agents, tasks, and RalphLoop stateTask Management
/tasksOpen the tasks overlay โ browse, filter, and act on all tasks/task <title>Create a new task with the given title/approve [id]Approve a pending subtask in the approval queue/aaApprove all pending subtasks at once/reject <id>Reject a pending subtask with an optional reasonTask Actions (via /tasks overlay โ Enter)
/pause-task <id>Pause a running task/resume-task <id>Resume a paused task/kill-task <id>Kill a running task immediately/retry-task <id>Retry a failed or killed task/delete-task <id>Delete a task from the board permanentlyAgent Management
/agentsList all agents with their roles, status, and budget/agent add <name>Add a new agent interactively/agent edit <name>Edit an existing agent configuration/agent remove <name>Remove an agent from the company/agent presetsBrowse available agent preset templatesTeam Templates
/team create <domain>Create a new team from a domain template/team templatesList all available team templatesViews & Navigation
/dashboardOpen the live dashboard with agent status and metrics/configView current shazam.yaml configuration/orgDisplay the agent hierarchy tree/helpShow all available commands and shortcuts/clearClear the event log in the shellCommunication
/msg <agent> <message>Send a direct message or instruction to a specific agent/auto-approve [on|off]Toggle automatic approval of PM-created subtasksExit
/quitExit the interactive shell/exitExit the interactive shell (alias for /quit)Keyboard Shortcuts
CLI Commands
Shazam provides Mix tasks for managing your AI agent orchestrator. All commands follow the mix shazam.<command> pattern.
shazam init
Create a new shazam.yaml configuration with an interactive wizard. Prompts for company name, mission, and team template.
mix shazam.initRun the interactive setup wizard
mix shazam.initshazam start
Boot the orchestrator server and create the company from shazam.yaml. Starts the OTP supervision tree, TaskBoard, SessionPool, and RalphLoops.
mix shazam.start [options]-p, --portServer port for the HTTP API (default: 4040)-f, --filePath to YAML config file (default: .shazam/shazam.yaml)--no-resumeSkip automatic RalphLoop resume on startup Start with default settings
mix shazam.startStart on a custom port with a specific config
mix shazam.start -p 5000 -f my-team.yamlStart without resuming previous tasks
mix shazam.start --port 4040 --no-resumeshazam stop
Stop a running company by sending an HTTP request to the running server instance.
mix shazam.stop [options]-c, --companyName of the company to stop (default: auto-detected)-p, --portServer port to connect to (default: 4040)--allStop all running companies at once Stop the auto-detected company
mix shazam.stopStop a specific company by name
mix shazam.stop -c MyCompanyStop all running companies
mix shazam.stop --allshazam status
Display current system status including company mission, agent table (name, role, status, domain, budget), RalphLoop status, task summary, and token usage.
mix shazam.status [options]-c, --companyShow status for a specific company only (default: all companies)Show status for all companies
mix shazam.statusShow status for a specific company
mix shazam.status -c MyTeamshazam task
Create a new task in a running company. The task is added to the TaskBoard and automatically assigned based on role and availability.
mix shazam.task <title> [options]-t, --toAssign task to a specific agent by name (default: auto-assigned)-c, --companyTarget company name (default: auto-detected)-d, --descriptionAdditional task description or details Create a simple task
mix shazam.task "Implement user authentication"Assign to a specific agent in a company
mix shazam.task "Fix login bug" --to senior_dev -c MyTeamCreate a task with a detailed description
mix shazam.task "Write tests" -t qa -d "Full coverage required"shazam org
Display the agent hierarchy tree for a company, showing the chain of command from top-level agents down.
mix shazam.org [options]-c, --companyCompany name to display (default: auto-detected)Show the org chart
mix shazam.orgShow org chart for a specific company
mix shazam.org -c MyTeamshazam logs
Stream live agent output and events in real-time. Supports filtering by agent name, company, or domain.
mix shazam.logs [agent_filter] [options]-c, --companyFilter logs by company name -d, --domainFilter logs by agent domain Stream all agent logs
mix shazam.logsStream logs for a specific agent
mix shazam.logs senior_devFilter by domain and company
mix shazam.logs -d backend -c MyCompanyshazam agent.add
Dynamically add a new agent to a running company without restarting. Supports presets for quick setup.
mix shazam.agent.add <agent_name> [options]-n, --nameAgent name (alternative to positional argument) -r, --roleAgent role or title -s, --supervisorName of the supervising agent -d, --domainDomain or module ownership area -b, --budgetToken budget for the agent (default: 100000)-m, --modelAI model to use (e.g., claude-opus-4-1) -c, --companyTarget company name (default: auto-detected)--presetUse a preset template (e.g., senior_dev, qa, pm) Add a designer agent with a supervisor
mix shazam.agent.add designer --role "UI Designer" --supervisor pm --budget 80000Add a QA engineer reporting to PM
mix shazam.agent.add qa_engineer -r "Senior QA" -s pmAdd an agent from a preset template
mix shazam.agent.add researcher --preset market_analystshazam apply
Reconcile the running state with shazam.yaml. Creates or updates the company to match the current configuration file.
mix shazam.apply [options]-f, --filePath to YAML config file (default: .shazam/shazam.yaml)Apply the default config file
mix shazam.applyApply a specific config file
mix shazam.apply -f custom-team.yamlshazam dashboard
Launch a live TUI dashboard with agent status, budget bars, task counts, RalphLoop status, and event log. Press q to quit, r to refresh.
mix shazam.dashboard [options]-c, --companyCompany to display in the dashboard (default: auto-detected)Launch the dashboard
mix shazam.dashboardLaunch dashboard for a specific company
mix shazam.dashboard -c MyTeamConfiguration
Shazam is configured via a shazam.yaml file at the root of your project.
company:
name: "my-project"
mission: "Build great software"
agents:
- name: pm
role: "Project Manager"
model: "claude-haiku-4-5-20251001"
budget: 100000
supervisor: null
tools: [Read, Edit, Write, Bash, Grep, Glob]
domain: "management"
- name: senior_dev
role: "Senior Developer"
model: "claude-sonnet-4-20250514"
budget: 150000
supervisor: pm
tools: [Read, Edit, Write, Bash, Grep, Glob]
domain: "backend"
modules: ["lib/core", "lib/api"]
- name: qa
role: "QA Engineer"
model: "claude-sonnet-4-20250514"
budget: 100000
supervisor: pm
tools: [Read, Bash, Grep, Glob]
domain: "testing"
config:
auto_approve: false
auto_retry: true
max_concurrent: 4
max_retries: 2
poll_interval: 5000
module_lock: true
peer_reassign: trueConfiguration Fields
company.namecompany.missionagents[].nameagents[].roleagents[].modelagents[].budgetagents[].supervisoragents[].toolsagents[].domainagents[].skillsagents[].modulesagents[].system_promptconfig.auto_approveconfig.auto_retryconfig.max_concurrentconfig.max_retriesconfig.poll_intervalconfig.module_lockconfig.peer_reassignAgent Roles & Presets
Shazam ships with 10 pre-configured agent presets. Each preset defines default tools, model, and behavior.
pmProject Manager โ breaks down tasks, creates subtasks, coordinates team
senior_devSenior Developer โ implements features, handles complex code changes
junior_devJunior Developer โ handles simpler tasks, learns from senior feedback
qaQuality Assurance โ writes tests, validates implementations, finds bugs
designerDesigner โ UI/UX work, CSS, component styling, visual consistency
researcherResearcher โ investigates solutions, explores APIs, gathers information
devopsDevOps โ CI/CD pipelines, deployment, infrastructure configuration
writerTechnical Writer โ documentation, READMEs, API docs, guides
market_analystMarket Analyst โ market research, competitive analysis, business insights
competitor_analystCompetitor Analyst โ tracks competitors, identifies opportunities
REST API
Shazam exposes a REST API via Bandit/Plug for task management and monitoring.
/api/statusGet overall orchestrator status including all companies and agents.
/api/companiesList all registered companies with their agent counts and task stats.
/api/companies/:id/tasksList all tasks for a specific company with filtering support.
/api/tasksSubmit a new task to the orchestrator. Accepts JSON body with title, description, role, and priority.
/api/tasks/:idGet detailed information about a specific task including status, assignee, and results.
/api/tasks/:idCancel a pending or in-progress task.
/api/approval/:id/approveApprove a pending subtask in the human-in-the-loop queue.
/api/approval/:id/rejectReject a pending subtask with an optional reason.
/api/metricsGet agent performance metrics including task counts, durations, and success rates.
/wsWebSocket endpoint for real-time event streaming (task updates, agent status, logs).
Architecture
Shazam is built on Elixir/OTP, leveraging GenServer, ETS, and DynamicSupervisor for fault-tolerant agent management.
Core Modules
ApplicationOTP supervision tree, boots all subsystems on startupOrchestratorParallel and pipeline agent execution via Claude Code SDKCompanyGenServer managing agent hierarchy, tasks, and company lifecycleRalphLoopPer-company polling loop for task picking and executionTaskBoardETS-backed task CRUD with atomic checkout (pending โ in_progress โ completed)TaskExecutorBuilds prompts, manages sessions, executes tasks via Claude CodeTaskSchedulerTask selection, peer reassignment, and module locking logicSessionPoolReusable Claude session management with automatic recyclingHierarchyOrg chart management with cycle detection via Kahn's algorithmSkillMemoryStructured knowledge graph stored in .shazam/memories/StorePersistence abstraction layer (SQLite primary, JSON fallback)EventBusPub/sub event system for real-time WebSocket streamingExecution Flow
- Boot โ OTP supervision tree starts TaskBoard, SessionPool, and per-company RalphLoops
- Task Submission โ Tasks are added via CLI or API and stored in ETS-backed TaskBoard
- Scheduling โ TaskScheduler selects tasks based on agent role, availability, and module locks
- Execution โ TaskExecutor builds prompts and runs them via Claude Code sessions from the pool
- Delegation โ PMs may output subtask JSON blocks, automatically parsed and assigned
- Completion โ Results propagate via EventBus, metrics are recorded, sessions recycled
Environment Variables
SHAZAM_PORTTroubleshooting
Check that RalphLoop is running and agents match the task domain.
# Check system status
mix shazam.status
# Verify the agent roles and domains match your task
# Re-apply config if you changed shazam.yaml
mix shazam.applyAnother agent is already working on the same code module. Shazam prevents concurrent edits.
# Check which agent holds the lock
mix shazam.status
# Wait for the current task to complete, or disable module locking:
# In shazam.yaml: config.module_lock: falseToo many concurrent requests to the Claude API.
# Reduce concurrent agents in shazam.yaml:
# config.max_concurrent: 2SQLite3 library not found. Shazam will fall back to JSON storage.
# Install SQLite3 (macOS)
brew install sqlite3
# Install SQLite3 (Ubuntu/Debian)
sudo apt-get install libsqlite3-dev
# Or just let Shazam use JSON fallback โ it works automaticallyAnother process is using the default API port.
# Use a different port
mix shazam.start --port 5050
# Or set via environment variable
export SHAZAM_PORT=5050