Releases: oxgeneral/ORCH
Releases · oxgeneral/ORCH
v1.0.20
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
v1.0.19
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)
v1.0.18
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)
v1.0.13
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/orch@1.0.13
v1.0.12
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/orch@1.0.12
v1.0.5
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 stateHighlights
- 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: v1.0.4...v1.0.5
v1.0.4
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)
v1.0.3 — Performance & Token Tracking
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
v1.0.2
Release v1.0.2
v1.0.1
Release v1.0.1