{"slug": "yardmaster-manage-multiple-claude-code-sessions-from-one-terminal", "title": "Yardmaster – manage multiple Claude Code sessions from one terminal", "summary": "Yardmaster, a macOS terminal for managing multiple Claude Code sessions, launched with features including a sessions sidebar, waiting-on-you inbox, worktree sessions, and session persistence. The app, available via curl script or Homebrew, requires Apple silicon and Xcode Command Line Tools, and installs Node and Claude Code automatically if missing. Yardmaster speaks Claude Code's hook protocol to show live session status and supports merging, pushing, and forking sessions.", "body_md": "The Claude-native terminal for macOS.\n\nOne terminal to manage all your Claude terminals.\n\n[▶ 25-second demo with sound](https://yardmaster.me/promo.mp4) ·\n[yardmaster.me](https://yardmaster.me) ·\n[releases](https://github.com/blothecap/yardmaster/releases)\n\nMost devs now run several Claude Code sessions at once — and their terminal has no idea. A Claude that's been working for 20 minutes, a Claude waiting for permission, and a dead pane all look like the same rectangle of text. Yardmaster is a macOS terminal where Claude sessions are first-class: named, grouped by project, with live status you can trust — because it speaks Claude Code's own hook protocol instead of guessing from output.\n\n**Sessions sidebar**— named sessions grouped under their project, each row showing the live** git branch**, an activity line (the exact tool running right now —`▸ Bash: npm test`\n\n— or the waiting question), a working timer, and a**token meter**(`803k tok`\n\n,`1.2M tok`\n\n) that survives app restarts. Status dots are driven by Claude Code**hooks**, never output-scraping: working / needs-you / idle / exited.** Waiting-on-you inbox**(`⌘E`\n\n) — every blocked session with the exact question it's asking; jump to it, or**approve/deny right from the list**(`a`\n\n/`d`\n\n).**Worktree sessions**— one click gives a session its own isolated git worktree (`repo/.worktrees/<branch>`\n\n); run several Claudes on one repo in parallel. The**Changes pane** shows each session's diff and commits with one-click**merge**(guarded, conflict-safe) or** push + PR**(via`gh`\n\n).**Fork Session**— right-click a session to duplicate its entire conversation into a fresh worktree branched from the session's HEAD. Try a risky approach — or two competing ones — without gambling your accumulated context.**Real terminals, plural**—`⌘T`\n\nopens a login-shell tab beside any Claude session (as many as you want,`⌘⌥←/→`\n\nto switch,`⌘W`\n\nto close), and a standalone**Terminals** workspace makes it a plain multi-tab terminal — no Claude required. Scrollback survives tab flips and reloads via replay buffers.**Drag & drop**— drop files from Finder onto any pane and their quoted paths are typed at the cursor.** Notifications**— macOS notification + dock badge when a background session finishes or needs input; idle reminders are filtered out so red always means red.**Session persistence**— sessions survive app restarts and resume their conversations via`claude --resume`\n\n; per-session CLI flags (e.g.`--model opus`\n\n) persist with them.**Project panel**— the active project's dirty-file count, commits ahead of base, and last commit, always visible at the bottom of the sidebar.**In-app updates**— the app checks GitHub releases (one anonymous API call — there is no telemetry) and updates itself with one click; or check manually via the menu.\n\n| Shortcut | Action |\n|---|---|\n`⌘N` |\nNew session (project pre-fillable from a group header's `+` / `⎇` buttons) |\n`⌘1…9` |\nJump to session by position |\n`⌘J` / `⌘K` , `⌘↓` / `⌘↑` , `⌘⇧]` / `⌘⇧[` |\nNext / previous (includes the Terminals workspace) |\n`⌘E` |\nWaiting-on-you inbox (`a` approve / `d` deny) |\n`⌘T` |\nNew terminal tab in the active session / workspace |\n`⌘⌥←` / `⌘⌥→` |\nSwitch between the Claude tab and terminal tabs |\n`⌘W` |\nClose the active terminal tab (never the Claude session) |\n`⌘R` |\nRename session |\n`⌘B` |\nToggle sidebar |\n\nRequirements: macOS on Apple silicon, Xcode Command Line Tools. Node and even Claude Code itself are installed automatically if missing.\n\n```\ncurl -fsSL https://yardmaster.me/install.sh | bash\n```\n\nor via Homebrew (prebuilt, instant — `--no-quarantine`\n\nskips Gatekeeper on this\nunsigned build):\n\n```\nbrew install --cask --no-quarantine blothecap/tap/yardmaster\n```\n\nThe curl script clones this repo to `~/yardmaster`\n\n, checks prerequisites, builds, and\ninstalls to /Applications (first build takes a few minutes). After that the app\nupdates itself — or re-run the one-liner any time. A prebuilt (unsigned) DMG is\non the [releases page](https://github.com/blothecap/yardmaster/releases); after\ninstalling it, clear Gatekeeper's quarantine with\n`xattr -cr /Applications/Yardmaster.app`\n\n.\n\nFor development: `nvm use && npx -y npm@11 install && npm run dev`\n\n(`npm run dist`\n\nbuilds the app bundle; the app single-instance-locks, so close a\ndev instance before launching the packaged one).\n\nQuality gates: `npm test`\n\n(195 Vitest tests — the session state machine,\ngit/worktree operations, and persistence run against pty fakes and real temp git\nrepos), `npm run typecheck`\n\n, and `docs/smoke-checklist.md`\n\nfor the manual pass.\n\nElectron, three layers. The **main process** owns everything: a `SessionManager`\n\nstate machine over node-pty processes, and a loopback **hook server** that\ninjected Claude Code hooks (`SessionStart`\n\n/ `UserPromptSubmit`\n\n/ `PreToolUse`\n\n/\n`Notification`\n\n/ `Stop`\n\n) call via per-session `--settings`\n\nfiles. That's the core\ntrick: status is *known*, not guessed — `PreToolUse`\n\npowers the live tool\nheartbeat, `Notification`\n\ncarries the exact permission question into the inbox,\n`Stop`\n\ntriggers token metering from the transcript. Around that sit git/worktree/\nreview modules and atomic `sessions.json`\n\npersistence. The **renderer** is a\ndumb React UI over xterm.js panes (one per session, kept alive across switches\nwith replay buffers). A typed `window.api`\n\ncontextBridge is the only seam\nbetween them.\n\nNothing leaves your machine: no accounts, no telemetry, no cloud — the only network calls are Claude Code's own and an anonymous GitHub version check.\n\nThe design/spec history lives in `docs/superpowers/`\n\n— the app was built\nspec-first with per-task adversarial review, working with Claude. The first\nworking version took two days.\n\n[Apache-2.0](/blothecap/yardmaster/blob/main/LICENSE) — free to use, modify, and redistribute; includes an\nexplicit patent grant. Copyright 2026 Blothecap.", "url": "https://wpnews.pro/news/yardmaster-manage-multiple-claude-code-sessions-from-one-terminal", "canonical_source": "https://github.com/blothecap/yardmaster", "published_at": "2026-08-13 11:23:40+00:00", "updated_at": "2026-08-13 11:41:52.587793+00:00", "lang": "en", "topics": ["developer-tools", "ai-tools", "ai-agents"], "entities": ["Yardmaster", "Claude Code", "Apple", "Homebrew", "GitHub"], "alternates": {"html": "https://wpnews.pro/news/yardmaster-manage-multiple-claude-code-sessions-from-one-terminal", "markdown": "https://wpnews.pro/news/yardmaster-manage-multiple-claude-code-sessions-from-one-terminal.md", "text": "https://wpnews.pro/news/yardmaster-manage-multiple-claude-code-sessions-from-one-terminal.txt", "jsonld": "https://wpnews.pro/news/yardmaster-manage-multiple-claude-code-sessions-from-one-terminal.jsonld"}}