Slack runs only as a plugin. Declared MCP servers and misplaced node keys fail before any tokens are spent. Completed runs clean up their own worktrees and scratch space. The SDLC merge queue merges clean PRs at once, and queue answers continue without waiting for the next pass.
Breaking
- The server no longer contains a Slack adapter; Slack runs only as the
chat-slackplugin. Docker images ship a verified release and install it offline on startup whenSLACK_BOT_TOKENis set, including on existing volumes, and boot logs explain what was installed; valid installed versions are kept. Removing the plugin while tokens are still set reinstalls it on restart, so remove the tokens from every env source too to keep Slack off. Outside Docker, runarchon plugin add coleam00/Archon/plugins/chat-slackand restart. A token without an installed plugin logschat.bundled_adapter_retiredwith the Docker guidance and the manual command. The Slack app,SLACK_BOT_TOKEN,SLACK_APP_TOKEN,SLACK_ALLOWED_USER_IDS,SLACK_STREAMING_MODE, and existing Slack conversations, linked identities and workspaces are unchanged. In Slack,/archon connect githubnow points to the Web UI orarchon auth githubinstead of running the device flow. Remove the plugin before downgrading to a release without chat plugin support, which rejects its receipt. (#4659, #4792) - Public
GET /api/healthno longer lists conversation IDs:concurrency.activeConversationIdsandqueuedByConversationare gone, replaced byoldestActiveAgeMsandoldestQueuedAgeMs. A monitor that read the removed fields should use the new authenticatedGET /api/dashboard/conversations, which shows when each conversation took its slot and how long its messages have waited. (#4654) - SDLC pack inputs are removed:
orderfromarchon-intake,archon-build-queueandarchon-merge-queue(queues always claim in the old default order),trustfromarchon-intake(trust comes only frommaintainers.json), and the eval/replaymodeinput from every queue andarchon-discoveries. A launch, trigger binding or timer that still passes one of them fails to start because the workflow no longer declares it; drop the input. (#4574, #5015, #5018) - SDLC policy files in
.archon/sdlc/policy/now add to the pack default and win where the two conflict, instead of replacing the default whole. A project file that copied the whole default still works; a file that left default rules out to disable them now gets those rules back, so state the override explicitly. (#4794) - The SDLC pack calls a stop that needs a decision
askinstead ofneeds_human: the review action, the delivery round ending, the settle-threads output (settle_ask,INPUTS_SETTLE_ASK) and thearchon-shipstop reason. A custom workflow or script that matchedneeds_humanor bound the old settle-threads output must use the new names. (#4621) - A Claude or Codex node now fails as
misconfiguredbefore its first model turn when a declaredmcp:server fails to connect, needs auth, is disabled or is missing, instead of warning and running without its tools.optional: truestill covers a missing file or a provider without MCP support, but not a loaded server that fails. Copilot is unchanged. (#4782)
Security
- Logs no longer record text that could come from users or models: Codex's unparseable app-server lines log only their byte length, workflow YAML parse failures log no source excerpt or parser message (authors still see the full error), and title generation logs only the conversation ID and event. (#4506, #4926, #4946)
- Container runs can no longer redirect host writes. Engine writes under
$ARTIFACTS_DIRrefuse a symlinked parent directory and replace a symlinked file, and the artifact collision check no longer follows a symlink or blocks on a FIFO the container placed at an artifact's metadata path. (#4731, #4824)
Added
archon workflow artifacts <run-id> [path]lists a run's artifact files or prints one, andarchon project listlists registered projects with the key--projectaccepts. Both take--jsonand need no running server. (#4653)archon workflow end-turn <run-id>ends a stalled tool call or background-work turn without cancelling the run. The turn fails astimeoutand the node's retry policy applies. (#4620)archon workflow run --project owner/repo --cwd <other clone>runs a workflow from another clone under a registered project without registering the clone, and--config-from-run <run-id>starts a fresh run with the--configlayer another run started with. (#4652, #4843)- Foreground run completion and
archon workflow getshow the run's recorded cost and input and output tokens, orunknown. (#4854) - Each run gets a scratch directory,
$ARTIFACTS_DIR/.archon/scratch/, deleted once the run is completed, failed or cancelled and its owner process is gone. The SDLC pack puts throwaway checkouts andnode_modulesthere. (#4888) - A
workflow:fan-out records each child's outcome (completed, failed, not started, or cancelled with its cause) and a tally asfan_out_outcome, shown byarchon workflow get, the run API and the console.max_parallel: allstarts every child at once, so each can raise its attention item in one pass and be answered on its own. (#4791, #4962) - A command or prompt node in a
loop_groupbody can fork the session of an earlier node in the same iteration withcontext: { resume: <node> }. (#4738) model:accepts a preference list of@aliasesending in a tier or model id, such as['@review-seams', '@reviewer', medium]. The first alias the run's config defines wins, otherwise the last entry;--model @alias=<model>can bind an alias no config defines. (#4624)assistants.codex.toolFreeStructuredOutputModelslists Codex models whose route rejects tools together with a strict schema. Those models run their tool turns without the schema and then one tool-free final turn withoutput_format. (#4657, #4906)- Chat assistants with native tools can start workflows that declare required inputs:
invoke_workflowtakesinputs, and a missing input goes back to the assistant so it can ask. (#4651) - GitHub Enterprise Server works through
GITHUB_URL: the GitHub adapter's PAT, App and per-user clients call<GITHUB_URL>/api/v3, HTTPS clones on that host get the token, and forge calls keep a configured HTTP scheme and port. App-mode git operations after the first clone and*.ghe.comare not covered yet. (#4658, #4873, #4958) - Local clients can find a running server in
$ARCHON_HOME/server.jsonand confirm it serves that home by comparingstoreIdfromGET /api/healthwith the home'sstore-idfile. (#5068) archon workflow attention --watchlines carry each run'sworkflowandparentRunId, and a failed run'sterminalline carriescause: { node, errorClass }. (#5065)- Workflow fixtures can assert an authored verdict with
fixture.authored: succeeded|failed, and dry runs report the verdict a return node produced. (#5062) - The forge contract gains
pr.threads,pr.thread.reply,pr.thread.resolve,workitem.edit-body, and reads for comments with authors, checks at a revision or on the default branch, and a pull request's behind count and mergeability. The GitHub forge plugin implements them. (#4585, #5016) - SDLC pack additions:
archon-build-queue --input number=<issue>claims and builds that issue, and each pack stage names a model alias (@triage,@planner,@investigator,@implementer,@reviewer,@review-<lens>) that falls back to its old tier, so one stage can move to another model. (#4611, #4627)- A maintainer who opts in through
maintainers.jsongets their own open PRs merged through the merge queue, and an answer that continues an item launches the follow-up run at once on the answered run's config. (#4663, #4728) - Every build and merge queue question offers
other; its text is written into the issue body as a dated ruling and the item continues from it. A maintainer can also hand a build item's PR to the merge queue with areadyanswer. (#4561, #5178) - With
retriage_asset, the build queue revisits blocked items and the merge queue re-triages an issue still open after its PR merged. (#4618, #4991) - On the
forgesource, delivery answers and resolves review threads, rulings reach the issue body, labels change one at a time, and the merge queue runs. The preflight now requires these operations: update the GitHub forge plugin to v0.13.0 witharchon plugin update coleam00/Archon/plugins/forge-github, since v0.12.1 is refused. (#4625, #5016, #5232) - Triage reports related items from every comment, and plan reads them as a new
relatedinput.archon-prtakes apublish_descriptioninput that delivery uses to publish the PR description before review reads it. (#4673, #4879)
Changed
- A workflow node that carries a key belonging to another node type, or a loop setting outside
loop:orloop_group:, now fails the workflow load instead of being ignored or only warned about. For example,runtime: bunon aprompt:node or a top-levelinteractive: trueon acommand:node is a load error naming the node, the key and the node types that support it. Move the key to a node that honours it, or delete it. Wrong-key and legacysteps:errors are shorter and point to the authoring guide. (#4655, #4840) - A completed run removes the worktree it created on its own run-named branch when the checkout is clean and every commit is on a remote, published or not. Branches are kept,
--branchworktrees are never removed, and a kept worktree prints a warning naming its path. The read-only SDLC workflows (intake, triage, discoveries, merge queue) no longer create a worktree. (#4915) - A credential preflight refuses a run only for a definite bad credential (
unusable,not_connected). An inconclusive check starts the run and records acredential_check_inconclusiveevent; the probe now has 60 s instead of 20 s, and a timeout says so. (#4963, #5189) - Runs in an unregistered working directory store their output under
@cwd/<basename>-<digest>, where the digest comes from the directory's full path, so two directories with the same folder name no longer share$STATE_DIR. Moving a directory gives it a new root. Existing_cwd/<basename>trees are left in place and no longer read; when one exists, a run logs its location and the new root so you can move state that belongs to that directory. Resumed runs keep their recorded root. (#4637) - Chat no longer treats
/invoke-workflowor/register-projectlines in an assistant reply as commands. OpenCode and Copilot launch through the detached CLI after project selection, and registering a project on them needs an explicit user/register-project. (#4849) - Answering a wait no longer re-runs nodes that failed before the pause; their failures are replayed and their dependents keep cached results.
archon workflow resumeof a failed run still retries them. An answered attention wait whose question changed on resume, including inside a loop group, discards the old answer and asks again, recordingreaskedFrom. (#4677, #4682, #4903) - GitHub webhooks for an existing registration no longer sync (
git reset --hard) the checkout, matching GitLab and Gitea, and a project registered at a subdirectory of a checkout uses its saved path instead of trying to clone. (#4507) - Pi nodes with
output_formatanswer through a terminatingstructured_outputtool call validated in the session, instead of having the transcript scraped, so thinking-only models such as Bedrock GLM work. (#4899) - A provider plugin protocol failure names what was wrong (malformed JSON, or the schema path and issue code), the message name when the host handles it, the line length and the plugin version, in both the node error and the
provider.plugin.protocol_failedlog, without recording any text from the message. Codex shutdown events reach the host log asprovider.plugin.log. (#4930, #4943) archon doctorno longer checks SDLC forge access, and its exit code no longer depends on it. Runarchon workflow run archon-forge-checkfrom a checkout instead: the new bundled workflow runs the same check the pack's delivery workflows run first and names the credential source it used or why it refused. (#4441)- Server telemetry reports how many chat plugins it hosts (
chat_plugins), andadapter_slacknow means the Slack plugin is installed rather than that Slack tokens are set. Plugin IDs are not sent. Telemetryschema_versionis 11. (#4659) - The console no longer shows a run as live when its owner process is gone: it reads "owner not answering" or "owner unknown", stops the live animations and offers Abandon. The run detail API gains the owner observation. (#4660)
archon workflow getshows engine artifact files as a count and at most 20 other artifact paths;--jsonstays complete. (#5040)- The chat router no longer names bundled SDLC workflows in its examples, shows a deprecated workflow's message, and does not recommend a deprecated workflow when a current one fits. (#4527)
- A loop added in the console builder starts with a shell completion check instead of the deprecated
until: COMPLETE. (#5069) - The bundled
archon-cliskill teaches launching the SDLC queues with inputs, watching every run on oneworkflow attention --watchstream,workflow end-turn,--projectlaunches, and authoring through validate, dry run and fixtures. (#4626, #4832, #4858) - SDLC merge queue: it merges a Ready, CI-green PR that the forge reports as cleanly mergeable in the same sweep, without syncing, pushing, re-reviewing or waiting for CI; conflicts go back to the build queue. It refuses a Ready verdict given at another commit and a red default branch. Unresolved review threads hold a merge only when one raises a defect in what the PR changes. Changes under
.archon/always ask, and a dated Current scope ruling that authorizes merge counts as approval. (#4500, #4551, #4642, #4686, #4785, #4908, #5091) - SDLC review and delivery: review blocks on a test gap only when the behavior matters and the test is worth keeping, sends scope questions to an
askinstead ofreplan, and asks for acorrectround when it raises the same finding twice. Plan maps every acceptance item, invariant and constraint to steps. The CI node no longer suggests a polling loop and tells the agent not to wait with a baresleep. Discoveries files small findings in one area together as oneCleanup: <area>issue. (#4517, #4612, #4649, #5029, #5172, #5184) - SDLC queue mechanics: a continued build round starts from the PR's head, and route can mark an already finished PR
readywithout a paid round. Queue pickup reads all work items in onearchon statecall, and an idle pass names stored items it could not act on. Build and merge queue follow-up runs keep the launching run's inputs. The PR-body and merge steps follow the issue's ruling on whether a PR closes its issue. (#4573, #4646, #4647, #4721, #4878, #5173)
Deprecated
- The Copilot and OpenCode providers and the Telegram adapter are deprecated: no Archon maintainer owns them. They stay bundled and keep working, with no removal scheduled. Each warns once per command or process and points to the plugin guide; Telegram logs
telegram.deprecated. (#4650, #5232)
Removed
- The one-time warnings for repo-local
.archon/state/,.archon/artifacts/,.archon/logs/and the old home workflow directory are gone. These locations are neither read nor migrated automatically. To move old state, setSTATE_DIRin your shell to the destination your workflow uses, then runmkdir -p "$STATE_DIR"andmv .archon/state/* "$STATE_DIR"/from the repository, and update workflows to use$STATE_DIR. The glob moves non-hidden entries; check hidden entries and destination conflicts before moving them. For home workflows, withARCHON_HOMEset to your Archon home (default~/.archon), runmv "$ARCHON_HOME/.archon/workflows" "$ARCHON_HOME/workflows"if the destination does not exist; otherwise merge the files by hand. Old artifacts and logs stay where they were; inspect them by hand, since run-scoped destinations make a bulk move unsafe. The separate notice for legacy_cwd/<basename>storage remains. (#4877) - The
script:node no longer warns when a body still uses a literal$ARGUMENTS,$USER_MESSAGEor$CONTEXT; the one-release migration warning is gone. These variables are not substituted in ascript:body, so the literal text stays in the source. Read them from the environment instead:process.env.ARGUMENTS(bun) oros.environ['ARGUMENTS'](uv/python). (#4793) - The SDLC pack drops the
assert-changedguard after each implement turn, which only produced false failures, the unusedcomparisonpath ofarchon-validate(with itsinteractioncause andevidencepointer), and the intake backlog bench. (#4532, #4537, #4574)
Fixed
- A Codex node no longer fails with
Provider plugin codex protocol failed ... (invalid_message): provider stream ended before settledafter its turn finished. With many Codex nodes ending together, Codex often took more than three seconds to exit after stdin closed, and the SIGTERM Archon then sent made it wait about 40 seconds and exit 1. After a turn, Archon now waits for Codex to exit without sending SIGTERM, loggingcodex.app_server_still_exitingevery 30 seconds while it waits. Cancelling the run still interrupts Codex and sends SIGTERM if it does not exit. A non-object JSON line from Codex is ignored and logged instead of crashing the reader. (#4936, #4944, #4949, #4994) - Claude subscription logins pass credential preflight again, and CLI runs under
store: fileswith a user identity use the provider's own login. A Claude resume rejected because the transcript is gone retries once on a fresh session when no output was produced yet. (#4631, #4734, #4967) - A run stopped by a provider usage limit with a known reset now pauses and resumes at the reset even when a downstream
all_donenode also failed, at top level, in loop groups and in composed fan-outs. (#4954) - Loops and loop groups behave as an uninterrupted run would:
until_bashsees the current iteration's typed artifacts and, after a resume, both the current and previous outputs; large$work.outputand$LOOP_PREVvalues no longer overwrite each other; a failed loop group body fails the run instead of leaving it paused; aninclude:gated on$LOOP_PREVruns or skips as one block; a nested terminal wait resumes in the outer iteration that paused; and dry runs of a body ending in a gate take the work node's output. (#4614, #4636, #4709, #4749, #4762, #4920, #5089) - Resume restores the oversized
bash:/script:output that belongs to the resumed event, and a paused run's wait stays answerable when a newer Archon added a field to it. (#4781, #4821) - Bash nodes, loop completion checks and dry runs pass the resolved script on stdin, so several large inline references no longer hit the OS argument-length limit. (#4716)
- Run cost and token totals are complete: a loop that throws after a paid iteration keeps its spend, an approval
on_rejectrework turn counts, OpenCode counts every assistant message and every sub-agent's cost, a failed direct-chat turn reports what it spent, malformed counters make a total unknown instead of partial, resumed runs leave an unreported cost absent instead of$0, and the console shows a reported$0.0000. (#4615, #4630, #4635, #4662, #4718, #4950, #4951, #4976, #5067) - Runs no longer stay
runningwith no owner after a store failure during source setup, a refused adoption, or a detached launch whose workflow source disappeared; they endfailedorlaunch_failed. (#4613, #4845, #4911) - SQLite holds its write lock for less time: startup on a current database takes no writer lock and a needed upgrade waits for a busy writer instead of failing, finishing a run walks its artifacts outside the transaction with a bounded manifest, and removing a worktree runs outside the transaction. (#5190, #5191, #5192)
- Worktree safety:
archon completeand other cleanup refuse to remove a worktree whose registration was replaced after it was selected, a repository cloned under a gitinsteadOfrewrite can be reused, a repository owned by another user (such as a root-owned Docker bind mount) registers instead of returning HTTP 500, a managed checkout saved with a trailing slash or dot segment is re-verified or recloned instead of refused, and/statusshows a failed merge inspection separately. (#4633, #4661, #4712, #4822, #5088) - Container runs stop their container before an approval or write-back pause becomes resumable, restart it on resume only after the store admits the resume, stop it while waiting to retry an unreadable source, and report a failed container cleanup after a gate rejection. (#4844, #4934, #4941, #5053)
- An isolated
workflow:child's$BASE_BRANCHnames the branch its worktree was cut from, and a composed fan-out that cannot read its parent's status stops with an interruption instead of a false node failure. (#4643, #4932) mutates_checkout: falsecatches writes to an already-dirty file or new files in an untracked directory. (#4616)- Process control: a timed-out
bash:/script:node in a detached POSIX run confirms its process group is gone before reporting the timeout, cancelling a run warns that background jobs from completed nodes may still run, and on Windowsworkflow cancelandabandonstop every process in the run owner's job without targeting an exited root whose PID could be reused. (#4656, #4848, #4939, #5064) workflow abandonon a parent with more than 500 leaf children no longer reports false cancellation failures. (#4638)- Attention: a project-bound chat sees only its own project's paused gates,
--watchreports an owner loss once per claim and fails at startup when the listener rejects the first delivery, a lost label race always reportsStaleGateAnswerError, and the stream skips a run it cannot read with adegradedline instead of stalling. (#4511, #4634, #4711, #4901, #4955) - Triggers: a guarded start whose checkout is held by another run queues and names the blocker instead of being cancelled, a damaged start receipt no longer blocks other queued starts, and an unsupported stored run status is reported instead of treated as missing. (#4846, #4931, #4975)
- Stored workflow statuses Archon does not know raise
WorkflowStatusReadErrornaming the run and value, in the store, isolation cleanup and the container list. (#4853, #4927) - A chat dispatch that names a run to supersede is refused when it would continue an existing run, and a batch-mode turn made only of tool indicators replies with its messages instead of
---. (#4542, #4710) - HTTP API: the workflow launch and conversation-message routes publish their request bodies in OpenAPI and the generated types, a multipart
filespart that is not a file returns 400 instead of being dropped, and a launch body that is not a JSON object returns 400 instead of 500. (#4894, #5050, #5051, #5052) GET /api/codebaseslists a repository once across trailing-slash,.git, SSH/HTTPS and case variants, renaming a project to a name another one uses in any case is refused, and one legacy relative-path registration no longer breaks commands in a healthy project. (#4508, #4789, #4827)- CLI:
--configand--config-from-runare refused beforeforge,workflow wakeandworkflow signalstart instead of being ignored, and a rejected--configemits the JSON envelope under--json. Help showssetup --scope,workflow reset-sessions,workflow event emitandworkflow attention label's own flags. (#4869, #4905, #4960, #5055) archon setupwrites the docs path into the project the skill went to and into a freshly bootstrapped config, and--spawnworks in macOS Terminal, the xterm fallback andx-terminal-emulator, falling back to the next terminal or manual steps when one is missing. (#4632, #4714, #4829, #4923, #5054)archon serveextracts the web UI in-process instead of spawningtar, which stalled on Windows. (#5086)- File store: Windows renames retry busy handles for up to 2 s, and locking removes empty or torn scratch files once their owner is gone. (#4513, #4952)
workflow wake --watchreports a resumed run's outcome before scratch cleanup, concurrent starts print the legacy cwd storage notice once per directory, and failedbash:/script:nodes in dry runs and fixture reports show bounded, redacted output tails. (#4925, #4995, #5049)- Two run-state store failures that used to vanish now log a warning with the run, the operation and a recovery step. (#4771)
- SDLC pack fixes: the merge queue records what the forge reports, survives a locked tracking ref, a dev CI it could not check, an unreadable default branch and a failed
gh pr list, parks a PR after two failed reads, takes answers on own PRs, rejoins a parked own PR after a push, no longer enrolls build-queue PRs as own PRs, refuses an ask that offersreturnwhere it cannot, and keepsRefson a refused merge. The build queue starts a fresh round when a ruling supersedes the open PR, re-drafts a PR that changed while being marked ready, and implements on its own earlier PR and on a queue branch matching the PR head. Delivered PRs close their issues, review createsreview/before it runs, review no longer blocks on a stale PR description, the CI node waits in the foreground, a transient forge error on a comment write is retried, and a build-owned PR without a brief pauses for an answer. (#4488, #4518, #4526, #4531, #4644, #4690, #4691, #4715, #4725, #4733, #4823, #4825, #4826, #4841, #4874, #4916, #4918, #4921, #4945, #4964, #5017, #5177)
Installation
Quick Install (Recommended)
macOS / Linux
curl -fsSL https://archon.diy/install | bashWindows (PowerShell)
irm https://archon.diy/install.ps1 | iexHomebrew (macOS / Linux)
brew install coleam00/archon/archonDocker
docker run --rm -v "$PWD:/workspace" ghcr.io/coleam00/archon:latest workflow listManual 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/archonmacOS (Intel)
curl -fsSL https://github.com/coleam00/Archon/releases/latest/download/archon-darwin-x64 -o /usr/local/bin/archon
chmod +x /usr/local/bin/archonLinux (x64)
curl -fsSL https://github.com/coleam00/Archon/releases/latest/download/archon-linux-x64 -o /usr/local/bin/archon
chmod +x /usr/local/bin/archonLinux (ARM64)
curl -fsSL https://github.com/coleam00/Archon/releases/latest/download/archon-linux-arm64 -o /usr/local/bin/archon
chmod +x /usr/local/bin/archonWindows (Manual)
Download archon-windows-x64.exe from the assets below, rename to archon.exe, and add to your PATH.
Release assets
| Asset | Purpose |
|---|---|
archon-<os>-<arch>[.exe]
| CLI |
archon-server-<os>-<arch>[.exe]
| Version-matched server executable fetched by archon serve
|
archon-forge-github-<os>-<arch>[.exe]
| GitHub forge plugin |
archon-chat-slack-<os>-<arch>[.exe]
| Slack chat plugin |
archon-provider-claude-<os>-<arch>[.exe]
| Claude provider plugin, installed by archon provider add claude
|
archon-provider-codex-<os>-<arch>[.exe]
| Codex provider plugin, installed by archon provider add codex
|
archon-provider-pi-<os>-<arch>[.exe]
| Pi provider plugin, installed by archon provider add pi
|
archon-web.tar.gz
| Web UI |
checksums.txt
| SHA-256 checksums for every asset |
Verify installation
archon version