v3.3.3 Luxor
Released: 2026-09-05
Summary
What began as a two-fix patch grew into a delivery-integrity release. The
agent-to-agent mailbox no longer replays an already-delivered message, knows
which session it is talking to without guessing, tells you which architect sent
a held message and why it is held, and finds the composer reliably on every
supported harness. Cloud access to Tower through the tunnel works again.
Around that core: the dashboard's held-mail counter opens into a real list,
consult can review merged PRs, non-GitHub forges can open pull requests (with
a working Gitea preset), image generation gains an alternative provider, the
VS Code issue preview grows a metadata block, and the Stream Deck review
dials stop pretending phases without a finished diff are reviewable.
The mailbox never re-sends a message it already wrote (#1584, PR #1585)
3.3.2 added delivery verification: after writing a message to a terminal, the
write edge checks that the message actually appeared on screen before reporting
it delivered. When that check failed on a message whose write had in fact
completed — easy on a busy screen, since a recipient responding to the message
keeps the screen scrolling — the row was held and re-delivered, and each
redelivery failed verification the same way. One message could be re-injected
into the recipient's prompt dozens of times, byte-identical, forcing a response
loop. The write edge now records a completed write durably as the point of no
return: such a row is never written again. If verification still cannot confirm
it, the message surfaces to the owner as unverified instead of looping.
Regression window: 3.3.2 only.
Tunnel-borne requests authenticate to Tower again (#1586, PR #1588)
Since the 3.3.1 security hardening, every non-public Tower route requires the
shared local key, and Tower checks the Host header on arriving requests.
Requests proxied in through the Codev Cloud tunnel carried neither, so browsing
a Tower via cloud.codevos.ai failed even with a healthy tunnel. The tunnel
client now stamps both onto tunnel-borne requests before handing them to Tower
(failing closed when no key is available), restoring the cloud dashboard and
workspace browsing end to end.
Sessions are identified by what actually runs in them (#1475, PR #1511)
Tower used to infer which agent a terminal session belongs to from the launch
command it recorded at spawn time. When that inference misread a session (an
environment-variable prefix on the command was enough), messages a builder sent
to its architect fell back to the default architect instead: in live use, six
consecutive updates from one builder landed on the wrong seat in a single day.
The terminal process itself now reports what it actually spawned during its
handshake, Tower persists that as the authoritative identity, and routing reads
through to it on every access. Inference survives only as a fallback for
sessions predating the upgrade.
Held messages say who sent them and why they are held (#1478, #1479, #1482, PRs #1486, #1604)
Three quality-of-life fixes to the same surface:
- A held or delivered message now records which architect sent it. The inbox
showsarchitect:maininstead of a barearchitect, the recipient's
message header names the sender, and the inbox FROM and TO columns size to
their content instead of truncating. - A hold now carries its reason as a sub-code everywhere it surfaces (
afx inbox,afx send, the dashboard, the VS Code toast). "A human is typing in
that composer" and "the composer could not be verified at all" were
previously the same word: busy. The first clears itself; the second never
does. They now read differently, and the starvation notice no longer
suggests interrupting a person who is mid-draft. - The database migrates automatically on first start after upgrading.
Composer detection works on every supported harness (#1474, PR #1491)
The render gate decides whether a recipient's composer is free before writing
into it. On one supported harness its prompt marker matched any line beginning
with > , which routinely matched quoted text, menu selection cursors, and
dialog options, and missed the bare > prompt entirely. Delivery could stall
or misfire depending on what happened to be on screen. The marker is now
anchored to the cursor row and the harness's prompt color palette, measured
against real captured screens.
The dashboard's held-mail counter opens the list (#1450, PR #1510)
The "N held" counter in the dashboard header was inert text; finding out what
was held meant switching to a terminal for afx inbox. It is now a button
that opens a panel listing each held message: sender to recipient, age, and
the why-held reason, matching the metadata-only redaction rules the inbox
already enforces.
Consult reviews merged PRs (#759, PR #1619)
The forge PR search called the GitHub and GitLab CLIs with their default
state filter, which is open-only, so consult --type pr stopped finding a PR
the moment it merged. The search now spans all states. This removes one of
the roots of the "consult cannot review merged PRs" class of failures.
Non-GitHub forges can open pull requests (#1455, PR #1458; #1137, PR #1146)
Two community contributions:
- PR creation is now a forge concept routed through the same dispatcher as
every other forge operation, instead of shelling out to the GitHub CLI
unconditionally. Projects on other forges get PR creation through their
configured provider, andcodev doctorvalidates the concept like any
other. (@pseudoseed) - The Gitea preset was authored against Gitea's REST API shapes but executed
through theteaCLI, whose output differs; it had never run end to end.
Its read concepts now route throughtea apiand return the shapes the
forge contract expects, verified against a real Gitea instance.
(@pseudoseed)
Image generation gains an Atlas Cloud provider (PR #1618)
codev generate-image previously required a Google AI Studio key. It can now
run the same model through Atlas Cloud with --provider atlas; the default
provider and its behavior are unchanged. Unsupported flag combinations fail
loudly with a pointer to the provider that supports them rather than
degrading silently. Contributed by @binyangzhu000-sudo.
VS Code polish
- Issue preview shows author, date, labels, assignees, and milestone (#1592, PR #1616). The in-editor issue view now renders a metadata block under the title, omitting any line whose data the forge does not supply. The forge issue-view concept and the shared issue contract gained the same five optional fields, so every forge preset degrades gracefully.
- Restored issue previews recover instead of sticking on "Content unavailable" (#1592, PR #1616). A preview tab restored on launch before Tower connected now refreshes once the connection is up.
- The escalation toast's memory is bounded (#1472, PR #1484). The dedupe set behind the mailbox escalation toast grew for the extension host's lifetime; it now evicts when a workspace's escalations clear, with a hard cap as backstop.
Stream Deck: review dials tell the truth (#1606, PR #1607)
The Review: Files and Review: Changes dials silently did nothing for BUGFIX
builders during their whole working life and for AIR builders in the pr phase,
because dial mode was resolved from a phase vocabulary written for SPIR and
PIR. Dials now go to diff mode exactly when a finished diff exists to review
(the pr phase), and every work-in-progress phase shows an honest "No review
target" label instead of a dead control. Ships with the next batched Elgato
Marketplace submission.
Breaking changes
None. The global database migrates automatically on first start after
upgrading.
Install
npm install -g @cluesmith/codev@3.3.3
afx tower stop && afx tower startThe VS Code extension ships separately via the Marketplace — Codev extension
by cluesmith.codev, version 3.3.3.
Contributors
- Mohid Makhdoomi (@mohidmakhdoomi) — the delivery-integrity core of this
release: authoritative session identity (PR #1511), hold reasons and sender
attribution (PRs #1604, #1486), composer detection anchoring (PR #1491), the
clickable held-mail counter (PR #1510), and the bounded escalation toast
(PR #1484), plus test-infrastructure hardening (PRs #1485, #1487) — building
on his 3.3.2 serializer work at the terminal write edge. - M Waleed Kadous (@waleedkadous) — delivery integrity and cloud access:
the mailbox replay fix (PR #1585), tunnel authentication (PR #1588), and
consult-on-merged-PRs (PR #1619). - Amr Elsayed (@amrmelsayed) — release hardening, live verification, and
the review surfaces: test-harness sandboxing, remote-shell polish, docs
corrections (PRs #1591, #1598, #1600), the VS Code issue-preview metadata
block and restored-preview recovery (PR #1616), the Stream Deck review-dial
truth fix (PR #1607), the live cloud-path verification, and the
field-verification campaign on the delivery stack (#1564). - @pseudoseed — community contributions: the pr-create forge concept
(PR #1458) and the working Gitea preset (PR #1146). - @binyangzhu000-sudo — community contribution: the Atlas Cloud
generate-image provider (PR #1618). - Builders working under the BUGFIX, AIR, and PIR protocols across the PRs
above.