- optimus-fleet disabled — Temporarily disabled the shipped
optimus-fleetskill so it no longer forces strictoptimus_orchestratepassthrough whilewait_for_completion=truecan exceed MCP request timeouts and fail withMCP error -32001. - Fleet recovery guidance — The disabled skill now directs agents to use manual todo decomposition and direct sub-agent dispatch until the underlying MCP-safe async orchestration behavior is fixed and validated.
- Async delegation defaults —
delegate_task_asyncanddispatch_plan_asyncnow return promptly by default instead of holding the MCP request open until terminal state; callers must opt in withwait_for_completion: true. - Runtime proxy E2E stability — Runtime-backed worker execution now starts runs via
/api/v2/agent/startand polls status, avoiding long synchronous HTTP requests that could black-hole fleet workers. - Runtime restart races — Hardened runtime readiness checks and retry handling so connection-loss races after daemon restart do not immediately fail worker execution.
- Runtime async admission —
/api/v2/agent/startnow schedules prompt execution on the next tick so large prompts cannot block the start response. - ACP busy-state tracking — ACP adapters now report busy immediately during invocation setup, closing a concurrency-test race.
- ADO work item listing — Implemented Azure DevOps work item listing for unified VCS operations and fixed result-limit handling.
- Added regression coverage for non-blocking async tool defaults, ACP busy-state setup, ADO work item listing, runtime proxy polling, and async runtime start behavior.
- Verified direct runtime HTTP E2E with
github-copilot / gpt-5.5and a realdelegate_task_asyncworker smoke task to averifiedterminal state.
- Fleet runtime bootstrap stability — Hardened automatic runtime startup so fleet workers prefer workspace-local bundles, pass the active workspace to the HTTP runtime, and emit actionable startup diagnostics when the runtime cannot become ready.
- Infrastructure failure handling — Classified runtime/proxy failures as infrastructure failures and skipped normal self-heal loops that depend on the same broken runtime path.
- Runtime capacity controls — Added v2 runtime admission control for synchronous and asynchronous generic runs, including overflow routing, 429 capacity errors, and async slot release on terminal status.
- Path containment hardening — Tightened async plan output-path validation to avoid Windows prefix containment bypasses such as sibling
.optimus2directories.
- Fleet diagnostics consistency — Aligned
optimus_statusand/api/v2/healthengine reporting so user-level configured engines are visible alongside built-in engines. - ACP/runtime contracts — Consolidated duplicated ACP session typing and clarified adapter reuse behavior for multi-session ACP process pooling.
- Added regression coverage for runtime bootstrap candidate selection, startup diagnostics, infrastructure failure self-heal guards, v2 capacity helper behavior, engine diagnostics, and async plan path containment.
- Verified a real Optimus fleet smoke sample through
optimus_orchestrateto averifiedterminal state.
- Agent-friendly runtime guidance — Added explicit shipped guidance across system instructions, master onboarding, and default scaffold prompts so upgraded workspaces immediately understand the current runtime model: a per-user multi-workspace HTTP daemon routed by
workspace_pathandX-Optimus-Workspace.
- HTTP per-user multi-workspace daemon completion — Hardened the user-level runtime into the current release target: a shared HTTP daemon with explicit workspace-scoped routing, stricter runtime readiness checks, and overflow workers that preserve the same per-request workspace model instead of binding themselves to a single repo.
- Runtime admission and queryability —
/api/v1/agent/startnow behaves more like a strict admission boundary: runs are persisted before async execution proceeds, immediate status recovery is more reliable, and runtime metadata remains visible even when the task manifest has not fully caught up yet. - Workspace root normalization — Nested project paths and linked worktrees now normalize to the correct workspace root before runtime bootstrap, status lookups, and generic runtime operations, reducing repo-bound leakage in the daemon layer.
- Added targeted runtime regression coverage for per-request workspace enforcement, immediate run lookup after admission, bootstrap candidate resolution, and worktree-root normalization.
- End-to-End Async Task Orchestration: Standardized
wait_for_completionwith timeouts across all async MCP tools (optimus_orchestrate,delegate_task_async,dispatch_plan_async). Added mandatory post-execution artifact verification rules to prevent agents from hallucinating task results and abandoning background tasks.
- Agent-native intent classification: Added
intent_signalstomcp_spartan-swarm_optimus_orchestrateschema to allow LLMs to actively classify intent instead of relying on regex detection, improving internationalization (e.g. Chinese requests).
- Delegate-first fleet guidance — Updated the shipped README, architecture docs, scaffold instructions, onboarding guidance, and MCP tool descriptions so broad or multi-step requests now clearly start with
optimus_orchestrate, whiledelegate_task_asyncis reserved for already-scoped single-worker execution anddispatch_plan_asyncfor explicit dependency graphs.
- Blocked task dependency healing —
TaskManifestManager.reapStaleTasks()now synchronously reconciles blocked tasks so downstream work no longer hangs forever when an upstream dependency failed, disappeared, or was already verified. Added machine-readable failure classifications for dependency and watchdog timeout outcomes, plus regression tests covering dependency failure propagation and automatic unblock recovery.
- optimus-fleet wrapper skill — Added
optimus-fleetskill providing a deterministic MCP dispatch layer. Enables structured orchestration patterns with explicit fleet routing for multi-agent coordination. (feat(skill): add optimus-fleet wrapper skill for deterministic MCP dispatch)
- optimus_orchestrate rename — Renamed fleet orchestrator tool to
optimus_orchestratefor consistency with the MCP tool naming convention. (refactor(mcp): rename fleet orchestrator to optimus_orchestrate)
- Windows async spawn proxy timeout (P1) — Fixed
Runtime server proxy timed out after 330000mson Windows. The proxy timeout was based onactivityTimeoutMs(300s inactivity window) instead ofheartbeatTimeoutMs(600s total task budget). Multi-step agent tasks (reading files, writing code, building TypeScript) easily exceed 5.5 minutes total elapsed time even if individual ACP messages arrive within 300s. Fix increases the proxy budget to 630s (heartbeatTimeoutMs + 30s grace), resolving Issue #568. (#568) - Runtime server process detection — Extracted
isRuntimeServerProcess(),shouldRouteViaRuntimeServer(), andresolveRuntimeProxyTimeoutMs()as standalone testable functions; addedOPTIMUS_RUNTIME_SERVER=1env var to the runtime server child process for reliable detection without process name inspection. - Proxy double-settle guard — Added
settled/finishReject/finishResolveguards inexecuteViaRuntimeServerto prevent bothreq.timeoutandproxyTimerfrom firing on the same request.
- Models now optional —
available_modelsinavailable-agents.jsonis no longer required. Users only need to configure engines; the engine CLI selects its default model automatically. Explicitavailable_modelsstill works as a whitelist for backward compatibility. - Engine-default health tracking — Health tracking and cross-engine fallback now work in engine-default mode (no model specified), using a
"default"sentinel for consistent health keys. - T2 auto-repair on stale models — When a T2 role template has an obsolete
model:that the CLI no longer supports, the system automatically clears it and retries with the engine default instead of quarantining the role.
- delegate_task_async startup timeout — Fixed
TASK_STARTUP_TIMEOUTwhere async workers failed silently because the HTTP runtime server wasn't ready. The MCP server now awaitsensureRuntimeServer()before spawning async workers. - Silent worker death — Async worker stderr is now logged to
.optimus/logs/worker-{taskId}.loginstead of being swallowed bystdio: "ignore". Spawn errors are immediately recorded as task failures. - Spawn path validation —
spawnAsyncWorkernow validatesmcp-server.jsexists before spawning, providing an immediate actionable error instead of a 120-second timeout. - Pre-flight validation for empty models — Fixed
available_models: []being treated as a valid whitelist (empty array is truthy). Now correctly treated as "no whitelist".
- Azure CLI path fallback — ADO auth now resolves
azvia explicit executable lookup and Windows Azure CLI install paths, so VCS tools still work when the MCP process starts with an incomplete PATH. - Actionable Azure CLI diagnostics — When Azure CLI still cannot be found, the error now reports the executable resolution diagnostics and checked fallback locations instead of only saying
'az' is not recognized'.
- Azure DevOps timeout resilience — Added explicit timeouts for
az account get-access-tokenand Azure DevOps HTTP requests so a degraded ADO or Azure CLI session no longer hangs the whole VCS tool path. - VCS config diagnostics — Added
vcs_config_diagnosticsplus richer VCS failure output so users can see the resolvedvcs.json, configured provider, git remote, and provider-cache status when troubleshooting. - Provider cache correctness — VCS provider caching now keys on workspace, resolved config path, and git remote to avoid stale provider reuse after repo/config changes.
- Windows ACP process cleanup —
AcpAdapter.cleanup()now usestaskkill /T /Ffor shell-spawned ACP processes on Windows so Copilot/Claude child processes do not survive after the wrapper shell exits. - Runtime shutdown hygiene — HTTP runtime shutdown now drains
AcpProcessPoolonSIGTERM/SIGINT, and startup cleans up the previous runtime PID tree before binding the port. - Pool exit cleanup —
AcpProcessPoolnow shuts down all adapters on host process exit, preventing stale warm-pool workers from accumulating across sessions.
- Cursor IDE support — Added
.cursor/rules/optimus.mdcfor Cursor IDE multi-agent orchestration, bringing Cursor in line with VS Code/Copilot IDE support. - Copilot launcher scripts — Added
copilot-optimus(bash),copilot-optimus.cmd(Windows CMD), andcopilot-optimus.ps1(PowerShell) convenience launcher scripts that start Copilot with the Optimus MCP config.
- delegate_task compat test — Added
src/test/delegate-task-compat.test.tsto validate thatdelegate_taskis properly advertised as a blocking compatibility wrapper and enforcesworkspace_path.
- package-lock.json version sync — Fixed
optimus-plugin/package-lock.jsonversion stale at 2.17.13; synced to match current 2.22.1/2.23.1 release.
- Added PATH note comments to
.copilot/mcp-config.jsonand.mcp.jsonto guide ACP executable path debugging. - Pruned stale MCP delegate proxy and user-level runtime sections from
runtime-integrationskill docs. - Added
nulto.gitignore(Windows filesystem artifact).
- Runtime server preheat — MCP startup now preheats the runtime server and detects spawn crashes early, preventing cold-start latency and surfacing failures before the first delegate call.
- Cold start concurrency — Adapter pool reuses initializing adapters instead of spawning duplicates, eliminating race conditions on parallel cold-start requests.
- Cold start concurrency — Pool no longer replaces initializing adapters with new ones. Multiple concurrent tasks on a cold pool now share the same spawn+init via
_readyPromisemutex instead of racing with duplicate processes. - Init timeout — Increased ACP handshake timeout from 15s to 30s for cold start resilience.
- Pool preheat API —
AcpProcessPool.preheatEngines()enables eager warm-up of engine processes at startup.
- User-level resource sharing —
resolveOptimusPathnow falls back to~/.optimus/for shared resources (config, roles, skills, dist, memory). Resolution: project → main worktree →~/.optimus/. No more duplicating roles/skills/config across projects. - Upgrade all projects —
optimus upgradedefaults to upgrading all registered projects. Use--singlefor current-dir only.
- role-registry.json — Fixed hardcoded path to use
resolveOptimusPath(was missing worktree + user-level fallback). - mcp-servers.json — Now resolves via
resolveOptimusPathwith user-level fallback.
- Upgrade all projects —
optimus upgradenow defaults to upgrading all registered projects in~/.optimus/projects.json. Use--singlefor current-directory only.
- User-level HTTP Runtime — Runtime server is now cross-project. Start once with
node ~/.optimus/dist/http-runtime.js --port 3100, serve all workspaces via per-requestworkspace_path. No--workspacerequired. - MCP auto-start uses user-level path —
~/.optimus/dist/http-runtime.jsis the primary auto-start candidate, enabling any project's MCP server to find the runtime.
- Crash guard — HTTP runtime catches
uncaughtException/unhandledRejectionwithout crashing. - Session concurrency limit —
AcpAdapterenforcesmaxConcurrentSessions(default: 10) to prevent OOM. - MCP proxy auto-reconnect — Detects
ECONNREFUSED/ECONNRESET, auto-restarts runtime server and retries.
- Auto-start TDZ — Fixed
cwdused before declaration inensureRuntimeServer. - No silent fallback — Throws actionable error when runtime server unavailable instead of silently falling back to direct ACP spawn.
- v2 API workspace warning — Logs warning when
workspace_pathis missing (custom engines won't resolve).
- Updated
runtime-integrationskill with User-Level Runtime section and cross-project examples. - Updated
system-instructions.mdwith runtime server dependency note.
- Crash guard — HTTP runtime server now catches
uncaughtExceptionandunhandledRejectionwithout crashing, keeping the server alive for subsequent requests. - Session concurrency limit —
AcpAdapterenforcesmaxConcurrentSessions(default: 10) to prevent unbounded session growth on a single ACP process. - MCP proxy auto-reconnect — When runtime server connection drops (
ECONNREFUSED/ECONNRESET), the MCP proxy automatically restarts it and retries once.
- Auto-start TDZ — Fixed
cwdvariable used before declaration inensureRuntimeServer, preventing runtime server auto-start from working. - No silent fallback — When runtime server fails to start, throws actionable error instead of silently falling back to direct ACP spawn (which fails for copilot).
- Manifest cross-process safety —
saveManifestnow uses PID+timestamp-unique temp files, retry with exponential backoff on WindowsEPERM/EACCES/EBUSY, and graceful degradation (never crashes the process). Fixes randomEPERM: operation not permitted, rename task-manifest.json.tmpcrashes when MCP server, runtime server, and cron patrol write concurrently.
- Multi-session ACP concurrency — AcpAdapter now supports multiple concurrent sessions on a single ACP process. Replaces the
_busysingle-task lock with per-session context routing via_activeSessionsMap. Notifications are routed bysessionIdwith backward-compatible fallback for single-session mode. - Runtime server proxy for delegates — When running as MCP server (inside a host agent), all engine executions are transparently routed through the runtime HTTP server (
:3100). This eliminates the nested Copilot auth conflict and decouples ACP process lifecycle from the MCP server. - Initialization mutex —
_readyPromiseprevents double-spawn when multiple concurrent invocations hit a cold adapter simultaneously. - Per-session activity timers — Each concurrent session has its own timeout watchdog instead of a shared global timer.
- Copilot delegate auth — Fixed
Authentication requirederror when delegating togithub-copilotengine from within a Copilot CLI host. Requests are now proxied through the runtime server which runs as an independent process. - Pool ephemeral fallback removed —
AcpProcessPoolno longer spawns ephemeral processes for concurrent requests; instead reuses the persistent adapter's multi-session capability. - v2 API workspace_path — Generic runtime API now passes
workspace_pathto engine resolver, enabling custom engines (e.g.qwen-code) configured inavailable-agents.json.
- Copilot ACP auth — Only strip classic PATs (
ghp_prefix) from child env; preserve OAuth (gho_) and fine-grained (github_pat_) tokens to prevent "Authentication required" errors (b6909ed) - ACP shell mode — Use shell mode only for non-
.exeexecutables on Windows to prevent double-quoting and spawn errors (d0bceea) - ACP PATH injection — Inject Node.js bin directory into ACP child process PATH on Windows so
node-based executables resolve correctly (0f67a45)
- Structured task notifications —
delegateTaskSingle()returnsTaskDelegationResultwith status, tokens, timing, and metadata instead of plain text.check_task_statusnow shows execution metrics table. - Coordinator synthesis gate — Research tasks with
synthesis_required: trueauto-extract key findings before unblocking dependent implementation tasks, preventing understanding loss in agent handoffs. - Lifecycle hooks — 16 hook points across task lifecycle, execution pipeline, and MCP dispatch with veto support, best-effort error isolation, and 3 built-in hooks (metrics, logging, slow-execution).
- Prompt cache optimization — Parallel workers share byte-identical prompt prefixes via
cache_control: ephemeral, saving ~70-80% of repeated token processing in council dispatch. - Dynamic skill prompts — SKILL.md files support template syntax (
{{role}},{% if engine == "claude-code" %},{% include %}) for context-aware prompt generation. Static skills unchanged (zero overhead). - Memory staleness warnings — Entries older than 1 day get a warning: "claims about code behavior may be outdated."
- Memory snapshot initialization —
.optimus/memory/snapshots/enables team onboarding with pre-populated project conventions.
- Path security hardening — New
pathSecurity.tsmodule with null byte rejection, URL-encoded traversal detection, Unicode fullwidth character detection, and case-insensitive comparison for Windows/macOS.
- ACP executable resolution — Multi-strategy path resolver scans common npm install locations as fallback when system PATH doesn't include ACP executables. Auto-updates to absolute path on resolution.
- ACP config completeness — Fixed missing
protocolandacpblocks in user-levelavailable-agents.jsonthat caused wrong executable/protocol fallback.
- Lifecycle hooks system — Task execution pipeline now supports lifecycle hooks for pre/post task processing, enabling custom automation at each task phase.
- Shared
isPidAliveutility — Consolidated 3 duplicate PID-alive checks (TaskManifestManager, meta-cron-engine, worker-spawner) into a single shared utility. - Optimized engine health fallback —
pickHealthyFallbackCandidatenow uses early return for confirmed-healthy candidates instead of building a full sorted array.
- Claude Code auto-accept permissions —
optimus go --cli claudenow launches with--dangerously-skip-permissionsby default for a frictionless autonomous workflow.
- Claude
--resumeEsc fallback — When usingoptimus go --cli claude, pressing Esc in the session picker now starts a new session instead of exiting, matching Copilot CLI behavior.
- Clarified upgrade scope —
optimus upgradenow states more explicitly that it upgrades the current workspace and its local launchers/config. The completion message and docs also explain thatnpx github:cloga/optimus-code upgradepicks up the latest published CLI package itself, includingoptimus go.
- CLI update notices —
optimusnow checks the latest GitHub release on a cached interval and prints an upgrade reminder when a newer version is available. Cached notices continue to work offline, andoptimus serveskips the check to keep MCP stdio output clean.
- Prune stale
optimus goproject entries — The global project registry now self-heals on load by removing paths that no longer exist or no longer contain.optimus, so deleted smoke and temp workspaces stop polluting the project picker.
- Clearer upgrade reminder —
optimus upgradenow ends with a direct reminder to runnpx github:cloga/optimus-code upgradein other installed workspaces so they pick up the latest fixes.
- Published
optimus upgrade --disable-project-available-agentsmigration flag — Upgrades can now disable an active project-level.optimus/config/available-agents.jsonoverride by renaming it to a non-active backup (for example.optimus/config/available-agents.project.disabled.json) and reactivating the user-level~/.optimus/config/available-agents.jsonas the authoritative engine registry.
- Init handshake timeout and config-driven adapters — Added init handshake timeout to prevent startup hangs, made adapters config-driven, and reduced timeouts for faster failure detection. (a1cf103, #538)
- Resolve
acp_process_crashedacross all engines — Fixedacp_process_crashederror propagation so all engine adapters report crash events consistently. (ab3a5f1, #538)
- User-level
available-agentsis now the default config source —optimus initnow seeds~/.optimus/config/available-agents.json(orOPTIMUS_USER_AVAILABLE_AGENTS_PATH) as the primary engine registry. Projects receive.optimus/config/available-agents.project.sample.jsonas an opt-in override sample instead of an always-active override.
- Engine config hierarchy and fallback hardening — Runtime engine resolution now layers built-in defaults under user-level and project-level config, preserves nested object overrides without concatenating arrays, skips malformed user config with a warning, and retains raw fallback for malformed project config during static validation.
optimus upgradenow preserves the new default model cleanly — upgrades sync the user-level engine registry, keep existing project-level overrides when present, and refresh the project-level sample when no active override exists.
- All MCP configs now use absolute paths — Copilot CLI 1.0.13 auto-discovers
.vscode/mcp.jsonbut cannot resolve${workspaceFolder}variables, causingConnection closed. All generated MCP configs (.vscode/mcp.json,.copilot/mcp-config.json,.mcp.json) now use absolute paths forcommand,args, andenvvalues. These files are gitignored so absolute paths don't affect other users.
- Reverted
--disable-mcp-serverinoptimus go— The v2.17.2 fix causedspartan-swarmto show as disabled (⊘) because--disable-mcp-servertakes precedence over--additional-mcp-config. Reverted to simple--additional-mcp-configinjection, which per Copilot CLI docs "overrides any installed MCP server configuration with the same name."
- MCP duplicate registration via IDE auto-connect —
optimus gonow passes--disable-mcp-serverfor each server defined in.copilot/mcp-config.jsonbefore re-injecting via--additional-mcp-config. This prevents duplicatespartan-swarmregistration when Copilot CLI auto-connects to a running VS Code instance that already loaded.vscode/mcp.json.
- MCP config
nodeENOENT on Windows —optimus init/upgradenow writes the absolute Node.js path (viaprocess.execPath) into generated MCP configs instead of barenode. Fixesspawn node ENOENTwhen MCP hosts like Copilot CLI spawn the server withoutshell: true. Fixes #533.
optimus_statusMCP tool — New tool to verify Optimus Swarm activation. Returns version, workspace, skills/roles/engines count, system instructions and memory status. Provides actionable next steps.- Enhanced system instructions (v3) — Injected
copilot-instructions.md,CLAUDE.md, andcursor.mdcnow include a MANDATORY FIRST ACTION directing agents to calloptimus_statusimmediately, ensuring reliable Optimus activation across all clients.
- Security: 8 npm vulnerabilities resolved — Fixed path-to-regexp ReDoS (high), hono prototype pollution, brace-expansion hang, and esbuild/vite/vitest chain (5 moderate).
npm auditnow reports 0 vulnerabilities. - Council capacity test fixed — The pre-existing
council-capacity.test.tsfailure ("rejects malformed config entries") is now resolved. AddedreadRawEngineEntries()fallback for lenient config reading when strict parsing rejects malformed entries. 245/245 tests now pass. - Meta-cron patrol concurrency (#511) — Fixed safety timer leak in
meta-cron-engine.tsthat allowed overlapping patrol runs. All exit paths now properly clear bothcheckIntervalandsafetyTimer. - Agent output_path enforcement (#382) — Added post-execution artifact rescue in
worker-spawner.tsthat detects when agents write to self-chosen filenames instead of the specifiedoutput_path, and auto-corrects by moving the content.
- worker-spawner.ts modularization — Extracted 989 lines (37% reduction) into two new modules:
src/mcp/engine-resolver.ts(1023 lines) — engine config, model validation, protocol resolution, health tracking, ACP auto-discoverysrc/mcp/t3-tracker.ts(80 lines) — T3 usage tracking, role name sanitization, usage log persistence- All functions re-exported from
worker-spawner.tsfor backward compatibility
- vitest upgraded from 2.1.9 to 3.2.4
- Agent Runtime streaming (SSE) — New
GET /api/v1/agent/runs/:id/streamendpoint provides real-time Server-Sent Events during agent execution. Emitstext,thinking,status,error, anddoneevent types with sequence numbers for reconnection support. - Streaming pipeline —
executePrompt()now accepts anonChunkcallback that receives streaming chunks from ACP adapters. Events flow from engine → AcpAdapter → genericExecutor → worker-spawner → in-memory event buffer → HTTP SSE. - SDK streaming —
OptimusRuntimeclient gainsstreamRun()async generator andrunAndStream()convenience method for consuming SSE events from TypeScript/JavaScript. - Event buffer — Per-run in-memory ring buffer (2000 events) with subscriber notification, sequence-based replay for reconnection, and automatic TTL cleanup (5 min after completion).
- Agent Runtime state file lifecycle sync —
worker-spawnernow appendsrunning,completed, andfailedhistory entries to.optimus/state/agent-runtime/run_*.jsonduring task execution. Previously, state files remained stuck atpendingeven after successful completion. Fixes #532.
- Runtime
frontmatterReferenceError — Fixed barefrontmatteridentifier inworker-spawner.tsthat causedReferenceError: frontmatter is not definedin orchestrator code paths. The variable is now properly scoped asroleFrontmatterfrom the parsed role template. Fixes #531. - TypeScript baseline errors resolved — Fixed
outputSchematype mismatch ingenericExecutor.ts.npm run check-typesnow passes with zero errors.
optimus godefault--resume— Restored--resumeas a default argument for both Copilot and Claude adapters, which was accidentally dropped during the multi-CLI refactor in v2.16.24.
- Multi-CLI
optimus go—optimus gonow supports both GitHub Copilot CLI and Claude Code CLI via a client adapter layer. Use--cli copilotor--cli claudeto override per-launch. - Per-project CLI preference — Each project can store a
preferredCliin~/.optimus/projects.json. Set viaoptimus go set-cli <project> <client>. - Global default CLI — Set via
optimus go set-default-cli <client>. Resolution order:--cliflag → projectpreferredCli→ global default →copilot. - Client adapter architecture — New
go-clients.jsmodule provides extensible adapter definitions for each supported CLI (executable, config path, injection flags).
- Lightweight CLI installer — New
scripts/install-cli.ps1andscripts/install-cli-remote.ps1install only theoptimus golauncher (~25KB) to~/.optimus/cli/, auto-adding to user PATH. No roles, agents, skills, or dist bundles needed.- One-line remote install:
irm https://raw.githubusercontent.com/cloga/optimus-code/master/scripts/install-cli-remote.ps1 | iex - Local install:
.\scripts\install-cli.ps1 - Uninstall:
.\scripts\install-cli.ps1 -Uninstall
- One-line remote install:
optimus go --resumeby default —optimus gonow automatically passes--resumeto Copilot CLI, enabling session resumption without manual flags.
- Removed redundant dependencies — Cleaned up 4 unused packages from
package.json:lucide-react(frontend icon library, never imported in CLI codebase)node-fetch(no code references; Node 18+ has nativefetch)@types/marked(for marked v5; project uses v17 which ships its own types)@types/strip-ansi(for strip-ansi v3; project uses v7 which ships its own types)
optimus gocross-project Copilot launcher — Added a newoptimus gocommand that launches GitHub Copilot CLI for any registered Optimus workspace without requiring a manualcd.- Global project registry — Optimus now stores registered workspaces in
~/.optimus/projects.json, supports alias-aware project lookup, and can scan the home directory plus its direct child folders for.optimus/workspaces. - Automatic workspace registration —
optimus initandoptimus upgradenow auto-register the current project in the global registry so it is immediately available tooptimus go. - Regression coverage for project registry — Added tests covering project registration, scan behavior, and Copilot launcher argument construction.
- Azure DevOps
az-cliauth support —AdoProvidernow respectsado.authfrom.optimus/config/vcs.json. When configured as\"az-cli\", Optimus falls back toaz account get-access-tokenif no PAT environment variable is present. - ADO authorization header handling — PAT-based auth continues to use
Basic, while Azure CLI access tokens now use the correctBearerauthorization header. - ADO auth regression coverage — Added tests to verify
az-clifallback works and that PAT environment variables still take precedence when present.
- Copilot CLI launcher generation —
optimus initandoptimus upgradenow generate repo-local Copilot CLI launchers (copilot-optimus.ps1,copilot-optimus.cmd, andcopilot-optimus) that automatically preload the project's.copilot/mcp-config.json. - Copilot CLI documentation — Updated the setup guide to explain that Copilot CLI should be started via the generated launcher so project-level MCP configuration is applied consistently.
- Architecture: Runtime Decoupling —
delegateTaskSingle()now callsgenericExecutor.executePrompt()instead of directly invokingAcpAdapter. This establishes the correct layering: AcpAdapter → genericExecutor (infra) → Harness → Optimus Orchestration (business) → Transport (MCP/HTTP).- Output validation runs once inside
executePrompt()(previously duplicated in both worker-spawner and genericExecutor) - Session ID, usage metrics, and stop reason are returned via
ExecuteResultinstead of reading adapter properties directly - Doom loop detection and metadata backfill now use
execResultproperties instead ofadapter.lastSessionId/adapter.lastUsageLog/adapter.lastStopReason - No behavioral changes — all 219/220 tests pass (1 pre-existing failure)
- Output validation runs once inside
- Harness Engineering: Mechanical Linter — Deterministic (non-LLM) validation of Optimus artifacts. Lints role templates (frontmatter fields, naming, engine/model validity, thin template detection), skill files (structure, naming), artifact outputs (type/status/author/date format), and engine-model cross-consistency against
available-agents.json. IncludeslintWorkspace()for batch validation. - Harness Engineering: Entropy Patrol — Periodic workspace health checks designed for meta-cron execution. 5 built-in checks: structural lint (roles + skills), stale T1 agent detection (>7 days), orphaned skill references, quarantined role alerts, and memory file health. Generates formatted markdown reports.
- Harness Engineering: Output Validation Gate — Agent output is now validated before being written to artifact files. Built-in rules catch: empty output, schema non-compliance, premature completion declarations, unfinished code markers (TODO/FIXME), and error trace leaks. Validation runs on both v1 (delegate_task) and v2 (generic API) paths.
- Harness Engineering: Doom Loop Detection — Tracks per-session file edit counts. When an agent edits the same file 3+ times, a warning is logged suggesting the agent reconsider its approach. Inspired by LangChain's LoopDetectionMiddleware.
- Harness Engineering: Self-Verification Prompt — All delegated agents now receive a mandatory verification checklist appended to their prompt, requiring them to re-read the task spec, verify output completeness, and check for errors before submitting. Controllable via
verification_levelin role frontmatter (strict|normal|skip).
- Generic Agent Runtime v2 API — New decoupled API layer (
/api/v2/) that provides prompt-based agent execution without Optimus-specific concepts (no role, skill, workspace, or tier system required).POST /api/v2/agent/run— Synchronous prompt → result executionPOST /api/v2/agent/start— Async run initiationGET /api/v2/agent/runs/:id— Status polling with resultPOST /api/v2/agent/runs/:id/cancel— Run cancellationGET /api/v2/health— Health check with available engines list
- Built-in engine defaults —
github-copilotandclaude-codeengines work out-of-the-box withoutavailable-agents.jsonconfiguration. - Structured output via v2 — Pass
output_schema(JSON Schema) to get validated structured responses. - Generic executor (
genericExecutor.ts) — Direct AcpProcessPool-based execution, no TaskManifestManager dependency. - Generic runtime service (
genericRuntime.ts) — In-memory run tracking with lightweight envelope format.
- Artifact file normalization — When structured output is extracted from prose/markdown wrapping, the clean JSON is now written back to the
output_pathartifact file. This ensures downstream consumers reading the file directly get machine-readable JSON, consistent with the APIresultfield.
- Runtime envelope metadata —
runtime_metadatanow includesusage(token counts:input_tokens,output_tokens) andstop_reason(why the engine stopped, e.g.end_turn,max_tokens). Captured from ACPpromptResultfor both Copilot and Claude Code engines. - ACP structured output preference — ACP adapter now prefers
promptResult.content(structured response) over streamingagent_message_chunkchunks. Falls back to streaming when engines don't populate content (current behavior for both Copilot and Claude Code).
- Structured output JSON extraction — When engines return JSON wrapped in markdown prose/code fences, Optimus now extracts the JSON payload before validation. Supports
```json ```code fences and brace-matching extraction. Previously this causedinvalid_structured_outputerrors even when the engine produced correct JSON. - 100% agent-friendly error coverage — All remaining error paths now include actionable
Fix:guidance:- Worker-spawner: engine resolution failure and model pre-flight errors
- ACP adapter: generic fallback error now suggests recovery steps
- System defaults skip verbose configs —
applyEngineDefaults()now detects old-format configs (with explicitprotocol,cli, orcapabilitiesfields) and skips default injection to avoid conflicts.
- CAPIError detection — Copilot backend API errors (
CAPIError: 400/500) now caught by fail-fast error detection in worker-spawner and classified with actionable fix guidance in HTTP runtime. - Automation policy fix hint —
buildAutomationCompatibilityFixHintno longer incorrectly suggests downgrading tocontinuation: "single"forclaude-code. Now recommends runningupgradeto refresh system defaults. - New HTTP error category —
automation_policy_invalid(422) with guidance to runupgradeto get system defaults.
- Simplified
available-agents.json— Config now only containsavailable_models,acp.path, andtimeout. ACP protocol, warm pool, and autopilot mode are injected as system defaults byapplyEngineDefaults()in code — no need for users to configure them. - Engine system defaults are defined per-engine in
ENGINE_SYSTEM_DEFAULTS(worker-spawner.ts) and deep-merged at config load time.
- HTTP runtime auto-scaling — When the primary instance reaches max concurrent runs, overflow instances are automatically spawned on adjacent ports. Overflow instances auto-shutdown after idle timeout (default: 60s). Total capacity =
MAX_CONCURRENT * (1 + MAX_OVERFLOW)= 20 by default.OPTIMUS_MAX_OVERFLOWenv var controls max overflow instances (default: 3)OPTIMUS_OVERFLOW_IDLE_TIMEOUTenv var controls idle shutdown in seconds (default: 60)- Primary instance acts as reverse proxy, routing overflow requests transparently
/api/v1/healthreports all instances with per-instanceactive_runsandidle_msX-Optimus-Instanceresponse header identifies which instance handled the request
- ACP-only mode — All engines (
github-copilot,claude-code,qwen-code) now useprotocol: "acp"exclusively. CLI adapters (GitHubCopilotAdapter,ClaudeCodeAdapter) are deprecated and emit a warning if triggered. All agent interactions go through ACP warm pool with autopilot mode.
- HTTP timeout protection —
server.requestTimeout = 0to prevent Node.js from killing long-running agent connections (default was 5 min, agent tasks can run 10-30 min). - Concurrency control —
MAX_CONCURRENT_RUNS = 5(configurable viaOPTIMUS_MAX_CONCURRENTenv var). Returns429 concurrency_limitwith actionable fix when at capacity. - Health endpoint enhanced —
/api/v1/healthnow reportsactive_runsandmax_concurrentfor observability.
- Actionable HTTP runtime errors — Every error response now includes a
fixfield with concrete recovery steps. Error JSON format:{ error: { code, message, fix } }. Covers all 15+ error codes across input validation, run lifecycle, engine errors, and route matching. invalid_statenow shows actual status — Resume errors includecurrent status: <status>so callers know why the operation was rejected.- 3 new error classifications —
role_quarantined,skill_preflight_failed,engine_resolution_failedare now properly classified at the HTTP layer instead of falling through to genericinternal_error.
- ACP autopilot mode & model selection — ACP adapter now sends
configOptions(mode + model) viasession/new, attemptssession/configureandsession/setConfigurationwith graceful fallback. Ensures delegated tasks run in autopilot mode when available. - AgentAdapter options interface —
invoke()accepts optional{ model, autopilot, maxContinues }to control session behavior per-task.
- Agent-friendly error messages — All ACP adapter errors now include recovery guidance (auth setup, retry hints, timeout config). HTTP server errors return structured
error_codevalues (auth_failed,rate_limit,task_timeout,acp_process_crashed,invalid_model,invalid_engine,workspace_not_initialized) instead of genericinternal_error. - Runtime integration SKILL.md — Added comprehensive error code reference table, authentication setup guide, warm pool behavior docs, and troubleshooting section for common failures.
auth_failed(401) — engine authentication missing or expiredrate_limit(429) — API rate limit exceededtask_timeout(504) — no activity from engine within timeout windowacp_process_crashed(500) — engine process exited unexpectedly (auto-recovers)invalid_model(400) — model not available for the specified engineinvalid_engine(400) — engine not found in configworkspace_not_initialized(400) — .optimus/ directory not foundbody_too_large(413) — now includes 10 MB limit in messageinvalid_json(400) — now includes parse error details
- ACP session/prompt uses array format first — Copilot ACP requires
prompt: [{type:'text', text:...}](nottextstring). Swapped compatibility order: try content-array first, fallback to text for legacy agents. isInvalidParamsErrormatches -32603 — Copilot returns-32603(Internal error) with schema validation data instead of-32602(Invalid params). Error matcher now covers both codes.
- HTTP runtime E2E: 4 consecutive tasks via
POST /api/v1/agent/run - Warm pool reuse confirmed across all tasks (invocations 1→2→3→4)
- Models tested:
gpt-5.4,claude-opus-4.6-1m,gemini-3-pro-preview - All via Copilot ACP with warm pool — single process, multiple sessions
- Resolver fails for explicit protocol with sub-object capabilities (#499) —
getTransportConfig()returned the parent engine config instead of the protocol sub-object whenprotocol !== 'auto', makingcapabilities.automation_continuationsinvisible to all check functions. Now prefers theclioracpsub-object when it exists. - Upgrade merge preserves stale
protocolfield —deepMergePreserveUsertreats scalars as atomic, so user's oldprotocol: "cli"overrode template's"auto". Post-merge migration now normalizesprotocolto"auto"when bothacpandclisub-objects are present. - Health endpoint hardcoded version
2.14.0— Now injected at build time via esbuilddefinefrompackage.json. Health correctly reports the installed version. - Stale dist bundles in git — Rebuilt and committed all 3 bundles so
npx github:cloga/optimus-code#v2.16.3gets current code.
- 4 new regression tests for #499: explicit protocol with sub-objects, explain output verification, flat config backward compatibility.
- Copilot autopilot resolver failure after upgrade —
deepMergePreserveUsertreated arrays atomically, so users upgrading from older configs had staleautomation_continuations: ["single"]that suppressed the template's["single", "autopilot"]. Both ACP and CLI transports failed the continuation check, causingselectedProtocol = nulland timeout-like behavior. (Fixes #499) - Scaffold ACP config stale — Updated scaffold
available-agents.jsonso new installs get correct Copilot ACP capabilities (autopilotin continuations, no--stdioflag). - Upgrade now unions capability arrays — Post-merge migration ensures engine capability arrays are unioned with template values instead of being overridden by old user arrays. Also strips stale
--stdiofrom ACP args.
- init/upgrade now copies all 3 dist bundles — Previously only
mcp-server.jswas copied to.optimus/dist/, makinghttp-runtime.jsandruntime-cli.jsunavailable in user workspaces. Now all 3 bundles are deployed onoptimus initandoptimus upgrade.
- runtime-integration skill — Agent-discoverable documentation for HTTP REST, TypeScript SDK, and CLI contract integration. Agents find it via
list_knowledge()or.optimus/skills/scan.
- Copilot CLI ACP Warm Pool — GitHub Copilot now runs via ACP protocol (
copilot --acp) with persistent process pooling. Every delegation reuses a warm Copilot process instead of spawning freshcopilot -p "prompt"subprocesses (~4s cold start eliminated). - Agent Runtime In-Process Execution — HTTP server, CLI, and SDK now execute tasks in-process, sharing the warm
AcpProcessPoolacross runs. Previously each API call spawned a detached subprocess with its own pool (no warm reuse). - Unified Warm Pool — All transports (MCP
delegate_task, HTTP/agent/run, CLIoptimus-runtime run, SDKruntime.runAgent()) now share the sameAcpProcessPoolfor both Claude and Copilot engines.
- Copilot ACP capabilities updated to declare
autopilotsupport — ACP protocol inherently supports continuation (agent runs to completion withinsession/prompt). - Protocol auto-resolution now correctly selects ACP (preferred) for Copilot instead of falling back to CLI.
- Removed 5 Agent Runtime MCP tools (
run_agent,start_agent_run,get_agent_run_status,resume_agent_run,cancel_agent_run) — replaced by native HTTP/CLI/SDK transports from v2.15.0. - Added
runWorkerInProcess()in council-runner — process-safe variant that never callsprocess.exit(). - Removed redundant
--stdioflag from Copilot ACP args.
- Copilot CLI ACP Warm Pool — GitHub Copilot now runs via ACP protocol (
copilot --acp) with persistent process pooling, matching the warm start optimization previously available only for Claude ACP.- Before: Every delegation spawned a fresh
copilot -p "prompt"process (~4s cold start: Node.js bootstrap + MCP server init + tool registration) - After: A persistent
copilot --acpprocess stays alive in the pool; subsequent tasks skip all initialization overhead - Verified:
copilot --acpimplements full ACP JSON-RPC protocol (initialize, session/new, session/prompt, session/update streaming, session/request_permission auto-approval) - Session context preserved across multi-turn interactions within the same warm process
- Before: Every delegation spawned a fresh
available-agents.json— Copilot ACP capabilities updated to declareautopilotsupport inautomation_continuations. ACP protocol inherently supports continuation (agent runs to completion withinsession/prompt), soautopilotis a natural fit.- Protocol resolution now correctly selects ACP (preferred) for Copilot instead of falling back to CLI. Previous behavior was caused by ACP not declaring
autopilotcapability while the engine automation requested it. - Removed redundant
--stdioflag from Copilot ACP args (Copilot--acpdefaults to stdio transport).
- Agent Runtime HTTP Server — Native REST API for host application integration, no MCP transport required:
POST /api/v1/agent/run— Synchronous run (blocks until complete)POST /api/v1/agent/start— Async start (returns immediately)GET /api/v1/agent/runs/:id— Get run status/resultPOST /api/v1/agent/runs/:id/resume— Resume blocked runPOST /api/v1/agent/runs/:id/cancel— Cancel active runGET /api/v1/health— Health check- Start:
node .optimus/dist/http-runtime.js --port 3100 --workspace /path
- Agent Runtime CLI Contract — JSON-in/JSON-out CLI for app embedding:
optimus-runtime run < request.json— sync runoptimus-runtime start < request.json— async startoptimus-runtime status --run-id <id>— get statusoptimus-runtime resume < resume.json— resume blockedoptimus-runtime cancel --run-id <id>— cancel- All output is structured JSON on stdout, logs on stderr
- TypeScript SDK (
src/sdk/runtime-client.ts) — Thin HTTP client wrapping the REST API:const runtime = new OptimusRuntime({ baseUrl: 'http://localhost:3100' })await runtime.runAgent({ role: 'writer', input: {...} })- Typed methods:
runAgent,startRun,getStatus,resumeRun,cancelRun,waitForCompletion,health
AgentRuntimeService(src/runtime/agentRuntimeService.ts) — Transport-agnostic service layer extracted from MCP server. Shared by MCP tool handlers, HTTP server, and CLI. Clean API:runSync(),startRun(),getRunStatus(),resumeRun(),cancelRun(),waitForCompletion().- Three build outputs via esbuild:
dist/mcp-server.js(MCP stdio),dist/http-runtime.js(HTTP REST),dist/runtime-cli.js(JSON CLI). RuntimeErrorclass withcodeandhttpStatusfor clean error propagation across all transports.
- MCP tool handlers (
run_agent,start_agent_run, etc.) now delegate to the shared service — behavior is identical. - Addresses #517: Host applications no longer need MCP transport.
- ACP persistent process pool — Eliminates cold-start overhead (~1-2s) for ACP engine tasks by keeping agent processes alive between invocations:
- First task spawns the ACP process and performs the
initializehandshake - Subsequent tasks reuse the warm process — only
session/new+session/promptare needed - Idle processes are automatically evicted after 5 minutes
- If a persistent process crashes, the next invocation auto-recovers (respawn + reinitialize)
- When the pool adapter is busy with a concurrent task, an ephemeral adapter is created as fallback
- First task spawns the ACP process and performs the
AcpProcessPool(src/utils/acpProcessPool.ts) — Singleton pool managing warm ACP adapter instances, keyed by engine. Provides idle sweep, graceful shutdown, and usage stats (reuses/creations).AcpAdapterdual lifecycle — Now supports both ephemeral (per-task spawn/kill, original behavior) and persistent (process stays alive) modes. New pool management API:isAlive(),isBusy(),shutdown(),idleSince,invocationCount.- Per-task MCP env injection — In persistent mode, per-task environment variables (delegation depth, role, etc.) are injected into MCP server configs via
session/newparams, ensuring child processes get correct context even though the ACP process is reused. - Process crash safety — Exit handler uses closure-captured process identity to prevent stale handlers from clobbering newly spawned processes during auto-recovery.
- Fully backward compatible — Ephemeral adapters (non-pool) behave identically to before. The pool is transparent to the delegation system.
- Worktree orchestration tools — 3 new MCP tools for automated multi-branch parallel development:
create_worktree— Create a git worktree for a branch, with automatic.optimus/state initializationlist_worktrees— List all active worktrees with branch, HEAD, and Optimus state statusremove_worktree— Clean up a worktree after work is complete
branchparameter ondelegate_task/delegate_task_async— When specified, automatically creates a worktree for the target branch and runs the agent there. Enables Master Agent to dispatch parallel feature work across isolated branches with zero git conflicts.
WorktreeManager(src/utils/worktreeManager.ts) — Lifecycle management for git worktrees: create, list, find-by-branch, remove, ensure-for-branch. Auto-generates worktree paths using the convention../<repo>-wt-<branch>/.- Seamless delegation —
spawnAsyncWorkeralready passescwd: workspacePathto child processes, so worktree-targeted tasks run in the correct directory with full state isolation (v2.12.0) and shared config/roles/skills from the main worktree.
- Fully backward compatible — Omitting the
branchparameter preserves existing single-workspace behavior. The 3 new tools are additive.
- Git worktree support — Optimus now detects git worktrees and resolves
.optimus/paths accordingly. Shared resources (config, dist, roles, skills, memory) resolve from the main worktree, while runtime state (task manifests, results, reviews, agent instances) stays isolated per worktree. This enables running multiple features simultaneously on one machine. ensureWorktreeStateDirs()at server startup — The MCP server automatically creates required state directories when running inside a worktree, sooptimus initin the main worktree is all you need.optimus initnow detects worktree context — Shows informational output about worktree status and whether the main worktree has.optimus/set up.
- Centralized path resolution via
resolveOptimusPath()— All.optimus/path construction across 12+ source files now routes throughsrc/utils/worktree.ts, replacing ~40 scatteredpath.join()calls. Paths are auto-categorized as shared or state based on the first directory segment. - Path categories:
config,dist,roles,skills,memory,specs,tasks→ shared (main worktree).state,results,reviews,system,agents→ per-worktree.
- Fully backward compatible — Non-worktree workspaces behave identically (both roots resolve to the same directory). No changes to CLI commands, MCP tools, or configuration formats.
- First-class Agent Runtime abstraction — New application-facing runtime layer above raw delegation and transport. Host applications can now call agents as domain services without coupling to
delegate_task, CLI transport details, or task-manifest internals. Addresses #516. - 5 new Agent Runtime MCP tools —
run_agent(sync execution),start_agent_run(async),get_agent_run_status(normalized polling),resume_agent_run(unblock manual intervention),cancel_agent_run(graceful cancellation). - Normalized result envelopes — All runtime tools return a consistent
AgentRuntimeEnvelopewithstatus,result,error_code,error_message,requires_manual_intervention,action_required, andruntime_metadata(engine, model, session_id, duration_ms, retries_attempted). - Structured output validation — When
output_schemais provided, the runtime detects malformed JSON output and returnserror_code: "invalid_structured_output"instead of silently passing broken data. - Engine fallback and retry policy —
run_agentsupportsruntime_policy.retriesandruntime_policy.fallback_enginesfor automatic retry with engine rotation. - Task cancellation support — New
cancelledstatus in the task manifest. Running tasks respect cancellation; the async runner checks cancellation before writing final status.
- Async tasks now record resolved engine, model, and session_id — Worker spawner backfills
resolved_engine,resolved_model, andsession_idinto the task manifest after execution, enabling runtime metadata to surface actual execution details. completed_attimestamp added to task records — Terminal task states now record completion time for accurate duration tracking.
- Backward compatible with existing orchestration tools —
delegate_task,delegate_task_async,dispatch_council, andcheck_task_statusremain unchanged. - Recommended for application-side integrations — Teams building domain services (script generation, classification, extraction, structured content generation) on top of Optimus should adopt the runtime tools for a stable contract.
- Unified project MCP config is now first-class — Optimus now treats
.optimus/config/mcp-servers.jsonas the single source of truth for workspace MCP server definitions instead of hardcoding.vscode/mcp.jsonas the canonical config. optimus init/optimus upgradenow generate multi-client MCP configs — Workspaces now get synchronized project-local MCP files for VS Code / GitHub Copilot (.vscode/mcp.json), GitHub Copilot CLI (.copilot/mcp-config.json), and Claude Code (.mcp.json) from one shared definition.
- Claude Code and ACP flows no longer depend on VS Code config layout — Runtime adapters now prefer the canonical Optimus MCP config and only fall back to legacy client files, removing the old coupling to
.vscode/mcp.json. - Cross-platform workspace config is now portable across Windows and macOS — Generated Claude and Copilot CLI config files use project-relative paths, while VS Code keeps its native workspace macro format.
- Existing VS Code-based workspaces remain supported — Legacy
.vscode/mcp.jsonworkspaces still work as a fallback while newer workspaces can adopt the unified source config. - Recommended for teams validating multiple MCP clients — This release is intended for shared testing across Claude Code, VS Code Copilot, and Copilot CLI with one project-owned configuration model.
- Azure DevOps
updateWorkItemis now implemented — The unified VCS layer can now update ADO work items through JSON Patch, including title, description, state, assignee, and priority changes. vcs_update_work_itemnow exposes richer ADO fields — MCP callers can passdescription,assigned_to, andpriority, while provider-specific workflow states are forwarded correctly for Azure DevOps.
- GitHub update validation is stricter and clearer — GitHub work-item updates now reject unsupported state values and unsupported field-only payloads with actionable errors instead of failing ambiguously.
- Label-only GitHub updates no longer require a redundant issue patch — The provider now refetches issue data when only labels change, preserving the unified update flow without unnecessary PATCH requests.
- Backward compatible for existing GitHub workflows — GitHub retains its existing
open/closedstate model and label handling. - Recommended for mixed GitHub + ADO environments — Teams using Azure DevOps now get parity for unified work-item updates without changing MCP tool names.
- Available-agents resolution is now explainable at runtime — Engine selection no longer lives only in
worker-spawner.ts. Optimus now exports a resolved explanation view with requested automation policy, candidate transports, final protocol choice, and selection reason. - New
explain_available_agentsMCP tool — Agents and operators can query the fully resolvedavailable-agents.jsonbehavior directly, either for one engine or the full config, without re-implementing the resolver logic. roster_checknow shows resolved runtime behavior — The roster output surfaces configured protocol, resolved protocol, requested automation, and why each engine resolves the way it does.
- Explicit transport configs no longer masquerade as both protocols — Runtime transport selection now correctly distinguishes pinned
cliversus pinnedacpengine declarations instead of treating one top-level config as valid for both protocol branches. - Engine resolution is now reusable instead of duplicated — Transport preview, selection reason, and runtime adapter resolution now share a single explanation path, reducing drift between human-visible summaries and actual execution behavior.
- Backward compatible for existing configs — Legacy
available-agents.jsonshapes remain accepted, but the runtime surface is now more explicit and machine-readable. - Recommended upgrade for agent-native workflows — If you rely on
protocol: "auto", upgrade to get explainability and more accurate runtime introspection.
- Copilot ACP transport is now first-class in engine config — GitHub Copilot can be declared with
protocol: "auto"andpreferred_protocol: "acp", with headless ACP launches defaulting tocopilot --acp --stdiowhen ACP args are not explicitly provided. - Automation policy is now normalized across engines —
automation.modeandautomation.continuationare treated as separate, explicit policy axes. Copilot CLI autopilot and ACP transport selection now resolve from the same config surface and are exposed consistently in the MCP entrypoints. - Async council dispatch gets immediate queued artifacts —
dispatch_council_asyncnow createsSTATUS.mdand the task-manifest entry before background execution starts, improving observability for queued reviews.
- Fail-fast automation/transport validation — Invalid combinations such as Copilot ACP +
continuation: "autopilot"or Claude + unsupported autopilot continuation are now rejected during engine resolution instead of failing later at runtime. - ACP session compatibility retries —
AcpAdapternow retriessession/promptandsession/loadwith compatibility fallbacks when ACP servers reject one parameter shape, and falls back to a fresh session when persisted session resume is not accepted. - ADO links now resolve to browser URLs — ADO work item creation/comment APIs now return stable web URLs, including GUID-backed project resolution and correct work item comment anchors.
- Meta-cron and council capacity hardening — stale lock files are detected and cleaned more safely, malformed engine config entries are excluded earlier, and council async queue setup is covered by dedicated Vitest tests.
- Low-risk for default users; review custom engine configs — Legacy vendor-specific automation aliases are still parsed, but new configs should use normalized values such as
auto-approve,deny-unapproved,single, andautopilot. - Copilot autopilot remains CLI-only — ACP and autopilot are orthogonal concepts, but Copilot autopilot continuation is still only supported on the CLI transport.
protocol: "acp"pluscontinuation: "autopilot"is intentionally rejected.
optimus initauto-fills GitHub owner/repo from git remote — No longer leaves owner/repo empty invcs.json. Parsesgit remote get-url originand fillsgithub.ownerandgithub.repoautomatically. Fixes wrong-owner issue when init is run in org-owned repos.- SAML SSO 403 errors get clear remediation message — GitHub 403 responses containing "SAML enforcement" now produce: "GitHub token is valid but NOT authorized for this organization via SAML SSO. Action required: authorize your token for the organization." Instead of generic "VCS unavailable". Applied to all 8 GitHub API call paths in GitHubProvider.
vcs_add_commentMarkdown→HTML for ADO — Comments on ADO work items and PRs now auto-convert Markdown to HTML, matchingvcs_create_work_itembehavior. Fixes broken rendering of tables, headings, and formatting in ADO comments.
- Agent/Role Lifecycle GC — Patrol new Phase 6.5: Agent Hygiene. Auto-cleans stale T1 agents (>7 days), orphaned lock files, and unused T2 roles (>30 days). Task manifest auto-trimmed to 30 days. (#475)
- MCP server path resolution —
optimus init/upgradenow copiesmcp-server.jsto.optimus/dist/and uses${workspaceFolder}relative path inmcp.json. Fixes MCP server not starting after running from npx/temp directory. (#477) - npx ECOMPROMISED — Removed
preparelifecycle scripts that triggered cascading builds during npx install, exceeding npm v11 lock timeout. (#471)
- AcpAdapter path resolution —
loadMcpServersnow usesOPTIMUS_WORKSPACE_ROOTenv var for reliable path resolution, fixing issues where the workspace root was incorrectly inferred.
- Scaffold
release-policy.jsonmissing from v2.5.0 — The auto-release opt-in config template (enabled: false) was referenced in the v2.5.0 release notes but was not included in the release commit. Added tooptimus-plugin/scaffold/config/.
get_user_memoryMCP tool — Master Agent can now read the same user preferences that sub-agents see. Single source of truth at~/.optimus/memory/user-memory.md.- ACP activity-based timeout — Detects live-but-stuck ACP sessions (process alive but zero output). Default 20 min, configurable per-engine via
timeout.activity_ms. Fixes 5+ hour zombie tasks (#433). - Delegation Scope Decision Matrix — Added to system-instructions and delegate-task skill. Master now knows when to delegate to PM vs dev vs specialist (#393).
- Competitive Discovery skill rewrite — Now auto-adds high-confidence competitors (score ≥5) to watchlist via Read-Modify-Write protocol. Medium-confidence candidates go through
request_human_input. - Auto-release skill + cron — New
auto-releaseskill withrelease-gatecron (every 4h). Conventional commits determine semver.max_auto_bump: minor. Scaffold default:enabled: false(opt-in).
- Master onboarding Step 0 — User Memory loading is now the first numbered step in master-onboarding skill for more reliable execution.
competitive-discoveryskill — New weekly discovery skill for finding unknown competitors via GitHub topic search. Separate from daily monitoring. Weekly cron registered (0 9 * * 1).- 9 new competitors added to watchlist — Zeroshot, ComposioHQ/agent-orchestrator, Babysitter, OpenCastle, Ruflo, TAKT, DeerFlow, AG2, Google ADK.
- Unified prompt for all engines — Removed ACP lean prompt. All engines (CLI and ACP) now receive the same full prompt with inline memory, user memory, persona, skills, and context. Fixes: ACP sub-agents were missing user preferences and project memory because they didn't read the file paths provided in the lean prompt.
- Patrol no longer auto-closes
swarm-councilIssues — Councilverifiedonly means the review finished, not that recommendations were implemented. Now onlyswarm-taskverified Issues are closed. Council Issues get a status comment but stay open until manually closed.
optimus initauto-creates Health Log Issue — Detects GitHub repo from git remote, creates a "[Optimus] System Health Log" issue, and links it inmeta-crontab.json. Patrol reports are appended as comments. RequiresGITHUB_TOKENin.env; skips gracefully if unavailable.
- Scaffold default cron →
hourly-patrol— New workspaces gethourly-patrol(patrol-manager + project-patrol skill) instead ofnight-steward. No dry-run,max_actions=999. - VCS tools graceful degradation — All 7 VCS tools (
vcs_create_work_item,vcs_create_pr,vcs_merge_pr,vcs_add_comment,vcs_update_work_item,vcs_list_work_items,vcs_list_pull_requests) now return⚠️ VCS unavailablewarning instead of crashing when no token or config is present. Agents continue working without Issue/PR tracking.
vcs_list_pull_requeststool — New VCS tool to list pull requests with state filter. Returns PR number, title, mergeable status (clean/CONFLICTING/unknown), head/base branches, and labels. Enables patrol PM to automatically discover and handle open PRs.
- Patrol PR phase upgraded — Patrol skill now uses
vcs_list_pull_requestsinstead of unreliablegit log --remotes. Adds decision matrix for conflicting bot PRs (auto-close) and conflicting human PRs (escalate viarequest_human_input).
- ACP sub-agents can now call MCP tools —
AcpAdapterwas passingmcpServers: []tosession/new, making sub-agents unable to call any MCP tools (e.g.request_human_input,vcs_update_work_item). Now reads.vscode/mcp.json, resolves${workspaceFolder}/${env:VAR}macros, and converts VS Code object format to ACP array format. Verified withrequest_human_inputend-to-end test.
vcs_update_work_itemtool — New VCS tool to update work items (close/reopen issues, change titles, add/remove labels). Platform-agnostic — works on both GitHub and Azure DevOps.vcs_list_work_itemstool — New VCS tool to list work items with state and label filters. Replaces legacygithub_sync_board.
- Removed
github_update_issueandgithub_sync_board— These legacy tool schemas had no handler implementation. Replaced byvcs_update_work_itemandvcs_list_work_itemswhich use the unified VCS provider layer.
- Patrol PM was unable to close issues — Root cause: patrol skill referenced
github_update_issuewhich had a schema but no handler. All skill references updated to usevcs_update_work_item/vcs_list_work_items.
- Scaffold model name alignment — Scaffold
available-agents.jsonclaude-code models changed from ACP-native names (default,opus, etc.) to standard identifiers (claude-opus-4.6-1m,gpt-5.4,gemini-3-pro-preview) matching project config.
- Autonomous Memory Writing — Agents now autonomously write to project/role memory when encountering non-trivial lessons (bug postmortems, tool gotchas, conventions). Removed the previous "MUST NOT write" restriction.
- User Memory auto-init —
optimus initnow creates~/.optimus/memory/user-memory.mdwith a starter template. Also creates.optimus/memory/roles/directory for role-level memory.
- Claude Code defaults to ACP protocol —
claude-codeengine now usesclaude-agent-acp(ACP protocol) instead of legacy CLI text parsing.optimus initandoptimus upgradeauto-install@zed-industries/claude-agent-acp. No Anthropic API key needed — uses existing Claude Code OAuth session.
- ACP Lean Prompt — ACP engines receive a minimal prompt (role + task only). System instructions, memory, and skills are referenced by file path instead of inline injection. Reduces prompt from 40K+ chars to ~2K chars.
- AcpAdapter Permission Auto-Approve — Automatically approves
session/request_permissionrequests from agents in headless mode. Fixes tool calls (file reads, etc.) hanging indefinitely. - AcpAdapter Windows PATH Resolution —
shell: trueon Windows for ACP spawn, enabling simple command names likeclaude-agent-acpinstead of absolute paths. - 10-min Heartbeat Timeout Default — All engines in scaffold now default to 600,000ms heartbeat timeout.
- Competitive Intelligence v2 — Autonomous discovery with three-frequency model (daily monitor, weekly discovery, first-run bootstrap).
- ACP complex task stall — Root cause:
session/request_permissionfrom agent was unhandled, causing indefinite hang on any task involving tool calls. (#440)
- Configurable Task Timeouts — Engine-level and per-task timeout overrides via
available-agents.jsontimeoutblock andtimeout_msparameter ondelegate_task. Resolution order: per-task > per-engine > hardcoded fallback. (#407) - AcpAdapter Claude Code Compatibility — AcpAdapter now supports
claude-agent-acp(Zed's Claude ACP bridge). Handlescwd/mcpServersinsession/new, array prompt format, andagent_message_chunkstreaming. (#413) - Patrol Auto-Close Task Issues — Patrol PM now correlates open
swarm-task/swarm-councilIssues withtask-manifest.jsonand auto-closes verified ones. Issue lineage cascade notifies parent Issues. (#415) - Competitive Intelligence Agent — New
competitive-intelmeta-skill +competitive-watchlist.jsonconfig. Daily cron monitors competitor repos for releases, star velocity, and architectural changes. Escalates notable findings viahuman-input-needed. (#419) - Human Escalation Protocol — Agents now have explicit rules for when to call
request_human_input: strategic decisions, merge conflicts, repeated failures, missing credentials, destructive operations, and unmerged verified work. (#425)
- Council role_descriptions not passed to manifest —
dispatch_council_asyncwas not storingrole_descriptionsin the task manifest, causing new council roles (without pre-existing T2 templates) to consistently fail T3→T2 precipitation. (#428)
- Task Dependencies —
delegate_task_asyncnow acceptsdepends_on: [task_ids]. Tasks register asblockedand auto-spawn when all dependencies areverified. (#395) - Meta-Cron Session Persistence — Cron-triggered agents (e.g., patrol PM) now resume their previous session via
last_agent_id, maintaining context across patrol cycles. (#398) - Patrol PM Diagnose & Re-delegate — Patrol skill gains Phase 2.5: diagnoses open Issues by correlating with task manifest, auto-closes verified Issues, re-delegates failed tasks to last executor with session continuity. (#400)
- Generic Release Process Skill —
release-processskill refactored into a config-driven meta-skill withrelease-config.jsonschema. Ships in scaffold for all users. (#403) - Configurable Timeouts — Engine-level and per-task timeout overrides via
available-agents.jsonandtimeout_msparameter ondelegate_task. (#407) - Landing Page Claude Teams Comparison — New "Optimus vs. Agent Teams" comparison section on both landing page and pitch deck.
- T2 Guard regression fix — Thin T2 templates (existing but < 25 body lines, e.g.,
pm.md) were incorrectly triggering the new "missing role_description" error. Now: if a T2 file exists (even thin), delegation proceeds without requiringrole_description. The error only fires when truly no T2 exists.
- Self-Execution Pre-Flight Rule — Master Agent must now check
.optimus/skills/for a matching Skill before executing any multi-step workflow. Added to both project and scaffold system-instructions.
- Council Issue title readability —
dispatch_council_asyncnow extracts the topic from the proposal's# PROBLEM:/# PROPOSAL:heading instead of using the filename. Issue titles change from[Council] 00 PROBLEM (Review)to[Council] Agent-driven automation architecture (Review). (fixes #392)
- Multi-Level Memory System — New
MemoryManager.tswith project + role memory scopes, YAML frontmatter parser, relevance scoring (+3 role match, +2 recency), tiered token budgets, and greedy-fill loader.append_memorynow acceptslevel: "project" | "role". Workers receiveOPTIMUS_CURRENT_ROLEenv var. (#375) - User-Level Cross-Project Memory — Opt-in
~/.optimus/memory/user-memory.mdfor persistent user preferences across projects.append_memoryacceptslevel: "user"with write-time safety filtering.optimus memoryCLI subcommands: init, list, edit, add, remove. CI-guarded (disabled whenCI=true). (#380) - Context Continuity System — New
list_knowledgeMCP tool returns structured manifest of all.optimus/artifacts (specs, memory, reports, reviews). Master delegation pre-flight now includes Context Check step. Sub-agents can self-discover context. (#381)
- Enforce T3→T2→T1 lifecycle —
ensureT2Rolenow throws an error (instead of silent null) whenrole_descriptionis missing for a new role. T1 instance creation skipped when no T2 exists, preventing orphaned empty-shell agent files.
- Master Onboarding Skill — New
master-onboardingskill teaches Master Agent the first-run protocol (read system-instructions, roster_check, Problem-First SDLC) - Inject Template v2 — IDE configs now prompt "First action: read master-onboarding SKILL.md" on every session
- Role Creation Decision Rules — Master must roster_check before creating roles, no near-duplicates, require role_description
- Auto-label all VCS items —
vcs_create_work_itemandvcs_create_prnow auto-appendoptimus-botlabel
- Skills Quick Reference expanded — Critical constraints (async-only, roster_check first, no busy-poll) inlined into system-instructions for delegate-task, council-review, git-workflow
- Sync dispatch_council warning — Returns a warning nudging users toward dispatch_council_async
- Docs updated for v1.0.0 — ARCHITECTURE.md, HYBRID_SDLC.md, building-autonomous-swarm-guide.md, IDEA_AND_ARCHITECTURE.md
- Remove orphan code: MemoryManager.ts, SharedTaskStateManager.ts, Calculator.ts (1035 lines deleted)
- Qwen Code Auto-Discovery: ACP engine config supports
"path": "auto"— automatically scans~/.vscode/extensions/for Qwen Code CLI, no hardcoded paths needed - Scaffold now ships qwen-code engine entry with auto-discovery (users just need Qwen Code VS Code extension installed)
- Fix AcpAdapter TypeScript errors (invalid
chatmode, undefinedencodeMessage) - Fix scaffold
available-agents.jsonleaking local paths
- ACP Protocol Support: Implement AcpAdapter with NDJSON-based JSON-RPC transport, verified with Qwen Code CLI
- Multi-ACP Vendor Architecture: Engine config uses
protocolfield to route adapters — add new ACP vendors (Kimi, Cursor, etc.) with zero code changes - Problem-First SDLC Workflow: New lifecycle: PROBLEM → PROPOSAL → SOLUTION → EXECUTE, replacing the old proposal-first approach
- Artifact Directory Routing Table: Centralized routing rules in system-instructions.md — every agent knows what goes where
- YAML Frontmatter Format Templates: 7 artifact types with standardized templates (PROBLEM, PROPOSAL, SOLUTION, VERDICT, task result, report, review)
- Cross-Model Council Diversity: Automatic greedy round-robin assignment of engine:model combos to council participants
- VERDICT Template Externalization: Council verdict format loaded from
.optimus/config/verdict-template.md(customizable) - Mandatory Council Review Rule: High-impact changes require expert council review before implementation
- Engine Health Tracking & Fallback: Per engine:model health tracking with automatic fallback on failures
- Agent Pause/Resume: Human-in-the-loop input mechanism via
request_human_input - Patrol Manager System:
project-patrolskill with automated cron-based project monitoring - Docs Site Enhancements: Interactive tutorial guide, investor pitch page, bilingual EN/ZH support, terminal hero animation
- Init/Upgrade: Scaffold now includes
specs/andresults/directories,verdict-template.md, protocol field in config
- Strip Tool-Call Traces from Output: Artifact files no longer contain adapter process traces (GPT-5.4/Claude Opus outputs now clean)
- ESM/CJS Bundling: Bundle all deps via esbuild to eliminate runtime crashes
- Windows Path Mangling: Prevent backslash issues in agent delegations
- Meta-Cron Race Condition: Fix concurrent cron execution and add log capture
- strip-ansi CJS Compatibility: Downgrade to v6 for CommonJS support
- Consolidated System Prompt: Single Source of Truth at
.optimus/config/system-instructions.md - Frozen
proposals/Directory: New work goes tospecs/, legacy proposals preserved - Replaced
protocol.md: Obsolete blackboard protocol replaced with redirect stub - Release Process Skill v1.1: Fixed scaffold sync rules, added validation warnings
- Inject project memory into agent prompts at spawn time (#181)
- Add release-process skill SOP (#189)
- Default to squash merge and sync local master after merge (#185)
- Add agent attribution signatures to all VCS tools (#152)
- Inject auto-created issue ID into agent prompt to prevent duplicates (#166)
- Implement agent retirement, quarantine and T1 GC (#161)
- Role-skill decoupling, enhance roster_check (#163)
- Ensure optimus-bot label on all auto-created issues (#153)
- Auto-delete source branch after PR merge (#150)
- Preserve user config during optimus upgrade (#175)
- Prevent async council tasks from getting stuck in running state (#64)
- Add systemic safeguards from vcs.json wipe postmortem (#178)
- Fix misleading MCP config section in Quick Start (#176)
- Update README and system-instructions for v0.3.0 features (#144)
- Enforce issue lineage in skills and instructions (#155)
- Remove auto-skill genesis (#160)
- Delegation Depth Control —
MAX_DELEGATION_DEPTH = 3prevents infinite agent recursion. Tracked viaOPTIMUS_DELEGATION_DEPTHenv var. - Plan Mode for Orchestrators —
mode: planstrips write permissions from PM/orchestrator roles, forcing delegation instead of direct coding. write_blackboard_artifactMCP Tool — Allows plan-mode agents to write exclusively to.optimus/directory with symlink-safe path validation.- Issue Lineage Tracking —
OPTIMUS_PARENT_ISSUEenv var injected into child agents, enabling GitHub Issue parent-child tree visualization. optimus upgradeCLI Command — Safe incremental upgrade that force-updates skills/roles/config while preserving user agents and runtime data.- Enhanced ADO
vcs_create_work_item— New params (area_path,iteration_path,assigned_to,parent_id,priority),vcs.jsondefaults section, auto-tagcreated-by:optimus-code, Markdown→HTML body conversion. - Auto-Skill Genesis — Auto-generate
SKILL.mdafter successful T3 precipitation so new roles are born with operational playbooks. - Rich T3→T2 Precipitation via
agent-creator— Replace thinfs.writeFileSynctemplates with fullagent-creatorinvocation for professional-grade role definitions. - Engine/Model Validation — Validate engine and model names against
available-agents.jsonbefore writing to T2 frontmatter, preventing invalid engine corruption.
- Feature-dev skill rewritten with 6-phase PM-driven autonomous workflow
- Senior Full-Stack Developer role replaces generic dev
- Session Continuity Rule for agent memory reuse
- Environment variable interpolation fix for nested MCP worker processes
- Explicit tool call examples added to each feature-dev phase
- T3→T2 Immediate Precipitation: First-time T3 role usage auto-creates a T2 role template in
.optimus/roles/. No threshold — instant on first delegation. - T2→T1 Session Instantiation: When a task completes and returns a session_id, the system auto-creates a T1 agent instance in
.optimus/agents/from the T2 template. T1 is frozen after creation. - Master-Driven T2 Evolution: Master Agent can update T2 templates with new
role_description,role_engine,role_modelviadelegate_taskparams. T1 instances are never retroactively modified. - Structured
delegate_taskParams: Addedrole_description,role_engine,role_model,required_skillsfields. Master Agent provides all T2 info — no more guessing. - Engine/Model Fallback Chain: Master override → frontmatter →
available-agents.json→claude-codehardcoded fallback.
- Skill Pre-Flight Check:
required_skillsfield indelegate_task/delegate_task_async. Missing skills → rejection with actionable error listing what to create. - Skill Auto-Injection: Found skills automatically injected into agent prompt as EQUIPPED SKILLS section.
skill-creatorBootstrap Meta-Skill: Teaches agents how to create new SKILL.md files.agent-creatorBootstrap Meta-Skill: Teaches Master Agent the T3→T2→T1 lifecycle, role selection, engine binding.
- DOTENV_PATH via
mcp.jsonenv mount: Replaces hardcoded.envpath. Users can point to any env file. - Auto-generate
.vscode/mcp.json:optimus initcreates or merges MCP config for VS Code/Copilot users. [Optimus]Auto-Tagging: All Issues/PRs created via MCP tools get[Optimus]prefix andoptimus-botlabel.- Zero-Config Scaffold:
optimus initships no pre-built roles/agents. System bootstraps at runtime. - Inject-Only Instruction Bridging:
optimus initappends reference to existingCLAUDE.md/copilot-instructions.mdbut never creates new ones. - Windows CRLF Fix:
parseFrontmatternormalizes\r\nfor cross-platform compatibility. - Path Traversal Prevention:
sanitizeRoleName()strips dangerous characters from role names. - T3 Log File Mutex: Prevents concurrent write corruption on
t3-usage-log.json. windowsHide: true: Background child processes no longer pop up terminal windows.
- Lazy-sync of built-in roles to user projects (was polluting
.optimus/roles/with phantom T2 files) - Instruction bridging that copied full
system-instructions.mdcontent intoCLAUDE.md - Threshold-based precipitation (was 3 invocations + 80% success rate, now immediate)
- Enhancement: Planner Consensus Voting Threshold:
_computeIntentFromPlanners()now requiresmin(2, numPlanners)agreeing votes before routing toactionorskip. Single-planner setups behave as before; with 2+ planners, at least 2 must agree, preventing a single aggressive planner from overriding the majority. - Fix: Plan Synthesis Without Dedicated Executor: In plan mode with multiple planners but no executor configured, the synthesis step now falls back to the first plan adapter (invoked in read-only
planmode). Previously, synthesis was silently skipped, forcing users to manually reconcile planner outputs. - UI: Plan Synthesis Label: The synthesis output is now labelled
📋 <AgentName> (Plan Summary)in the UI to distinguish it from individual planner outputs.
- Feature: Smart auto-routing (
inferMode): When mode is set to Auto (default), prompt heuristics now automatically route pure questions to Plan mode and short explicit edits (with prior context) to Direct mode. Reduces unnecessary planner+executor round-trips for straightforward interactions. - Feature: Prompt prefix shortcuts: Type
/plan <prompt>or/exec <prompt>(or/direct) to override the mode for a single submission without touching the mode buttons. The prefix is stripped before the prompt reaches the host. - Feature: Mode inference indicator: When smart auto-routing changes the mode, a small inline notification ("⚡ Auto-routed to Plan mode") appears in the chat so the user knows which execution path was taken.
- Feature: Three-mode execution routing: Added a Plan / Auto / Exec toggle in the input area. Plan runs planners only (analysis without code changes). Auto (default) runs the full planner → executor pipeline. Exec skips planners and sends user prompt directly to the executor for immediate action. Mode selection is preserved in queue items.
- Feature: Queue persistence: Pending queue items are now saved to VS Code
globalStateand restored when the webview reloads or VS Code restarts, preventing queued prompts from being lost. - Feature: Queue content visibility: A collapsible panel below the Queue button shows all queued prompts (truncated to 60 chars) with per-item delete (
✕) support. Click the badge count to toggle. - Fix: Execution Trace leak in summary:
ExecutorOutcomeRecord.summarynow uses the clean output (post_extractThinking) instead ofexecCleaned, preventing tool trace markers (•,✓,✗,↳) from leaking into the task state summary strip. - Fix: Multi-line process line handling:
appendProcessLinesnow splits multi-line entries (e.g."• tool\n↳ summary") into individual lines before dedup, preventing malformed process text accumulation. - Fix: Consistent result preview label: Unified
first=topreview=insummarizeStructuredToolResultfor multi-line results, matching the format already used by bash/shell tool-specific summarization. - Fix: Copilot adapter missing
captureProcessLinesAfterOutputStarts:GitHubCopilotAdapter.extractThinking()now setscaptureProcessLinesAfterOutputStarts: true, so tool trace lines appearing after LLM output starts are correctly moved tothinkinginstead of leaking intooutput. - Fix: Incomplete process line regexes: Both
COPILOT_PROCESS_LINE_REandCLAUDE_PROCESS_LINE_REnow include↳,✓, and✗characters, ensuring continuation and completion markers are recognized as process lines. - Fix: Defense-in-depth in
_summarizeText:_summarizeText()now strips tool trace lines (starting with•,✓,✗,↳, etc.) before collapsing whitespace, preventing any residual trace markers from reaching the summary. - Fix: History resume scrolls to last 3 turns:
restoreTaskSessionsnow positions the scroll to the most recent 3 turns instead of jumping to the top. - Fix: Direct mode hides dropped planner indicator: The "is not currently available" notification for dropped planners is now suppressed in Direct mode to avoid confusing messages.
- Repo Cleanup: Removed debug log files, temp test scripts, and
temp_debug/directory from root. - Gitignore Fix: Replaced garbled
.gitignoreentries with clean rules; added patterns for*.log,[LOG],temp/,temp_debug/.
- Modes-aware Agent Selection: Agents now declare
modes: string[]. Planning agent checkboxes show only agents with"plan"mode; executor dropdown shows only agents with"agent"mode. - Council → Executor Two-Phase Pipeline: Phase 1 runs all selected planners concurrently; Phase 2 feeds synthesized plans to a single designated executor in
agentmode. - Multi-turn Shared Task State:
SharedTaskStateManagertracks task history, open questions, blocked reasons, and auto-compacts context when token usage exceeds threshold. - Active Editor Context Injection: The visible code range (or selection) from the active editor is automatically prepended to every planner prompt.
- Streaming Callbacks Debounced: Per-agent streaming updates are debounced at 100 ms to reduce webview re-render churn.
- Image Paste Support: Users can paste images into the prompt bar; images are saved to global storage and their paths are injected into the prompt.
- Apply Code Block: Executor output code blocks can be applied directly to workspace files via a one-click button.
- Task Resume / Rename / Delete / Pin: Full task lifecycle management from the history panel.
- Debug Mode: Optional
optimusCode.debugModesetting surfaces per-adapter command, cwd, pid, and token usage in the UI. - Code Quality Fixes: Replaced inline ANSI regex with shared
ANSI_REutility; extracted_buildDebugObjecthelper to eliminate duplicate debug-info construction; fixedReturnType<...>[0]type annotations to useAgentAdapter; removed TOCTOU race in image storage; capped history view at 20 turns; added random suffix to image filenames to prevent collisions.
- Architecture Direction Clarified: Documented the long-term move toward app-level multi-turn shared task state, including structured planner contributions, resumable task history, and executor context synthesis owned by the orchestrator layer.
- UI Evolution: Abandoned the vertical chat layout in favor of a Side-by-Side "Kanban Card" approach, allowing multiple models to dynamically run horizontally without drowning out the conversation. Added rich-text Markdown formatting using
marked. - Architectural Shift - Dynamic Configuration: Removed hardcoded Agent registries. The extension now deeply integrates with VS Code
workspace.getConfiguration, enabling users to swap Models (gpt-5.4,claude-opus-4.6, etc.) on the fly without a reload. - Session History Persistence: Added a "History" toggle to the chat sidebar. Conversations and agent responses are now persisted in
context.globalStateacross VS Code sessions. Users can pull up previous architectural discussions instantly. - Architectural Shift - Streaming Execution: Completely refactored the underlying OS execution layer from synchronous
cp.execto asynchronous continuous streams viacp.spawn. This immediately pumps stdout/stderr token-by-token directly to Webview. - Removed Hard Timeouts: Set
timeout: 0for all CLI tool executions, giving advanced Coding Agents the infinite runtime needed to utilize their own terminal-based "tools/skills" before formulating an output. - Structural Standardization: Refactored project directory structure, moving extension components into
src/providers/and standardizing the architecture according to project documentation. - Dependency Cleanup: Removed
DoubaoAdapterplace-holder to keep the underlying structure clean but natively backwards compatible to ANY future adapter type string inputs.
- Implemented asynchronous streamed UX updates. Instead of blocking the UI until all models finish, the chat interface now renders a dedicated task list indicating which agents are "Thinking" (🔄), completed (✅), or failed (❌).
- Initial MVP creation.
- Shifted architecture from command-palette invocation to a persistent Sidebar Webview Chat.
- Implemented Adapter Design Pattern in
src/adapters/.