Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
332 commits
Select commit Hold shift + click to select a range
cbf931c
chore: update Homebrew formula for v0.3.11
github-actions[bot] May 12, 2026
231b589
Merge remote-tracking branch 'origin/main' into dev
Wirasm May 12, 2026
dffefd6
chore: fix broken docs links (#1633)
shiv19 May 12, 2026
d9d2bc6
fix(orchestrator): move system context to cacheable systemPrompt.appe…
kagura-agent May 13, 2026
936134f
fix(providers,workflows): treat Claude SDK stop_sequence success as s…
Wirasm May 13, 2026
1512271
fix(providers): preserve native tools when skills are set without all…
kagura-agent May 13, 2026
4423dad
fix(core): match SSH URL host generically, not just github.com (#1656)
truffle-dev May 13, 2026
19573df
fix(workflows): persist structuredOutput on NodeOutput so $node.outpu…
truffle-dev May 13, 2026
7aafcfd
chore(workflows): drop direction/scope gate from maintainer-review-pr…
Wirasm May 14, 2026
3d290d8
fix(server,workflows,web): surface bundled defaults on /api/workflows…
truffle-dev May 14, 2026
d8d5a35
fix(marketplace): trigger auto-review on ready_for_review
coleam00 May 14, 2026
5641051
feat(marketplace): add archon-idea-to-wo
coleam00 May 14, 2026
c63c37c
fix(marketplace-auto-review): always post PR comment on auto_merge/au…
coleam00 May 14, 2026
1bea125
Release 0.3.12
coleam00 May 14, 2026
6f5be85
feat(marketplace): add archon-smart-mr-review
lraphael May 14, 2026
3948171
Merge branch 'main' of https://github.com/coleam00/Archon into dev
coleam00 May 14, 2026
5ffeb30
Merge branch 'dev' of https://github.com/coleam00/Archon into dev
coleam00 May 14, 2026
3b8caf7
fix(marketplace-auto-review): feed actual workflow source to AI reviewer
coleam00 May 14, 2026
4bbde16
Merge branch 'main' of https://github.com/coleam00/Archon into dev
coleam00 May 14, 2026
e60af1d
feat(marketplace): add archon-comprehensive-mr-review
lraphael May 14, 2026
7f6f639
fix(workflows): surface condition_json_parse_failed as workflow error…
kagura-agent May 15, 2026
5d0225a
fix(scripts): use line-anchored regex to extract ARCHON_STATE_JSON ma…
Wirasm May 15, 2026
c397c4e
fix(web): add error handling for copy message button (#1564)
YrFnS May 15, 2026
65fc0bf
fix(workflows): support editing global workflows (#1557)
guanghuang May 15, 2026
96c73b1
feat(workflows): support Codex MCP nodes (#1459)
borshyo May 15, 2026
60adb5f
fix(workflows): pass user-controlled variables via env vars in bash n…
kagura-agent May 15, 2026
c94803e
fix(clone): authenticate non-GitHub forge URLs via GITLAB_TOKEN / GIT…
kagura-agent May 15, 2026
7bdf931
Feat/pi deferred extension model resolution (#1509)
instigator24 May 15, 2026
aaf7f9a
fix(workflows): preserve completed node state across DAG multi-resume…
kagura-agent May 18, 2026
cd2e29a
fix(adapters): place webhook clones in workspace source/ subdirectory…
truffle-dev May 18, 2026
45bc5e5
refactor(workflows): consolidate duplicated safeSendMessage into exec…
ericsoriano May 18, 2026
a7f8ae1
fix(web): surface workflow-def fetch error in execution graph (#1683)…
truffle-dev May 19, 2026
d1feab0
fix(adapters): bump telegramify-markdown to 1.3.3 for blockquote esca…
truffle-dev May 19, 2026
70c9e67
fix(clone): resolve forge auth via configured *_URL env vars (fixes #…
kagura-agent May 19, 2026
0adec22
chore(workflows): drop CHANGELOG.md from maintainer-review docs-impac…
Wirasm May 19, 2026
ef5a381
fix(workflows): write large node outputs to temp file to prevent bash…
kagura-agent May 20, 2026
5283ea9
fix(providers/codex): fresh AbortController per retry attempt (#1266)…
truffle-dev May 20, 2026
7ab4df8
fix(core): resolve default assistant via config + folder detection on…
Wirasm May 21, 2026
3974cba
fix(providers/claude): reject directory paths and expand npm package …
Wirasm May 21, 2026
253321b
docs(direction): add community-providers policy section (#1736)
Wirasm May 21, 2026
a9288b4
fix(providers/codex): remove stale attemptController.abort() that cra…
kagura-agent May 21, 2026
8028521
feat(workflows): add always_run node opt-out for resume caching (clos…
truffle-dev May 21, 2026
7f9db12
fix(workflows): ensure workflow-builder injects $ARGUMENTS in generat…
kagura-agent May 21, 2026
3908b38
fix(workflows): persist read-only node outputs via bash bridges in ar…
kagura-agent May 21, 2026
aa71520
fix(providers): expand ${VAR_NAME} brace syntax in MCP config env var…
coleam00 May 21, 2026
c2ba1cf
fix(cli): use source checkout cwd for workflow discovery on resume/ap…
Wirasm May 22, 2026
9df2e08
feat(marketplace): add piv-system-evolution
coleam00 May 22, 2026
db2c294
fix(workflows): harden marketplace decide node against non-JSON ai-re…
coleam00 May 22, 2026
da31993
fix(web/chat): wrap long unbreakable strings in chat message bubbles …
truffle-dev May 25, 2026
3d779f5
docs(brand): add brand foundation page on archon.diy (#1745)
leex279 May 25, 2026
4301075
fix(web): recognize loop and approval node types in DAG builder (#1744)
nhiendohao May 25, 2026
6ccfb4b
feat(providers): add GitHub Copilot community provider (#1505)
danielscholl May 25, 2026
c903c79
feat(providers): add OpenCode community provider with agents support …
cropse May 25, 2026
c571a93
feat(web): improve streaming chat continuity readability (#1617)
knosence May 26, 2026
f83d1f8
fix(server): surface CLI resume command in web approve/reject respons…
blankse May 26, 2026
63b47d9
feat(web): experimental console UI at /console (#1747)
Wirasm May 26, 2026
8491f00
feat(slack): umbrella Slack UX upgrade — buttons, status, reactions, …
Wirasm May 26, 2026
a8b023c
fix(orchestrator): resume interactive workflows on chat platforms (#1…
Wirasm May 26, 2026
ac18034
fix(db): read DEFAULT_AI_ASSISTANT env var in createCodebase (fixes #…
kagura-agent May 26, 2026
50beeec
feat(core): plumb user_id from chat/forge adapters through orchestrat…
Wirasm May 28, 2026
f81b22e
feat(core): swap shared GitHub PAT for GitHub App with multi-installa…
Wirasm May 28, 2026
061180d
Release 0.4.0
Wirasm May 28, 2026
30b78d9
Merge branch 'main' of github.com:coleam00/Archon into dev
Wirasm May 28, 2026
91bafd6
chore: update Homebrew formula for v0.4.0
github-actions[bot] May 28, 2026
765417b
Merge branch 'main' of github.com:coleam00/Archon into dev
Wirasm May 28, 2026
bbf2788
fix(db/sqlite): defer user_id index creation until after column ALTER…
Wirasm May 28, 2026
1cb5666
Release 0.4.1
Wirasm May 28, 2026
f01c655
Merge branch 'main' of github.com:coleam00/Archon into dev
Wirasm May 28, 2026
24cfe14
chore: update Homebrew formula for v0.4.1
github-actions[bot] May 28, 2026
bb2cf57
Merge branch 'main' of github.com:coleam00/Archon into dev
Wirasm May 28, 2026
c839bcc
fix(providers/pi): bump pi-ai to 0.73.1 and pass explicit agentDir
coleam00 May 28, 2026
e30c03e
docs(github-app): document canonical Docker deploy recipe (port→127.0…
Wirasm May 28, 2026
e2fee00
fix(providers/pi): migrate Pi SDK to @earendil-works (0.76.0) (#1800)
Wirasm May 28, 2026
3103d1c
refactor: move user-identity extraction into adapter callbacks (#1801)
the-archon-bot[bot] May 29, 2026
83e18ad
Close parallel-definition drift between interfaces and Zod schemas (#…
the-archon-bot[bot] May 29, 2026
8d35386
feat(workflows/condition-evaluator): support shorthand path and unquo…
lraphael May 29, 2026
9a7bc89
fix(workflows): stop silently dropping workflow-level effort/thinking…
Wirasm May 29, 2026
a1e06c1
telemetry: umbrella trust fixes (CI auto-disable, first-run notice, s…
Wirasm May 29, 2026
2d947af
feat(workflows): persist per-node provider sessions across workflow r…
Wirasm May 29, 2026
07ed3d3
Fix: auto-apply Postgres schema on startup (#1810)
Wirasm May 29, 2026
d979aeb
chore(deps): standardize on zod v4 across the codebase (#1813)
Wirasm May 29, 2026
ab1bee7
fix(workflows): fail dag node on idle-timeout with zero output (#1812)
Wirasm May 29, 2026
367edfd
feat(telemetry): expand anonymous PostHog capture (started/completed …
Wirasm Jun 1, 2026
ab81248
feat: per-user GitHub identity via device flow + interim web auth (PR…
Wirasm Jun 1, 2026
8704bf5
fix(providers/codex): capture thread id from thread.started so sessio…
Wirasm Jun 2, 2026
8d6be1c
fix(core): concurrency-safe workflow resume/cancel (CAS guards) (#1830)
Wirasm Jun 2, 2026
69bf4d0
feat(auth): opt-in web login via Better Auth + user-identity seam (#1…
Wirasm Jun 2, 2026
c92cbef
feat(console): console promotion — pending-input banner, project-scop…
Wirasm Jun 4, 2026
009993f
Fix Codex output_format schemas for OpenAI strict-mode (#1843)
Wirasm Jun 4, 2026
a93c324
Fix symlinked markdown command discovery (#1857)
Wirasm Jun 4, 2026
209564f
Fix: detect Claude session-limit notices in AI node output (#1852)
Wirasm Jun 4, 2026
2d0beff
Fix: Codex provider drops structured output on multi-message turns (#…
Wirasm Jun 4, 2026
3378fdf
docs: add llms.txt plugin and sync workflow catalogs (#1833)
joseph-fajen Jun 4, 2026
ba67d84
feat(docs): marketing landing page above the docs site (#1829)
Wirasm Jun 4, 2026
5122a98
feat(cli): cross-provider run management — get/runs/--json/--detach, …
Wirasm Jun 4, 2026
92a877b
feat(server): live console updates for out-of-process (CLI) workflow …
Wirasm Jun 4, 2026
358171e
docs(manage-run): correct stale 'no live updates' note for detached r…
Wirasm Jun 4, 2026
c732ca9
chore: add AGENTS.md (1:1 copy of CLAUDE.md)
Wirasm Jun 4, 2026
768a407
feat(workflows): model alias resolver core (#1867)
Wirasm Jun 4, 2026
a11dcb7
feat(cli): install bundled skills into Codex .agents/skills/ + enable…
Wirasm Jun 4, 2026
d1b4b89
Fix: unreadable active sidebar link on mobile docs (#1869)
Wirasm Jun 4, 2026
c834c2a
feat(workflows): typed artifacts — output_type + engine-written sidec…
Wirasm Jun 5, 2026
07645a8
fix(web/console): gate /console behind auth + correct run-event norma…
Wirasm Jun 5, 2026
34356aa
Fix: reuse Pi extension loader per process so 2nd+ session doesn't ha…
Wirasm Jun 5, 2026
58fd9dc
feat(web/console): show run provenance — input message + platform ico…
Wirasm Jun 5, 2026
97ef3e0
feat(workflows): wire model-alias resolver into execution + cross-pro…
Wirasm Jun 5, 2026
e41f426
feat(workflows): reliable cross-provider structured output — validate…
Wirasm Jun 5, 2026
95ee6db
feat(web/console): chat workflow-completion card + SSE-lock + jump-to…
Wirasm Jun 5, 2026
69152a9
feat(web/console): settings core — assistant config + system panel (#…
Wirasm Jun 5, 2026
42dfefb
feat(workflows): validate-and-reask loop for best-effort structured o…
Wirasm Jun 5, 2026
02cbe34
Fix: warn on the bash node $node.output double-quote footgun + docs (…
Wirasm Jun 5, 2026
611b48e
feat(web/console): GitHub identity panel (device flow) + fix cache er…
Wirasm Jun 8, 2026
0c95e6f
feat(credentials): per-user AI-provider credentials foundation (#1899)
Wirasm Jun 8, 2026
abb66c4
feat(web/console): chat surface restyle to Direction B (Modern Consol…
leex279 Jun 8, 2026
582103e
feat(web/console): fold node lifecycle into one divider + node filter…
Wirasm Jun 8, 2026
4251c64
feat(web): make /console the default UI, re-root classic UI under /le…
Wirasm Jun 8, 2026
6a5b5f0
feat(web/console): wire chat file uploads + cap tool-call input heigh…
Wirasm Jun 8, 2026
12ed94a
feat(credentials): per-user AI-provider API key connect surface (#1911)
Wirasm Jun 8, 2026
282e9ff
fix(server): exempt /api/auth/providers from the Better Auth catch-al…
Wirasm Jun 8, 2026
a0f418b
Make workspace sync non-destructive (#1864)
Wirasm Jun 8, 2026
0ed4bb7
feat(credentials): subscription (OAuth) auth + Codex/Pi delivery (PR …
Wirasm Jun 8, 2026
ba0cfd5
Fix: treat DEFAULT_AI_ASSISTANT as a fallback default, not a hard ove…
Wirasm Jun 8, 2026
ab4cde6
fix(workflows): interactive loop resume uses fresh session on first i…
Wirasm Jun 8, 2026
67b8fd7
fix(cleanup): read worktree.baseBranch config before git default-bran…
Wirasm Jun 8, 2026
2cc6215
feat: add /setproject command to bind conversation to registered code…
Wirasm Jun 8, 2026
aced56e
fix(core): scoped direct chat runs in repo cwd, not workspaces root (…
Wirasm Jun 8, 2026
8a7c367
feat(settings): AI Settings UI + config tiers editor + CLI parity (PR…
Wirasm Jun 9, 2026
d72c20c
docs: per-user AI credentials + AI Settings on the docs site (PR-4) (…
Wirasm Jun 9, 2026
c037eb6
fix(web/console): replace 📎 emoji with lucide Paperclip icon (#1930)
leex279 Jun 10, 2026
0a74908
feat(workflows): recommended workflows pinned per project (#1929)
leex279 Jun 10, 2026
b3a100c
feat(telemetry): schema v3 — server heartbeat, chat turns, failure ta…
Wirasm Jun 10, 2026
7232562
feat(telemetry): schema v4 — usage totals (tokens/cost), chat model+l…
Wirasm Jun 11, 2026
ad0884b
feat: per-user AI prefs — tiers/aliases/default-provider overrides (P…
Wirasm Jun 11, 2026
02ac90a
feat(web): Archon Studio builder data model + node variants (PR-1) (#…
seanrobertwright Jun 11, 2026
b896bcc
feat(credentials): vendor-canonical credential catalog derived from p…
Wirasm Jun 11, 2026
7dfdf68
feat(console): per-agent credential cards (#1954 PR-2) (#1962)
Wirasm Jun 11, 2026
627461f
fix(oauth-bridge): release the fixed OAuth callback port when a login…
Wirasm Jun 12, 2026
117e91f
feat(credentials): un-gate ChatGPT/Codex subscription login with an A…
Wirasm Jun 12, 2026
438db9e
feat(console): agent-aware model pickers for tiers, aliases, and defa…
Wirasm Jun 12, 2026
c17ac5f
fix(console): surface late-arriving OAuth signals in the subscription…
Wirasm Jun 12, 2026
e250e7a
fix(cli): log workflow discovery root on every run; fail loudly on re…
Wirasm Jun 12, 2026
ece2a68
fix: user-scope console chat and resolve chat credentials from the se…
Wirasm Jun 12, 2026
e77a338
fix(credentials,pi): deliver Claude subscriptions to Pi in direct cha…
Wirasm Jun 15, 2026
6be6e6f
fix(db): create remote_agent_user_ai_prefs in the SQLite schema (#2033)
Wirasm Jun 26, 2026
658f487
fix(server,core): clarify Claude auth posture on per-user installs (#…
Wirasm Jun 26, 2026
5e42c6d
feat(core): surface unpushed work in source/ after chat turns (#1978)
Wirasm Jun 26, 2026
c101fc0
fix(isolation): pass --no-track when creating new-branch worktrees (#…
Wirasm Jun 26, 2026
a1462fe
feat(providers,workflows): surface session-resume outcome (resumed) +…
Wirasm Jun 26, 2026
1dc9e7e
fix(core): persist non-web platform messages to remote_agent_messages…
Wirasm Jun 26, 2026
6117f17
Gate stale workflow resumes (#1935)
Wirasm Jun 26, 2026
0aacffe
feat(web): forward SDK lifecycle events to Web UI (tasks + hooks) (#9…
Wirasm Jun 26, 2026
9e4d108
docs: reframe Archon identity from single-developer coding tool (#2034)
Wirasm Jun 26, 2026
d66d76d
chore(deps): bump @anthropic-ai/claude-agent-sdk 0.3.173 → 0.3.193 (#…
Wirasm Jun 26, 2026
d39d062
chore(cli): drop stale CLAUDECODE=1 nested-session warning (#2039)
Wirasm Jun 26, 2026
699c1ad
chore(archon): experimental/test workflows + direction.md reframe (#2…
Wirasm Jun 26, 2026
6539041
feat(workflows,cli,paths): surface resolved model/tier in CLI node_st…
Wirasm Jun 26, 2026
407f6d1
feat(core,cli,paths): zero-config local encryption key for credential…
Wirasm Jun 26, 2026
137de50
Release 0.5.0
Jun 26, 2026
f2088e5
Merge branch 'main' of github.com:coleam00/Archon into dev
Jun 26, 2026
4d0aec6
chore: update Homebrew formula for v0.5.0
github-actions[bot] Jun 26, 2026
a159e1a
feat(web): Archon Studio visual workflow builder (PR-2) (#2015)
seanrobertwright Jun 27, 2026
59bbd00
fix(workflows): restore interactive-loop cross-gate session continuit…
Wirasm Jun 27, 2026
bb23aa2
fix(marketplace): harden auto-review act node against gh auth 401s
coleam00 Jul 4, 2026
4dcc998
feat(marketplace): add harness-score
seanrobertwright Jul 4, 2026
6045848
feat(marketplace): add pocock-skills-workflow-family
seanrobertwright Jul 9, 2026
dad62d8
feat(codebases): folder projects — non-git workspaces + multi-repo ro…
Wirasm Jul 13, 2026
3b47e4a
fix(providers): mirror CLAUDE_API_KEY to ANTHROPIC_API_KEY for the Cl…
uinstinct Jul 13, 2026
f69919a
fix(reliability): stop Windows mid-run deaths (keep-awake + real --de…
buun-dev Jul 13, 2026
8662c63
feat(workflows): loop_group node — cross-node subgraph looping (#2032)
xbeark Jul 13, 2026
edb34af
feat(workflows): cross-invocation artifact scope + cold-resume pointe…
Wirasm Jul 14, 2026
83b7584
feat(core/cli/console): per-user default chat model (default_model) +…
Wirasm Jul 14, 2026
145e3f9
fix(core): /setproject writes to conversation DB id, not platform id …
aryrabelo Jul 14, 2026
0e70c93
[codex] Fix project-scoped conversation cwd resolution (#1994)
anhle128 Jul 14, 2026
056c4f2
feat(cli): default chat model step in archon setup (#2087)
Wirasm Jul 14, 2026
8a0441d
feat(isolation/executor/cli): base-branch fallback from the codebase …
Wirasm Jul 14, 2026
6494103
fix(cli): enforce requires:[github] gate on the CLI run path (#2089) …
Wirasm Jul 14, 2026
7362274
fix(workflows): re-derive declaredFields on resume for strict $node.o…
Wirasm Jul 14, 2026
ca03c75
fix(workflows): namespace loop_group body lifecycle events (#2090) (#…
Wirasm Jul 14, 2026
fb0af24
fix(workflows): honor retry: on bash/script nodes (#2088) (#2096)
Wirasm Jul 14, 2026
79f8a27
fix(web/console): release per-key version counter on last unsubscribe…
truffle-dev Jul 14, 2026
3391600
docs(skill): sync archon skill with engine reality — loop_group, sess…
Wirasm Jul 14, 2026
80ba9fa
chore(providers): bump claude-agent-sdk 0.3.209, codex-sdk 0.144.4, p…
Wirasm Jul 14, 2026
5109e00
fix(core): manage_run get crash on SQLite string timestamps (#2078) (…
Wirasm Jul 14, 2026
cb75107
fix(core): /update-project distinguishes row-gone from transient DB e…
Wirasm Jul 14, 2026
e162db0
fix(cli): accept short run-id prefixes in workflow run-addressing com…
Wirasm Jul 14, 2026
c0804d7
fix(workflows): warn on unknown allowed_tools/denied_tools names at v…
Wirasm Jul 14, 2026
bf6fe14
fix(providers/pi): extension-registered models resolve on 2nd+ DAG no…
Wirasm Jul 14, 2026
8dab2f6
fix(workflows): gate approve/reject keeps the run paused instead of s…
Wirasm Jul 14, 2026
faac3b4
fix(workflows): resolve Windows bash binary correctly (#1326) — slim,…
atlas-architect Jul 15, 2026
c6743ae
fix(providers/codex): deliver systemPrompt by prepending to the promp…
Wirasm Jul 15, 2026
2476701
ci: free runner disk space before the docker build (#2122)
Wirasm Jul 15, 2026
5941192
fix(workflows): don't thread session ids across provider boundaries i…
Wirasm Jul 15, 2026
d891049
chore: quick-win batch — six small validated fixes (#2119)
Wirasm Jul 15, 2026
51608d9
fix(providers): throw on Claude API errors surfaced as text instead o…
Wirasm Jul 15, 2026
92b9bba
fix(workflows): interactive-loop completion — signal_completes, final…
Wirasm Jul 15, 2026
3962cfa
fix(providers/pi): per-node extension posture — plannotator planning …
Wirasm Jul 16, 2026
69b7493
fix(workflows): wait for live background Agent tasks before completin…
Wirasm Jul 16, 2026
8af7f23
docs: workflow language constitution — YAML coordinates, code compute…
Wirasm Jul 16, 2026
622719a
fix(workflows): loop-node background-task audit trail + live mid-stre…
Wirasm Jul 16, 2026
81de93b
fix(smoke): repoint codex smoke workflows from gpt-5.2 to gpt-5.6-lun…
Wirasm Jul 16, 2026
52626b6
fix(server): allow abandoning failed runs via HTTP API (#2140)
Wirasm Jul 16, 2026
d024d02
fix(cli): resolve covering codebase on resume instead of re-registeri…
Wirasm Jul 16, 2026
113fd39
fix(workflows): fail loudly on unknown-node $id.output.field refs (#2…
Wirasm Jul 16, 2026
5ee754c
feat(workflows/pi): portable per-node extension posture in workflow Y…
Wirasm Jul 16, 2026
2d7bf58
feat(workflows): include: load-time workflow inlining primitive (#212…
Wirasm Jul 16, 2026
eb34c77
feat(isolation): container isolation Phase A — kind-routed backend se…
Wirasm Jul 16, 2026
bd84a51
fix(workflows): close approve/reject double-resolution TOCTOU with a …
Wirasm Jul 16, 2026
646d526
fix(web): resubscribe during an abandoned in-flight console load runs…
Wirasm Jul 16, 2026
030263e
chore: sweep stale GPT model references to the 5.6 lineup (#2149)
Wirasm Jul 16, 2026
15a53c5
fix(paths): route no-remote repos' logs/artifacts under _local/<basen…
Wirasm Jul 16, 2026
1bc48cb
feat(cli): archon doctor — add Codex binary and OpenCode runtime chec…
Wirasm Jul 16, 2026
b143cbd
feat(isolation): container backend for folder projects (Phase B) (#2153)
Wirasm Jul 17, 2026
64a7c68
test(container): bundled e2e container smoke workflow + CI job (#2158)
Wirasm Jul 17, 2026
409eb0f
ci: make AI-credentialed e2e smoke tiers opt-in (#2161)
Wirasm Jul 17, 2026
f13811e
chore(providers): bump @openai/codex-sdk to 0.144.5 for gpt-5.6 suppo…
Wirasm Jul 17, 2026
899b582
feat(isolation): container pause/resume + approval-gated write-back (…
Wirasm Jul 17, 2026
ce9f909
chore(workflows): delete orphaned substituteVariables helper + fix fa…
Wirasm Jul 17, 2026
f54a625
fix(workflows): skip base-branch auto-detection on folder projects (#…
Wirasm Jul 17, 2026
e7234f0
fix(workflows): fail loudly on unknown-node $LOOP_PREV.<id>.output.fi…
Wirasm Jul 17, 2026
d24666d
fix(isolation): normalize isolation_environments.metadata at the stor…
Wirasm Jul 17, 2026
e3839e0
docs: correct stale engine claims in CLAUDE.md, docs-web, and the wor…
Wirasm Jul 17, 2026
bd09632
security(workflows): deliver user-controlled vars to script nodes via…
Wirasm Jul 17, 2026
b2d7f88
fix(providers): coalesce Pi text_delta chunks to stop fragmented outp…
Wirasm Jul 17, 2026
1e5466e
fix(providers): register Pi Bedrock backend so it loads in the compil…
Wirasm Jul 17, 2026
2292b78
dx(providers): generate provider capability matrix from capabilities.…
Wirasm Jul 17, 2026
4fc44fb
fix(workflows): align skill validation with execution resolver search…
FlyingBamboo Jul 20, 2026
9b0f4da
fix(workflows): classify session-limit/quota errors as FATAL (never r…
Wirasm Jul 20, 2026
bb63ed0
fix(providers): retry Claude 400 tool-use-concurrency errors as rate …
bigboy1122 Jul 20, 2026
d946f15
fix(web): stop model picker truncating model names in favor of the hi…
Wirasm Jul 20, 2026
7b9aaa0
fix(workflows): run archon-workflow-builder in the live checkout (#2183)
Wirasm Jul 20, 2026
28832b1
fix(console): show chat-dispatched run messages on the run detail pag…
Wirasm Jul 20, 2026
482dc8d
fix(server): resolve small tier for title generation at server entry …
Wirasm Jul 20, 2026
e89bd7f
fix(web): render console timestamps in the viewer's local timezone (#…
Wirasm Jul 20, 2026
4e8d5ea
fix(cli): stop workflow approve from marking paused runs failed on pr…
Wirasm Jul 20, 2026
2de2c03
fix(docker): eliminate slow recursive chown in image build and contai…
uinstinct Jul 20, 2026
1fac96b
fix(adapters): drop duplicate webhook deliveries at ingest (#1987)
truffle-dev Jul 20, 2026
be38e97
fix(core): respect worktree.enabled: false in dispatchBackgroundWorkf…
Wirasm Jul 20, 2026
5423698
docs(direction): deployment recipes live in docs, not maintained prof…
Wirasm Jul 20, 2026
e267e30
refactor(server): use parseOwnerRepo helper in artifact route for def…
shaun0927 Jul 20, 2026
dd59f43
security(cli): add build-time embedded hash for web-dist tarball inte…
shaun0927 Jul 20, 2026
5ee55c1
fix(marketplace): guard fetch-source against missing sourceUrl/sha (#…
gai095481 Jul 20, 2026
d5f659c
fix(server/workflows): resolve project workflows with .yml extension …
jasonjack-jay Jul 20, 2026
8e322fd
fix(web): URL-encode conversation IDs in PATCH/DELETE requests (#1657)
LLMsolution Jul 20, 2026
3342f4d
fix(core): classify Claude usage-limit errors as rate limits (#1761)
k4n4lm00n Jul 20, 2026
19ac1bc
fix(server): accept namespaced workflow names on HTTP launch and read…
truffle-dev Jul 20, 2026
6aa3794
chore(ci): bump docker/build-push-action to @v6 in publish.yml (#1632)
acton-golden Jul 20, 2026
c14982b
feat(workflows): add loop.command for loading loop prompts from files…
marc0der Jul 20, 2026
6fdb735
Release 0.6.0
Jul 20, 2026
59a694d
Merge main's docs-site marketplace commits back into dev pre-release
Jul 20, 2026
ec3336c
ci(e2e-container): reject the Phase C write-back gate so the smoke as…
Jul 20, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
14 changes: 14 additions & 0 deletions .archon/maintainer-standup/direction.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,8 @@ This file is **committed and shared by all maintainers**. Edit deliberately —
- **Not a general-purpose chat UI.** Adapters are conversation surfaces for *workflow execution*, not standalone chat experiences.
- **Not a replacement for the AI coding agent itself.** Archon orchestrates Claude Code / Codex / Pi — it doesn't reimplement them.
- **Not opinionated about the dev environment.** No mandatory editor integrations, framework lock-in, or Docker requirement beyond what users opt into.
- **Not a deployment-infrastructure product.** Caddy is the single maintained reference reverse proxy (`--profile cloud`). Alternative proxies and infra recipes (Traefik, Nginx, k8s, ...) live in **docs** as community-maintained examples against the documented proxy contract (exposed port, health endpoint, `/internal/*` never proxied — see #2193), not as compose profiles Archon maintains: each maintained proxy config doubles a security-critical surface. Cite as `direction.md §deployment-recipes`.
- **Not a programming language.** The workflow YAML coordinates (gates, joins, retries, sessions, artifacts, reusable structure); `bash:`/`script:` nodes compute; prompts judge. PRs that add computation to the YAML surface conflict — see §workflow-language.

## Community providers

Expand All @@ -45,6 +47,18 @@ Archon ships built-in providers for Claude (`@anthropic-ai/claude-agent-sdk`) an

When citing this policy in a PR comment: `direction.md §community-providers`.

## Workflow language (YAML surface)

The workflow YAML is a **coordination language**, not a programming language. Admissibility test for any new YAML surface feature (field, node type, expression capability): (1) does the *engine* need to see it to govern the run? (2) is it declarative data, not evaluation? (3) could a script node + existing wiring express it today? A feature that computes rather than coordinates is declined with a pointer to the escape hatch. Full rationale, case law, and the five failure smells: `packages/docs-web/src/content/docs/reference/workflow-language-constitution.md`.

Triage clauses — cite as `direction.md §<clause>`:

- **§when-grammar** — `when:` never grows incrementally (no parentheses, functions, string ops, arithmetic). Standing answer: compute the decision in a `script:` node, gate on `$node.output.field`. Only sanctioned growth is adopting CEL wholesale in one versioned change — never home-grown operators.
- **§load-time-composition** — composition/reuse features must fully resolve at load time (the executor runs a flat static DAG). Parameterization may carry **data**, never **structure**; dynamic/templated targets are declined. Runtime-resolved structure is a sub-run — a governance object with its own run record (#2121 Phase 2, co-designed with #1764) — not a language feature.
- **§workaround-triage** — repeated YAML structure or deterministic logic embedded in prompts is a signal, triaged into three buckets: missing *coordination* primitive → design it constitutionally; missing *pattern* → document the pattern (e.g. polyglot validate = detect-AI → execute-bash → fix-AI); disguised *computation* → point at script nodes. The workaround corpus decides language shape; the feature-request queue doesn't.
- **§schema-width** — new provider capabilities default into provider config or tier/alias presets, not new node fields; a node field is earned only by genuine per-node variance. Capability mismatches warn loudly, never silently no-op (`capabilities.ts` is the source of truth; docs derive from it — #2116).
- **§implicit-behavior** — a new implicit behavior (auto-anything) must be documented in the canonical behavior list, individually defeatable, and fail-safe — convenience alone never qualifies.

## Open questions (no stance yet)

These are direction calls we haven't made. PRs that touch these areas should surface the question for explicit decision rather than be silently accepted or rejected. The workflow may add to this list as new questions appear.
Expand Down
95 changes: 95 additions & 0 deletions .archon/scripts/__tests__/marketplace-fetch-source.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
import { describe, it, expect } from 'bun:test';
import { mkdirSync, mkdtempSync, writeFileSync, rmSync } from 'node:fs';
import { resolve, join } from 'node:path';
import { tmpdir } from 'node:os';
import { spawnSync } from 'node:child_process';

const SCRIPT = resolve(import.meta.dir, '../marketplace-fetch-source.ts');

interface FetchOutput {
files: string[];
errors: string[];
}

function runFetch(entryJson: Record<string, unknown>): { output: FetchOutput; stderr: string; exitCode: number } {
const artifactsDir = mkdtempSync(join(tmpdir(), 'fetch-test-'));
try {
mkdirSync(join(artifactsDir, 'source'), { recursive: true });
writeFileSync(join(artifactsDir, 'entry.json'), JSON.stringify(entryJson));

const result = spawnSync('bun', [SCRIPT], {
env: { ...process.env, ARTIFACTS_DIR: artifactsDir },
stdio: ['ignore', 'pipe', 'pipe'],
});

const exitCode = result.status ?? 1;
const stdout = result.stdout?.toString() ?? '';
const stderr = result.stderr?.toString() ?? '';

let output: FetchOutput = { files: [], errors: [] };
if (stdout) {
try {
output = JSON.parse(stdout);
} catch {}
}

return { output, stderr, exitCode };
} finally {
rmSync(artifactsDir, { recursive: true, force: true });
}
}

describe('marketplace-fetch-source: guard for missing sourceUrl/sha', () => {
it('exits 0 with empty files when sourceUrl is missing', () => {
const { output, stderr, exitCode } = runFetch({ sha: 'abc123' });
expect(exitCode).toBe(0);
expect(output.files).toHaveLength(0);
expect(stderr).toContain('sourceUrl');
expect(output.errors.length).toBeGreaterThan(0);
expect(output.errors[0]).toContain('sourceUrl');
});

it('exits 0 with empty files when sha is missing', () => {
const { output, stderr, exitCode } = runFetch({ sourceUrl: 'https://github.com/owner/repo/blob/main/path' });
expect(exitCode).toBe(0);
expect(output.files).toHaveLength(0);
expect(stderr).toContain('sha');
expect(output.errors.length).toBeGreaterThan(0);
expect(output.errors[0]).toContain('sha');
});

it('exits 0 with empty files when both sourceUrl and sha are missing', () => {
const { output, stderr, exitCode } = runFetch({});
expect(exitCode).toBe(0);
expect(output.files).toHaveLength(0);
expect(stderr).toContain('sourceUrl');
expect(stderr).toContain('sha');
expect(output.errors.length).toBeGreaterThan(0);
});

it('does not trigger guard when entry.json has both sourceUrl and sha', () => {
// Unrecognized URL makes the script stop deterministically at URL validation — no network.
const { stderr, exitCode } = runFetch({
sourceUrl: 'https://example.com/not-a-github-url',
sha: 'abc123def456',
});
expect(stderr).not.toContain('missing required field');
expect(stderr).toContain('Unrecognized sourceUrl format');
expect(exitCode).toBe(1);
});
});

describe('marketplace-fetch-source: missing entry.json', () => {
it('exits 1 when entry.json is absent', () => {
const artifactsDir = mkdtempSync(join(tmpdir(), 'fetch-test-'));
try {
const result = spawnSync('bun', [SCRIPT], {
env: { ...process.env, ARTIFACTS_DIR: artifactsDir },
stdio: ['ignore', 'pipe', 'pipe'],
});
expect(result.status ?? 1).toBe(1);
} finally {
rmSync(artifactsDir, { recursive: true, force: true });
}
});
});
19 changes: 17 additions & 2 deletions .archon/scripts/marketplace-fetch-source.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,8 @@ if (!existsSync(entryPath)) {
}

interface MarketplaceEntry {
sourceUrl: string;
sha: string;
sourceUrl?: string;
sha?: string;
}

const entry = JSON.parse(readFileSync(entryPath, 'utf8')) as MarketplaceEntry;
Expand All @@ -34,6 +34,21 @@ mkdirSync(sourceDir, { recursive: true });
const errors: string[] = [];
const files: string[] = [];

// Guard: sourceUrl/sha are required. If missing, output empty result so
// downstream nodes proceed gracefully (e.g., PR without a marketplace entry).
if (!sourceUrl || !sha) {
const missing: string[] = [];
if (!sourceUrl) missing.push('sourceUrl');
if (!sha) missing.push('sha');
const msg = `entry.json is missing required field(s): ${missing.join(', ')}. ` +
'This PR likely does not add a marketplace entry with source files. ' +
'Skipping source fetch.';
process.stderr.write(msg + '\n');
errors.push(msg);
console.log(JSON.stringify({ files, errors }));
process.exit(0);
}

// Parse GitHub blob/tree URL into owner/repo/path
const blobMatch = sourceUrl.match(/^https:\/\/github\.com\/([^/]+)\/([^/]+)\/blob\/[^/]+\/(.+)$/);
const treeMatch = sourceUrl.match(/^https:\/\/github\.com\/([^/]+)\/([^/]+)\/tree\/[^/]+\/(.+)$/);
Expand Down
7 changes: 4 additions & 3 deletions .archon/workflows/defaults/archon-fix-github-issue.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -39,10 +39,11 @@ nodes:

- id: fetch-issue
bash: |
# Strip quotes, whitespace, markdown backticks from AI output
ISSUE_NUM=$(echo "$extract-issue-number.output" | tr -d "'\"\`\n " | grep -oE '[0-9]+' | head -1)
# $extract-issue-number.output is injected pre-quoted by Archon — do NOT
# wrap it in double quotes (that corrupts the value; see issue #1884).
ISSUE_NUM=$(echo $extract-issue-number.output | grep -oE '[0-9]+' | head -1)
if [ -z "$ISSUE_NUM" ]; then
echo "Failed to extract issue number from: $extract-issue-number.output" >&2
echo "Failed to extract issue number from:" $extract-issue-number.output >&2
exit 1
fi
gh issue view "$ISSUE_NUM" --json title,body,labels,comments,state,url,author
Expand Down
77 changes: 7 additions & 70 deletions .archon/workflows/defaults/archon-idea-to-pr.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -74,83 +74,20 @@ nodes:
context: fresh

# ═══════════════════════════════════════════════════════════════════
# PHASE 6: CODE REVIEW
# ═══════════════════════════════════════════════════════════════════

- id: verify-pr-base
bash: |
set -euo pipefail
HEAD_BRANCH=$(git rev-parse --abbrev-ref HEAD)
PR_NUMBER=$(gh pr list --head "$HEAD_BRANCH" --state open --json number -q '.[0].number')
if [ -z "$PR_NUMBER" ]; then
echo "No open PR found for branch $HEAD_BRANCH" >&2
exit 1
fi
EXPECTED="$BASE_BRANCH"
ACTUAL=$(gh pr view "$PR_NUMBER" --json baseRefName -q '.baseRefName')
if [ "$ACTUAL" != "$EXPECTED" ]; then
echo "Base mismatch on PR #$PR_NUMBER: expected=$EXPECTED actual=$ACTUAL — re-targeting" >&2
gh pr edit "$PR_NUMBER" --base "$EXPECTED"
else
echo "PR base verified: $EXPECTED"
fi
depends_on: [finalize-pr]

- id: review-scope
command: archon-pr-review-scope
depends_on: [verify-pr-base]
context: fresh

- id: sync
command: archon-sync-pr-with-main
depends_on: [review-scope]
context: fresh

- id: code-review
command: archon-code-review-agent
depends_on: [sync]
context: fresh

- id: error-handling
command: archon-error-handling-agent
depends_on: [sync]
context: fresh

- id: test-coverage
command: archon-test-coverage-agent
depends_on: [sync]
context: fresh

- id: comment-quality
command: archon-comment-quality-agent
depends_on: [sync]
context: fresh

- id: docs-impact
command: archon-docs-impact-agent
depends_on: [sync]
context: fresh

- id: synthesize
command: archon-synthesize-review
depends_on: [code-review, error-handling, test-coverage, comment-quality, docs-impact]
trigger_rule: one_success
context: fresh

# ═══════════════════════════════════════════════════════════════════
# PHASE 7: FIX REVIEW ISSUES
# PHASE 6-7: CODE REVIEW + FIX (shared building block)
# Inlines archon-review-block: verify-pr-base -> review-scope -> sync ->
# 5 parallel review agents -> synthesize -> implement-fixes.
# ═══════════════════════════════════════════════════════════════════

- id: implement-fixes
command: archon-implement-review-fixes
depends_on: [synthesize]
context: fresh
- id: review
include: archon-review-block
depends_on: [finalize-pr]

# ═══════════════════════════════════════════════════════════════════
# PHASE 8: FINAL SUMMARY & FOLLOW-UP
# ═══════════════════════════════════════════════════════════════════

- id: workflow-summary
command: archon-workflow-summary
depends_on: [implement-fixes]
depends_on: [review]
context: fresh
75 changes: 6 additions & 69 deletions .archon/workflows/defaults/archon-issue-review-full.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -30,83 +30,20 @@ nodes:
context: fresh

# ═══════════════════════════════════════════════════════════════════
# PHASE 3: CODE REVIEW
# PHASE 3-4: CODE REVIEW + FIX (shared building block)
# Inlines archon-review-block: verify-pr-base -> review-scope -> sync ->
# 5 parallel review agents -> synthesize -> implement-fixes.
# ═══════════════════════════════════════════════════════════════════

- id: verify-pr-base
bash: |
set -euo pipefail
HEAD_BRANCH=$(git rev-parse --abbrev-ref HEAD)
PR_NUMBER=$(gh pr list --head "$HEAD_BRANCH" --state open --json number -q '.[0].number')
if [ -z "$PR_NUMBER" ]; then
echo "No open PR found for branch $HEAD_BRANCH" >&2
exit 1
fi
EXPECTED="$BASE_BRANCH"
ACTUAL=$(gh pr view "$PR_NUMBER" --json baseRefName -q '.baseRefName')
if [ "$ACTUAL" != "$EXPECTED" ]; then
echo "Base mismatch on PR #$PR_NUMBER: expected=$EXPECTED actual=$ACTUAL — re-targeting" >&2
gh pr edit "$PR_NUMBER" --base "$EXPECTED"
else
echo "PR base verified: $EXPECTED"
fi
- id: review
include: archon-review-block
depends_on: [implement]

- id: review-scope
command: archon-pr-review-scope
depends_on: [verify-pr-base]
context: fresh

- id: sync
command: archon-sync-pr-with-main
depends_on: [review-scope]
context: fresh

- id: code-review
command: archon-code-review-agent
depends_on: [sync]
context: fresh

- id: error-handling
command: archon-error-handling-agent
depends_on: [sync]
context: fresh

- id: test-coverage
command: archon-test-coverage-agent
depends_on: [sync]
context: fresh

- id: comment-quality
command: archon-comment-quality-agent
depends_on: [sync]
context: fresh

- id: docs-impact
command: archon-docs-impact-agent
depends_on: [sync]
context: fresh

- id: synthesize
command: archon-synthesize-review
depends_on: [code-review, error-handling, test-coverage, comment-quality, docs-impact]
trigger_rule: one_success
context: fresh

# ═══════════════════════════════════════════════════════════════════
# PHASE 4: FIX REVIEW ISSUES
# ═══════════════════════════════════════════════════════════════════

- id: implement-fixes
command: archon-implement-review-fixes
depends_on: [synthesize]
context: fresh

# ═══════════════════════════════════════════════════════════════════
# PHASE 5: FINAL SUMMARY
# ═══════════════════════════════════════════════════════════════════

- id: summary
command: archon-workflow-summary
depends_on: [implement-fixes]
depends_on: [review]
context: fresh
Loading
Loading