github coleam00/Archon v0.11.0
Archon CLI v0.11.0

latest release: v0.11.1
5 hours ago

Workflow packs install straight from GitHub, workflows can start from schedules and GitHub events, forge plugins carry the delivery pack's pull-request work, and all three provider SDKs move to their latest releases.

Breaking changes: read before upgrading

These change behaviour you may rely on. Check each one against your setup before you upgrade.

  • A repository's .archon/.env can no longer set ARCHON_HOME, HOME, USERPROFILE, ARCHON_DOCKER, WORKSPACE_PATH or PATH. Archon refuses to start and names the file and the key. Move the key to your shell environment or to ~/.archon/.env. This keeps one Archon home per process tree, so detached runs, trigger execute, detached approve/resume and CLI calls from workflow scripts read plugins from the same home as their parent. (#3501, #3506)
  • assistants.<provider> in .archon/config.yaml (global and repo) is now validated when the config loads, by the provider's own parser. A value the provider would have silently dropped, such as modelReasoningEffort: extreme, a misspelled key, or a settingSources entry other than project or user, stops the load with a message naming the file, provider, key and accepted values. archon doctor reports it as a failed Config files check, and the settings API answers 400 naming the refused key. A settings change that fixes an invalid value already in ~/.archon/config.yaml is still saved. Two OpenCode keys are now refused: assistants.opencode.agent, which nothing read, and assistants.opencode.baseUrl, which every OpenCode run already rejected. (#2582, #3461)
  • none_failed_min_one_success now blocks a dependency that was skipped because something upstream failed, even when another dependency succeeded, including across chains, includes and resumed runs. A join that used to run after a failure now skips and keeps the original failed node as its skip cause. Condition skips and on_timeout: skip skips still count as admissible. (#3156, #3249)
  • thinking: is removed. effort: is the only reasoning-depth setting in workflows, tiers, aliases and config, and any thinking: fails validation with a message pointing to effort:. The effort ladder gains a persistent rung. (#3094)
  • Abandon and cancel now mean different things. A failed run is stopped and can be resumed; a cancelled run is discarded. archon workflow abandon, chat /workflow abandon, the Slack cancel button, the manage_run cancel action and POST /api/workflows/runs/{id}/abandon now stop a reachable detached owner before recording the run cancelled, so its worktree and resource slot are no longer released while the old process is still writing. If no owner answers, abandon still cancels and shows the recorded host, pid and last activity. If an owner answers but cannot be stopped, abandon fails and leaves the run unchanged (HTTP 409). A run executing inside a live Archon server is refused; cancel it from that server. (#2325, #3446)
  • A when: condition that compares an object or array, from $node.output.field or $INPUTS.<name>, now fails the node with an actionable error instead of comparing JSON text and quietly skipping. (#2995, #3037)
  • A plain loop.until or loop_group.until signal must now sit alone on the final line of the output. A mention inside prose, such as "not COMPLETE yet", no longer ends the loop. XML-wrapped signals work as before. (#2994)
  • A workflow: node can no longer declare its own output_format. The child's returns: node owns the result contract, and a caller-side schema is a load error naming that node. (#3148)

Most likely to affect you: if a repository's .archon/.env sets ARCHON_HOME, HOME, USERPROFILE, ARCHON_DOCKER, WORKSPACE_PATH or PATH, Archon will now refuse to start in that repository. Move the key to your shell environment or to ~/.archon/.env. If you use thinking: in workflows or config, switch to effort:.

What's new

Added

  • archon plugin install owner/repo[/path][@tag] installs a workflow pack from GitHub as one complete tree at one commit. archon plugin update, remove and list manage installed packs, and archon plugin copy <id> makes an editable copy under .archon/workflows/. (#2767, #3485)
  • Installed packs run from the workflow catalog as owner/pack:entrypoint from the CLI, chat, the router, run management and the API. Only a pack's declared entrypoints can be dispatched. A run freezes the pack at the commit it started with, so update or remove affects only later runs. (#2835, #3486)
  • Forge plugins: Archon can talk to a code forge through an installable executable plugin. Each release publishes the GitHub plugin, installed with archon plugin install coleam00/Archon/plugins/forge-github[@tag], including inside Docker. The delivery pack reads pull-request checks, including external commit statuses, through it, and with ARCHON_SDLC_FORGE=forge also creates, edits, comments on and flips pull requests through it, verifying each write by reading it back. (#3417, #3447, #3457)
  • Event-triggered workflows: trigger bindings start ordinary governed runs from native macOS schedules and verified GitHub issue, pull-request, label, check and status webhooks. A binding names a shared resource and chooses skip or FIFO queue when a run already holds it, and queued work survives restarts. The server hosts triggers when ARCHON_TRIGGER_HOST is set; the CLI adds archon trigger fire, drain and whoami. See the workflow triggers guide. (#3415)
  • Provider SDKs updated to latest: Claude Agent SDK 0.3.282, Codex SDK 0.157.0, Pi 0.87.1. Claude cost stays per query after a resume or fork, and Pi usage now includes cache-warming and compaction calls. (#3076, #3504)
  • concurrency.providers.<provider-id>: N in ~/.archon/config.yaml caps simultaneous attempts per provider across every process sharing the database. There are no default caps; archon ai capacity release frees a slot held by an owner on another host. (#3460)
  • archon workflow logs <run-id> [--follow] prints or follows a run's transcript, and workflow get shows its path. The transcript now marks resumes with a workflow_resume row and records every gate approve, reject or response as a gate_decision row. (#3096, #3482)
  • An interrupted run records why it stopped. After Ctrl-C, workflow get shows Stopped: interrupted by the operator (SIGINT) and the console labels the run Interrupted; it stays resumable. (#3502)
  • Runs record the checkout they started from (checkout_baseline in workflow get and the API), and every node attempt records its starting checkout. (#3443, #3463)
  • A workflow's authored outcome is shown beside its execution status in the CLI, console, chat, Slack and dry runs. Every terminal run keeps a structured record (status, outcome, node states, skip causes, artifact inventory) that workflow get and the API can read even when reporting nodes never ran. (#3082, #3110, #3254)
  • A bash: or script: node can declare output_format and certify its own JSON result, and a result may point at an artifact file with { "type": "archon_artifact", "run_id", "path" }. An output_format schema that does not compile is a load error. (#3148, #3158)
  • bash: and script: nodes accept on_timeout: skip, so optional work can time out without failing the run. (#3174)
  • Workflows can declare an action-required durable wait. Delivery runs pause on inherited or environment CI failures and resume after an operator acts, and a concluded GitHub check wakes the waiting run right away. Waits report owner_lost when a run's owning process disappears. (#3115, #3172, #3175)
  • Packaged Bun and Python scripts can import pack-local .shared modules, in source checkouts, global workflows and binary installs. (#3252)
  • Script and bash nodes receive $TYPED_ARTIFACTS_FILE, a listing of typed artifacts grouped by output_type with read errors reported, and ADOPTED_RUN_DIR for adopted runs. (#3085, #3418)
  • More workflow problems are caught before a run spends money: output_format schemas Codex would reject for missing required keys, unbound INPUTS_* reads in script and bash nodes, and single-quoted $node.output references in shell. (#2970, #3084, #3310)
  • Provider capabilities declare cost reporting separately from spend-limit support, plus which token, stop-reason, turn-count and model metrics each provider reports. (#3398, #3412)
  • archon <command> --help and archon help <command> print help for that command only. (#3118)
  • Run lists in the CLI, API, console and manage_run show the nodes currently running. (#3116)
  • Delivery pack: archon-validate can compare a change, its base and the composed tree, and report a blocking interaction when only the combination fails. Triage judges whether an item is a usable contract and applies area labels when launched with publish. Deliver repairs an existing pull request when launched on its branch. Implement reads the repository's engineering.md when one exists. A late red CI result routes back into one correction round instead of failing the run. (#3059, #3071, #3220, #3224, #3413)

Changed

  • CLI commands write logs to stderr, so stdout carries only the command's output: archon workflow list --full > out.txt captures the listing and nothing else. Every command except archon serve logs at warn by default; pass --verbose or set LOG_LEVEL=debug for more. archon serve still logs at info on stdout. (#3444, #3445)
  • Workflow definition problems (deprecated or unknown keys, ignored fields, files that fail to load) are no longer logged at warn on every discovery. They appear in archon validate workflows, archon workflow list, the workflow run preamble and /api/workflows, and are still logged at debug. (#3406, #3444)
  • archon workflow status shows active runs for the current project; pass --all for the whole install. archon workflow list shows compact descriptions; workflow list <name> --full shows the whole one. (#3114, #3121)
  • Command suggestions are spelled for the surface showing them: /archon-workflow … in Slack, archon workflow … in the CLI, /workflow … elsewhere. (#3489, #3503)
  • archon doctor fails on retired or stale Archon skill folders, reports an expired or unreadable Pi credential instead of passing, and labels stored provider credentials connected (not validated). (#3182, #3426, #3500)
  • archon setup recommends a classic GitHub token, because fine-grained tokens cannot read check runs. (#3425)
  • A run's frozen workflow source now lives outside its artifacts directory and is re-verified before every read, and container runs mount the run's artifacts directory read-write. Source and binary builds ship the same bundled packs. (#3131, #3132, #3134, #3301)
  • workflow get --json lists only a run's reports in artifactFiles, with engine bookkeeping counted in artifactFilesOmitted. (#3454)
  • Run transcripts record idle-watchdog renewals once per burst instead of once per streamed chunk, cutting large transcripts by up to 95%. (#3088, #3456)
  • Telemetry sends one startup event per process, one start and one final outcome per run whatever path ends it, the install channel, and the shape of custom workflows (never their names). Crashed chat turns are counted. Telemetry no longer delays CLI exit. (#3256, #3483, #3491, #3497)
  • Delivery pack: validation runs the project's gate in a script for up to two hours and reports an interrupted gate as "didn't finish" rather than unexplained red. The review checks the change against the contract's acceptance list. Every reasoning node receives the operator's request. The pack's deterministic scripts are TypeScript. (#3030, #3090, #3296, #3465, #3470, #3511)
  • Bun is 1.4.2 across development, CI and Docker images. (#3078, #3210)

Fixed

  • On Windows, detached runs no longer flash a console window for every git and subprocess call. (12875f1)
  • On Windows, stopping a run's owner waits until its whole process tree has exited, and archon serve extracts the web UI from any shell. (#3280, #3487)
  • The Docker container no longer crash-loops on start when ~/.gitconfig holds several credential.https://github.com.helper values, as gh auth login inside the container leaves behind. With GH_TOKEN set, the entrypoint replaces them all with its own helper. (#3401)
  • Registering a local checkout, including automatic registration on archon workflow run, no longer repoints a same-named project that Archon cloned into its managed workspace, which silently broke other hosts sharing the database. Registration fails with a conflict naming both paths and the /update-project fix, and a refused registration leaves nothing behind on disk. (#3403, #3405, #3440, #3442)
  • Archon decides whether a path is in its managed workspace by comparing it with the configured workspaces root. On Windows no path was recognized, and lookalike paths such as ~/.archon/workspaces-old/... were treated as managed and could be hard-reset. (#3441, #3442)
  • A worktree whose setup fails (git identity, submodule init or configured file copies) is removed instead of being adopted as ready by a later run. Worktrees are created locked until setup finishes, and a run that finds a locked one refuses it and names the command that clears it. (#3448, #3453)
  • Worktree cleanup recognizes squash-merged branches through PR state, judges merges against the remote base branch, and still judges a worktree whose local branch ref is gone. (#3002, #3038, #3476)
  • Parallel launches no longer fail on git ref-lock races during workspace sync, repository sync and PR or fork-PR fetches, and concurrent fork-PR launches share one review worktree. (#3087, #3112, #3144, #3159, #3164)
  • Resumed runs keep writing to their original conversation, keep the base branch and workflow source they started with across a gate, and show already-completed nodes as completed in Slack and the Web UI. (#3308, #3337, #3458)
  • --supersedes accepts short run-id prefixes and works on runs that failed before creating an output root. --adopt keeps an explicitly chosen workflow source and accepts runs whose isolation environment was created mid-run. Persisted output roots are always resolved inside ARCHON_HOME. (#3047, #3070, #3113, #3122, #3221)
  • A detached or foreground CLI run resumes its own timed or event wait when the deadline passes, without archon serve. A resume that cannot continue suggests the same-branch relaunch command. (#3165, #3316)
  • Loop nodes honor their provider, model, tool and timeout settings, and a loop_group forwards its model to body nodes. Loop groups in two-level includes run correctly, and sink warnings see include-composed sinks. (#3248, #3284, #3406, #3459)
  • Workflows in a symlinked scope root such as ~/.archon/workflows run instead of reporting "not found", and fixtures in a top-level workflow folder no longer load as broken workflows. (#3233, #3408)
  • The console builder flags $node.output references inside Markdown code spans, matching the loader. (#3345)
  • Providers: OpenCode nodes fail on an unresolved permission request instead of hanging; Pi records usage and cost for every model call, lets its own retries finish inside the node, and works with manage_run on Vertex; Pi's model-not-found error names pi update --models; Copilot tool failures show their error message; Codex and Claude binary pins give actionable errors, and source installs honor Codex pins. (#3045, #3200, #3299, #3344, #3409, #3414, #3455)
  • Node durations in workflow get --verbose are correct across daylight-saving changes. (#3343)
  • GitHub App auth keeps working through a transient outage of GitHub's installation-lookup endpoints. (#3435)
  • Clone credentials for GitHub, GitLab, Gitea and Forgejo stay out of git arguments, persisted remotes, errors and logs. Credentials written to stderr by a successful node are redacted in chat as they are in the transcript. (#3067, #3120)
  • The artifact preview API refuses symlinks that escape a run's artifacts directory. (#3163)
  • Hashed web assets are served with an immutable cache policy, so a deploy is no longer hidden behind a stale page. (#3424)
  • A worktree whose hashed server port is taken starts on the next free port instead of failing to bind. (#3177)
  • A bare reset in Slack works as /reset, and an empty rejection reason over REST records the default "Rejected". (#3181, #3300)
  • Delivery pack: a PR merged while its run is still delivering counts as delivered; a delivery that dies after opening its PR is never reported delivered; a failed gate or unreadable check state blocks the ready flip; resuming at the validation gate re-runs validation; archon-ship ends cleanly when the work was already delivered. (#3000, #3095, #3100, #3145, #3368, #3473)

Removed

  • The legacy Web UI. The console is the only Web UI, and old URLs and run bookmarks redirect into it. (#3402)
  • The experimental archon-stabilize workflow. (#3066)

Installation

Quick Install (Recommended)

macOS / Linux

curl -fsSL https://archon.diy/install | bash

Windows (PowerShell)

irm https://archon.diy/install.ps1 | iex

Homebrew (macOS / Linux)

brew install coleam00/archon/archon

Docker

docker run --rm -v "$PWD:/workspace" ghcr.io/coleam00/archon:latest workflow list

Manual Installation

macOS (Apple Silicon)

curl -fsSL https://github.com/coleam00/Archon/releases/latest/download/archon-darwin-arm64 -o /usr/local/bin/archon
chmod +x /usr/local/bin/archon

macOS (Intel)

curl -fsSL https://github.com/coleam00/Archon/releases/latest/download/archon-darwin-x64 -o /usr/local/bin/archon
chmod +x /usr/local/bin/archon

Linux (x64)

curl -fsSL https://github.com/coleam00/Archon/releases/latest/download/archon-linux-x64 -o /usr/local/bin/archon
chmod +x /usr/local/bin/archon

Linux (ARM64)

curl -fsSL https://github.com/coleam00/Archon/releases/latest/download/archon-linux-arm64 -o /usr/local/bin/archon
chmod +x /usr/local/bin/archon

Windows (Manual)
Download archon-windows-x64.exe from the assets below, rename to archon.exe, and add to your PATH.

Verify installation

archon version

Full Changelog: v0.10.1...v0.11.0

Don't miss a new Archon release

NewReleases is sending notifications on new releases.