The thinking behind this tool.
Run multiple Claude Codes via SSH. No orchestration framework. No agent library. Just terminals you coordinate from one place.
Credentials attach to skills, not floating in environment. When a skill runs, its secrets inject. Clear lineage—you know exactly what credentials a skill needs before you run it.
Everyone deploys differently. Everyone commits differently. Define common tasks in SKILL.md, reuse everywhere. Global skills or per-project—you decide.
Skills are defined in markdown. Readable, versionable, portable.
# Deploy
## Description
Build and deploy to production.
## Prompt
Run the test suite. If all tests pass, build the project
and deploy to the production server. Report the URL when done.
## Secrets
- DEPLOY_KEY: SSH key for production server
- SLACK_WEBHOOK: For deployment notifications
Sections:
# Name — Skill name (required)
## Description — What this skill does
## Prompt — The prompt sent to Claude Code
## Secrets — Credentials needed, as - NAME: description
Skills can be global (available everywhere) or per-folder (project-specific).
Per-folder skills override global skills with the same name.
No framework. Tools like Claude Colony and claude-flow add useful features, but also complexity. This tool has one opinion: run Claude Code in terminals and let you coordinate them. Use tmux, worktrees, containers—whatever you prefer.
Secrets on-demand. When you run a skill that needs credentials, you're prompted. Secrets don't live in config files. Clear when they're used, never persisted.
Status visible. Classic HIG principle: never hide state. If an agent is running, you see it. If a skill needs secrets, you know before it runs.
User trust. You categorize your own agents. You write your own skills. The tool doesn't impose taxonomy or opinionated workflows.
The orchestrator connects to machines running Claude Code over SSH.
Network. Two supported options:
Tailscale is the answer for most setups. Install on each machine, they find each other automatically. Use the Tailscale IP or MagicDNS hostname (like macbook.tail1234.ts.net) when adding agents.
SSH setup. Each machine needs:
# On each target machine
1. SSH server running (sshd)
2. Your public key in ~/.ssh/authorized_keys
3. Claude Code installed (npm i -g @anthropic-ai/claude-code)
Session management. When you add an agent, the orchestrator:
# What happens under the hood
ssh user@host # Connect
cd ~/project && claude # Start Claude Code
# Session stays open, input/output streamed
Each pane is one SSH connection, one Claude Code process. Close the pane, connection ends. Simple.
Session persistence. For long-running agents, use tmux or screen on the remote:
# On remote machine
tmux new -s agent1
claude
# Later, reconnect
tmux attach -t agent1
The orchestrator can attach to existing tmux sessions instead of starting fresh Claude Code instances.
API keys. Claude Code on each machine needs its own ANTHROPIC_API_KEY. Set it in the remote machine's environment, not passed through the orchestrator. Your API key never leaves the machine it runs on.
The UI is a demo—it simulates Claude Code responses in the browser. To connect to real machines, run the WebSocket server.
Architecture:
# Browser can't SSH directly (security)
# So we bridge through a small server
Browser ←WebSocket→ server.js ←SSH→ Remote
↑
runs on your
laptop/pi/server
Setup:
# Clone and run the server
cd projects/agent-orchestrator-demo
npm install ws ssh2
node server.js
# Then tap DEMO badge in UI to switch to SSH
The server handles:
• connect — SSH to remote, start claude CLI
• input — Send your text to Claude Code
• disconnect — Close SSH session
See server.js for full implementation. Uses ssh2 npm package.
# Commit
## Prompt
Review git diff. Stage all changes. Write a descriptive
commit message based on what changed. Do not push.
# Review
## Prompt
Review staged changes. Look for bugs, security issues,
code style problems. Be specific about line numbers.
# Test
## Prompt
Run the test suite. If any fail, analyze failures and
suggest fixes. If all pass, report success.