Skip to content

Releases: corbitsdev/corbits-code

corbits 0.2.93

Choose a tag to compare

@TheGreatAxios TheGreatAxios released this 08 Aug 18:52
54a40ed

Parallel sub-agents actually work now

Running several sub-agents at once was close to unusable. The watchdog meant to
catch a hung run was killing healthy ones, approvals piled up one at a time and
printed twice, and the panel that used to show what each agent was doing had
collapsed to a single line of counts. This release fixes that path end to end.

Your agents were being killed mid-run

The stall watchdog treated any silence as a hang. In a parallel fan-out the
first sub-agent to finish flipped the run back to "awaiting a response", and
because the parent emits nothing while children work, the whole run looked
silent — so after ninety seconds it announced no response, and after fifteen
minutes it aborted everything still in flight. The watchdog now knows that work
is outstanding and stays quiet while it is.

The same watchdog also ran while you were reading an approval. Being blocked on
an operator is now part of the run's state rather than something only the
painter knew, so a prompt you take your time over cannot be torn down
underneath you. That applies to approvals still queued behind another, not only
the one on screen.

Approvals

Answer once, not once per agent. Granting a permission now clears every
queued request that grant already covers, instead of asking again for each
sub-agent that wanted the same thing. The reconciliation lives in the
permission layer, so it holds for any surface, not just the terminal.

Every approval printed twice. A screen of approvals read as twice as many
requests as had actually happened. Now there is exactly one row per decision —
including denials, timeouts, and aborts, which previously left no trace at all.
An agent that died of a refused permission looked identical to one that hung.

Grants you had already given were being ignored. A project-scoped grant was
recorded against the session root, while a sub-agent asks from inside its own
git worktree, and the two were compared as plain strings. No project grant ever
matched a sub-agent — so the agents generating the approvals were the ones that
could never benefit from a previous answer. Worktrees are now resolved through
the same registry that governs path containment, matched exactly rather than by
prefix, so a directory that merely starts with the same characters cannot pass
for one.

Watching the work

The live agents panel is back above the prompt: one row per running sub-agent
with elapsed time, current tool, and whether it has gone quiet. It holds
position as agents work rather than reordering on every event, shrinks a row at
a time when the terminal is short instead of vanishing, and when more agents are
running than fit, the quietest one stays visible — that is the one worth seeing.

Goal mode no longer sticks at "working"

Two events could register the same tool call under different identities, one by
id and one by name, so a call was counted twice and only cleared once. The turn
then waited forever on a call that had already finished. Worst in goal mode,
which keeps continuing on its own and never emitted the fallback that settles a
stuck turn.

Relatedly, run.json now records its turn count at every turn boundary instead
of only at the start and end of a session, so a resumed session reports what it
actually did.

corbits 0.2.92

Choose a tag to compare

@TheGreatAxios TheGreatAxios released this 07 Aug 19:21
2b6b0ec

A rebuilt model surface, and two bugs that could end a session

This is the second sweep over the OpenTUI cutover. Several of these were
behaviour that had been fixed once already and lost when the renderer was
replaced — the fix lived in a file the cutover deleted, so the bug came back
without anyone changing it.

Picking a model

The picker now lists providers, and you descend into one to choose a model.
Escape steps back out to the provider level rather than closing. Recents and
favourites stay flat at the top so a model you already use is one keystroke
away, and each account gets its own row instead of being flattened into a
single combined list.

Model tiers are gone. /fast, /standard, and /clever are retired
rather than remapped, because a tier was a fallback chain of providers rather
than a single model — neither a favourite nor a pinned model says the same
thing. Per-agent selection still works through the agent's own inference
setting. A settings file that still contains tiers loads fine; the key is
dropped the next time settings are saved.

The context meter was reading nearly four times low for anyone on a
custom-named provider. A 500k window showed as the 128k default, so the meter
looked comfortable while the real context filled. It now recognises
account-qualified model names, and only marks a figure as estimated when it is
genuinely guessing.

The model marked as current is the one the session is actually running. It used
to be inferred from the most recent pick, which meant any session that never
opened the picker showed the wrong one.

Two ways a session could die

Switching models used to poison the conversation permanently. Reasoning
state issued by one provider was replayed to another that could not read it,
and every turn after that failed. Reasoning state now travels with the provider
that produced it. Switching between accounts on the same provider still keeps
reasoning continuity.

A model that fell into a loop ran until you stopped it. Repetition is now
detected inside a single streaming stretch, and by comparing successive
stretches across tool calls — so a model that loops while calling a tool each
pass is still caught. Ordinary narration repeated before successive tool calls
is left alone.

The screen

  • Plugin diagnostics were writing straight to the terminal and corrupting the
    display. They go to the log now, and the warnings that used to disappear
    along with them are surfaced where you can see them.
  • The provider setup screen garbled its own text on a short terminal, with rows
    compressed into one another instead of clipping.
  • The command palette matches the prompt box width, loses its marker column,
    kind column and title rule, and marks the selected row by colour instead of a
    grey band.
  • An overlay reserves room for its own frame before anything else is allowed to
    squeeze it.
  • /resume was offering sessions that did not exist. Demo placeholder data
    was shipping in the product and appeared whenever something failed to load.
    A missing dependency now shows an honest empty state.
  • Dialogs describe their choices in plain English.

Context and files

  • Compaction stopped hollowing out the turns it had just decided to keep, so a
    file you edited two turns ago is still there when you ask about it.
  • A crash finalizes the session record instead of leaving it marked running.
  • Mentioning a file outside your workspace inlines it once rather than refusing.
    Sensitive files stay blocked, and that list now covers shell history, system
    credentials, keychains, browser cookie and password stores, and cloud
    credentials.

Your machine

An agent could rewrite your global git configuration in order to push,
which changes every repository on the machine and outlives the session. That
now asks you first, and there is a scoped push path that applies credentials
for a single command without writing to any config file.

Tools that only apply sometimes — present, goal and task management, and LSP —
are only offered when they apply. A dispatched sub-agent shows live progress on
its own row. The most recently queued message can be cancelled.

Underneath

The test suite only passed in one order. Under a randomized order it produced
over a hundred failures, because a mocking idiom used throughout was silently
leaving mocks installed for every file that ran afterwards. It now passes in any
order, and CI checks a fixed order on every change plus a random one nightly.

There is also now a written specification for how the terminal UI is meant to
look and behave, covering overlays, selectors, the palette, the prompt box,
scrolling and key macros. Nine documents describing the finished migration have
been retired.

corbits 0.2.91

Choose a tag to compare

@TheGreatAxios TheGreatAxios released this 07 Aug 06:36
f0dc610

Twenty-five fixes on the OpenTUI cutover

Most of these had no visible symptom. Sessions that hung with no way out,
memory that grew until the process slowed, and session state that quietly
corrupted itself — the kind of thing you feel as "it got weird" long before
you can name it.

The mouse changes again

0.2.90 gave the mouse to your terminal so drag-select and copy worked
normally. That turned out to break scrolling: with mouse reporting off, a
terminal translates a wheel tick into arrow-key bytes that are
indistinguishable from a real keypress, and arrows drive prompt history. So
scrolling moved through your old messages instead of the chat.

The main session shell now takes the mouse.

  • The wheel scrolls the transcript. Arrows still cycle prompt history.
  • Click-to-expand on tool rows and drag-to-scroll work immediately, with
    no need to press Alt+M first.
  • Native drag-select in the transcript is gone. Alt+M hands the mouse back
    when you want to select text, and Alt+C copies a message, tool output or
    diff without the mouse at all.
  • The onboarding and session pickers keep native selection either way.

Sessions could hang with no way out

  • Pressing Esc on a permission prompt abandoned the request the agent was
    waiting on. The session hung permanently, and Ctrl+C did not recover it —
    the interrupt never reached that promise. Dismissing now denies the request.
  • An unattended goal run could park on a permission prompt forever. The
    auto-deny timeout and the tool-watchdog abort were both being sent and
    silently discarded before they reached the prompt.
  • A permission prompt raised before anything else had rendered showed its
    title and footer but clipped its options — the layout reserved room for
    exactly one choice however many there were.
  • Messages typed while the agent was working were queued and never sent. The
    queue drained on a signal that fires once at shutdown rather than at the end
    of each turn.
  • A crash left the process alive with the terminal held. It now writes a crash
    report next to the session's own files and exits.

Memory and state drifted

  • Transcript rows were kept for the life of the process. They are bounded
    again, and history past 500 rows can be scrolled to instead of collapsing
    into an unreachable marker.
  • Appending a row in a long session no longer rebuilds the whole visible
    transcript.
  • A late progress write can no longer resurrect a finished session as still
    running.
  • Resuming a session no longer resets its turn count to zero or forgets which
    MCP servers were connected.
  • Quitting during an @-mention lookup or a clipboard read could write into
    freed memory.

The context meter told you the wrong thing

The meter read only what the provider reported, with no fallback — so a
provider that omitted usage left it frozen while the real number climbed. It
now falls back to a local estimate and marks the figure approximate when it is.

The meter and the compaction governor were also measuring different things and
could disagree by the entire size of the prompt cache. They now share one
definition, the system prompt and tool schemas are counted, and compaction can
actually act at the point it decides to.

Input and rendering

  • Pasting several lines into a terminal that does not negotiate bracketed
    paste sent each line as a separate message.
  • Markdown headings no longer flicker while text below them streams.
  • Three sub-agents dispatched at once could resolve each other's results into
    the wrong rows. Results are matched by call id.

Sub-agents run unbounded

The concurrency cap is removed, along with the maxConcurrentSubAgents
setting. An existing settings file containing it still loads. Setting it to
0 used to disable sub-agents entirely; that switch is gone with it.

corbits 0.2.90

Choose a tag to compare

@TheGreatAxios TheGreatAxios released this 07 Aug 02:26
cf3bb84

The interactive TUI is now OpenTUI

The Ink renderer is gone — deleted, not feature-flagged. If a release goes wrong,
rollback is the prior tag rather than a setting.

What moved under your hands

  • Newline is Ctrl+Enter (or Ctrl+J). Shift+Enter works only on terminals
    that report the modifier, which many do not.
  • The mouse belongs to your terminal. Drag-select and copy behave the way
    they do everywhere else. Alt+M hands the mouse to Corbits when you want
    click-to-expand or drag-to-scroll, and Alt+M again gives it back.
  • Quitting is unchanged. Ctrl+C interrupts a run; twice exits.

New

  • A zone-based layout resolver with per-zone minimums and an explicit collapse
    order, replacing React reconciliation.
  • A multi-line composer that wraps and grows to 40% of the screen before it
    scrolls.
  • Copy mode (Alt+C) that writes to the system clipboard on macOS, Windows and
    Linux, with an OSC 52 fallback for content selection cannot reach — scrolled
    off output is not in your terminal's scrollback while we hold the screen.
  • Free-text answers to questions the agent asks, instead of only picking from a
    list.
  • Live status for lifecycle hooks, subagent progress, MCP connections and
    recorded permission grants.

Connecting an MCP server

Remote MCP servers that need OAuth used to print a raw authorization URL into
the transcript the moment you started a session — nothing you could click, copy
or come back to.

  • Nothing blocks usage. A server waiting on authorization simply has no tools,
    and the notice row names it: mcp granola needs auth (/mcp).
  • /mcp lists every server and its live state. Enter on one that needs
    authorization opens the page in your browser and copies the link, so it works
    over SSH too.
  • The page your browser lands on now tells you which server connected, and
    looks like the rest of Corbits rather than a browser default.

Fixed

The ones most likely to have affected you:

  • The standalone binary could not start. It excluded its own native module,
    so a distributed binary had nothing to resolve it from.
  • Copying never worked. Alt+C wrote to an in-memory array, and mouse
    reporting stopped the terminal from selecting text at all.
  • A crash left your terminal wedged in the alternate screen with raw mode
    still on, and the process kept running.
  • Text in an approval prompt could lie. Bidirectional override characters
    reached the overlay, so a command could read as one thing and run as another.
  • Search could return far more than its cap into the model's context — and
    on machines without ripgrep it had no cap at all.
  • Pasting an API key during setup silently truncated at 1000 characters.
  • Repeated tool calls dropped every result after the first.
  • A retried turn painted itself twice.
  • Resuming an older session silently dropped some content.

Known issues

  • Shift+Enter does not insert a newline on terminals that do not report the
    modifier. Use Ctrl+Enter or Ctrl+J.
  • Markdown flickers mildly while streaming.
  • Transcript history past 500 rows cannot be scrolled back to, and rows are
    retained for the life of the process.
  • A crash in a background task, or a signal, can leave a session marked as
    still running.

Upgrading

Sessions started under the previous release resume normally. Nothing on disk
changed format.

corbits 0.2.89

Choose a tag to compare

@TheGreatAxios TheGreatAxios released this 05 Aug 16:10
1f33837

corbits 0.2.89

Install

macOS (Homebrew)

brew install corbitsdev/tap/corbits-code

Debian / Ubuntu

sudo dpkg -i corbits_0.2.89_amd64.deb   # or _arm64.deb

Any macOS or Linux (tarball)

Download the matching corbits-0.2.89-<platform>.tar.gz below,
extract, and put the corbits binary on your PATH. It is
self-contained; no runtime is required.

corbits 0.2.88

Choose a tag to compare

@TheGreatAxios TheGreatAxios released this 04 Aug 23:51
b086d1c

corbits 0.2.88

Install

macOS (Homebrew)

brew install corbitsdev/tap/corbits-code

Debian / Ubuntu

sudo dpkg -i corbits_0.2.88_amd64.deb   # or _arm64.deb

Any macOS or Linux (tarball)

Download the matching corbits-0.2.88-<platform>.tar.gz below,
extract, and put the corbits binary on your PATH. It is
self-contained; no runtime is required.

corbits 0.2.87

Choose a tag to compare

@TheGreatAxios TheGreatAxios released this 04 Aug 23:31
87acb17

corbits 0.2.87

Install

macOS (Homebrew)

brew tap corbitsdev/tap && brew install corbits

Debian / Ubuntu

sudo dpkg -i corbits_0.2.87_amd64.deb   # or _arm64.deb

Any macOS or Linux (tarball)

Download the matching corbits-0.2.87-<platform>.tar.gz below,
extract, and put the corbits binary on your PATH. It is
self-contained; no runtime is required.

corbits 0.2.86

Choose a tag to compare

@TheGreatAxios TheGreatAxios released this 31 Jul 00:35
38769dc

corbits 0.2.86

Install

macOS (Homebrew)

brew tap corbitsdev/code && brew install corbits

Debian / Ubuntu

sudo dpkg -i corbits_0.2.86_amd64.deb   # or _arm64.deb

Any macOS or Linux (tarball)

Download the matching corbits-0.2.86-<platform>.tar.gz below,
extract, and put the corbits binary on your PATH. It is
self-contained; no runtime is required.

corbits 0.2.85

Choose a tag to compare

@TheGreatAxios TheGreatAxios released this 30 Jul 02:53
cad01c4

corbits 0.2.85

Install

macOS (Homebrew)

brew tap corbitsdev/code && brew install corbits

Debian / Ubuntu

sudo dpkg -i corbits_0.2.85_amd64.deb   # or _arm64.deb

Any macOS or Linux (tarball)

Download the matching corbits-0.2.85-<platform>.tar.gz below,
extract, and put the corbits binary on your PATH. It is
self-contained; no runtime is required.