AgentOS 2026.8.3
·
586 commits
to main
since this release
A packaging, skills, and upgrade-path release. If you installed AgentOS from a local checkout, agentos upgrade has been shipping you a stale web UI — that is fixed here, and this is the release to take.
Fixed
agentos upgradeno longer ships a stale React control UI.scripts/install_source.shinstalls the directory itself, so uv's tool receipt records a directory requirement;uv tool upgradethen re-resolved that requirement and rebuilt the wheel from the working tree. The wheel bundlessrc/agentos/gateway/static/dist/**, but nothing in the upgrade path runsnpm run build— so every upgrade re-packaged whatever browser bundle happened to be on disk. Python code moved forward, the web UI silently did not.agentos upgradenow installs the published release (uv tool install --force --python <running> "use-agent-os[recommended]"/pipx install --force …), whose wheel carries a control UI built and verified in CI. Installing a checkout stays withscripts/install_source.sh, the only path that rebuilds the bundle first; the command names it when it detects a checkout-backed install.agentos upgradeprinted its own commands with the extras silently removed. Rich parsed the[recommended]inuse-agent-os[recommended]as a markup tag and dropped it, so copying the printed command produced an install missing the ONNX embedding models and the pilot router.- Pilot Router tier defaults were priced and sized against tables that had no entry for them. Both tables fail open without logging: pricing falls through a
startswithscan to whatever shorter prefix matches first (or a generic $3/$15), the catalog falls through an exact-key miss to a generic 200K context / 16K output.glm-4.7-flashxwas estimating at the generic default, and seven ids — includinganthropic/claude-opus-5, the OpenRouter c3 default, whose bare spelling was listed at 1M/128K — were sizing turns against generic limits. Every tier default now carries an explicit entry in both tables, enforced by a test that walks all router tier profiles. (#139) - OpenCAP cost estimates silently used a different gateway's rate sheet after one failed boot fetch. The price cache was seeded exactly once and never refreshed, so a single timeout meant every estimate for the life of the process came from the shared static table — which carries Bankr rates running 3–5× below OpenCAP's own. The cache now refreshes on a TTL and refetches when cold, mirroring the OpenRouter live-pricing path, with a shorter negative cache so an unreachable catalog costs one bounded attempt rather than one per lookup. A fallback estimate is logged once per model, so a substituted number is no longer indistinguishable from a catalog-backed one. Set
AGENTOS_OPENCAP_LIVE_PRICING=0to disable the refresh. - A hub install could silently shadow a bundled skill. A skill declaring
requiresis dropped from the prompt until its binary and variables are present, so from inside a turn an installed-but-unconfigured skill is indistinguishable from one that was never installed — and a same-named catalog row installs into the managed layer, which outranks bundled. The installer now refuses a first install that would shadow a bundled skill (overridable withforce, never blocking a reinstall oragentos skills update);skill_search_communityanswers with aninstalled_matchblock naming what the local skill is missing, ahead of the catalog results; and theagentosskill documents both rules. skill_view(name="agentos", section="Skills")resolves. The material sat under bold labels, whichparse_sectionsdoes not index. The six operation groups under Common operations are real headings now, so each can be read on its own.
Added
- Seven GMGN trading skills ship bundled under the new Trading category on the Skills page:
gmgn-token,gmgn-market,gmgn-portfolio,gmgn-track,gmgn-holder-analysis(read-only) plusgmgn-swapandgmgn-cooking(financial execution,risk: high). They are vendored from https://github.com/GMGNAI/gmgn-skills under MIT and drive the third-partygmgn-clinpm package, which AgentOS does not redistribute: each declaresrequires.bins: [gmgn-cli]andrequires.env: GMGN_API_KEY, so they list as "Needs setup" with annpm install -g gmgn-clihint until an operator installs the CLI and supplies their own key. Gated out of the model prompt until then, exactly likesenior-unilp-manager.
Changed
pip install use-agent-osno longer resolves dependencies open-ended. Bounds now cover the rest of the base runtime list and the consumer-facing extras, completing the first seven caps from 2026.7.30. Each cap sits at the first release its upstream may break in, measured fromuv.lock: the next major for a>=1.0project, and the next minor for a0.xone, where semver puts the breaking change. That distinction is load-bearing —typer<1.0against a locked 0.24.1 reads as bounded and is not, andweasyprint<70.0against a locked 68.1 was already letting an untested 69.0 into fresh installs. Bounds are targeted rather than blanket:structlogandhtml2textare CalVer, andpyyaml/jinja2/cachetoolsand peers have long-stable surfaces, so capping those would only make AgentOS harder to co-install. The rule and its exemptions are written down in CONTRIBUTING.md and enforced bytests/test_packaging/test_pyproject_invariants.py, which recomputes both boundaries from the lockfile — so a new dependency cannot ship unbounded, and a cap cannot drift off the rule, by accident.devstays uncapped. (#153)
Security
- Durable memory redaction moves onto the shared scanner. It ran its own three-pattern list, so anything that list missed was written to disk verbatim.
redact_memory_textnow goes throughredact_sensitive_text— the full provider-prefix set — and does so withforce=True, becauseAGENTOS_REDACT_SECRETS=0is an egress escape hatch and must not unmask what lands in durable storage. The keyword rule (api_key,secret,token,password) handles quoted values and leaves already-masked text alone instead of double-redacting it. The shared scanner also learned the remaining AWS key-id prefixes (ASIAtemporary credentials,ABIA,ACCA) and now matchesAuthorizationandx-api-key-family headers when the name or value is quoted — the JSON and dict spellings a tool result actually arrives in, which the barename: valuepatterns walked past.
Full changelog: v2026.8.2.post1...v2026.8.3