News
1.47.1
archied
- The bundled PostgreSQL has no network and publishes no port: the services reach it through its Unix socket under
~/.local/share/archie/postgres, so it no longer collides with another PostgreSQL on 5432. Leaving the database question blank inarchied setupselects it. - The installer does not start the services when the bundled PostgreSQL fails to start; it names the command to read its logs.
- On hosts that restrict unprivileged user namespaces (Ubuntu 23.10+), the installer prints an AppArmor profile allowing them for the Archie binaries only.
1.47.0
archied
- Install with one command:
curl -fsSL https://raw.githubusercontent.com/samcharles93/archie-core/main/install.sh | bashdownloads this release, verifies its checksum and runsarchied setup.--from-sourcebuilds a checkout instead. archied setupasks for the PostgreSQL URL. Left blank, it uses the bundled Compose database with a generated password stored in~/.config/archie/envasPGPASSWORD, not inconfig.toml.- The bundled PostgreSQL listens on 127.0.0.1 only. A database created before this release keeps its old
archiepassword; enter its URL at setup or recreate the volume. - The release zip carries
docker-compose.yml. - Extensions need unprivileged user namespaces, which Ubuntu 23.10 and later restrict. Allow them for the Archie binaries with an AppArmor profile; from the next release the installer prints it. Do not disable the restriction system-wide.
- fix(app): assign the temp-file close result on the error path
- fix(webhook): set a ReadHeaderTimeout on the forge webhook receivers
- fix(forge): refuse a review line number that does not fit an int
- fix(storepkg): mask the tar mode to the permission bits before narrowing
- fix(webui): navigate the Events chain once, not twice
- feat(tools): fail the gate when docs cite a path that no longer exists
- fix(webhookguard): verify uppercase-hex HMAC signatures
- fix(configuration): make bot_user required, defaulted, and named
- feat(workflow): add the command.run step type
- fix(controlplane): an absent MCP server field inherits the file value
- fix(build): restore the go fix fixpoint, and give the formatter one owner
- fix(archied): restore contextcheck directives and drop unused adapter
- feat(secretengine): serve secret engines as go-plugin extensions
- refactor(statestore): own package for the State Store service; access reset moves to archie-state-store
- refactor(archied): gateway owns model work; daemon drops chat runtime, tools, memory and curators
- refactor(archiegateway): own package for the Gateway service
- fix(services): services wait for peers instead of exiting; restarted broker keeps its endpoint
- refactor(archieplaybooks): fold archie-playbooks into archied playbooks lint|serve
- refactor(agentrun): agent stage contract moves to the domain layer
- refactor(agentexec): model loop moves to agentexec/modelloop
- fix(configuration): bindings encryption keys must use the env engine
- feat(storepkg): fetch packages from any registry, plain HTTP on loopback only
- feat(webui): install, accept and enable extensions from the dashboard
- feat(presence): every service re-stamps a presence record in the State Store
- refactor(plugin): delete Yaegi daemon plugins and plugin_dir
- refactor(module): the log action is built in; delete the module loader and reconciler
- refactor(skill): delete Yaegi skill scripts and the run_go_script tool
- refactor(examples): the firewall workflow moves to archipelago
- feat(presence): services card on the status page and archied status
- feat(archiemessaging): verify update reports against archied’s presence and restore release announcements
- fix(configuration): an overlay stands in for a missing config file; dev overlay is complete
- feat(access): edit org, workspace and object policies from the dashboard; refuse owner lockout
- feat(access): instance network rules at the capture receiver; policies reload without a restart
- feat(staterpc): attribute State Store calls to the calling service; policy audit records it
- feat(controlplane): playbooks and agent profiles install from packages; the daemon reads eda-playbooks live
- feat(forgeext): forge surface served by extensions; forge.type names the installed package
- refactor(forge): github and gitea leave core; webhooks parse in the forge extension
- feat(staterpc): the State Store derives org and actor from the principal archie-ui forwards
- feat(channelext): chat channels served by extensions; messaging runs the enabled ones
- refactor(channels): webhook and email run only as extensions; their channel settings go
- feat(skills): skill packages project into a skills resource the gateway reads live
- fix(gatewayrpc): sender_id and rate_limited cross the chat wire
- fix(controlplane): change history names kinds and reads only the caller’s org
- feat(contracts)!: requests no longer name their org; the State Store derives it from the caller
- feat(identity): personal API tokens, created and revoked from the dashboard, act as their owner
- fix(archieui): a sign-in provider outage is a health issue, not a startup failure
- feat(staterpc): one run credential per task, kept in the State Store, authorizes its store calls and its push
- fix(forgerpc): forge calls need the run credential and reach only the run’s own repository
- feat(controlplane): identity credential grants edited from the dashboard and applied live
- feat(daemon): a workflow that names an identity runs as it; the dispatcher needs run on the workflow
- feat(staterpc): every run start is audited by the State Store, or the run credential is withdrawn
- refactor(forgerpc): identity RPC subjects are keyed by identity ID
- fix(nats): containers log in with their run credential and reach only their task’s subjects
- feat(egress): the run credential is the proxy login; Kit secrets resolve per request from live grants
- fix(webui): bind the container runtime document’s keys, drop the blank Advanced page
- fix(webui): drop the repository review switch the server no longer accepts
- feat(controlplane): serve the step vocabulary in the workflow-definitions schema; the editor checks step types against it
- fix(ui): drop the topbar nav’s edge fade that clipped the first item
- refactor(workflow): delete the bootstrap smoke-test workflow and its intake kind
- feat(workflow): step ids, {{ }} references to earlier results, agent.run result schemas, workflow.finish and on_failure
- feat(workflow): repository step types; implement and tdd ship as YAML in general steps
- feat(workflow): when conditions, handoff, human approval and forge steps; feasibility and triage ship as YAML
- feat(workflow): retries, parallel branches, review steps; every shipped workflow is YAML and the per-workflow step types are gone
- feat(ui): workflow canvas renders each definition as a step graph with data edges, parallel branches and conditions
- feat(ui): the workflow canvas watches a run live: each step shows its state, duration and error, and the view follows the step in progress
- feat(controlplane): serve each step type’s settings schema; the workflow editor checks settings before save
- feat(ui): build workflows on the canvas: step palette, schema-driven settings forms, references to earlier results, reorder and remove
- feat(ui): the canvas Start node lists what starts the workflow: issue routes, event bindings, playbooks and other workflows
- feat(ui): canvas authoring by right-click menu and + insertion points; steps edit in a slide-in panel and show what they do
- fix(ui): workflow page header is one tab row with save and a more menu; drop the ID field, step list, version footer and the meaningless origin pill
- feat(ui): drive workflows from the canvas: run a workflow, act on the watched run, edit workflow settings from the Start node; the canvas fills the viewport
- feat(ui): inspect workflow step runs from canvas
- feat(workflow): resume a parked run from a chosen step
- feat(ui): bind an event to a workflow from its Start node
- fix(ui): reveal signing secret in canvas source creation
- feat(ui): select review gate findings before approval
- fix(ui): load task debug reliably and copy JSON output
- fix(postgres): queue a review that arrives during a remediation
- fix(ui): keep JSON copy inline on hover
- fix(webui): stop returning database_url from /api/config
- refactor(config): drop unused dispatch state labels
- feat(gateway): serve the dashboard skills and curators over ChatService
- refactor(archieui): leave channel reload unserved by the gateway
- feat(releaseupdate): install from release artifacts with journaled rollback, topology check and channels
- feat(gateway): load SOUL into the chat prompt per turn
- refactor(config): drop the unwired artifact sender and [artifacts] config
- feat(messaging): serve MessagingService.Deliver and deliver chat schedules through it
- refactor(gateway)!: drop budget_key with the webhook chat channel
- refactor(configuration): delete the dead runtime config overlay
- fix(daemon): record terminal non-dispatch outcomes so a capture is evaluated once
- fix(daemon): refuse a disabled workflow on every start path
- fix(workflow): validate workflow.call inside parallel branches
- fix(workflow): validate handoff and approve targets at save
- feat(taskactions): rejecting a pr_open task closes its pull request
- feat(eda): link binding dispatches to the captures and tasks they started
- feat(eda): record every terminal binding outcome and flag failing bindings
- feat(workflow): record parallel branch steps as their own steps
- feat(workflow): record steps skipped by when as skipped
- feat(webui): page and filter the task list on the server
- fix(webui): admit dashboard work requests through the State Store and honour the workflow’s repository mode
- fix(ui): restoring shipped workflows keeps custom ones
- refactor(org): rename the default org to org-sys
- fix(postgres): collect inline comments on a review queued behind a running remediation
- fix(daemon): webhook forge intake does not poll for issues
- refactor(archied): drop the unreachable multi-identity webhook skip; validation refuses it
- feat(access): the dashboard operator is a person owning org-sys
- fix(workflow): refuse undeclared inputs and result fields at save
- fix(ui): offer resume only where the server accepts it
- feat(daemon): the timeline names and links the binding and capture that started a task
- feat(eda): pause and resume a binding; resuming goes back through approval
- feat(org): org, workspace and membership API
- fix(webui): the org-sys owner is the instance owner
- fix(webui): member changes need the admin grant and owner changes an owner
- feat(daemon): withdrawing an issue declines its queued or running work
- feat(workflow): later steps read a waited workflow.call’s outputs as its result
- feat(workflow): record each failed attempt of a retried step
- feat(daemon): record an approving review on the task’s timeline
- feat(workflow): each remediation round names its number, cap and the review it answers
- fix(ui): show step retries as archie’s record, not the agent’s report
- feat(webui): run details show inputs, outputs and workflow.call links both ways
- feat(webui): page through task logs
- feat(eda): name and delete capture sources; an armed binding blocks the delete
- feat(ui): edit retry backoff and needs on the canvas
- fix(controlplane): report watch outages and align live/restart kind labels
- feat(taskactions): merge pull request action from the task
- fix(daemon): withdraw only issues the same dispatch rule found eligible and then lost
- feat(org): instance admins manage every org
- feat(ui): org area with members, agents, workspaces, access and tokens
- fix(ui): trim filler prose and expose appearance in settings nav
- fix(archiegateway,agentexec,agentworker): rely on ai-sdk reasoning token selection
- feat(ui): org switcher and new org for instance admins
- fix(extension): confine each extension’s network to its accepted egress hosts
- fix(captureintake): unwrap form-encoded webhook payloads
- fix(captureintake): decode any form-encoded webhook body to JSON
- fix(modelloop): feed the cached model catalog to the runtime so reasoning models get the right token parameter
- fix(webui): list services with the State Store marked down when it is unreachable
- fix(release): push the release commit and its tag atomically
- fix(eda): dispatch each webhook delivery once, however often the sender retries it
- fix(eda): name a source’s delivery header in the dashboard instead of a built-in sender list
- fix(modelloop): mark reasoning models from the carried model limits, in the gateway and the agent worker
- feat(telegram): /stop stops the chat agent, else the tasks it created, or one task; delete the dead approval actions
- feat(storepkg): install packages from a signed default catalogue, listed on the Extensions page
- feat(setup): one guided flow; ask for PostgreSQL and generate the bundled database’s password
- fix(setup): keep the generated database password out of config.toml
- feat(install): install from a verified release with curl | bash; ship docker-compose.yml in the release
archie-agent
- fix(forge): refuse a review line number that does not fit an int
- fix(webhookguard): verify uppercase-hex HMAC signatures
- feat(workflow): add the command.run step type
- feat(secretengine): serve secret engines as go-plugin extensions
- refactor(statestore): own package for the State Store service; access reset moves to archie-state-store
- fix(services): services wait for peers instead of exiting; restarted broker keeps its endpoint
- refactor(agentrun): agent stage contract moves to the domain layer
- refactor(agentexec): model loop moves to agentexec/modelloop
- fix(configuration): bindings encryption keys must use the env engine
- feat(presence): every service re-stamps a presence record in the State Store
- refactor(plugin): delete Yaegi daemon plugins and plugin_dir
- refactor(module): the log action is built in; delete the module loader and reconciler
- refactor(skill): delete Yaegi skill scripts and the run_go_script tool
- feat(access): edit org, workspace and object policies from the dashboard; refuse owner lockout
- feat(access): instance network rules at the capture receiver; policies reload without a restart
- feat(staterpc): attribute State Store calls to the calling service; policy audit records it
- feat(controlplane): playbooks and agent profiles install from packages; the daemon reads eda-playbooks live
- feat(forgeext): forge surface served by extensions; forge.type names the installed package
- refactor(forge): github and gitea leave core; webhooks parse in the forge extension
- feat(staterpc): the State Store derives org and actor from the principal archie-ui forwards
- feat(channelext): chat channels served by extensions; messaging runs the enabled ones
- refactor(channels): webhook and email run only as extensions; their channel settings go
- feat(skills): skill packages project into a skills resource the gateway reads live
- fix(controlplane): change history names kinds and reads only the caller’s org
- feat(contracts)!: requests no longer name their org; the State Store derives it from the caller
- feat(identity): personal API tokens, created and revoked from the dashboard, act as their owner
- fix(archieui): a sign-in provider outage is a health issue, not a startup failure
- feat(staterpc): one run credential per task, kept in the State Store, authorizes its store calls and its push
- fix(forgerpc): forge calls need the run credential and reach only the run’s own repository
- feat(daemon): a workflow that names an identity runs as it; the dispatcher needs run on the workflow
- feat(staterpc): every run start is audited by the State Store, or the run credential is withdrawn
- refactor(forgerpc): identity RPC subjects are keyed by identity ID
- fix(nats): containers log in with their run credential and reach only their task’s subjects
- feat(egress): the run credential is the proxy login; Kit secrets resolve per request from live grants
- feat(controlplane): serve the step vocabulary in the workflow-definitions schema; the editor checks step types against it
- refactor(workflow): delete the bootstrap smoke-test workflow and its intake kind
- feat(workflow): step ids, {{ }} references to earlier results, agent.run result schemas, workflow.finish and on_failure
- feat(workflow): repository step types; implement and tdd ship as YAML in general steps
- feat(workflow): when conditions, handoff, human approval and forge steps; feasibility and triage ship as YAML
- feat(workflow): retries, parallel branches, review steps; every shipped workflow is YAML and the per-workflow step types are gone
- feat(controlplane): serve each step type’s settings schema; the workflow editor checks settings before save
- feat(ui): the canvas Start node lists what starts the workflow: issue routes, event bindings, playbooks and other workflows
- feat(ui): inspect workflow step runs from canvas
- feat(workflow): resume a parked run from a chosen step
- fix(postgres): queue a review that arrives during a remediation
- refactor(config): drop unused dispatch state labels
- refactor(config): drop the unwired artifact sender and [artifacts] config
- feat(messaging): serve MessagingService.Deliver and deliver chat schedules through it
- refactor(gateway)!: drop budget_key with the webhook chat channel
- fix(daemon): record terminal non-dispatch outcomes so a capture is evaluated once
- fix(workflow): validate workflow.call inside parallel branches
- fix(workflow): validate handoff and approve targets at save
- feat(taskactions): rejecting a pr_open task closes its pull request
- feat(eda): link binding dispatches to the captures and tasks they started
- feat(workflow): record parallel branch steps as their own steps
- feat(workflow): record steps skipped by when as skipped
- feat(webui): page and filter the task list on the server
- refactor(org): rename the default org to org-sys
- fix(postgres): collect inline comments on a review queued behind a running remediation
- feat(access): the dashboard operator is a person owning org-sys
- fix(workflow): refuse undeclared inputs and result fields at save
- feat(daemon): the timeline names and links the binding and capture that started a task
- feat(eda): pause and resume a binding; resuming goes back through approval
- feat(org): org, workspace and membership API
- feat(daemon): withdrawing an issue declines its queued or running work
- feat(workflow): later steps read a waited workflow.call’s outputs as its result
- feat(workflow): record each failed attempt of a retried step
- feat(daemon): record an approving review on the task’s timeline
- feat(workflow): each remediation round names its number, cap and the review it answers
- feat(webui): run details show inputs, outputs and workflow.call links both ways
- feat(webui): page through task logs
- feat(eda): name and delete capture sources; an armed binding blocks the delete
- feat(taskactions): merge pull request action from the task
- feat(org): instance admins manage every org
- fix(archiegateway,agentexec,agentworker): rely on ai-sdk reasoning token selection
- fix(extension): confine each extension’s network to its accepted egress hosts
- fix(modelloop): feed the cached model catalog to the runtime so reasoning models get the right token parameter
- fix(eda): dispatch each webhook delivery once, however often the sender retries it
- fix(eda): name a source’s delivery header in the dashboard instead of a built-in sender list
- fix(modelloop): mark reasoning models from the carried model limits, in the gateway and the agent worker
- feat(telegram): /stop stops the chat agent, else the tasks it created, or one task; delete the dead approval actions
- feat(storepkg): install packages from a signed default catalogue, listed on the Extensions page
1.46.0
archied
- feat(workflow): declared workflow outputs for wait:true callers
- feat(prreview): the operator-approval gate is PRReview’s own stage-list entry
- feat(staterpc): carry the review gate and re-review rounds, with one guarded response write
- feat(prreview): the gate records the review it holds and posts the operator’s answer
- feat(taskactions): one approval path answers the review gate from every surface
- feat(webui): the dashboard answers the review gate, including a re-review’s instructions
- feat(daemon): resolve the producing identity’s org before publishing work
- feat(webui): block invalid settings and show a field’s former value
- fix(workflow): derive a declared output’s captures need for profile selection
- fix(storepkg): validate every declared authority grant at the package descriptor
- feat(archied): refresh the model catalog at runtime
- feat(mcp): answer server-initiated sampling from the chat model
- feat(container): send registry auth on image pull
- feat(messaging): retract ephemeral replies after their TTL
- feat(messaging): transcribe Telegram voice notes
- fix(egress): take a run’s credential kind from its binding, not the Kit
- feat(webui): a live-apply setting reads as applied, never as a restart
- feat(webui): the dashboard reads harness bindings and opens the setup terminal
- feat(gateway): list the harness page in the dashboard page registry
- feat(webui): the harness settings page and its setup terminal
- fix(workflow): park environment gate failures without dispatching a builder
- feat(messaging): adapter-facing clarify, picker and approval contract
- feat(gateway): gate admin slash commands by sender policy
- feat(plugins): load plugin and secret-engine files without a restart
- fix(workflow): deliver the feasibility PRD to the forge issue
- fix(messaging): report the daemon version this process was built from
- fix(messaging): carry an inbound attachment’s bytes to the gateway turn
- fix(daemon): resume a retry whose worktree is gone
- fix(archied): omit the max-token bound on reasoning-class models
- fix(logging): file a task log record under its own event time
- fix(control-plane): unify validation for the domain-managed kinds
- feat(webui): let the operator choose the retry worktree mode
- feat(agent): seed a starter SOUL and upgrade only untouched templates
- feat(controlplane): add the writable review-settings resource
- fix(messaging): transcribe voice notes on the model-owning side of the boundary
- fix(messaging): gate the boundary on config reads, not only package links
- feat(messaging): restart only the channel whose settings changed
- feat(container): apply container-runtime-policies live
- feat(tools): reconcile MCP servers and tool settings live
- feat(messaging): add a per-turn interactive carrier for clarify and picker
- feat(gateway): offer ask_user when the turn’s channel can carry a question
- feat(telegram): carry clarify and picker through the text fallback
- fix(webui): pin the dashboard validators to the control plane’s
- refactor(agent): drop the SOUL upgrade branch with no shipped template
- feat(agentworker): answer MCP sampling from the task’s model
- fix(workflow): bind the remediate worktree before the builder runs
- fix(config): carry max_retries into the worker TaskConfig snapshot
- fix(agentworker): supply the guardrail engine to every task run
archie-agent
- feat(workflow): declared workflow outputs for wait:true callers
- feat(prreview): the operator-approval gate is PRReview’s own stage-list entry
- feat(staterpc): carry the review gate and re-review rounds, with one guarded response write
- feat(prreview): the gate records the review it holds and posts the operator’s answer
- feat(taskactions): one approval path answers the review gate from every surface
- fix(workflow): derive a declared output’s captures need for profile selection
- fix(storepkg): validate every declared authority grant at the package descriptor
- feat(mcp): answer server-initiated sampling from the chat model
- feat(container): send registry auth on image pull
- feat(messaging): retract ephemeral replies after their TTL
- feat(messaging): transcribe Telegram voice notes
- fix(egress): take a run’s credential kind from its binding, not the Kit
- fix(workflow): park environment gate failures without dispatching a builder
- feat(messaging): adapter-facing clarify, picker and approval contract
- feat(plugins): load plugin and secret-engine files without a restart
- fix(workflow): deliver the feasibility PRD to the forge issue
- fix(messaging): carry an inbound attachment’s bytes to the gateway turn
- fix(daemon): resume a retry whose worktree is gone
- fix(logging): file a task log record under its own event time
- fix(control-plane): unify validation for the domain-managed kinds
- feat(webui): let the operator choose the retry worktree mode
- fix(messaging): transcribe voice notes on the model-owning side of the boundary
- feat(messaging): restart only the channel whose settings changed
- feat(container): apply container-runtime-policies live
- feat(tools): reconcile MCP servers and tool settings live
- feat(messaging): add a per-turn interactive carrier for clarify and picker
- feat(agentworker): answer MCP sampling from the task’s model
- fix(workflow): bind the remediate worktree before the builder runs
- fix(config): carry max_retries into the worker TaskConfig snapshot
- fix(agentworker): supply the guardrail engine to every task run
1.45.0
archied
- fix(eda): reject a result map missing a field or needing a conversion
- feat(eda): per-org workflow enable/disable gating bindings
- feat(telegram): carry inbound media through the chat turn
- fix(prsource): use a CodeQL-recognised containment guard when extracting archives
- feat(store): key control-plane resources by (org, kind)
- fix(store): refuse resource keys the audit key cannot disambiguate
- fix(daemon): resume the task branch before container acquisition
- feat(webui): show attachment metadata in the session transcript
- feat(webui): name a workflow’s declared inputs on the work-request form
- feat(controlplane): carry the caller org from the request principal
- fix(webui): the workflow handlers act in the caller’s org
- feat(kitrun): render the OAuth credential file with sentinels
- feat(store): record accepted package authority against the pin
- fix(workflow): the own-PR flow no longer parks on the operator-approval gate
- feat(gateway): a TTL-bounded dedup gate for redelivered platform messages
- feat(egress): capture the OAuth scope set and carry it to the harness secret
- feat(kitrun): render the OAuth scopes and omit an uncaptured primary key
- feat(store): project installed package contributions into org resources
- feat(gateway): coalesce rapid-fire text events into one turn
- fix(config): expand plugin, module and skills dirs like every other operator path
- fix(webui): drop the config schema’s editability advert
- feat(webui): events counts, YAML reading, log rows and dashboard filters
archie-agent
- feat(eda): per-org workflow enable/disable gating bindings
- feat(telegram): carry inbound media through the chat turn
- fix(prsource): use a CodeQL-recognised containment guard when extracting archives
- feat(store): key control-plane resources by (org, kind)
- feat(controlplane): carry the caller org from the request principal
- feat(kitrun): render the OAuth credential file with sentinels
- feat(store): record accepted package authority against the pin
- fix(workflow): the own-PR flow no longer parks on the operator-approval gate
- feat(egress): capture the OAuth scope set and carry it to the harness secret
- feat(kitrun): render the OAuth scopes and omit an uncaptured primary key
- feat(store): project installed package contributions into org resources
1.44.1
archied
Two fixes to tasks that could not get past their workflow definition.
- Approving a task no longer parks it again. A task requeued under a
different workflow kept the previous run’s definition pinned, so the worker
refused to compile the dispatch — it named
feasibilitywhile the row namedimplement— and the task parked immediately, identically on every further approval, which leftdeclineas the only working operator action. The daemon now re-pins whenever the pinned definition’s id disagrees with the task’s workflow. A pin that is present, digest-valid and id-consistent is still a strict no-op, so an operator’s own definition override survives a dispatch unchanged. - A shipped workflow definition now reaches an existing install. A stored seed was consulted only for a resource the store did not already hold, so a document that changed in the build never reached a database an earlier release had seeded. For workflow definitions that is a total outage rather than a stale setting: the collection validates as one document, so a stored step type this build no longer has failed every task’s pin, whatever workflow the task named — and the documented recovery, removing the resource and restarting, wrote nothing either, because the store answered the seed’s known request ID from a history that outlives the resource. A seed now refreshes a kind it wrote the newest revision of and re-creates a resource that is gone, while an operator’s own replacement is never undone.
archie-agent
The runtime image is rebuilt with this release and links the shared workflow
package carrying the definition-id helper above. Hosts that run agent
containers need docker compose pull agent after updating to pick it up.
1.44.0
archied
Archie can now review pull requests.
- Reviews on request and by watch. Ask in chat or on the dashboard work form, add a repository to the watch list, or just let archie review its own PRs before it opens them. Review intensity follows a depth dial (quick/standard/deep) classified from the size of the change, and every finished review passes a verification layer — coverage-gap and cross-finding consistency checks — before it is produced.
- No forge credential reaches the review sandbox. The daemon prefetches the pull request’s data and rebuilds its source snapshot over the forge’s HTTP API, so the agent container works from an isolated copy with no read access to the repository’s credentials.
- Reviews stop at the operator gate before posting.
review.precision_gate/approve_before_postdecide whether a finished review posts itself or parks for operator approval. With this release the parked state is a stop sign, not a checkpoint: the approve/reject/re-review responses behind the gate are not wired yet, and the gate’s settings are not yet editable in the dashboard (configure them inconfig.toml). A parked review sits until that follow-up lands. - The adversarial self-review pass archie previously ran before opening its own PRs is superseded by this pipeline and has been removed.
- Hardened harness input handling: harness identifiers are bounded to integer types.
archie-agent
The runtime image is rebuilt with this release; it links the shared pr-review workflow packages behind the reviews above. Hosts that run agent containers need docker compose pull agent after updating to pick it up.
1.43.0
archied
- Organisations. Tasks, identities and settings now belong to an org. An existing install is upgraded into a default org when the State Store first starts; the upgrade resumes if interrupted. Task de-duplication is scoped per org and identity.
- Access policies are enforced at the dashboard, the API and task
dispatch, with shipped roles and a rule that nothing crosses between orgs.
Denials are recorded and reported on the health page. If a policy locks
you out,
archied access reset --org <org>(or--instance) on the State Store host restores the shipped defaults. - Workflows can call workflows with a
workflow.callstep. Inputs and call cycles are checked when the workflow is saved, and the caller waits on the callee’s result. - Runs record each step. A run’s stages and agent calls are stored as steps, the task detail page reads them, and stopping a task or archiving it goes through one cancel path. After a crash, steps left running are marked interrupted. Archiving a task removes its worktree.
- Model roles, repositories, scheduling policy, providers and agent profiles apply without a restart.
- Kit harness profiles:
kitis now one digest-pinned reference, a workload Kit or a published Kit set, not a list. Rewritekit = [...]inconfig.tomlor the agent-profiles settings as the single reference; a list no longer loads. Compose mixins by publishing a Kit set.- OAuth logins are handled on the host: the egress proxy refreshes tokens, stores them encrypted, and gives the container only placeholders.
- A Kit’s skills request mounts
skills_dirread-only, and its instructions file (such asCLAUDE.md) is written beside the workspace, which is now/archie/workspace. - A run still cannot be granted the credential a Kit needs, so a Kit that requires one is refused at launch.
- Rate-limited webhook deliveries get
429. archie-gatewayandarchie-state-storereport ready to systemd.
archie-agent
- Runs workflow calls, records its steps and agent calls, and runs Kit harness stages under the profile’s Kit.
1.42.0
archied
- The dashboard is rebuilt on a new Graphite theme. Settings moved to its own sidebar with one save flow across every page (Channels, Tools & MCP, Scheduling policy, Personas and Schedules, Identities, Plugins, Container runtime, and a History of past changes). The top bar, Dashboard, Workflows, task detail, the New task dialog and the Events page are all new: Dashboard leads with what needs you, a run’s stage rail and detail panels sit side by side, Workflows shows per-workflow stats including completed runs, and Events states capture status with a copyable capture endpoint. Live updates share one stream and reopen after a drop instead of going quiet.
- Settings changes are audited. A field-level audit table records who changed what, with a view on each settings page.
- A task can carry a whole-run wall-clock limit, separate from a stage’s own budget.
- A run that makes no changes now ends as completed and its worktree is cleaned up, rather than left in a state Workflows didn’t count.
- Abandoning a task no longer closes its forge issue. Only the workflow’s own terminal outcomes do that now.
- A task whose container exits before the worker replies is parked instead of left running with no way to finish.
- A worktree still holding uncommitted work is kept, rather than reset, when its task reaches a terminal state.
- A provider’s stored settings no longer get corrupted with a process-local placeholder in place of your configured secret reference, and archied rejects a stored value shaped like one on the way back in.
- Kit v3 harness profiles. A
[containers.profiles.<name>]entry can now name a Kit v3 image (kit = [...], pinned by digest) instead of a plain container image, running the task’s agent stages on an external CLI – Claude Code, Codex, Pi, OMP or GitHub Copilot CLI – inside an isolated sandbox network. This release lands the daemon-side plumbing (egress proxy, sandbox network, credential injection points); it does not yet ship a way to grant a run’s identity the credential a Kit needs, so a Kit requiring one is refused at launch until a later release adds it. task devnow starts the State Store and waits for it before the rest of the stack.- Every service binary the installer builds is stamped with its version.
archie-agent
- Carries the same task-lifecycle fixes as archied above (no-change runs, parking on an early container exit, and the abandon/forge-issue fix), plus the Kit v3 harness runner: a stage can now drive an external CLI headlessly, read output from Claude Code, Codex, Pi, OMP or GitHub Copilot CLI, and serve it capture tools over MCP.
- Claude’s cached tokens are counted as prompt tokens, matching the built-in agent loop’s accounting.
1.41.2
archied
/updateno longer offers an old runtime. The runtime has shipped under the release version since the version streams merged, but the update check still read the retired runtime tags, so a current host was offered runtime 1.35.0 as an update. Do not approve that offer on 1.41.1; update to 1.41.2 instead./versionreports the runtime version. Binaries from the release zip showedRuntime: dev.
1.41.1
archied
- First published build of 1.41.0. The 1.41.0 tag produced no release artifacts; 1.41.1 carries everything listed under 1.41.0 below, including the PostgreSQL 18 requirement and the removed config keys.
Page 3 of 10