AI Agent Orchestrator — run a team of AI agents from your desktop with voice control.
git clone https://github.com/Dag7/jam.git
cd jam
./scripts/setup.sh
yarn devThe setup script handles everything: Node version, Yarn 4 via Corepack, dependencies, and verification. Just clone and run.
Requires: Node.js >= 22 (the script will install it via nvm/fnm if needed)
Pre-built binaries — no setup needed:
| Platform | Download |
|---|---|
| macOS | Jam.dmg |
| Windows | Jam-Setup.exe |
| Linux | Jam.AppImage |
macOS builds are signed and notarized with Apple Developer ID — no Gatekeeper warnings.
Jam lets you create, manage, and talk to a team of AI coding agents running on your machine. Each agent gets its own terminal, personality, voice, and workspace.
- Multi-agent orchestration — Run multiple AI agents simultaneously, each in their own PTY
- Voice control — Talk to your agents hands-free with STT/TTS (Whisper + ElevenLabs/OpenAI)
- Agent runtimes — Supports Claude Code, OpenCode, Codex CLI, and Cursor as backends
- Living personalities — Each agent has a SOUL.md that evolves over time
- Conversation memory — Agents remember past conversations across sessions
- Dynamic skills — Agents auto-generate reusable skill files from learned patterns
- Chat + Stage views — Unified chat or grid view showing all agents at once
- Per-agent voices — Assign unique TTS voices to each agent
- Command routing — Voice commands are routed to the right agent by name
┌─────────────────────────────────────────────┐
│ Desktop App │
│ (Electron + React + Zustand) │
├─────────────────────────────────────────────┤
│ Orchestrator │
│ ├── AgentManager (lifecycle, PTY, execute) │
│ ├── VoiceService (STT/TTS pipeline) │
│ ├── EventBus (cross-cutting events) │
│ └── MemoryStore (file-based persistence) │
├─────────────────────────────────────────────┤
│ Agent Runtimes │
│ ├── Claude Code (claude CLI) │
│ ├── OpenCode (opencode CLI) │
│ ├── Codex CLI (codex CLI) │
│ └── Cursor (cursor-agent CLI) │
├─────────────────────────────────────────────┤
│ Voice Providers │
│ ├── STT: Whisper / ElevenLabs │
│ └── TTS: OpenAI / ElevenLabs │
└─────────────────────────────────────────────┘
- At least one agent runtime CLI installed: Claude Code, OpenCode, Codex CLI, or Cursor
- API keys for your preferred voice providers (optional, for voice features):
- OpenAI API key (for Whisper STT and/or OpenAI TTS)
- ElevenLabs API key (for ElevenLabs STT and/or TTS)
- Launch Jam
- Open Settings (gear icon in sidebar)
- Add your API keys for voice providers
- Create an agent — pick a name, runtime, model, and voice
Each agent gets a directory at ~/.jam/agents/<name>/:
~/.jam/agents/sue/
├── SOUL.md # Living personality file
├── conversations/ # Daily JSONL conversation logs
│ └── 2026-02-18.jsonl
└── skills/ # Agent-created skill files
└── react-patterns.md
- Node.js >= 22 (Vite 7 requires 22.12+)
- Yarn 4 (managed automatically via Corepack)
| Command | Description |
|---|---|
yarn dev |
Start desktop app in dev mode |
yarn build |
Build all packages |
yarn typecheck |
Type check all packages |
packages/
core/ # Domain models, port interfaces, events
eventbus/ # In-process EventBus
agent-runtime/ # PTY management, agent lifecycle, runtimes
voice/ # STT/TTS providers, command parser
memory/ # File-based agent memory
apps/
desktop/ # Electron + React desktop app
- SOLID — depend on abstractions (port interfaces in
@jam/core) - Strategy pattern — pluggable runtimes and voice providers
- Observer pattern — EventBus for decoupled event propagation
- Container/Component — React containers wire to Zustand, components stay pure
