A community-driven registry for Claude, Cursor, Windsurf, Cline & more. Not affiliated with Anthropic.
Are you the author? Sign in to claim
Samurai-inspired multi-agent system for Claude Code. Orchestrate parallel AI tasks via tmux with shogun → karo → ashigar
Command your AI army like a feudal warlord.
Run 10 AI coding agents in parallel — Claude Code, OpenAI Codex, GitHub Copilot, Kimi Code, OpenCode, Cursor, Antigravity — orchestrated through a samurai-inspired hierarchy with zero coordination overhead.
Talk Coding, not Vibe Coding. Speak to your phone, AI executes.
One Karo (manager) coordinating 7 Ashigaru (workers) + 1 Gunshi (strategist) — real session, no mock data.
Requirements: tmux, bash 4+, at least one of: Claude Code / Codex / Copilot / Kimi / OpenCode / Antigravity
git clone https://github.com/yohey-w/multi-agent-shogun
cd multi-agent-shogun
bash first_setup.sh # one-time setup: config, dependencies, MCP
source ~/.bashrc # reload PATH
claude --dangerously-skip-permissions # first run only: OAuth + accept Bypass Permissions → /exit
bash shutsujin_departure.sh # launch all agents
For full install steps (incl. Windows) and the first-30-minutes walkthrough, see 🚀 Quick Start and the basic usage section below.
Type a command in the Shogun pane:
"Build a REST API for user authentication"
Shogun delegates → Karo breaks it down → 7 Ashigaru execute in parallel. You watch the dashboard. That's it.
Want to go deeper? The rest of this README covers architecture, configuration, memory design, and multi-CLI setup.
multi-agent-shogun is a system that runs multiple AI coding CLI instances simultaneously, orchestrating them like a feudal Japanese army. Supports Claude Code, OpenAI Codex, GitHub Copilot, Kimi Code, OpenCode, Cursor, and Antigravity.
Why use it?
You (上様 / The Lord)
│
▼ Give orders
┌─────────────┐
│ SHOGUN │ ← Receives your command, delegates instantly
└──────┬──────┘
│ YAML + tmux
┌──────▼──────┐
│ KARO │ ← Distributes tasks to workers
└──────┬──────┘
│
┌─┬─┬─┬─┴─┬─┬─┬─┬────────┐
│1│2│3│4│5│6│7│ GUNSHI │ ← 7 workers + 1 strategist
└─┴─┴─┴─┴─┴─┴─┴────────┘
ASHIGARU 軍師
Most multi-agent frameworks burn API tokens on coordination. Shogun doesn't.
Claude Code Task tool | Claude Code Agent Teams | LangGraph | CrewAI | multi-agent-shogun | |
|---|---|---|---|---|---|
| Architecture | Subagents inside one process | Team lead + teammates (JSON mailbox) | Graph-based state machine | Role-based agents | Feudal hierarchy via tmux |
| Parallelism | Sequential (one at a time) | Multiple independent sessions | Parallel nodes (v0.2+) | Limited | 8 independent agents |
| Coordination cost | API calls per Task | Token-heavy (each teammate = separate context) | API + infra (Postgres/Redis) | API + CrewAI platform | Zero (YAML + tmux) |
| Multi-CLI | Claude Code only | Claude Code only | Any LLM API | Any LLM API | 7 CLIs (Claude/Codex/Copilot/Kimi/OpenCode/Cursor/Antigravity) |
| Observability | Claude logs only | tmux split-panes or in-process | LangSmith integration | OpenTelemetry | Live tmux panes + dashboard |
| Skill discovery | None | None | None | None | Bottom-up auto-proposal |
| Setup | Built into Claude Code | Built-in (experimental) | Heavy (infra required) | pip install | Shell scripts |
Zero coordination overhead — Agents talk through YAML files on disk. The only API calls are for actual work, not orchestration. Run 8 agents and pay only for 8 agents' work.
Full transparency — Every agent runs in a visible tmux pane. Every instruction, report, and decision is a plain YAML file you can read, diff, and version-control. No black boxes.
Battle-tested hierarchy — The Shogun → Karo → Ashigaru chain of command prevents conflicts by design: clear ownership, dedicated files per agent, event-driven communication, no polling.
Most AI coding tools charge per token. Running 8 Opus-grade agents through the API costs $100+/hour. CLI subscriptions flip this:
| API (Per-Token) | CLI (Flat-Rate) | |
|---|---|---|
| 8 agents × Opus | ~$100+/hour | ~$200/month |
| Cost predictability | Unpredictable spikes | Fixed monthly bill |
| Usage anxiety | Every token counts | Unlimited |
| Experimentation budget | Constrained | Deploy freely |
"Use AI recklessly" — With flat-rate CLI subscriptions, deploy 8 agents without hesitation. The cost is the same whether they work 1 hour or 24 hours. No more choosing between "good enough" and "thorough" — just run more agents.
Shogun isn't locked to one vendor. The system supports 7 CLI tools, each with unique strengths:
| CLI | Key Strength | Default Model |
|---|---|---|
| Claude Code | Battle-tested tmux integration, Memory MCP, dedicated file tools (Read/Write/Edit/Glob/Grep) | Claude Sonnet 4.6 |
| OpenAI Codex | Sandbox execution, JSONL structured output, codex exec headless mode, per-model --model flag | gpt-5.3-codex / gpt-5.3-codex-spark |
| GitHub Copilot | Built-in GitHub MCP, 4 specialized agents (Explore/Task/Plan/Code-review), /delegate to coding agent | Claude Sonnet 4.6 |
| Kimi Code | Free tier available, strong multilingual support | Kimi k2 |
| OpenCode | Shared AGENTS.md instructions, agent-specific definitions via --agent, /new context reset, restart-only model changes, deterministic interactive TUI launch, provider-qualified --model routing | provider/model |
| Cursor | Auto-loads CLAUDE.md/AGENTS.md/.cursor/rules/, built-in web search, inbox-write skill via .cursor/skills/, /model live switching, --yolo auto-run | Varies |
| Antigravity CLI | Google Antigravity CLI integration via agy, host-managed auth, YOLO-style launch, gemini/agy legacy aliases | host default / last-used |
OpenCode sessions load the agent-specific .opencode/agents/<agent_id>.md definition via --agent and keep automation resets on /new; model changes require a relaunch. Automation uses the repository-provided config/opencode-tui.json via OPENCODE_TUI_CONFIG, which disables app_exit and pins session_interrupt/input_clear to known bindings. Role boundaries are embedded in the generated agent frontmatter: Shogun can read queue/reports/* for oversight but cannot write them, Karo is limited to coordination files plus report aggregation, Ashigaru only touch their own task/report pair, and Gunshi reads ashigaru reports but only writes gunshi_report.yaml.
Antigravity sessions launch with agy --dangerously-skip-permissions. Shogun treats type: antigravity, type: agy, and legacy type: gemini as Antigravity. Authentication and default model selection stay in the host user's Antigravity CLI setup; settings.yaml may optionally pass a concrete model, but auto uses the host default or last-used model.
A unified instruction build system generates CLI-specific instruction files from shared templates:
instructions/
├── common/ # Shared rules (all CLIs)
├── cli_specific/ # CLI-specific tool descriptions
│ ├── claude_tools.md # Claude Code tools & features
│ ├── copilot_tools.md # GitHub Copilot CLI tools & features
│ ├── opencode_tools.md # OpenCode tools, agent frontmatter, and permission model
│ └── cursor_tools.md # Cursor Agent tools, skills, and session rules
└── roles/ # Role definitions (shogun, karo, ashigaru)
↓ build
CLAUDE.md / AGENTS.md / .github/copilot-instructions.md / .opencode/agents/*.md / .cursor/rules/*.md
← Generated per CLI
One source of truth, zero sync drift. Change a rule once, all CLIs get it.
This is the feature no other framework has.
As Ashigaru execute tasks, they automatically identify reusable patterns and propose them as skill candidates. The Karo aggregates these proposals in dashboard.md, and you — the Lord — decide what gets promoted to a permanent skill.
Ashigaru finishes a task
↓
Notices: "I've done this pattern 3 times across different projects"
↓
Reports in YAML: skill_candidate:
found: true
name: "api-endpoint-scaffold"
reason: "Same REST scaffold pattern used in 3 projects"
↓
Appears in dashboard.md → You approve → Skill created in .claude/commands/
↓
Any agent can now invoke /api-endpoint-scaffold
Skills grow organically from real work — not from a predefined template library. Your skill set becomes a reflection of your workflow.
|
Step 1 |
📥 Download the repository Download ZIP and extract to Or use git: |
|
Step 2 |
🖱️ Run Right-click → "Run as Administrator" (if WSL2 is not installed). Sets up WSL2 + Ubuntu automatically. |
|
Step 3 |
🐧 Open Ubuntu and run (first time only) hljs language-bash |
|
Step 4 |
✅ Deploy! hljs language-bash |
After first_setup.sh, run these commands once to authenticate:
# 1. Apply PATH changes
source ~/.bashrc
# 2. OAuth login + Bypass Permissions approval (one command)
claude --dangerously-skip-permissions
# → Browser opens → Log in with Anthropic account → Return to CLI
# → "Bypass Permissions" prompt appears → Select "Yes, I accept" (↓ to option 2, Enter)
# → Type /exit to quit
This saves credentials to ~/.claude/ — you won't need to do it again.
Open an Ubuntu terminal (WSL) and run:
cd /mnt/c/tools/multi-agent-shogun
./shutsujin_departure.sh
Monitor and command 10 AI agents from your phone with the dedicated Android companion app.
| Feature | Description |
|---|---|
| Shogun Terminal | SSH terminal + voice input + special key bar (C-c, C-b, Tab, etc.) |
| Agents Grid | 9-pane simultaneous monitoring. Tap to expand fullscreen + send commands |
| Dashboard | Renders dashboard.md with full table text selection/copy |
| Rate Limit | Tap the FAB on the Agents tab to check Claude Max 5h/7d usage with progress bars |
| Voice Input | Japanese continuous recognition via Google Speech API — higher accuracy than phone keyboard voice |
| Screenshot Share | Share images via Android share menu → SFTP transfer to server |
Note: Android only for now. No iOS version — the developer doesn't own an iPhone. If there's demand, please open an Issue. PRs welcome!
Prerequisites:
sudo service ssh start)Steps:
Install APK
android/release/multi-agent-shogun.apk on your phone (open the file on GitHub → "Download raw file")Configure SSH (Settings tab)
| Field | Example | Description |
|---|---|---|
| SSH Host | 100.xxx.xxx.xxx | Server IP (e.g., Tailscale IP) |
| SSH Port | 22 | Usually 22 |
| SSH User | your_username | SSH login username |
| SSH Key Path | /data/data/.../id_ed25519 | Private key path on phone (*1) |
| SSH Password | **** | Use if no key available |
| Project Path | /mnt/c/tools/multi-agent-shogun | Server-side project directory |
| Shogun Session | shogun | tmux session name for Shogun |
| Agent Session | multiagent | tmux session name for agents |
*1 Transfer your private key to the phone, or use password authentication
Save → Switch to Shogun tab → auto-connects
Using Tailscale (connect from anywhere):
# Server-side (WSL2)
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscaled &
sudo tailscale up --authkey tskey-auth-XXXXXXXXXXXX
sudo service ssh start
Install the Tailscale app on your phone, log in with the same account, and use the displayed Tailscale IP as the SSH Host in the app.
With ntfy notifications:
See ntfy setup section for push notifications from Karo on task completion.
SSH via Termux also works. More limited than the dedicated app, but requires no APK sideloading.
Requirements (all free):
| Name | In a nutshell | Role |
|---|---|---|
| Tailscale | A road to your home from anywhere | Connect to your home PC from anywhere |
| SSH | The feet that walk that road | Log into your home PC through Tailscale |
| Termux | A black screen on your phone | Required to use SSH — just install it |
Setup:
curl -fsSL https://tailscale.com/install.sh | sh
sudo tailscaled &
sudo tailscale up --authkey tskey-auth-XXXXXXXXXXXX
sudo service ssh start
pkg update && pkg install openssh
ssh youruser@your-tailscale-ip
css # Connect to Shogun
ssh youruser@your-tailscale-ip
csm # See all 9 panes
Disconnect: Just swipe the Termux window closed. tmux sessions survive — agents keep working.
# 1. Clone
git clone https://github.com/yohey-w/multi-agent-shogun.git ~/multi-agent-shogun
cd ~/multi-agent-shogun
# 2. Make scripts executable
chmod +x *.sh
# 3. Run first-time setup
./first_setup.sh
cd ~/multi-agent-shogun
./shutsujin_departure.sh
WSL2 (Windows Subsystem for Linux) lets you run Linux inside Windows. This system uses tmux (a Linux tool) to manage multiple AI agents, so WSL2 is required on Windows.
No problem! Running install.bat will:
first_setup.sh)Quick install command (run PowerShell as Administrator):
wsl --install
Then restart your computer and run install.bat again.
| Script | Purpose | When to run |
|---|---|---|
install.bat | Windows: WSL2 + Ubuntu setup | First time only |
first_setup.sh | Install tmux, Node.js, Claude Code CLI + Memory MCP config | First time only |
shutsujin_departure.sh | Create tmux sessions + launch the configured CLI for each agent + load instructions + start ntfy listener | Daily |
scripts/switch_cli.sh | Live switch agent CLI/model (settings.yaml → /exit → relaunch) | As needed |
install.bat does automatically:first_setup.sh)shutsujin_departure.sh does:config/settings.yaml (Claude/Codex/Copilot/Kimi/OpenCode)After running, all agents are ready to receive commands!
If you prefer to install dependencies manually:
| Requirement | Installation | Notes |
|---|---|---|
| WSL2 + Ubuntu | wsl --install in PowerShell | Windows only |
| Set Ubuntu as default | wsl --set-default Ubuntu | Required for scripts to work |
| tmux | sudo apt install tmux | Terminal multiplexer |
| Node.js v20+ | nvm install 20 | Required for MCP servers |
| Claude Code CLI | curl -fsSL https://claude.ai/install.sh | bash | Official Anthropic CLI (native version recommended; npm version deprecated) |
| OpenAI Codex CLI | Install from the official OpenAI Codex distribution | Required only for agents with type: codex |
| GitHub Copilot CLI | Install and authenticate GitHub Copilot CLI | Required only for agents with type: copilot |
| Kimi Code CLI | Install and authenticate Kimi Code | Required only for agents with type: kimi |
| OpenCode CLI | npm install -g opencode-ai | Required only for agents with type: opencode; provider API keys must be available in the agent shell |
| Cursor CLI | See Cursor CLI docs — use cursor-agent or agent command | Required only for agents with type: cursor |
| Antigravity CLI | Install and authenticate Google Antigravity CLI (agy) | Required only for agents with type: antigravity, type: agy, or legacy type: gemini |
Whichever option you chose, 10 AI agents are automatically launched:
| Agent | Role | Count |
|---|---|---|
| 🏯 Shogun | Supreme commander — receives your orders | 1 |
| 📋 Karo | Manager — distributes tasks, quality checks | 1 |
| ⚔️ Ashigaru | Workers — execute implementation tasks in parallel | 7 |
| 🧠 Gunshi | Strategist — handles analysis, evaluation, and design | 1 |
Two tmux sessions are created:
shogun — connect here to give commandsmultiagent — Karo, Ashigaru, and Gunshi running in the backgroundAfter running shutsujin_departure.sh, all agents automatically load their instructions and are ready.
Open a new terminal and connect:
tmux attach-session -t shogun
The Shogun is already initialized — just give a command:
Research the top 5 JavaScript frameworks and create a comparison table
The Shogun will:
Meanwhile, the Karo distributes tasks to Ashigaru workers for parallel execution.
Open dashboard.md in your editor for a real-time status view:
## In Progress
| Worker | Task | Status |
|--------|------|--------|
| Ashigaru 1 | Research React | Running |
| Ashigaru 2 | Research Vue | Running |
| Ashigaru 3 | Research Angular | Completed |
Once set up, the Shogun system can handle multiple projects under the same Shogun, switching between them as needed. The unit equivalent to a Visual Studio "solution" is projects/{name}.yaml + context/{name}.md.
# (1) Connect to the Shogun (after shutsujin_departure.sh completes)
tmux attach-session -t shogun
# (2) Just give the Shogun your command — the project starts automatically
# → Shogun writes cmd to queue/shogun_to_karo.yaml and notifies Karo
# → Karo distributes to Ashigaru for parallel execution
# → Results aggregate in dashboard.md
No explicit "create a project" command is needed. The Shogun attaches a project: field to the cmd when relevant, and related files are automatically separated.
For ongoing projects, you can place metadata in projects/{name}.yaml:
# projects/example.yaml
id: example
name: "Sample Project"
working_directory: /path/to/repo
north_star: "The ultimate goal for this project"
notes: |
Project-specific notes, stakeholders, special rules
The Shogun and Karo reference this file and inject project context when issuing cmds.
Detailed project knowledge (requirements, design, past feedback) lives in context/{name}.md. When the Shogun issues a cmd related to the project, it automatically references this file.
The agent formation (which CLI each agent uses) lives in config/settings.yaml:
cli:
agents:
ashigaru1:
type: codex # codex / claude / copilot / kimi / opencode / antigravity
model: gpt-5.5
ashigaru2:
type: claude
model: claude-sonnet-4-6
# Same for ashigaru3-7, gunshi, karo
OpenCode uses provider-qualified model IDs:
cli:
agents:
ashigaru3:
type: opencode
model: openrouter/openai/gpt-4o-mini
variant: high # optional provider-specific reasoning variant
OpenRouter setup has two separate pieces:
config/settings.yaml as shown above (type: opencode, model: openrouter/...).settings.yaml. Run OpenCode once as the same OS user that will launch Shogun, then use /connect → OpenRouter and paste the API key. OpenCode stores provider credentials in its own user data under that OS user (for example under ~/.local/share/opencode/; the exact file/database is OpenCode-internal). For headless deployments that use environment-based provider credentials, make sure the shell that runs shutsujin_departure.sh has OPENROUTER_API_KEY loaded.Do not put API keys in config/settings.yaml, config/opencode-tui.json, or .opencode/agents/*.md. Those files only describe routing, tmux-safe keybindings, and generated agent definitions.
When OpenCode is selected, lib/cli_adapter.sh launches it with --agent <agent_id> and the repository-pinned OPENCODE_TUI_CONFIG=config/opencode-tui.json. The TUI command does not accept --variant; if variant: is configured, scripts/build_instructions.sh and scripts/switch_cli.sh synchronize model: / variant: into a git-ignored .opencode/agents/<agent_id>-runtime.md, which OpenCode loads via --agent <agent_id>-runtime.
To switch on the fly, use scripts/switch_cli.sh:
bash scripts/switch_cli.sh ashigaru3 --type claude --model claude-sonnet-4-6
bash scripts/switch_cli.sh ashigaru3 --type opencode --model openrouter/openai/gpt-4o-mini
bash scripts/switch_cli.sh ashigaru3 --type opencode --model openrouter/minimax/minimax-m2.5 --variant xhigh
There is no explicit "close project" command. Issuing the next project's cmd automatically switches context.
queue/ as history, and the Shogun restores state when resumedprojects/{name}.yaml, or add an archived: true flagproject: field in cmds to keep concurrent projects distinctWhat carries forward to future projects:
| What carries forward | Stored in | Referenced when |
|---|---|---|
| Lord's preferences and lessons | Memory MCP (persistent) | All agents at Session Start |
| Project-specific knowledge | context/{name}.md | When running the project's cmds |
| Past cmd history | queue/shogun_to_karo.yaml | When the Shogun needs it |
| Custom skills | ~/.claude/skills/, skills/ | When matching triggers fire |
| Agent formation | config/settings.yaml | At shutsujin startup |
Memory MCP is the heart of "experience." When you tell the Shogun "don't do X next time" or "remember Y," the Shogun records it in Memory MCP, and all future projects see it.
You: "Research the top 5 MCP servers and create a comparison table"
The Shogun writes the task to queue/shogun_to_karo.yaml and wakes the Karo. Control returns to you immediately.
The Karo breaks the task into subtasks:
| Worker | Assignment |
|---|---|
| Ashigaru 1 | Research Notion MCP |
| Ashigaru 2 | Research GitHub MCP |
| Ashigaru 3 | Research Playwright MCP |
| Ashigaru 4 | Research Memory MCP |
| Ashigaru 5 | Research Sequential Thinking MCP |
All 5 Ashigaru research simultaneously. You can watch them work in real time:
Results appear in dashboard.md as they complete.
One command spawns up to 8 parallel tasks:
You: "Research 5 MCP servers"
→ 5 Ashigaru start researching simultaneously
→ Results in minutes, not hours
The Shogun delegates instantly and returns control to you:
You: Command → Shogun: Delegates → You: Give next command immediately
↓
Workers: Execute in background
↓
Dashboard: Shows results
No waiting for long tasks to finish.
Your AI remembers your preferences:
Session 1: Tell it "I prefer simple approaches"
→ Saved to Memory MCP
Session 2: AI loads memory on startup
→ Stops suggesting complex solutions
Agents talk to each other by writing YAML files — like passing notes. No polling loops, no wasted API calls.
Karo wants to wake Ashigaru 3:
Step 1: Write the message Step 2: Wake the agent up
┌──────────────────────┐ ┌──────────────────────────┐
│ inbox_write.sh │ │ inbox_watcher.sh │
│ │ │ │
│ Writes full message │ file │ Detects file change │
│ to ashigaru3.yaml │──change──▶│ (inotifywait, not poll) │
│ with flock (no race) │ │ │
└──────────────────────┘ │ Wakes agent via: │
│ 1. Self-watch (skip) │
│ 2. tmux send-keys │
│ (short nudge only) │
└──────────────────────────┘
Step 3: Agent reads its own inbox
┌──────────────────────────────────┐
│ Ashigaru 3 reads ashigaru3.yaml │
│ → Finds unread messages │
│ → Processes them │
│ → Marks as read │
└──────────────────────────────────┘
How the wake-up works:
| Priority | Method | What happens | When used |
|---|---|---|---|
| 1st | Self-Watch | Agent watches its own inbox file — wakes itself, no nudge needed | Agent has its own inotifywait running |
| 2nd | Stop Hook | Claude Code agents check inbox at turn end via .claude/settings.json Stop hook | Claude Code agents only |
| 3rd | tmux send-keys | Sends short nudge via tmux send-keys (text and Enter sent separately for Codex CLI compatibility) | Fallback — disabled in ASW Phase 2+ |
Agent Self-Watch (ASW) Phases — Controls how aggressively the system uses tmux send-keys nudges:
| ASW Phase | Nudge behavior | Delivery method | When to use |
|---|---|---|---|
| Phase 1 | Normal nudges enabled | self-watch + send-keys | Initial setup, mixed CLI environments |
| Phase 2 | Busy → suppressed, Idle → nudge | busy: stop hook delivers at turn end. idle: nudge (unavoidable) | Claude Code agents with stop hook (recommended) |
| Phase 3 | FINAL_ESCALATION_ONLY | send-keys only as last-resort recovery | Fully stable environments |
Phase 2 uses the idle flag file (/tmp/shogun_idle_{agent}) to distinguish busy vs idle agents. The Stop hook creates/removes this flag at turn boundaries. This eliminates nudge interruptions during active work while still waking idle agents.
Why can't nudges be fully eliminated? Claude Code's Stop hook only fires at turn end. An idle agent (sitting at the prompt) has no turn ending, so there's no hook to trigger inbox checks. A future
Notificationhook withidle_promptblocking support or a periodic timer hook could solve this.
Configure in config/settings.yaml:
asw_phase: 2 # Recommended for Claude Code setups
Or set the default directly in scripts/inbox_watcher.sh (ASW_PHASE variable). Restart inbox_watcher processes after changing.
3-Phase Escalation (v3.2) — If agent doesn't respond:
| Phase | Timing | Action |
|---|---|---|
| Phase 1 | 0-2 min | Standard nudge (inbox3 text + Enter) — skipped for busy agents in ASW Phase 2+ |
| Phase 2 | 2-4 min | Copilot/Kimi: Escape×2 + single Ctrl-C + nudge. Claude/Codex/OpenCode: plain nudge fallback |
| Phase 3 | 4+ min | Send CLI-specific context reset: Claude/Copilot/Kimi use /clear, Codex/OpenCode use /new (max once per 5 min) |
Key design choices:
inotifywait blocks on a kernel event (not a poll loop). CPU usage is 0% between messages.See which agents are busy or idle — instantly, from one command:
# Project mode: full status with task/inbox info
bash scripts/agent_status.sh
# Standalone mode: works with any tmux session
bash scripts/agent_status.sh --session mysession --lang en
Project mode output:
Agent CLI Pane Task ID Status Inbox
---------- ------- --------- ------------------------------------------ ---------- -----
karo claude 待機中 --- --- 0
ashigaru1 codex 稼働中 subtask_042a_research assigned 0
ashigaru2 codex 待機中 subtask_042b_review done 0
gunshi claude 稼働中 subtask_042c_analysis assigned 0
Standalone mode output (no project config needed):
Pane State Agent ID
------------------------------ ---------- ----------
multiagent:agents.0 IDLE karo
multiagent:agents.1 BUSY ashigaru1
multiagent:agents.8 BUSY gunshi
Detection works for Claude Code, Codex CLI, and OpenCode by checking CLI-specific prompt/spinner patterns near the bottom of each tmux pane. The detection logic lives in lib/agent_status.sh — source it in your own scripts:
source lib/agent_status.sh
agent_is_busy_check "multiagent:agents.3" && echo "busy" || echo "idle"
VSCode's Claude Code extension lets you paste screenshots to explain issues. This CLI system provides the same capability:
# Set your screenshot folder in config/settings.yaml
screenshot:
path: "/mnt/c/Users/YourName/Pictures/Screenshots"
# Just tell the Shogun:
You: "Check the latest screenshot"
You: "Look at the last 2 screenshots"
→ AI instantly reads and analyzes your screen captures
Windows tip: Press Win + Shift + S to take screenshots. Set the save path in settings.yaml for seamless integration.
Use cases:
Efficient knowledge sharing through a four-layer context system:
| Layer | Location | Purpose |
|---|---|---|
| Layer 1: Memory MCP | memory/shogun_memory.jsonl | Cross-project, cross-session long-term memory |
| Layer 2: Project | config/projects.yaml, projects/<id>.yaml, context/{project}.md | Project-specific information and technical knowledge |
| Layer 3: YAML Queue | queue/shogun_to_karo.yaml, queue/tasks/, queue/reports/ | Task management — source of truth for instructions and reports |
| Layer 4: Session | CLAUDE.md, instructions/*.md | Working context (wiped by /clear) |
memory/MEMORY.md)Shogun reads memory/MEMORY.md at every session start. It contains Lord's preferences, lessons learned, and cross-session knowledge — written by Shogun, read by Shogun.
┌─────────────────────────────────────────────────────────────┐
│ Git Repositories │
│ │
│ ┌─────────────────────┐ ┌──────────────────────────┐ │
│ │ multi-agent-shogun │ │ shogun-private │ │
│ │ (public OSS) │ │ (your private repo) │ │
│ │ │ │ │ │
│ │ scripts/ │ │ projects/client.yaml ←──┐ │ │
│ │ instructions/ │ │ context/my-notes.md ←──┤ │ │
│ │ lib/ │ │ queue/shogun_to_karo.yaml │ │ │
│ │ memory/ │ │ memory/MEMORY.md ←──┘ │ │
│ │ ├─ MEMORY.md.sample│ │ config/settings.yaml │ │
│ │ └─ MEMORY.md ─────┼───┼── same file, tracked here │ │
│ │ (gitignored) │ │ │ │
│ └─────────────────────┘ └──────────────────────────┘ │
│ ↑ anyone can fork ↑ your data, your repo │
└─────────────────────────────────────────────────────────────┘
How it works: memory/MEMORY.md lives in the same working directory as the OSS repo, but is excluded from the OSS .gitignore (whitelist-based). You track it in a separate private repo using a bare git repo technique:
# One-time setup (already done by first_setup.sh)
git init --bare ~/.shogun-private.git
alias privategit='git --git-dir=$HOME/.shogun-private.git --work-tree=/path/to/multi-agent-shogun'
privategit remote add origin https://github.com/YOU/shogun-private.git
# Daily use
privategit add -f memory/MEMORY.md projects/my-client.yaml
privategit commit -m "update memory"
privategit push
The OSS .gitignore uses a whitelist approach (default: exclude everything, then explicitly allow OSS files). So private files like memory/MEMORY.md are automatically excluded without needing explicit gitignore entries — just don't add them to the whitelist.
This design enables:
As agents work, their session context (Layer 4) grows, increasing API costs. /clear wipes session memory and resets costs. Layers 1–3 persist as files, so nothing is lost.
Recovery cost after /clear: ~6,800 tokens (42% improved from v1 — CLAUDE.md YAML conversion + English-only instructions reduced token cost by 70%)
tmux display-message -t "$TMUX_PANE" -p '#{@agent_id}' → identifies its own numberThe key insight: designing what not to load is what drives cost savings.
All projects use the same 7-section template:
| Section | Purpose |
|---|---|
| What | Project overview |
| Why | Goals and success criteria |
| Who | Stakeholders and responsibilities |
| Constraints | Deadlines, budgets, limitations |
| Current State | Progress, next actions, blockers |
| Decisions | Decisions made and their rationale |
| Notes | Free-form observations and ideas |
This unified format enables:
Two-way communication between your phone and the Shogun — no SSH, no Tailscale, no server needed.
| Direction | How it works |
|---|---|
| Phone → Shogun | Send a message from the ntfy app → ntfy_listener.sh receives it via streaming → auto-ACK reply (📱受信: {your message}) sent back to your phone → Shogun processes automatically |
| Karo → Phone (direct) | When Karo updates dashboard.md, it sends push notifications directly via scripts/ntfy.sh — Shogun is bypassed (Shogun is for human interaction, not progress reporting) |
📱 You (from bed) 🏯 Shogun
│ │
│ "Research React 19" │
├─────────────────────────►│
│ (ntfy message) │ → Delegates to Karo → Ashigaru work
│ │
│ "✅ cmd_042 complete" │
│◄─────────────────────────┤
│ (push notification) │
Setup:
ntfy_topic: "shogun-yourname" to config/settings.yamlshutsujin_departure.sh automatically starts the listener — no extra stepsNotification examples:
| Event | Notification |
|---|---|
| Command completed | ✅ cmd_042 complete — 5/5 subtasks done |
| Task failed | ❌ subtask_042c failed — API rate limit |
| Action required | 🚨 Action needed: approve skill candidate |
| Streak update | 🔥 3-day streak! 12/12 tasks today |
Free, no account required, no server to maintain. Uses ntfy.sh — an open-source push notification service.
⚠️ Security: Your topic name is your password. Anyone who knows it can read your notifications and send messages to your Shogun. Choose a hard-to-guess name and never share it publicly (e.g., in screenshots, blog posts, or GitHub commits).
Verify it works:
# Send a test notification to your phone
bash scripts/ntfy.sh "Test notification from Shogun 🏯"
If your phone receives the notification, you're all set. If not, check:
config/settings.yaml has ntfy_topic set (not empty, no extra quotes)Sending commands from your phone:
Research React 19 best practices) and sendntfy_listener.sh receives it, writes to queue/ntfy_inbox.yaml, and wakes the ShogunAny text you send becomes a command. Write it like you'd talk to the Shogun — no special syntax needed.
Manual listener start (if not using shutsujin_departure.sh):
# Start the listener in the background
nohup bash scripts/ntfy_listener.sh &>/dev/null &
# Check if it's running
pgrep -f ntfy_listener.sh
# View listener logs (stderr output)
bash scripts/ntfy_listener.sh # Run in foreground to see logs
The listener automatically reconnects if the connection drops. shutsujin_departure.sh starts it automatically on deployment — you only need manual start if you skipped the deployment script.
Troubleshooting:
| Problem | Fix |
|---|---|
| No notifications on phone | Check topic name matches exactly in settings.yaml and ntfy app |
| Listener not starting | Run bash scripts/ntfy_listener.sh in foreground to see errors |
| Phone → Shogun not working | Verify listener is running: pgrep -f ntfy_listener.sh |
| Messages not reaching Shogun | Check queue/ntfy_inbox.yaml — if message is there, Shogun may be busy |
| "ntfy_topic not configured" error | Add ntfy_topic: "your-topic" to config/settings.yaml |
| Duplicate notifications | Normal on reconnect — Shogun deduplicates by message ID |
| Changed topic name but no notifications | The listener must be restarted: pkill -f ntfy_listener.sh && nohup bash scripts/ntfy_listener.sh &>/dev/null & |
Real-world notification screenshots:
Left: Bidirectional phone ↔ Shogun communication · Right: Real-time progress report from Ashigaru
Left: Command completion notification · Right: All 8 Ashigaru completing in parallel
Note: Topic names shown in screenshots are examples. Use your own unique topic name.
Behavioral psychology-driven motivation through your notification feed:
saytask/streaks.yaml — maintaining streaks leverages loss aversion to sustain momentum12/12 tasks today — visual completion feedback reinforces the Arbeitslust effect (joy of work-in-progress)Each tmux pane shows the agent's current task directly on its border:
┌ ashigaru1 Sonnet+T VF requirements ──┬ ashigaru3 Opus+T API research ──────┐
│ │ │
│ Working on SayTask requirements │ Researching REST API patterns │
│ │ │
├ ashigaru2 Sonnet ───────────────────┼ ashigaru4 Spark DB schema design ───┤
│ │ │
│ (idle — waiting for assignment) │ Designing database schema │
│ │ │
└──────────────────────────────────────┴─────────────────────────────────────┘
ashigaru1 Sonnet+T VF requirements — agent name, model (with Thinking indicator), and task summaryashigaru2 Sonnet — model name only, no task+T suffix = Extended Thinking enabledWhen an Ashigaru completes a task, it shouts a personalized battle cry in the tmux pane — a visual reminder that your army is working hard.
┌ ashigaru1 (Sonnet) ──────────┬ ashigaru2 (Sonnet) ──────────┐
│ │ │
│ ⚔️ 足軽1号、先陣切った! │ 🔥 足軽2号、二番槍の意地! │
│ 八刃一志! │ 八刃一志! │
│ ❯ │ ❯ │
└───────────────────────────────┴───────────────────────────────┘
How it works:
The Karo writes an echo_message field in each task YAML. After completing all work (report + inbox notification), the Ashigaru runs echo as its final action. The message stays visible above the ❯ prompt.
# In the task YAML (written by Karo)
task:
task_id: subtask_001
description: "Create comparison table"
echo_message: "🔥 足軽1号、先陣を切って参る!八刃一志!"
Shout mode is the default. To disable (saves API tokens on the echo call):
./shutsujin_departure.sh --silent # No battle cries
./shutsujin_departure.sh # Default: shout mode (battle cries enabled)
Silent mode sets DISPLAY_MODE=silent as a tmux environment variable. The Karo checks this when writing task YAMLs and omits the echo_message field.
Task management for people who hate task management. Just speak to your phone.
Talk Coding, not Vibe Coding. Speak your tasks, AI organizes them. No typing, no opening apps, no friction.
"Your enemy isn't other apps — it's doing nothing."
🗣️ "Buy milk, dentist tomorrow, invoice due Friday"
│
▼
┌──────────────────┐
│ ntfy → Shogun │ AI auto-categorize, parse dates, set priorities
└────────┬─────────┘
│
▼
┌──────────────────┐
│ tasks.yaml │ Structured storage (local, never leaves your machine)
└────────┬─────────┘
│
▼
📱 Morning notification:
"Today: 🐸 Invoice due · 🦷 Dentist 3pm · 🛒 Buy milk"
| Before (v1) | After (v2) |
|---|---|
![]() | ![]() |
| Raw task dump | Clean, organized daily summary |
Note: Topic names shown in screenshots are examples. Use your own unique topic name.
Q: How is this different from other task apps? A: You never open an app. Just speak. Zero friction. Most task apps fail because people stop opening them. SayTask removes that step entirely.
Q: Can I use SayTask without the full Shogun system? A: SayTask is a feature of Shogun. Shogun also works as a standalone multi-agent development platform — you get both capabilities in one system.
Q: What's the Frog 🐸? A: Every morning, AI picks your hardest task — the one you'd rather avoid. Tackle it first (the "Eat the Frog" method) or ignore it. Your call.
Q: Is it free? A: Everything is free and open-source. ntfy is free too. No account, no server, no subscription.
Q: Where is my data stored? A: Local YAML files on your machine. Nothing is sent to the cloud. Your tasks never leave your device.
Q: What if I say something vague like "that thing for work"? A: AI does its best to categorize and schedule it. You can always refine later — but the point is capturing the thought before it disappears.
Shogun has two complementary task systems:
| Capability | SayTask (Voice Layer) | cmd Pipeline (AI Execution) |
|---|---|---|
| Voice input → task creation | ✅ | — |
| Morning notification digest | ✅ | — |
| Eat the Frog 🐸 selection | ✅ | — |
| Streak tracking | ✅ | ✅ |
| AI-executed tasks (multi-step) | — | ✅ |
| 8-agent parallel execution | — | ✅ |
SayTask handles personal productivity (capture → schedule → remind). The cmd pipeline handles complex work (research, code, multi-step tasks). Both share streak tracking — completing either type of task counts toward your daily streak.
| Agent | Default Model | Thinking | Role |
|---|---|---|---|
| Shogun | Opus | Enabled (high) | Strategic advisor to the Lord. Use --shogun-no-thinking for relay-only mode |
| Karo | Sonnet | Enabled | Task distribution, simple QC, dashboard management |
| Gunshi | Opus | Enabled | Deep analysis, design review, architecture evaluation |
| Ashigaru 1–7 | Sonnet 4.6 | Enabled | Implementation: code, research, file operations |
Thinking control: Set thinking: true/false per agent in config/settings.yaml. When thinking: false, the agent starts with MAX_THINKING_TOKENS=0 to disable Extended Thinking. Pane borders show +T suffix when Thinking is enabled (e.g., Sonnet+T, Opus+T).
Live model switching: Use /shogun-model-switch to change any agent's CLI type, model, or Thinking setting without restarting the entire system. See the Skills section for details.
The system routes work by cognitive complexity at two levels: Agent routing (Ashigaru for L1–L3, Gunshi for L4–L6) and Model routing within Ashigaru via capability_tiers (see Dynamic Model Routing below).
Tasks are classified using Bloom's Taxonomy and routed to the appropriate agent, not model:
| Level | Category | Description | Routed To |
|---|---|---|---|
| L1 | Remember | Recall facts, copy, list | Ashigaru |
| L2 | Understand | Explain, summarize, paraphrase | Ashigaru |
| L3 | Apply | Execute procedures, implement known patterns | Ashigaru |
| L4 | Analyze | Compare, investigate, deconstruct | Gunshi |
| L5 | Evaluate | Judge, critique, recommend | Gunshi |
| L6 | Create | Design, build, synthesize new solutions | Gunshi |
The Karo assigns each subtask a Bloom level and routes it to the appropriate agent. L1–L3 tasks go to Ashigaru for parallel execution; L4–L6 tasks go to the Gunshi for deeper analysis. Simple L4 tasks (e.g., small code review) may still go to Ashigaru when the Karo judges it appropriate.
Tasks can declare dependencies on other tasks using blockedBy:
# queue/tasks/ashigaru2.yaml
task:
task_id: subtask_010b
blockedBy: ["subtask_010a"] # Waits for ashigaru1's task to complete
description: "Integrate the API client built by subtask_010a"
When a blocking task completes, the Karo automatically unblocks dependent tasks and assigns them to available Ashigaru. This prevents idle waiting and enables efficient pipelining of dependent work.
Beyond agent-level routing, you can configure model-level routing within the Ashigaru tier. Define a capability_tiers table in config/settings.yaml mapping each model to its maximum Bloom level:
capability_tiers:
gpt-5.3-codex-spark:
max_bloom: 3 # L1–L3 only: fast, high-volume tasks
cost_group: chatgpt_pro
gpt-5.3-codex:
max_bloom: 4 # L1–L4: + analysis and debugging
cost_group: chatgpt_pro
claude-sonnet-4-6:
max_bloom: 5 # L1–L5: + design evaluation
cost_group: claude_max
claude-opus-4-6:
max_bloom: 6 # L1–L6: + novel architecture, strategy
cost_group: claude_max
The cost_group field links each model to your subscription plan, enabling the system to avoid routing tasks to models your plan doesn't cover.
Two built-in skills help you configure this:
| Skill | Purpose |
|---|---|
/shogun-model-list | Reference table: all models × subscriptions × Bloom max |
/shogun-bloom-config | Interactive: answer 2 questions → get ready-to-paste YAML |
Run /shogun-bloom-config after setup to generate your optimal capability_tiers configuration.
"Don't execute tasks mindlessly. Always keep 'fastest × best output' in mind."
The Shogun System is built on five core principles:
| Principle | Description |
|---|---|
| Autonomous Formation | Design task formations based on complexity, not templates |
| Parallelization | Use subagents to prevent single-point bottlenecks |
| Research First | Search for evidence before making decisions |
| Continuous Learning | Don't rely solely on model knowledge cutoffs |
| Triangulation | Multi-perspective research with integrated authorization |
These principles are documented in detail: docs/philosophy.md
Why use files instead of direct messaging between agents?
| Problem with direct messaging | How mailbox solves it |
|---|---|
| Agent crashes → message lost | YAML files survive restarts |
| Polling wastes API calls | inotifywait is event-driven (zero CPU while idle) |
| Agents interrupt each other | Each agent has its own inbox file — no cross-talk |
| Hard to debug | Open any .yaml file to see exact message history |
| Concurrent writes corrupt data | flock (exclusive lock) serializes writes automatically |
| Delivery failures (character corruption, hangs) | Message content stays in files — only a short "you have mail" nudge is sent through tmux |
Each pane has a @agent_id tmux user option (e.g., karo, ashigaru1). While pane_index can shift when panes are rearranged, @agent_id is set at startup by shutsujin_departure.sh and never changes.
Agent self-identification:
tmux display-message -t "$TMUX_PANE" -p '#{@agent_id}'
The -t "$TMUX_PANE" is required. Omitting it returns the active pane's value (whichever pane you're focused on), causing misidentification.
Model names are stored as @model_name and current task summaries as @current_task — both displayed in the pane-border-format. Even if Claude Code overwrites the pane title, these user options persist.
No skills are included out of the box. Skills emerge organically during operation — you approve candidates from dashboard.md as they're discovered.
Invoke skills with /skill-name. Just tell the Shogun: "run /skill-name".
Skills ship with the repository in skills/. They are domain-agnostic utilities useful for any user:
| Skill | Description |
|---|---|
/skill-creator | Template and guide for creating new skills |
/shogun-agent-status | Show busy/idle status of all agents with task and inbox info |
/shogun-model-list | Reference table: all CLI tools × models × subscriptions × Bloom max level |
/shogun-bloom-config | Interactive configurator: answer 2 questions about your subscriptions → get ready-to-paste capability_tiers YAML |
/shogun-model-switch | Live CLI/model switching: settings.yaml update → /exit → relaunch with correct flags. Supports Thinking ON/OFF control |
/shogun-readme-sync | Keep README.md and README_ja.md in sync |
These help you configure and operate the system. Personal workflow skills grow organically through the bottom-up discovery process.
1. Personal skills are not committed to the repo
Skills in .claude/commands/ are excluded from version control by design:
2. How skills are discovered
Ashigaru notices a pattern during work
↓
Appears in dashboard.md under "Skill Candidates"
↓
You (the Lord) review the proposal
↓
If approved, instruct the Karo to create the skill
Skills are user-driven. Automatic creation would lead to unmanageable bloat — only keep what you find genuinely useful.
MCP (Model Context Protocol) servers extend Claude's capabilities. Here's how to set them up:
MCP servers give Claude access to external tools:
Add MCP servers with these commands:
# 1. Notion - Connect to your Notion workspace
claude mcp add notion -e NOTION_TOKEN=your_token_here -- npx -y @notionhq/notion-mcp-server
# 2. Playwright - Browser automation
claude mcp add playwright -- npx @playwright/mcp@latest
# Note: Run `npx playwright install chromium` first
# 3. GitHub - Repository operations
claude mcp add github -e GITHUB_PERSONAL_ACCESS_TOKEN=your_pat_here -- npx -y @modelcontextprotocol/server-github
# 4. Sequential Thinking - Step-by-step reasoning for complex problems
claude mcp add sequential-thinking -- npx -y @modelcontextprotocol/server-sequential-thinking
# 5. Memory - Cross-session long-term memory (recommended!)
# ✅ Auto-configured by first_setup.sh
# To reconfigure manually:
claude mcp add memory -e MEMORY_FILE_PATH="$PWD/memory/shogun_memory.jsonl" -- npx -y @modelcontextprotocol/server-memory
claude mcp list
All servers should show "Connected" status.
This system manages all white-collar tasks, not just code. Projects can live anywhere on your filesystem.
You: "Research the top 5 AI coding assistants and compare them"
What happens:
1. Shogun delegates to Karo
2. Karo assigns:
- Ashigaru 1: Research GitHub Copilot
- Ashigaru 2: Research Cursor
- Ashigaru 3: Research Claude Code
- Ashigaru 4: Research Codeium
- Ashigaru 5: Research Amazon CodeWhisperer
3. All 5 research simultaneously
4. Results compiled in dashboard.md
You: "Prepare a PoC for the project on this Notion page: [URL]"
What happens:
1. Karo fetches Notion content via MCP
2. Ashigaru 2: Lists items to verify
3. Ashigaru 3: Investigates technical feasibility
4. Ashigaru 4: Drafts a PoC plan
5. All results compiled in dashboard.md — meeting prep done
# config/settings.yaml
language: ja # Samurai Japanese only
language: en # Samurai Japanese + English translation
# config/settings.yaml
screenshot:
path: "/mnt/c/Users/YourName/Pictures/Screenshots"
Tell the Shogun "check the latest screenshot" and it reads your screen captures for visual context. (Win+Shift+S on Windows.)
# config/settings.yaml
ntfy_topic: "shogun-yourname"
Subscribe to the same topic in the ntfy app on your phone. The listener starts automatically with shutsujin_departure.sh.
The public ntfy.sh instance requires no authentication — the setup above is all you need.
If you run a self-hosted ntfy server with access control enabled, configure authentication:
# 1. Copy the sample config
cp config/ntfy_auth.env.sample config/ntfy_auth.env
# 2. Edit with your credentials (choose one method)
| Method | Config | When to use |
|---|---|---|
| Bearer Token (recommended) | NTFY_TOKEN=tk_your_token_here | Self-hosted ntfy with token auth (ntfy token add <user>) |
| Basic Auth | NTFY_USER=username + NTFY_PASS=password | Self-hosted ntfy with user/password |
| None (default) | Leave file empty or don't create it | Public ntfy.sh — no auth needed |
Priority: Token > Basic > None. If neither is set, no auth headers are sent (backward compatible).
config/ntfy_auth.env is excluded from git. See config/ntfy_auth.env.sample for details.
┌─────────────────────────────────────────────────────────────────────┐
│ First-Time Setup (run once) │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ install.bat (Windows) │
│ │ │
│ ├── Check/guide WSL2 installation │
│ └── Check/guide Ubuntu installation │
│ │
│ first_setup.sh (run manually in Ubuntu/WSL) │
│ │ │
│ ├── Check/install tmux │
│ ├── Check/install Node.js v20+ (via nvm) │
│ ├── Check/install Claude Code CLI (native version) │
│ │ ※ Proposes migration if npm version detected │
│ └── Configure Memory MCP server │
│ │
├─────────────────────────────────────────────────────────────────────┤
│ Daily Startup (run every day) │
├─────────────────────────────────────────────────────────────────────┤
│ │
│ shutsujin_departure.sh │
│ │ │
│ ├──▶ Create tmux sessions │
│ │ • "shogun" session (1 pane) │
│ │ • "multiagent" session (9 panes, 3x3 grid) │
│ │ │
│ ├──▶ Reset queue files and dashboard │
│ │ │
│ └──▶ Launch the configured CLI for each agent │
│ │
└─────────────────────────────────────────────────────────────────────┘
# Default: Full startup (tmux sessions + configured CLI launch)
./shutsujin_departure.sh
# Session setup only (no CLI launch)
./shutsujin_departure.sh -s
./shutsujin_departure.sh --setup-only
# Clean task queues (preserves command history)
./shutsujin_departure.sh -c
./shutsujin_departure.sh --clean
# Battle formation: All Ashigaru on Opus (max capability, higher cost)
./shutsujin_departure.sh -k
./shutsujin_departure.sh --kessen
# Silent mode: Disable battle cries (saves API tokens on echo calls)
./shutsujin_departure.sh -S
./shutsujin_departure.sh --silent
# Full startup + open Windows Terminal tabs
./shutsujin_departure.sh -t
./shutsujin_departure.sh --terminal
# Shogun relay-only mode: Disable Shogun's thinking (cost savings)
./shutsujin_departure.sh --shogun-no-thinking
# Show help
./shutsujin_departure.sh -h
./shutsujin_departure.sh --help
Normal daily use:
./shutsujin_departure.sh # Launch everything
tmux attach-session -t shogun # Connect and give commands
Debug mode (manual control):
./shutsujin_departure.sh -s # Create sessions only
# Manually launch Claude Code on specific agents
tmux send-keys -t shogun:0 'claude --dangerously-skip-permissions' Enter
tmux send-keys -t multiagent:0.0 'claude --dangerously-skip-permissions' Enter
Restart after crash:
# Kill existing sessions
tmux kill-session -t shogun
tmux kill-session -t multiagent
# Fresh start
./shutsujin_departure.sh
Running first_setup.sh automatically adds these aliases to ~/.bashrc:
alias csst='cd /mnt/c/tools/multi-agent-shogun && ./shutsujin_departure.sh'
alias css='tmux attach-session -t shogun' # Connect to Shogun
alias csm='tmux attach-session -t multiagent' # Connect to Karo + Ashigaru
To apply aliases: run source ~/.bashrc or restart your terminal (PowerShell: wsl --shutdown then reopen).
multi-agent-shogun/
│
│ ┌──────────────── Setup Scripts ────────────────────┐
├── install.bat # Windows: First-time setup
├── first_setup.sh # Ubuntu/Mac: First-time setup
├── shutsujin_departure.sh # Daily deployment (auto-loads instructions)
│ └──────────────────────────────────────────────────┘
│
├── instructions/ # Agent behavior definitions
│ ├── shogun.md # Shogun instructions
│ ├── karo.md # Karo instructions
│ ├── ashigaru.md # Ashigaru instructions
│ ├── gunshi.md # Gunshi (strategist) instructions
│ └── cli_specific/ # CLI-specific tool descriptions
│ ├── claude_tools.md # Claude Code tools & features
│ └── copilot_tools.md # GitHub Copilot CLI tools & features
│
├── lib/
│ ├── agent_status.sh # Shared busy/idle detection (Claude Code + Codex + OpenCode)
│ ├── cli_adapter.sh # Multi-CLI adapter (Claude/Codex/Copilot/Kimi/OpenCode)
│ └── ntfy_auth.sh # ntfy authentication helper
│
├── scripts/ # Utility scripts
│ ├── agent_status.sh # Show busy/idle status of all agents
│ ├── inbox_write.sh # Write messages to agent inbox
│ ├── inbox_watcher.sh # Watch inbox changes via inotifywait
│ ├── switch_cli.sh # Live CLI/model switching (/exit → relaunch)
│ ├── ntfy.sh # Send push notifications to phone
│ └── ntfy_listener.sh # Stream incoming messages from phone
│
├── config/
│ ├── settings.yaml # Language, ntfy, and other settings
│ ├── ntfy_auth.env.sample # ntfy authentication template (self-hosted)
│ └── projects.yaml # Project registry
│
├── projects/ # Project details (excluded from git, contains confidential info)
│ └── <project_id>.yaml # Full info per project (clients, tasks, Notion links, etc.)
│
├── queue/ # Communication files
│ ├── shogun_to_karo.yaml # Shogun → Karo commands
│ ├── ntfy_inbox.yaml # Incoming messages from phone (ntfy)
│ ├── inbox/ # Per-agent inbox files
│ │ ├── shogun.yaml # Messages to Shogun
│ │ ├── karo.yaml # Messages to Karo
│ │ └── ashigaru{1-8}.yaml # Messages to each Ashigaru
│ ├── tasks/ # Per-worker task files
│ └── reports/ # Worker reports
│
├── saytask/ # Behavioral psychology-driven motivation
│ └── streaks.yaml # Streak tracking and daily progress
│
├── templates/ # Report and context templates
│ ├── integ_base.md # Integration: base template
│ ├── integ_fact.md # Integration: fact-finding
│ ├── integ_proposal.md # Integration: proposal
│ ├── integ_code.md # Integration: code review
│ ├── integ_analysis.md # Integration: analysis
│ └── context_template.md # Universal 7-section project context
│
├── skills/ # Reusable skills (committed to repo)
│ ├── skill-creator/ # Skill creation template
│ ├── shogun-agent-status/ # Agent status display
│ ├── shogun-model-list/ # Model capability reference
│ ├── shogun-bloom-config/ # Bloom tier configurator
│ ├── shogun-model-switch/ # Live CLI/model switching
│ └── shogun-readme-sync/ # README sync
│
├── memory/ # Memory MCP persistent storage
├── dashboard.md # Real-time status board
└── CLAUDE.md # System instructions (auto-loaded)
This system manages not just its own development, but all white-collar tasks. Project folders can be located outside this repository.
config/projects.yaml # Project list (ID, name, path, status only)
projects/<project_id>.yaml # Full details for each project
config/projects.yaml: A summary list of what projects existprojects/<id>.yaml: Complete details (client info, contracts, tasks, related files, Notion pages, etc.)pathprojects/ is excluded from git (contains confidential client information)# config/projects.yaml
projects:
- id: client_x
name: "Client X Consulting"
path: "/mnt/c/Consulting/client_x"
status: active
# projects/client_x.yaml
id: client_x
client:
name: "Client X"
company: "X Corporation"
contract:
fee: "monthly"
current_tasks:
- id: task_001
name: "System Architecture Review"
status: in_progress
This separation lets the Shogun System coordinate across multiple external projects while keeping project details out of version control.
The npm version (npm install -g @anthropic-ai/claude-code) is officially deprecated. Re-run first_setup.sh to detect and migrate to the native version.
# Re-run first_setup.sh
./first_setup.sh
# If npm version is detected:
# ⚠️ npm version of Claude Code CLI detected (officially deprecated)
# Install native version? [Y/n]:
# After selecting Y, uninstall npm version:
npm uninstall -g @anthropic-ai/claude-code
MCP tools are lazy-loaded. Search first, then use:
ToolSearch("select:mcp__memory__read_graph")
mcp__memory__read_graph()
Agents should start with each CLI's unattended permission settings. This is handled automatically by shutsujin_departure.sh.
tmux attach-session -t multiagent
# Ctrl+B then 0-8 to switch panes
Do NOT use css/csm aliases to restart inside an existing tmux session. These aliases create tmux sessions, so running them inside an existing tmux pane causes session nesting — your input breaks and the pane becomes unusable.
Correct restart methods:
# Method 1: Run claude directly in the pane
claude --model opus --dangerously-skip-permissions
# Method 2: Karo force-restarts via respawn-pane (also fixes nesting)
tmux respawn-pane -t shogun:0.0 -k 'claude --model opus --dangerously-skip-permissions'
If you accidentally nested tmux:
Ctrl+B then d to detach (exits the inner session)claude directly (don't use css)tmux respawn-pane -k from another pane to force-reset| Command | Description |
|---|---|
tmux attach -t shogun | Connect to the Shogun |
tmux attach -t multiagent | Connect to workers |
Ctrl+B then 0–8 | Switch panes |
Ctrl+B then d | Detach (agents keep running) |
tmux kill-session -t shogun | Stop the Shogun session |
tmux kill-session -t multiagent | Stop the worker session |
first_setup.sh automatically configures set -g mouse on in ~/.tmux.conf, enabling intuitive mouse control:
| Action | Description |
|---|---|
| Mouse wheel | Scroll within a pane (view output history) |
| Click a pane | Switch focus between panes |
| Drag pane border | Resize panes |
Even if you're not comfortable with keyboard shortcuts, you can switch, scroll, and resize panes using just the mouse.
Keep the manager out of the work queue. Karo now has a sharper management boundary: it keeps the workflow moving, delegates execution to Ashigaru, routes review and RCA to Gunshi, and owns E2E only as plan reviewer and final judge.
.android-user/, .gradle-user/, and .toolchain/ are now ignored under android/Run the Shogun formation on OpenCode. OpenCode is now a first-class CLI alongside Claude Code, Codex, Copilot, and Kimi, with generated role agents, tmux-safe startup, provider-qualified model routing, and VPS-verified end-to-end operation.
scripts/build_instructions.sh generates .opencode/agents/*.md for Shogun, Karo, Ashigaru 1-7, and Gunshi from the same shared instruction source used by other CLIsconfig/opencode-permissions.yaml drives OpenCode frontmatter permissions so each role can read/write only the files it ownslib/cli_adapter.sh launches OpenCode with --agent <agent_id> and repository-pinned OPENCODE_TUI_CONFIG=config/opencode-tui.json for deterministic keybindingssettings.yaml can route OpenCode agents to models such as opencode/qwen3.6-plus-free or openrouter/openai/gpt-4o-minidashboard.md execution using OpenCodecapability_tiers in config/settings.yaml maps each model to its Bloom ceiling. L1-L3 → Spark, L4 → Sonnet 4.6, L5 → Sonnet 4.6 + extended thinking, L6 → Opus. Routing happens without agent restarts — the system finds the right idle agent by model capability/shogun-model-list skill — Complete reference table: all CLI tools × models × subscriptions × Bloom max level. Updated for Sonnet 4.6 and Spark positioning/shogun-bloom-config skill — Interactive configurator: answer 2 questions about your subscriptions → get ready-to-paste capability_tiers YAML/model opus promotions.claude/settings.json Stop hook. Eliminates the send-keys interruption problemget_startup_prompt() / get_startup_prompt_arg() for Session Start recovery, while OpenCode loads agent definitions through generated .opencode/agents/*.md filesscripts/slim_yaml.sh archives read messages and terminal commands, supports current top-level and legacy task YAML, and keeps --dry-run filesystem-safe for queue cleanup auditsNew model, same YAML. Add
model: gpt-5.3-codex-sparkto any Codex agent insettings.yaml.
--model flag support — build_cli_command() now passes settings.yaml model config to the Codex CLI via --model. Supports gpt-5.3-codex-spark and any future Codex modelsshutsujin_departure.sh now shows the actual model name (e.g., codex/gpt-5.3-codex-spark) instead of the generic effort levelShogun is no longer Claude-only. Mix and match 4 AI coding CLIs in a single army.
lib/cli_adapter.sh dynamically selects CLI per agent. Change one line in settings.yaml to swap any worker between Claude Code, Codex, Copilot, or Kimi--dangerously-bypass-approvals-and-sandbox for true autonomous execution. --no-alt-screen makes agent activity visible in tmux--full-auto is NOT fully automatic (it's -a on-request). Documented the correct flags for all 4 CLIs--silentinotifywait (zero-polling, instant wake-up). Fallback: tmux send-keys short nudge (text/Enter sent separately for Codex CLI). 3-phase escalation: standard nudge (0-2min) → Escape×2+nudge (2-4min) → /clear force reset (4min+). Linux FS symlink resolves WSL2 9P inotify issues.@agent_id) — Stable identity via tmux user options, immune to pane reordering-k flag) — All-Opus formation for maximum capabilityblockedBy) — Automatic unblocking of dependent tasksThis project is funded by sponsors. Your support keeps it free and actively maintained.
| Tier | Perks |
|---|---|
| ☕ $5/mo | Name in sponsors section |
| 🏯 $25/mo | Early access to new releases |
| ⚔️ $100/mo | Priority issue/PR response (48h) |
| 🎖️ $500/mo | Monthly 1:1 consultation |
| 🏛️ $1,000/mo | Logo in README + quarterly strategy session |
Issues and pull requests are welcome.
Based on Claude-Code-Communication by Akira-Papa.
One command. Eight agents. Zero coordination cost.
⭐ Star this repo if you find it useful — it helps others discover it.
💖 Sponsor this project to keep it free.
An AI-powered custom node for ComfyUI designed to enhance workflow automation and provide intelligent assistance
Deterministic multi-agent pipeline for end-to-end software development, orchestrating CLI-based AI tools (e.g. Gemini, C
💻 A curated list of papers and resources for multi-modal Graphical User Interface (GUI) agents.
Native macOS app to monitor Claude AI usage limits and watch your coding sessions live