Skip to content

Releases: judell/bram

v0.2.23

Choose a tag to compare

@github-actions github-actions released this 19 Jul 03:42

Prerequisites

Bram opens an app next to your terminal, so you need a project for it to open. Any web app works — vanilla HTML/JS, a React or other Node app, a Python web app, an XMLUI app, really anything you'd otherwise iterate on in a browser tab.

One way to try Bram with real git history is:

git clone https://github.com/xmlui-org/xmlui-weather

That gives you a working repo to explore in the Bram workspace, and you can stage work items as local git commits to get a feel for that flow. If you want Bram to modify xmlui-weather, install the XMLUI CLI (which also includes the MCP server) per https://xmlui.org/get-started. Note that Bram itself doesn't require XMLUI; substitute whatever toolchain your project needs.

Now continue with the steps here.

Install

macOS / Linux

curl -fsSL https://github.com/judell/bram/releases/download/v0.2.23/install.sh | bash

The script detects your platform, verifies the archive's SHA256 against the published SHA256SUMS, extracts the binary, and copies it to /usr/local/bin (if writable) or ~/.local/bin. On macOS it also clears the com.apple.quarantine xattr. No sudo required.

Confirm the install:

bram --help

Windows

powershell -NoProfile -ExecutionPolicy Bypass -Command "irm https://github.com/judell/bram/releases/download/v0.2.23/install.ps1 | iex"

Downloads bram-windows-amd64.zip, verifies its SHA256, extracts bram.exe to ~/bin, and adds ~/bin to your user PATH.

Confirm the install in a new PowerShell window:

bram --help

Audit-friendly manual install

# Download artifact + checksums
curl -fsSLO https://github.com/judell/bram/releases/download/v0.2.23/SHA256SUMS
curl -fsSLO https://github.com/judell/bram/releases/download/v0.2.23/bram-macos-arm64.tar.gz   # or your platform
shasum -a 256 -c SHA256SUMS --ignore-missing
tar -xzf bram-*.tar.gz
sudo mv bram /usr/local/bin/

Other platforms: replace bram-macos-arm64.tar.gz with bram-macos-intel.tar.gz, bram-linux-amd64.tar.gz, or bram-windows-amd64.zip.

On macOS, if installing from a browser download instead of curl, also run:

xattr -d com.apple.quarantine bram

On Windows, use Expand-Archive on bram-windows-amd64.zip, then move bram.exe to a directory on your PATH.

Release notes

Headline: permission menus stay trustworthy when several agents prompt at
once, and the Transcript now shows what your tools actually did.

The biggest change is invisible when it works: during subagent fan-outs (many
prompts arriving in parallel), the agent pane now always shows the same
prompt the terminal shows — so answering in the pane always hits the prompt
you're looking at. Alongside that, tool calls render richer detail, and a new
always-on diagnostic quietly records every message send so a lost send can
explain itself later.

Permission menus you can trust during fan-out

  • The terminal arbitrates the pane. Hook menu claims are now a queue keyed
    to each tool call; the pane displays the claim whose options match what the
    terminal is currently showing. Under parallel subagent prompts the pane can
    no longer drift out of sync with the terminal, so a pane answer always
    resolves the prompt it displays.
  • Menus show the grid's own wording. When a prompt corroborates against the
    terminal, the pane adopts the terminal's exact option text — including the
    real rule scope (e.g. pmset *) — instead of a paraphrase that could
    understate what an option grants.
  • Fewer missed and stuck menus. Hardened grid detection against menu-shaped
    prose in scrollback, fixed a hook port-resolution bug that could blind the
    pane, and added a causal release so a stale claim can never pin the pane on a
    menu you've already answered. A failed command (which fires no completion
    hook) no longer leaves a menu lingering.
  • Prompt lifecycle, in one place. A new host-side PromptShown /
    PromptResolved event stream records every prompt and how it ended — the
    question every menu investigation used to reconstruct by hand.

Richer Transcript

  • See what got written. Write tool calls now render the file content as a
    syntax-highlighted code block instead of just "wrote N lines."
  • Tool inputs are visible. MCP calls, WebFetch, WebSearch, Skill, and
    others show their query/target in the row summary instead of a bare tool name.
  • Cleaner results. Structured tool results and known Markdown payloads
    render properly; iterate feedback shows as wrapped prose rather than a
    horizontally scrolling code block; worklist file paths are previewable.

Setup & voice fixes

  • Setup works on projects with existing agent files. Run Setup now appends
    Bram's coordination markers to a pre-existing AGENTS.md / CLAUDE.md
    instead of silently skipping it — fixing a stuck "Set Up Agent Coordination"
    banner.
  • Voice failures are no longer silent. When transcription fails, you get a
    toast naming the reason instead of an empty result.

Under the hood

  • Always-on strand forensics. Every message send now records an
    inject/resolution breadcrumb (with scene capture) to a small log, written
    even with tracing off — so a "message didn't land" report can be diagnosed
    after the fact, on any machine.
  • Suspicious-silence surfacing and honest surface-gap timing feed the same
    goal: menu and send issues now tend to arrive pre-diagnosed.
  • Clearer hook layout. Provider hook adapters were renamed and moved to a
    single app/provider-hooks/ directory with provider-prefixed names
    (claude-*, codex-*). Upgrading projects show the Setup banner once; one
    Run Setup and a restart complete the migration automatically.
  • New reference docs: a menu-intervention catalog and a record of upstream
    hook-API asks that Bram now implements locally.

Upgrading: the first launch of an existing project shows the Setup banner
(the new hook names). Click Run Setup once and restart — the migration
installs the renamed hooks and prunes the old ones automatically.

Change log

  • CI: point the hook-sync verify at the #217 renamed paths
  • Release v0.2.23
  • Surface the terminal menu when no hook claim can join it
  • Rescue the grid menu when no hook claim can join it
  • Remove the pre-#217 hook files the rename commit left behind
  • Make provider hook adapter names and directories explicit (#217)
  • Adopt the grid's option labels on a corroborated hook display
  • Emit a local PromptShown/PromptResolved prompt-lifecycle ledger
  • Resolve claim tool_use_id from transcripts at claim time
  • Synthesize the terminal event for failed commands from the JSONL
  • Record upstream ask: tool_use_id on PermissionRequest
  • Add docs/menu-interventions-catalog.md: retrospective and buckets
  • Restrict optimistic claim display to the claim-add moment
  • Harden grid menu detection against trailing-run poisoning
  • Queue hook menu claims and let the terminal arbitrate display
  • Make option labels primary in the post-dismiss menu identity gate
  • Fix hook port resolution and add causal stale-claim release
  • Clear the surface-gap sighting stamp on menu dismissal
  • Add always-on strand forensics with scene capture
  • Surface suspicious terminal silence
  • Surface voice transcription failures
  • Render known Markdown tool payloads
  • Allow Setup to append Bram markers to existing agent files
  • Make worklist file paths previewable
  • Format structured tool results in transcript
  • Show tool inputs in Claude transcript row summaries
  • Show Write tool content as a highlighted code block in the Transcript
  • Wrap iterate feedback as prose in the Transcript
  • Add link to 'Talking to Claude Code and Codex'

Troubleshooting

  • bram not found on PATH. Re-run the install script, or follow its printed PATH advice.
  • macOS Gatekeeper blocks first launch. The install script clears the quarantine xattr automatically. For browser downloads, run the xattr -d com.apple.quarantine command above.
  • Linux/WSL: error while loading shared libraries: libwebkit2gtk-4.1.so.0. Tauri's WebView dynamically links WebKitGTK. On Ubuntu/Debian 22.04+, install the runtime libs with sudo apt install -y libwebkit2gtk-4.1-0 libgtk-3-0 libayatana-appindicator3-1 librsvg2-2. WSL2 also needs WSLg (ships with Windows 11 and recent Windows 10 builds).
  • Update. Re-run the install command.
  • Uninstall. Delete the binary from /usr/local/bin/bram, ~/.local/bin/bram, or ~/bin/bram.exe.

v0.2.22

Choose a tag to compare

@github-actions github-actions released this 16 Jul 04:54

Prerequisites

Bram opens an app next to your terminal, so you need a project for it to open. Any web app works — vanilla HTML/JS, a React or other Node app, a Python web app, an XMLUI app, really anything you'd otherwise iterate on in a browser tab.

One way to try Bram with real git history is:

git clone https://github.com/xmlui-org/xmlui-weather

That gives you a working repo to explore in the Bram workspace, and you can stage work items as local git commits to get a feel for that flow. If you want Bram to modify xmlui-weather, install the XMLUI CLI (which also includes the MCP server) per https://xmlui.org/get-started. Note that Bram itself doesn't require XMLUI; substitute whatever toolchain your project needs.

Now continue with the steps here.

Install

macOS / Linux

curl -fsSL https://github.com/judell/bram/releases/download/v0.2.22/install.sh | bash

The script detects your platform, verifies the archive's SHA256 against the published SHA256SUMS, extracts the binary, and copies it to /usr/local/bin (if writable) or ~/.local/bin. On macOS it also clears the com.apple.quarantine xattr. No sudo required.

Confirm the install:

bram --help

Windows

powershell -NoProfile -ExecutionPolicy Bypass -Command "irm https://github.com/judell/bram/releases/download/v0.2.22/install.ps1 | iex"

Downloads bram-windows-amd64.zip, verifies its SHA256, extracts bram.exe to ~/bin, and adds ~/bin to your user PATH.

Confirm the install in a new PowerShell window:

bram --help

Audit-friendly manual install

# Download artifact + checksums
curl -fsSLO https://github.com/judell/bram/releases/download/v0.2.22/SHA256SUMS
curl -fsSLO https://github.com/judell/bram/releases/download/v0.2.22/bram-macos-arm64.tar.gz   # or your platform
shasum -a 256 -c SHA256SUMS --ignore-missing
tar -xzf bram-*.tar.gz
sudo mv bram /usr/local/bin/

Other platforms: replace bram-macos-arm64.tar.gz with bram-macos-intel.tar.gz, bram-linux-amd64.tar.gz, or bram-windows-amd64.zip.

On macOS, if installing from a browser download instead of curl, also run:

xattr -d com.apple.quarantine bram

On Windows, use Expand-Archive on bram-windows-amd64.zip, then move bram.exe to a directory on your PATH.

Release notes

New

  • Create a named session from the UI. A + New session button next to the
    Sessions title starts a fresh agent session, lets you name it, and switches to
    it — no more editing config or juggling the CLI to start a clean conversation.
    It seeds the new session with your chosen name as the first message, so the
    session exists and is current the moment you click Create. Works with Claude
    and Codex.

  • Skills launcher. A skills control in the agent pane lists the project's
    skills (.claude/skills/*/SKILL.md) as a palette — pick one, add an optional
    freeform argument, and it runs as a turn. Discoverable and argument-safe
    instead of remembering and typing slash commands. (Ships a first skill,
    loose-ends, that summarizes unpushed commits, uncommitted changes, and
    stashes.) Claude sessions for now.

  • Readable SQL tool calls. When the agent runs a Supabase execute_sql
    query, the transcript now shows the query as pretty-printed SQL and the result
    as a table, instead of a wall of raw, overflowing JSON.

Changed

  • Sessions resume by default on restart. Relaunching Bram (or reloading the
    agent) now continues your most recent session unless a project opts out —
    restarts no longer drop you into a blank conversation and lose your context.

Fixed

  • Transcript stays in sync across session rotations. When the agent's
    session changes underneath you, the transcript now re-points at the new
    session automatically instead of freezing on the old one until you reload.

  • No more false "did not reach the agent" warnings. A message sent while the
    session was switching could be wrongly flagged as lost; sends are now tracked
    correctly across a session change.

  • Codex edits render as diffs. Codex apply_patch edits (which arrive
    wrapped in its unified-exec form) now show as a proper diff in the transcript.

  • "Open in browser" works. The Target app info dialog now offers a real
    http:// URL, so opening the target app in your own browser actually launches
    it (it previously handed the browser Bram's internal scheme).

Under the hood

  • Session rotations now record their own cause, so the occasional "why did the
    agent restart into a fresh session" is self-diagnosing from the trace.
  • Added observe-only instrumentation ahead of two behavior changes (false-strand
    suppression and interrupt-after-permission turn ends) so they can graduate on
    evidence rather than guesswork.

Change log

  • Release v0.2.22
  • Self-heal stuck "delete pending" session rows
  • Add a New session button to the Sessions page
  • Render Supabase execute_sql as pretty SQL in, table out
  • Add a Skills launcher to the agent pane (#221)
  • Default continueLast to on so restarts resume the session
  • Instrument session rotation so it names its own cause
  • Force a full transcript fetch on window-miss to survive session rotation
  • Observe-only: flag user-interrupt-after-permission turn ends
  • Fix send-ledger false-strand across a session switch
  • Render Codex exec-wrapped apply_patch as a diff
  • Observe-only: flag send-ledger false-strands across a session rollover
  • Use a browser-safe HTTP URL in the Target app info dialog
  • Toast when a Push auto-closes issues
  • Auto-close issues on push; remove agent close route (security H5, #118)
  • Revert "Host-authorize issue close side effects (security H5, #118)"
  • Host-authorize issue close side effects (security H5, #118)
  • Widen the H4 authorization TTL to fit implementation time
  • Parse Codex unified-exec (custom_tool_call name=exec) tool cards

Troubleshooting

  • bram not found on PATH. Re-run the install script, or follow its printed PATH advice.
  • macOS Gatekeeper blocks first launch. The install script clears the quarantine xattr automatically. For browser downloads, run the xattr -d com.apple.quarantine command above.
  • Linux/WSL: error while loading shared libraries: libwebkit2gtk-4.1.so.0. Tauri's WebView dynamically links WebKitGTK. On Ubuntu/Debian 22.04+, install the runtime libs with sudo apt install -y libwebkit2gtk-4.1-0 libgtk-3-0 libayatana-appindicator3-1 librsvg2-2. WSL2 also needs WSLg (ships with Windows 11 and recent Windows 10 builds).
  • Update. Re-run the install command.
  • Uninstall. Delete the binary from /usr/local/bin/bram, ~/.local/bin/bram, or ~/bin/bram.exe.

v0.2.21

Choose a tag to compare

@github-actions github-actions released this 14 Jul 03:18

Prerequisites

Bram opens an app next to your terminal, so you need a project for it to open. Any web app works — vanilla HTML/JS, a React or other Node app, a Python web app, an XMLUI app, really anything you'd otherwise iterate on in a browser tab.

One way to try Bram with real git history is:

git clone https://github.com/xmlui-org/xmlui-weather

That gives you a working repo to explore in the Bram workspace, and you can stage work items as local git commits to get a feel for that flow. If you want Bram to modify xmlui-weather, install the XMLUI CLI (which also includes the MCP server) per https://xmlui.org/get-started. Note that Bram itself doesn't require XMLUI; substitute whatever toolchain your project needs.

Now continue with the steps here.

Install

macOS / Linux

curl -fsSL https://github.com/judell/bram/releases/download/v0.2.21/install.sh | bash

The script detects your platform, verifies the archive's SHA256 against the published SHA256SUMS, extracts the binary, and copies it to /usr/local/bin (if writable) or ~/.local/bin. On macOS it also clears the com.apple.quarantine xattr. No sudo required.

Confirm the install:

bram --help

Windows

powershell -NoProfile -ExecutionPolicy Bypass -Command "irm https://github.com/judell/bram/releases/download/v0.2.21/install.ps1 | iex"

Downloads bram-windows-amd64.zip, verifies its SHA256, extracts bram.exe to ~/bin, and adds ~/bin to your user PATH.

Confirm the install in a new PowerShell window:

bram --help

Audit-friendly manual install

# Download artifact + checksums
curl -fsSLO https://github.com/judell/bram/releases/download/v0.2.21/SHA256SUMS
curl -fsSLO https://github.com/judell/bram/releases/download/v0.2.21/bram-macos-arm64.tar.gz   # or your platform
shasum -a 256 -c SHA256SUMS --ignore-missing
tar -xzf bram-*.tar.gz
sudo mv bram /usr/local/bin/

Other platforms: replace bram-macos-arm64.tar.gz with bram-macos-intel.tar.gz, bram-linux-amd64.tar.gz, or bram-windows-amd64.zip.

On macOS, if installing from a browser download instead of curl, also run:

xattr -d com.apple.quarantine bram

On Windows, use Expand-Archive on bram-windows-amd64.zip, then move bram.exe to a directory on your PATH.

Release notes

Permission menus now work on a fresh clone

This is the reason to grab the update. In v0.2.20, running Bram on a project
that had no .bram.json — the normal state of a freshly-cloned repo — surfaced
no permission menus at all: the agent would sit waiting for an approval you
could see in the terminal but not act on in the pane. The menu settings applied
their real defaults only when a .bram.json already existed, so a project
without one silently started with the hook-driven menu path turned off. Menus
now default on whether or not a .bram.json is present.

Tool edits render as real diffs

Edit / MultiEdit and apply_patch tool cards used to show only "<path>
edited" plus a success line — the actual change was visible in the terminal but
not in Bram's transcript.

  • Claude Edit / MultiEdit rows now show the reconstructed change as a
    red/green diff, reusing the same diff view used elsewhere.
  • Codex apply_patch rows render git-style: the *** Begin Patch
    scaffolding is normalized into a proper unified diff with file headers and
    colored hunks, instead of raw envelope text.

Steadier status while working and while approving

  • The working verb no longer flickers. During a turn the footer kept the
    live grid verb ("Spelunking", "Shimmying", …) but a background signal
    repeatedly overwrote it with a flavorless "working"; that overwrite is
    suppressed while a fresh grid verb is present, so the status reads steadily.
  • Status stays "waiting for permission" while a menu is open. A background
    signal could briefly flip the footer back to "working" while you were being
    asked to approve; it now defers to the open menu.

Security: an interrupted approval can't be replayed

Interrupting or cancelling a turn (Esc, rejecting a menu, a provider cancel)
now invalidates the pending worklist authorization, and the mutate/commit
routes reject an interrupted or stale record. Previously an approval abandoned
by an interrupt could still advance or commit on a later turn with no fresh
click. Closes #120.

Under the hood

  • Provider-hook setup is documented per provider, and a new
    docs/menu-detection-audit.md maps exactly which detection path (hook vs.
    the xterm grid) surfaces each menu family and why — groundwork for retiring
    the timing-based fallback where the hook is authoritative.
  • The worklist commit route auto-stages installed hook twins. Committing a
    change to a canonical guard now also stages its build-synced .claude/hooks/
    copy, so a guard edit can't land half-committed and trip the CI sync check.
  • A menu surface-gap trace (observe-only) records how long a menu takes to
    reach the pane and whether a stale suppressor held it back — instrumentation
    for the remaining menu-timing work, inert in normal use.
  • Runtime coordination dot-files are gitignored; the installed Claude guard is
    re-synced from its canonical source.

Change log

  • Release v0.2.21
  • Render apply_patch tool output with DiffView
  • Apply menu-setting defaults even without a .bram.json
  • Show reconstructed Edit/MultiEdit diffs in the transcript tool card
  • Document hook approval setup by provider
  • Add docs/menu-detection-audit.md: hook vs grid dependency map
  • Fail worklist authorization closed on interrupt (security H4, #120)
  • Skip generic jsonl-non-final working verb when a fresh grid verb exists
  • Instrument menu surface-gap (observe-only, facet B)
  • Guard jsonl-non-final phase against an open permission menu
  • Auto-stage installed hook twins in the worklist commit route
  • Sync installed worklist-guard with 76b1be8 canonical
  • Gitignore the codex-reload-target and push-mirror runtime dot-files

Troubleshooting

  • bram not found on PATH. Re-run the install script, or follow its printed PATH advice.
  • macOS Gatekeeper blocks first launch. The install script clears the quarantine xattr automatically. For browser downloads, run the xattr -d com.apple.quarantine command above.
  • Linux/WSL: error while loading shared libraries: libwebkit2gtk-4.1.so.0. Tauri's WebView dynamically links WebKitGTK. On Ubuntu/Debian 22.04+, install the runtime libs with sudo apt install -y libwebkit2gtk-4.1-0 libgtk-3-0 libayatana-appindicator3-1 librsvg2-2. WSL2 also needs WSLg (ships with Windows 11 and recent Windows 10 builds).
  • Update. Re-run the install command.
  • Uninstall. Delete the binary from /usr/local/bin/bram, ~/.local/bin/bram, or ~/bin/bram.exe.

v0.2.20

Choose a tag to compare

@github-actions github-actions released this 13 Jul 05:10

Prerequisites

Bram opens an app next to your terminal, so you need a project for it to open. Any web app works — vanilla HTML/JS, a React or other Node app, a Python web app, an XMLUI app, really anything you'd otherwise iterate on in a browser tab.

One way to try Bram with real git history is:

git clone https://github.com/xmlui-org/xmlui-weather

That gives you a working repo to explore in the Bram workspace, and you can stage work items as local git commits to get a feel for that flow. If you want Bram to modify xmlui-weather, install the XMLUI CLI (which also includes the MCP server) per https://xmlui.org/get-started. Note that Bram itself doesn't require XMLUI; substitute whatever toolchain your project needs.

Now continue with the steps here.

Install

macOS / Linux

curl -fsSL https://github.com/judell/bram/releases/download/v0.2.20/install.sh | bash

The script detects your platform, verifies the archive's SHA256 against the published SHA256SUMS, extracts the binary, and copies it to /usr/local/bin (if writable) or ~/.local/bin. On macOS it also clears the com.apple.quarantine xattr. No sudo required.

Confirm the install:

bram --help

Windows

powershell -NoProfile -ExecutionPolicy Bypass -Command "irm https://github.com/judell/bram/releases/download/v0.2.20/install.ps1 | iex"

Downloads bram-windows-amd64.zip, verifies its SHA256, extracts bram.exe to ~/bin, and adds ~/bin to your user PATH.

Confirm the install in a new PowerShell window:

bram --help

Audit-friendly manual install

# Download artifact + checksums
curl -fsSLO https://github.com/judell/bram/releases/download/v0.2.20/SHA256SUMS
curl -fsSLO https://github.com/judell/bram/releases/download/v0.2.20/bram-macos-arm64.tar.gz   # or your platform
shasum -a 256 -c SHA256SUMS --ignore-missing
tar -xzf bram-*.tar.gz
sudo mv bram /usr/local/bin/

Other platforms: replace bram-macos-arm64.tar.gz with bram-macos-intel.tar.gz, bram-linux-amd64.tar.gz, or bram-windows-amd64.zip.

On macOS, if installing from a browser download instead of curl, also run:

xattr -d com.apple.quarantine bram

On Windows, use Expand-Archive on bram-windows-amd64.zip, then move bram.exe to a directory on your PATH.

Release notes

The transcript freeze is fixed

Expanding certain tool calls — reliably on large Codex sessions — could
hard-freeze the whole app until restart. The cause turned out to be an
infinite loop in the transcript's command soft-wrap: a command containing a
long unbroken token (a session-file path, an rg alternation pattern) after
its first wrapped line made the wrapper rebuild the same segment forever.
The loop is fixed, with termination now provable.

Finding it produced a set of freeze forensics that ship with this release:

  • The vendored XMLUI engine carries an eval probe — armed for 1.5s on
    each tool-row expansion click, it emits every statement, binding
    evaluation, and state action synchronously to the host trace, so a hang
    names its exact site even when the UI never recovers. It found this bug
    on its first armed click. Inert unless armed; zero cost otherwise.
  • The ResizeObserver flood detector now records per-fire identity and
    geometry in a ring buffer, dumped both on a per-second tick and
    synchronously from inside the observer callback when the main thread
    stops yielding — so a terminal freeze testifies instead of dying silent.
  • A tool-format bracket times the result formatter for large inputs.

Worklist approvals can no longer be forged from terminal text

A security-focused pass landed several structural changes (see
docs/security.md for the full assessment):

  • Approve / Drop authority is host-owned. The Worklist buttons now call
    a host command that writes the authorization record directly; the
    approved: / drop: text the agent sees is context only. Arbitrary PTY
    bytes — anything an agent or a compromised tool could print — can no
    longer mint an authorization (H2). Bracketed-paste escape sequences in
    turn payloads are neutralized (H1).
  • The target-app pane is display-only at its own origin. Embedded
    project content is served from a distinct origin with a CSP, so it cannot
    reach the PTY-driving helpers or Bram's internal routes (C1/C1b), and the
    /__file and /__context/file routes are contained to enumerated
    allowlists (C2/C3).
  • Claude's shell commands are now worklist-gated. Write-shaped Bash
    (redirects, rm/mv/cp, git commit, gh issue mutations,
    interpreter one-liners) requires active worklist coverage or an explicit
    direct-edit authorization; read-only investigation stays free. The
    classifier ships with a built-in self-test.

The Traces switch now governs everything, live

Hook decision traces used to depend on environment variables inherited when
an agent session started, so toggling Settings → Traces silently stopped
matching what hooks actually did. The guards now report through a host
route gated on the live setting: toggling Traces takes effect immediately,
for running sessions, with no restart — verified by a toggle-off window
showing zero trace lines and hook lines resuming on toggle-on.

Smaller improvements

  • The footer shows the active model on initial load, not just after the
    first turn.
  • Commits report a pushed lifecycle event once they reach the remote,
    so push-dependent flows (like close-on-commit) key off remote reality.

Change log

  • Sync installed worklist-guard with 76b1be8 canonical
  • Gitignore the codex-reload-target and push-mirror runtime dot-files
  • Release v0.2.20
  • Hook traces follow the live Traces setting, not spawn-time env
  • Gate Claude Bash mutations on worklist coverage
  • Emit pushed lifecycle event after commit reaches remote
  • Host-own worklist approve/drop authorization (security H2)
  • Neutralize bracketed paste escape in turn payloads
  • Display model on initial load
  • xmlui eval probe vendor
  • Revert transcript windowing to re-baseline the freeze hunt
  • Add sync tool-format bracket around the result formatter
  • Bound transcript render window; add sync RO-flood dump
  • Upgrade RO flood detector with identity+geometry ring buffer
  • Instrument the describe patch to catch the transcript freeze (observe-only)
  • Contain /__context/file to the enumerated Context set (security C3, #110)
  • Contain /__file reads to an allowlist of roots (security C2, #110/#113)
  • Add target-pane CSP and document display-only isolation (security C1b)
  • Isolate the target-app pane at a distinct origin (security C1, #113/#112)
  • Add docs/security.md: triaged security assessment and action plan
  • update readme
  • Update image in README.md

Troubleshooting

  • bram not found on PATH. Re-run the install script, or follow its printed PATH advice.
  • macOS Gatekeeper blocks first launch. The install script clears the quarantine xattr automatically. For browser downloads, run the xattr -d com.apple.quarantine command above.
  • Linux/WSL: error while loading shared libraries: libwebkit2gtk-4.1.so.0. Tauri's WebView dynamically links WebKitGTK. On Ubuntu/Debian 22.04+, install the runtime libs with sudo apt install -y libwebkit2gtk-4.1-0 libgtk-3-0 libayatana-appindicator3-1 librsvg2-2. WSL2 also needs WSLg (ships with Windows 11 and recent Windows 10 builds).
  • Update. Re-run the install command.
  • Uninstall. Delete the binary from /usr/local/bin/bram, ~/.local/bin/bram, or ~/bin/bram.exe.

v0.2.19

Choose a tag to compare

@github-actions github-actions released this 09 Jul 05:00

Prerequisites

Bram opens an app next to your terminal, so you need a project for it to open. Any web app works — vanilla HTML/JS, a React or other Node app, a Python web app, an XMLUI app, really anything you'd otherwise iterate on in a browser tab.

One way to try Bram with real git history is:

git clone https://github.com/xmlui-org/xmlui-weather

That gives you a working repo to explore in the Bram workspace, and you can stage work items as local git commits to get a feel for that flow. If you want Bram to modify xmlui-weather, install the XMLUI CLI (which also includes the MCP server) per https://xmlui.org/get-started. Note that Bram itself doesn't require XMLUI; substitute whatever toolchain your project needs.

Now continue with the steps here.

Install

macOS / Linux

curl -fsSL https://github.com/judell/bram/releases/download/v0.2.19/install.sh | bash

The script detects your platform, verifies the archive's SHA256 against the published SHA256SUMS, extracts the binary, and copies it to /usr/local/bin (if writable) or ~/.local/bin. On macOS it also clears the com.apple.quarantine xattr. No sudo required.

Confirm the install:

bram --help

Windows

powershell -NoProfile -ExecutionPolicy Bypass -Command "irm https://github.com/judell/bram/releases/download/v0.2.19/install.ps1 | iex"

Downloads bram-windows-amd64.zip, verifies its SHA256, extracts bram.exe to ~/bin, and adds ~/bin to your user PATH.

Confirm the install in a new PowerShell window:

bram --help

Audit-friendly manual install

# Download artifact + checksums
curl -fsSLO https://github.com/judell/bram/releases/download/v0.2.19/SHA256SUMS
curl -fsSLO https://github.com/judell/bram/releases/download/v0.2.19/bram-macos-arm64.tar.gz   # or your platform
shasum -a 256 -c SHA256SUMS --ignore-missing
tar -xzf bram-*.tar.gz
sudo mv bram /usr/local/bin/

Other platforms: replace bram-macos-arm64.tar.gz with bram-macos-intel.tar.gz, bram-linux-amd64.tar.gz, or bram-windows-amd64.zip.

On macOS, if installing from a browser download instead of curl, also run:

xattr -d com.apple.quarantine bram

On Windows, use Expand-Archive on bram-windows-amd64.zip, then move bram.exe to a directory on your PATH.

Change log

  • Release v0.2.19
  • Describe commands in transcript expansions
  • Pre-release docs sweep: routes, trace vocabulary, menu lineage
  • Make the send-ledger footer notices dismissable
  • add link
  • Institutionalize log-first development in conventions.md
  • Reveal-floor observer; structural grid-emit deferral predicate
  • Instrument turns projection phases; record the compaction-cost analysis
  • Build gated-edit menu previews from the PermissionRequest hook payload
  • Add apply_patch transcript smoke marker
  • Keep transcript and worklist surfaces current
  • Keep explicit session reload current
  • Sync projected transcript updates
  • Show apply_patch bodies in transcript
  • Bound live turn projection and gate edit hints
  • Sync Worklist dock from projected turns
  • Update issue 214 cleanup status docs
  • Deduplicate GUI Escape toolbar sends
  • Exempt shell-control escapes from the user-interrupt cascade
  • Retire the latest-tail push pipeline for a slim change-signal tick
  • Instrument xterm wedge liveness
  • Use send ledger for worklist submit gate
  • Log delete-phase tranches 2 and 3a in the assessment execution log
  • Retire the dismissed-menu suppressor on a fresh permission-hook claim
  • Clear stale terminal input on pane sends
  • Stop restoring delivered messages to the composer on Esc
  • Delete-phase tranche 3a: bounce heuristics and dead landing state
  • Delete-phase tranche 2: retire the Gen-2 byte-scan diagnostics
  • Record tranche-1 execution in the post-2.17 assessment
  • Tolerate nothing-matching paths when staging worklist commits
  • Key fence gate two on tool_use identity, not signature
  • Delete-phase tranche 1: dead routes, legacy iterate endpoints, doc drift
  • Roll batched edits into one previewable diff on the approval menu
  • Arm the soft turn-end check on menu No answers, like Esc
  • Give subagent-fired menus signatures; report models in the footer
  • Update README.md

Troubleshooting

  • bram not found on PATH. Re-run the install script, or follow its printed PATH advice.
  • macOS Gatekeeper blocks first launch. The install script clears the quarantine xattr automatically. For browser downloads, run the xattr -d com.apple.quarantine command above.
  • Linux/WSL: error while loading shared libraries: libwebkit2gtk-4.1.so.0. Tauri's WebView dynamically links WebKitGTK. On Ubuntu/Debian 22.04+, install the runtime libs with sudo apt install -y libwebkit2gtk-4.1-0 libgtk-3-0 libayatana-appindicator3-1 librsvg2-2. WSL2 also needs WSLg (ships with Windows 11 and recent Windows 10 builds).
  • Update. Re-run the install command.
  • Uninstall. Delete the binary from /usr/local/bin/bram, ~/.local/bin/bram, or ~/bin/bram.exe.

v0.2.18

Choose a tag to compare

@github-actions github-actions released this 06 Jul 03:32

Prerequisites

Bram opens an app next to your terminal, so you need a project for it to open. Any web app works — vanilla HTML/JS, a React or other Node app, a Python web app, an XMLUI app, really anything you'd otherwise iterate on in a browser tab.

One way to try Bram with real git history is:

git clone https://github.com/xmlui-org/xmlui-weather

That gives you a working repo to explore in the Bram workspace, and you can stage work items as local git commits to get a feel for that flow. If you want Bram to modify xmlui-weather, install the XMLUI CLI (which also includes the MCP server) per https://xmlui.org/get-started. Note that Bram itself doesn't require XMLUI; substitute whatever toolchain your project needs.

Now continue with the steps here.

Install

macOS / Linux

curl -fsSL https://github.com/judell/bram/releases/download/v0.2.18/install.sh | bash

The script detects your platform, verifies the archive's SHA256 against the published SHA256SUMS, extracts the binary, and copies it to /usr/local/bin (if writable) or ~/.local/bin. On macOS it also clears the com.apple.quarantine xattr. No sudo required.

Confirm the install:

bram --help

Windows

powershell -NoProfile -ExecutionPolicy Bypass -Command "irm https://github.com/judell/bram/releases/download/v0.2.18/install.ps1 | iex"

Downloads bram-windows-amd64.zip, verifies its SHA256, extracts bram.exe to ~/bin, and adds ~/bin to your user PATH.

Confirm the install in a new PowerShell window:

bram --help

Audit-friendly manual install

# Download artifact + checksums
curl -fsSLO https://github.com/judell/bram/releases/download/v0.2.18/SHA256SUMS
curl -fsSLO https://github.com/judell/bram/releases/download/v0.2.18/bram-macos-arm64.tar.gz   # or your platform
shasum -a 256 -c SHA256SUMS --ignore-missing
tar -xzf bram-*.tar.gz
sudo mv bram /usr/local/bin/

Other platforms: replace bram-macos-arm64.tar.gz with bram-macos-intel.tar.gz, bram-linux-amd64.tar.gz, or bram-windows-amd64.zip.

On macOS, if installing from a browser download instead of curl, also run:

xattr -d com.apple.quarantine bram

On Windows, use Expand-Archive on bram-windows-amd64.zip, then move bram.exe to a directory on your PATH.

Release notes

Subagent transcripts

When in Claude Code with subagents active, a strip in the footer lists each subagent with a live running/finished badge (three most recent, the rest in a dropdown; tooltips show task, type, and model). Click one to swap the Transcript to that subagent's stream — model and status in the banner, scroll pinned to the latest — and click Main to come back.

Menus in footer

Permission menus now render in one canonical spot on every tab — in the footer, between the agent status line and the message box — so you never hunt for them or miss one on the wrong tab.

Worklist lifecycle mirrored to GitHub issues

Worklist items linked to issues can now mirror their lifecycle (propose / apply / commit) as issue comments.

Change log

  • Release v0.2.18
  • delete scratch doc
  • Assess post-2.17 consolidation candidates
  • Corroborate the absence fence: resolution and frame-provenance gates
  • Subagent pane refinements from first-day soak feedback
  • Replace menu-staleness clocks with a causal absence fence
  • Surface subagent activity in the agent pane
  • Attach the OLDEST unresolved tool_use to permission menus
  • Classify signature-less Edit/Write menus from the grid header
  • Suppress hook-owned stale-reread ghost menus after user dismissal
  • Hook permission-clear voids the held menu (menu-pending follow-on)
  • Instrument hook-clear against held-menu state for decisive diagnosis
  • Anchor menu-pending state to outcomes, not pattern presence
  • Mirror worklist lifecycle transitions to linked GitHub issues (#209)
  • Add mirror e2e scratch file (dummy #213 drive)

Troubleshooting

  • bram not found on PATH. Re-run the install script, or follow its printed PATH advice.
  • macOS Gatekeeper blocks first launch. The install script clears the quarantine xattr automatically. For browser downloads, run the xattr -d com.apple.quarantine command above.
  • Linux/WSL: error while loading shared libraries: libwebkit2gtk-4.1.so.0. Tauri's WebView dynamically links WebKitGTK. On Ubuntu/Debian 22.04+, install the runtime libs with sudo apt install -y libwebkit2gtk-4.1-0 libgtk-3-0 libayatana-appindicator3-1 librsvg2-2. WSL2 also needs WSLg (ships with Windows 11 and recent Windows 10 builds).
  • Update. Re-run the install command.
  • Uninstall. Delete the binary from /usr/local/bin/bram, ~/.local/bin/bram, or ~/bin/bram.exe.

v0.2.17

Choose a tag to compare

@github-actions github-actions released this 04 Jul 04:04

Prerequisites

Bram opens an app next to your terminal, so you need a project for it to open. Any web app works — vanilla HTML/JS, a React or other Node app, a Python web app, an XMLUI app, really anything you'd otherwise iterate on in a browser tab.

One way to try Bram with real git history is:

git clone https://github.com/xmlui-org/xmlui-weather

That gives you a working repo to explore in the Bram workspace, and you can stage work items as local git commits to get a feel for that flow. If you want Bram to modify xmlui-weather, install the XMLUI CLI (which also includes the MCP server) per https://xmlui.org/get-started. Note that Bram itself doesn't require XMLUI; substitute whatever toolchain your project needs.

Now continue with the steps here.

Install

macOS / Linux

curl -fsSL https://github.com/judell/bram/releases/download/v0.2.17/install.sh | bash

The script detects your platform, verifies the archive's SHA256 against the published SHA256SUMS, extracts the binary, and copies it to /usr/local/bin (if writable) or ~/.local/bin. On macOS it also clears the com.apple.quarantine xattr. No sudo required.

Confirm the install:

bram --help

Windows

powershell -NoProfile -ExecutionPolicy Bypass -Command "irm https://github.com/judell/bram/releases/download/v0.2.17/install.ps1 | iex"

Downloads bram-windows-amd64.zip, verifies its SHA256, extracts bram.exe to ~/bin, and adds ~/bin to your user PATH.

Confirm the install in a new PowerShell window:

bram --help

Audit-friendly manual install

# Download artifact + checksums
curl -fsSLO https://github.com/judell/bram/releases/download/v0.2.17/SHA256SUMS
curl -fsSLO https://github.com/judell/bram/releases/download/v0.2.17/bram-macos-arm64.tar.gz   # or your platform
shasum -a 256 -c SHA256SUMS --ignore-missing
tar -xzf bram-*.tar.gz
sudo mv bram /usr/local/bin/

Other platforms: replace bram-macos-arm64.tar.gz with bram-macos-intel.tar.gz, bram-linux-amd64.tar.gz, or bram-windows-amd64.zip.

On macOS, if installing from a browser download instead of curl, also run:

xattr -d com.apple.quarantine bram

On Windows, use Expand-Archive on bram-windows-amd64.zip, then move bram.exe to a directory on your PATH.

Release notes

This release rebuilds Bram's turn-sending path around a single durable filesystem transport. Message-box sends, worklist feedback, skip-worklist sends, and image-bearing turns now all travel through the same outbound-turn envelope mechanism instead of a mix of PTY text scraping, client-side parsers, and special cases.

The immediate payoff is reliability. Bram writes the full turn to disk, sends the agent a compact reference, and reconstructs the transcript from that source of truth. That makes long messages and image attachments less fragile, keeps display text readable, and removes a class of parser drift between the message box, feedback drafts, and transcript rendering.

Esc handling was rebuilt on top of the same foundation. Bram now keeps a host-side send ledger for every agent-pane send, confirms delivery from the session log, and distinguishes between a message that landed, a message that was interrupted after delivery, and a message that was stranded before the agent received it. When recovery is needed, Bram restores the user's words to the composer instead of relying on whatever text happens to be left in the terminal input. The old Resend button is gone; mechanical auto-resend remains trust-gated off while the ledger continues to soak.

The release also fixes a provider-switching edge case so live routes follow the active Claude/Codex session, and ignores Bram's generated message-draft and outbound-turn scratch directories so they do not pollute project git status.

Change log

  • Refresh esc resend release docs
  • Ignore Bram turn scratch directories
  • Ship esc resend ledger affordance
  • Use active provider session for live agent routes
  • Amend esc/resend plan: no Resend button, auto-recover taxonomy
  • Add outbound-send ledger, observe-only (esc/resend redesign phase 1)
  • Land esc/resend redesign plan of record
  • Delete dead client turn parsers (redesign step 7)
  • Switch sends to outbound-turn envelopes (redesign step 6)
  • Land turn-transport reads-first foundation: single host projection
  • Land turn-transport redesign plan after reset to v0.2.17
  • Release v0.2.17
  • Add [turn-send] trace to localize Windows send truncation
  • fix link
  • add link

Troubleshooting

  • bram not found on PATH. Re-run the install script, or follow its printed PATH advice.
  • macOS Gatekeeper blocks first launch. The install script clears the quarantine xattr automatically. For browser downloads, run the xattr -d com.apple.quarantine command above.
  • Linux/WSL: error while loading shared libraries: libwebkit2gtk-4.1.so.0. Tauri's WebView dynamically links WebKitGTK. On Ubuntu/Debian 22.04+, install the runtime libs with sudo apt install -y libwebkit2gtk-4.1-0 libgtk-3-0 libayatana-appindicator3-1 librsvg2-2. WSL2 also needs WSLg (ships with Windows 11 and recent Windows 10 builds).
  • Update. Re-run the install command.
  • Uninstall. Delete the binary from /usr/local/bin/bram, ~/.local/bin/bram, or ~/bin/bram.exe.

v0.2.16

Choose a tag to compare

@github-actions github-actions released this 02 Jul 05:59

Prerequisites

Bram opens an app next to your terminal, so you need a project for it to open. Any web app works — vanilla HTML/JS, a React or other Node app, a Python web app, an XMLUI app, really anything you'd otherwise iterate on in a browser tab.

One way to try Bram with real git history is:

git clone https://github.com/xmlui-org/xmlui-weather

That gives you a working repo to explore in the Bram workspace, and you can stage work items as local git commits to get a feel for that flow. If you want Bram to modify xmlui-weather, install the XMLUI CLI (which also includes the MCP server) per https://xmlui.org/get-started. Note that Bram itself doesn't require XMLUI; substitute whatever toolchain your project needs.

Now continue with the steps here.

Install

macOS / Linux

curl -fsSL https://github.com/judell/bram/releases/download/v0.2.16/install.sh | bash

The script detects your platform, verifies the archive's SHA256 against the published SHA256SUMS, extracts the binary, and copies it to /usr/local/bin (if writable) or ~/.local/bin. On macOS it also clears the com.apple.quarantine xattr. No sudo required.

Confirm the install:

bram --help

Windows

powershell -NoProfile -ExecutionPolicy Bypass -Command "irm https://github.com/judell/bram/releases/download/v0.2.16/install.ps1 | iex"

Downloads bram-windows-amd64.zip, verifies its SHA256, extracts bram.exe to ~/bin, and adds ~/bin to your user PATH.

Confirm the install in a new PowerShell window:

bram --help

Audit-friendly manual install

# Download artifact + checksums
curl -fsSLO https://github.com/judell/bram/releases/download/v0.2.16/SHA256SUMS
curl -fsSLO https://github.com/judell/bram/releases/download/v0.2.16/bram-macos-arm64.tar.gz   # or your platform
shasum -a 256 -c SHA256SUMS --ignore-missing
tar -xzf bram-*.tar.gz
sudo mv bram /usr/local/bin/

Other platforms: replace bram-macos-arm64.tar.gz with bram-macos-intel.tar.gz, bram-linux-amd64.tar.gz, or bram-windows-amd64.zip.

On macOS, if installing from a browser download instead of curl, also run:

xattr -d com.apple.quarantine bram

On Windows, use Expand-Archive on bram-windows-amd64.zip, then move bram.exe to a directory on your PATH.

Release notes

Typing in the message box stays responsive while the agent is working.
Before, keystrokes in the message composer could feel sluggish whenever the
agent was actively running — the busier it got, the choppier typing felt. Now
the composer stays snappy regardless of what the agent is doing.

Under the hood, the agent's status carries a running "elapsed" timer that
updates about once a second. That per-second tick was riding the same channel
the whole UI listens to, so the entire agent-status area re-rendered every
second — for a number only one label actually shows. We moved the ticking
timer onto its own isolated channel: it still counts up, but it no longer drags
the rest of the app through a re-render each second (~7× less churn while you
type).

  • Adopted the renamed PushSource component (the push-data counterpart to
    DataSource) from XMLUI core, which Bram contributed upstream.

  • Added internal responsiveness instrumentation so any future typing-latency
    regression is caught quickly.

Change log

  • Release v0.2.16
  • Decouple agent elapsed tick from the status broadcast
  • Isolate footer agent-status labels from the message composer
  • Instrument footer message-composer re-render churn
  • Stamp heartbeat drift with focus/visibility to unmask timer throttling
  • Adopt PushSource: vendor the renamed XMLUI standalone and switch usages
  • update readme
  • update readme
  • update readme
  • add link
  • update readme

Troubleshooting

  • bram not found on PATH. Re-run the install script, or follow its printed PATH advice.
  • macOS Gatekeeper blocks first launch. The install script clears the quarantine xattr automatically. For browser downloads, run the xattr -d com.apple.quarantine command above.
  • Linux/WSL: error while loading shared libraries: libwebkit2gtk-4.1.so.0. Tauri's WebView dynamically links WebKitGTK. On Ubuntu/Debian 22.04+, install the runtime libs with sudo apt install -y libwebkit2gtk-4.1-0 libgtk-3-0 libayatana-appindicator3-1 librsvg2-2. WSL2 also needs WSLg (ships with Windows 11 and recent Windows 10 builds).
  • Update. Re-run the install command.
  • Uninstall. Delete the binary from /usr/local/bin/bram, ~/.local/bin/bram, or ~/bin/bram.exe.

v0.2.15

Choose a tag to compare

@github-actions github-actions released this 01 Jul 19:42

Prerequisites

Bram opens an app next to your terminal, so you need a project for it to open. Any web app works — vanilla HTML/JS, a React or other Node app, a Python web app, an XMLUI app, really anything you'd otherwise iterate on in a browser tab.

One way to try Bram with real git history is:

git clone https://github.com/xmlui-org/xmlui-weather

That gives you a working repo to explore in the Bram workspace, and you can stage work items as local git commits to get a feel for that flow. If you want Bram to modify xmlui-weather, install the XMLUI CLI (which also includes the MCP server) per https://xmlui.org/get-started. Note that Bram itself doesn't require XMLUI; substitute whatever toolchain your project needs.

Now continue with the steps here.

Install

macOS / Linux

curl -fsSL https://github.com/judell/bram/releases/download/v0.2.15/install.sh | bash

The script detects your platform, verifies the archive's SHA256 against the published SHA256SUMS, extracts the binary, and copies it to /usr/local/bin (if writable) or ~/.local/bin. On macOS it also clears the com.apple.quarantine xattr. No sudo required.

Confirm the install:

bram --help

Windows

powershell -NoProfile -ExecutionPolicy Bypass -Command "irm https://github.com/judell/bram/releases/download/v0.2.15/install.ps1 | iex"

Downloads bram-windows-amd64.zip, verifies its SHA256, extracts bram.exe to ~/bin, and adds ~/bin to your user PATH.

Confirm the install in a new PowerShell window:

bram --help

Audit-friendly manual install

# Download artifact + checksums
curl -fsSLO https://github.com/judell/bram/releases/download/v0.2.15/SHA256SUMS
curl -fsSLO https://github.com/judell/bram/releases/download/v0.2.15/bram-macos-arm64.tar.gz   # or your platform
shasum -a 256 -c SHA256SUMS --ignore-missing
tar -xzf bram-*.tar.gz
sudo mv bram /usr/local/bin/

Other platforms: replace bram-macos-arm64.tar.gz with bram-macos-intel.tar.gz, bram-linux-amd64.tar.gz, or bram-windows-amd64.zip.

On macOS, if installing from a browser download instead of curl, also run:

xattr -d com.apple.quarantine bram

On Windows, use Expand-Archive on bram-windows-amd64.zip, then move bram.exe to a directory on your PATH.

Release notes

The headline of this release is the consolidated agent pane. The Worklist
now carries a live tail of the exchange — your last message, the agent's last
response, and any pending permission menu — so you can follow the agent and
answer it without leaving the Worklist for the Transcript. Making that
reliable took one key enabler: permission menus are now driven by the
agent's own hooks
instead of scraped from the terminal, so the menu you
answer in the Worklist is accurate and appears exactly when the agent prompts.

As a result, it is now possible to run Bram with the terminal pane closed and have
a better experience than terminal alone or terminal + GUI.

The consolidated Worklist

  • Agent dock. The Worklist page now shows your last message, the agent's
    last response, and the pending permission menu inline — read output and
    answer a menu without switching to the Transcript. Sent screenshots appear
    under "You: last message"; the last response dims while a newer message is
    awaiting a fresh reply.
  • Live activity in the footer. A fixed-width, always-visible PTY-throughput
    sparkline sits in the footer, isolated into its own component so its updates
    don't add latency to the message box.
  • Cleaner message box. Submitted messages and per-item feedback clear on
    send instead of graying-and-locking until refocus.
  • Footer actions restacked (send / skip worklist / esc, with tooltips);
    the redundant NavPanel terminal-menu keys were removed.
  • Feedback is unified into the History page timeline.

Reliable permission menus

  • Hook-primary surfacing. The agent's permission hooks POST the structured
    menu to Bram, so menus are built from data instead of scraped from bytes —
    they fire exactly when a prompt appears. Default-on, with a kill switch that
    falls back to the older grid/PTY detection. Claude and Codex both supported;
    the hook auto-installs via Setup. AskUserQuestion prompts render their option
    descriptions.
  • Fewer missed menus. Fixed the Edit/Write menu miss (hook-ownership
    suppression gate + option-count); menus left on screen after ownership was
    dropped now surface instead of stranding; and a stranded-menu reclaim
    releases stale hook ownership so a menu the hook cleared but never surfaced
    can still appear (with a stranded-reclaim trace to confirm it over time).
  • Better diff previews. The tool-call preview opens by default and its
    diff (and file-content) rendering is now single-scroller — it hugs its
    content instead of reserving a fixed tall box, and long diffs open in a
    full-screen modal, so nothing double-scrolls or wastes vertical space.
  • Security. Menu routes are guarded against foreign-agent POSTs with a
    per-session token.

Transcript & display

  • Transcript commands render as multiline blocks; tool-result expansions render
    as typed code fences.
  • In-pane preview for local-file links in the transcript.
  • The window title shows the project context.

Send reliability (#210)

  • Bounce-back recovery: when an early Esc strands a just-sent message in the
    terminal input, Bram detects it and offers a one-click resend. (The no-Esc
    variant is tracked for the next cycle.)

Setup & coordination fixes

  • #212 — Claude agent-status now reaches "finished" even when the
    per-project session dir doesn't exist at startup (watch the parent dir).
  • #211 — the Setup banner clears after a real Agent Coordination refresh
    (host-pushed External refresh); Codex AGENTS.md managed block refreshes on
    normal setup.
  • The host owns the current-provider record; the shell no longer wraps agents.

Git & commit flow

  • Fast-forward push path for close/commit, and it no longer chokes on Windows
    filemode noise.
  • The worklist-commit route stages deletions.

Docs

  • New docs/menu.md documenting the four menu-detection generations, the
    hook-primary cleanup plan, and open menu work.
  • Refreshed 2.15 coordination messaging, README, and a new blog post.

Closed issues

  • #210 — Esc right after an agent-pane send strands the just-sent message.
  • #211 — Setup banner won't clear after a real Agent Coordination refresh.
  • #212 — Claude agent-status never reaches finished when the session dir is
    absent at startup.

Change log

  • Release v0.2.15
  • docs: drop closed #210 from menu.md open issues
  • docs: track menu capture/display doc, current to v2.15
  • Clear launch dim after answered exchange
  • Remove menu parse setting
  • Dim restored agent response on launch
  • Release stale hook ownership to reclaim stranded permission menus
  • Improve the AgentMenuView tool-call preview
  • Show sent screenshots in the dock's "You: last message"
  • Restack the footer composer actions; drop the NavPanel terminal menu
  • Remove the retain-sent-message-in-box behavior
  • Add a loud stranded-menu trace for the hook-owns-slot menu miss
  • Isolate the activity sparkline to protect message-box typing latency
  • Move the activity sparkline to the footer
  • Add agent dock (menu + last exchange) to the Worklist page
  • Add live PTY-throughput activity sparkline to the Transcript nav
  • Show project context in window title
  • Render transcript commands as multiline blocks
  • Watch ~/.claude/projects parent so Claude finished-detection survives an absent session dir
  • Add #212 diagnostic instrumentation for Claude finished-detection
  • Add bounce-back recovery for early Esc sends
  • Add observe-only grid first-output-seen detector (#210 groundwork)
  • Revert the #210 Esc hold-gate to plain Esc
  • Add observe-only send-path strand instrumentation
  • Hold the toolbar Esc while awaiting a response (#210)
  • Add observe-only Esc-residue instrumentation (#210)
  • Refresh Codex AGENTS.md managed block on normal setup (#211)
  • Show sustained-presence menus instead of stranding them
  • Guard menu routes against foreign-agent POSTs with a per-session token
  • Fix Edit/Write menu miss: hook-ownership suppression gate + setMode count
  • Release hygiene: track installed hook + diagnostic, ignore backups/capture
  • Add in-pane preview for local-file links in the transcript
  • docs: refresh 2.15 coordination messaging
  • Render AskUserQuestion descriptions in menu
  • Render Transcript tool-result expansions as typed code fences
  • Gate high-frequency pty-menu-scan op=skip trace behind traces.gridScanVerbose
  • Sort issues title header by issue number
  • Add Codex hook-driven permission menus
  • docs: catalog permission menus by hook payload + grid known-edge
  • Hook-primary permission menus: coordination, 4 events, default-on
  • Auto-install the permission-menu hook via Setup
  • Hook-driven permission-menu surfacing (Claude): count by suggestion
  • Add blog post
  • Fast-forward push path for close/commit; stop choking on Windows filemode noise
  • update README image
  • revise README
  • Host owns current-provider record; shell stops wrapping agents
  • Capture proceed-menu wrap-blend specimen; declare wrapping out of scope
  • Stage deletions in the worklist-commit route
  • Unify feedback into the History page timeline

Troubleshooting

  • bram not found on PATH. Re-run the install script, or follow its printed PATH advice.
  • macOS Gatekeeper blocks first launch. The install script clears the quarantine xattr automatically. For browser downloads, run the xattr -d com.apple.quarantine command above.
  • **Linux/WSL: `error while loadi...
Read more

v0.2.14

Choose a tag to compare

@github-actions github-actions released this 26 Jun 21:45

Prerequisites

Bram opens an app next to your terminal, so you need a project for it to open. Any web app works — vanilla HTML/JS, a React or other Node app, a Python web app, an XMLUI app, really anything you'd otherwise iterate on in a browser tab.

One way to try Bram with real git history is:

git clone https://github.com/xmlui-org/xmlui-weather

That gives you a working repo to explore in the Bram workspace, and you can stage work items as local git commits to get a feel for that flow. If you want Bram to modify xmlui-weather, install the XMLUI CLI (which also includes the MCP server) per https://xmlui.org/get-started. Note that Bram itself doesn't require XMLUI; substitute whatever toolchain your project needs.

Now continue with the steps here.

Install

macOS / Linux

curl -fsSL https://github.com/judell/bram/releases/download/v0.2.14/install.sh | bash

The script detects your platform, verifies the archive's SHA256 against the published SHA256SUMS, extracts the binary, and copies it to /usr/local/bin (if writable) or ~/.local/bin. On macOS it also clears the com.apple.quarantine xattr. No sudo required.

Confirm the install:

bram --help

Windows

powershell -NoProfile -ExecutionPolicy Bypass -Command "irm https://github.com/judell/bram/releases/download/v0.2.14/install.ps1 | iex"

Downloads bram-windows-amd64.zip, verifies its SHA256, extracts bram.exe to ~/bin, and adds ~/bin to your user PATH.

Confirm the install in a new PowerShell window:

bram --help

Audit-friendly manual install

# Download artifact + checksums
curl -fsSLO https://github.com/judell/bram/releases/download/v0.2.14/SHA256SUMS
curl -fsSLO https://github.com/judell/bram/releases/download/v0.2.14/bram-macos-arm64.tar.gz   # or your platform
shasum -a 256 -c SHA256SUMS --ignore-missing
tar -xzf bram-*.tar.gz
sudo mv bram /usr/local/bin/

Other platforms: replace bram-macos-arm64.tar.gz with bram-macos-intel.tar.gz, bram-linux-amd64.tar.gz, or bram-windows-amd64.zip.

On macOS, if installing from a browser download instead of curl, also run:

xattr -d com.apple.quarantine bram

On Windows, use Expand-Archive on bram-windows-amd64.zip, then move bram.exe to a directory on your PATH.

Release notes

Worklist & approvals

  • Collapse the commit gate to one call — new /__worklist/commit route stages only the approved items' files, commits, prunes, and clears the sentinel in a single request.
  • Streamline the apply gate — approved applies skip resolve; the host sets the sentinel on the approved: turn and mutate op:"advance" consumes the auth.
  • Remove the worklist approval content-hash — drop the unused optimistic-concurrency guard; version integer remains the write-race guard.
  • Render control turns as verb: id — feedback in the transcript.
  • Document the promptless POST curl shape for worklist routes.

Terminal / PTY menus

  • Populate command preview and gate menu-building for signature-less Bash menus on the proceed header.
  • Find prose above tall command boxes.
  • Refresh the pty-menu-shapes doc for the grid-primary detector.

Settings & shell

  • Startup continue toggle and a shell-arguments input, with explanatory copy.

UI polish

  • Refresh footer session meta on agent turn transitions; match footer margins to the full-width page.

Change log

  • Release v0.2.14
  • Add startup continue toggle
  • Document promptless POST curl shape for worklist routes
  • Add worklist-commit route to collapse the commit gate to one call
  • Streamline apply-gate approvals
  • remove-worklist-approval-hash
  • Find prose above tall command boxes
  • Explain shell arguments setting
  • settings-shell-args-input
  • Render worklist control turns as "verb: id — feedback"
  • Refresh pty-menu-shapes doc for the grid-primary detector
  • Gate signature-less Bash menu build on the proceed header
  • Refresh footer session meta on agent turn transitions
  • Match footer content margins to the full-width page
  • Populate command preview for signature-less Bash menus

Troubleshooting

  • bram not found on PATH. Re-run the install script, or follow its printed PATH advice.
  • macOS Gatekeeper blocks first launch. The install script clears the quarantine xattr automatically. For browser downloads, run the xattr -d com.apple.quarantine command above.
  • Linux/WSL: error while loading shared libraries: libwebkit2gtk-4.1.so.0. Tauri's WebView dynamically links WebKitGTK. On Ubuntu/Debian 22.04+, install the runtime libs with sudo apt install -y libwebkit2gtk-4.1-0 libgtk-3-0 libayatana-appindicator3-1 librsvg2-2. WSL2 also needs WSLg (ships with Windows 11 and recent Windows 10 builds).
  • Update. Re-run the install command.
  • Uninstall. Delete the binary from /usr/local/bin/bram, ~/.local/bin/bram, or ~/bin/bram.exe.