Changelog

What changes in Cardumen, release by release.

Every entry comes from the commits between two releases. New capabilities, fixes and improvements, dated and versioned, written for whoever installs them — not for whoever wrote them.

Each line carries the commit it came from, and its pull request when it had one. What only concerns the team — CI, plumbing, internal planning — never reaches this page: it is filtered by commit type and scope, not by memory.

v1.11.0

  • Commits 9b5c3dd5..31d7b18c

Auto picks the model with its own engine —cost, efficiency for the task and quota— and Jev chooses among the top candidates in about a second. Settings is reorganized into new panels, every session launches with a single task and a role, and launches stop producing empty sessions.

New

12
  • Auto

    Auto picks the model by cost, efficiency and quota

    #13167d893b5e

    Every model you can launch gets three 0–100 scores: price (using the reference price even on a subscription), efficiency for the task type from the Artificial Analysis indexes, and available quota. The mode —balanced, savings or quality— sets how much each one weighs. A model beaten by a newer one from its own family that is more capable and no more expensive stops competing. The catalog refreshes once a day; launching makes no network call for it.

  • Auto

    Jev classifies the task and chooses among the top candidates

    #1315cbe1cef8

    With the Jev engine on (the default), one short call classifies the task and chooses among the three best-scored candidates. It uses Cardumen's key, not yours, and every decision is recorded with its cost. If it does not answer in time, the launch continues with the locally computed order.

  • settings

    The model ranking is visible in Settings

    #13200eaf7828

    In Settings → "Agents & Auto", below the model the next launch will use, a table lists every candidate with its cost, efficiency and quota scores, the weights in use, and the ones that do not compete, with the reason.

  • settings

    "Agents & Auto" panel with a single switch

    #1296ad9bcad5

    Auto has one switch and one model blocklist, in a single panel. Settings that were repeated across screens are gone.

  • settings

    "Account & usage" and "License & updates" panels

    #1297ad699e68

    Account, usage, license and updates move to two panels of their own, in the new Settings design.

  • settings

    "Automation" panel with a single set of limits

    #1298ea4a126d

    Autonomous work and its limits —concurrent sessions, reviews, budget— are configured in a single panel.

  • sessions

    Every session launches as a minion or an orchestrator

    #13188da0cbb4

    When creating a worktree or a terminal you can set the role with --role; without it, a brief with a single deliverable is marked as a minion. Auto uses the role to choose weights: a small model is enough for a minion.

  • sessions

    One task per session, with a notice when it needs escalation

    #131730931b6e

    A brief with several deliverables warns before launching, and a session that cannot finish its task says so with needs_parent or blocked instead of improvising. The rule ships in the minion-task skill.

  • sessions

    Automatic handover when a session runs out of context or stalls

    #12856c578e87

    If a session runs out of context or stops making progress, Cardumen hands the work over to another one that continues from where it stopped.

  • worktrees

    New worktrees start with dependencies and a build cache

    #1280d2885e4f

    A freshly created worktree already has its dependencies installed and the build cache ready, including when created from the CLI.

  • sessions

    Launching classifies the brief and applies its workflow

    #12641758dd08

    On launch, Cardumen classifies the brief by what it asks and by the repository, and the session starts with the workflow and skills for that kind of work.

  • CLI

    CLI decisions use Cardumen's key

    #1327b7f99f8f

    The CLI decision engine no longer reads your OPENROUTER_API_KEY: it calls the Cardumen API with your license, under the same monthly budget and usage record.

Fixed

15
  • agents

    OpenCode receives the brief, or the launch says so

    #1342f9df9aaa

    With OpenCode 1.19 the brief could fail to arrive and the session stayed on the start screen while the command answered "ok". It now waits long enough and, if the brief does not show on screen, the launch fails with agent_launch_not_live.

  • Auto

    A balance failure is confirmed with you before sidelining the agent

    #1338b875f4c0

    When a session ends with a balance or quota error, the notice asks you to confirm it. With cardumen agent balance --agent <id> --exhausted Auto leaves that agent out for 6 hours; with --available it keeps it and does not ask again in that window.

  • agents

    Codex no longer offers efforts the model rejects

    #13352975391c

    Auto could launch Codex with the minimal effort, which the provider rejects, and the session died on its first turn. Each model's effort list now matches the one Codex declares.

  • Auto

    Jev decisions arrive in time

    #1333231381b9

    The first decision after an idle period took too long and was lost. The service now stays warm and reuses its database connection: a full decision takes around one second.

  • Auto

    The cost of every Jev decision is recorded

    #13360346f596

    Usage was stored with zero cost and the monthly cap was never consumed. The real cost of each decision is now recorded.

  • settings

    The Model row lists each agent's real models

    #13115bb02b52

    In "Agents & Auto", the model picker shows the models each agent actually offers.

  • Arrecife

    Launching ties the session to its card, or says why it cannot

    #127768589907

    A session launched with an Arrecife card stays linked to it, including when the claim is in the agent owner's name; if linking fails, the reason appears in the result.

  • worktrees

    Verify's internal copies no longer show up as projects

    #1307548a350d

    The working copies verify creates are no longer listed as worktrees, and orphaned ones are removed at startup.

  • sessions

    Sessions without orphan processes and with truthful end notices

    #1273cb5f012a

    Closing a session also closes its processes, closed terminals do not come back, and the end-of-turn notice says what happened: a child process ending no longer counts as the session ending.

  • sessions

    A brief sent to a terminal is delivered, or you are told

    #12655752c84b

    Text sent to a new terminal reaches the agent or the command reports that it did not; terminal send no longer answers "not delivered" when it was delivered.

  • agents

    OpenCode no longer updates itself mid-session

    #1284026f2668

    OpenCode sessions start without self-update, a provider 429 does not stop the session, and the watchdog no longer leaves it without commands.

  • Auto

    The model you choose by hand reaches the agent

    #12627f7b6562

    A model given explicitly at launch is honored, and the launch receipt reflects the model actually used.

  • Auto

    Auto stops discarding models it can use

    #125411a37c8d

    The ranking flagged valid models as insufficient and did not rank those with unknown quota. Both cases now compete normally.

  • CLI

    Guards stop blocking legitimate work

    #126782a2477e

    The deletion and environment guards resolve the command's repository and no longer stop safe commands.

  • verification

    The full verify fits its budget

    #1289b402d0de

    verify --full finishes within its time budget, reports every failure reason in a single attempt and does not lose an interrupted run.

v1.10.1

  • Commits 925ec305..9b5c3dd5

Auto honors your excluded-models list, agent sessions stop stalling silently and «verify --full» is reliable again. Plus a search box in the OpenCode model picker.

New

1
  • desktop

    Search in the OpenCode model picker

    #1246c9a4ac3d

    In Settings → Agents, the OpenCode default-model picker filters as you type by name, id or provider («go glm» leaves only the opencode-go GLM models) and hides empty groups.

Fixed

6
  • verification

    «verify --full» runs the desktop tests related to the diff

    9b5c3dd5

    «cardumen verify --full» could go green without running the desktop tests. It now uses the file list verify.sh computes against the base and runs the related tests; it never skips the desktop silently.

  • verification

    «verify --full» is no longer rejected before it starts

    9e5d37c1

    The variable that marks full mode was not on the allowed-variables list, so the command was rejected in under a second. It is now accepted, with the values 0 and 1 only.

  • agents

    The settings skill includes the idle notice

    6ee8cd7b

    The settings map agents consult was regenerated to include the new session idle-notice setting.

  • agents

    Agent sessions stop stalling silently

    #12508aea34ed

    Hooks no longer cut the agent's turn (they become advisories unless the repository policy requires blocking). The orchestrator is notified when a session ends its turn or sits idle for 5 minutes. Launches check that the first message arrived and resend it if not. OpenCode sessions on models that degrade restart past 180,000 context tokens. Closing a worktree ends the processes Cardumen started inside it. Terminals keep their agent and model after an app restart.

  • Auto

    Auto honors your excluded-models list

    #1245b6dcca58

    With «Auto active» off, or when falling back to the default agent, Auto could launch a model you had excluded. The exclusion list now always applies: to the pick, to the fallback and to shadow mode.

  • license

    Updates no longer fail on heavy-usage accounts

    #12446c73c740

    The usage sum took longer than the server limit on accounts with a long history, and the update check returned an error. A new index brings it down to tenths of a second.

Improved

1
  • Auto

    The 1.10.0 changelog covers the calibrated Auto ranking

    #1243e6ae2870

    The public 1.10.0 entry includes the Artificial Analysis ranking calibration that lets Auto clear the quality floor.

v1.10.0

  • Commits cfec2565..925ec305

Hooks that never stall (SessionStart from 6–10 s to 0.5 s), verify that fails in seconds and queues itself, and an Auto router that sees the quota of every subscription and all 9 installed agents, compares models with the Artificial Analysis ranking, explains on every launch what it would pick and why, and lets you launch any agent by hand. «Auto active» ships off: turn it on in Settings → Agents when you want it to decide for you.

New

16
  • Auto

    Auto panel in Settings → Agents

    #1226a9ded50b

    Shows what Auto would pick now and why (each subscription's quota, model rankings and your settings), how it works, how often it would have chosen differently in shadow, and the «Auto active» switch to turn it on right there.

  • Auto

    Auto can apply its model and effort choice

    #12171b93c561

    With «Auto active» turned on in Settings → Auto, each launch uses the agent, model and effort the router picks; anything you request explicitly always wins and is recorded. It ships turned off.

  • Auto

    The router decides with real data

    #12149f7d51a0

    Auto resolves in the main process with each subscription's quota, model rankings, your mode, budget and exclusion settings, and the card's real task category.

  • Auto

    Every launch records what Auto would pick

    #1215c60a47a7

    Routing receipts store the router's decision next to what was launched, and cardumen route explain --shadow shows the differences so you can measure before turning it on.

  • desktop

    A notice when an agent is waiting for you

    #119858d63ab1

    When a session ends its turn with a question, its launcher gets «waiting for reply»; notices no longer repeat and say whether verify is queued or running.

  • verify

    Verify fails in seconds, not minutes

    #1178081ff38b

    Static and generated-artifact checks run before the suites. cardumen verify --fast returns that result in about 2 s without taking the verify slot, and a skills-only change no longer runs the full desktop suite.

  • verify

    PR verify queues itself on push

    #1177456a2f7f

    Cardumen queues the verify on push, waits until GitHub has the commit, defers dirty working trees and publishes the result saved per SHA. It can be turned off per project in Settings → Repository.

  • desktop

    PR auto-correction that keeps you informed

    #103718496d3d

    When a PR has failing checks or no verify, Cardumen queues verification or launches a managed corrector, notifies when it starts and finishes, and waits if a verify is already running.

  • graph

    Compact graph built on demand

    #107898b82c06

    graph.db is compacted, graphs of inactive repos are pruned, it is built only when needed and stale cache results are rejected.

  • Auto

    Auto picks models from a measured ranking

    #1122abfa05fd

    The Auto router ranks routes with Artificial Analysis signals and efficiency measured on real sessions, with a global ranking for paid plans.

  • Auto

    Models excluded from automatic selection

    #11240837e5f0

    Settings → Auto lets you exclude specific models so the router never picks them.

  • desktop

    Automatic handoff when quota runs out

    #1071cad6c88d

    When an agent runs out of quota, the router picks the handoff using remaining quota compared across providers, and OpenCode resumes the same session.

  • desktop

    A routing receipt for every session

    #10759c20cd4b

    Each session shows which agent, model and effort were chosen and the alternatives, and lets you override the choice and give feedback.

  • mcp

    Secrets requested outside the agent chat

    #11502f6f2dec

    secrets_request asks for the value through a link (URL-mode elicitation), so the secret never passes through the agent conversation.

  • security

    Protected merges need human approval

    #9901725f4c4

    Merging into a protected branch requires a person to approve it from the app; an agent cannot approve itself.

  • telemetry

    Anonymous statistics, off by default

    #109895d619c0

    Anonymous statistical reporting exists but ships turned off; it only runs if the user opts in.

Fixed

15
  • Auto

    The Artificial Analysis ranking finally counts

    #1242925ec305

    Artificial Analysis scores are compared against the best model of each index before applying the quality floor; before, no model cleared it and Auto always fell back to the default agent. The receipt shows the normalized and the original score.

  • Auto

    With Auto you can launch any agent

    #1232a658e419

    When the default agent is Auto, asking for a specific agent, model or effort is no longer blocked in the app, the CLI or the hooks. Only a fixed agent in Settings restricts it.

  • Auto

    The CLI decides with the same data as the app

    #1233a5cfbcbe

    CLI launches ask the main process for the decision: same quota, same base ranking and same settings. If something is missing, the receipt says what and for which agent.

  • Auto

    Quota from every subscription and detection of all 9 agents

    #1239ab0e50d3

    The router refreshes quota before deciding and reads it from every provider, not only Claude and Codex. The app finds Codex and OpenCode even when opened from the Dock.

  • license

    A device error no longer blocks the CLI

    #1237001b3ffb

    The app only marks the license as revoked when the server confirms it, like the CLI; a device mismatch or an invalid response no longer stops agents.

  • Auto

    Auto explains its choice and works from the CLI

    #122555d1f490

    «Auto will use» no longer comes from a fixed list but from the router, with agent, model, effort and reason. cardumen worktree create goes through the same router, records its shadow decision and can launch with Auto as the default agent.

  • verify

    Automatic verify no longer gets lost

    #1201fdaa4717

    Each queued commit is verified in a disposable checkout even if the agent switches branches; it also fires when the push comes before the PR, after a rebase, and without duplicate turns.

  • worktrees

    Creating a worktree from the CLI no longer launches an agent by itself

    #11907126d55b

    The runtime only launches the default agent when asked with --prompt or --work; --agent still launches the chosen one.

  • graph

    The graph can no longer freeze the machine

    #120609d0a1fe

    Only one graph build runs per machine at a time, and queries answer from the cache while it rebuilds in the background.

  • desktop

    Effort selector for Claude Haiku

    #11959ba44c21

    Haiku 5.5 reasons like the other Claude models and now shows its effort levels.

  • hooks

    Agents no longer ask permission to push their own branch

    #119222763c39

    They only ask for force pushes, protected or deploy branches and irreversible actions; pushing the working branch and opening the PR need no confirmation.

  • hooks

    Hooks no longer stall the session

    #117470cdccaa

    Every hook has a hard 4 s deadline and falls back to a neutral answer. SessionStart moves network, online license checks and coordination to the background: from 6–10 s to a measured 0.57 s.

  • runtime

    The daemon no longer dies with queued work

    #1162af1d9efd

    The coordination daemon keeps pending work, and the graph is sealed by content instead of size, which avoids needless rebuilds.

  • worktrees

    Creating a worktree no longer duplicates or launches agents

    #11543703aef6

    worktree create does not duplicate an existing worktree and only launches an agent when asked with --agent, --prompt or --work, which checks the card again.

  • hooks

    More precise safety guards

    #108259e99af5

    The session guard blocks environment stripping and secret dumps, and catastrophic-deny no longer blocks searches that merely mention destructive SQL.

Improved

5
  • hooks

    Far less context in every session

    #11637d170819

    Low-value hooks are off by default. Session start context drops from 11.4 KB to 1.6 KB and per-prompt context from 2.9 KB to 0.5 KB.

  • agents

    Compact agent instructions

    #11655aff6605

    The repo AGENTS.md goes from 37.8 KB to 1.9 KB, below the size at which Codex silently truncated it, and the cardumen init template shrinks too.

  • verify

    A new commit cancels the previous verify

    #11765fa22b94

    When a newer HEAD arrives, the running verify of the previous one stops instead of finishing for nothing, and the queue history is kept.

  • verify

    A flaky test no longer sinks the verify

    #1123b0d769b5

    Going over the wall-clock budget is a warning, not a failure. A failing Vitest file is retried once in isolation and, if it passes, is recorded as flaky in the receipt.

  • interface

    English interface by default

    #1058481903fc

    The app starts in English and migrates users who had the system language set, so nobody switches language by accident.

v1.9.23

  • Commits bce88683..59b29c16

Local verify fits in 10 min and does not reap queued turns; graph ensure no longer indexes HOME; Arrecife identities per install; Auto resolves real hosts; child-session notices drain on their own.

Fixed

15
  • desktop

    The installer retries its own identity if ps is slow

    45a06637

    On macOS, ps with 1 s failed under verify --full and the hook lock was thrown away. It retries up to 3 times with 5 s. No invented identity: a live lock is not stolen.

  • quality

    The QA report wraps any bare URL when it is saved

    11d5442c

    write_qa_report covers criteria, notes, and console errors, not only two producers. A qa run or an older binary no longer breaks markdownlint MD034 in docs/evidence/.

  • verify

    Queued verify turns are no longer reaped for waiting

    5a4384f9

    A queued verify spends no CPU; the 10 min stall threshold no longer deletes it. Only pid and heartbeat count. After 10 min behind another, the turn stays and does not force a full rerun.

  • verify

    Local verify fits in 10 min, with shared Rust cache and explicit CI

    #97585f881c2

    sccache is shared across worktrees; what does not fit in 10 min (queue included) is delegated on the receipt, never green. --full remains the full net. A scripts-only package.json no longer scales to workspace.

  • graph

    Graph ensure rejects $HOME and does not duplicate the build per root

    #97007447382

    cardumen graph ensure on HOME hit 8 GB and swap. It now requires a git worktree, takes that root's lock, and exits if an ensure is already live. Desktop does not launch a detached ensure on HOME.

  • desktop

    The launcher notice rides the same session-ended event

    #973eaf46adf

    Closing the child fires the notice and the notification together. It no longer depends on another pane's status that sometimes never arrives.

  • hooks

    Process ownership no longer depends on the PTY sid

    #9718cdaf2fc

    Each OpenCode bash opens a new Unix session and the guard killed what the session itself spawned. cwd/worktree or the same OS session now wins. A heredoc that quotes kill does not count as a command.

  • quality

    The QA generator wraps URLs so markdownlint passes

    726ec7eb

    landed_url and the authenticated-screen criterion come out in backticks. A test fails if the generated report has a bare URL. Reports from #964 and #965 are covered at the source.

  • quality

    Evidence QA reports no longer leave bare URLs

    55bbe3b1

    The two reports that had broken --full on main are corrected and the generator stops emitting MD034. You no longer patch docs/evidence/ by hand on every UI PR.

  • Arrecife

    Agent identities are isolated per installation

    #96614bb9ccf

    Each desktop profile stores its own keys. Renew rotates only the requested agent. QA or a second userData does not stomp the keys of the app you actually use.

  • verify

    DATO_INERTE no longer blocks code that production actually uses

    #9699526d524

    Methods via this., parameters, obj.prop, and i18n copy no longer count as a dead binding. The waiver, if needed, is per name (allow-inert-binding:), not global.

  • desktop

    Auto picks the agent from detected hosts

    #965197dab8d

    The Auto pill resolves an installed, enabled host. A disabled agent is skipped; a launch with no host stays put instead of inventing Codex.

  • desktop

    Settings splits the Arrecife session from agent keys

    #964599bea3f

    Renew my session and Rotate this agent's key are different actions. You no longer rotate the human seat when you only wanted the minion's key.

  • desktop

    Queued child-session notices drain on their own

    #967ea0fe2f3

    The queue retries with backoff (2 s → 10 s) even if the launcher is not settled yet. A done without a final answer is still delivered, as (no final answer), instead of sleeping forever.

  • remote hosts

    Remote-host registration keeps the diagnostic

    #963c94591cc

    Account discovery and connect share the same runtime; registration does not wait on the relay being ready. You see why pairing failed, not a mute error.

Improved

2
  • verify

    The impact map ties hook identity to its related tests

    59b29c16

    Touching managed-hook-owner-identity.ts no longer fires the full desktop suite. It selects lock, Codex backfill, daemon, and the child-process boundary.

  • research

    The graph vs rg and repo-map bench is on record, with tokens, time, and cost

    #9772c24095a

    Ten tasks measure the graph against rg + repo-map: tokens, wall, RAM, and cost. Evidence lives in benchmarks/grafo-vs-repo-map/ so the debate is not from memory.

v1.9.21

  • Commits ed68b378..453e1485

Verify --full stops starving vitest beside Rust; launcher notices survive a stale handle; saved agent args are defaults; the merge guard resolves the PR repo.

Fixed

4
  • verify

    Verify --full caps vitest workers when it runs beside Rust

    1b25305f

    In --full desktop and nextest run in parallel; vitest no longer opens one worker per core. It exports VITEST_MAX_WORKERS to half unless you already set it. On an 18-core Mac the pool no longer dies on timeout.

  • desktop

    Launcher notices survive a stale handle

    #9530a46468a

    If the launcher handle no longer answers, the child-session notice is still stored. A missing probe does not swallow the notification.

  • desktop

    Saved agent args are defaults, not a hard override

    #952a162378c

    What stayed persisted in Settings fills the launch; an explicit arg from this session wins. It no longer rewrites the command you just asked for.

  • Cardumen

    The merge guard resolves the repository selector

    #951b6298aff

    The guard maps the selector to the PR's real repo. A merge with -R owner/repo anchors receipt and base there, not on the session cwd.

v1.9.22

  • Commits 1e4cbac7..f7a90235

Settings can send an agent to fix PR conflicts and checks; Arrecife MCP identities per agent; child-session notices without duplicates; verify protects the base and --scope pr reuses cache.

New

1
  • desktop

    Opt-in automatic correction of PR conflicts and checks

    #960b4f850e7

    In Settings you can ask an agent to resolve conflicts or red checks on the open PR. If no session is live, it launches the default agent; at the attempt cap it notifies the launcher and stops.

Fixed

4
  • verify

    Temporary base worktrees stay protected

    #959d24aa0bd

    Verify no longer lets another process delete or stomp the base worktree while it compares the delta. The receipt stays anchored to that base even if the original checkout moves.

  • desktop

    Child-session launcher notices are no longer duplicated

    #95813375080

    Each close sends one exact, unique notice. A stale handle or a second Stop does not fill the history with the same child session.

  • Arrecife

    Agent MCP wiring uses a key per identity

    #957efb1fe9d

    Each agent carries its CARDUMEN_ARRECIFE_<id>_KEY. MCP no longer shares the human token or another agent's key on the same host.

  • Arrecife

    Agent identities are persisted and can be checked

    #9553a5c7f3b

    Settings stores each identity's state and lets you check it against Arrecife. You see whether the key is still live before launch, not after MCP already refused.

Improved

1
  • verify

    Verify --scope pr scopes tests and reuses the base cache

    #961d4fa6003

    Desktop tests for a PR are chosen by impact and the comparable base is cached. A --scope pr no longer repeats the whole suite when the base did not change.

v1.9.20

  • Commits 91972def..bbde0526

Arrecife WIP and identities, launcher notice, one UI language, PR conflicts to the live agent; verify --full scopes desktop and Rust; pop-out window, Copilot cost, and repricing no longer kills deploy.

New

7
  • Arrecife

    Owner WIP shows agent keys

    #947e925d1e4

    The owner's WIP list includes the agent keys that hold the work. You stop matching the board and the terminal by hand to see who has it.

  • Cardumen

    Notifies the launcher when a child session ends

    #941480490cb

    When a session launched from another one ends, the launcher gets a notice (with history and a Settings policy). You no longer watch the child terminal blind.

  • desktop

    One interface language, without mixed fallback

    #9387fa7d900

    The desktop uses one whole language (English by default). You no longer see a screen half Spanish and half English because one key was missing.

  • desktop

    PR conflicts reach the live agent session

    #9401af41251

    If the PR collides, the agent that is working gets it in the terminal. It no longer finds out only after the merge is already red.

  • desktop

    Arrecife authorization progress is visible

    #937206f68a4

    Connecting Arrecife shows steps, not a mute spinner. You see whether it is on identity, token, or node, and where it stuck.

  • verify

    Verify can target one module in the monorepo

    61841318

    In a tree with several packages, verify runs the module you asked for instead of the whole net. The receipt names that cut.

  • desktop

    Arrecife agent identities can be delegated

    #9227de537ee

    Each agent starts with its native Arrecife identity, not the human's. MCP and WIP see the right actor.

Fixed

31
  • verify

    Verify --full measures against origin/main even if the host exports the file list

    #950bbde0526

    An empty CARDUMEN_VERIFY_FILES list is no longer read as a clean branch. --full still measures the delta against origin/main and does not fire the whole desktop+workspace.

  • verify

    The semaphore test stops the process group, not an extra binary

    2226750b

    The holder runs in its own group and is cut with libc. CI does not depend on a tool the runner does not ship, and no orphan yes remains.

  • verify

    The semaphore test no longer leaks a yes that hangs verify --full

    2ae3c1d9

    Stopping the holder also kills the child yes. The stderr pipe closes and --full does not sit 3600 s waiting for EOF.

  • hooks

    The delivery-receipt check no longer duplicates the None branch

    f0d43ec3

    Clippy -D warnings no longer fails verify --full on if_same_then_else. The two None conditions join with ||; the receipt rule is unchanged.

  • desktop

    The Arrecife runtime no longer imports Electron

    14cc55ad

    Agent identities leave the runtime-electron ratchet. IPC opens links; the pure runtime does not pull in electron.

  • skills

    The Settings skill includes launcher notices

    b2594197

    After the launcher notice, the generated skill lists launcherNoticeHistory and the PR-conflict policy. Cmd+J and the sidebar can find them.

  • desktop

    Codex wires Arrecife MCP again

    #9487e180305

    Codex launch puts Arrecife MCP where the host reads it. It no longer starts without the Arrecife board or tools.

  • desktop

    Desktop timing tests are no longer flaky

    #946817fb9b6

    Clock-sensitive cases use fixed instants. A desktop verify no longer goes red because of a setTimeout.

  • hooks

    The guard detects protected git and in-place edits

    #945f2e0e5e0

    A hook sees whether the command touches a protected repo or rewrites the tree in place. The agent gets the block before it harms main.

  • hooks

    The merge guard gets an explicit repo

    #943cb6be088

    It no longer infers the repo from the session cwd. It anchors receipt and base on the PR repo being merged.

  • Arrecife

    Arrecife MCP no longer sends the retired profile query

    #942014168f2

    Arrecife ignores ?profile= since profiles were retired. Desktop and probe URLs stop adding it; the tool list follows the caller's authorization.

  • skills

    Skill coverage matches the canonical roots

    #93644f13bd6

    Agents read skills from the owning roots. An unowned provider copy is not published as the canonical catalog.

  • desktop

    The retired Meta model provider is gone

    #9351488f23e

    Settings and the session catalog no longer list Meta. An old default does not try a model the host does not serve.

  • Cardumen

    Retired Arrecife MCP hosts are migrated

    #93345216458

    On open, old host configs move to the current format. An agent does not start pointing at an endpoint that no longer exists.

  • desktop

    Quota launch options use the Cardumen org

    #93497c7e753

    The quota picker no longer mixes in an Arrecife org. You launch with the Cardumen seat cap.

  • desktop

    Worktree create degrades if Arrecife cannot claim

    #9314adcf650

    If the claim fails, the worktree is still created and the error lands on the receipt. The tree is not thrown away for an Arrecife 403.

  • hooks

    The guard tells shell reads apart from disk changes

    #93096a10807

    A cat or a git log does not trip the same block as a redirect to a file. The inner loop lets inspection through and cuts mutation.

  • Arrecife

    Agent MCP defaults to the all profile

    #9293d12c6ee

    If a profile is still needed, the default is all. A new agent does not start with an empty tool cut.

  • desktop

    Linux systemd can hand off the update

    #924163dc235

    Serve under systemd no longer cuts the update halfway. After install, the unit gets the handoff and the new binary is in service.

  • core

    Agent browser operations go through the embedded browser

    #92760426322

    Browser tools do not open a loose Chrome. They go to Cardumen's embedded browser, with the same session and the same isolation.

  • Arrecife

    The agent MCP probe fails closed on a fake identity

    #9284f8595ad

    PASS requires a real agent_ id, not the words kind/actorId from the prompt. A lying green probe no longer slips through.

  • Arrecife

    Agent MCP host formats are aligned

    #926fff13408

    Claude, Codex, Cursor, and OpenCode get the same shape. A probe does not clobber foreign config entries while migrating.

  • desktop

    Arrecife agent home and environment stay separate

    #925ef0a2070

    Keys live under desktop state, not a HOME mixed with the human's. The process environment does not inherit secrets from another seat.

  • desktop

    Foreign Arrecife MCP entries are kept

    #923e998a8d1

    When rewriting the agent MCP, entries that are not Cardumen's stay. A server you added by hand does not vanish on the next launch.

  • desktop

    The floating window can leave the app and come back

    #918c4d23324

    Pop out opens a native window of its own with the same tabs and PTYs. Coming back hooks them into Cardumen chrome again.

  • telemetry

    Copilot cost is read from session-store.db

    #91969b19b53

    Cardumen reads assistant_usage_events read-only and queues usage so the server can estimate cost from the catalog. Copilot no longer goes missing from spend.

  • deploy

    Release checks Docker and cargo-xwin before it starts

    #92162079d32

    If the target includes linux, docker info must answer; if it includes windows, cargo-xwin must exist. 1.9.19 does not fail again 33 min into Linux.

  • desktop

    There is a QA channel; pnpm run dev refuses inside agent sessions

    #92094b5291e

    dev:qa uses its own userData and bundle id, without the CLI front door. An agent cannot raise the dev profile and stomp your app.

  • graph

    The task map covers briefs without a file or symbol

    #9172a2ed0db

    graph query search looks up a substring in graph.db and the map uses the brief's words. A product brief no longer comes out empty.

  • graph

    Graph A/B measures Claude from its transcript and checks the map

    #9161ea0c4e1

    With Claude it counts tool_use from the transcript, not a weak proxy. A/B fails if the map was not actually injected.

  • SQL

    Repricing leaves the 2026-09-26 price migration

    #91474576599

    The migration only inserts rates. Historical repricing goes in a separate job, so deploy does not die on statement_timeout like 1.9.19.

Improved

4
  • verify

    Verify --full scopes Rust to touched crates; --all keeps the workspace

    86e84af8

    The long pole of --full is no longer cargo test --workspace. It measures crates plus direct dependents against origin/main. --all remains the full net.

  • verify

    Verify --full runs only impacted desktop tests; --all keeps the suite

    a03b084e

    The ~64k desktop tests were 85% of --full wall clock. It now selects by diff from origin/main. --all keeps the whole suite.

  • evidence

    Live Arrecife and Cardumen API integration probes are on record

    55a9a5f3

    The integration probe against the local stack is documented with HTTP 200 on both boundaries. Anyone touching identities has the evidence.

  • memory

    The 2026-09-29 owner decisions are on record

    #93927edb50e

    The orchestrator reports ready PRs and the owner merges; integration is proven on the local stack; UI in one language, English by default. It is written down.

v1.9.19

  • Commits 98b59ee6..b65ec469

Graph epic (graph.db, task map, MCP query), one-door gates, shared org profile, usage quotas, new public home, and a large batch of desktop, verify, and C.R.E.A. fixes.

New

26
  • version

    The CLI shows the channel version, not Cargo's

    6e0a8b39

    cardumen --version uses CARDUMEN_DISPLAY_VERSION and, when set, CARDUMEN_BUILD_LABEL. It tells develop apart from a real release.

  • daemon

    The packaged daemon on macOS waits longer to boot

    c51741a7

    The macOS boot timeout rises so native modules can load. Packaged-daemon verify no longer fails on a cold start.

  • Settings

    Settings can turn on result-spec mode

    6670a821

    There is an enabled flag in settings for result-spec mode. You turn it on from Settings, not by editing JSON by hand.

  • gates

    One door: notices, deadlines, and one kill-switch

    #8330aa66efd

    Gates, githooks, and the inner loop go through one emitter with a notice and ops-log. Merge and deadlines stop being one-off rules.

  • Cardumen

    Inner gates ease off for the single door

    #8312984e984

    The first third of one door eases result-spec, Stop, and the inner loop into notice mode. Hard blocking stays on the shared door.

  • CLI

    task check-verify warns before you run verify

    #813273e297b

    cardumen task check-verify is the preflight: you see whether the contract and scope close before spending a semaphore turn.

  • org

    Desktop sees the org workspace root the CLI declares

    #80555484e3b

    The workspace-root fact comes from the CLI and Settings reads it from the active worktree. They no longer diverge.

  • CLI

    The CLI diagnoses incomplete organization roots

    #8032dd65677

    Cardumen names what is missing in the org profile (root, plan, seat) instead of a generic error. Setup aims at the real gap.

  • desktop

    Launch declares which agent account was selected

    #800f426d036

    The account preference rides into the receipt and the agent process. It no longer starts with a different identity than the one you saw in Settings.

  • verify

    Verify credits the session delta against the base

    #775f792239c

    The receipt compares what this session broke against origin/develop. An inherited red does not fail the work you actually fixed.

  • CLI

    Organization profile status lives in one place

    #799d350d650

    CLI and desktop read the same org diagnostic. You no longer get a green pane and a red CLI for the same seat.

  • CLI

    A direct UI QA runner from the CLI

    #79082915828

    Cardumen launches visual QA without a side harness. The report keeps locale and comes out clean to attach to the card.

  • C.R.E.A.

    C.R.E.A. records spec amendments on the linked card

    #791603c6050

    If the contract changes and passes validation, it lands on the Arrecife card. The successor sees the live spec, not the one from start.

  • skills

    The canonical skills catalog is reconciled across agents

    #785faa7f8ff

    One catalog feeds Claude, Codex, Cursor, and OpenCode. A skill no longer exists on one host and is missing on another.

  • landing

    The landing replaces intro and solution visuals

    #724b135c891

    Intro and the solution block use new pieces. Plans, checkout, and analytics stay where they were.

  • Cardumen

    Alerts when a license heartbeat goes dead

    #7378e7204fe

    If the node stops beating, there is an alert. You do not discover a dead seat only after a launch already failed.

  • API

    Usage reports the identity crosswalk explicitly

    #735520394fe

    The usage API names how person, seat, and provider cross. It no longer infers an id from another field.

  • quality

    There are quality rollups per tenant

    #694fef7acc3

    Quality aggregates per organization, not only per repo. The board sees the whole tenant.

  • Cardumen

    Sessions get domain-scoped Arrecife skills

    #6937d1f080c

    On start, the card's domain skills come in, not the whole catalog. Less noise, same contract.

  • brain

    SessionStart serves cached org memory

    #691892b5e01

    Cached organization memory is injected when the session opens. It does not wait for a fresh pull when the cache is valid.

  • usage

    Usage quotas per provider and per team

    #6817bf149ab

    There is a cap per provider and per team; if the quota cannot be read, launch fails closed. You pick the quota at start.

  • Grow 360

    There are organization team rollups

    #6889ee20c4c

    Grow 360 aggregates per team, not only per person. The project rollup reaches people who are actually on those teams.

  • API

    The API lists tenant brain items

    #6890fe0cbe9

    There is a brain-item list scoped to the tenant. One customer does not see another's brain.

  • usage

    Impact metrics are declared as evidence

    #6800caa2270

    Usage declares the impact metric with evidence, not a loose number. You can audit where it came from.

  • CLI

    A launch flag to turn computer-use off

    #690b63f17a4

    The launch flag leaves the session without computer-use. Opt-in per session, not a silent default.

  • landing

    New public home without breaking plans or checkout

    #6494eaf6dda

    Cristobal's home lands on develop. Pricing, checkout, and analytics stay; only the public face changes.

Fixed

166
  • graph

    Update acceptance report for epic with new metrics and task-map failure

    2640b4c2

    Update acceptance report for epic with new metrics and task-map failure. The case is covered in the binary; it does not depend on a clean worktree.

  • CI parity

    Declarar perl en BINARY_ALLOWLIST

    #911b69533c8

    Declarar perl en BINARY_ALLOWLIST. If it came back every session, it is now closed for good.

  • desktop

    Marcar el agente que espera un comando que ya no existe

    #9109af3692e

    Marcar el agente que espera un comando que ya no existe. The symptom no longer shows up on the happy path.

  • verify

    La línea base no espera el cerrojo de caché de su padre

    #90979fcaae6

    La línea base no espera el cerrojo de caché de su padre. A new agent no longer trips on this edge.

  • graph

    Mapa de tarea con fichero:línea y firma, una sola vez

    #905c0d0323d

    Mapa de tarea con fichero:línea y firma, una sola vez. The next run does not inherit the failure.

  • core

    Toda espera de cerrojo de fichero con tope y error claro

    #9069db0c18a

    Toda espera de cerrojo de fichero con tope y error claro. The receipt and the UI match this fix.

  • graph

    Fijar que el grafo rematerializado desde graph.db equivale al build completo

    #90723eec2f4

    Fijar que el grafo rematerializado desde graph.db equivale al build completo. Anyone hitting this no longer needs a local patch.

  • desktop

    OpenCode sin --variant no soportado y sin encargo tecleado en la shell

    #902161792ff

    OpenCode sin --variant no soportado y sin encargo tecleado en la shell. After install, the flow continues without a bypass or an odd flag.

  • graph

    El brain rollup lee el resumen desde graph.db, no graph.json

    #903fcd9f361

    El brain rollup lee el resumen desde graph.db, no graph.json. The case is covered in the binary; it does not depend on a clean worktree.

  • graph

    Expose graph_query MCP to every launched host

    #90475464c61

    Expose graph_query MCP to every launched host. If it came back every session, it is now closed for good.

  • graph

    Automatizar el A/B del grafo con agente real

    #9012bb943b6

    Automatizar el A/B del grafo con agente real. The symptom no longer shows up on the happy path.

  • desktop

    Pulir cabecera y orden del mapa de tarea

    #8998b981af5

    Pulir cabecera y orden del mapa de tarea. A new agent no longer trips on this edge.

  • graph

    Add epic acceptance check

    #898b068a63a

    Add epic acceptance check. The next run does not inherit the failure.

  • graph

    Isolate shared graph from worktree refresh

    #89523f510f5

    Isolate shared graph from worktree refresh. The receipt and the UI match this fix.

  • core

    Safely prune legacy worktree states

    #897bcf536ee

    Safely prune legacy worktree states. Anyone hitting this no longer needs a local patch.

  • graph

    Prioritize code edges in neighborhoods

    #896ecc7ac49

    Prioritize code edges in neighborhoods. After install, the flow continues without a bypass or an odd flag.

  • desktop

    Resolve task maps from repo graph

    #894f4c5b47d

    Resolve task maps from repo graph. The case is covered in the binary; it does not depend on a clean worktree.

  • guards

    Serialize global git test state

    #89089596ef8

    Serialize global git test state. If it came back every session, it is now closed for good.

  • verify

    Make full scope run complete suites

    #89270c62625

    Make full scope run complete suites. The symptom no longer shows up on the happy path.

  • gates

    Complete hard-set regression coverage

    #8915253410c

    Complete hard-set regression coverage. A new agent no longer trips on this edge.

  • mobile

    Stabilize Android audio focus lifecycle

    #8896b168102

    Stabilize Android audio focus lifecycle. The next run does not inherit the failure.

  • desktop

    Stabilize flaky updater tests

    #885118038d5

    Stabilize flaky updater tests. The receipt and the UI match this fix.

  • desktop

    Keep RPC creates alive past socket idle

    #884241b9857

    Keep RPC creates alive past socket idle. Anyone hitting this no longer needs a local patch.

  • automations

    Rebind local imports

    #882aed6356e

    Rebind local imports. After install, the flow continues without a bypass or an odd flag.

  • desktop

    Record effective agent credential source

    #881d2c88207

    Record effective agent credential source. The case is covered in the binary; it does not depend on a clean worktree.

  • desktop

    Preserve agent presence during slow startup

    #88042656bc6

    Preserve agent presence during slow startup. If it came back every session, it is now closed for good.

  • automations

    Refresh runs after manual dispatch

    #879053a42d2

    Refresh runs after manual dispatch. The symptom no longer shows up on the happy path.

  • desktop

    Toggle explorer folders instantly

    #8774e3b6d0e

    Toggle explorer folders instantly. A new agent no longer trips on this edge.

  • desktop

    Allow multiline proxy bypass rules

    #8786fdaf10b

    Allow multiline proxy bypass rules. The next run does not inherit the failure.

  • sidebar

    Stabilize worktree scroll, keyboard navigation, and pinned host labels

    #8742574299a

    Stabilize worktree scroll, keyboard navigation, and pinned host labels. The receipt and the UI match this fix.

  • desktop

    Preserve markdown scroll after image layout

    #87644ad0613

    Preserve markdown scroll after image layout. Anyone hitting this no longer needs a local patch.

  • source control

    Keep narrow sidebar content readable

    #8759082ebd7

    Keep narrow sidebar content readable. After install, the flow continues without a bypass or an odd flag.

  • desktop

    Let terminal themes override imported colors

    #873a16f205a

    Let terminal themes override imported colors. The case is covered in the binary; it does not depend on a clean worktree.

  • editor

    Restore readonly preview behavior

    #872227c5639

    Restore readonly preview behavior. If it came back every session, it is now closed for good.

  • Cardumen

    Stabilize new workspace project selector and Create more

    #8714d718200

    Stabilize new workspace project selector and Create more. The symptom no longer shows up on the happy path.

  • desktop

    Stabilize flaky scheduling tests

    #8708aab0533

    Stabilize flaky scheduling tests. A new agent no longer trips on this edge.

  • desktop

    Avoid duplicate project groups during refresh

    #8691b4644fc

    Avoid duplicate project groups during refresh. The next run does not inherit the failure.

  • tabs

    Cancel drag gestures on window blur

    #868ed58d334

    Cancel drag gestures on window blur. The receipt and the UI match this fix.

  • terminal

    Preserve idle Linux IME direct commits

    #86740d88a9f

    Preserve idle Linux IME direct commits. Anyone hitting this no longer needs a local patch.

  • desktop

    Coalesce advertised URL port scans

    #8667cacf272

    Coalesce advertised URL port scans. After install, the flow continues without a bypass or an odd flag.

  • verify

    Pipe macOS ps CPU output

    #86422d2c07a

    Pipe macOS ps CPU output. The case is covered in the binary; it does not depend on a clean worktree.

  • desktop

    Type partial ssh2 mock default

    #8656c60db68

    Type partial ssh2 mock default. If it came back every session, it is now closed for good.

  • desktop

    Evict stale runtime skill discovery cache

    #863035a5c20

    Evict stale runtime skill discovery cache. The symptom no longer shows up on the happy path.

  • desktop

    Skip empty hidden restore frames

    #862b16934d0

    Skip empty hidden restore frames. A new agent no longer trips on this edge.

  • desktop

    Route runtime-owned SSH image pastes

    #8616d5a7195

    Route runtime-owned SSH image pastes. The next run does not inherit the failure.

  • desktop

    Release browser results and fence guest registration

    #8590836366c

    Release browser results and fence guest registration. The receipt and the UI match this fix.

  • desktop

    Release parked terminal scroll intents

    #858c212eab2

    Release parked terminal scroll intents. Anyone hitting this no longer needs a local patch.

  • desktop

    Preserve ssh2 utils in host key wiring mock

    #860ac08e2f1

    Preserve ssh2 utils in host key wiring mock. After install, the flow continues without a bypass or an odd flag.

  • desktop

    Prevent false remote terminal closures

    #857408579d9

    Prevent false remote terminal closures. The case is covered in the binary; it does not depend on a clean worktree.

  • desktop

    Honor SSH stream metadata callback in provider mocks

    #856ea06633f

    Honor SSH stream metadata callback in provider mocks. If it came back every session, it is now closed for good.

  • desktop

    Detach aborted auth filesystem waits

    #854a14ffdc1

    Detach aborted auth filesystem waits. The symptom no longer shows up on the happy path.

  • desktop

    Regenerate bundled skill catalog

    #85552a5e07f

    Regenerate bundled skill catalog. A new agent no longer trips on this edge.

  • desktop

    Unwrap Electron IPC handler errors

    #8537918c193

    Unwrap Electron IPC handler errors. The next run does not inherit the failure.

  • hooks

    Mark Cardumen-launched Copilot sessions

    #8523ae96c65

    Mark Cardumen-launched Copilot sessions. The receipt and the UI match this fix.

  • desktop

    Preserve crash breadcrumb lifecycle trail

    #851759262ab

    Preserve crash breadcrumb lifecycle trail. Anyone hitting this no longer needs a local patch.

  • daemon

    Avoid invalid snapshot scans and PTY claims

    #85014922b26

    Avoid invalid snapshot scans and PTY claims. After install, the flow continues without a bypass or an odd flag.

  • browser

    Bound CDP output backpressure

    #846a590a1d1

    Bound CDP output backpressure. The case is covered in the binary; it does not depend on a clean worktree.

  • desktop

    Optimize terminal PTY hot path

    #847fb73aac6

    Optimize terminal PTY hot path. If it came back every session, it is now closed for good.

  • Grow 360

    Route Carnada through Arrecife

    #841fd3e4d86

    Route Carnada through Arrecife. The symptom no longer shows up on the happy path.

  • desktop

    Handle Unicode-normalized filesystem roots

    #842b3823879

    Handle Unicode-normalized filesystem roots. A new agent no longer trips on this edge.

  • native chat

    Reject unlisted launch default models

    #843069dac15

    Reject unlisted launch default models. The next run does not inherit the failure.

  • desktop

    Release consumed runtime and SSH queue entries

    #84891ab3129

    Release consumed runtime and SSH queue entries. The receipt and the UI match this fix.

  • mobile

    Prevent markdown stalls and timestamp drift

    #845bbfd3bea

    Prevent markdown stalls and timestamp drift. Anyone hitting this no longer needs a local patch.

  • desktop

    Bound worker archive lines linearly

    #844f72c2f07

    Bound worker archive lines linearly. After install, the flow continues without a bypass or an odd flag.

  • graph

    Query SQLite projection directly

    #839c3773783

    Query SQLite projection directly. The case is covered in the binary; it does not depend on a clean worktree.

  • hooks

    Allow policy guard when Cardumen is disabled

    #8374652235b

    Allow policy guard when Cardumen is disabled. If it came back every session, it is now closed for good.

  • desktop

    Resolve macOS CLI shim bundle executable

    #838bad74589

    Resolve macOS CLI shim bundle executable. The symptom no longer shows up on the happy path.

  • hooks

    Unify exit code handling for hooks

    2354650c

    Unify exit code handling for hooks. A new agent no longer trips on this edge.

  • hooks

    Enhance global hook directory resolution and legacy guard handling

    c5544d64

    Enhance global hook directory resolution and legacy guard handling. The next run does not inherit the failure.

  • usage

    Bigint telemetry accumulators and new official list prices

    #834ea2a50f1

    Usage accumulators move to bigint. GPT-6 and Claude 5 list prices land; the xAI price is current without dragging fork brand names.

  • hooks

    Unify managed tool-call hooks

    #832e56fc303

    Unify managed tool-call hooks. Anyone hitting this no longer needs a local patch.

  • hooks

    Unificar identidad de sesión Copilot en gate, task y verify

    #8303f84e437

    Unificar identidad de sesión Copilot en gate, task y verify. After install, the flow continues without a bypass or an odd flag.

  • backoffice

    Resolve org external ids for scoped usage

    #82901d8438b

    Resolve org external ids for scoped usage. The case is covered in the binary; it does not depend on a clean worktree.

  • backoffice

    Align Stripe fake with product retrieval

    #828a82367a2

    Align Stripe fake with product retrieval. If it came back every session, it is now closed for good.

  • desktop

    Keep Vitest module cache out of tmpfs

    #8244aed115c

    Keep Vitest module cache out of tmpfs. The symptom no longer shows up on the happy path.

  • Cardumen

    Route org profile tests through path helper

    #825fbc23a7d

    Route org profile tests through path helper. A new agent no longer trips on this edge.

  • minions

    Inject card contracts and scope skills by role

    #816185f054e

    Inject card contracts and scope skills by role. The next run does not inherit the failure.

  • MCP

    Export registry to all supported agents

    #8141d88e0cd

    Export registry to all supported agents. The receipt and the UI match this fix.

  • Cardumen

    Retry macOS Electron dependency downloads

    #819d93976eb

    Retry macOS Electron dependency downloads. Anyone hitting this no longer needs a local patch.

  • desktop

    Clean Vitest temporary user data

    #811c7714547

    Clean Vitest temporary user data. After install, the flow continues without a bypass or an odd flag.

  • guards

    Adopt attribution from dead sessions

    #817a6911b66

    Adopt attribution from dead sessions. The case is covered in the binary; it does not depend on a clean worktree.

  • Cardumen

    Validate result spec verification surfaces

    #815a3e39f89

    Validate result spec verification surfaces. If it came back every session, it is now closed for good.

  • CLI

    Warn when registered desktop lags

    #8121556dcdc

    Warn when registered desktop lags. The symptom no longer shows up on the happy path.

  • Cardumen

    Restore quick-checks on develop

    #810c6bc4a3a

    Restore quick-checks on develop. A new agent no longer trips on this edge.

  • Cardumen

    Arreglos del modo fast (hook de Stop, gate de entrega, borrado de planes, perfil de org)

    #820fcdb83b1

    Arreglos del modo fast (hook de Stop, gate de entrega, borrado de planes, perfil de org). The next run does not inherit the failure.

  • install

    Onboard organization licenses

    #798679bd002

    Onboard organization licenses. The receipt and the UI match this fix.

  • quality

    Use canonical QA report path in tests

    #796e30ca4d7

    Use canonical QA report path in tests. Anyone hitting this no longer needs a local patch.

  • desktop

    Keep QA Arrecife actions inside card

    #7976968d8f5

    Keep QA Arrecife actions inside card. After install, the flow continues without a bypass or an odd flag.

  • desktop

    Create SSH project setup with worktree

    #794deaf312e

    Create SSH project setup with worktree. The case is covered in the binary; it does not depend on a clean worktree.

  • core

    Remove needless borrows in skill installer

    #792b6de99f5

    Remove needless borrows in skill installer. If it came back every session, it is now closed for good.

  • landing

    Restore quick-checks on develop

    #786c40fad55

    Restore quick-checks on develop. The symptom no longer shows up on the happy path.

  • C.R.E.A.

    Offer linked card remedy and flag gate loops

    #7823d556e4f

    Offer linked card remedy and flag gate loops. A new agent no longer trips on this edge.

  • core

    Resolve skill home through paths boundary

    #7843be3003d

    Resolve skill home through paths boundary. The next run does not inherit the failure.

  • desktop

    Guide unregistered device setup

    #783733b5766

    Guide unregistered device setup. The receipt and the UI match this fix.

  • checkup

    Inspect wired hook shims

    #778c87f0d51

    Inspect wired hook shims. Anyone hitting this no longer needs a local patch.

  • memory

    Persist session notes outside worktree

    #7771bec1be9

    Persist session notes outside worktree. After install, the flow continues without a bypass or an odd flag.

  • llama.cpp

    Normalize streamed tool arguments

    #7740b9aeb6a

    Normalize streamed tool arguments. The case is covered in the binary; it does not depend on a clean worktree.

  • C.R.E.A.

    List accepted verify forms for unresolved targets

    #769e29685b1

    List accepted verify forms for unresolved targets. If it came back every session, it is now closed for good.

  • router

    Preserve managed llama context when profile is missing

    #76741873ee0

    Preserve managed llama context when profile is missing. The symptom no longer shows up on the happy path.

  • desktop

    Retry transient macOS release failures

    #766bc586d9e

    Retry transient macOS release failures. A new agent no longer trips on this edge.

  • C.R.E.A.

    Coteja verificación con alcance declarado

    #764f3cbc446

    Coteja verificación con alcance declarado. The next run does not inherit the failure.

  • task

    Preserve atomic quick validation test

    #7614988f75e

    Preserve atomic quick validation test. The receipt and the UI match this fix.

  • C.R.E.A.

    Validate resultSpec verification commands

    #75530c16d5f

    Validate resultSpec verification commands. Anyone hitting this no longer needs a local patch.

  • quality

    Require repository evidence before insufficient info

    #757c4e2e0bc

    Require repository evidence before insufficient info. After install, the flow continues without a bypass or an odd flag.

  • Cardumen

    Honor configured default agent in worktree create

    #7273891fbb3

    Honor configured default agent in worktree create. The case is covered in the binary; it does not depend on a clean worktree.

  • CLI

    Detect queued session input

    #754e7d03ed6

    Detect queued session input. If it came back every session, it is now closed for good.

  • deploy

    Disable AWS CLI pager

    #73816a73b7a

    Disable AWS CLI pager. The symptom no longer shows up on the happy path.

  • Cardumen

    Deduplicate cardumen desktop fixture path

    #7514be98565

    Deduplicate cardumen desktop fixture path. A new agent no longer trips on this edge.

  • Cardumen

    Enforce pinned pnpm for workspace installs

    #746c2c96472

    Enforce pinned pnpm for workspace installs. The next run does not inherit the failure.

  • quality

    Read v2 targets in status

    #748a2821fa4

    Read v2 targets in status. The receipt and the UI match this fix.

  • desktop

    Catch undeclared test-source dependencies

    #7471c07dc6c

    Catch undeclared test-source dependencies. Anyone hitting this no longer needs a local patch.

  • C.R.E.A.

    Cotejar resultSpec al cerrar

    #74108b89701

    Cotejar resultSpec al cerrar. After install, the flow continues without a bypass or an odd flag.

  • usage

    Distinguish unreported Cursor usage

    #74473c18828

    Distinguish unreported Cursor usage. The case is covered in the binary; it does not depend on a clean worktree.

  • desktop

    Answer Claude trust on worktree launch

    #74327966767

    Answer Claude trust on worktree launch. If it came back every session, it is now closed for good.

  • desktop

    Identify blocked Codex startup dialogs

    #732662038b6

    Identify blocked Codex startup dialogs. The symptom no longer shows up on the happy path.

  • desktop

    Confirm text-only terminal delivery

    #7287c7a77c7

    Confirm text-only terminal delivery. A new agent no longer trips on this edge.

  • desktop

    Keep worktree removal working when the cleanup CLI is missing

    #731e5a6c087

    Keep worktree removal working when the cleanup CLI is missing. The next run does not inherit the failure.

  • Cardumen

    Fail Cargo verification when no tests run

    #7300c61f862

    Fail Cargo verification when no tests run. The receipt and the UI match this fix.

  • desktop

    Isolate relay harness from AWS deps

    #7236708b3ff

    Isolate relay harness from AWS deps. Anyone hitting this no longer needs a local patch.

  • runtime

    Publish QA report atomically

    #726fd703cc5

    Publish QA report atomically. After install, the flow continues without a bypass or an odd flag.

  • Cardumen

    Limpia estado huérfano de proyectos

    #7215afa5ab9

    Limpia estado huérfano de proyectos. The case is covered in the binary; it does not depend on a clean worktree.

  • desktop

    Release reentrancy slots after exceptions

    #720d123f551

    Release reentrancy slots after exceptions. If it came back every session, it is now closed for good.

  • Cardumen

    Unblock C.R.E.A. result spec gate

    #71571ed6e4f

    Unblock C.R.E.A. result spec gate. The symptom no longer shows up on the happy path.

  • Cardumen

    Confirm brain rollups before dedupe

    #717dd3e8bbf

    Confirm brain rollups before dedupe. A new agent no longer trips on this edge.

  • git hook

    Use canonical disabled marker path

    #718981b4831

    Use canonical disabled marker path. The next run does not inherit the failure.

  • desktop

    Detect incomplete worktree setup

    #70315e9fcae

    Detect incomplete worktree setup. The receipt and the UI match this fix.

  • orchestrator

    Scope scratchpad exception to host session

    #7124dc8f522

    Scope scratchpad exception to host session. Anyone hitting this no longer needs a local patch.

  • Cardumen

    Classify baseline verify failures at stop

    #714a27a443d

    Classify baseline verify failures at stop. After install, the flow continues without a bypass or an odd flag.

  • verify

    Release stalled semaphore turns

    #7081eeb2ce2

    Release stalled semaphore turns. The case is covered in the binary; it does not depend on a clean worktree.

  • verify

    Stabilize Rust scope gate test

    #711f7da2c43

    Stabilize Rust scope gate test. If it came back every session, it is now closed for good.

  • Cardumen

    Respect disabled switch in pre-push

    #707215d21c6

    Respect disabled switch in pre-push. The symptom no longer shows up on the happy path.

  • Cardumen

    Share cardumen kill switch across worktrees

    #70501793258

    Share cardumen kill switch across worktrees. A new agent no longer trips on this edge.

  • CLI

    Route Codex models through Codex auth

    #701f07d26ec

    Route Codex models through Codex auth. The next run does not inherit the failure.

  • desktop

    Declare tinyglobby for census tests

    #7002761c68d

    Declare tinyglobby for census tests. The receipt and the UI match this fix.

  • Cardumen

    Fold team project aliases to canonical keys

    #682cbc5e0aa

    Fold team project aliases to canonical keys. Anyone hitting this no longer needs a local patch.

  • desktop

    Derive terminal dialog guard from screen

    #69857a0b011

    Derive terminal dialog guard from screen. After install, the flow continues without a bypass or an odd flag.

  • CLI

    Recover stale graph probe after merges

    #69944528bbc

    Recover stale graph probe after merges. The case is covered in the binary; it does not depend on a clean worktree.

  • CLI

    Remove needless borrows in worktree test

    #697ae3b68f0

    Remove needless borrows in worktree test. If it came back every session, it is now closed for good.

  • C.R.E.A.

    Fail closed on cargo metadata output errors

    #6954bfc2471

    Fail closed on cargo metadata output errors. The symptom no longer shows up on the happy path.

  • Cardumen

    Preserve prompt on worktree first run

    #696f278f234

    Preserve prompt on worktree first run. A new agent no longer trips on this edge.

  • desktop

    Deliver stalled worker signals to coordinator

    #6851ef9400b

    Deliver stalled worker signals to coordinator. The next run does not inherit the failure.

  • autopilot

    Persist crash status and report sessions

    #68451cf9cba

    Persist crash status and report sessions. The receipt and the UI match this fix.

  • desktop

    Guard OpenCode sends from shell fallback

    #67888a0f4c4

    Guard OpenCode sends from shell fallback. Anyone hitting this no longer needs a local patch.

  • Cardumen

    Reclaim idle verify semaphore turns

    #674f7a7010e

    Reclaim idle verify semaphore turns. After install, the flow continues without a bypass or an odd flag.

  • Cardumen

    Make computer-use opt-in per session

    #67745fb4631

    Make computer-use opt-in per session. The case is covered in the binary; it does not depend on a clean worktree.

  • Cardumen

    Supervise autopilot worker failures

    #679db866f8c

    Supervise autopilot worker failures. If it came back every session, it is now closed for good.

  • Cardumen

    Clean temp files left by tests

    #66937cf3a71

    Clean temp files left by tests. The symptom no longer shows up on the happy path.

  • hooks

    Read merge verify receipt from PR worktree

    #676e93555eb

    Read merge verify receipt from PR worktree. A new agent no longer trips on this edge.

  • hooks

    Keep RESULT_SPEC remedies unblocked

    #6738c8bca85

    Keep RESULT_SPEC remedies unblocked. The next run does not inherit the failure.

  • desktop

    Make folder repo upgrade polling deterministic

    #672661ab2f3

    Make folder repo upgrade polling deterministic. The receipt and the UI match this fix.

  • orchestrator

    Respects the orchestrator scratchpad and heredocs

    #66874e6d777

    The orchestrator does not clobber the session scratchpad or heredoc blocks. Working material stays where the host left it.

  • verify

    Cap session verification runtime

    #671a6f9c4e6

    Cap session verification runtime. After install, the flow continues without a bypass or an odd flag.

  • router

    Keep execution refactors out of plan mode

    #663d1e19028

    Keep execution refactors out of plan mode. The case is covered in the binary; it does not depend on a clean worktree.

  • guards

    Protect cross-session processes and repo state

    #6662c0bd3d4

    Protect cross-session processes and repo state. If it came back every session, it is now closed for good.

  • Cardumen

    Align pnpm and bootstrap desktop tests in worktrees

    #667ad407cce

    Align pnpm and bootstrap desktop tests in worktrees. The symptom no longer shows up on the happy path.

  • desktop

    Keep OpenCode prompts out of argv

    #66503aab55d

    Keep OpenCode prompts out of argv. A new agent no longer trips on this edge.

  • C.R.E.A.

    Reconcile orphan task contracts

    #664b39dd434

    Reconcile orphan task contracts. The next run does not inherit the failure.

  • Cardumen

    Allow focused local package test commands

    #66287c7e19a

    Allow focused local package test commands. The receipt and the UI match this fix.

  • worktrees

    Ignore disposable build output on removal

    #65718c3eb96

    Ignore disposable build output on removal. Anyone hitting this no longer needs a local patch.

  • Cardumen

    Seal baseline-only verify receipts

    #661669d3823

    Seal baseline-only verify receipts. After install, the flow continues without a bypass or an odd flag.

  • Cardumen

    Isolate visual QA browser sessions

    #660660f07a6

    Isolate visual QA browser sessions. The case is covered in the binary; it does not depend on a clean worktree.

  • desktop

    Rollback failed terminal creates

    #65995701863

    Rollback failed terminal creates. If it came back every session, it is now closed for good.

  • hooks

    El guard de gh pr merge resuelve repo, base y recibo desde la PR

    #65549f5e2ab

    El guard de gh pr merge resuelve repo, base y recibo desde la PR. The symptom no longer shows up on the happy path.

  • OpenCode

    Run hooks asynchronously and cap stop retries

    #656193973ad

    Run hooks asynchronously and cap stop retries. A new agent no longer trips on this edge.

  • desktop

    La sección de MCPs abre aunque un servidor no tenga headers ni env

    #65332a026e8

    La sección de MCPs abre aunque un servidor no tenga headers ni env. The next run does not inherit the failure.

  • CLI

    Isolate test git commands from inherited repositories

    #65445566649

    Isolate test git commands from inherited repositories. The receipt and the UI match this fix.

Improved

11
  • graph

    The graph epic acceptance report is green again

    #912938e918e

    The task-map FAILs were pnpm/corepack, not the code. The report is 7/7 again and restores the agent A/B.

  • graph

    Task-map A/B evidence and the graph day's notes are on record

    #908191f19bc

    The report includes measurement with and without the map, plus 2026-09-27 notes. Anyone picking up the graph does not start from zero.

  • telemetry

    How to measure Copilot's local persistence is on record

    #82687b3b2c5

    The telemetry guide documents which local file counts and how not to mix it with inventory. Fewer false positives.

  • quality

    Model-selector viewport evidence is on record

    #8219224ba38

    QA leaves selector shots at real widths. A Settings change can be checked without reopening the visual debate.

  • Cardumen

    The OpenCode account-selection request is on record

    #807fb3267e4

    The note describes what OpenCode must declare when picking an account. Launch can require the flag without guessing the host.

  • quality

    The org-root warning after the fix is captured

    #8060e0c6316

    QA documents the post-fix state of the workspace-root warning. A bug that is gone does not get reopened.

  • Cardumen

    Organization-profile end-to-end evidence is on record

    #80462021c65

    The org-profile flow is captured end to end. A regress shows up in the evidence, not in production.

  • Cardumen

    Org workspace-root warning evidence is on record

    #802ac2d600e

    Before the fix, the warning was photographed. It is the baseline so we do not return to the broken state.

  • desktop

    The isolated desktop-dev QA recipe is on record

    #789012c9e4a

    How to run desktop QA without touching the real profile. Evidence included so the pass can be repeated.

  • Cardumen

    Why the macOS runner keychain password changes is on record

    #7883382c033

    The note explains the runner signing symptom and what not to touch. Less time lost on the same CI error.

  • Cardumen

    The Settings skill names the correct MCP list command

    #683b0949a28

    The documented verb matches cardumen mcp list. It no longer points at a subcommand that does not exist.

v1.9.17

  • Commits 61522538..1aed5725

One MCP registry, user or project, exported to each agent; Settings discovers live session models; one Arrecife session across surfaces; faster verify --full; Linux systemd can update; quit no longer relaunches LaunchAgent.

New

2
  • MCP

    One MCP registry, user or project, for each agent

    #64755dacc96

    Settings and cardumen mcp keep one canonical registry (user or project) and export it to Claude, Codex, Cursor, and OpenCode grammar. stdio, HTTP, and SSE; credentials stay in the host store.

  • desktop

    Settings discovers each agent's live session models

    #646d40ce54a

    Claude, Codex, OpenCode, and Pi/Antigravity no longer depend only on seeds. The session-defaults editor lists what the agent actually has now.

Fixed

6
  • desktop

    Desktop gates that broke develop pass again

    #651c3b56b1d

    After four merges, typecheck and cross-cutting tests are green: MCP search registered, update handoff typed, live Codex inventory as source. Develop is no longer red from PR collisions.

  • desktop

    One Arrecife session shared across every surface

    #64811899890

    Connect, brain, artifacts, WIP, and worktree claims use the same session. You stop signing in twice for the same account; Settings shows one connection state.

  • updater

    Linux systemd installs can update the desktop

    #645c5f2fefa

    Serve under systemd no longer blocks the update as unsupported-headless-serve. After install, it restarts the unit. cardumen version --check no longer says up to date when the desktop does not declare a version.

  • verify

    Verify runs rust and desktop by impact, gates in parallel

    #64453a247ea

    The impact map feeds import-graph; rust only touches dependent crates; gates run in parallel. Less waiting without cutting coverage.

  • desktop

    A clean quit no longer relaunches LaunchAgent

    #643fac553a2

    Serve stays headless and stops from the menu bar. A real quit unloads the agent; it no longer comes back on its own after you close the window.

  • verify

    Verify --full aims at five minutes when warm

    #642ea935e8f

    Loud impact selector, rust by touched crates, no duplicated suites, coord timeout. The 5 min cap warns on the receipt; it only blocks when you ask.

v1.9.18

  • Commits d15ac156..836c9a14

`cardumen mcp set-enabled` now wants true or false by hand; it no longer turns a server on because clap treated the bool as a flag.

Fixed

1
  • CLI

    mcp set-enabled takes true or false by hand

    #652eac71b3d

    cardumen mcp set-enabled docs false now parses the bool as a value, not a flag. Without true/false the command fails instead of turning the server on by accident.

v1.9.16

  • Commits 9503f772..c0d31e8d

The task map reads the local graph; merge requires the PR receipt; OpenCode attributes edits and exports the session; brain shows the real blocker; MCP keeps your config; local verify matches CI.

New

1
  • evidence

    Verify accepts a concrete commit as the base

    6dacc324

    CARDUMEN_VERIFY_BASE and BASE_SHA now check that the ref exists in the repo. If the environment names a SHA that is missing, the committed diff does not break: it uses a base that is there.

Fixed

16
  • desktop

    Bash 5.3 no longer marks an extra command in the prompt

    #640c0d31e8d

    On bash 5.1+ each PROMPT_COMMAND piece runs on its own and the DEBUG trap fired an extra OSC 133 C marker. The wrapper now brackets the prompt with sentinels and the PTY stops painting ghost commands.

  • task map

    The task map reads the local graph before the CLI

    #628868fd0ce

    If cardumen graph query times out, the map now opens graph.json from the checkout. Empty sections are skipped; you see 'no matches' instead of four hollow blocks.

  • merge

    Merge looks at the receipt in the PR worktree

    #63807dae8be

    The guard no longer credits a green verify from the session directory. It anchors the receipt on the PR worktree (or the command's cd). The remedy is to rerun verify there, not a dangerous bypass.

  • OpenCode

    OpenCode attributes edited files to the session

    #629e6b6a84b

    Each edit lands in the session ledger (async hook, non-blocking). verify --scope session sees those files. If the host cannot attribute, Stop asks for --scope workspace instead of a waiver.

  • OpenCode

    OpenCode starts with less noise and async hooks

    #632e036cf42

    Startup context does not name .claude/ paths on hosts that are not Claude. Session-start and prompt-submit run in the background. /tmp, /dev and worktree state are preauthorized; .cardumen-out/ does not trip C.R.E.A.

  • desktop

    Desktop typecheck on develop passes again

    #6392781c4ef

    The session-card via union includes take, and the brain test no longer invents fields TypeScript rejected. Three errors that broke develop are closed.

  • graph

    The graph is reused across worktrees via overlay

    #63474a3b634

    If the cached graph is ahead of the worktree HEAD, ensure accepts it as overlay instead of failing. Several worktree create in parallel reuse the base graph under lock, via temp+rename.

  • brain

    Brain setup survives a missing notice channel

    #6379d238645

    BrainNodeSetup no longer blows up if readBrainSetupNudge is missing from preload. Optional-chain and catch: the wizard continues, and tests do not depend on a mock nobody had set.

  • brain

    A rollup stays visible to whoever publishes it

    #62424024a6c

    On publish, the project joins the pusher's teams. The CLI lists those teams and warns if the seat cannot see the rollup. brain resolve tells 'not visible' apart from 'missing'.

  • OpenCode

    OpenCode's shell exports the session id to the CLI

    #6365bf72da6

    export CARDUMEN_SESSION_ID prefixes every bash. task start/spec/verify stay bound to the session. Stop without attribution asks for --scope workspace and no longer offers a waiver.

  • minions

    The Codex roster honors CODEX_HOME

    #62382ce510f

    codex_roster_path() no longer looks only at ~/.codex. If CODEX_HOME points at another tree, minions routes with that roster. An empty HOME no longer hides the Codex you did configure.

  • brain

    Brain setup notifies on startup and surfaces errors

    #622d0f1f646

    If the seat profile is incomplete, the desktop shows the notice on open. The wizard includes connecting Arrecife; background node failures arrive over IPC instead of being swallowed.

  • brain

    Brain shows the real blocker and a setup button

    #62176971817

    There is no generic no_org_plan anymore: missing profile, root, or plan. The 'Complete brain setup' button runs the missing steps. You stop guessing why pull does not start.

  • MCP

    MCP export keeps your config and adds the local MCP

    #62004b3c650

    Claude, Cursor, and OpenCode merge only the MCP key; the rest of the JSON is kept. OpenCode uses ~/.config/opencode/opencode.json with its own grammar. Codex touches only the managed block. All four export cardumen mcp serve --stdio.

  • verify

    Local verify runs cargo test the same as CI

    234cdc88

    verify.sh passes --all-targets and --quiet to cargo test, like the CI job. A test that only lives outside tests/ is no longer green locally and red on GitHub.

  • CLI

    The binary version stays readable with ThinLTO

    14e562f4

    ThinLTO on macOS x86_64 ate the user-agent. There is a static marker and the deploy scripts extract the version again. An embedded changelog no longer counts as a fake version.

v1.9.15

  • Commits 844f9c2a..47b3aa40

If context runs out, the session leaves a handoff; there is autopilot, minion metrics, and a verify queue; C.R.E.A. flags a gate deadlock and `task quick` is atomic; verify isolates worktrees and stops hunting false stubs.

New

7
  • CLI

    Context handoff now carries real evidence

    e55979b7

    When context use crosses 80%, session-context-handoff.json includes the contract, touched files, findings, and the next step. The successor does not start blind.

  • CLI

    Session review flags a context-high handoff

    777e6238

    Session review shows context-high attention when the model nears the ceiling. It appears in the list; you do not guess why the session stopped.

  • CLI

    Context handoff is persisted in the worktree

    e97264bd

    On a context cut, Cardumen leaves the handoff JSON in the worktree and builds the next session's opening prompt. Finished work is not lost in the cut.

  • verify

    The verify queue can be queried

    051dc789

    cardumen verify queue-status (and --json) lists who waits, who runs, since when, and in which worktree. You no longer guess whether the semaphore is stuck.

  • CLI

    Minion metrics per session, model, and effort

    676d1813

    The CLI aggregates terminals with a foreground agent by effective model and effort. A shell does not count as a minion even if the runtime stamps defaults.

  • CLI

    Sessions autopilot: nudges without stepping on a live turn

    32ff60c5

    sessions autopilot looks every ~90 s and sends only if the terminal is still an agent, not Working or in background, and past cooldown. It uses cardumen terminal, not a side channel.

  • C.R.E.A.

    Flags a deadlock when the same gate blocks in a streak

    7902a542

    If a gate (e.g. result-spec) cuts several times in a row, session review and the terminal show gate-deadlock with the exact remedy. It no longer looks like a one-off block.

Fixed

33
  • CLI

    Handoff tests no longer leave inert bindings

    74846f6c

    The super helpers that were only assigned in tests were reshaped so verify does not flag them as dead API. Handoff behavior is unchanged for whoever uses it.

  • CLI

    The handoff artifact counts as a touched file

    a28a25af

    touched_files includes session-context-handoff.json. The next session sees the file in the inventory, not only the prompt.

  • CLI

    Context exhaustion leaves the session incomplete

    a6b2ed71

    If the model runs out of context, close does not fake a done. The state stays incomplete and the handoff is how you continue, not a silent success.

  • verify

    Verify isolates worktree and test environment

    883b1911

    Verify commands pin the worktree and do not inherit the host's global settings. A test or a launch does not pollute another checkout's queue or home.

  • verify

    An explicit --scope session on HEAD is preserved

    acba50aa

    verify.sh no longer widens a hand-requested --scope session on current HEAD to workspace. The cut you asked for is the one that runs.

  • verify

    Stub lint ignores function text inside fixtures

    6bda7bc7

    A string that looks like a function (in a test or an example) does not trip the detector. Only executable code in the hunk is scanned.

  • verify

    Session evidence looks at live content

    183dfe4e

    verify --scope session hashes the files the session touched in the live tree, not a stale snapshot. A reverted file no longer counts as green evidence.

  • verify

    The configured worktree is kept when a turn is acquired

    4c3088de

    When the semaphore is acquired, the worktree path you asked for is not replaced by the process cwd. Two checkouts no longer fight over the same turn.

  • verify

    The verify adapter gets the real worktree

    fb6e4ba1

    The binary passes the concrete checkout to the script, not a guessed one. A verify launched from another directory stays bound to that tree.

  • verify

    The semaphore stores the worktree path on the turn

    68c4db87

    turn-*.state records and the bash helper note the worktree. queue-status and a stuck turn name the right tree.

  • verify

    A function declaration is not an inert binding

    13c89adb

    The orphan-symbol detector no longer treats fn foo as a dead assignment. Session review can name helpers without failing verify.

  • verify

    An inert helper is gone and the probe fallback is stable

    63ebe112

    Session review no longer exposes a helper nobody called. The integration-probe fallback does not depend on that symbol.

  • CLI

    Session review passes the clippy that used to fail verify

    a0284439

    Small borrow fixes in sessions_review so clippy -D warnings does not leave review red in CI.

  • CLI

    Fewer inert-binding false positives in review and minions

    dfbeff62

    Minion aggregates and desktop review use the bindings. Verify stops flagging variables that are actually read in the output JSON.

  • verify

    The scoped verifier stays clean for the detector

    a41ff183

    Receipt and internal lints are reshaped so the verify crate does not report itself. A small --scope can actually be green.

  • verify

    Session scope is preserved when archiving

    f67552c9

    verify.sh does not drop --scope session when copying the tree into a probe archive. The cut reaches the child.

  • verify

    Stub scan skips the verifier's own implementation

    940f61e9

    The detector excludes itself more precisely. A linter return no longer looks like a productive stub.

  • verify

    Scoped delivery checks are ratcheted

    16bfd7c0

    A --scope session or delivery check does not require the full suite to go green. The receipt records what actually ran.

  • verify

    A probe archive does not trip false stub hits

    c2143763

    The scan ignores archive copies used by the probe. A temp tree does not inherit a stub red the origin does not have.

  • verify

    The integration probe uses the real cwd

    bd860acb

    integration-probe-gate.sh resolves the root from the directory it runs in, not from a baked-in path. In a linked worktree it aims at the right tree.

  • verify

    Scoped checks stay green inside the archive

    08b56693

    When verify runs on an archive, out-of-scope steps are not marked red. The probe does not widen the receipt with failures it did not ask for.

  • CLI

    Autopilot passes the clippy that kept it out

    3adbaf1c

    A targeted allow in sessions_autopilot so the crate builds with -D warnings. The pilot loop is unchanged.

  • CLI

    The verify baseline stays green

    06f12d76

    Two detector annotations avoid an inherited red when touching verify. Coverage does not drop; it avoids a false that was already on HEAD.

  • verify

    Accented prose is not treated as a binding

    289bb575

    Spanish words (función, sesión) in comments or strings no longer look like orphan identifiers. The detector wants a real symbol shape.

  • CLI

    Autopilot stays verifier-friendly

    276573d4

    The pilot avoids patterns stub-detect and clippy flag. It still reads cardumen terminal and respects Working/background/cooldown.

  • CLI

    Session review stays green for verify

    7e686e61

    A comparison in classify is adjusted so the crate does not fail the verify gate when review is touched. Attention rules are unchanged.

  • C.R.E.A.

    Remedies stay unblocked and task quick is atomic

    d9a27b08

    The sandbox message names the host remedy (Claude, Codex, Cursor). task quick does start+spec; if spec fails, it undoes start. No half contract remains.

  • CLI

    The background-task hold passes clippy

    816ffd16

    The text that names the background task is formatted without warnings. The hold still states handle, agent, and reason.

  • verify

    Desktop test budget does not escalate to workspace

    92340e6f

    Touching only the desktop test ceiling no longer fires the workspace suite. Verify stays in the desktop scope. A ratchet does not cost the full net.

  • verify

    An expected regression-probe receipt is accepted

    cbc368aa

    If the revert-the-diff probe is inconclusive or the expected outcome, the receipt does not go red. A fix that cannot be probed that way does not block the push.

  • verify

    Verify receipts are scoped per worktree

    f0d0e687

    Pre-push reads the receipt of the tree being pushed, not a neighbor. Two worktrees of the same repo no longer share a green that is not theirs.

  • verify

    Masked stub-marker literals are ignored

    19fd0ce3

    A string that quotes unknown or a stub marker, split or escaped, does not trip the detector. Only a constant return in new code does.

  • verify

    Verify fixtures survive a rebase

    6e53d496

    Baseline and runtime tests do not depend on SHAs or sizes a rebase moves. A replay on develop does not go red because of the fixture.

Improved

8
  • verify

    Environment isolation pitfalls are on record

    bb2ac7bb

    The auto-guard skill documents global settings, HOME, and worktree that leaked into verify. Anyone isolating a test has the list of what to pin.

  • verify

    The concurrent verify receipt workflow is on record

    0a37fedd

    The coordination skill explains the queue, turns, and that a receipt is per worktree. Two agents do not clobber each other's green if they respect the semaphore.

  • skills

    The scoped verify fallback is on record

    87a76719

    Terminal-runtime-safety documents when a --scope does not apply and what runs then. Fewer panic --full verifies.

  • skills

    The inert-binding parser pitfall is on record

    86b46527

    The same skill warns: declarations, prose, and strings are not bindings. Anyone touching verify does not reopen that false positive.

  • skills

    Worktree verify and autopilot safety are on record

    b1e74dae

    Do not point verify at a neighbor tree; the pilot does not send if Working or a background command is up. The skill makes that explicit.

  • orchestration

    Autopilot is documented as the orchestrator default

    fae3bef4

    The orchestration guide describes interval, cooldown, and the conditions for nudging a session. The pilot is no longer a hidden verb.

  • skills

    The delivery-receipt handoff is protected

    267a13dd

    Maintenance states: do not move or copy the receipt by hand between worktrees. The CLI owns it; a cp breaks the seal.

  • skills

    Impact-aware verify budgets are captured

    ff8981d4

    Maintenance documents when a desktop or test-ceiling change does not escalate to workspace. The cheap ratchet is the happy path.

v1.9.14

  • Commits 8128cb52..5ff2e907

Verify credits the delta on a base that was already red; merge requires a live receipt; stub lint looks only at the changed hunk; skills link on every detected agent; an unregistered remote machine can be paired from Settings.

Fixed

9
  • verify

    Credits the delta when the base was already red

    5cb5076a

    The receipt stores the steps that already failed on origin/develop. If this session added no new failures, pre-push and merge treat the receipt as green. An inherited red no longer blocks the work you actually fixed.

  • verify

    Also seals nested failures inside the receipt

    d150e5aa

    A script that fails inside (.cardumen/verify.sh and its steps) joins the baseline seal like a top-level step. The waiver no longer leaves a child red that pre-push counts again.

  • verify

    Ignores stub-shaped fixtures that live in quotes

    b1f89fa6

    The productive-stub detector does not flag a function that only appears inside a string (a fixture, an example). The lint looks at real code, not text a test quotes.

  • desktop

    Merge requires a verify receipt for this HEAD

    f7e052ff

    The guard asks cardumen verify receipt --json in the worktree; it does not invent the state path. Without a green receipt for the current SHA, the PR stays on hold. Same rule as pre-push.

  • verify

    A baseline waiver is sealed into the receipt

    82459ecc

    If waiver consult classifies the failure as baseline, the receipt records class, evidence, fingerprint, and steps. Pre-push reads that seal; a spoken pardon no longer opens the gate.

  • verify

    Stub lint looks only at the hunk you changed

    b0e1d707

    A stub that was already in the file does not fail verify because you edited another function. The detector uses the + lines of the diff. New hollow code is still caught.

  • skills

    The catalog is linked on every detected agent

    d648e16b

    reconcile copies the canonical catalog to Claude, Codex, Cursor, and OpenCode when those hosts are in the repo. A symlink that already points right is kept; a real folder is respected. Settings shows coverage per agent.

  • CLI

    Durable memory stays out of the delivery diff

    54f7a1e5

    cardumen memory add stores the learning in the home (~/.cardumen/memory/...), not in the checkout .nca/memory.json. Closing the task does not force personal notes into the PR.

  • desktop

    A discovered unregistered machine can be paired

    3aec1a25

    In Settings → remote control, Connect on an unregistered device calls pairAccountDevice and signs it up. You no longer hunt another screen to register what the list already saw.

Improved

4
  • verify

    The installed verifier boundary is on record

    966adba3

    The receipt-driven audit records which edge the bundled verifier covers and which it does not. Anyone designing a new gate does not rebuild what the binary already seals.

  • merge

    The merge-guard receipt rule is on record

    1f67e250

    The same audit now states: without a green receipt for this HEAD, merge holds. Desktop and pre-push share one owner (the CLI), not two filesystem reads.

  • verify

    The baseline-waiver receipt seal is on record

    871c1f68

    The audit describes the evidence, fingerprint, and steps the seal requires. A waiver without those fields does not count for a push.

  • skills

    Durable memory ownership is on record

    6e977614

    The maintenance skill makes it plain: durable notes live in the Cardumen home, not in the product diff. Fewer PRs carrying an agent's memory.json.

v1.9.13

  • Commits 84300287..c7bd039e

One MCP registry exports to the four agents and can be diagnosed; local llama.cpp and Claude usage counts on the session; merge holds if tests cross the ceiling; remote machines say when they are not registered.

New

2
  • MCP

    MCP registry: export, doctor, and a Settings pane

    1f726e29

    cardumen mcp export copies the registry into each agent's grammar; credentials stay in the host store. cardumen mcp doctor checks transport and scope. Settings gets the registry pane (one registry, four agents).

  • coord

    The orchestrator gets the session verdict

    d09b2711

    On stop or when approval is requested, the hook publishes the verdict (blocked, dead, command) on the coordination plane. The orchestrator no longer guesses: it waits for that event and acts on that session.

Fixed

18
  • merge

    The test-budget hold shows the real command

    68128908

    If the branch crosses the test ceiling, the hold message no longer escapes backticks. You read cardumen ratchet resolve and the origin (base already over, or this branch's tests).

  • router

    Router scoring no longer nests two ifs

    6217054e

    Clippy flagged an if inside another in scoring.rs. It is now one combined condition; lane scoring is unchanged, it just stops fighting the linter.

  • desktop

    Runtime registration no longer fails in silence

    ddd69a57

    If startup has no license, no network exposure, or the devices POST fails, the desktop stores the error code. It no longer looks registered when the signup never left the machine.

  • telemetry

    Non-unix telemetry fallback is declared

    dec857af

    On Windows or other hosts without Unix sockets, local llama.cpp telemetry support documents the alternate path. It no longer looks like an empty return with no reason.

  • telemetry

    The local model id is stored on the event

    ecf01638

    The identity of the model llama.cpp served (name and quantization) travels with the event. Local spend no longer shows up as an anonymous engine.

  • telemetry

    Claude local model ids count as local

    e4004850

    An explicit list of Claude-on-local-engine ids stops them being priced as cloud. If the transcript names one of those ids, the event goes to the local provider.

  • telemetry

    Claude local is also detected from the transcript

    a21caf93

    If the payload has no model id, the parser looks at the session transcript. A Claude served locally is no longer lost because the official field came empty.

  • telemetry

    Early parser exits are commented on purpose

    6c2a739c

    Intentional telemetry parser returns (incomplete event, unsupported host) carry a note. The stub detector stops treating them as hollow code.

  • telemetry

    The stub scan does not flag the telemetry parser

    7d8f04a2

    A branch that exits early without mutating state no longer trips the productive-stub detector. The parser can drop a malformed event without looking like a fake implementation.

  • telemetry

    Local telemetry is anchored to the session

    574a0f3c

    Local-engine events carry session_id and the cwd work_kind. They stop floating as device-level spend; they join the same session as the agent that fired them.

  • telemetry

    Claude local also anchors to the session

    99d37bc7

    The llamacpp provider lands in SQL and on the Claude-local event. Same session, same work_kind; historical repricing no longer treats it as cloud.

  • telemetry

    Another stub-detector false positive, gone

    0fca4a74

    Parser exits are reordered so the detector does not confuse them with a stub. Event behavior is unchanged; verify stops failing a file that does real work.

  • telemetry

    Local llama.cpp usage is credited as local

    7f83d0aa

    Codex or another CLI against the llama.cpp proxy emits events with provider cardumen-llamacpp. In pricing and SQL it counts as LOCAL, not as tokens from a paid provider.

  • merge

    Merge holds if tests cross the ceiling

    5d2b5f60

    Before merge, the guard reads the package test budget (e.g. desktop). If HEAD has more tests than the max and this branch added some, the PR stays on hold until cardumen ratchet resolve.

  • desktop

    An unregistered remote machine is explained

    cb181794

    In Settings → remote control, a device with no signup no longer looks like generic offline. It says “Not registered” and asks you to enable remote control on that machine so it can publish its runtime.

  • desktop

    The runtime registers even if the relay is down

    b739ccd6

    Device signup on the account no longer waits for the relay. If network exposure fails, the machine still appears in the org (with no endpoints) instead of vanishing from the list.

  • merge

    The hold names the background task that blocks

    330cf77a

    If a session or background job blocks the merge, the guard names it (handle, agent, reason). It is no longer an opaque “busy”; session review lists those tasks by name.

  • C.R.E.A.

    The shell cannot create or mutate files without a contract

    db9de025

    C.R.E.A. looks at the effect of a Bash call: new or changed repo files. Without an active spec, the hook stops it. Hiding the edit in a quoted or nested command is no longer enough.

Improved

3
  • verify

    The auto-guard skill explains verify baselines

    762422dc

    Anyone running verify on autopilot has the rule in writing: a failure already on HEAD is baseline; one born in this session is not forgiven. Fewer waivers by ear.

  • ops

    The license postmortem cites the right measurements

    60f8c98e

    Latency and timeout references from 16 September point at the numbers that were actually measured. Anyone reading the postmortem no longer follows a figure that is gone.

  • ops

    The license outage postmortem is on record

    ee0e53b0

    On 16 September the heartbeat talked to the wrong host and a 3 s timeout swallowed valid answers. The postmortem covers cause, symptom (a dead flag that would not heal), and the fix.

v1.9.11

  • Commits 88c1e713..480378ba

The local engine tells the truth (live t/s, aptitude against the card, honest engine card), verify stops forgiving shortcuts, and the desktop keeps the agent and queued deliveries.

New

2
  • verify

    Detects bindings assigned only in tests

    #448cdeb0036

    verify flags public symbols or new assignments nobody calls in production: if the only use is in tests, the change fails. Dead API cannot hide behind coverage.

  • CLI and desktop

    Live tokens per second, visible and logged

    #415adcceab4

    llamacpp status --json reads the engine /metrics: generation and prefill t/s. If the engine is stopped or silent, fields are null with a reason, never 0. Every 5 minutes and on stop, a sample lands in ops-log.jsonl. The desktop engine card shows that pace.

Fixed

28
  • desktop

    Graph-gated worktree create is atomic

    #4593d087079

    If the graph gate fails mid-way, no half worktree or orphan directory remains. It is created whole or rolled back; the error names the step that stopped.

  • desktop

    Detects incomplete brain profiles

    #458495e65ff

    An org seat with brain needs plan.json, license.jwt, arrecife-node.json, the key, and .last-validate. If any is missing, setup lists them instead of pretending the node is registered.

  • backoffice

    License status, devices, and code resend

    #457945a166f

    The platform console reads license details and an org's devices (GET/DELETE). Resending a code no longer asks for invite_code: it uses the activation contract already in place.

  • terminal

    Live agent stays behind a foreground shell

    #44077e55f52

    If a shell command runs in the agent pane, presence does not flip to shell while the agent process is still alive. agentPresence stays live and tracking is not lost.

  • verify

    Detects migrations edited after they applied

    #45685cd5e65

    migrations.mjs --dry-run exits 3 if a registered migration no longer matches the file. verify treats that 3 as failure; missing network or pending ones only warn. The three-day silence is over.

  • Cardumen

    Pre-push requires a verify receipt; CI only to main

    #4548843c3ee

    Without a valid cardumen verify receipt for this HEAD and worktree, the push is rejected and the message names the command. PR workflows no longer run toward develop: only toward main.

  • desktop

    Queued terminal delivery is visible and aged

    #4465458d837

    A terminal send that stays queued no longer vanishes: the CLI and runtime show it is queued, for how long, and whether it confirmed or was lost. It no longer looks as if the text arrived when it did not.

  • Cardumen

    Review and session runtime skills ship in the binary

    #453597aa67e

    review-placebo-catalog and session-runtime-lessons travel bundled. The router loads them in review and in session; they no longer depend on the destination repo copying them.

  • Cardumen

    Result specs validate regardless of language

    #45118bfdf36

    task spec no longer demands Spanish or English keywords. It looks at the contract shape (goal, criteria, verify) and fails on the missing field, not on a dictionary.

  • CLI

    Surfaces pushed branches that have no PR

    #44770d68048

    Session review and the terminal list flag a branch already pushed with no pull request, plus the command to open one. Work no longer sits on the remote with no review.

  • desktop

    Waits until the paired workspace session is ready

    #4425f13b33e

    The paired harness does not talk to the session until the workspace answers. That avoids races where the CLI assumes a runtime that has not started yet.

  • desktop

    Auto takes claims from the agent and the org

    #438d1275454

    In auto mode, claims come from the orchestrator agent and the organization, not from a generic seat. A node does not claim work from another org or another role.

  • Cardumen

    Result-spec guard blocks name the reason

    #437dc4567dd

    When the hook stops an edit without a contract, the message says what is missing and how to declare the spec. It no longer looks like a silent failure; the rollback runbook sits beside it.

  • desktop

    Relay GC sorts listings before the cap

    #439121974e2

    The remote relay-* listing is sorted, then the cap of 64 applies. Without the sort, the trim could drop new versions and keep old junk.

  • Cardumen

    The result-spec contract resolves per session

    #43349917f9e

    The hook no longer looks for one global contract: it uses the active session. One agent does not inherit another's spec, and verify fixtures are commands that actually resolve.

  • desktop

    Folder repo upgrades no longer overlap

    #42322fc2c28

    If a folder-repo upgrade tick is still running, the next one waits. Before, two ticks at once left the repo half-done or repeated the same fetch.

  • quality

    Live-evidence verdicts stay conservative

    #4340a2ec414

    Hierarchical QA does not upgrade to PASS if live evidence is weak or partial. A conservative fail stays; it is not dressed up because a later step looked fine.

  • hooks

    Task done blocks empty delegated work

    #432ea0ae34a

    task done reads the delegation log in project state. If a minion launched and left no result, close is rejected. A waiver also cannot cover a step that never ran.

  • verify

    Detects stubs that look like productive code

    #4200c365da4

    verify hunts new functions that compile and return something, but do not do the work (unimplemented! or a dressed-up empty return). A stub no longer counts as an implementation.

  • desktop

    Local harness waits until the relay is online

    #4177f52ccd3

    Local paired tests do not fire commands at the relay until the online condition holds. Fewer false reds from a slow start.

  • verify

    No waiver for a step that never ran

    #428f0852868

    verify-waive refuses to forgive a mechanism that did not execute. The receipt records those steps as not run; you cannot mark green what was never seen.

  • verify

    A fix is probed by reverting the diff

    #4260ca0a1e8

    On a change marked as a fix, verify reverts the diff and runs the probe. If the test still passes, the fix fixed nothing and the gate fails closed. A compile failure on reverted tests is inconclusive, not green.

  • verify

    No waiver for a failure this session caused

    #41899e510a0

    If the command failed in this session and not on the base, it cannot be forgiven as baseline. Only a failure already present on HEAD counts as preexisting.

  • C.R.E.A.

    The shell cannot mutate repo code without a contract

    #427871bcbf4

    C.R.E.A. watches the observed effect: if a shell command changes repository sources and no spec is active, the hook stops it. Disguising the edit in a bash -c is no longer enough.

  • distribution

    The JSONL queue releases the drain lock on purpose

    #425c141252e

    When a drain ends, nca-dist releases the lock explicitly. The next batch does not sit waiting for a lock nobody was going to drop.

  • llama.cpp

    Aptitude against the card, agent start, honest engine card

    #41655bc0614

    APTO/NO APTO is decided against GPU capacity, not free VRAM the loaded model already holds. up computes the agent profile (1 slot, high ctx) and states it. The card shows the served model, effective slots, and that model's VRAM vs the rest.

  • OpenCode

    OpenCode 1.18 loads the plugin with {id, server}

    #414e134fd37

    The default export is no longer a function: it is an object with id and server(). On 1.18 a function left the instance null and crashed config/dispose. node --test gates that contract.

  • OpenCode

    The plugin installs only from plugins/opencode

    #41499ba1ef5

    Team-setup no longer copies skills-memory.js into .claude/opencode. The source is plugins/opencode; the duplicate copy is gone so 1.18 does not load two different contracts.

v1.9.12

  • Commits fbdda96a..af995e66

The license talks to the right host and recovers from a stale `dead` flag; onboarding guides the company brain; llama.cpp coerces streamed tool calls; pre-push checks the repo you actually push.

Fixed

7
  • license

    License host is no longer the Arrecife account

    bc1ce3af

    The heartbeat uses nca_dist::api_base() (api.cardumen.ai), not Arrecife's apiBase and not the landing. A 404 against cardumen.ai looked like no network, so revocation never landed. One owner, one endpoint.

  • desktop

    Hidden serve will not open a window without a display

    b1d6c270

    On Linux, with neither DISPLAY nor WAYLAND_DISPLAY, cardumen serve does not promote the desktop. SSH or a headless daemon stays as serve; the message asks you to start from a graphical session.

  • Cardumen

    Pre-push evaluates the receipt in the repo you push

    #47266e99346

    The hook resolves the git root of the repository being pushed. A green receipt from another worktree or the parent no longer opens the gate. The block names cardumen verify in that tree.

  • desktop

    Onboarding guides the company brain setup

    #47174c3912f

    If the plan includes the brain, first-run onboarding registers the node with Arrecife (connect the account, pick the org, complete artifacts) before the seat is ready. You no longer hunt for it in Settings.

  • desktop

    A stale dead flag does not hide a live license

    #4704dfe4784

    If the server says the license is active, the desktop opens even when the local .license-flag says dead. A network error with a JWT still counts as grace. The activation step does not stay stuck on that local lie.

  • llama.cpp

    Streamed tool calls match the declared schema

    #468b55e7f1d

    The llama.cpp proxy no longer forwards SSE as-is. It gathers the tool-call JSON and coerces "true" or "3" to the type the schema asked for. Codex stops rejecting arguments the model already meant.

  • license

    A stale dead flag clears when the server says ok

    #469c3a944f3

    The hooks heartbeat asks the server again even when the local flag is dead. If /validate answers active, the flag becomes ok and .last-validate refreshes. A grace exhausted by a bad host no longer locks you out forever.

v1.9.10

  • Commits b1cb6aae..6cc69339

On Linux, Settings → Models speaks llama.cpp CUDA: models from Hugging Face, agent-fit, and the router only sends verifier and summarizer lanes local. The graph answers or cedes; remote hosts are one registry; code emails send you to download the app and activate.

New

13
  • desktop

    Settings → Models on Linux runs on llama.cpp CUDA

    #4114e2c93a5

    macOS stays on oMLX. Linux with an NVIDIA GPU lists, installs, stops, and launches against llamacpp. Without a GPU it is unsupported, with a reason. Claude Code and Codex buttons only appear on APTO models already downloaded. On Linux there is no load/unload: launch is what serves.

  • llama.cpp

    A local model launches only if it is fit for agents

    #406954a9dbf

    pull rejects what is estimated under 40 t/s or does not fit. launch trusts only a stored certification: a real bench plus two tool-call probes (Claude Code and Codex). Without an APTO certificate it names the nearest fit model; no flag skips that.

  • router

    Local only on verifier and summarizer; fallback is not double-counted

    #403f723b0e3

    The local engine does not compete on other lanes, even when it is free. If it does not answer in 800 ms, the request goes to the paid provider and tokens count there, not as LOCAL.

  • graph

    A broad search is answered by the graph or ceded

    #39834576165

    Symbols and references come from graph.db. UI labels, JSON, Markdown, or Prisma do not live there: the gate cedes to rg instead of blocking blind. If the graph cannot open, the search proceeds with no invented guidance.

  • llama.cpp

    You bring the model you want: Hugging Face or a local file

    #401d3b239f3

    cardumen llamacpp models search|pull resolves GGUF, license, and gate before download. It checks disk and VRAM; the download resumes from .part and verifies sha256. The HF token lives in secrets/hf.token (0600) and never reaches stdout.

  • MCP

    The local MCP server exposes graph queries

    #3936917ca8c

    cardumen-local serves graph_query against the project's SQLite. If the graph is missing, the error is structured and tells you to build it; it does not invent an empty result.

  • llama.cpp

    llama.cpp CUDA is a managed engine, sibling of oMLX

    #390a17fe0bb

    cardumen llamacpp installs, serves, stops, launches, and diagnoses on Linux+NVIDIA. User-space build, server on 127.0.0.1, idle auto-stop, 0600 key outside the repo. router probe sees it as AccountKind::LlamaCpp.

  • agents

    The agent prompt arrives with graph context

    #385abec9354

    When an agent launches, the task-map injects the graph slice for the job. The agent does not start blind on a tree Cardumen already indexed.

  • quality

    Each repo declares its Arrecife destination

    #3848d61c6f3

    QA no longer inherits another checkout's Arrecife project. The destination is per repo; a sibling worktree does not dump cards or evidence into the wrong project.

  • verify

    `cardumen verify` selects impact and reuses the receipt

    #377e39bd679

    The selector marks related vs full from the impact map. A receipt for the same HEAD SHA is reused; another commit does not count as green. Stop and task done still require the current receipt.

  • remote

    SSH, runtime, and account live in one host registry

    #3671f6f1bec

    Remote hosts stop being three lists. The unified registry discovers account runtimes and Settings navigates one pane. An SSH host and a paired runtime are named the same in the CLI and the desktop.

  • desktop

    Account settings drive remote runtime control

    #36812888beb

    The account pane registers and syncs the relay device. Runtime lifecycle (pairing, token, presence) comes from that account, not a loose per-machine setting.

  • integration

    Local boundary probes are mandatory

    #369051afbcd

    The integration gate runs the local Arrecife and Carnada probes. A legacy CLI is tolerated; a broken boundary is not marked green. Without a probe, there is no delivery.

Fixed

31
  • desktop

    Linux Models copy shows t/s, disk, hash, and cause

    #41356232c3b

    The APTO badge shows t/s to one decimal. Local storage sums size_bytes. The llama.cpp hash shortens to 7. NO APTO classifies cause (tool calls, t/s, VRAM) in the UI language. The GPU name wraps at 360 px.

  • desktop

    `worktree rm` does not send back a card whose PR is already merged

    #409862e3614

    If the PR is in the retirement journal, the card stays where it is (delivered). If that cannot be known, it warns and still does not move back. Only not-merged returns to the previous column.

  • email

    Code emails send you to download the app and activate

    #4128e87b058

    Purchase, seat, trial, resend, and activation say: download Cardumen, open it, and continue with your code. curl|install.sh, Homebrew, and cardumen activate leave those mails. The model is the installer (DMG / AppImage).

  • router

    `assign` and `probe` see the local engine and local accounts

    #4104f62dd2b

    The catalog is no longer hosted providers only. It merges local accounts and the managed llama.cpp engine. probe says which lanes it routes. Dispatch synthesizes the llamacpp-managed account so the local model is not sent to a paid provider.

  • verify

    Contract `cargo` commands run in the nested workspace

    #408596be29d

    cargo test -p from the repo root could not find Cargo.toml: the workspace lives in apps/cardumen-cli. It now resolves that manifest. Several ambiguous candidates fail asking for --manifest-path.

  • verify

    A missing rustc-wrapper no longer kills `cargo` in verify

    #4054c4f172a

    If .cargo/config.toml or RUSTC_WRAPPER point at a binary that is not there, verify and RESULT_SPEC set RUSTC_WRAPPER='' and cargo still runs. A wrapper that exists is kept.

  • desktop

    The runtime-imports guard matches globs and multiline imports

    #4073af67212

    /** left a literal * and out/main/codex/** missed the artifact. The parser no longer goes line by line (oxfmt splits the import). Every explicit out/main path must be an electron-vite entry.

  • verify

    verify.sh tests pin `CARDUMEN_DEV=1` and do not inherit the host

    #404b2ade78d

    A live development environment was leaking into fixtures. The tests pin CARDUMEN_DEV=1 and isolate the merge-base so they do not read the operator's integration evidence.

  • core

    The price table names Haiku 4.5, Opus 4.5–5, Sonnet 5, and Fable

    #402006cafc1

    Explicit rows sit before generic claude / claude-opus. Haiku 4.5 at 1/5, Opus 5 and 4.5–4.8 at 5/25, Sonnet 5 at 2/10, Fable/Mythos 5 at 10/50. Retired Opus fallback stays 15/75. Source: Anthropic pricing, 2026-09-15.

  • graph

    Incremental graph refresh has a cost ceiling

    #40004b38642

    Ambiguous candidates, dependents, and summary scans are capped. An invalid projection sidecar is rebuilt. Refresh no longer grows with repo size without a bound.

  • core

    Credential storage paths are injected, not guessed

    #3999138de96

    Tests and runtime receive the store paths. They are not hand-built against the developer's home. A fixture does not stomp the real ~/.cardumen.

  • telemetry

    Each drain queue has its own lock

    #397ff6f665b

    Usage, memory, and work events no longer share one .drain-lock. A usage drain does not block memory. The lock lives next to that queue.

  • hooks

    RESULT_SPEC only watches editing tools, and it is not overwritten

    #396dae11f0a

    The matcher is no longer .*: it runs on tools that edit. A user settings.json cannot cover the bundled hook. Reading or listing does not require a contract.

  • graph

    The graph refreshes live on commit and session close

    #395ef33414c

    Incremental index is sqlite-first: node identities are kept, scans go to the target index, and an invalid sidecar is rebuilt. Closing the session does not leave the graph on the previous commit.

  • llama.cpp

    llama.cpp platform tests do not depend on the host

    #394189ccbd6

    The suite does not require an NVIDIA GPU or nvidia-smi on the runner. Hardware is detected with doubles; CI stays green on machines without CUDA.

  • Cardumen

    Native Read, Grep, and Bash also go through the graph

    #39183b1080b

    Graph-first PreToolUse covers native tools, not only the wrapper. It reads paths and definitions from graph.db. A covered symbol search is sent to the graph; a literal sweep is ceded.

  • setup

    A bare `pnpm install` does not fabricate an npm init `package.json`

    #3893138e020

    If the worktree has no package.json, that setup is skipped with a notice. An untracked package.json whose scripts.test is the npm init placeholder does not count as a test step.

  • quality

    The UI gate is certified on authenticated screens

    #3923950a677

    certify-ui --url --environment --role signs in with the sealed QA credential, captures in that session, and fails if it lands on login. setup --add-target declares an origin without a wizard. A hand-made report still does not certify.

  • verify

    `detect_pm` recognizes `bun.lock` and `packageManager`

    #388e944da32

    A modern Bun module fell through to pnpm and aborted. Order is now packageManager, lockfiles (bun.lock / bun.lockb, pnpm, yarn, npm), then the default, always requiring the binary.

  • Cardumen

    The graph exists before an agent launches in a worktree

    #3863f7d4ff6

    If the graph is cold, ensure runs in the background and create does not block. A ready graph is awaited. The agent does not start against a fake empty index.

  • integration

    MCP probes accept streamable HTTP responses

    #387cf1bb3a2

    Arrecife is probed with JSON-RPC POST and accepts the streamable transport. A body that is not a single JSON object is no longer read as a contract failure.

  • state

    A worktree's project state is the parent repo's

    #3820afc65e0

    ~/.cardumen/projects/<slug>/ paths resolve against the main checkout, not the worktree folder. Memory, journal, and graph are not duplicated per worktree.

  • auto

    An automation has a single live coordinator session

    #379a19256fb

    If the coordinator is busy, the cycle records busy and does not launch another. A coordinator stuck in a dialog or idle is retired before replacement. Three heartbeats do not open three sessions.

  • CLI

    `terminal stop` does not relaunch the agent; concurrent create is guarded

    #380e0049e23

    On stop, the worktree is marked agentless and pending prompts and launches are purged. A terminal create --agent with a live agent is rejected unless --allow-multiple.

  • hooks

    The orchestrator Stop does not relaunch verify, and SIGTERM kills workers

    #3789894c4da

    With CARDUMEN_VERIFY_OWNER=orchestrator Stop only requires a PR to develop and the LISTO line. cardumen verify kills the process group on SIGTERM/SIGINT so workers die in under 10 s.

  • CLI

    `--json` emits a single object and the terminal handle is populated

    #37530e571ed

    stdout does not mix prose with JSON. A denied RPC stays a stable error object. The created terminal handle is no longer empty for whoever chains the next command.

  • quality

    The UI QA report is published on the Arrecife card

    #3765ad898f8

    If a card is linked, the report uploads there. .cardumen/qa stays out of the team checkout: local evidence, not git noise.

  • hooks

    A read-only subagent does not require a C.R.E.A. contract

    #374c04e72fe

    Explore, Plan, or a prompt without mutation verbs pass. Editing, commit, push, or opening a PR are blocked naming the tool and the word. The orchestrator can investigate without opening RESULT_SPEC.

  • verify

    Session files outside the repo do not break verify

    #371466e78d3

    Transcripts and journals live in Cardumen home. Verify no longer treats that path as a dirty checkout or as product scope.

  • skills

    The QA skill stops seeding `api.arrecife.ai`

    #332780d9756

    That host does not exist (NXDOMAIN). Skills and docs are locked to ARRECIFE_QA_MCP_DEFAULT_URL. The desktop stops copying the dead literal into every workspace.

  • desktop

    CLI license runtime dependencies are unpacked

    #36336672863

    out/cli/** is in asarUnpack. The packaged binary no longer looks for modules inside the asar, and the CLI license starts on Linux and macOS.

Improved

1
  • local models

    The CUDA 1/3 report says which load belongs on the GPU

    #383127bf405

    Measured on Ubuntu with an RTX 4060 Ti: verifier and summarizer tie Haiku on atomic tasks. Executor, planner, and reviewer stay paid. That table is what router 3/3 turns into policy.

v1.9.9

  • Commits 796ecb95..690d95d5

The orchestrator opens terminals on a paired machine; the runtime relay is account-backed; `cardumen verify` waits its turn on a local semaphore; `cardumen update` tells a missing release from a network cut.

New

3
  • CLI

    The orchestrator opens terminals on a paired machine

    #362ea49a5db

    terminal create|list|read|send|stop take --host local|ssh:<id>|runtime:<id> and --environment. sessions lists worktrees on the paired runtime. coord status, send, read, and wait with --environment fail in the open: they are local-only.

  • runtime

    The runtime relay opens with the account, not a loose tunnel

    #359638a538d

    The device registers with the license, receives a relay token, and the WebSocket copies frames without reading them. Pairing goes through the account; there is no anonymous channel between two hosts.

  • verify

    `cardumen verify` waits its turn on a shared local semaphore

    #36059a4bd24

    cardumen verify and .cardumen/verify.sh take turns in ~/.cardumen/verify/turns/. CARDUMEN_VERIFY_NO_QUEUE=1 fails when there is no slot. A stuck turn is released with cardumen verify --release-turn --pid. coord status --json publishes the queue.

Fixed

8
  • CLI

    A stale terminal handle is reminted; container GC only reports

    #361690d95d5

    If the pane is still live, the handle is reminted. If the pane cannot be proven, it fails closed. worktree lists containers on an idle worktree; GC reports, it does not delete. coord status publishes that runtime health.

  • Grow 360

    Brain access follows the organization's live subscription

    #3581e905d92

    Brain access comes from the org's active Cardumen plan (cloud or CLI), not a copied grow360_tier. If the subscription does not match, ingest and the payment gate say so; no tier is invented.

  • Grow 360

    Preflight names a missing platform credential

    #357bfe3ea4f

    grow360-preflight checks live cplat_ keys. Zero active: the Arrecife console cannot authenticate, and the doctor names the command to issue one. The secret is not printed.

  • deploy

    Release smoke checks all four CLI legs

    #354c76a1485

    deploy-all ends with smoke-release.sh: S3 and the DB have darwin/arm64, darwin/x86_64, linux/arm64, and linux/x86_64. With the app, desktop pointers too. It writes nothing. If a leg is missing, the deploy is not verified.

  • verify

    The desktop suite runs one at a time; the live shell lane is separate

    #356355156e3

    Two verify runs on the same host no longer collide: there is a lock at ~/.cardumen/locks/verify-desktop.lock. Live-shell tests go to vitest.live; they stay out of the parallel desktop shard.

  • CLI

    `cardumen update` no longer calls a missing release “offline”

    #3553b848276

    404 not_published says the server announces the version but the binary is missing. unsupported_platform and no_release have their own copy. A 5xx asks for a retry. Only a network failure stays offline.

  • landing

    The Linux download card no longer breaks on the agent prompt

    #3537f6ecb53

    The long prompt stretched the column and the button spilled out of the card. The grid now caps width, the prompt wraps, and the copy no longer says Linux is “on the way”: AppImage, .deb, and .rpm are already there.

  • deploy

    A cross-arch binary version ends where the semver ends

    #3528bc221e1

    strings glued cardumen-cli/1.9.8 to the next literal and deploy aborted with 1.9.8arrecife. It now looks for the whole literal and does not swallow glued letters. deploy-release.sh --check-only checks version and sha256 without signing or uploading.

v1.9.8

  • Commits 23bce8e1..5e648969

Opening an agent no longer needs a human at the startup modal; Linux and Windows actually download the installer; `deploy-all` asks for the version-commit push before compiling; a worktree inherits its origin repo's organization.

New

1
  • CLI

    Opening an agent session no longer needs a human at the startup modal

    #346aa94949f

    terminal create --agent reads the screen, recognizes the first-run modal, and picks the option that changes nothing (skip update, trust the worktree). It never picks “Update now”. Without --agent it says so (agentPresence: "shell"). At most three modals and 15 s.

Fixed

14
  • core

    Core builds the session sandbox policy

    #347e01221d5

    worktree create --agent and terminal create --agent no longer guess roots. Core asks git for git-common-dir and each submodule gitdir, passes them to Codex and Claude Code, and a preflight checks writes and the app socket. Failures surface at launch. A remote host is declared, not measured from here.

  • hooks

    The RESULT_SPEC guard knows the role: an orchestrator does not edit product files

    #34598a134ce

    Inside the repo is product, whatever the extension (including .yml and .env). Outside — Cardumen home, notes — is not. .cardumen/orquestador/ is the orchestrator's own trail. The block points to cardumen worktree create. A path with .. is normalized before the decision.

  • CLI

    `terminal send` queues on a busy session, and prompt errors carry the remedy

    #344869338a5

    If the TUI is mid-turn, the message is delivered with Tab (Codex) or Enter (Claude Code) and the receipt says queued. agent_prompt_blocked names the dialog, the panel line, and that you answer with the option number, not prose.

  • hooks

    The attribution hook treats submodules as the same repository

    #3439c15b8ec

    Edits inside a submodule were blocked because the gitdir is <super>/.git/modules/<name>. They are accepted if that gitdir hangs off the session worktree. A foreign repo stays blocked, and the message names both gitdirs.

  • verify

    The UI-polish gate no longer treats documentation as UI

    #3420acda4d1

    With docs/index.html in the repo, any .ts under docs/evidence/ counted as a screen. Markup in a docs directory is no longer a signal. A file that imports React or Electron still is, wherever it lives.

  • deploy

    `deploy-all` asks for the version-commit push and confirms it before compiling

    #34171838e03

    The bump leaves a local commit; the app release checks it out by SHA. The warning used to arrive at the end, after API and CLI were live. It now stops, shows the command, asks, and checks the remote. The script does not push: it proposes and verifies.

  • CLI

    A worktree inherits the organization profile of its origin repository

    #340dda7bc30

    Worktrees live outside workspace_root, so the brain said there was no organization. Membership is resolved from the linked worktree's main checkout. The literal cwd wins if it already resolves; inheritance only adds.

  • verify

    `--full` runs the suite even when attribution is empty

    #3384209a5e2

    The attribution gate aborted cardumen verify --full when there were no edit events. With --full the empty set is a warning and the suite still runs. Without --full it stays red. If the session edited via Bash, attribution falls back to the branch diff against its base.

  • desktop

    Linux and Windows installers actually download

    #330eb9b52e6

    The S3 allow-list only let CloudFront read desktop/*.dmg. It now covers dmg, exe, AppImage, deb, and rpm. /desktop/download does a public HEAD and returns 503 installer_unavailable instead of S3 AccessDenied XML. The headless guide installs from get.cardumen.ai, not the fork.

  • desktop

    The Cardumen icon shows on Linux/Wayland

    #337024c05a9

    Wayland paints the icon if app_id matches the .desktop file. Electron publishes cardumen-desktop and the file said StartupWMClass=cardumen. It now comes from package.json name, the same source as app_id.

  • CLI

    Help lists every flag the parser accepts; local commands reject `--environment`

    #3288bff2ca6

    Help comes from effectiveAllowedFlags, the same set the parser validates. account, artifacts, serve, and other local commands reject --environment in the parser. cardumen host list is cited where it belongs.

  • runner

    The self-hosted macOS runner signs the release (unlocks the keychain under launchd)

    #33628ff6bdb

    Under launchd the login keychain is locked and signing died. job-started.sh unlocks it from a local file outside the repo (mode 600); on completion it locks it again. No password lives in git. A diagnosis in the graphical session is no longer treated as the service's.

  • API and desktop

    “Check for updates” works on Linux

    #3352f87c3dd

    latest-linux.yml required zip and blockmap, which are macOS artifacts, and returned 409. The manifest is built per platform. A 409 is shown as a notice with the download link, not as an HTTP dump with the session token.

  • CLI

    The CLI installs on Linux x86_64 without asking for Homebrew

    #33498352d96

    On Linux the installer uses apt-get, dnf, yum, pacman, zypper, or apk for minisign, not Homebrew. The landing stops asking for brew outside macOS and offers a copy-paste prompt for the user's agent. With no package manager, it names the exact package and does not fetch a loose binary.

v1.9.5

  • Commits 959e939a..9cd7701c

Arrecife reads the per-seat work card and changes roles without leaving the org ownerless; `cardumen verify` leaves a per-worktree receipt; three public plans (CLI Core, Startup, Ignite); QA in a worktree sees the desktop environment.

New

7
  • Grow 360

    The per-seat work card reaches Arrecife over `/v1`

    #315a9dc1776

    GET /v1/organization/work/users and …/:userId publish the summary and breakdowns (agent, model, task kind, project) with rangeDays. Pull requests that span days are counted once. Only events sealed to the organization.

  • verify

    `cardumen verify` picks CI scopes and leaves a per-worktree receipt

    #313fd9ef73a

    Scopes come from ci-changed-scopes against the merge-base with origin/develop. The receipt is tied to the HEAD SHA; another commit does not count as green. task done and Stop require it plus an open PR. cardumen verify receipt reads it.

  • core

    `cardumen sessions review` computes each session's verdict

    #312b698c1e7

    It crosses desktop, disk, transcript, processes, git, and the C.R.E.A. journal and names the state (working, idle, blocked, delivered, dead) with reason and command. live with no progress is idle. Also available as MCP sessions_review.

  • Grow 360

    Changing a seat role over `/v1` cannot leave the org ownerless

    #3099525581b

    PUT /v1/organization/seats/:email/role transfers ownership in one step: the previous owner becomes a member. Demoting the only owner returns 409. An unknown role is 400; a foreign seat, 404.

  • worktree

    `worktree create --work` claims the Arrecife card; `rm` releases it

    #308494e8b37

    Cardumen claims the card and moves it to In progress before handing the task over. If another actor owns it, no worktree is created. On close, a card still in progress returns to its column. Without --work, it stays unbound.

  • billing

    Three public plans: CLI Core, Startup, and Ignite

    #3067b35b50b

    The catalog charges 15, 49, and 99 USD a month. Checkout rejects retired plans (Software Factory, per-seat Company, Cloud). Live subscriptions on a retired plan still renew.

  • landing

    The newsletter confirms double opt-in on its own page

    #305cd2715a2

    /newsletter-confirmada and /en/newsletter-confirmed are the email landing. Without that URL, opt-in never fired. noindex, off the sitemap, with two exits: download or home. The promised cadence is “when there is news”.

Fixed

6
  • Grow 360

    `rangeDays` also applies on `/v1/organization/usage/projects`

    #31077282a8f

    The other usage reads already honored the window; projects always returned 30 days, so the Teams 7/30/90 selector did not move the table. It now applies the same 90-day cap and still defaults to 30 when the caller sends none.

  • brain

    The Arrecife node registers from the app; `brain status` tells the truth

    #3079128ee83

    Plan, node, and sync are three distinct steps. Without a node, brain status no longer shows a check mark. arrecife register is idempotent. Hints point at the app, not at a terminal command that does not register the node.

  • desktop

    Arrecife credentials survive an app update

    #3038b83a5ef

    Account and token live in desktop state (arrecife-account.json, arrecife-token.enc), outside the bundle that an update replaces. An update no longer signs you out of Arrecife.

  • hooks

    The C.R.E.A. contract resolves from the file you edit

    #302927082ed

    The hook reads the path in the payload, not cwd. A MultiEdit of several files records each one in the ledger: before, only the first entered and Stop verified too little.

  • agents

    A task is not delivered to a terminal that is not in the prompt

    #3007702a38d

    terminal.send only writes if agent presence is live. If the TUI died or a trust dialog is up, it rejects with a reason. --allow-shell is the explicit escape. Launch waits up to 30 s for a live agent.

  • quality

    The desktop QA environment reaches the CLI inside a worktree

    #3013530e6f5

    In a worktree .git is a file, not a directory: the main checkout's config is read. credentials.enc is anchored there, so the AAD opens what the desktop sealed against the project.

v1.9.6

  • Commits 6b2e8374..86c2405c

Adding a project to a team no longer reports an error after a successful save; telemetry queues keep what arrives while they drain; desktop work events arrive sealed; the memory tunnel accepts the organization credential.

Fixed

7
  • backoffice

    Adding a project to a team no longer errors after a successful save

    #322e5458d22

    POST /v1/organization/teams/:id/projects saved the project and then failed rewriting the brain rollup: Postgres got a JS array as a literal, not JSON. Arrecife reported that it did not land. The rollup bump now serializes JSON and, on failure, does not undo the add.

  • quality

    agent-browser is last; the Cardumen emulator is always named

    #3210812e1d3

    The cascade is Cardumen browser, host, Playwright, then agent-browser last. The emulator is named as its own surface even when QA config has no mobile targets. credential inject does fill the embedded tab.

  • Grow 360

    The memory tunnel accepts the sealed organization credential

    #32081e7c300

    Arrecife's seat-memory panel returned 401: the tunnel only accepted cplat_. Now cg360_ resolves the organization from the credential, like /v1. A live seat in that org is still required; another org's sealed data is not served.

  • telemetry

    Usage and memory queues keep what is enqueued while they drain

    #3191c541598

    An append during send was wiped when the queue was rewritten. Usage and memory now claim the file to .sending under the same lock as append. telemetry status and the desktop queue also count claimed items.

  • telemetry

    The work-event queue keeps what is enqueued while it drains

    #3188a941b7f

    flush_work_events read, sent, and rewrote: a new event in that window vanished. Drain claims the queue, sends from the claim, and does not resend accepted batches. An orphan .sending file is resumed before the new queue.

  • telemetry

    The update-day rollup does not seal hours that were not sealed

    #317a4b47a7f

    A live worktree during an update mixes events without org_id and sealed ones. coalesce put them in a sealed row and the org card summed those hours. A row is sealed only if every event in the group is, with the same organization.

  • telemetry

    Desktop work events arrive sealed with project and organization

    #316deb71935

    agent_start, agent_stop, pr_created, and worktree_closed went out without project_key or org_id. The path comes from the minted worktreeId, not the app cwd. A deleted worktree inherits the attribution it had while alive; with no memory, it travels without a project.

v1.9.7

  • Commits c5e4a158..d75519f5

`worktree status` sees a remote session's tree; `cardumen auto on` shows which apps it would close, and `--execute` closes them; pairing help says `cardumen://pair`.

New

2
  • CLI

    The orchestrator sees a remote session's tree with `worktree status`

    #329d2250c46

    git -C reads local disk, so it cannot judge a paired machine. cardumen worktree status --environment composes RPCs that already travel (worktree.show, git.status, git.branchCompare, hostedReview.forBranch). Verdict clean / unfinished / unverifiable; unread state never reports clean (exit 3).

  • CLI

    `cardumen auto on` frees RAM by closing spare apps, dry-run by default

    #32607ef95f9

    Explicit list (Arc, ChatGPT, Chrome, Cursor, Discord, Slack, Spotify, WhatsApp). Agents, Docker, terminals, and the OS are left alone. An app hosting an untouchable stays. Without --execute no signal is sent; with it, SIGTERM and wait, never SIGKILL. auto off does not reopen anything. Log at ~/.cardumen/auto-mode.log.

Fixed

1
  • router

    `session-review` ships in the bundle, and the contract runs on skill PRs

    #325b7c6bf20

    The #312 skill was on disk and missing from BUNDLED_SKILLS, and the guardian broke main. It is declared. The skills-drift CI step now runs nca-router --lib and cardumen-core --test skills_catalog_parity, which used to live only in rust-tests and were skipped on PRs to develop.

Improved

1
  • CLI

    CLI help and errors teach `cardumen://pair`

    #3271b66f4a8

    cardumen environment add, --pairing-code, and the invalid-code error advertised the inherited fork scheme. Canonical is cardumen://. The parser still accepts both; it is unchanged.

v1.9.2

  • Commits 7b54f577..196f77f9

Brain and work events carry agent and model; `cardumen release prepare` stages a bump without deploying; the integration gate closes on the PR; QA stores remote test credentials without origin attestation.

New

2
  • telemetry

    Brain and work events carry agent and model

    #280d02301db

    cardumen brain push and work events require resolvable agent and model. Ingest rejects unresolved attribution; a pull request without that pair is dropped. The daily rollup groups by worktree × agent × model.

  • deploy

    `cardumen release prepare` stages a bump without deploying

    #277eee02def

    cardumen release prepare --dry-run shows the plan. Without --dry-run it delegates to bump-version.sh, leaves the entry pending human review, and stages only release files. It does not commit, push, or deploy.

Fixed

2
  • quality

    The integration frontier closes on the PR, not on push

    #279969eaa39

    pre-push no longer evaluates the probe. worktree merge-guard and the Integration frontier (PR) check block a missing or stale ack when closing against develop or main. pre-commit warns when a frontier is touched, but does not block.

  • quality

    Remote QA credentials no longer need origin attestation

    #2787d0967eb

    An exact remote origin on test or staging is accepted without a minisign seal. Production and redirects stay rejected. Before storing, the operator accepts the warning: test credentials only, and the agent will read them.

v1.9.3

  • Commits 303a4f44..755d2426

A QA environment saved in the desktop reaches the CLI; the Account pane stays up without the license bridge; the landing restores the 1.8.20 changelog.

Fixed

3
  • desktop

    The Account pane stays up without the license bridge

    #28593a27cba

    Reading window.api.license in Settings no longer throws a TypeError that takes the screen down when preload has no license bridge. The QA credential consent warning is searchable again, with English copy.

  • quality

    A QA environment saved in the desktop reaches the CLI

    #283176f75f7

    .cardumen/qa/config.toml refreshes from the account layer when it lags, with an [account] marker (locator and revision). If the pane shows staging and the CLI does not, stderr warns and cardumen qa config explain shows the [Account] block.

  • landing

    The landing restores the 1.8.20 changelog

    #2826f677998

    The 1.8.20 entry is public again: brain search ranks by project, shared tags, and recency. The root test budget moves from 105 to 106.

v1.9.4

  • Commits 1921b273..a495fe6f

cardumen.ai sells a single catalog; routing uses effort and task kind; QA uses the Cardumen browser first; `coord status` and `cardumen quota` measure live capacity and quota.

New

4
  • orchestration

    Routing uses effort, task kind, and a per-model card

    #296d8f5b337

    Effort (Low/Medium/Max) and task_kind stop dropping on ingest: they belong to the candidate identity, with no silent default. cardumen models profile model@effort and the MCP tool ficha_de_modelo read the same card over HTTP, with no direct SQL.

  • landing

    Plan purchase has a contract, without changing the cards

    #295483e7d7f

    GET /api/plans and the /pricing snapshot go through presentPublicPlan. If the API is down, the HTML still shows prices. The success page retries, and if the license is late it offers email recovery.

  • Grow 360

    The Arrecife SKU in Cardumen points at Arrecife's catalog

    #29252809c99

    Cardumen keeps the plan key (free, individual, build, ignite) and does not copy the limits. If Arrecife is down, an in-memory cache and a base-catalog fallback keep purchase and resolution moving.

  • billing

    One public catalog; sibling SKUs are not for sale here

    #2912478b128

    Checkout is cardumen.ai. GET /plans does not list the other products' SKUs; POST /checkout rejects them. The webhook still adopts them on renewal or failed payment, without issuing a Cardumen license.

Fixed

6
  • settings

    PreToolUse no longer covers only a short tool list

    bef4f8aa

    The matcher in .claude/settings.json is now .*, so the hook runs on every tool instead of a short edit allowlist. Agents no longer skip the contract by picking another tool.

  • core

    A block names a verified action, and ratchet sums deltas

    #2980884614f

    When a gate stops you, the message cites a command that exists, not a guessed one. cardumen ratchet resolve closes testBudget conflicts with base + delta A + delta B, instead of picking one side blindly.

  • quality

    QA uses the Cardumen browser and emulator first

    #299d18399c0

    The first tier is the embedded browser, not the host's. credential inject fills there; the secret goes on stdin, not argv. The emulator is in the contract for mobile targets: shrinking the viewport is not mobile evidence.

  • quality

    Credential validation inherits from the workspace, like runtime

    #2972b15efa5

    cardumen qa critical-flows status and prepare read the same verdict. A module with no environments does not require a credential. If it inherits from the workspace, the error says so and lists every incomplete module at once.

  • desktop

    The Codex dropdown no longer paints over its own field

    #294a85e5dc9

    SelectContent anchors below the trigger, not on top of it. The row says why a provider appears (a verified NVIDIA key) and links to AI provider accounts to stop offering it.

  • coordination

    Capacity, quota, and presence are measured, not inferred

    #29383415a11

    coord status checks each row against the real process and publishes live + gone + unverifiable. cardumen quota reads providers via accounts.list. An unreadable census errors out instead of live=None with exit 0.

v1.8.20

  • Commits e9e08aba..cbc7e5ca

Brain search prioritizes the project, shared tags, and recency.

New

1
  • brain

    Brain search ranks by project, shared tags, and recency

    #2658ba76d0c

    Search keeps the metadata index and ranks authorized results by matching project, shared tags, and update time, without embeddings or reading ciphertext.

v1.9.0

  • Includes v1.8.20
  • Commits 0f8fbac9..9511f2d3

The organization brain is now encrypted, audited and searchable on the server, and it can be queried from the local MCP. The agent network stops accepting unowned messages: every envelope is bound to its actor and two nodes on the same team no longer take the same assignment. The desktop recognizes muse, offers every orchestrator model and shows work from all your organizations. And a deploy publishes macOS and Linux by default, warning when a piece is left behind.

New

2
  • brain

    The organization brain is encrypted, audited and searched on the server

    #2558fa83cd0

    Each item is stored encrypted, with an append-only access audit, server-side search that preserves encryption, incremental pull, and saving that proposes superseding instead of duplicating.

  • mcp

    The brain is queried over local MCP, with agent catalog and delivery

    #245ef9cdd0a

    Cardumen exposes its brain over local MCP and publishes the agent catalog and its delivery state.

Fixed

5
  • agent network

    An unowned envelope no longer enters: key, isolation and leases

    #251c0b63538

    An envelope is accepted only when its public key matches the one registered for that actor, cross-organization isolation is checked with a full matrix, and two nodes on the same team arbitrate an assignment with expiring leases.

  • desktop

    muse regains identity, icon and usage, and WIP sees every organization

    #2677cb886a7

    muse regains its icon, session identity and usage, and starts without approval gates; the orchestrator selector offers every model; and My WIP refreshes identity, so work from all your organizations shows up.

  • core

    The orchestrator does not dispatch with itself, and delivery is required before stop

    #26234bbe333

    The orchestrator no longer dispatches with subagents from its own thread, a session cannot finish without delivering, and the terminal list distinguishes a live agent from a dead shell.

  • deploy

    Deploy publishes macOS and Linux by default and warns when pieces drift

    #26913bd58d5

    A deploy publishes macOS and Linux by default, separates the app and CLI platform vocabularies so they cannot collide, and reports when API, CLI and desktop end up on different versions.

  • quality

    QA credentials come from the store the UI sealed

    #2733dbfb6a0

    The CLI derives credential references from the store sealed by the UI, and status stops reporting «encrypted» when no role can actually use those credentials.

Improved

1
  • desktop

    GitHub star prompts are gone from the desktop

    #2749511f2d3

    The badge, the toast and the observer that waited for a value moment to ask for a star are removed.

v1.9.1

  • Commits 9511f2d3..7b52451e

App deploy is requested by subtraction (`--skip linux` leaves only macOS) and does not mix with the explicit list. QA signs minisign attestations with a trust document versioned in the repo.

New

2
  • deploy

    App deploy is requested by subtraction, not by repeating the whole list

    #2769c48e083

    deploy-app.sh --skip linux and APP_SKIP_PLATFORMS=linux subtract from the macos,linux default. They cannot mix with --platforms. Skipping both fails: nothing is left to publish. --skip windows reports that it removes nothing, because Windows is already outside the default.

  • quality

    QA signs minisign attestations with a trust document in the repo

    #275aa70fd6d

    cardumen qa attestation issue seals a target digest. The public trust lives in .cardumen/qa/attestation-trust.v1.json, versioned with the workspace. The secret key comes from MINISIGN_SECRET_KEY; the document's public key does not travel in runtime state.

v1.8.18

  • Commits d711d7d9..b19363e5

Astra enters the price table and an unpriced model stops wiping the day. Skills come from one catalog, install from the repo or MCP, and the orchestrator starts with role, model and root folder. Grow 360 provisioning leaves the owner operational, with a desktop license and a tenant credential.

New

5
  • coste

    `gpt-6-astra` enters the table, and the CLI stops billing it as Sonnet

    #224a620fc46

    The row comes from OpenAI's Standard table, with both long-context bands. The CLI also lacked gpt-5.6-luna, gpt-5.4-mini and gpt-5.4; without own gpt-5.4-nano and gpt-5.4-pro rows, the gpt-5.4 substring gave them the large model's rate.

  • artifacts

    «Share as artifact» publishes on the Arrecife card and is read in Canvas

    #21685de36c3

    It no longer goes to a cloud that does not exist. Who reads the artifact is who reads the card: there is no public link. cardumen artifacts share|update|unshare|list uses the same arr_ key as Tasks. Sharing the same file again is the next revision, not a second attachment.

  • skills

    Skills install from the repository or from an MCP, with no cloud

    #2118fc36633

    cardumen skills install --from-repo takes what is versioned in .claude/skills or .agents/skills. --from-mcp speaks Arrecife or Carnada contracts according to the tools the server publishes. A body with hooks:, command: or postinstall: is rejected before touching disk.

  • skills

    One skills catalog, read by the binary and by the desktop

    #2100fd7d191

    lib/skills-catalog.json is derived from where each body lives. Hand-written lists go away. The binary embeds those with distribution: "binary"; the desktop publishes the whole catalog and marks which travel in the bundle. A parity test fails if one side sees a skill the other does not.

  • api

    `/v1` accepts the tenant credential provisioning issues per organization

    #205ab49a0fc

    provision-account issues cg360_… in the same transaction and returns it as serviceCredential. It rotates on each signup: an organization has one live key. The tenant comes from the credential; if the header names another, 403 ORGANIZATION_MISMATCH. An idempotent replay does not show the secret again.

Fixed

10
  • coste

    Each price row is audited against the vendor page, not by analogy

    #22890dba636

    Fable 5.1 stops inheriting Fable 5 cache. Sonnet 5 keeps the launch price as standard. The gpt-5.6-* rows seeded by analogy are aligned. xAI models stop falling into the Sonnet default. What a vendor does not publish is said, not invented.

  • cli

    First-party skills travel in the binary and the orchestrator gets its contract

    #2276841582a

    Without the app registered, cardumen skills show orchestration returned the stub and the orchestrator did the work. The whole catalog is now embedded. Session-start injects the role contract and the four dispatch commands. A normal agent does not get that block.

  • desktop

    The floating orchestrator starts with its role, its model and its root folder

    #226dc48bb80

    «Start orchestrator» now declares CARDUMEN_SESSION_ROLE=orchestrator and the catalog ceiling. Settings → General gains «Orchestrator root»; without it it does not start in ~. The tab remembers the first pane's cwd so it does not respawn in the home folder.

  • coste

    An unpriced model stops wiping the day's total

    #225655768c3

    What is priced is shown; below it, how many tokens remain unpriced is declared. The model row becomes «No price». Only when nothing is priced does it still say the cost is unknown: a zero would be the other lie.

  • hooks

    Graph-first lets the literal sweep through after the third block, instead of repeating it

    #2218f1bf969

    A wide rg outside the graph stayed red on the fourth try. Now the first three block with the bypass command ready; from the fourth onward it warns, lets it through and keeps counting. Narrowing to a named file does not enter the cap.

  • api

    Grow 360 signup issues the owner's desktop license, not only their seat

    #215323b98ad

    The owner's license is included in the plan, as in Cardumen's own checkout: idempotent, without downgrading a courtesy one. It follows the seat: if that seat is revoked it is not issued. It is written in the same signup transaction, so a rollback does not leave an orphan license.

  • api

    Signup leaves the owner operational: `owner` seat and `ORG_OWNER` role

    #209387a1dd3

    Without that, /v1 answered ACTOR_NOT_A_MEMBER to the buyer themselves. Re-provisioning repairs already-sold organizations and does not revive a revoked seat. The owner's seat does not count against the plan cap. An owner with a live seat in another organization is 409 and the signup is undone.

  • cli

    A `--model` the agent does not accept is rejected before the worktree is created

    #2084b97eb16

    worktree create returned ok and launched a made-up id. The catalog decides in one place already shared by worktree, terminal and runtime. Codex, Cursor and xAI do accept ids outside the seed. --json says which model started and where it came from.

  • desktop

    «Connect Arrecife» asks only for the personal key; the URL lives under advanced

    #20799ad8f64

    The dialog asks for arr_*. The URL is prefilled and hidden; «Own install» reveals it. The default stops pointing at a host that does not resolve and becomes https://admin.arrecife.app/mcp. After connecting it shows name, kind=human and the organizations reached.

  • cli

    The `browser` group shows its 45 commands, and `upload` accepts the chooser button

    #206019006a7

    browser --help only listed find and wait. The rest existed and could not be discovered. upload intercepts the file chooser when the ref is not an <input type=file>, so the native dialog no command can reach does not open. find --action upload takes files by locator.

v1.8.19

  • Commits a44de37b..0f8fbac9

An official rate is no longer overwritten by sync, and the platform owner lists gaps and corrects rows. Grow 360 signup links the organization that already existed instead of creating a duplicate. The migration runner points at the database `CARDUMEN_ENV` names.

Fixed

2
  • api

    The official rate wins, and the owner sees gaps and can correct them

    #231228e4d7c

    Precedence official > Artificial Analysis > OpenRouter: a sync never degrades an official row. GET /backoffice/model-prices pages and filters the unpriced; /gaps names orphan traffic; a PUT with an HTTPS documentation URL writes official. Sync failures are not confused with an unpriced model.

  • api

    Grow 360 signup adopts the organization that already existed, instead of creating another

    #22932ad13a1

    If the buyer already owns a row without external_id, the Arrecife tenant is linked and the cap is raised, never cut. Two candidates are ambiguity and signup stops. A repair script has --dry-run; --apply in production requires --allow-production.

Improved

1
  • precios

    The migration runner chooses the database with `CARDUMEN_ENV`

    #2320f8fbac9

    Without that variable the runner does not point at production. The runbook and the official OpenAI rates migration now use CARDUMEN_ENV=prod node infra/sql/migrations.mjs, --dry-run first. It remains one transaction, once.

v1.8.16

  • Commits 840aa0f8..e9ecc646

Developer memory is back: it is encrypted, injected at session start, and the Arrecife console reads it naming the person. Telemetry drains on its own, stops billing cache as new input, and computer use brings the window forward without anyone holding it.

New

7
  • memory

    The Arrecife console comes in through the tunnel, naming the person

    #1920b665229

    Memory routes accept the Grow 360 service key only with X-Grow360-Actor. The key alone is 401: it names nobody. The email must have a live seat in that organization; existing in Cardumen is not enough.

  • memory

    The person owns their memory, the administrator leaves a trail, and the first batch enters review

    #191bcee22ee

    Export and undo are the owner's gestures. An administrator read is logged. The initial batch is not activated blindly: it enters review so errors are not memorized as lessons.

  • memory

    Session close saves what was learned, with a threshold, dedupe and a cap

    #190a97463c5

    One distillate per session, on the cheapest model or a local one. Model confidence cannot raise the trigger's. Work that did not close green enters review even if it scores high. Without a network it still distills; CARDUMEN_NO_MEMORY=1 cuts off before gathering.

  • memory

    Developer memory is back: session-start injects it, the CLI explains it and MCP exposes it

    #189ffebbd6f

    Pull keeps a mirror with confidence and project. Ranking is not by date. Session-start injects «What Cardumen knows about you» (1,500-character cap, no fences or diffs). MCP serves profile, search and the seat view.

  • memory

    A memory item travels from the CLI to the server and back, encrypted and without code

    #188cf741f44

    Own tables, envelope encryption and a sanitizer that rejects diffs, fences and secrets, returning the reason. A revoked seat stops reading its memory at once. Code is never stored.

  • telemetry

    Work facts reach the server, not only spend

    #1821d62f831

    Besides usage, Cardumen sends hook blocks, worktree closes and outcomes. Friction counts and finished assignments no longer live only on the local disk.

  • telemetry

    The local queue drains on its own and says how long it has been waiting

    #1808f85bdb1

    The desktop empties every identity 30 s after launch and every 5 min. Backoff is real (5xx/429 vs 4xx) and a rejected event is never dropped: it is billing data. The indicator shows the wait.

Fixed

8
  • memory

    The administrator view accepts the organization id Arrecife knows

    #19350b90310

    The path accepts the internal id or the externalId (corg_…), and it must be the key's organization. Without that fence the id chose a tenant and the console got 403.

  • computer use

    The provider brings the window forward itself, instead of asking a person to hold it

    #187e5c5f3d3

    Discovery and focus escalate on their own (raise, unhide, activate). The keyboard gate retries focus; if it cannot, it names the failure instead of recommending --restore-window.

  • telemetry

    A run against a real Postgres uncovers three figures that were lying

    #186088b6f78

    Blocks are read from the detail, not from the worktree rollup. A worktree_closed does not split the worktree into an unknown bucket. Notices travel as codes and the panel translates them.

  • telemetry

    The getQueueStatus channel is registered where it is declared, and with a guard

    #185bbe29136

    usageOverview:getQueueStatus is registered last, matching the list. It carries assertTrusted like the other channels: an untrusted renderer does not read the queue.

  • desktop

    The fake response's fixed expiry stopped being in the future and turned develop red

    #184cffc839b

    Artifact tests no longer use an absolute date. Expiry is computed from the run clock, so a publish does not vanish at UTC midnight.

  • telemetry

    Cache is no longer billed as new input and the panel says where the money goes

    #18303a6cfc0

    Billable input is prompt minus cache reads. Cache rates come from the catalog or the vendor's published rule; without a rule no discount is invented. The panel splits new input, cache and output.

  • profile

    The profile does reach the server: the push never ran

    #18121c106b1

    profile sync only pulled. Consensus now stamps the clock and the paths merge understands. A 403 and «nothing to send» no longer look the same.

  • CLI

    The press verb reaches the backend and the web runtime notice stops being born in English

    #177a9f65cb4

    cardumen press was in the spec and not in the binary front door, so it did not exist. The per-repository source-control copy is translated at call time, not when the module is imported.

Improved

1
  • memory

    Design of durable developer memory

    #1798b143050

    The S0 contract: taxonomy, envelope encryption, capture on session close, recovery in session-start/CLI/MCP and the «What Cardumen knows about you» screen. Never code. The portrait and team brain stay in their tables.

v1.8.17

  • Commits 478b2aeb..33807830

Desktop opens Subscriptions and «What Cardumen knows about you» on the account. The Arrecife console closes seats, teams, brain, MCP and tenant usage over `/v1`. Deploy stops dying on the historical reprice: DDL ships alone and a mutual lock names who is blocking.

New

5
  • desktop

    Settings opens Subscriptions: each subscription with what is left

    #2003da0a401

    One card per connected subscription: provider, plan, each window with %, bar, time until reset and status. It consumes the same rateLimits as the bottom bar, so they cannot disagree. A provider with no windows says it does not report limits. The bar, Stats and the account link here.

  • grow360

    Seats are written over `/v1`, and startups and tools come out

    #1970b7dbf32

    Invite, resend, revoke and the list with revokedAt and licenseStatus. What the plan sells without provisioning comes out pending, never active by inference. Re-inviting an active seat stays allowed: recovering onboarding is not a conflict. installCommand and the deep link are not published.

  • desktop

    «What Cardumen knows about you» lives in Settings → Cardumen Account

    #19606869e00

    Portrait, project trail and lessons with pending ones first. One click opens edit, approve and forget, with five seconds to undo. Settings starts in the «You» group. Without a license, CARDUMEN_NO_MEMORY or a network, each reason has its own line; the corpus is rendered as text, never as HTML.

  • grow360

    Organization teams, brain and MCP come out over `/v1`

    #195714713b2

    The organization comes from X-Grow360-Organization, never from the path. Writes are attributed to X-Grow360-Actor; without that header, 403. After adding to a team the whole team is returned, re-read. A BRAIN_NOT_INCLUDED is not invented: today the brain is not gated by plan.

  • grow360

    Tenant usage and cost are read over `/v1/organization`

    #194de156f64

    Dashboard, users and projects delegate to the same services as the owner's panel. The organization comes from the header, not the path. An extra field breaks the strict client, so the facade projects the contract and does not invent numbers. A foreign seat and a missing one get the same 404.

Fixed

2
  • deploy

    A blocked DDL names who holds it, and does not step on the reprice

    #19907ae99a9

    A 10 s lock_timeout tells «I am blocked» from «this statement is slow». The census names pid, tables and state; the program never kills a backend on its own. Deploy and reprice exclude each other with a session lock. Ctrl+C cancels the batch, rolls back the half-done day and releases the mark.

  • deploy

    The 6 September migration stops taking the deploy down

    #1985e7c4910

    The runner applies statement by statement and names file, ordinal and the guilty SQL. Historical reprice leaves the migration: DDL ships, the backfill runs after the API and does not block the release. A mid-run cut resumes; SKIP_REPRECIO=1 skips it on purpose.

v1.8.12

  • Commits 24a50624..28918adb

Muse Code lands as an agent, a deployment-branch guard the agent cannot turn off, and telemetry finally knows which PR came from which worktree. Auto is shown switched off, Mobile leaves Settings, and Codex orchestrates on GPT-6 Astra.

New

6
  • telemetry

    The PR returns to its worktree, and so does its outcome

    #16028918adb

    A pr_created carries worktree, branch and head; pr_status records CI and integration only when they change. If no agent worked on that path, the PR stays unowned. The efficiency report measures delivery, time to PR and survival without a follow-up fix.

  • settings

    Auto appears under Workflows, switched off; Mobile is hidden

    #1598de789c0

    Settings shows Auto so the future contract is visible, with every control disabled. Mobile leaves the sidebar and the search under a flag; the emulator card is left alone.

  • Cardumen

    Protect deployment branches: a guard the agent cannot remove

    #156e1459052

    The binary blocks push, merge, rebase and GitHub API shortcuts onto main/develop/staging. Opening a PR stays allowed. No env var, flag or prompt bypasses it; it is turned off only in Settings → Git, on by default.

  • telemetry

    Efficiency inventory by model and agent, and the query that exercises it

    #155d2446d45

    The report groups spend and outcome by model and agent. Where there is no observation yet it prints a dash, not a zero, so it does not fake performance.

  • terminal

    Shell history can be per worktree, per repo or per user

    #1535a9997cf

    By default each worktree stays isolated. In Settings it can be shared across worktrees of the same checkout or across every tab of the user, so autocomplete has something to suggest from.

  • desktop

    Muse Code lands as a terminal agent; Meta is no longer a bridge

    #15110cffb2a

    muse authenticates on its own, takes the prompt on argv, and Cardumen pre-writes workspace trust so the session does not hang on the trust menu. The Meta bridge that existed because there was no CLI is gone.

Fixed

9
  • desktop

    build:linux refuses to run on a host that is not Linux

    #1587550628c

    On macOS or Windows the script stops before entering node-gyp. The message says Linux packaging belongs on a Linux runner, not a cross rebuild.

  • Cardumen

    The deploy guard derives the policy.json path; the path count goes green again

    #1572ce6d30f

    Reading .cardumen/policy.json goes through the versioned artifact, so the contract that counts hand-built paths no longer treats the guard as a leak.

  • downloads

    The download artifact contract covers Windows and Linux

    #1492cf879fe

    The release spec names Win installers and AppImage as well as the macOS dmg. A rollback or a stale landing no longer assumes Apple is the only target.

  • desktop

    GPT-6 Astra lands in the Codex catalog and the orchestrator starts at the real ceiling

    #154be24120f

    gpt-6-astra is the most capable; hidden provider ids drop out and what codex debug models lists comes in. With no public price, its spend shows as unknown cost, never as $0.00.

  • guards

    The gates tell «I don't know» apart from «there is nothing»

    #152987dcad4

    Without attribution, Stop, task done, the UI waiver and the stop-gate stop treating an empty list as «it touched no code». The whole tree is judged; a clean working tree still requires nothing.

  • telemetry

    work_kind is classified when the event is emitted; Stats & Usage moves up in the sidebar

    #1503bf6c040

    Orchestration is no longer billed as project development. The role is resolved from the session being ingested, not from the sweeping process environment. Stats & Usage sits closer to hand in the sidebar.

  • desktop

    The AppImage and installer take their name from the real architecture

    #14727b5e04c

    arm64 and x64 no longer collide in the artifact name. A Linux build publishes the file that matches the runner, not a generic name that breaks the landing.

  • desktop

    The Electron check looks at the host, not the rebuild target

    #14676703d55

    A native-module rebuild uses the platform where the command runs. Asking for a Linux target from macOS no longer makes the hook believe it is on Linux.

  • landing

    The Mobile CTA is hidden while the product does not exist

    #148a1016848

    The Mobile hero «Get started» is gone. There is no app to open, so it does not promise an onboarding that does not exist yet.

v1.8.13

  • Commits 991cb9c1..b9ce4290

The Git pane shows each submodule, Grow 360 seats are no longer infinite, and a stuck session is told apart from one that is working. Stats & Usage no longer contradicts Today; on macOS the computer-use permission holds again.

New

4
  • source control

    One section per repository, so work inside a submodule is no longer invisible

    #168c73d6401

    Under the root, each submodule shows its branch, files and commit. Committing writes inside the submodule and does not move the parent pointer. A repo with no nested checkouts hides the block; a deployment branch shows distance and does not offer push.

  • telemetry

    A hook block now knows how long it lasted, and the worktree when it ended

    #164d1d8b908

    A gate that blocks starts the clock; the next invocation that lets work through stops it and records duration. A closed worktree is its own outcome, not a hole in the journal. An abandoned stall is not given a fake twelve hours.

  • API

    Cardumen receives Arrecife provisioning, and seats are no longer infinite

    #162342219e5

    Arrecife sends account grants, revokes and credits; Cardumen still issues the license and enforces the seat cap. The N+1 invite is rejected with the live count and is expanded in Arrecife, without inventing a second balance.

  • runtime

    The listing marks the session that is waiting, not the one that is spinning

    #161d1234cd5

    terminal list and worktree ps publish attention: a modal, an unsent draft, a signed-out session or output stalled on new content, not spinner bytes. A row with no mark needs nothing; the orchestrator stops claiming a spinning session is working.

Fixed

2
  • telemetry

    Stats & Usage stops contradicting Today, and both say what they are counting

    #169cf7acd18

    Billed tokens and tokens without cache are labeled apart; cost uses the former. A project is a project_key in a scope, and orchestration and unattributed work no longer vanish from the top-5. Both screens are tested on the same window.

  • computer use

    A granted permission holds again, and the panel stops reopening

    #16788c0b568

    On macOS, computer use only trusted Orca bundle ids and reopened Accessibility on every attempt. It now authorizes Cardumen, launches the helper through LaunchServices, and does not send you to Settings when the failure is identity, not permission.

v1.8.14

  • Commits b990dcab..e353f324

The Codex-to-NVIDIA bridge no longer dies on launch: it uses the API the CLI accepts, declares the provider name, and reads the key already stored in Accounts.

Fixed

1
  • providers

    The Codex-to-NVIDIA bridge no longer dies three times before the first request

    #1719fd04530

    Codex 0.153 no longer accepts wire_api = chat; NVIDIA switches to responses. The required provider name and env_key are emitted, so the AI Provider Accounts key reaches the spawn instead of needing a login-shell export. Claude does not use this bridge: the NVIDIA gateway does not serve /v1/messages.

v1.8.15

  • Commits af2bf2f1..31d44893

/descargar asks the API what is published, the guard lets a working-branch rebase finish, and the embedded browser stops clicking the wrong button.

New

1
  • landing

    /descargar offers the detected platform by asking the API, not by hardcoding it

    #1749dfee6fc

    Windows and Linux stop being «Coming soon» in code. If the API returns 200, the button gets the href, version and SHA-256; if there is no release, it stays «Coming soon» with no link. Without JS, macOS stays active and the rest does not promise a file that does not exist.

Fixed

2
  • Cardumen

    The guard lets the session finish its own rebase, without releasing main

    #173fb8fc6a8

    During a rebase HEAD is detached. The guard reads rebase-merge/head-name and decides with that branch: a working branch may --continue or --abort; main stays blocked and is now named. If the file is missing, it fails closed.

  • browser

    The embedded browser stops clicking the wrong button and hanging on wait

    #172ac5ebfd3

    find --name reaches the bridge and several candidates are reported as ambiguous. wait --fn has a deadline and tells a broken expression from a still-false condition. press, cookie import and a fill that React does not discard all land.

v1.8.10

  • Commits f4fe84cb..5ea96504

Verify stops treating a step that never ran as one that ran and failed: the red signature names the real command, not the diagnostic that came with it.

Fixed

1
  • verify

    A diagnostic that never ran is no longer signed as a command failure

    #12098c1d0c6

    Empty attribution and missing-manifest notices stay as diagnostics (no exit_code). The failure signature and orchestrator only count steps that returned an exit code, so a red contract is not covered by another issue that never ran.

v1.8.11

  • Commits 57079b17..aedf4856

Less friction in the agent's working day: Fable is no longer a valid orchestrator and its usage is priced, the UI gate keeps a valid ack on an identical rewrite, and the graph bypass no longer leaks from another command on the same line.

Fixed

9
  • Cardumen

    A delegated child inherits the parent contract instead of inventing its own

    #1300a514f80

    The child process still attributes its writes to its own session. RESULT_SPEC and the baseline come from the parent's validated envelope; a malformed envelope is ignored and the gate stays closed.

  • desktop

    Desktop tests stop writing into the real developer home

    #129b1af83a4

    Each worker uses a temporary home and the guard also covers async writes. A failing test no longer contaminates ~/.cardumen or the QA vault.

  • desktop

    Fable is priced and cannot orchestrate

    #128c03309cc

    Claude Fable 5.1 lands in the catalog at USD 10/M input and USD 50/M output, and historical events are repriced. It remains available as an ordinary agent; the orchestrator rejects it even when the host returns claude-fable-5-1.

  • graph

    If the graph cannot write, it names the file and the permission

    #1264fbaaf4b

    A PermissionDenied while generating project-map.json or REPO_MAP.md is no longer a generic IO error: the message cites the operation and the path, so a read-only directory is not hunted blindly.

  • verify

    Rewriting the same bytes no longer drops the UI ack

    #127823ceae4

    The visual QA ack is compared by content. An identical rewrite refreshes the session marker and keeps the ack, so Stop does not demand another UI pass because of a different mtime.

  • hooks

    The graph bypass no longer inherits from another command on the same line

    #125459190e4

    CARDUMEN_GRAPH_BYPASS=1 only applies to the segment that performs the search. A later true && rg, or the literal inside quotes, no longer opens the sweep.

  • desktop

    The terminal no longer stays paused when it comes back into view

    #124540ba669

    Releasing the renderer pause also flushes the parked resize task. A pane that is revealed or resized paints again instead of staying black until the next observer tick.

  • relay

    An unknown control frame no longer kills the socket

    #12302bc37bb

    The relay client logs the type and continues. Previously an unrecognized control message tore down the whole protocol.

  • telemetry

    A personal seat keeps its project on OTLP events

    #1210706a31b

    Usage logs from a seat without an organization keep project_key and project_name. An org_id is no longer invented just to attribute spend to the repo.

v1.8.9

  • Commits 4d981e65..48d790fc

Cardumen stops lying to itself in daily use: Antigravity quota comes from the source, QA credentials say why they were not stored, the UI gate only fires on real edits, and verify stops reading the live graph or covering a red contract with another failure.

Fixed

11
  • contracts

    Contract tests stop inflating the hand-built path count

    #11967b316b8

    Test roots and subprocesses mark the project through the same helper, so the contract that counts hand-built paths no longer double-counts the same line.

  • Cardumen QA

    Interface QA uses Cardumen's browser and emulator first

    #118c4795a26

    QA skills no longer default to generic Playwright. In the Cardumen runtime the embedded browser and emulator come first; the rest of the cascade is fallback.

  • desktop

    Storing a QA credential says why it failed, and it syncs

    #1156da2fe4f

    If it does not store, the message distinguishes pending consent, a rejected production credential, a missing keychain or a vault write failure. What does land is sealed and aligned with the workspace.

  • desktop

    The development profile no longer overwrites the installed identity

    #114155caf93

    cardumen-dev refuses to use the installed app's userData, including QA credentials, unless you opt in with an explicit variable and a warning.

  • hooks

    The UI gate only fires on real file edits

    #1137e490708

    Reading, listing or asking no longer invalidates visual QA. The hook requires a real edit tool and now covers nested edits[] that previously slipped through unrecorded.

  • desktop

    Antigravity quota is read from the source, not inferred

    #112a2ba9011

    The status bar queries Antigravity subscription usage from its own endpoint. If the session expired, it asks you to sign in again instead of showing a figure derived from Gemini.

  • verify

    CI stops rejecting bash in the verify tests

    #111db46a626

    The verify tests invoke bash, which ubuntu-latest already ships. It is now on the CI binary allowlist; no extra install is needed.

  • Cardumen

    Agent prompt submission stops stalling mid-flight

    #107fc2a25fc

    The runtime tells a blocked prompt from one that stalled, and accepts attribution marks that land in the same instant. Fewer false positives that used to stop the flow.

  • verify

    The repo verify script counts as a team artifact

    #111ec77572c

    Paths to .cardumen/verify.sh go through the versioned team artifact. The gate against hand-built paths no longer treats that script as a leak into the checkout.

  • verify

    Verify in an agent session no longer reads the host live graph

    #1119be8fa43

    The graph-first test inherited CLAUDE_PROJECT_DIR from the editor, so it loaded the live graph.json (hundreds of MB) instead of the fixture. It now clears those variables and uses the empty test graph.

  • verify

    A red contract still measures its command, not the attribution miss

    #111c691e579

    An empty list does not seal the gate, but the contract command still runs. Otherwise an attribution failure replaces the contract's existing red and the baseline is misclassified.

v1.8.8

  • Commits 224074d2..83b24209

Cardumen stops getting in its own way: the search hook no longer loops, the visual gate stops contradicting itself, and QA configuration is usable again. Auto mode and your Arrecife tasks also land.

New

6
  • desktop

    Your Arrecife tasks, inside Cardumen

    #10683b24209

    Arrecife connects as a task source and Tasks shows the work you have in progress, with its board as the single source of truth. The key must be personal: an agent credential is rejected with its reason, because what is shown is your work, not an agent's.

  • auto

    Auto mode: a full working day with its guards

    #1053594c308

    An autonomous cycle that takes pending cards until none remain and survives closing the terminal. The guards are the product: it never integrates into a protected branch, never promotes to production by date but by checking the deployed commit, never advances a UI card without real QA, and when a business decision appears it writes it on the card and carries on.

  • Cardumen

    Launch a session choosing model, effort and mode

    #1048c843f6a

    When opening a session you can request model, effort and mode, and each value maps to what that agent accepts; when unsupported it is rejected naming what it does accept, instead of being silently ignored.

  • Cardumen

    The person, not the agent, chooses agent and model

    #10153e7abe0

    A setting, on by default, stops an agent session from opening another with an agent or model other than the configured one. It is turned off only in Settings; no hook, environment variable or flag bypasses it.

  • Cardumen QA

    QA configuration accepts the desktop license

    #992ed268da

    The desktop presents the license it already holds on disk and the handler itself verifies its signature and authority. Before, the request died at the gateway and QA configuration was unreachable.

  • Cardumen

    TuFirma pull request reviewer in shadow mode

    #96241bb0af

    Reviews TuFirma pull requests and records its reading without blocking anyone, so its judgement can be measured before it gets a vote.

Fixed

4
  • verify

    The visual gate stops contradicting itself

    #103f0f9f9ba

    The verdict is computed from content instead of file timestamps, so rewriting something identical no longer invalidates the certification. The four commands that read it now agree, and a session that did its QA can close.

  • hooks

    The search hook no longer loops

    #10205791971

    Querying a node that is not indexed counts as a query made, so the hook lets the search through instead of repeating an impossible instruction. The bypass variable also works inside a compound command line.

  • Cardumen QA

    The Role ID field keeps focus and accepts the destination system's name

    #1008ff596d8

    Typing a role no longer kicks the cursor out after every letter, and the identifier is stored exactly as it exists on the other side: uppercase, underscores or dots. The only restriction is no whitespace.

  • desktop

    A rejected provider key is told apart from a connection failure

    #9896a1f084

    When saving a provider key, the message says whether the credential was rejected or the service could not be reached.

Improved

1
  • Cardumen QA

    Documented which credentials block QA and how to check it live

    #9786e4cda2

    The documentation names the real credential blocker and the procedure to check against a live environment.

v1.8.3

  • Includes v1.8.2
  • Commits d051669b..cf7ea76d

A release about telling the truth: cost stops reading as zero when it cannot be computed, the coordination map stops inventing an empty room, and the Arrecife border stops failing quietly. Plus your CLIs can now talk to six cheaper providers.

New

5
  • Providers

    Bridge providers: run Claude Code and Codex against cheaper backends

    #58fa67e804

    Six providers — Meta, MiniMax, Z.ai, NVIDIA, Alibaba and OpenRouter — activate with nothing but an API key. Models are assigned per slot, so you can keep the large one up top and a cheap one for subagents; providers that only serve an OpenAI endpoint are not offered for Claude Code, instead of offering a detour that would go nowhere.

  • Desktop

    The Cardumen Account screen shows your account, not a login

    #5923851a34

    It was a login wall with a disabled button, even though anyone who reaches Settings is already authenticated. It now opens on identity, plan and credits, with figures for the range, a twelve-week heatmap, models and projects. Cloud sign-in drops to a quiet row at the bottom, which is what it actually is.

  • Desktop

    Per-project QA environments screen

    #6355da127b

    A new “QA environments” section in project settings: the three layers — user, workspace and module — are edited separately and shown merged, with provenance. Production refuses and explains the rule instead of letting itself be worked around, and credentials are sealed in the local keychain: they never reach the shared document, the logs or telemetry.

  • Desktop

    Delivery signals connect from the summary itself

    #56f11b752a

    The three signals in the daily summary said “Not connected” and stopped there. Each row is now a button that connects its source by adopting the gh session already on your machine: Cardumen stores consent, not the credential, so disconnecting leaves nothing to revoke.

  • Grow 360

    The Arrecife border stops failing in silence

    #6716cc052a

    Cardumen pushed to a host that does not exist and called it a success; Arrecife received nothing and showed it as “unauthorized”, indistinguishable from “the customer never bought it”. There is now a handshake before trusting, five distinct blocking causes, and a contract with a frozen fingerprint that turns CI red if anyone changes the shape of the wire.

Fixed

6
  • Cost

    Cost no longer drops to zero in silence

    #57fe7464ab

    562.8M tokens were shown as $0.00. Cost was not zero: it could not be computed, because prices resolved on the model name alone and every current model fell through without a rate. Identity is now model + provider, and anything without a rate is reported as unpriced — which is not the same as free.

  • Coordination

    The coordination map stops reporting an empty room it cannot see into

    #62d7c10283

    With the socket denied by a sandbox, Cardumen swallowed the error, invented “0 sessions” and exited successfully — with 51 sessions registered on the other side. “I could not open the channel” and “a daemon is not answering” are now different states with their cause in plain sight, and the count comes back null when it could not be taken.

  • Desktop

    The update nudge stops reappearing every half hour

    #65e47fde45

    Ever since Cardumen started checking for updates on every launch, the nudge never got marked as dismissed and fired again on every thirty-minute poll, at users who were already up to date. The desktop suite is green again too: 79 tests that had been red for a month with nobody running them.

  • Repositories

    Repos already migrated to cardumen.yaml are found again

    #64774fbc39

    Ten code paths built the filename by hand, so a migrated repo simply did not show up through them: the VM recipe doctor, unknown-key detection, and seven reads over SSH. Repos with orca.yaml keep working, with no retirement date.

  • Hooks

    The graph-first guard stops blocking legitimate work

    #68b517135a

    It blocked a git add, a fifteen-line sed -n on a named file, and a loop waiting for a process to die — and the advice attached to the block applied to none of them. It now classifies per command segment and by what the command actually does. Genuinely broad searches are still blocked, and a few that used to slip through no longer do.

  • Plugin

    The plugin looks for hooks in ~/.cardumen/hooks/

    c98adbe2

    The plugin’s hook paths still pointed at ~/.claude/hooks/, a directory the installer no longer uses.

Improved

1
  • Documentation

    What each Settings → Experimental toggle actually does

    #611ee5de11

    All eight features documented from the code: what each flag turns on, what it changes about what you already use, what it costs in processes and disk, and whether switching it off is an undo or leaves residue. Two UI descriptions promised behaviour the code did not deliver, and were corrected.