Repository navigation
Releases: 0xNtive/tabby
Release list
tabby 0.6.0
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-pluginseach, or a restart. Hooks insettings.jsondo 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/tabwith the next prompt. In every other session the hooks stop before Node starts, and they're taken out ofsettings.jsonby themselves when the last of those sessions ends (tabby uninstalltakes them out too).tabby adoptdoes the same any time, andtabby doctoroffers 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 verifycall is gone: it neededgh, 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
tabbyprints is cleaned of escape codes (a folder named to set your clipboard couldn't, throughtabby new --listor/tab resume). - Less kept, for less long. A folder's remembered color goes after 90 days unused, and
tabby uninstall --purgedeletes~/.claude/tabbyas well. - Smaller hardening.
tabby procs stopchecks 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, notmain. - 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_PROGRAMdecides. 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 doctorwarns 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
- 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
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;
caffeinateonly 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 andtabby doctorcheck 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: onlypmset disablesleepkeeps a closed Mac awake, and it needs an administrator. The first time, macOS asks for your password once (its own prompt, throughauthopen), and tabby adds/etc/sudoers.d/tabby-awake, checked withvisudofirst, which lets your user run exactly/usr/bin/pmset -a disablesleep 1and… 0without a password. Nothing else runs as root.tabby awake forgettakes 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
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 --resumein 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 3or/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
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.jsonfrom wherever it runs, even with--safe-mode. On a machine where/tmpis shared (Linux, or a Mac over SSH), another account could plant one there with anenv.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
ghis installed:gh attestation verifyhas 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. Withoutghnothing changes;TABBY_NO_ATTEST=1skips the check. - Every file under
~/.claude/tabbyis 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 newestsettings.jsonbackups 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_DIRto 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
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 tiletoo, 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
themesmode 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-runlists 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
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
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 heuristicandoffnow always mean no model call./tab autoand/tab resetused to ask the model anyway; withheuristicthey name the tab on your machine.- Names can't carry control characters into a terminal. Titles and summaries from the model, folder names,
--tabnames and Claude's own session names are stripped of escape sequences and bidi overrides before they reach a title, the status line ortabby ls. In tmux,#in a name is no longer expanded. - A broken
settings.jsonis left alone. If it isn't valid JSON, setup no longer rewrites it. A symlinkedsettings.jsonstays a symlink and keeps its permissions. /tabruns no shell when its hook is off. The fallback command no longer pre-approvessh; 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 andllms.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
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
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(andtabby installin 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
claudealias broke every new terminal. Withalias 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, andtabby new --color/--themereach 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
claudelike the installer does and says when the plugin wasn't removed. It leavesCLAUDE_CODE_DISABLE_TERMINAL_TITLEalone if you had set it before tabby. - Installer:
CLAUDE_BINfor 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 --dangerousrefuses a folder it only guessed from part of its name, and--dangerous=falsemeans off.tabby lsnumbers sessions (fortabby focus 2andtabby tile --only 1,3),tabby tile activeand/tab tile screenswork, andtabby new --list --limitshows more folders. tabby island login --offno longer stops the running island, andtabby island stopsticks 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.