Skip to content

Releases: 0xNtive/tabby

tabby 0.6.0

Choose a tag to compare

@github-actions github-actions released this 12 Oct 10:23

Every session is on, the ones already open too. A third security pass. And tabby knows more terminals.

  • Sessions that were already open are on right away. Claude Code loads a plugin's hooks only when a session starts, so ten sessions open at install time used to need /reload-plugins each, or a restart. Hooks in settings.json do reach running sessions, so setup now adds tabby's hooks there for those sessions only: they get their color at once, and their name, status and /tab with the next prompt. In every other session the hooks stop before Node starts, and they're taken out of settings.json by themselves when the last of those sessions ends (tabby uninstall takes them out too). tabby adopt does the same any time, and tabby doctor offers it when it finds a session tabby isn't tracking.
  • Tabby Island's download is signed. The release workflow signs the zip with a key only it holds (Ed25519), and tabby checks the signature against the public key it ships with before unpacking anything; a zip that doesn't match is thrown away, and tabby builds the island from source instead when it can. The gh attestation verify call is gone: it needed gh, and it told GitHub which account was installing tabby. A zip of your own (TABBY_ISLAND_URL) is honored only outside Claude Code, where a project's settings can't set it.
  • Tabby Island runs tabby's scripts only when you click. Whatever it runs acts with its macOS permissions, so it no longer starts an update check on its own: Claude sessions do that, and the island reads what they found (or checks when you click Check Now).
  • Text that could disguise a name is taken out: zero-width characters, line separators, fillers and tag characters, and every folder path and name tabby prints is cleaned of escape codes (a folder named to set your clipboard couldn't, through tabby new --list or /tab resume).
  • Less kept, for less long. A folder's remembered color goes after 90 days unused, and tabby uninstall --purge deletes ~/.claude/tabby as well.
  • Smaller hardening. tabby procs stop checks a process's start time again right before force-quitting it. Awake ignores its test stand-ins inside Claude Code and refuses to run instead. Installs and updates without git fetch the latest release, not main.
  • Terminals. VS Code or Cursor opened from an iTerm2 or Ghostty shell is no longer taken for iTerm2 or Ghostty: the terminal's own TERM_PROGRAM decides. GNU screen and Zellij are recognized. tmux commands go to the session's own tmux server, and colors use pane options. Terminal.app before macOS 26 gets 256-color status lines, since it can't show 24-bit color. tabby doctor warns when an iTerm2 profile doesn't let programs set the title. Sessions started before tabby get their real terminal, and the island brings the right app forward for terminals it can't script, instead of opening Terminal.app. Checked against iTerm2 3.7.4: its scripting dictionary is unchanged for what tabby uses, and its documentation still lists the tab color and color codes tabby sends.

Install: paste Install tabby for me: run curl -fsSL https://claude-tabby.vercel.app/install.md and follow it. into Claude Code, or run curl -fsSL https://claude-tabby.vercel.app/install | bash. TabbyIsland.zip is what the installer downloads (it checks the .sha256 and the signature in .sig). It isn't notarized, so a copy downloaded through a browser is blocked by Gatekeeper: use the installer, or tabby island install.

tabby 0.5.1

Choose a tag to compare

@github-actions github-actions released this 11 Oct 21:11
  • A sturdier first start for Awake. After macOS writes the permission file, tabby now checks it the way sudo does (owned by root, not writable by everyone) instead of asking for one exact mode, then confirms with sudo itself that the two commands run without a password. A stricter check could have stopped a first start that would have worked.

Install: paste Install tabby for me: run curl -fsSL https://claude-tabby.vercel.app/install.md and follow it. into Claude Code, or run curl -fsSL https://claude-tabby.vercel.app/install | bash. TabbyIsland.zip is what the installer downloads (it checks the .sha256). It isn't notarized, so a copy downloaded through a browser is blocked by Gatekeeper: use the installer, or tabby island install.

tabby 0.5.0

Choose a tag to compare

@github-actions github-actions released this 11 Oct 20:57

Close the lid and Claude keeps working. And for anyone who'd rather keep the notch empty, tabby can live in the menu bar.

  • Awake: keep your Mac running with the lid closed. A Mac sleeps when you close it, and every Claude session on it stops mid-turn; caffeinate only prevents idle sleep. Click the new cup in the island (or /tab awake 4h, tabby awake done, Keep Awake in the menu-bar menu), pick 1, 2, 4 or 8 hours, and close the lid. With Sleep as soon as every session is done ticked (the default), the Mac sleeps again as soon as no session has worked for 5 minutes, and the hours are only the most it may take. Sleep also comes back on below 10% battery on battery power. A watcher keeps time, and the island, every new session and tabby doctor check on it, so a crash or a restart never leaves sleep off. While it's on, a small orange cup sits beside the dots and in the menu bar; the Awake page shows a ring with the time left, +1h and Stop; and if it ends while the lid is closed, the island tells you when you open it: "Sleep is back on · Every session is done · 4 sessions worked · at 3:12 AM".
    How: only pmset disablesleep keeps a closed Mac awake, and it needs an administrator. The first time, macOS asks for your password once (its own prompt, through authopen), and tabby adds /etc/sudoers.d/tabby-awake, checked with visudo first, which lets your user run exactly /usr/bin/pmset -a disablesleep 1 and … 0 without a password. Nothing else runs as root. tabby awake forget takes it back. See SECURITY.md.
  • Menu bar mode: no island at the notch. Choose In the menu bar in Settings › General (or Menu Bar Only in the menu-bar menu, tabby island menubar, /tab island menubar). The cat in the menu bar then shows a dot per session (a ring while one works, amber when one needs you, red on an error, dimmed on your turn) and the number waiting. Click it and the whole island drops down under it as a card, with every page and button; click elsewhere or press Esc to close it. Right-click it for the menu. "Done" and "needs you" news drops from the icon as a small pill. If the menu bar is full and the icon would hide behind the notch, tabby moves it next to the system icons. Turning the island off in an older version now means menu bar mode.
  • A word when context runs low. When a session passes 80% of its context window, the island says so ("Refactor auth middleware · 80% context · a good moment for /compact or a fresh session"), and again at 95%. Once per session and level; click it to open the tab.
  • The island's toolbar keeps the session count out of the way when a narrow view is short of room, instead of overflowing.
  • The website's island pills no longer push the page sideways on a phone.

Install: paste Install tabby for me: run curl -fsSL https://claude-tabby.vercel.app/install.md and follow it. into Claude Code, or run curl -fsSL https://claude-tabby.vercel.app/install | bash. TabbyIsland.zip is what the installer downloads (it checks the .sha256). It isn't notarized, so a copy downloaded through a browser is blocked by Gatekeeper: use the installer, or tabby island install.

tabby 0.4.4

Choose a tag to compare

@github-actions github-actions released this 10 Oct 17:16

Stale processes, a session history, and finished sessions that say what they are.

  • Stop stale processes in one click. The island's new Processes page (the chip in the toolbar, or tabby procs / /tab procs) lists the dev servers on localhost, leftovers from sessions you closed, and anything else your terminals started that's using CPU or memory: what it is ("vite :5173"), its project and session, and what it uses. Stop all stops the stale ones: what a closed Claude session left running, dev servers and scripts left behind by a closed terminal, and those of a session that has been idle for 2 hours. Databases, VMs and tunnels you started are listed but never counted as stale. Each row has its own stop button. A badge counts the stale ones, and when leftovers weigh 500 MB or more the island says so once. Launchd services, apps, Claude and its MCP servers are never listed; see SECURITY.md for what it reads.
  • History, with one click back. The new History page (the clock, or tabby history) lists the sessions you ran in the last 30 days, newest first, with their project and what they were about. Click one and it opens in a new window right where it ended (claude --resume in its folder, same name and color, permissions skipped only if it ran that way); one that's still open comes to the front. tabby resume 3 or /tab resume <name> does the same.
  • "tabby-44 is done" is gone. When tabby hadn't named a session yet, the island fell back to Claude's stand-in name (the folder plus two hex digits). A session now gets a name from your first prompt right away, until the AI name arrives, and the island never shows the stand-in. The announcement also grows a second line with the project and what Claude did ("web · The checkout spec now waits for the cart request: 20 runs passed"), and stays up a little longer to read it.
  • AI names no longer end on a dangling word ("Tabby Process Killer And").

Install: paste Install tabby for me: run curl -fsSL https://claude-tabby.vercel.app/install.md and follow it. into Claude Code, or run curl -fsSL https://claude-tabby.vercel.app/install | bash. TabbyIsland.zip is what the installer downloads (it checks the .sha256). It isn't notarized, so a copy downloaded through a browser is blocked by Gatekeeper: use the installer, or tabby island install.

tabby 0.4.3

Choose a tag to compare

@github-actions github-actions released this 08 Oct 16:50

A second security pass, this time adversarial: what a hostile neighbor on the same machine, a hostile transcript or a replaced download could do. One finding mattered, and it's fixed.

  • The naming request can no longer be redirected by a shared folder. The Haiku call ran in the system's temporary folder, and Claude Code reads a project's .claude/settings.json from wherever it runs, even with --safe-mode. On a machine where /tmp is shared (Linux, or a Mac over SSH), another account could plant one there with an env.ANTHROPIC_BASE_URL, and every naming request, your Claude login token included, would have gone to that address. tabby now passes --setting-sources user (only your own settings) and --strict-mcp-config, and runs the call in ~/.claude/tabby, which is yours alone. A single-user Mac with a normal login was never exposed (its temporary folder is private), and a test holds the fix in place.
  • Tabby Island's download is checked against its build attestation when GitHub's gh is installed: gh attestation verify has to agree that this zip came out of this repository's release workflow, or it's thrown away. The checksum next to the zip only ever caught a damaged download. Without gh nothing changes; TABBY_NO_ATTEST=1 skips the check.
  • Every file under ~/.claude/tabby is now yours alone, not only the ones written since 0.4.0: logs, the Node path, old session records and settings backups are tightened the next time tabby runs, and only the five newest settings.json backups are kept (a backup can hold keys).
  • "Skip permissions" in quick launch no longer sticks. Ticking it applied to every later launch, in any folder; it now applies to that launch, and Start with "Skip permissions" ticked in Settings › Windows is the one way to make it the default.
  • The island hands CLAUDE_CONFIG_DIR to the tabby commands it runs, so a custom Claude folder works from the island too. The per-tool hook reads the session id from the hook's own field, never from a tool's input. The installer's log and the Node path are private from the first write. GitHub Actions are pinned to commits.

Install: paste Install tabby for me: run curl -fsSL https://claude-tabby.vercel.app/install.md and follow it. into Claude Code, or run curl -fsSL https://claude-tabby.vercel.app/install | bash. TabbyIsland.zip is what the installer downloads (it checks the .sha256). It isn't notarized, so a copy downloaded through a browser is blocked by Gatekeeper: use the installer, or tabby island install.

tabby 0.4.2

Choose a tag to compare

@github-actions github-actions released this 08 Oct 15:02

Tiling is easier to understand, shows its progress, and leaves every window in its own color.

  • The island says what its buttons do. Rest the pointer on a toolbar control (Tile, the views, Settings, Update) and a card under the toolbar says what it does, with its shortcut. macOS tooltips almost never showed over the island, since it's rarely the active app. The tile button now has a clearer icon and says Tile, and the tile menu opens with what tiling does.
  • Focus mode shows the gist when Claude is done, not a wall of text. A window Claude finishes in keeps its cover: how the reply opens, the question it ends on (in the session's color), how long the turn took and a Show full reply button. It's read from the transcript on your Mac; nothing is sent anywhere. This is now on whenever Focus mode is; untick Stay covered when it's your turn in Settings › Focus, or type /tab focus-mode idle off, to see the whole reply at once.
  • Focus mode says what Claude is doing, not just "working": the step under way ("Editing tile.js", "Run the test suite", "Searching for “retry”"), the task from its task list on the line below, and the same for each subagent. The time left reads "~2m left" beside how long it has run.
  • A calmer toolbar: the theme button is gone from the island. Set the theme for every tab in Settings › General or from the menu-bar icon; each session's own theme is still in its row menu (or press T with the keyboard).
  • Tiling shows its progress. Tiling can take several seconds (Terminal comes forward, tabs are split into windows, windows leave full screen), and the island used to show nothing until it was done. The collapsed island now shows each step with a ring that fills as it goes ("Splitting tabs · 2 of 4", "Placing 4 windows"), then "Tiled 4 windows". This works for /tab tile too, and the Tile button shows the ring while the island is open.
  • Each tiled window gets its own color. After tiling, tabby picks the colors as a set: every window a different hue, windows side by side as far apart as the theme allows, calm hues first. Colors you picked yourself stay, and tiling again doesn't reshuffle a set that's already good. In themes mode each window also gets its own theme. Turn it off with Give Each Window Its Own Color in the tile menu, in Settings › Windows, or with /tab tile colors off. tabby tile --dry-run lists the colors it would pick.

Install: paste Install tabby for me: run curl -fsSL https://claude-tabby.vercel.app/install.md and follow it. into Claude Code, or run curl -fsSL https://claude-tabby.vercel.app/install | bash. TabbyIsland.zip is what the installer downloads (it checks the .sha256). It isn't notarized, so a copy downloaded through a browser is blocked by Gatekeeper: use the installer, or tabby island install.

tabby 0.4.1

Choose a tag to compare

@github-actions github-actions released this 06 Oct 10:15

Tiling fixes:

  • Windows no longer overlap on a second display. macOS reports a second display's usable area without its menu bar (every display has one when displays have separate Spaces), so the first row was placed under it and pushed down into the next. tabby now leaves the menu bar out itself.
  • A window Terminal rounds up fits its cell. Terminal sizes windows in whole rows and columns, sometimes one more than asked; such a window overlapped the one below. tabby now asks for a little less until it fits.
  • No false "Allow Accessibility". When sessions were left in place because their windows sit on another desktop or in full screen, the note mentioned Accessibility and the island read it as a missing permission, asking you to allow what was already allowed. The note now says what happened, and the island asks for Accessibility only when the permission is really missing.
  • Windows on another desktop come along more often. Before Terminal is brought forward, the windows that aren't on screen are made its front windows, so macOS switches to their desktop rather than staying on one that already shows a Terminal window.

Install: paste Install tabby for me: run curl -fsSL https://claude-tabby.vercel.app/install.md and follow it. into Claude Code, or run curl -fsSL https://claude-tabby.vercel.app/install | bash. TabbyIsland.zip is what the installer downloads (it checks the .sha256). It isn't notarized, so a copy downloaded through a browser is blocked by Gatekeeper: use the installer, or tabby island install.

tabby 0.4.0

Choose a tag to compare

@github-actions github-actions released this 05 Oct 20:53

tabby is now labeled beta (the website, the README, the island's Settings and About).

Focus mode can stay on when it's your turn. Tick Stay covered when it's your turn in Settings › Focus, or type /tab focus-mode idle on. When Claude is done, the window keeps its cover: the topic, one line saying it's done and how long ago, and a Your turn button in the session's color. Click it to open the window and reply.

  • Windows where Claude asks a question or hits an error still open on their own, and the window you're typing in is never covered.
  • The Settings preview shows both states in turn while the box is ticked.
  • It's off by default: without it, Focus mode works as before.

Privacy and security audit. Every part was read for what it sends, stores and trusts. Nothing was sending your content anywhere it shouldn't, and these are fixed:

  • tabby's files are yours alone. ~/.claude/tabby (session names, the last few prompts, settings, the log) is now readable only by your account; existing folders are tightened the next time tabby runs.
  • The naming request sends less. It no longer includes the folder's path, only its name, and the prompt is passed on stdin, so other accounts on the machine can't see it in the process list.
  • namer heuristic and off now always mean no model call. /tab auto and /tab reset used to ask the model anyway; with heuristic they name the tab on your machine.
  • Names can't carry control characters into a terminal. Titles and summaries from the model, folder names, --tab names and Claude's own session names are stripped of escape sequences and bidi overrides before they reach a title, the status line or tabby ls. In tmux, # in a name is no longer expanded.
  • A broken settings.json is left alone. If it isn't valid JSON, setup no longer rewrites it. A symlinked settings.json stays a symlink and keeps its permissions.
  • /tab runs no shell when its hook is off. The fallback command no longer pre-approves sh; it says how to turn tabby back on.
  • The installer pins the Node.js it downloads (when a machine has none) to one version with its SHA-256 written in the script, and can't act on a download that was cut short.
  • Tabby Island validates what it reads from session files before using it: a tty must be a device path, a transcript must be a regular file inside Claude's projects folder, and numbers of any size no longer crash it. It no longer writes command arguments to the system log, a hand-edited shortcut needs ⌃, ⌥ or ⌘, and it never falls back to running a CLI from ~/Dev/tabby.
  • Releases are built only from commits on main, their files are never replaced, and each zip has a build attestation: gh attestation verify TabbyIsland.zip --repo 0xNtive/tabby.
  • A test keeps it that way: the build fails if network code appears anywhere but the updater and the island download, and the island has none at all.

Known and not fixed yet: Tabby Island isn't notarized (the project has no Apple Developer ID while in beta). SECURITY.md says what that means and what tabby trusts.

Website.

  • A new social card, and a search pass: title, description, structured data, robots.txt, a sitemap and llms.txt.
  • No third-party requests except the GitHub star count: fonts are served from the site, and a Content-Security-Policy blocks everything else.
  • The pattern behind "Let Claude install it" no longer runs under the text.
  • The answer to "What leaves my machine?" now lists exactly what the naming request contains.

Install: paste Install tabby for me: run curl -fsSL https://claude-tabby.vercel.app/install.md and follow it. into Claude Code, or run curl -fsSL https://claude-tabby.vercel.app/install | bash. TabbyIsland.zip is what the installer downloads (it checks the .sha256). It isn't notarized, so a copy downloaded through a browser is blocked by Gatekeeper: use the installer, or tabby island install.

tabby 0.3.2

Choose a tag to compare

@github-actions github-actions released this 05 Oct 20:54

Tabby Island fixes from the adversarial review:

  • End Session can't be double-clicked through. The red button in the confirmation waits a moment (longer than a double-click) before it takes a click, and looks dimmed until then.
  • Focus mode:
    • covers stop below Terminal's tab bar, so tabs stay visible and clickable (it now knows which windows have tabs);
    • a full-screen window under the notch is recognized;
    • subagents that finished, hit an API error or were interrupted no longer show as running;
    • spinners only tick while a cover can be seen;
    • clicking a cover opens the session that window shows now, and only real session windows count as "the one you're typing in".
  • Nothing keeps running after Settings closes. The Focus preview's spinner and the once-a-second permission check used to run on after the window closed. The status file is only written when something changes.
  • Permissions:
    • "Ask Again" for Terminal, iTerm2 or System Events no longer resets every other Automation permission. It opens System Settings › Automation at the right switch.
    • "Allow All" only shows while there's something it can ask.
    • Background checks keep going, so a terminal opened later is noticed.
  • Quick launch finds a recent folder typed as a full path (or with a trailing slash), and lists up to 200 folders.
  • A failed End Session is announced in the island, not just shown in a card that can disappear.
  • The island follows CLAUDE_CONFIG_DIR (setup records it), for sessions, its status file and updates.

Install: paste Install tabby for me: run curl -fsSL https://claude-tabby.vercel.app/install.md and follow it. into Claude Code, or run curl -fsSL https://claude-tabby.vercel.app/install | bash. TabbyIsland.zip is what the installer downloads (it checks the .sha256). It isn't notarized, so a copy downloaded through a browser is blocked by Gatekeeper: use the installer, or tabby island install.

tabby 0.3.1

Choose a tag to compare

@github-actions github-actions released this 05 Oct 21:06

Update from wherever you are. When a new version is out, Tabby Island shows an Update button (also in its menu-bar menu and Settings › General › Updates), a new Claude session mentions it once a day, and /tab update or tabby update get it from Claude or a terminal. An update gets the plugin, refreshes the parts of setup you have (nothing you turned off comes back) and the island, which restarts on the new version. tabby update --check only looks. The check asks github.com for the latest release at most every 6 hours and sends nothing about you; tabby config updateCheck false turns it off.

Fixes from an adversarial review of 0.3.0:

  • The terms prompt couldn't be answered on a Mac. With curl … | bash (and tabby install in a shell), it said "Nothing was changed" before you could type. It waits for your answer now, and CI answers it through a pipe on every change.
  • A claude alias broke every new terminal. With alias claude='claude --dangerously-skip-permissions', or Claude Code's old local installer, tabby's shell lines were a syntax error. They work alongside the alias now, and tabby new --color/--theme reach the new session.
  • Tabby Island installs are safe to run at once and never go backwards. Before, an island that was ahead of its release could be re-downloaded and restarted on every session start, and two installs at the same time could corrupt it. Now it's one install at a time, the copy is made before the island quits, and an older download never replaces a newer island.
  • doctor respects your choices. An island you skipped (--no-island), a login item you turned off, or an island you quit is reported, not "fixed". A missing island is a warning, not a failure.
  • Uninstall is honest. It finds claude like the installer does and says when the plugin wasn't removed. It leaves CLAUDE_CODE_DISABLE_TERMINAL_TITLE alone if you had set it before tabby.
  • Installer:
    • CLAUDE_BIN for a Claude Code in an unusual place;
    • every plugin error is shown, not just the last;
    • an install made without git switches to GitHub once git works, so it keeps updating;
    • Node found through a version manager is remembered as its real binary, so hooks keep working in projects pinned to an old Node.
  • CLAUDE_CONFIG_DIR: the install guide, the "fix tabby" skill and the island follow it.
  • Safer launching. tabby new --dangerous refuses a folder it only guessed from part of its name, and --dangerous=false means off. tabby ls numbers sessions (for tabby focus 2 and tabby tile --only 1,3), tabby tile active and /tab tile screens work, and tabby new --list --limit shows more folders.
  • tabby island login --off no longer stops the running island, and tabby island stop sticks until you start it again.

Install: paste Install tabby for me: run curl -fsSL https://claude-tabby.vercel.app/install.md and follow it. into Claude Code, or run curl -fsSL https://claude-tabby.vercel.app/install | bash. TabbyIsland.zip is what the installer downloads (it checks the .sha256). It isn't notarized, so a copy downloaded through a browser is blocked by Gatekeeper: use the installer, or tabby island install.