Release history
ORCH releases
CLI orchestrator that manages Claude Code, Codex, and Cursor as a typed task queue with state machine (todo→in_progress→review→done), auto-retry, inter-agent messaging, and TUI dashboard.
All releases
24 shown
- 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
Fixed a retry dispatch race condition that could cause zombie processes and incorrect task‑failure stats.
Full changelog
Bug Fixes
- Retry dispatch race condition — fixed a race where a task could be re-dispatched from the retry queue after it had already succeeded.
dispatchTask()now checksisDispatchable(task.status)before spawning, retry queue processing validates task status before dispatch, and_handleRunFailureskips if the running entry was already cleaned up by the success handler. This prevents zombie processes, falsetasks_failedstats, and orphanedpreparingruns - GitHub star count on landing page — navbar and CTA now show live star count fetched from GitHub API
Tests
- 5 new tests covering retry race condition guards (dispatch of done/cancelled/failed tasks, retry queue skip, failure handler race)
- Adapter‑agnostic `orch init` auto‑detects installed AI adapters (claude, opencode, codex, cursor) and lets you select a default; agent shop templates use semantic model tiers (`balanced`, `capable`, `fast`) instead of hard‑coded Claude names.
- Goal completion guard blocks marking a goal as achieved while linked tasks are in `todo`, `in_progress`, `retrying`, or `review` states, reporting blocking tasks and allowing forced cancellation with `--force`.
Full changelog
Features
- Adapter-agnostic onboarding (#6) —
orch initnow auto-detects installed AI adapters (claude, opencode, codex, cursor) and lets you choose a default. Agent shop templates use semantic tiers (balanced,capable,fast) instead of hardcoded Claude model names, so agents are created with the correct model for your chosen adapter. Pass--adapter <name>to skip detection - Goal completion guard — goals can no longer be marked
achievedwhile linked tasks are still pending (todo,in_progress,retrying,review). Agents callingorch goal status <id> achievedwill see a clear error listing the blocking tasks. Use--forceto cancel pending tasks and force the transition (skipsin_progresstasks with live processes)
Fixes
- MCP skills filtered for non-Claude adapters — agent shop templates and TUI wizard now strip MCP skills (colon-format like
testing-suite:generate-tests) when the default adapter is not Claude, since MCP skills only work with the Claude CLI - Cursor agent probe false-positive —
orch initadapter detection no longer probes the genericagentbinary (too common on systems), onlycursor-agent - TUI refresh after status change — fixed a race condition where
entityListChanged()compared tasks byupdated_attimestamp, causing refresh no-ops when initial and updated tasks had identical timestamps
Tests
- 32 new tests: goal pending-tasks validation (10), model tier resolution (8), agent factory (5), adapter-agnostic init (4), MCP skill filtering (3), TUI refresh fix (2)
- TUI Observer Mode enters OBSERVING state with amber badge when another process holds the orchestrator lock
- Full cross‑process event visibility including agent output, file changes, errors, tool calls, lifecycle events, task status transitions, and orchestrator ticks
Full changelog
Features
- TUI Observer Mode — when another process holds the orchestrator lock (
orch run --watch,orch serve, or theorchskill in Claude Code), the TUI now enters OBSERVING mode instead of showing a dead IDLE screen - Full cross-process event visibility — agent output, file changes, errors, tool calls, lifecycle events, task status transitions, orchestrator ticks
- OBSERVING header badge — amber
● OBSERVINGchip
Fixes
- DiskObserver JSONL tailing —
state.runningkeys are taskIds, not runIds. Fixed to useentry.run_idfor JSONL paths
Improvements
- Byte-offset JSONL tailing with partial-line buffering
- Concurrent poll guard, stale-refresh dedup, 64KB remainder cap
Tests
- 15 new tests (unit + integration) + battle test (5 runs, 44 events)
Install: npm install -g @oxgeneral/[email protected]
- TUI Observer Mode enters OBSERVING state and mirrors real‑time activity from an external orchestrator via DiskObserver
- Full cross‑process event visibility includes agent output, file changes, errors, tool calls, lifecycle transitions, and task status updates
Full changelog
Features
- TUI Observer Mode — when another process holds the orchestrator lock (
orch run --watch,orch serve, or theorchskill in Claude Code), the TUI now enters OBSERVING mode instead of showing a dead IDLE screen. The newDiskObserverpollsstate.jsonand tails run JSONL files to deliver the same real-time activity stream as the in-process orchestrator - Full cross-process event visibility — observer mode shows agent output, file changes, errors, tool calls, lifecycle events (started/completed), task status transitions, and orchestrator ticks — identical to the native TUI experience
- OBSERVING header badge — amber
● OBSERVINGchip replaces the red error message, clearly indicating the TUI is connected to an external orchestrator
Improvements
- Byte-offset JSONL tailing — DiskObserver tracks per-run byte offsets with partial-line buffering, reading only new bytes each tick. Handles mid-line splits across poll boundaries correctly
- Concurrent poll guard — prevents race conditions when a poll tick takes longer than the poll interval
- Stale-refresh dedup — periodic state refresh in observer mode skips if an event-driven refresh already ran recently, avoiding redundant disk reads
- Remainder cap — partial JSONL line buffer is capped at 64KB to prevent unbounded memory growth on stalled writes
Tests
- 15 new tests: 11 unit tests for DiskObserver (event translation, byte offsets, partial lines, error handling, unsubscribe), 4 integration tests (full lifecycle, failed runs, concurrent runs, orchestrator restart detection)
- Battle test script simulating real cross-process orchestration with 5 runs and 44 events
Install: npm install -g @oxgeneral/[email protected]
- Headless `orch serve` daemon mode for 24/7 operation
- Structured JSON logging (`--log-format json`) for observability tools
- `--once` flag processes tasks and exits, supporting CI/CD workflows
Full changelog
orch serve — Headless Daemon Mode
Run ORCH as a background daemon for 24/7 operation on servers. Compatible with pm2 and systemd.
# On your VPS:
orch serve &
# From another terminal:
orch task add "Fix auth bug" -p 1 # daemon picks it up on next tick
orch status # see orchestrator state
Highlights
- Structured JSON logging — machine-parseable output for Datadog, Grafana Loki,
jq --oncemode — process all tasks and exit, designed for CI/CD pipelines (exit 0 = success, exit 1 = failures)- Graceful shutdown — SIGINT/SIGTERM waits for running agents, saves state, releases lock
- Heap monitoring — memory usage tracked in tick events for 24/7 stability
- pm2 / systemd ready — works as a managed process out of the box
New Options
orch serve [options]
--once Process current tasks and exit
--tick-interval <ms> Override polling interval (default: 10000)
--log-file <path> Tee logs to file in addition to stdout
--log-format <fmt> json | text (default: json)
--verbose Include agent:output events (noisy, off by default)
Example Output
{"ts":"2026-03-17T10:00:00Z","level":"info","event":"serve:started","mode":"watch","pid":12345,"poll_interval_ms":10000}
{"ts":"2026-03-17T10:00:01Z","level":"info","event":"task:status_changed","taskId":"tsk_abc","from":"todo","to":"in_progress"}
{"ts":"2026-03-17T10:00:01Z","level":"info","event":"agent:started","agentId":"agt_1","taskId":"tsk_abc","runId":"run_xyz"}
{"ts":"2026-03-17T10:00:15Z","level":"info","event":"agent:completed","runId":"run_xyz","agentId":"agt_1","success":true}
{"ts":"2026-03-17T10:00:15Z","level":"info","event":"task:status_changed","taskId":"tsk_abc","from":"review","to":"done"}
{"ts":"2026-03-17T10:00:20Z","level":"info","event":"orchestrator:tick","running":0,"queued":0,"heap_mb":9.2}
Files Changed
| File | Action |
|------|--------|
| src/cli/serve/types.ts | New — LogFormat, ServeEvent types |
| src/cli/serve/structured-logger.ts | New — StructuredLogger class |
| src/cli/serve/once-runner.ts | New — runOnce() for --once mode |
| src/cli/commands/serve.ts | New — serve command |
| src/application/orchestrator.ts | Modified — startWatch({ skipAutonomousSeeding }) option |
| src/bin/cli.ts | Modified — registered serve command |
Tests: 1649 (37 new) · TypeScript: clean · Build: clean
Full Changelog: https://github.com/oxgeneral/ORCH/compare/v1.0.4...v1.0.5
Orphaned tasks are now cancelled on restart preventing re‑execution of already committed work
Full changelog
Fixes
- Restart safety — orphaned tasks on restart are now cancelled instead of retried, preventing agents from re-executing already committed work
- FTUE parent leak —
orchin a new folder no longer picks up a parent directory's.orchestry/project - Activity feed — history now loads correctly on startup (sort by recency, filter cancelled runs, log errors instead of silently swallowing)
- IndexManager introduced with a single `_index.json` cache for all store list operations
- CLI startup parallelizes `requireInit()` and `configStore.read()`
- Output buffering consolidates `printTable`/`printKeyValue` writes into one `stdout.write` call
Full changelog
What's New
Reasoning & Cache Token Tracking
TokenUsage now tracks reasoning, cache_read, cache_write separately. Reasoning tokens are included in total; cache tokens are informational (subset of input, not double-counted). TUI header shows 🧠 icon when reasoning tokens are present.
Performance: IndexManager + Caching
- Extracted generic
IndexManager<T>with_index.jsoncache — list operations across all stores (TaskStore, AgentStore, ContextStore, GoalStore, MessageStore) now read 1 file instead of N - Parallel
requireInit()+configStore.read()during CLI startup - Buffered
printTable/printKeyValueoutput (singlestdout.writecall) - Orchestrator tick: parallel reconcile,
findProjectRootcache, lazy globalConfig - Removed redundant
requireInit()in read-only commands
Fixes
- IndexManager promise-chain mutex prevents TOCTOU race on concurrent reads/writes
rebuildIndexno longer deadlocks on re-entrant calls- Token code simplified:
createTokenUsageas single source of truth,TokenUsagetype reuse,useMemofor TUI header
Daemon Mode (design only)
Architecture doc for sub-10ms CLI responses via persistent background process — implementation coming in a future release.
Install / Upgrade:
npm i -g @oxgeneral/orch
🤖 Generated with Claude Code
Routine maintenance release for ORCH.
Changelog
Release v1.0.2
Routine maintenance release for ORCH.
Changelog
Release v1.0.1
- 5 adapter ecosystem (Claude, OpenCode, Codex, Cursor, Shell) enabling mixed AI provider teams
- Real-time TUI dashboard with tasks, agents, goals, activity feed and log filtering
- Smart prompt architecture with system/user split for Claude API caching
Full changelog
First stable release. Production-ready CLI orchestrator for AI agent teams.
Highlights
- 5 adapter ecosystem — Claude, OpenCode, Codex, Cursor, Shell — mix any AI providers in one team
- 1493 tests — comprehensive coverage across all layers
- Real-time TUI dashboard — tasks, agents, goals, activity feed, logs with filtering
- Smart prompt architecture — system/user split for caching, relevance-based context filtering
- Zero-config start —
npm i -g @oxgeneral/orch && orchauto-initializes
New in 1.0.0 (since 0.3.4)
Features
- OpenCode adapter — new
opencodeadapter for multi-provider agent support via OpenCode CLI (OpenRouter, DeepSeek, Gemini, etc.). JSONL event streaming with--format json, model pass-through asprovider/model - System/User prompt split — separate static system prompt (agent identity, rules) from dynamic user prompt (task details) for Claude API prompt caching (~40-60% fewer input tokens on repeat runs)
- Agent picker [adapter] tags — assignee lists in TUI now show
[claude],[opencode],[codex]etc. next to each agent for provider visibility - OpenCode model catalog — TUI wizard offers Default (use opencode config), Claude, Gemini, DeepSeek, and Big Pickle models when creating opencode agents
Bug Fixes
- OpenCode tool display — tool_call events from opencode now render as
⚙ grep(pattern: "...")instead of raw JSON in TUI logs - step_finish noise — intermediate
step_finishlifecycle events no longer pollute activity feed
Reverted Optimizations
- Context value truncation (500 char cap) — silently lost agent context
- Agent role truncation (80 char / first line) — agents couldn't see teammates' capabilities
- Goal task names cap (30 entries) — agents lost goal progress visibility
- Retry output tail reads (50 lines) — agents lost failure chain context
Design principle: token optimizations must not silently lose data that agents need. Filtering by relevance is OK; hard truncation is not.
Full Feature Set (cumulative)
Orchestration Engine
- Parallel agent execution with configurable concurrency (
max_concurrent_agents) - State machine:
todo → in_progress → review → donewithretryingandfailedbranches - Automatic retry with exponential backoff, stall detection, zombie process cleanup
- Priority-based dispatch (P1-first, goal-linked tasks prioritized)
- Scope-based file conflict prevention (
--scope,--depends-on) - Task dependencies with topological ordering
Adapters
- Claude — Claude Code CLI with
--system-promptfor prompt caching - OpenCode — OpenCode CLI with multi-provider support (OpenRouter, DeepSeek, Gemini)
- Codex — OpenAI Codex CLI with stdin prompt delivery
- Cursor — Cursor Agent CLI with auto-binary resolution
- Shell — arbitrary commands via
bash -lcwith env variable prompt
TUI Dashboard (Ink/React)
- 3-tab interface: Tasks, Agents, Goals with detail panels
- Real-time activity feed with type-based filtering (text, tools, errors, events)
- Logs view with agent/type multi-filter, duration-based queries
- Form wizards for agent/task/goal creation with inline validation
- Agent Shop — 15 pre-built agent templates
- Toast notifications, help overlay, keyboard shortcuts
- Clipboard image paste for task attachments
Smart Prompts
- LiquidJS template engine with conditional sections
- System/User split for Claude API prompt caching
- Relevance-based context filtering (top 15 of 340+ entries)
- Inter-agent messaging (
orch msg send/broadcast/inbox) - Goal context injection with progress tracking
- Autonomous goal mode with structured decomposition loop
CLI Commands
orch run/orch tui— start orchestrationorch task— add, list, show, edit, cancel, approve, rejectorch agent— add, list, show, edit, disable, shoporch goal— add, list, show, status, deleteorch team— create, list, show, deleteorch msg— send, broadcast, inboxorch context— set, get, list, delete (shared key-value store)orch logs— view run events with filteringorch config— view/edit orchestrator settingsorch doctor— health check for all adaptersorch update— check and install updates
Storage & Performance
- File-based storage (
.orchestry/) — YAML, JSON, JSONL, no database - Atomic writes with temp file + rename
- Parallel file reads with EMFILE batching (groups of 64)
- JSONL tail reads for OOM protection
- 3-layer event data truncation pipeline (16KB → 8KB → 4KB → 2KB)
- TUI batched message queue (80ms flush) with LRU caps
Tests
- 1493 tests across 83 test files
- Coverage: orchestrator resilience, adapter event parsing, template rendering, TUI components, wizard validation, state machine transitions, storage atomicity, process management
Routine maintenance release for ORCH.
Changelog
Full Changelog: https://github.com/oxgeneral/ORCH/compare/v0.3.3...v0.3.4
Routine maintenance release for ORCH.
Changelog
Full Changelog: https://github.com/oxgeneral/ORCH/compare/v0.3.2...v0.3.3
Routine maintenance release for ORCH.
Changelog
Full Changelog: https://github.com/oxgeneral/ORCH/compare/v0.3.1...v0.3.2
Routine maintenance release for ORCH.
Changelog
Full Changelog: https://github.com/oxgeneral/ORCH/compare/v0.3.0...v0.3.1
- Task attachments via `orch task add --attach` storing files in `.orchestry/attachments/`
- Clipboard image paste (Ctrl+V) across macOS/Linux/Windows in the TUI wizard
- Scrollable GoalDetailPanel with virtual scrolling and j/k navigation
Full changelog
What's New in 0.3.0
ORCH v0.3.0 brings major UX improvements for multi-agent workflows: task attachments, clipboard paste in TUI, goal-driven autonomous mode, and a significant performance overhaul.
✨ New Features
- Task attachments —
orch task add --attach <file>copies files into.orchestry/attachments/<taskId>/and displays them in TUI with a 📎 indicator - Clipboard image paste (Ctrl+V) — paste images directly from system clipboard in the task creation/edit TUI wizard; cross-platform (macOS/Linux/Windows)
- Goal-driven autonomous mode — agents in
[auto]tasks get a structured loop: decompose → execute → track progress → mark goal achieved; agents see full goal context (title, linked tasks, progress report) - Scrollable GoalDetailPanel — virtual scrolling with j/k navigation, section dividers, task summary counts, and progress report display
- Skills display — agent detail panel now shows configured skills list
⚡ Performance
| Metric | v0.2.0 | v0.3.0 | Improvement |
|--------|--------|--------|-------------|
| Per-test speed | 52ms | 15ms | 3.5× faster |
| Task dispatch latency | 30s | <500ms | 60× faster |
| Build time | 2.7s | 1.35s | 2× faster |
| CLI startup | 75ms | 41ms | 1.8× faster |
| TUI memory | OOM after 27min | Stable | Fixed |
Key optimizations: state.claimed Array→Set, ScopeIndex pre-computation, isBlocked O(d×1) taskMap lookup, lazy chalk/process-manager imports, parallel reconcile with Promise.all, adaptive Vitest thread pool.
🐛 Bug Fixes
- Tick interval 30s→10s — faster task dispatch
- GoalDetailPanel useMemo fix — prevents stale closure
- FormWizard paste mock types — correct union type
- 22 bugs fixed from architecture audit (4 P1 critical, 10 P2 high, 8 P3 medium)
🏗️ Architecture
SectionDividerreused from DetailPanel (no duplicate GoalDivider)TASK_STATUS_COLOR / GOAL_STATUS_COLORextracted tocolors.tswithRecord<Status, string>type safetyGoalContextin template engine — agents get full goal info in Liquid templatesclipboard-service.tswith platform detection and type-safe API
🧪 Tests
987 tests (up from 851 in 0.2.0) — new coverage: clipboard paste, GoalDetailPanel, ScopeIndex, attachments, orchestrator perf benchmarks, lazy chalk init.
Quick Start
npm install -g @oxgeneral/orch --registry=https://npm.pkg.github.com
cd ~/your-project && orch init
orch # opens TUI dashboard
Full changelog: https://github.com/oxgeneral/ORCH/compare/v0.2.4...v0.3.0
Routine maintenance release for ORCH.
Changelog
Full Changelog: https://github.com/oxgeneral/ORCH/compare/v0.2.3...v0.2.4
Routine maintenance release for ORCH.
Changelog
Full Changelog: https://github.com/oxgeneral/ORCH/compare/v0.2.0...v0.2.3
- `orch update` command to check and install latest version from npm with optional check‑only mode
- Background update notifications showing newer versions after a 4‑hour cache
- Lazy command loading cutting startup time ~40% by dynamically importing commands
Full changelog
Changelog
0.2.0 (2026-03-13)
New Features
orch updatecommand — check for updates and install the latest version from npm (orch update --checkfor check-only mode)- Background update notifications — CLI silently checks npm registry (4h cache) and shows a notification when a newer version is available
- Lazy command loading — commands are dynamically imported on demand, reducing CLI startup time ~40%
- Light/Full container split — read-only commands (task, agent, status, logs, config, context, msg, goal, team) use a lightweight container without loading adapters, ProcessManager, or LiquidJS
--helpfast path —orch --helpandorch --versionskip container initialization entirely
Bug Fixes
- OOM fix (runtime) — truncate event data before event bus and JSONL writes; replace unbounded
readlinewith backpressured Buffer-based stream reader - OOM fix (startup) — replace N×M file reads (277 tasks x 376 runs = 104K reads) with single
listAll()pass; add 50MB JSONL file size guard - cancelTask/forceStopAgent lock bug — both methods now auto-acquire lock via
withTemporaryLockwhen called standalone (previously always threwLockConflictErrorfrom fresh Orchestrator) - task cancel for running tasks —
orch task cancelnow usesorchestrator.cancelTaskforin_progresstasks (kills agent process, cleans state) - State machine violation — remove
in_progress → doneshortcut, enforce mandatoryreviewstep - Truncated JSON in TUI logs — add
extractSummaryFromTruncatedregex fallback for truncated event data [undefined]in TUI — fix fallback to[${type ?? role}]$EDITORwith args —code --waitno longer fails with ENOENT--sincein logs — no longer loads entire JSONL into memory- NO_COLOR compliance — respect
NO_COLORenv var per no-color.org spec - Done tasks showing wrong time — use
updated_atinstead ofcreated_at - Race condition in TUI — move
setTaCursorColout ofsetTaLinesupdater - Process spawn — add
proc.unref()after detached spawn to unblock parent exit isProcessAlive— return true on EPERM (process alive, no permission)- Retry backoff — fix off-by-one using
attempts - 1for correct backoff start - Scope overlap — fix
patternsOverlapfalse negative for sibling paths - CJK/emoji titles — fix
prepareWorktreeempty branch name sanitizeId— reject forbidden characters instead of silently strippingappendJsonl— truncate data to PIPE_BUF (4096) for atomic O_APPEND writescancelTaskabort — call.abort()on AbortController before deleteforceTaskToReview— now clearsagent.current_task
Performance
- Progressive history loading — parallel I/O in
onLoadHistorywith batched setState (80ms flush) readJsonlTail— read last N records from JSONL without loading entire file- EMFILE protection — batched
Promise.allreads in groups of 64 - Vitest threads pool — test suite runs ~12% faster
Architecture
buildLightContainer/buildFullContainer— split DI container for fast startupreadLinesgenerator — Buffer-based with backpressure, replacesreadline.createInterfaceserializeEventData— DRY event serialization with 3-layer truncationresolveFailureStatus— extracted from duplicated retry logiccreateTokenUsagefactory — ensurestotal = input + output- Atomic cache writes — update-check uses temp file + rename
Tests
- 851 tests (up from 737 in 0.1.0)
- New coverage: process-manager, streamEvents, lazy routing, task cancel, progressive loading, context, token usage, retry status
0.1.0 (2026-03-12)
Initial release.
- Inter‑agent messaging with direct, broadcast, and inbox commands (`orch msg`)
- Agent Teams creation, lead assignment, and TUI wizard for member selection
- Goals tab and CRUD via `orch goal` with pause/resume support
Full changelog
v0.1.0 — First Public Release (2026-03-12)
61 commits | 74 files changed | +7,246 / -1,016 lines | 737 tests
Major Features
- Inter-agent messaging & team coordination — agents can send direct messages, broadcast, and coordinate within teams (
orch msg send/broadcast/inbox) - Agent Teams — create teams, assign leads, multiselect members via TUI wizard; team section headers and badges in Agents tab
- Goals as first-class entities — dedicated Goals tab in TUI, goal CRUD via
orch goal, pause/resume with autonomous task lifecycle management - Autonomous agent mode — goal-directed work generation; agents auto-create subtasks, track progress, and work in a continuous loop until goal is achieved
- Default Agent Creator —
orch initnow bootstraps an Agent Creator agent out of the box - Global config & settings wizard — activity filter presets, interactive config via TUI
- Log filter bar redesign — split into two logical lines for better UX
Bug Fixes
- Paused goals still executing tasks — now disables autonomous mode and cancels pending tasks on pause; re-enables on resume
- Agents not picking up new tasks — added reactive dispatch on task completion (500ms instead of 30s polling wait)
- Scope overlap dispatch — blocks conflicting tasks instead of just warning
- Orphaned child processes — kills process group (
-pid) instead of single PID - TUI flicker — global animation tick,
React.memo,useMemofor header stats - Inbox expiry bug, logs
--sincetruncation, stale closures, duplicate team headers, layout overlap
Performance
- Reactive dispatch on
task:createdand task completion — agents pick up work immediately - Parallel I/O in logs, cancel operations, and task reads (
Promise.all) readEventsTailfor efficient log reading without loading entire JSONL files
Code Quality
- Agent prompts rewritten — removed 120+ lines of duplicated goal-handling instructions; moved to conditional template section
- Agent Creator prompt translated to English for global use
AUTONOMOUS_LABELconstant used everywhere (no hardcoded strings)- 8 simplify passes — deduplicated wizard code, centralized glyphs, extracted helpers, removed dead code
isDispatchable()— single source of truth for dispatchable task statuses
Documentation
- SPEC.md updated: module structure, dispatch sort, event types (11→31), new sections (Goal, Team, Message)
- USER_STORIES.md audited: 13→142 stories with test coverage, 6 new epics (EP-22..EP-27)
- README updated: 737 tests badge, GitHub stars badge, Community section
Tests
- 737 tests (736 green, 1 known flaky lock-concurrency)
- New test suites: goal-service autonomous mode (21 tests), scope overlap dispatch, default Agent Creator, process signals, readJsonl corrupt lines