A tap-to-attach grid for your Claude Code sessions. Every session you're running (each one inside its own tmux session) shows up as a colored tile. Tap it to jump straight into that terminal β from your Mac or from an iPad β instead of hunting through terminal tabs to find which session needs you.
- Shows one tile per active tmux session, color-coded by status:
- π‘ yellow β Claude is actively working
- π΄ red β Claude needs your input on a permission prompt (urgent)
- π’ green β the turn is done, or Claude is waiting on a low-priority question β the terminal is free either way
- β« gray β no signal yet, or the session is back at a plain shell with no Claude running
- Single tap β brings that session's terminal tab to the front on your Mac. Works with Terminal.app, iTerm2 and Warp.
- Double tap β opens a live, typeable terminal for that session right in your browser: this is how you use it from an iPad.
- β on a tile β rename the tmux session.
- β on a tile β kill the tmux session. This ends the terminal and everything running in it, so it asks for confirmation first.
- β in the corner β settings: grid size, filters and sort order (below).
- The grid scrolls, so it isn't capped at a fixed number of tiles.
- Cells per page / Columns β together these set how large the tiles are, i.e. how many fit on screen before you scroll.
- Filter by name β substring match on the session name.
- Kind β show only Claude sessions, or only plain terminals.
- Sort β Active first (red, then yellow, then green β the default), Last updated, Name, or Custom. Long-press and drag to reorder tiles manually; that only works in Custom mode, and the order is remembered per browser.
- Your Claude Code sessions run inside tmux sessions (one session = one tile).
- remobi β a separate open-source
tool that serves a real, live terminal for a tmux session in the browser,
with mobile-friendly touch controls. AILaunchpad starts one
remobiinstance per session automatically (this is what double-tap opens); you never run it yourself. Nothing here is a fork of remobi β it's used as-is, as an external tool. - Claude Code hooks write a small status file when a session starts, works, finishes, needs attention, or exits. AILaunchpad reads those files to color the tiles, and independently checks whether the pane is back at a plain shell β so a tile goes gray even if Claude exited in a way that skipped its hook.
- A small Node.js server ties it together: it discovers tmux sessions,
manages the
remobiinstances, serves the grid, and switches your Mac terminal to the right tab on single tap. - Sessions with no name, or with tmux's default numeric name, are renamed
automatically after their working directory (
~/code/apibecomesapi, with-2,-3suffixes on collision), so they show up as something recognizable instead of0.
Tested on Terminal.app and Warp (2026-05-22+).
- Claude Code, already set up and working β AILaunchpad is a grid for your Claude Code sessions, not a replacement for it.
- macOS (uses tmux + AppleScript for the single-tap focus feature)
- Node.js 22 or newer
- tmux β a terminal multiplexer that keeps a session alive in the background after you close the window; this is what lets a tile stay live and reattach-able.
- jq β used by the status hook.
- tmux, jq and
remobiare installed for you byinstall.shif missing (tmux and jq via Homebrew, remobi via npm). - An iPad or phone on the same network as your Mac β optionally Tailscale if you want access away from home.
git clone https://github.com/steryokhin/ailaunchpad.git
cd ailaunchpad
./install.sh./install.sh will:
- Check you have Node 22+, and install
tmux,jqandremobiif any are missing. - Copy the status hook script to
~/.ailaunchpad/hooks/. - Add the status hooks to your Claude Code settings
(
~/.claude/settings.json). It only adds entries, is safe to re-run, and backs up your existing settings tosettings.json.bakfirst. The hooks only report session state to AILaunchpad; they don't change how Claude behaves.
It won't touch anything else on your system, and doesn't require sudo.
npm install -g ailaunchpadβ coming soon. The CLI (ailaunchpad setup/start/stop/access) is already built and works the same way either method installs it; once published, everything below works unchanged, just swap./<command>.shforailaunchpad <command>.
./start.shThis starts the grid in the background (logs go to
~/.ailaunchpad/server.log) and prints your access link plus a QR code.
Stop it with ./stop.sh.
The link contains an access token, because the grid can control and kill your terminal sessions β see Security notes. Open it once on each device and the token is stored there; you won't need the link again.
- On the Mac, open the
localhostlink it prints. - On an iPad or phone, scan the QR code, or open the LAN link by hand. Then add it to your home screen (Safari β Share β Add to Home Screen) for a full-screen, app-like grid. Add the link including the token so it keeps working after the browser clears its storage.
- Away from home, with Tailscale on both
devices, use the Mac's Tailscale IP (
tailscale status) in place of the LAN IP.
Lost the link, or the server started automatically at login?
./access.shprints the link and QR again, whether or not the server is running.
The token is generated once and kept in ~/.ailaunchpad/token, so it
survives restarts and reboots β devices you've already set up keep working.
If the link leaks (a screenshot, a shared chat), revoke it:
./access.sh --rotateThat issues a new token, locks out every device using the old link immediately without needing a restart, and prints the new link and QR.
Other options:
AILAUNCHPAD_PORT=9000 ./start.shif port 8900 is taken.node server.jsruns it in the foreground if you want to watch logs.
-
Start your Claude Code sessions inside tmux, e.g.:
tmux new -s my-project claude
A bare
claudein a plain terminal tab won't show up β it has to be inside a tmux session. You don't have to name it, though: unnamed sessions get named after their working directory.Optional: a shell function to do this in one command
Add this to your
~/.zshrc(or~/.bashrc) if you'd rather not type two commands every time. Not installed byinstall.shβ entirely opt-in.cctmux() { if [ -z "$1" ]; then echo "usage: cctmux <session-name> [command...]" >&2 return 1 fi tmux new -A -s "$1" "${@:2}" }
Then
cctmux my-project claudecreates (or reattaches to) a named session and starts Claude in it. -
Open the grid on whichever device you're using.
-
Tiles appear automatically for every tmux session β nothing to register.
-
Tap to jump in, double-tap for a browser terminal, β to rename, β to kill. Colors tell you what needs you.
The first time you single-tap a tile, macOS asks for permission to control your terminal app β Automation for Terminal.app and iTerm2. Allow it in System Settings β Privacy & Security. These are one-time prompts.
Read this before exposing the grid to any network you don't control.
- Access is protected by a token, generated at first run and stored in
~/.ailaunchpad/token(readable only by you). Anyone holding that token can view, focus, rename and kill your sessions, and open a full terminal on your Mac. Treat the link like a password: don't paste it into chats, screenshots or issues. - Traffic is plain, unencrypted HTTP. Everything you type into a browser terminal β including secrets β crosses the network in cleartext. On a home LAN, or inside a Tailscale tailnet (which encrypts the tunnel itself), that's a reasonable trade-off; on shared or public Wi-Fi it isn't.
- The server binds to all interfaces (
0.0.0.0) so other devices can reach it: the grid on port 8900, and oneremobiterminal per session on 8901 and up. The token guards the grid's API; treat the whole port range as sensitive. - Don't port-forward this to the internet. For remote access use Tailscale β a private encrypted network between your own devices β instead.
~/.ailaunchpad/debug.logrecords each hook event with only state/session/timestamp. SetAILAUNCHPAD_DEBUG=1before starting a Claude Code session to log the full hook payload too β off by default, since that payload can contain prompt and tool text.
Update:
git pull && ./install.sh # safe to re-run
./stop.sh && ./start.shUninstall:
./stop.sh- Remove the
~/.ailaunchpad/hooks/report-status.shentries from~/.claude/settings.json(or restoresettings.json.bak). rm -rf ~/.ailaunchpadβ this also deletes your access token.- Optionally
npm uninstall -g remobi.
- Single Mac only β no multi-machine support (see Roadmap).
- Single tap does nothing on Warp older than 2026-05-22, which has no supported way to identify a tab. Double tap works everywhere.
- No user accounts β one shared token per install.
Things worth doing, roughly in the order they'd get done:
- Multiple Macs / servers in one grid β right now a running instance only ever shows tmux sessions on the machine it's running on. The idea is one grid that can list and reach sessions across more than one Mac, so a desktop and a laptop (or a home Mac and a work Mac) show up side by side instead of needing a separate link and separate grid for each.
- Drop the tmux dependency β tmux is what gives sessions persistence and is what remobi wraps for the browser terminal, but it also runs its own terminal emulation layer on top of your shell, which is where the occasional redraw glitches and "wrapped" feeling come from.
- A packaged way to keep it running across reboots (currently you re-run
./start.shyourself, or wire up your ownlaunchdagent). - Whatever turns out to matter once more than one person is using this.
This isn't a committed timeline, just the honest list of what's missing.
Found a bug? Want to improve something? Open an issue β contributors welcome, see CONTRIBUTING.md.
Want to support the author? Support Ukraine instead.
AILaunchpad is a thin layer on top of
remobi (MIT licensed), which does
the hard part: serving a real, live terminal for a tmux session in the
browser with mobile-friendly touch controls. AILaunchpad is not a fork β it
installs and runs the published remobi npm package as-is, and adds the
session grid, status tracking and Mac-focus features on top.
Also built on tmux, which is what gives sessions their persistence in the first place.
MIT β see LICENSE.