Skip to content

Latest commit

Β 

History

23 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

AILaunchpad

Support Ukraine

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.

The grid: colored tiles for each tmux session, red/yellow/green showing what needs attention

What it does

  • 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.

Settings

  • 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.

How it works (high level)

  • 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 remobi instance 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 remobi instances, 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/api becomes api, with -2, -3 suffixes on collision), so they show up as something recognizable instead of 0.

Tested on Terminal.app and Warp (2026-05-22+).

Requirements

  • 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 remobi are installed for you by install.sh if 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.

Install

git clone https://github.com/steryokhin/ailaunchpad.git
cd ailaunchpad
./install.sh

./install.sh will:

  1. Check you have Node 22+, and install tmux, jq and remobi if any are missing.
  2. Copy the status hook script to ~/.ailaunchpad/hooks/.
  3. 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 to settings.json.bak first. 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>.sh for ailaunchpad <command>.

Running it

./start.sh

This 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 localhost link 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.sh

prints 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 --rotate

That 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.sh if port 8900 is taken.
  • node server.js runs it in the foreground if you want to watch logs.

Using it day to day

  1. Start your Claude Code sessions inside tmux, e.g.:

    tmux new -s my-project
    claude

    A bare claude in 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 by install.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 claude creates (or reattaches to) a named session and starts Claude in it.

  2. Open the grid on whichever device you're using.

  3. Tiles appear automatically for every tmux session β€” nothing to register.

  4. Tap to jump in, double-tap for a browser terminal, ✎ to rename, βœ• to kill. Colors tell you what needs you.

First-time permission prompts

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.

Security notes

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 one remobi terminal 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.log records each hook event with only state/session/timestamp. Set AILAUNCHPAD_DEBUG=1 before starting a Claude Code session to log the full hook payload too β€” off by default, since that payload can contain prompt and tool text.

Updating and uninstalling

Update:

git pull && ./install.sh   # safe to re-run
./stop.sh && ./start.sh

Uninstall:

  1. ./stop.sh
  2. Remove the ~/.ailaunchpad/hooks/report-status.sh entries from ~/.claude/settings.json (or restore settings.json.bak).
  3. rm -rf ~/.ailaunchpad β€” this also deletes your access token.
  4. Optionally npm uninstall -g remobi.

Limitations

  • 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.

Roadmap

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.sh yourself, or wire up your own launchd agent).
  • 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.

Support Ukraine

Want to support the author? Support Ukraine instead.

Credits

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.

License

MIT β€” see LICENSE.

About

A tap-to-attach grid for your Claude Code sessions, with live terminal access from an iPad or phone.

Topics

Resources

Contributing

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages