需先单独安装并登录 Claude Code 或 Codex,否则没有可用的 agent 运行时;sdlc 包默认不绑定任何触发器,队列需手动启动或自行配置 trigger;sdlc 包访问 GitHub 需额外执行 archon plugin add coleam00/Archon/plugins/forge-github 安装 forge 插件。

Archon
coleam00MIT活跃维护开源的 AI 编码编排框架,用 YAML 定义可复现的工作流,让 AI 写代码从随机发挥变成确定、可重复的流程。
The first open-source harness builder for AI coding. Make AI coding deterministic and repeatable.
curl -fsSL https://archon.diy/install | bash
archon workflow run archon-investigate "Why does the login test fail?"README 未说明显存或 GPU 要求;需先安装并登录 Claude Code 或 Codex 作为 agent 运行时,Archon 本身自托管在机器或服务器上,默认 SQLite,可选 PostgreSQL。
用 YAML 工作流把 AI 编码流程固定下来,让每次运行都按你写的步骤和检查点执行
开源的 AI 编码编排框架,用 YAML 定义可复现的工作流,让 AI 写代码从随机发挥变成确定、可重复的流程。
核心能力
- 用 YAML 定义节点图,把 agent、脚本、循环和人工审批串成流程
- 循环节点用测试命令判定完成,代码决定何时结束而非模型
- 运行到需人决策处暂停为 attention 项,附建议与选项
- 内置 sdlc 包实现 issue 进、合并 PR 出的软件工厂
- 通过插件接入 Claude Code、Codex、Pi 及 GitHub、Slack 等
容易踩的坑
- v0.14.0Archon CLI v0.14.0最新正式版2026-11-07 · 2026-11-07 08:57 UTC
The SDLC pack reaches GitHub only through the forge plugin, packs can declare settings, and
archon metricsmeasures the factory.Breaking
- The bundled SDLC pack reaches the forge only through
archon forgeand an installed forge plugin; the pack'sghpath is gone and nothing falls back togh. Install the plugin witharchon plugin add coleam00/Archon/plugins/forge-github. Delivery and the merge queue need plugin v0.13.0 or later, and their forge checks refuse a plugin missing an operation they need; the metrics workflows and the build queue's lookup of a dead round's pull request need this release's plugin, forpr.viewtimestamps,pr.viewof a head in any state,pr.filesandrepo.file. Your existinggh auth login,GH_TOKENorGITHUB_TOKENis still the credential, and a leftoverARCHON_SDLC_FORGEis ignored. A pack run in a container refuses at its forge check, since a container has no host command. The merge queue's own-PR enrollment notes that the forge cannot list a maintainer's pull requests and continues with the queue's other work. A red default branch is now always raised to a maintainer instead of rerun, because the forge reruns checks only on a pull request. (#5222, #5365)
Added
- A pack can declare settings once in
<pack>/.pack/pack.yaml, and a project sets them in.archon/packs/<pack>.yaml. Every workflow of the pack reads them as inputs; an unknown key or a wrong-typed value refuses the run, naming the file and the key. (#5342) archon project config <id|name>andGET /api/codebases/{id}/configshow a project's merged config with secrets and env values removed. (#5334)archon metricsand/api/metricsaggregate metrics that nodes return across runs, compare runs before and after a change with intervals and cost, compare the models that ran one step, report factory PR counts and merge rate attributed to the runs that built each PR, and count factory tests that protect no behavior, with the judge's agreement against hand labels. The test-value judge judges each test on its own merits and also reads tests defined outside test files. (#5314, #5319, #5323, #5324, #5329, #5346)- The console metrics page shows trends, judge calibration, and the overview cards a pack declares, with a Details screen. (#5339, #5354)
- A run can hold a lease on a state document (
archon state put|patch --lease,--release-lease). Reads report whether the lease is live from the holder run's status, and the engine never ends a lease on age. The SDLC pack's claims use it. (#5366) - Attention waits carry a recommendation, what each option does, and a value returned with the answer. (#5367)
- The attention queue streams over SSE for HTTP clients. (#5387)
- A run started by a trigger binding is recorded as the start's requester. (#5368)
- A node can read which nodes in its run failed, were skipped or completed. (#5361)
- A node can read its own pack's directory as
$PACK_DIR. (#5363) - A loop that runs out of iterations can complete with its last output instead of failing the run. (#5362)
- The forge contract can read pull request timestamps, a pull request's files, and a file at a commit. (#5379)
- SDLC pack: the build queue can build only the work items an operator put in a work order (
orders_only). (#5390) - SDLC pack: a large item is split into issues only when it can't be built as one; a PRD splits into phases that each prove an outcome. (#5322)
- SDLC pack: review's code lens uses a user-facing change in a browser, and a new ux lens judges a UI change as its operator would. (#5389, #5392)
Changed
- Built-in Codex defaults use the GPT-6.1 models. (#5378)
- SDLC pack: queue follow-up runs start through the operator's trigger bindings, so binding capacity and deduplication apply to them. (#5369)
- SDLC pack: the build queue stops relaunching a pull request that changed nothing since its last review. (#5303)
- SDLC pack: transient GitHub read failures are retried, a dated scope ruling
- The bundled SDLC pack reaches the forge only through
- v0.13.2Archon CLI v0.13.22026-10-29 · 2026-10-29 22:05 UTC
查看更新说明
Upgrading from 0.13.0 with providers installed works in one command again.
Fixed
archon provider addandarchon plugin updatenow replace a maintained provider installed by 0.13.0, whose receipt declares the older plugin protocol, including several providers in one command. On 0.13.1 they refused, saying the executable "may belong to a plugin whose receipt cannot be read", so the documented upgrade step failed and workflows that used that provider stopped loading. A file with an unreadable receipt or a different plugin ID is still refused, and the existing repair for a provider's own malformed receipt is unchanged. (#5287)archon isolation cleanuphelp and the CLI reference describe the container threshold as age since the environment was created, which is what cleanup uses. (#5283)- The source-install guide points to the Bun version the repository pins instead of
>= 1.0.0. (#5275)
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.exefrom the assets below, rename toarchon.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 servearchon-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 claudearchon-provider-codex-<os>-<arch>[.exe]Codex provider plugin, installed by archon provider add codexarchon-provider-pi-<os>-<arch>[.exe]Pi provider plugin, installed by archon provider add piarchon-web.tar.gzWeb UI checksums.txtSHA-256 checksums for every asset Verify installation
archon version - v0.13.1Archon CLI v0.13.12026-10-29 · 2026-10-29 19:35 UTC
查看更新说明
Workflow names must match exactly, provider plugins move to protocol 3, and a batch of fixes for Postgres boots, Codex runs, cleanup and cost accounting.
Upgrading from 0.13.0 with providers installed: use v0.13.2. In 0.13.1,
archon provider addrefused to replace providers installed by 0.13.0 (#5272). 0.13.2 fixes it, andarchon provider add claude codex piworks in one step.Breaking
- The provider plugin protocol is now 3. After upgrading, run
archon provider addagain for each provider you use. Third-party provider plugins must rebuild against protocol 3. A provider installed by 0.13.0 is reported as unavailable, naming its protocol, this Archon's protocol and the command that fixes it, instead of failing workflow discovery withInvalid input. (#5252, #5270) - Workflow names resolve by exact name everywhere:
archon workflow run, the chat/workflowcommand, the run API,workflow:children,include:, composed fan-outs and resume.archon workflow run reviewno longer selectsarchon-review; the error suggests the closest names instead. Aworkflow:orinclude:target that is not an exact name fails to load, so adding a workflow can no longer change which child runs. Project-name matching is unchanged. (#5259) - Output field references accept properties declared through
allOf,anyOfandoneOf, including nested compositions and schemas without root properties. A reference to a field that a composition-only schema declares nowhere now fails at load instead of being read schemaless. (#5255)
Changed
- SDLC build queue: before it continues an item, the answer checks the whole change against the issue's contract and asks when a correction would add machinery the contract does not name, naming the subtractive option. Review proposes removing machinery a change added before extending it. A Ready, green pull request whose only remaining check no round can run is asked about once instead of relaunched. The answer declares its question's class (
stoporscope), and the queue records that class instead of deriving it from the round count. (#5266)
Fixed
- PostgreSQL: a boot that finds the schema current skips convergence, and so takes no lock and runs no DDL. Deadlock and serialization victims (40P01, 40001) retry, and concurrent boots on a fresh database recover from schema deadlocks, so a status query or timer tick no longer kills a live run with "deadlock detected". (#4543, #5249)
- A provider turn that stays silent after its result now fails at the node's
idle_timeoutinstead of hanging the run indefinitely. (#5252) - A usage-limit wait across a fan-out or loop group no longer resumes before the reset a provider reported. (#5250)
- Codex: a "no usable login" credential check is rechecked once in a fresh process, so concurrent runs sharing one refreshing login are not refused. Schema conversion keeps conditional
oneOf/anyOf/allOfoutput schemas satisfiable, and a shape it cannot express is refused before the run with the keyword and path. (#5245, #5253) - Abandoning a run keeps the checkout of a sub-run whose owner may still be live instead of deleting it. A crash before a container write-back apply no longer resumes as applied and discards the overlay. (#5251, #5243)
- Cleanup of an unregistered checkout, and terminal writes in the file store, no longer hold a lock while they delete files or walk artifacts. (#5238, #5242)
- A refreshed OAuth credential keeps its label, and a lost token rotation is reported as needing a reconnect instead of healthy. (#5240)
- When the newest of several servers on one Archon home stops,
server.jsonis handed to a server still listening instead of being removed. (#5237) - On Windows, a registered repository is no longer refused as "a different clone" when its path differs only in slash direction or drive-letter case. (#5244)
- A run blocked because another worktree holds its branch
- The provider plugin protocol is now 3. After upgrading, run
- v0.13.0Archon CLI v0.13.02026-10-28 · 2026-10-28 06:14 UTC
查看更新说明
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 f
- The server no longer contains a Slack adapter; Slack runs only as the
- v0.12.1Archon CLI v0.12.12026-10-17 · 2026-10-17 15:04 UTC
查看更新说明
Release binaries no longer hand a target repository's
.envto providers.Security
- Release binaries, including the Claude, Codex and Pi provider plugins and the forge-github and chat-slack plugins, no longer load
.envorbunfig.tomlfrom their working directory. In v0.12.0 a provider started in a target repository loaded that repository's.envand undid Archon's strip of it, so a project'sANTHROPIC_API_KEYcould reach Claude and override your subscription. Source installs were not affected. If you ran v0.12.0 in a repository whose.envholds provider keys, upgrade, then runarchon provider addagain for each provider you use. (#4426, #4427)
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.exefrom the assets below, rename toarchon.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 servearchon-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 claudearchon-provider-codex-<os>-<arch>[.exe]Codex provider plugin, installed by archon provider add codexarchon-provider-pi-<os>-<arch>[.exe]Pi provider plugin, installed by archon provider add piarchon-web.tar.gzWeb UI checksums.txtSHA-256 checksums for every asset Verify installation
archon version - Release binaries, including the Claude, Codex and Pi provider plugins and the forge-github and chat-slack plugins, no longer load
用户点评
登录用户的真实使用记录,可按版本和硬件筛选还没有人点评。第一个说出真实体验的人最有价值。
Archon is a factory builder. You describe how work should get done as YAML workflows, and Archon runs them with AI agents, scripts and your decisions in the places that need them. Software is the first factory: the bundled SDLC pack takes an issue to a merged pull request. The same engine runs any process you can describe.
Take yourself out of the loop and sit on top of it. Runs do the work, queues keep it moving, and a run comes to you only when it needs a decision you own.
Why Archon
Ask a coding agent to fix a bug and the result depends on the run. It may skip the plan, forget the tests or ignore your PR template. You end up supervising every step.
Archon turns your process into a workflow you own. The workflow fixes the steps, the checks and the gates. The agent supplies the judgment inside each step. That gives you:
- The same process every time. Plan, implement, review, validate, open the PR, in the order you wrote down.
- Human on the loop, not in it. Queues take work forward on their own. When a run reaches a decision it can't make, it pauses as one attention item: what it is, why it matters, a recommendation and the choices. You answer and it carries on.
- Governance built in. Approval gates, a full event log and transcript for every run, and the cost of every run, all stored in your own database.
- Your agents, your subscriptions. Archon is not another coding agent. It runs Claude Code, Codex and Pi through their own CLIs and SDKs, with the accounts and project guidance you already have.
- Self-hosted. One install on your machine or server. SQLite by default, PostgreSQL if you want it.
What it looks like
A workflow is a graph of nodes. Agents judge, code computes, and you decide where it matters:
# .archon/workflows/build-feature.yaml
name: build-feature
description: Plan, implement until the tests pass, ask for approval, open the PR.
nodes:
- id: plan
prompt: "Read the request and the code. Write an implementation plan."
- id: implement
depends_on: [plan]
loop:
prompt: "Implement the next step of the plan."
until_bash: "bun run test" # your test command; code decides when it is done
max_iterations: 10
fresh_context: true
- id: approve
depends_on: [implement]
wait: # the run pauses and asks you
attention: "Review the change. Approve, or reject to stop."
form: approval
- id: stop
depends_on: [approve]
when: "$approve.output.decision == 'reject'"
cancel: "Rejected at review."
- id: pr
depends_on: [approve]
when: "$approve.output.decision == 'approve'"
prompt: "Push the branch and open a pull request."
flowchart LR
plan["plan<br/>(agent)"] --> implement["implement<br/>(agent, loops until the tests pass)"]
implement --> approve{"approve<br/>(waits for you)"}
approve -- reject --> stop["stop"]
approve -- approve --> pr["pr<br/>(agent)"]
Save it in your repository's .archon/workflows/, swap bun run test for your own test command, and run it:
archon workflow run build-feature "Add dark mode to the settings page"
Repository runs get their own git worktree by default, so several can work on one repository at once.
A software factory: issue in, merged PR out
The bundled sdlc pack is a working factory for a repository:
- You open an issue.
archon-intakechecks it against the current code and decides what it needs: a plan, an investigation, straight to delivery, or a maintainer's look. - The build queue picks it up.
archon-build-queueclaims the next ready issue, writes the brief and runsarchon-ship: plan, implement, review through specialist lenses, fix the findings, wait for CI. It stops at a pull request whose review says Ready, asking once for any check no round can run, or at one a maintainer'sreadyanswer hands on; the merge gate checks either the same way. - The merge queue lands it.
archon-merge-queuemerges the clear ready pull requests that merge cleanly, through a gate that checks the review verdict and CI at the head commit and that the base branch is not red. The queue judges open review threads itself and sends a pull request that conflicts back to the build queue. - You answer what's unclear. A scope question, a schema change or a stuck round becomes one attention item with a recommendation. Your answer is written into the issue as the new scope.
- Nothing found along the way is lost.
archon-discoveriesreads what runs noticed outside their task and files it, tracks it on an existing issue, or drops it.
Archon builds Archon: of the 524 pull requests merged into this repository between 1 and 19 October 2026, Archon runs built 363.
You start the queues by hand or bind them to a schedule or issue events with a trigger. The pack binds nothing by default. The pack reaches GitHub through the forge plugin (archon plugin add coleam00/Archon/plugins/forge-github); see the forge path. Set up the SDLC factory runs it on your repository, and SDLC pack workflows describes every workflow in it.
Build any factory
Workflows are not tied to code. A node can be an agent prompt, a bash command, a script, a loop, a wait for a person or a child workflow, so any process with steps, checks and decisions fits: content production, research, operations, support. Write it as YAML, keep its commands and scripts beside it, and share it as a pack.
A reliable core, extensible at the seams
The core stays small: the workflow engine, isolation, durable state, the attention queue and an audit trail. Everything that talks to the outside world plugs in through a published contract, and you can build your own plugin for any of them:
| Plugin kind | What it adds | Maintained here |
|---|---|---|
| Workflow pack | Workflows, commands and scripts | sdlc |
| Provider | An agent runtime | Claude Code, Codex, Pi |
| Forge | A code host | GitHub |
| Chat | A conversation surface | Slack |
GitHub is the registry: publish in your own repository and install with archon plugin add owner/repo. See Publish a plugin and the plugin index.
Quickstart
-
Install Claude Code and sign in, or install Codex.
-
Install Archon. The installer asks which providers to add:
curl -fsSL https://archon.diy/install | bash # macOS / Linux irm https://archon.diy/install.ps1 | iex # Windows (PowerShell) brew install coleam00/archon/archon # Homebrew, then: archon setup -
Run a workflow in any git repository:
cd your-project archon workflow list archon workflow run archon-investigate "Why does the login test fail?" -
Watch runs and answer their questions in the web console with
archon serve, or from the terminal witharchon workflow attention.
To let your coding agent drive Archon for you, run archon skill add in your project, then ask it to "use archon to fix issue #42".
Other installs (from source, Docker, servers), provider setup and the Claude Code binary path are in the installation guide. The quick start shows how to write a brief a run can deliver against.
Connect a platform
The CLI and web console work out of the box. Connect a chat platform or forge to start and follow runs from there:
| Platform | Guide |
|---|---|
| Slack | Slack guide |
| Telegram | Telegram guide |
| GitHub webhooks | GitHub guide |
| Discord | Discord guide |
Documentation
Full documentation is at archon.diy/docs.
| Topic | Description |
|---|---|
| Quickstart | Install and first run |
| Workflow language | Write your own YAML workflows |
| Operate runs | Watch runs, answer the ones that need you, read results |
| CLI reference | Every command and flag |
| Configuration | Config options, model tiers and aliases, env vars |
| AI assistants | Claude Code, Codex and Pi setup |
| Deployment | Docker, VPS and production setup |
| Architecture | Packages and boundaries |
| Troubleshooting | Common issues and fixes |
For AI tools: point your LLM at /llms.txt for an index of the docs, /llms-full.txt for all of them in one file, or /llms-small.txt for a condensed version.
Previous version
Looking for the original Python-based Archon (task management and RAG)? It is preserved on the archive/v1-task-management-rag branch.
Telemetry
Archon sends a few anonymous events so maintainers can see which workflows get real usage, on what platforms, and whether runs succeed, and prioritize accordingly. No PII, ever. Events: archon_started (once per CLI invocation or server boot; archon serve reports as the server, and a detached run's worker process is counted by the command that started it), archon_active (daily heartbeat while a server is running, so long-running installs stay counted), chat_turn_handled (each direct AI chat turn: platform, provider, model, duration, and usage totals; never message content), workflow_invoked (each workflow start, and again for each resumed segment), workflow_completed / workflow_failed / workflow_cancelled (sent once when a run's final status is saved, whichever path ended it), workflow_approval_resolved (each human approve/reject decision: the binary resolution only, never comments or reasons), and codebase_registered (a pure count when a project is registered; no name, path, or URL).
What's collected (categorical only):
- Workflow name: the real name for bundled (Archon-authored) workflows;
"custom"for your own workflows, so private names never leave your machine. The discovery source (bundled/global/project) is sent alongside. - Run shape & outcome: platform (
cli/web/slack/…), provider and model ids, node count, how many nodes of each type, graph depth and widest fan-out, how many distinct commands are referenced, the total inline prompt size as a bucket (none/lt_1k/1k_5k/5k_20k/gte_20kcharacters), which node types and features are used (loop/approval/script/bash, structured output, persisted sessions, MCP, skills, fresh-context loops), whether the run is interactive, isolated in a worktree, a resume, or a child of another run, the outcome, duration (from the run's first start to its end, including approval and wait time), a categorical exit or cancel reason, and a fixed-enum failure class recorded where the first failed node failed (fatal/transient/unknownfor provider errors;timeout,exec_failed,output_contract,max_iterations,child_failed,cancelled,configfor engine-detected causes; never raw error text) plus that node's type. - Run reference:
run_ref, a one-way hash of the install UUID and the run id, so a run's start, resumes and outcome can be joined. The run id itself is never sent. - Bundled ancestry: when one of your workflows is a copy of a bundled workflow, the bundled workflow's name and whether the copy is
identicalormodified(derived_from,derived_similarity). Only the bundled name is sent; nothing about your copy's name, node ids or prompts. - Workflow no match:
workflow_no_match, a count of agent decisions that no available workflow fits, with only the transport (native_toolorcli). - Chat activity: one event per direct-chat AI turn with platform, provider, model, duration, and completed/failed; a turn whose provider errors out mid-turn counts as failed. Message content, prompts, and conversation ids are never sent.
- Aggregate usage: provider-reported gross input, output, optional cache-read/cache-write token totals (with a flag when those totals are a floor), and cost (USD) per workflow run across all of its resumed segments (a parent run's total includes its child runs' spend, so sum spend over runs that are not children), plus direct-chat usage and total loop iterations. Numeric totals only, never the content the tokens represent.
- Machine context: OS, architecture, Archon version, runtime, whether it's a binary build, the install channel (
binary/docker/source), the short commit of the running build when known, whether stderr is a terminal, and a CI flag. - Deployment shape (server only): which adapters are enabled (booleans), how many chat plugins it hosts (a count; plugin names are not sent), database kind (
sqlite/postgresql), whether web auth and multi-user mode are on, and the GitHub auth mode. Configuration values (tokens, URLs, hosts) are never sent. - A random install UUID stored at
$ARCHON_HOME/telemetry-id(~/.archon/telemetry-idby default,/.archon/telemetry-idin Docker). Nothing else. - A
schema_versionnumber on every event, bumped whenever this list changes.
What's not collected: your code, prompts, messages, custom workflow names, workflow descriptions, git remotes, file paths, usernames, tokens, AI output, error message text, your IP address, your geographic location. None of it.
Opt out: set any of these in your environment:
ARCHON_TELEMETRY_DISABLED=1
DO_NOT_TRACK=1 # de facto standard honored by Astro, Bun, Prisma, Nuxt, etc.
POSTHOG_API_KEY=off # off | 0 | false | disabled | "" all disable
CI environments (CI=true) are auto-disabled: forks running fixtures in GitHub Actions, CircleCI, etc. do not send events.
Check the current state: run archon telemetry status to see whether telemetry is enabled, why (if not), the install UUID, and the active host. Run archon telemetry reset to rotate the install UUID. archon doctor also surfaces the current state in its check list.
Shutdown gives pending telemetry a 75 ms flush window, then cancels outstanding requests. Slow or unreachable ingestion can lose events; it does not hold up command exit. Far from the ingest host (for example, about 250 ms TLS handshake from Europe to the default US host), events from short commands like --help are usually dropped; longer commands flush in the background while they run.
Self-host PostHog or use a different project by setting POSTHOG_API_KEY and POSTHOG_HOST.
Contributing
Contributions welcome. See the open issues for things to work on, and read CONTRIBUTING.md before opening a pull request.