Runway is a native cockpit for people who work with several coding agents at once. It connects assigned GitHub issues, persistent GPU terminals, repository activity, and pull request progress in one focused workspace.
- Download
Runway-2.0.0-arm64.dmgfrom GitHub Releases. - Open the DMG and drag Runway.app onto Applications.
- Launch Runway.
Runway is currently ad-hoc signed and not notarized. If macOS reports that the app is damaged or unverified, clear the download quarantine once:
xattr -dr com.apple.quarantine /Applications/Runway.appRequirements:
- Apple Silicon Mac running macOS 14 or newer
- GitHub CLI authenticated with
gh auth loginfor issues, feeds, people, repositories, and pull requests
The terminal workspace still works without GitHub CLI. GitHub-backed views need an authenticated session.
| Capability | Why it matters | |
|---|---|---|
| 🖥️ | Persistent GPU terminals | Run Claude Code, Codex, Gemini, custom agents, or a normal shell in fast libghostty-backed cards. |
| 📡 | Live GitHub activity | See pushes, pull requests, reviews, issues, branch activity, and who has been active recently. |
| ⚡ | Quick terminal | Toggle a persistent overlay with ⌘⌥Q without losing its session. |
| 🧭 | Issue-driven Focus board | Drag assigned GitHub issues into Focus to create matching terminals automatically. |
| 🟢 | Agent-aware status | Cards can report idle, running, or needs-action, plus their current task and description. |
| 🔔 | Native notifications | Get macOS alerts and configurable sounds when an agent needs attention. |
| 💾 | Local-first workspace cache | Issues, Focus terminals, ordering, working directories, and pane position appear immediately after relaunch. |
| 🎨 | Custom branding | Replace the Activity heading with your own text or a persistent SVG, PNG, JPEG, or other macOS-supported image. |
| 📊 | Pull request overview | Compare open and merged pull requests by developer across practical timeframes. |
| 👥 | People profiles | Edit local usernames, full names, and avatars consistently across Runway. |
Runway polls the selected repository through your existing authenticated gh
session. There is no separate token setup and no personal access token stored by
the app. Cached Feeds, issues, Pulls, and repository choices render immediately,
then revalidate in the background. Identical requests are coalesced across
windows, reads are concurrency-limited, failures back off automatically, and
routine polling pauses while Runway is inactive.
- A presence strip shows who has been active recently.
- The timeline groups meaningful pushes, PR activity, reviews, issues, and branch changes.
- Runway, Feeds, and Pulls tabs separate focused work, repo motion, and pull request activity. Feeds includes an optional merge-only filter.
- The Pulls view groups pull requests by developer, sorts developers by merged PRs, and supports 1d, 7d, 30d, MTD, and YTD timeframes.
- The Runway board shows assigned Open and Closed issues, supports local ordering, and can close or reopen issues on GitHub through drag and drop.
⌘Fopens tab-specific search for issues, feed events, or pull requests.- The searchable repo switcher can open any accessible
owner/repo. - Pull to refresh, infinite history loading, and skeleton states keep the feed responsive.
GitHub's events API is not real time. Events may lag by a minute or two and only cover recent history, so presence is a useful signal rather than an attendance system.
The Focus board is the source of truth for the right pane. Each focused issue creates a terminal with the issue title, stable shell session, and configured starting directory.
- Accordion layout always fits every focused terminal into the available window height and gives the active terminal more space.
- Focus mode expands the active terminal to fill the pane.
- Quick terminal stays alive behind its bottom-left overlay.
- File drops insert shell-escaped paths directly into the target terminal.
- Agent commands can start as Claude, Codex, Agent, a custom command, or a plain shell.
Every Runway terminal receives a small local control API. Any agent or script can update its card without a plugin or network service:
# Rename the card and describe the current task
echo '{"name":"checkout-fix","description":"running integration tests"}' > "$RUNWAY_CONTROL"
# Update the status dot
echo '{"state":"running"}' > "$RUNWAY_CONTROL"
echo '{"state":"needs-action"}' > "$RUNWAY_CONTROL"
echo '{"state":"idle"}' > "$RUNWAY_CONTROL"Run this inside any card to discover everything an agent can do:
runway-helpEvery issue entering or leaving the Focus board is appended to the machine-readable
JSONL journal at $RUNWAY_FOCUS_LOG. Agents can filter it by timestamp to reconstruct
what was in Focus during a time range, then enrich that history with git or session data.
runway-focus-log prints the journal from any Runway terminal.
Wrap any command-line agent for automatic running and idle status:
runway-agent codex
runway-agent gemini
runway-agent my-custom-agent --flagClaude Code gets richer automatic attention hooks when launched normally as
claude. The guide and helper commands live inside Runway's Application Support
directory. Runway does not edit your shell or agent configuration files.
| Move | Shortcut | Action |
|---|---|---|
| Focus | ⌘⌥↑ / ⌘⌥↓ |
Move between agents |
| Jump | ⌘1 through ⌘9 |
Focus a specific agent |
| Focus mode | ⌘⌥⏎ |
Expand or restore the active terminal |
| Quick terminal | ⌘⌥Q |
Show or hide the quick terminal |
| Find | ⌘F |
Search the active Runway, Feeds, or Pulls tab |
| Change tab | ⌘⌥1 through ⌘⌥3 |
Open Runway, Feeds, or Pulls |
| Settings | ⌘, |
Open settings and people profiles |
Shortcuts can be customized from Runway → Settings → Shortcuts.
- GitHub requests run through your local authenticated
ghCLI. - Agent control files, workspace state, cached feed and issue data, and helper
scripts stay under
~/Library/Application Support/Runway. - Runway does not install skills into Claude, Codex, Gemini, or other agent configuration directories.
- Runway does not modify
.zshrc,.claude, or equivalent user configuration files.
Runway is a Swift Package and does not require an Xcode project.
./run.sh # debug build, install, and relaunch the app bundle
./watch.sh # rebuild and relaunch after Swift source changes
./build-app.sh debug # assemble dist/Runway.app
./build-app.sh release # optimized app-bundle build
./package-dmg.sh # create the drag-to-install release DMGbuild-app.sh bundles the libghostty framework and signs the complete app
bundle ad hoc. relaunch.sh replaces /Applications/Runway.app and opens it
through the macOS GUI session.
Project map
Sources/Runway/
Core/ App lifecycle, windows, keyboard monitors, notifications
Models/ Agent cards, workspace persistence, people profiles
Services/ GitHub data, Focus history, caching, local control API
Terminal/ Ghostty host, terminal sessions, quick terminal, theme
Utils/ Key bindings, pointer behavior, inline editing
Views/ Activity feed, terminal cards, settings, profiles
GhosttyKit is pinned to a known commit in Package.swift because libghostty's C
API is still evolving.
Runway is available under the MIT License.