Skip to content

Releases: oxgeneral/ORCH

v1.0.20

02 Apr 21:52

Choose a tag to compare

Bug Fixes

  • Goal completion deadlock — agents could not mark their own goal as achieved because 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 → achieved transition — goals in paused state can now be directly marked as achieved without requiring a resume first. State machine updated: paused → active | achieved | abandoned
  • TUI force-complete — pressing C on a goal in TUI now uses force: true to 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 → achieved with side effects, paused → achieved with force + pending tasks

v1.0.19

02 Apr 19:00

Choose a tag to compare

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 checks isDispatchable(task.status) before spawning, retry queue processing validates task status before dispatch, and _handleRunFailure skips if the running entry was already cleaned up by the success handler. This prevents zombie processes, false tasks_failed stats, and orphaned preparing runs
  • 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

02 Apr 16:32

Choose a tag to compare

Features

  • Adapter-agnostic onboarding (#6) — orch init now 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 achieved while linked tasks are still pending (todo, in_progress, retrying, review). Agents calling orch goal status <id> achieved will see a clear error listing the blocking tasks. Use --force to cancel pending tasks and force the transition (skips in_progress tasks 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-positiveorch init adapter detection no longer probes the generic agent binary (too common on systems), only cursor-agent
  • TUI refresh after status change — fixed a race condition where entityListChanged() compared tasks by updated_at timestamp, 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

23 Mar 21:44

Choose a tag to compare

Features

  • TUI Observer Mode — when another process holds the orchestrator lock (orch run --watch, orch serve, or the orch skill 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 ● OBSERVING chip

Fixes

  • DiskObserver JSONL tailingstate.running keys are taskIds, not runIds. Fixed to use entry.run_id for 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

23 Mar 21:28

Choose a tag to compare

Features

  • TUI Observer Mode — when another process holds the orchestrator lock (orch run --watch, orch serve, or the orch skill in Claude Code), the TUI now enters OBSERVING mode instead of showing a dead IDLE screen. The new DiskObserver polls state.json and 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 ● OBSERVING chip 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

16 Mar 21:25

Choose a tag to compare

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
  • --once mode — 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

15 Mar 13:42

Choose a tag to compare

Fixes

  • Restart safety — orphaned tasks on restart are now cancelled instead of retried, preventing agents from re-executing already committed work
  • FTUE parent leakorch in 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

15 Mar 12:57

Choose a tag to compare

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.json cache — 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/printKeyValue output (single stdout.write call)
  • Orchestrator tick: parallel reconcile, findProjectRoot cache, lazy globalConfig
  • Removed redundant requireInit() in read-only commands

Fixes

  • IndexManager promise-chain mutex prevents TOCTOU race on concurrent reads/writes
  • rebuildIndex no longer deadlocks on re-entrant calls
  • Token code simplified: createTokenUsage as single source of truth, TokenUsage type reuse, useMemo for 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

15 Mar 11:00

Choose a tag to compare

Release v1.0.2

v1.0.1

14 Mar 16:57

Choose a tag to compare

Release v1.0.1