Run several CLI AI agents at once — one terminal per account — from a desktop workflow editor. Fan one prompt out to every agent, wait at a single join, then hand the collected results to the next stage explicitly.
Field guide · Getting started · Features · Changelog · Roadmap
Every screenshot on this page is the real renderer captured with inert fixture data —
npm run promo:capturelaunches no account, agent, or PTY and reads no production journal. Frames are captured at 2x with the UI enlarged, and each claim below is shown as a crop, because a full 1600px window scaled into this column drops 9px labels under 6px. Dimensions and SHA-256 hashes are recorded indocs/assets/promo/manifest.jsonand re-verified bynpm run check.
Drag blocks to build the workflow: pick a directory, open an agent session per
account, send one prompt to all of them, and put a single Join Agents
barrier after the fan-out. The join tracks every workflow-owned session prompted
since the previous wait and reports live N / M ready. A timeout or a session
exiting early stops downstream blocks by default instead of silently continuing
with partial work.
Results are explicit, not scraped. A send block can issue a bounded result contract to each lane; the join captures the complete framed payloads in stable lane order; a later send may attach that bundle as clearly labelled untrusted reference data. Partial, empty, or truncated bundles never reach a downstream agent by default.
Every run is journaled: immutable workflow identity, trigger, ordered block
visits, terminal status, and result metadata. Snapshots and result bodies are
encrypted with Electron safeStorage and decrypted only on request; raw
terminal history is never journaled. Interrupted runs can be inspected —
never replayed. See docs/resume-design.md for why
that line is drawn where it is.
Full-window frames behind each crop: editor · join and handoff · run journal.
Subscription CLI agents meter usage in a rolling 5-hour window that starts at
your first message. Schedule a trivial ping at 05:00 and the window spans
05:00–10:00 — so when you sit down at 09:00, a fresh window opens at 10:00 and
one working morning spans two windows' worth of usage. The Usage-window
pre-warm template ships this pattern ready to run; the
full walkthrough covers tuning the ping time and
pre-warming several accounts with a single Send to All → Join Agents stage.
Each session is "which agent, as which account", and the guarantee behind that pairing is stated rather than implied:
| Level | What it means | How a session starts |
|---|---|---|
| L1 · routed | A Codex alias owned by ai-agent-entrypoint, which builds the child environment |
agent-entrypoint.ps1 codex shell <alias> |
| L2 · env-only | A local profile that points the agent at its own state directory (CLAUDE_CONFIG_DIR, GROK_HOME, …) for that child process |
powershell.exe with env overrides |
| L0 · native | No account selected | plain powershell.exe |
- Routed accounts are discovered, not configured here. The app asks
ai-agent-entrypointfor its Codex aliases and launches through it. It is never a source of account truth. - Local profiles cover the CLIs nobody manages yet. Claude Code, Grok, and Gemini get a per-account state directory and one login inside that session. That is a weaker guarantee than routing, and the UI says so — it is never described as isolation.
- No credentials are stored by this app. Profile environments accept paths and flags only; anything token-shaped is rejected with an explanation, and account paths are stripped before they reach the UI, the log, or an export.
- Routed launches fail closed. An alias that cannot be resolved refuses to start rather than quietly falling back to the native login.
Sessions appear as tabs above the terminal and keep running while hidden. The quick-send bar targets the current session, every session of one agent, or all of them at once, typing concurrently so one slow target does not serialize the broadcast.
Windows 10/11 x64, Node 22+, and the CLI agents you want to drive already installed and logged in.
git clone https://github.com/snowyukitty/agent-orchestrator.git
cd agent-orchestrator
npm install
npm start # run from source
npm run build # package to dist/ and verify package privacyNo prebuilt release is published yet — see Project status.
- Handoff framing is not prompt-injection isolation. Bundles are labelled untrusted and delimiter-escaped, but they still enter the next agent's prompt.
- Journal evidence is not automatic resume. An interrupted run yields a metadata assessment and an optional protected inspection, never an executable plan.
- Idle-only completion observes silence, not success. Use Output contains when a stage needs proof of a semantic response.
- Workflows are ordered block programs with
Loop/End Looppairs, not a general-purpose DAG.
The full list, with the reasoning, is in
docs/limitations.md.
| Page | What it covers |
|---|---|
| Field guide (live) | Interactive walkthrough of accounts, fan-out, join, and integrity |
| Getting started | First run, first workflow, first scheduled job |
| Feature reference | Everything that ships, and why it is built that way |
| Architecture and safety model | Process boundaries, assurance levels, persistence |
| Interrupted-run resume design | The accepted evidence-without-replay contract |
| Five-hour window | The scheduling trick, tuned |
| Limits and unfinished work | Stated boundaries |
| Promo standard · Website plan | How the outward face is allowed to be made |
| Security policy · Contributing | Reporting and verification |
npm run check # syntax-check every JS file, then validate the static guide
npm test # main-process unit tests + headless renderer self-test
npm run smoke # Electron startup/shutdown cleanup path
npm run visual # normal UI with disposable resume-evidence scenarios
npm run promo:capture -- --promo-output=docs/assets/promo # refresh the frames above
npm run icons # regenerate icon.png + icon.ico from src/assets/icon-source.png
npm run verify # the complete checkpoint gate used by CI
npm run verify:routed -- --confirm-live # opt-in gate: two real routed accountsRepository conventions, the routing authority boundary, and what must stay a
manual check live in AGENTS.md.
Version: 0.4.0 · Platform: Windows x64 · Runtime: Electron 43 ·
Release history: CHANGELOG.md
Pre-1.0 and unreleased: no tagged release, no published binary, and no license chosen yet, so all rights are reserved for now. Read the code, run it from source, and open an issue — but do not assume redistribution rights until a license file lands.



