Marlin
Open source terminal · MIT

A terminal built for
running coding agents.

You do not run one command and watch it any more. You run four agents in four panes, and none of them finishes while you are looking. Marlin is built for that.

Install Source Sponsor
Marlin
Marlin
>
bar top panes 1 theme Marlin Dark a mock, not the app

A working mock, running in this page. Nest a couple of splits, rotate the tab bar, click a file to watch it take over the tab, right-click a pane, double-click a tab to rename it. It behaves the way the real app behaves.

What it does

All of this ships today
Splits

A tab holds a tree

Vertical and horizontal splits nest, so any mix is just what happens when you press the second key. Closing a pane collapses its parent and gives the space back to its sibling.

Tabs

Three-state bar

Top, side, or hidden, cycled with one key. Long branch names fit down the side of a wide display where they never fit across the top of one.

Git

Staging, conflicts, diffs

Branch, ahead count, merge conflicts, staged and changed, with stage, unstage and discard on each row. Diffs render unified or side by side. It runs your git.

Workspaces

A folder of repos is a folder of repos

A directory holding several repositories shows as repositories rather than pretending to be one project, which is what a working directory usually is.

Reading

Files take over the tab

Click a file and you get three columns: tree, file, terminal. Escape puts your exact layout back. Syntax highlighting across 30 languages, and files are editable.

Agents

Status you can see

A dot per pane and per tab, driven by real shell marks rather than guesswork: running, finished, failed. A dot appears only when a pane knows something you do not.

And here it is actually running

Not a render

Marlin running Claude Code in a real repository with nine repos in the sidebar, which is what it was built for. Every competitor's hero is a mockup; this one is a screenshot.

Marlin running Claude Code, with the repository sidebar showing nine repositories and the explorer beneath it
Not a mockup. Marlin running Claude Code in a real repository, which is what it was built for.

Security, and what leaves your machine

Nothing does

A terminal sees everything: your keys, your tokens, your employer's source. That makes the interesting question not what a terminal can do, but what it refuses to do. Marlin's answers are deliberate, and they are checkable, because the source is right there.

PromiseWhat that actually means
No cloud, no account, no sign-inMarlin has no backend. There is nothing to log into, and no service that could be down or shut off.
No telemetry, of any kindNot opt-out, not anonymised, not “just crash counts”. There is no analytics code in the app.
Your terminal output is never stored or sentScrollback lives in memory in your session, and the diagnostics log deliberately contains none of it, because scrollback holds passwords and private source.
Error reports are a button, not a background jobProblems are written to a local file. Reporting opens a GitHub issue pre-filled and editable, so you read exactly what you are sending before you send it.
No AI in the loopMarlin does not read your commands, does not send them anywhere, and has no model in it. It runs agents; it is not one.
Your shell stays your shellMarlin never parses your command line. Completion, history and autosuggestions remain fish’s and zsh’s job, so your history file is never duplicated somewhere new.
Your git is your gitThe sidebar shells out to the git binary you already have, with your config, your credentials and your hooks. No second implementation with its own idea of what your repository contains.
The webview is locked downIt can receive terminal output and move its own window. No filesystem, shell or network permission, and a content security policy that blocks outbound requests, so nothing the terminal prints can call home.
Links open in your browser, and only http and httpsA UI that can be navigated by something the terminal printed is a class of problem worth closing before it exists.
Settings are a file you own~/.config/marlin/marlin.toml, plain text, editable by hand, safe to keep in a dotfiles repo.

One honest caveat. Builds are not yet signed with an Apple Developer ID, so macOS will warn you about an unidentified developer. The instructions below say how to get past it. Building from source avoids the question entirely, and is the option we would pick if we were you.

Install

macOS · Apple silicon

From source

$ git clone https://github.com/ehsangazar/marlin
$ cd marlin
$ pnpm install
$ pnpm tauri build

Needs Node, pnpm and a stable Rust toolchain. The app lands in src-tauri/target/release/bundle.

Shell integration

# zsh
$ echo 'source ~/path/to/marlin/shell/marlin.zsh' >> ~/.zshrc

# fish
$ echo 'source ~/path/to/marlin/shell/marlin.fish' \
    >> ~/.config/fish/config.fish

Optional. It emits standard prompt marks so the status dots and directory tracking work. Without it you get a working terminal with no dots, which is degraded rather than broken.

Not done yet

Listed because a page of only wins is a sales page

Something broken?

Issues get picked up

Open an issue with what you did and what happened. Agents triage every issue, reproduce what they can, and open a pull request where the fix is obvious. A human reviews everything before it ships, so nothing lands unread.

Report a bug Request a feature Sponsor

Marlin is free and always will be. Sponsorship is monthly and cancellable on purpose, because this is an early project and you should be able to stop as easily as you started.