in0 is a native macOS terminal multiplexer with workspaces, tabs, and split panes — built around a single deliberate idea: at any moment, you should know whether each of your AI coding agents is running, idle, waiting on you, or done. Powered by libghostty, rendered with Metal, written in Swift / SwiftUI / AppKit.
- Workspaces → Tabs → Splits — Group terminals by project. Each workspace owns its tabs; each tab is a binary split tree you can cut horizontally or vertically. Switching tabs never kills your shell.
- Live agent status in the sidebar — A colored dot per workspace shows whether your Claude Code, Codex, or OpenCode session is running, idle, waiting on input, or finished. Driven by a simple Unix-socket hook protocol.
- Theme-aware chrome and settings — Semantic tokens drive the chrome, Settings writes a ghostty-style override config, and the sidebar/tab bar can follow the terminal background live.
- Layout persistence — Workspaces, tabs, split tree, and per-terminal
pwdsurvive restart. Surfaces rebind by UUID; nothing depends on screen coordinates. - No leaked frames between paradigms — SwiftUI owns the outer shell; AppKit owns NSSplitView and the terminal surface. The boundary is one
NSViewRepresentableper surface. Seedocs/ARCHITECTURE.mdfor why. - Source-available — read the source, build it locally, run it for personal or commercial work. See
LICENSEfor the precise terms.
- macOS 14.0 or later
- Apple Silicon strongly recommended
- Xcode 26+ with Metal toolchain (auto-fetched on first build)
Download the latest signed, notarized DMG from Releases, open it, and drag in0 to Applications. The build is notarized, so a normal double-click launches it — no Gatekeeper right-click needed. in0 keeps itself up to date automatically via Sparkle.
zig 0.15.2 is required (Homebrew's zig is 0.16, which doesn't compile ghostty):
mkdir -p ~/.local/zig
curl -fsSL https://ziglang.org/download/0.15.2/zig-aarch64-macos-0.15.2.tar.xz \
| tar xJ -C ~/.local/zig --strip-components=1
brew install xcodegen gettext
xcodebuild -downloadComponent MetalToolchain # ~700MB, one-time./scripts/build-vendor.shFirst run takes 30–60 minutes (clones ghostty source to /tmp/ghostty-src and builds a static library). Subsequent runs reuse the checkout.
./scripts/regen-project.sh
xcodebuild -project in0.xcodeproj -scheme in0 -configuration Debug build
open $(xcodebuild -project in0.xcodeproj -scheme in0 -configuration Debug \
-showBuildSettings | awk -F' = ' '/CONFIGURATION_BUILD_DIR/ {print $2; exit}')/in0.appAgent status is wired through bundled wrappers in Resources/agent-hooks/. zsh sessions launched from in0 auto-bootstrap through the app's ZDOTDIR shim; bash/fish users can copy the rc snippet from Agents → Copy … rc Snippet. Codex still requires enabling its experimental hook flag in ~/.codex/config.toml.
in0 is a source-available terminal app built around the parts that matter most for this project: libghostty integration, SwiftUI ↔ AppKit boundaries, persistent tab/split state, and live coding-agent visibility.
This is a personal portfolio project, not a product. I'm not actively soliciting contributions; if you find something useful here, fork it (see LICENSE for fork terms).
IN0 Source-Available License — read, build, and run for personal or commercial work; don't redistribute, repackage, or train models on the source. ghostty itself remains MIT.
