epic: Cortex v0.9.0 — stable local tool for coding agents
@esnible is already working on this.
Since Sep 10, 2026.
Assessment
This issue has not been assessed yet.
Description
Goal
Ship Cortex v0.9.0 by 2026-09-30 as a tool our own team runs every day alongside their
coding agent. This is an internal release: the bar is stability and daily usability, not
market positioning.
Our current product priority is observability — token usage, cost, latency, and what the
agent actually sent. Cost reduction (tool-definition pruning) ships and stays supported, but
the release is judged on whether the numbers Cortex shows are correct, complete, and still
there tomorrow.
Exit bar
The release ships when all five hold:
- Install works cold.
curl | sh→abctl observe→claudesucceeds from a clean
machine on macOS arm64, macOS amd64, Linux amd64, Linux arm64. macOS is the primary
workstation target — the others must work, but macOS is what most of the team runs. - Cortex is invisible to everything else. With the service running and the CA trusted,
git,gh,ssh,curland ordinary shell scripts behave exactly as they do without it. - The numbers are right and they persist. A full session shows correct token counts
(input / cache-read / cache-write / output), cost, and latency; the data survives
abctl service restart. - No known P0 bugs. #926 and #912 are closed with regression tests.
- A new user can self-serve. Someone who has not used Cortex before installs it on a stock
macOS workstation following the docs alone — no tribal knowledge, nobody to ask — and can
then say what Cortex is for, what the numbers mean, and why it is worth leaving running. The
install is easy to follow, not merely possible. Documentation covers installing, using it
day to day, interpreting the results, and the value the tool brings. Verified by at least one
person outside the team who has not installed it before.
Non-goals
Tracked separately, deliberately out of this release:
- Runtime-extensible / no-PR plugin model (#721)
- Enterprise dashboard (#872)
- Identity, authz and platform work (#905, #758, #506, #508, #647, #658, #683, #681, #398, #341)
- Multi-user session correlation through Envoy/ext-proc (#182) — a Kubernetes concern, not
the laptop tool. Local session differentiation is #949 - Kubernetes-mode feature work: the sidecar / SPIRE / Keycloak paths keep working, they are
just not where the release effort goes
Release mechanics
Binaries jump from the v0.7.0-alpha.N series straight to v0.9.0 — there is no v0.8.0
binary. Every prior release was a GitHub pre-release; v0.9.0 is the first marked as a normal
release, which is also what makes install.sh pick it up by default.
- Confirm
release-binaries.yamlpublishesv0.9.0as non-prerelease / latest - Confirm
install.shwith no--refresolves tov0.9.0
Owners
| Area | Owner |
|---|---|
| macOS install, proxy bugs, metrics backend, persistence, refactor | @huang195 |
| Agent integrations, abctl / TUI, unattended workloads | @esnible |
| Session differentiation | @galmasi |
| Linux install, release smoke tests, reboot verification, CI | @Alan-Cha |
| Docs | @mrsabath |
Release-blocking — P0 (27)
Agent support
- #939 Agent integration contract — reusable detection, settings patching, revert
- #940 Claude Code — verify and harden the reference integration
- #941 OpenCode support
- #943 Bob support
Install & service lifecycle
- #944 Verified macOS install and launchd service lifecycle
- #945 Verified Linux install and systemd service lifecycle
- #964 Verify the installed service survives reboot on macOS and Linux
- #966 Minimize the desktop release artifact — fixed plugin set for desktop use
Not breaking the rest of the machine
- #946 git, gh and ssh keep working with Cortex running
- #947 Language toolchains and scripted HTTPS clients keep working
Session differentiation
- #949 Differentiate concurrent coding-agent sessions in abctl
Observability
- #950 Per-session and per-model token and cost aggregation
- #951 Latency metrics — time to first token, total response time, session percentiles
- #953 Metrics view in the abctl TUI
- #900 No token showing for requests in abctl
Persistence & configuration
- #901 Persist sessions — sqlite backend
- #954 Persistent user configuration for abctl
Unattended operation
- #955 Support unattended agent workloads — headless agent runs with no human present
TUI stabilization
- #870 Better user help for disappearing events
- #865 Sort events other than chronologically
Bugs
- #926 Early flush of leading thinking block → client stream-idle timeout
- #912 TLS bridge auto-skip → 10-minute intermittent CA failures
Release testing
- #956 Release smoke test on macOS CI runners
- #957 Release smoke test on Linux CI runners
Docs
- #959 First-run path — install to first useful reading (drafted in rossoctl/rossoctl#2551; pending v0.9.0 verification)
- #960 Troubleshooting guide for the laptop install (drafted in rossoctl/rossoctl#2551; pending v0.9.0 verification)
- #963 Explain what Cortex shows and why it is worth running — interpreting the metrics
and the value case
Stretch — P1 (13)
- #682 Refactor: separate proxy data-planes — merge cutoff 2026-09-19 (tracked here by
reference only: #682 is a native sub-issue of #2244epic: Cortex Phase 1, and GitHub
allows one parent) - #942 Codex support
- #952 Attribute tool-pruning savings — tokens and cost saved
- #961 Separate laptop docs from Kubernetes and platform docs (drafted in rossoctl/rossoctl#2551; pending v0.9.0 verification)
- #958 CI coverage gate for abctl and authbridge-proxy
- #898 Report statistics to a central collector
- #906 Better information for non-LLM/A2A/MCP traffic
- #724 Surfacing outbound pipeline denials
- #914
maketargets for building abctl and authbridge-proxy - #867 Explanation of
/(filter) function - #868 Slow down
y(yank) screen clearing - #844 Help Context Guru end users understand what it does
- #913
abctl exec— verify and close, appears already implemented
Post-v0.9.0 — brainstorm backlog (4)
From a team brainstorming session, September 2026. None of these are in scope for v0.9.0 and
none affect the exit bar — they are parked here so the ideas stay attached to the product rather
than getting lost, and they can be reparented once a routing epic exists. Each carries the
open questions the idea has not yet answered.
- #1022 URL-level egress visibility — show every external destination the agent reaches
(@maia-iyer). Builds on #906; enforcement counterpart is #724 - #1019 Transparent model and provider switching across a limit, price or policy boundary
(@rubambiza). The largest of the four; needs a provider wire-format abstraction - #1020 Route by task class — cheaper model when the prompt does not need an expensive one
(@galmasi) - #1021 Shadow a request against a second model to measure where the cheap model suffices —
and possibly a Cortex-native benchmark built from captured traffic (@aslom, @galmasi)
#1020 and #1021 both depend on the switching mechanism in #1019; #1021 is what would
supply the evidence for #1020's default routing table, and #1019/#1021 both need per-model
cost attribution from #950. #1021's captured-traffic benchmark also depends on #901 and needs a
redaction and consent story scoped before any corpus exists.
Critical paths
Two dependency chains, both spanning more than one owner. Neither parallelizes.
#939 agent contract ──┬── #940 Claude Code (reimplemented on it)
├── #941 OpenCode
├── #943 Bob
└── #942 Codex (P1)
#949 session identity ──┬── #950 token/cost aggregation ── #953 TUI metrics view
└── #955 unattended workloads
#949 is owned by @galmasi, #950 by @huang195, #953 and #955 by @esnible. The
session-identity schema needs agreeing in week one, not discovering in week three.
Risks
- 27 P0 items, three weeks, five people. Every P0 has an owner. Several are small, but
#939/#941/#943, #950/#951/#953, #944/#945 and #949 are not. - Exit criterion 5 lands last by construction. #963 explains what the metrics mean, so it
cannot be finished before #950/#951/#952 do, and the outside-reader verification cannot start
before #963. Whoever is going to read the docs cold should be lined up in advance, or the
criterion becomes a rubber stamp in the final days. - @esnible holds 10 of the 24 P0 items, spanning agent integrations and TUI stabilization —
two workstreams that do not interleave. The heaviest load in the plan. - #682 landing late. A proxy data-plane refactor merged in the final week is the single
biggest threat to the exit bar. Hard cutoff 2026-09-19; if it has not merged by then it
leaves the release. Its title is also stale — the shim-layer approach was rejected in favour
of in-process policy plus a thin interception front, so it needs rescoping either way. - All 7 remaining unowned issues are P1, so nothing unowned gates the release.
Open questions
- Owners for #898, #906, #724, #914, #867, #868, #844 (all P1)
- Confirm
v0.9.0publishes as non-prerelease soinstall.shdefaults to it - #943: Bob's wire format and settings location need capturing before implementation
Status — 2026-09-16 (progress reconciliation)
Checkbox state above reconciled against actual issue state. P0: 6 of 27 closed. The P0 and P1
counts are unchanged by the new Post-v0.9.0 — brainstorm backlog section (#1022, #1019, #1020,
#1021), which is deliberately outside the release scope and the exit bar.
- Closed since the epic was written: #966, #949, #900, #870 (P0); #906, #868, #914 (P1).
- Docs (#959, #960, #963, #961): the prose is written and merged in
rossoctl/rossoctl#2551, but the issues stay
open here. #959, #960 and #961 are drafted and checked in the list above; #963 stays open because the value
case still carries 5VERIFY v0.9.0markers and placeholder worked-example figures that depend
on the metrics work (#950/#951/#952) landing, and the outside-reader verification (exit
criterion 5) has not run. Additional docs shipped: the RossoCortex value rewrite
(rossoctl/rossoctl#2564) and three feedback
surfaces (cortex #975 abctl footer, #977 issue form + docs prompt). - Still open and load-bearing for the release: the metrics chain #950 → #951/#953 (plus #952
for pruning savings), install/lifecycle #944/#945/#946/#947, and the P0 bugs #926/#912.
- Dominant language
- Go
- Stars
- 13
- Forks
- 40
- Avg merge
- 12h 17m
- Merged PRs (30d)
- 156
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from rossoctl/cortex
-
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
-
nice to have
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
-
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
-
stale
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
-
enhancement
Difficulty 5/5 Over a week Newbie friendliness 35/100
Similar issues
-
kind/bug
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
kubernetes-sigs/prow#953 · 1 comment ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
caddyserver/caddy#8046 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 86/100
-
L1 recommended for recruits
Difficulty 2/5 1-3 hours Newbie friendliness 88/100
-
optimization optimization:agents-md-curator
Difficulty 2/5 1-3 hours Newbie friendliness 86/100
githubnext/gh-aw-cao#13143 ·