Three install paths, easiest first:
- Conversational install via skill (Recommended) —
/endenza:installwalks you through every step with rapid-fire decisions and idempotent checks. ~10 minutes from zero to running. - Marketplace (target — when claude-ensemble flips public). One-line install via
/plugin install, then/endenza:maestroto boot. - Manual — clone + run scripts yourself. The current path while the repo is private.
1. Conversational install (Recommended)
After cloning the repo OR installing via marketplace, start a fresh Claude Code chat in any directory and say:
/endenza:install
(Or naturally: “install Endenza” / “set up Endenza” / “first-run setup”.)
The skill walks you through 11 phases with rapid-fire decisions at each fork:
| Phase | What it does |
|---|---|
| 0 | Sanity check (Python 3, git, jq, Xcode CLI tools) |
| 1 | Create ~/.claude/orchestrator/ directory layout if missing |
| 2 | Initialize state.json — asks for max_concurrent_autopilots, weekly_token_reset_at, daily/weekly report times |
| 3 | Merge PreToolUse + SessionStart hooks into ~/.claude/settings.json |
| 4 | Optional: copy Kevin’s canonical memory file set as a starting point |
| 5 | Register the 8 standard scheduled tasks (morning briefing, dashboard update, weekly report, etc.) |
| 6 | Optional: build + install the native macOS Endenza.app menu bar |
| 7 | Optional: create the dashboard PWA repo + GitHub Pages |
| 8 | Optional: walk through Cloudflare Access setup (~30 min) |
| 9 | Optional: open the PWA Terminal page on phone for the mobile-control surface |
| 10 | Run bin/status.sh for full verification — every line should be ✅ |
| 11 | Boot the Maestro or onboard a first project Agent |
The skill is idempotent — re-running picks up where it left off via a .install-progress.json checkpoint. Safe to interrupt and resume.
2. Marketplace install (future, post-public-flip)
/plugin marketplace add KiwiMaddog2020/claude-ensemble
/plugin install endenza@claude-ensemble
/exit
Open a fresh chat. You’ll see [ORCHESTRATOR] hard-enforcement active at the top. Then run /endenza:install for the conversational setup, or skip straight to:
/endenza:maestro # in any chat → becomes your Maestro
/endenza:agent-onboard # in a project repo → becomes that project's Agent
The marketplace plugin self-installs hooks, skills, and registers slash commands. The conversational install (path 1) handles the post-plugin-install configuration.
3. Manual install (current path)
The repo is private during pre-public-flip. To install today:
1. Clone the orchestrator
mkdir -p ~/.claude
git clone git@github.com:KiwiMaddog2020/claude-ensemble.git ~/.claude/orchestrator
cd ~/.claude/orchestrator
2. Pre-flight check
macOS / Linux:
bash plugins/endenza/bin/preflight.sh
Windows (Git Bash):
bash plugins/endenza/bin/preflight.sh
Windows (PowerShell):
.\plugins\endenza\bin\preflight.ps1
This verifies: git, gh (optional), python3, jq (optional), claude CLI. Fixes any blockers before continuing.
3. Configure the Claude Code hook
Open ~/.claude/settings.json (create if missing) and add:
{
"hooks": {
"PreToolUse": [
{
"matcher": "mcp__(computer-use|Claude_Preview|Claude_in_Chrome)__.*",
"command": "/Users/<you>/.claude/orchestrator/plugins/endenza/bin/orchestrator_lock.sh",
"timeout": 10
}
],
"SessionStart": [
{
"matcher": "startup|resume|clear",
"command": "/Users/<you>/.claude/orchestrator/plugins/endenza/bin/orchestrator_lock_healthcheck.sh"
}
]
}
}
(Windows uses ${USERPROFILE}\.claude\orchestrator\plugins\ensemble\bin\orchestrator_lock.ps1 instead.)
4. Seed state.json
cat > ~/.claude/orchestrator/state.json <<'EOF'
{
"schema_version": 1,
"mode": "orchestrated",
"mode_transitioning": false,
"active_autopilot_chat": null,
"active_vm": null,
"lock_acquired_at": null,
"lock_intent": null,
"cascade": null
}
EOF
5. Verify with self-test
macOS / Linux:
bash plugins/endenza/bin/test_lock_race.sh # expect 10/10 rounds passed
bash plugins/endenza/bin/self_test.sh # all green
Windows:
.\plugins\endenza\bin\test_lock_race.ps1 # expect 10/10 rounds passed
.\plugins\endenza\bin\self_test.ps1 # all green
6. Become the Maestro
Open a fresh Claude Code chat. Paste the contents of plugins/endenza/bootstraps/maestro.txt as your first message. The chat self-onboards as your Maestro.
7. Onboard your first project as an Agent
In a different project’s repo:
cd ~/Projects/my-project
claude
In the chat, paste the contents of plugins/endenza/templates/onboarding_prompt.md. The chat walks through repo discovery → interview → charter → status file → identity → reports back to the Maestro.
8. Optional — wire phone access
The PWA Terminal page (/terminal.html) is the supported way to drive autopilot from a phone. Set up Cloudflare Tunnel (see docs/operations/CLOUDFLARE_ACCESS_SETUP.md) so the PWA + control-panel server are reachable from a public URL, then paste your DASHBOARD_TOKEN into the Terminal page on your phone. From there you can fire / kill / chat without SSH or extra apps.
Termius / Tailscale / mobile_dispatch.sh were the v0 mobile-control path; they were removed in v1.0.
9. Optional — install the dashboard
bash plugins/endenza/bin/setup-dashboard.sh
Idempotently creates your <your-username>/ensemble-dashboard GitHub repo (public; for marketplace listing), enables Pages, wires the Dashboard Update routine, and prints your dashboard URL. After this, your project state is glanceable at https://<you>.github.io/ensemble-dashboard/.
Icon note: If the Endenza wordmark icon does not appear in the menu bar automatically, drop the
.icnsfile frombin/endenza-app-icons/into/Applications/Endenza.app/Contents/Resources/AppIcon.icnsand relaunch the app.
For interactive control (toggle flags, fire autopilot, embedded chat), start the local server:
# macOS / Linux:
bash bin/control-panel-server.sh &
# Or via launchd (auto-restart, runs across reboots):
launchctl bootstrap gui/$UID launchd/com.kevin.endenza.control-panel.plist
The dashboard auto-detects the local server and shows interactive buttons when you visit it on the same machine or via your Cloudflare Tunnel URL.
Companion repos (synced from canonical)
| Repo | What |
|---|---|
KiwiMaddog2020/claude-ensemble (this) |
Source of truth. Plugin contents. |
KiwiMaddog2020/ensemble-config |
Cross-machine sync layer (bin-mac/ ↔ bin-win/ parity, shared docs/templates/memory). |
KiwiMaddog2020/ensemble-dashboard |
Public dashboard (auto-generated 3× daily). |
KiwiMaddog2020/website-agent-starter |
Friend-shareable bootstrap for the website-agent. |
If you’re contributing, install all four; the sync expectations are documented in CONTRIBUTING.md.
Uninstall
# Remove hooks from ~/.claude/settings.json
# Remove launchd plist (if installed)
launchctl bootout gui/$UID/com.kevin.endenza.control-panel 2>/dev/null
launchctl bootout gui/$UID/com.kevin.endenza.autopilot-trigger 2>/dev/null
launchctl bootout gui/$UID/com.kevin.orchestrator.stale-lock-sweeper 2>/dev/null
# Remove the orchestrator dir
rm -rf ~/.claude/orchestrator
Uninstall is intentionally simple — no system-level state lives outside ~/.claude/orchestrator and a few launchd plists.
Next steps
- BYOK keystore — bring your own Anthropic key:
docs/getting-started/BYOK_GUIDE.md - Cloudflare Tunnel — expose the terminal + dashboard remotely:
docs/getting-started/CLOUDFLARE_SETUP.md - Smoke runbook — verify the platform end-to-end:
docs/getting-started/SMOKE_RUNBOOK.md
Troubleshooting
| Symptom | Likely cause | Fix |
|---|---|---|
[ORCHESTRATOR] hard-enforcement hook MISSING |
hook not in ~/.claude/settings.json |
re-add (step 3) |
[ORCHESTRATOR] hard-enforcement hook INSTALLED but not registered |
path in settings.json doesn’t match where the script lives | fix the path |
| Autopilot session hangs at “## Session” with no output | claude CLI version mismatch with --add-dir variadic parsing |
upgrade claude CLI to ≥ 2.1.120; the -- separator is now in place |
| Lock held forever after a crashed session | stale lock | run bash bin/endenza_actions.sh kill (or .\bin-win\stale_lock_sweeper.ps1) |
| All scheduled tasks fail to run | state.json missing |
re-seed (step 4) |
Dashboard regen fails with chats/ does not exist |
first install — no Agents onboarded yet | onboard at least one Agent (step 7) |
For everything else: paste the exact error to your Maestro chat. Endenza’s troubleshooting cookbook lives in plugins/endenza/TROUBLESHOOTING.md.