No description
  • Swift 95.8%
  • Shell 2.2%
  • HTML 1.9%
Find a file
Vaayne 5e4887fc7d
Some checks failed
CI / ghosttykit (push) Has been cancelled
CI / ios-build (push) Has been cancelled
CI / build-and-test (push) Has been cancelled
CI / bundle (push) Has been cancelled
📝 docs: improve README with screenshots and restructured content
- Add screenshots table (light/dark/lazygit/yazi/settings)
- Move Features above Mental Model; rewrite both sections
- Collapse Build under <details>; trim CLI to 4 key examples
- Rewrite Chinese README in natural tone, removing translation artifacts
2026-04-30 17:55:20 +08:00
.agents 📝 docs: pin TestFlight version to 0.3.5 2026-04-13 23:52:13 +08:00
.github 🔧 ci: use macos-26 runner for ios-build job 2026-04-13 23:51:45 +08:00
assets feat: refresh Mori app icon 2026-04-23 22:22:03 +08:00
docs 📝 docs: improve README with screenshots and restructured content 2026-04-30 17:55:20 +08:00
MoriRemote 🐛 fix: allow horizontal scrolling in KeyBarView even when touch starts on a button (#69) 2026-04-16 10:36:17 +08:00
Packages 🎨 fix: redesign projects section toggle 2026-04-29 23:06:21 +08:00
scripts 🐛 fix: fall back to CI GhosttyKit artifact on local zig linker failure 2026-04-12 17:43:21 +08:00
skills/mori-agent-bridge ♻️ refactor: consolidate mori-agent-bridge skill into single SKILL.md 2026-04-29 16:55:39 +08:00
Sources 🐛 fix: focus the selected agent pane 2026-04-29 22:57:01 +08:00
vendor feat: polish MoriRemote iPad and terminal UX (#60) 2026-04-13 16:35:58 +08:00
.gitignore feat: add MoriRemote iOS app with SSH terminal (#30) 2026-03-31 19:47:30 +08:00
.gitmodules ♻️ refactor: use ghostty submodule and bundle themes for .app builds 2026-03-19 17:34:06 +08:00
AGENTS.md 📝 docs: add chinese docs sync requirements to agents.md 2026-04-15 21:34:53 +08:00
CHANGELOG.md 📝 docs: update CHANGELOG for v0.4.5 2026-04-29 23:09:25 +08:00
CHANGELOG.zh-Hans.md 📝 docs: update CHANGELOG for v0.4.5 2026-04-29 23:09:25 +08:00
CLAUDE.md 📝 docs: add release system, CHANGELOG, and AGENTS.md 2026-03-20 15:51:09 +08:00
design-mockup.html Sidebar redesign — spacing, typography, and visual hierarchy (#50) 2026-04-05 21:42:07 +08:00
LICENSE 📝 docs: add README and MIT license 2026-03-19 16:34:30 +08:00
mise.toml Customizable keyboard shortcuts (#37) 2026-04-02 18:17:52 +08:00
Mori.entitlements feat: release v0.1.1 2026-03-27 17:47:12 +08:00
Package.resolved feat: add MoriRemote iOS app with SSH terminal (#30) 2026-03-31 19:47:30 +08:00
Package.swift feat: add Mori tmux defaults preset (#78) 2026-04-19 21:14:29 +08:00
README.md 📝 docs: improve README with screenshots and restructured content 2026-04-30 17:55:20 +08:00
README.zh-Hans.md 📝 docs: improve README with screenshots and restructured content 2026-04-30 17:55:20 +08:00

Mori

English | 中文

Mori is a macOS terminal built for developers who work across multiple git branches at the same time. Instead of juggling anonymous tabs or losing tmux state between context switches, Mori gives each branch its own persistent environment — and keeps them all one click away in a sidebar.

Screenshots

Light Dark Lazygit Yazi Settings

Features

  • One sidebar, every branch — your projects and worktrees are always one click away; no anonymous tabs to lose track of
  • Sessions that outlive the app — close Mori, reopen it tomorrow; tmux keeps every process running exactly where you left it
  • True branch isolation — each worktree gets its own directory and tmux session; run main and feat/auth side-by-side without interference
  • Local + SSH — connect local repos or remote servers; the native Mac UI works either way
  • GPU-rendered terminal — Ghostty's libghostty engine with Metal acceleration
  • CLI + agent-readymori CLI exposes everything over a Unix socket; built for scripting and AI agent workflows
  • MoriRemote — iPhone/iPad companion for SSH/tmux access when away from your Mac

The mental model

Mori maps your development hierarchy onto tmux. Each git worktree becomes a tmux session; each session holds windows (tabs) and panes (splits). Close the app, come back tomorrow — everything is still running.

Project  (git repo)
└── Worktree  (branch)          ← tmux session  e.g. myapp/feat-auth
    ├── Window  (tab)           ← tmux window   e.g. "shell"
    │   ├── Pane  (split left)  ← tmux pane
    │   └── Pane  (split right) ← tmux pane
    └── Window  (tab)           ← tmux window   e.g. "logs"
        └── Pane
  • Project — a git repository tracked by root path and short name.
  • Worktree — a git worktree checkout; gets its own directory and tmux session (<project>/<branch>).
  • Window — a tmux window inside the session. Equivalent to a tab.
  • Pane — a tmux pane inside a window. Equivalent to a split.

The sidebar lists your projects and worktrees. Click one to attach. Switching is instant — you never lose what was running.

Install

brew tap vaayne/tap
brew install --cask mori

Or download from GitHub Releases. MoriRemote for iOS is on TestFlight.

Build from source

Requires macOS 14+, tmux, mise, Zig 0.15.2, and Xcode.

mise run build    # Debug build (bootstraps libghostty automatically)
mise run dev      # Build + run
mise run test     # Run all tests

CLI

The mori CLI communicates with the running app over a Unix socket, auto-launching Mori if needed. Address flags default to MORI_* environment variables set in every pane — inside a session you can omit them entirely.

mori project open .                          # register current directory as a project
mori worktree new feat/auth --project myapp  # create git worktree + tmux session
mori pane read --lines 100                   # capture pane output (great for agents)
mori focus --project myapp --worktree feat/auth  # switch to a worktree instantly

All commands accept --json for machine-readable output. See docs/cli-redesign.md for the full reference.

Terminal Configuration

Mori uses Ghostty's configuration system. Customize your terminal in ~/.config/ghostty/config. Mori only overrides a few embedding-specific settings (no window decorations, no quit-on-last-window).

For Mori-managed tmux sessions, Mori also applies a small tmux preset by default to speed up onboarding: mouse support on, status bar off. You can turn that off in Settings → Tools if you prefer to keep your own mouse and status-bar behavior from tmux.conf instead.

Keyboard Shortcuts

See docs/keymaps.md for the full list. Key highlights:

Shortcut Action
+T New window (tab)
+D / ++D Split right / down
+Tab Cycle worktrees
++N New worktree
++P Command palette
+G Lazygit
+E Yazi

License

MIT