Skip to content

v0.5.0

Choose a tag to compare

@github-actions github-actions released this 29 Jul 20:48

Upgrade notes

v0.5.0 is the first release under the Curie name. AgentOS is gone from the whole
surface: the CLI binary, the environment variables, the Helm chart, the
Kubernetes namespace, the container image coordinates, and the published schema
URLs. There are no compatibility aliases, and none are planned.

Nobody is running v0.4.x yet, so this is a clean break rather than a migration.
If you do have an old install on a box somewhere, uninstall it and install fresh
rather than upgrading in place.

v0.4.x v0.5.0
agentos binary curie
agentos-x86_64-unknown-linux-gnu, agentos-aarch64-apple-darwin curie-x86_64-unknown-linux-gnu, curie-aarch64-apple-darwin
AGENTOS_* env vars (AGENTOS_CREDENTIALS, AGENTOS_MODEL, and the rest) CURIE_* (CURIE_CREDENTIALS, CURIE_MODEL, and the rest)
agentos-0.4.3.tgz chart, installed as release and namespace agentos curie-0.5.0.tgz chart, installed as release and namespace curie
ghcr.io/curie-eng/agentos-{api,dispatcher,worker,ui,runner} ghcr.io/curie-eng/curie-{api,dispatcher,worker,ui,runner}
keyring service dev.curie.agentos ai.curietech.curie
schema $id under https://curie.tech/agentos/ https://curietech.ai/schemas/

Two consequences worth calling out:

  • Secrets saved with agentos secrets set live under the old keyring service and
    are invisible to curie secrets. Set them again.
  • The wire contract went to 0.2.7. The only change is the schema $id URL, so
    anything validating a bundle against the published schema needs the new
    address.

Install

curl -fsSL https://raw.githubusercontent.com/curie-eng/curie/main/get-curie.sh | bash

The installer resolves the right binary for your platform, always checks the
sha256 against checksums.txt, and verifies the cosign signature over that
manifest when cosign is on PATH. To do it by hand, or to make the signature check
mandatory, see docs/release-verification.md.

Prebuilt binaries cover Linux x86_64 and macOS Apple silicon. Anything else
builds from source in cli/.

What was verified for this release

The live parity ladder was run against a real model (z-ai/glm-5.2) at every
rung and graded, not just checked for plumbing: the skill tier, the local
compose stack, the generated release compose, and a real Kubernetes install.
Full CI was green on the tagged commit.

Two honest gaps, both pre-existing rather than new:

  • gVisor kernel isolation is untested. The verification cluster has no
    runsc runtime, so the install ran with security.gvisor.mode=off. CI's
    cluster rung has the same gap.
  • Evals remain a floor rather than a ceiling. See
    ADR-0022.

What's Changed

  • Resolve the release asset by platform in release-verification.md by @alexrao2000 in #773
  • Add a reset-thread CLI verb for forced thread sandbox release by @alexrao2000 in #781
  • Require an explicit allowlist of check-runs and paginate the check-run fetch by @alexrao2000 in #782
  • Distinguish a zero-match namespace sweep from an actual removal and aggregate the resume command's exit status by @alexrao2000 in #783
  • Release the local message Slack stub port on a timed-out turn by @alexrao2000 in #784
  • Bound bundle ingestion with an upload size cap and extraction size/ratio guards by @alexrao2000 in #785
  • Bound the thread-reset drain to a per-tick budget by @alexrao2000 in #777
  • Declare ephemeral-storage requests and limits on every sandbox container by @alexrao2000 in #774
  • Add PriorityClass so platform pods outrank sandbox pods by @alexrao2000 in #778
  • Restate the release gate's trust boundary honestly by @alexrao2000 in #776
  • Bound the interrupt RPC so it cannot hang the kill switch or interrupt_agent by @alexrao2000 in #780
  • Set sizeLimit on every writable emptyDir in the sandbox pod by @alexrao2000 in #775
  • Ship a tenant ResourceQuota and LimitRange for the sandbox namespace by @alexrao2000 in #779
  • Stop the agent-sandbox controller from shadow-managing a permissive egress NetworkPolicy by @alexrao2000 in #795
  • Share the GHA layer cache with e2e-ladder's image builds by @alexrao2000 in #791
  • Surface plumbing rows in the eval model-sweep report by @alexrao2000 in #794
  • Give the skill-tier e2e script a live-credential mode and AGENTOS_BIN support by @alexrao2000 in #792
  • Discover the release credentials for cluster eval by @alexrao2000 in #793
  • Add a CI gate for _AciModel model_validate call sites by @alexrao2000 in #796
  • Fail an eval model sweep row loudly when a model never completes a turn by @alexrao2000 in #798
  • Add a --json emit-hop parity gate for CliOutput::to_json projections by @alexrao2000 in #797
  • Add a parity-ladder rung that runs against the generated release compose by @alexrao2000 in #800
  • Revert the e2e-ladder image builds to plain docker build by @alexrao2000 in #803
  • Quote a CI step name whose colon broke YAML parsing by @alexrao2000 in #805
  • Gate the CLI's plugin_format hand-mirrors against the frozen schema by @alexrao2000 in #799
  • Wait for a thread reset to actually land before reporting success by @jw3329 in #806
  • Record ADR-0069: the policy-gate resume reconciliation stays observe-only by @alexrao2000 in #808
  • Read a bundle .env as an opt-in, lowest-priority credential for skill up by @jw3329 in #809
  • Adopt an existing non-plugin bundle: init --adopt + guide + signpost error by @jw3329 in #810
  • Fix release gate refusing every tag from ci.yaml check-name drift by @TheConnMan in #820
  • Guarantee a non-empty eval error on a bare timeout (#813) by @TheConnMan in #818
  • Give the agent-sandbox controller the platform PriorityClass (#816) by @TheConnMan in #819
  • Consolidate ADR-0039 dead-letter machinery onto StreamConsumer by @TheConnMan in #825
  • Consolidate Valkey connect-and-skip test boilerplate into a shared helper by @TheConnMan in #824
  • Fix four stale doc facts and consolidate duplicated getting-started content by @TheConnMan in #823
  • Delete grep-verified dead Python code by @TheConnMan in #822
  • Keep a multi-paragraph approval summary from breaking the CLI notice parse by @alexrao2000 in #827
  • Flip thread-reset pending signal only after the release actually lands by @alexrao2000 in #826
  • Scope eval sweep never-completed detection to the triggered sha by @alexrao2000 in #829
  • Enforce archive member-count and incremental size caps during bundle prescan by @alexrao2000 in #828
  • Add public contribution and support baseline docs by @alexrao2000 in #830
  • Make the read-only tool set harness-declared for side-effect classification by @alexrao2000 in #831
  • Bound and sequence eval sandbox-claim creation for single-node clusters by @alexrao2000 in #832
  • Serialize thread reset against turn start under the route lock by @alexrao2000 in #834
  • Add tool_called eval grader kind (ADR-0022 Phase 1) by @alexrao2000 in #837
  • Render the approval card below the channel-interaction seam by @alexrao2000 in #838
  • Evaluate typify for the Rust ACI types: keep the hand-rolled emitter (ADR-0072) by @alexrao2000 in #833
  • Add one-command chart runtime E2E harness and require live verification for runtime-AC tickets by @alexrao2000 in #835
  • Own bundle credential plumbing for the compose tier and persist Slack tokens by @alexrao2000 in #836
  • Populate eval cost_usd from token usage and add variance-aware grading by @alexrao2000 in #839
  • Remove the UI fixture world and add a durable-state read surface by @alexrao2000 in #842
  • Publish committed, versioned JSON schemas for every agent-facing CLI result by @alexrao2000 in #841
  • Expose the durable state store to bundle code by @alexrao2000 in #840
  • Wire the parity ladder's cluster rung into CI on a kind cluster by @alexrao2000 in #843
  • Add harness contribution manifest and entry-point registry by @alexrao2000 in #845
  • Wire build_runner to the harness contribution registry by @alexrao2000 in #846
  • Rationalize the README/QUICKSTART Quickstart duplication by @athusoo in #807
  • Match CPython EOCD resolution so the zip member-count guard cannot be bypassed by @TheConnMan in #864
  • Make LockAcquireTimeout retryable on the turn path by @TheConnMan in #860
  • Guard every harness key a contribution claims, not just its entry-point name by @TheConnMan in #862
  • Add Apache 2.0 license, NOTICE, and trademark policy by @TheConnMan in #821
  • Make the runner honor a declarative harness selection by @alexrao2000 in #847
  • True up the vision docs to the code on main by @TheConnMan in #877
  • Add a one-command verified installer for the released binary by @TheConnMan in #876
  • Wire Observability Memory tab to the live memory endpoint by @alexrao2000 in #879
  • Add console operator control for thread reset by @alexrao2000 in #881
  • Wire the console Evals tab to the live evals matrix API by @alexrao2000 in #880
  • Add console Approvals surface consuming the approvals API by @alexrao2000 in #882
  • Cache cargo in the Rust CI job by @alexrao2000 in #885
  • Split the agentos release build into its own cached CI job by @alexrao2000 in #893
  • Add console behavior-packs panel (GET + PUT) by @alexrao2000 in #883
  • Add ADR-0076: closed, versioned telemetry attribute schema by @alexrao2000 in #895
  • Surface the resolved approval decision through the Langfuse read proxy by @alexrao2000 in #901
  • Add a CI drift gate on the closed OTel attribute schema by @alexrao2000 in #902
  • Close the runner's OTel span attribute keys to a single enum by @alexrao2000 in #896
  • Emit the resolved approval decision into the runner's OTel span stream by @alexrao2000 in #898
  • Add export-time validator dropping non-schema keys and unscrubbed secrets by @alexrao2000 in #897
  • Report skill-tier approvals --list/--resolve as unavailable, not absent by @alexrao2000 in #903
  • Percent-encode state key/namespace so '#'/'?' can't collide keys by @jw3329 in #908
  • Condense the two installer scripts into one auto-detecting get-agentos.sh by @alexrao2000 in #907
  • QUICKSTART: split quick path from advanced usage, fix stale UI refs by @alexrao2000 in #909
  • Thread --env-file through local rebuild for up-parity wiring (#853) by @yichenzhang-curietech in #912
  • Sync runner Dockerfile SDK/OTel pins to uv.lock (#873) by @yichenzhang-curietech in #911
  • Make QUICKSTART shell blocks paste-safe on zsh (#801) by @yichenzhang-curietech in #910
  • Pin the gitleaks scanner image and document the repo security baseline by @alexrao2000 in #914
  • Attribute eval cost_usd on failing real-model turns, not just graded ones by @jw3329 in #913
  • cluster message: advertise host.docker.internal under Docker Desktop by @alexrao2000 in #918
  • Correct two stale seam-catalog claims (#858) by @yichenzhang-curietech in #920
  • Resolve the built-in harness without scanning entry points (#865) by @yichenzhang-curietech in #921
  • Tighten the zip central-directory per-member budget (#861) by @yichenzhang-curietech in #922
  • ADR-0078: route message-driven approval cards through the connected transport by @alexrao2000 in #923
  • Widen the cluster CI path filter to all of packages/ (#859) by @yichenzhang-curietech in #924
  • Filter reserved namespaces from state enumeration for the app token by @jw3329 in #919
  • Cap the number of namespaces an agent can create in durable state by @jw3329 in #925
  • Cap behavior-packs content size, reject oversized writes with 413 by @TheConnMan in #939
  • Detect a value-type change in the OTel schema drift gate by @TheConnMan in #940
  • Bump the github-actions group with 3 updates by @dependabot[bot] in #928
  • Bump the python group with 3 updates by @dependabot[bot] in #931
  • Update boto3-stubs[s3] requirement from >=1.43.50 to >=1.43.55 by @dependabot[bot] in #932
  • Bump the cargo group across 2 directories with 12 updates by @dependabot[bot] in #930
  • Make EOCD fast-path locator test tolerant of CPython 3.14 by @TheConnMan in #941
  • Speed up the e2e parity ladder: path-scope, layer-cache, and parallelize by @alexrao2000 in #906
  • Add connected-transport Slack primitives for the message path by @alexrao2000 in #926
  • Fix QUICKSTART.md code blocks for zsh copy-paste compatibility by @athusoo in #802
  • Propose ADR-0020: inbound triggers as a new event kind (#29 design) by @jw3329 in #287
  • Draft ADR-0075: the Agent Proxy (credentials and egress leave the sandbox) by @TheConnMan in #878
  • Ignore the TypeScript major in the UI dependabot group by @TheConnMan in #942
  • Add a nightly graded parity ladder workflow by @TheConnMan in #946
  • Bump the python group across 1 directory with 2 updates by @dependabot[bot] in #944
  • Bump actions/download-artifact from 7 to 8 in the github-actions group across 1 directory by @dependabot[bot] in #943
  • message: post a real placeholder over the connected Slack transport by @alexrao2000 in #927
  • Add a graded local-release rung to the nightly parity ladder by @alexrao2000 in #948
  • Enforce one agent per Slack channel by @alexrao2000 in #949
  • Gate the harness SDK boundary with import-linter contracts by @alexrao2000 in #950
  • OTel redaction: make sequence-valued span attributes scrub and fail closed by @alexrao2000 in #951
  • Bump brace-expansion to 5.0.8 to clear the pnpm audit (GHSA-mh99-v99m-4gvg) by @yichenzhang-curietech in #953
  • Assert the seam catalog's prose counts against the tree (#938) by @yichenzhang-curietech in #952
  • Validate every message outcome variant against its committed schema (#955) by @TheConnMan in #966
  • Thread the connected-transport turn on the real placeholder ts (#954) by @TheConnMan in #964
  • Fail the seam count gate when a claim's doc is moved away by @TheConnMan in #963
  • Name GitHub Discussions as the support channel by @TheConnMan in #967
  • Add GitHub issue and pull request templates by @TheConnMan in #968
  • Name the conduct escalation contact by @TheConnMan in #985
  • Cover every CliOutput enum variant with the to_json schema gate by @alexrao2000 in #1008
  • Gate commit messages against AI attribution in CI by @alexrao2000 in #1012
  • Install Node from the official image instead of the NodeSource apt repo by @alexrao2000 in #1020
  • Import-linter follow-ups: gate the frozen packages, fix the verify list and a count by @alexrao2000 in #1018
  • Cover the resolver's shadow branch without dropping a shared-database constraint by @alexrao2000 in #1022
  • Match compose and otel inputs in the e2e ladder path filter by @alexrao2000 in #1023
  • Decide local connectedness from the worker's transport, not CLI-side config by @alexrao2000 in #1024
  • Move ADR-0078's supersession note to a compliant back-link by @alexrao2000 in #1026
  • Close the commit-message gate's fail-open range path and pin its self-test by @TheConnMan in #1039
  • Test that the resolver calls the shadowed-binding warning by @TheConnMan in #1038
  • Widen the e2e ladder path filter to examples/, pyproject.toml and uv.lock by @TheConnMan in #1037
  • Publish a verification contract for agents driving Curie by @TheConnMan in #1042
  • Make the approval plane discoverable from the CLI alone by @yichenzhang-curietech in #1056
  • Bind approval routes from the CLI instead of a hand-written curl by @yichenzhang-curietech in #1057
  • Collect an optional note when an approval is approved or rejected by @yichenzhang-curietech in #1059
  • Ack the approval note dialog before any Slack call by @TheConnMan in #1083
  • Gate the approval action-id prefix across Python and Rust by @TheConnMan in #1082
  • Send an empty approval-route map as {} so --clear-routes actually clears by @TheConnMan in #1080
  • Document the recommended Kubernetes setup by @TheConnMan in #1089
  • Fix interactive input Clippy lint by @TheConnMan in #1088
  • Correct README parity claims by @TheConnMan in #1090
  • Clarify ADR acceptance process by @TheConnMan in #1092
  • Execute an immutable bundle snapshot at the skill tier by @TheConnMan in #1091
  • Authenticate the git-flow clone so a private repo can deploy (#1058) by @jw3329 in #1097
  • Grade every live parity ladder rung by @TheConnMan in #1105

New Contributors

Full Changelog: v0.4.3...v0.5.0