ORCH
AI Agents & AssistantsOpen‑source orchestration that lets AI agents (Claude, Codex, Cursor, etc.) coordinate themselves so developers can set goals and let the system run without manual babysitting.
Features
- Automatically deploy and manage multiple AI agents as a coordinated team
- Zero‑infrastructure setup – one npm install launches a TUI dashboard
- Supports Claude, Codex, Cursor and any CLI tool in parallel workflows
- Self‑contained goal decomposition, task assignment, execution tracking and review
Recent releases
View all 24 releases →- Unified text input system replacing FormWizard text-step, InputPanel, and command-bar with shared architecture
- New editing keyboard shortcuts (Ctrl+A/E, Ctrl+K/U/W/Y, Cmd+Backspace, etc.)
Full changelog
Refactoring
- Unified text input system — replaced three separate text input implementations (FormWizard text-step, InputPanel, command-bar) with a shared architecture inspired by Claude Code:
text-cursor.ts— immutableCursorclass with NFC normalization andIntl.Segmenter-based grapheme navigation (CJK, emoji, Cyrillic, combining marks)hooks/useTextInput.ts— keyboard logic hook with undo stack (Ctrl+Z / Cmd+Z), kill ring (Ctrl+K/U/W/Y), word navigation (Option+Left/Right), and all terminal editing shortcutscomponents/TextInput.tsx— display component with sliding viewport that keeps cursor visible on text overflow
Bug Fixes
- Cursor jumping on keyboard language switch — NFC normalization in Cursor constructor prevents position drift when IME sends NFD-encoded characters during layout switching
- Text overflow at screen edge — single-line text inputs now use a sliding viewport instead of truncating from the end, keeping the cursor always visible
- Undo stack over-drain — debounced undo snapshots captured current state, causing Ctrl+Z to pop identical text with no visible effect; fixed by skipping one matching snapshot before applying undo
- React anti-pattern in textarea —
setTaCursorColwas called inside asetTaLinesupdater function; moved out to prevent potential double-fire in concurrent mode - Timer leak on unmount — undo debounce timer is now cleared via
useEffectcleanup when the component unmounts mid-debounce
Performance
- Zero-cost cursor navigation — arrow keys, Home/End, word navigation reuse existing grapheme segments via
Cursor._withPos()factory instead of re-runningIntl.Segmenteron unchanged text - Single-pass insert —
Cursor.insert()usesgraphemeSegments()once instead ofgraphemeLength()+ constructor re-segmentation - Render-path optimization —
TextInputreadscursor.beforeSegs/cursor.afterSegsdirectly, avoiding join + re-segmentation on every render
New Features
- Editing shortcuts — Ctrl+A/E (start/end), Ctrl+K/U/W (kill operations), Ctrl+Y (yank), Ctrl+Z / Cmd+Z (undo), Cmd+Backspace (kill to start), Ctrl+B/F (left/right), Ctrl+D (delete forward), Ctrl+H (backspace), Home/End keys
Tests
- 96 new tests (1829 → 1923):
text-cursor.test.ts(61 tests) — grapheme segmentation, NFC normalization, CJK/emoji/Cyrillic handling, cursor navigation, editing, kill operations, display widthtext-input.test.tsx(33 tests) — E2E via ink-testing-library: FormWizard text-step input/submit, cursor navigation, backspace, all Ctrl shortcuts, Cyrillic/emoji/CJK input, undo, step transitions, validation
Fixed parallel runs being falsely marked as failed and tasks assigned by agent name now resolve correctly.
Full changelog
Bug Fixes
- Parallel runs race condition (#8) — when multiple agents completed in parallel via
orch serve, successful runs were falsely marked asfailed. Root cause: reconcile detected dead PIDs beforehandleRunSuccessacquired the mutex, treating clean exits as crashes. Fix:activeCollectorsguard prevents reconcile from interfering with tasks that have an active event collector. Also fixes orphaned runs stuck instatus: runningwhen the running entry was already cleaned up - Assignee name resolution (#7) — tasks assigned by agent name (e.g.
--assignee "Sam Altman") instead of agent ID were silently accepted but never dispatched.TaskService.resolveAssignee()now normalizes agent names to IDs at creation and assignment time, with clear error messages for unknown agents.findBestAgent()also matches by name as a fallback for legacy data
Tests
- 15 new tests: activeCollectors guard (reconcile skip, crash detection, cleanup, orphaned run finalization), assignee name→ID resolution (create, assign, unknown name/ID, backward compatibility, findBestAgent name fallback)
Fixed goal completion deadlock and allowed paused goals to transition directly to achieved.
Full changelog
Bug Fixes
- Goal completion deadlock — agents could not mark their own goal as
achievedbecause the agent's running[auto]task blocked the pending-tasks guard. Autonomous tasks are now excluded from the check since they are the mechanism for achieving the goal, not a blocker paused → achievedtransition — goals inpausedstate can now be directly marked asachievedwithout requiring a resume first. State machine updated:paused → active | achieved | abandoned- TUI force-complete — pressing
Con a goal in TUI now usesforce: trueto cancel cancellable pending tasks, with an informative status message. Previously it would silently fail if any non-terminal tasks existed
Tests
- 4 new tests: autonomous task exclusion from pending check, non-auto task still blocks,
paused → achievedwith side effects,paused → achievedwith force + pending tasks
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.