Jetline icon

Jetline

Run parallel coding agents in git worktrees. Native SwiftUI, libghostty terminal, GitHub-aware.

Features

Workspace = worktree

Every workspace is a real git worktree on disk. Spin up branches, import existing ones, or pull a PR in as a workspace and start working without stashing.

libghostty terminal

Embedded terminal powered by libghostty. Multiple session tabs per workspace, ⌘1…⌘9 to jump, drag to reorder, detached views survive reparents.

Agent agnostic

Wraps claude, codex, and vibe CLIs in a first-class way. Resolves binaries, applies prompt overrides, and gives each agent its own PTY.

GitHub inspector

Live diff (combined / PR / local), PR status with checks, and ahead/behind position against the base branch. FSEvents-backed so the view follows the filesystem.

Fast-path git actions

Commit, create PR, pull, rebase, fix CI, fix comments, review, merge. Clean rebases and pulls run as plain git — no agent tokens spent — and only hand off when there's an actual conflict.

Per-repo scripts

Setup, run, and archive scripts per repo with exclusive run semantics. Prompt overrides globally or per-repo. Bring your own agents, themes, and binary paths.

How it works

> Add a repo

Point Jetline at a local clone. It tracks the default branch and stores worktrees under ~/.jetline/worktrees.

> Open a workspace

New branch, imported branch, or pulled-in PR. A worktree is created, a terminal tab spawns, the agent boots into it.

> Ship

Commit, open a PR, watch checks, address comments, merge — all from the action bar. Conflicts hand off to the agent with the right context already loaded.

Why Jetline

Similar in spirit to web-based agent harnesses, but built differently:

> Native

SwiftUI app. No Electron, no browser, no server. The terminal is libghostty in-process, not a websocket to somewhere else.

> Local

Your code, your worktrees, your gh auth. SQLite persistence lives at ~/.jetline/jetline.sqlite. Set JETLINE_DATA_DIR to relocate it.

> Token-frugal

Routine git operations don't touch an LLM. Agents are invoked when judgement is needed — conflicts, CI failures, review comments — not for every push.

> Bring your own agent

Claude, Codex, Vibe, or a plain shell. Binary paths and prompt templates are configurable globally and per-repo.

Try Jetline

macOS 14 or later. Open source under EUPL v1.2.