laki GitHub

v0.1 · macOS · free & MIT · no account · Linux & Windows coming soon

Run a fleet of
coding agents.
Lose track of none.

Laki is a free macOS workbench for Claude Code, Codex, Gemini, Grok, OpenCode and any CLI. Every task gets its own git worktree, a real terminal and a live status — and keeps running when you close the window.

~/storefront $ laki new storefront --prompt "fix the cart total rounding"

✓ worktree laki/fix-cart-rounding ← main · $PORT 3100

✓ setup · added 412 packages in 3s

◐ claude is working… close the window, it keeps going

Laki — storefront / fix-cart-rounding
◆ drop-legacy-migrations needs you ◐ working real PTYs · tmux-style panes ✗ CI failing → fix CI sends the logs to the agent

$ laki diagnose --your-workflow

Five bugs in how you run agents today.

Plain terminals don't scale past two agents. Laki patches each of these.

severity: high · status: patched

✗ before

✓ laki

$ laki pricing

$0. No plan, no seats, no account.

What other agent tools sell as a subscription, Laki ships free and MIT-licensed. You bring the agent subscriptions you already pay for; Laki adds nothing on top.

$0

Every agent, no cap

Claude Code, Codex, Gemini, Grok, OpenCode or any command, as many at once as your Mac runs. No seats, no markup on tokens.

$0

Agent races

One prompt to several agents, a worktree each. Compare their diffs and answers side by side, keep the best one.

$0

Projects over SSH

Worktrees, git, gh and agents on your dev box or a beefy server. Only the agents and gh live there.

$0

Your phone as a remote

The whole app on your phone, plus pushes to ntfy, Slack or Telegram when an agent waits, with what it asks.

$0

Scheduled agents

Nightly dependency bumps, morning triage. They run on your Mac, not on metered cloud minutes.

$0

Browser for you and the agent

Preview the dev server, pick an element into the prompt. Agents open, click, fill in and screenshot it themselves.

$0

PRs that fix themselves

Failing CI, review comments and merge conflicts go back to the agent. Start from an issue or a PR; archive when it merges.

$0

Board, MCP, CLI

A board of every workspace and to-do. Agents start workspaces and message each other through MCP or laki.

$ laki help --features

Everything a fleet of agents needs.
Nothing it doesn't.

⑂ Parallel agents

One worktree and branch per task, with setup and teardown scripts and a $PORT of its own. Pick the agent, its model and effort. Fork a workspace, archive it, restore it — the chat resumes.

# From an issue or a PR

Paste a GitHub issue and its text becomes the prompt. Paste a PR and Laki checks it out in a worktree, forks too, linked to its checks.

⚑ Race agents

Not sure which agent will nail it? Send one prompt to Claude Code, Codex and Gemini at once, each in its own worktree. Compare shows every diff, answer and changed file; Keep this one archives the rest.

◐ Live status

Running, waiting for you, done, usage limit. From the agents' own hooks, not screen scraping. macOS pings you, the Dock counts what waits, and the ask bar answers an agent's question without touching the terminal.

▤ Real terminals

Tabs and panes, tmux style: drag a tab to split. A daemon keeps them alive while the app is closed. ⌘F finds text.

⏱ Scheduled tasks

A prompt at times you write in plain English: every day at 2am except weekends. Names carry the date: Nightly {{DD-MM}}. A log lists every run.

⇡ PRs and git

The status bar shows the PR and its CI. Failing checks, review comments and merge conflicts go back to the agent on their own. Ship commits, pushes and opens the PR in one step; a merged PR can archive its workspace.

◎ Plan limits

A ring shows how much of your Claude and Codex plans you've used and when each window resets. Agents pick up after a limit on their own.

▷ Dev servers & ports

Run starts the project's run script. Click a listening port to open it, ✕ to stop what holds it, or share it with a public link and QR code.

⌘ Keyboard first

⌘K palette for every action, workspace and tab. ⌘P finds a file. A key for every menu item. And a laki CLI the agents themselves can use.

◉ Browser preview

The dev server on $PORT right next to the agent. Pick an element on the page: its selector, text and size land in the prompt. The camera sends a screenshot.

⌁ MCP server & links

laki mcp gives any agent Laki's tools: start a workspace, message another agent, read its screen, see a diff. Nothing destructive. laki:// links open a workspace, a tab or a prefilled task.

✎ Comment from the diff

Click a line in the changes panel to comment on the PR, or send the note to the agent. Review threads sit next to the code.

▥ Board

Every workspace by where it is: running, needs you, done, PR open, merged. Jot to-dos; one click starts an agent on it.

⇄ Projects over SSH

Open devbox:~/code/app and work there as if it were local: worktrees, setup scripts, agents, gh. $PORT is forwarded, so the preview works too.

✆ Pushes & menu bar

An agent waits? Your phone buzzes through ntfy, Slack or Telegram, with what it asks. The menu bar counts what needs you; Allow or Deny right in the notification.

✦ The small things

.env copied into new worktrees. Image diffs. Edit a file in place. Pin a workspace, stop a stray port, set a timer, play a video while agents work, and a meme button for the wait.

$ laki config set theme phosphor

86 themes. 68 of them change the shapes, not just the colors.

A CRT, Win95 bevels, Aqua gel, a handheld's LCD, an e-reader, a diner's checkerboard, origami folds. Glass mode makes the window see-through. Fonts are built in.

Settings › Appearance
Laki in the Phosphor theme

$ laki remote --hours 8

Approve that rm -rf from the couch.

Use the whole app from your phone or another computer, through a Cloudflare tunnel that only lets in your email. It lasts 1 to 24 hours, or until you stop it. A phone gets its own layout: a sliding sidebar, one pane at a time, and the keys a phone keyboard lacks.

  • one email, one-time code, a new key each time
  • QR code to open it on the phone
  • stops on its own when time runs out
  • pushes to ntfy, Slack or Telegram when an agent waits
Laki on a phone: the sidebar with workspace statuses
Laki on a phone: Claude asking permission to run a command

$ which laki

A CLI for you. And for your agents.

The same daemon answers the app, your scripts and the agents. A skill for Claude Code, Codex, Gemini, Grok and OpenCode — or the MCP server — teaches them to start workspaces, message other agents and read their screens.

zsh — laki

$ laki new app --prompt "fix the login redirect" # a worktree with claude working on it

$ laki ls # projects, workspaces, tabs, status

storefront

fix-cart-rounding laki/fix-cart-rounding :3100 PR #42 ● done

checkout-redesign laki/checkout-redesign :3110 PR #45 ◐ working

drop-legacy-migr… laki/drop-legacy-migr… :3130 ◆ waiting

$ laki send fix-the-login --when-idle "now add tests" # typed in when its turn ends

$ laki schedule add app --when "weekdays at 9am" "triage new issues"

$ laki new app --fan claude,codex,gemini --prompt "free shipping over $100" # a race

$ laki project add devbox:~/code/api # a project over SSH

$ laki ship fix-the-login -m "Fix the login redirect"

✓ committed · pushed · PR opened

$

$ cat PRINCIPLES

Small and boring, on purpose.

01

Agents stay real CLIs

claude, codex, gemini, grok and opencode run in real PTYs, exactly as in your terminal. Status comes from their own hooks.

02

A daemon owns the sessions

The app is a client. Closing it never stops an agent. PR checks, limit waits and the follow-up queue run in the background.

03

Isolation by default

One worktree and branch per task, its own $PORT, its own setup. Local and plain folders work too.

04

No telemetry

Few dependencies, platform features first. Data stays in ~/.laki; ~/.claude is touched only when you install the skill.

ElectronNode daemonnode-pty@xterm/headlessReactxterm.js · WebGLghcloudflared

$ laki keys

Hands stay on the keyboard.

⌘Kpalette: every action, workspace and tab
⌘Nnew workspace
⌘Tnew shell tab
⌘↑↓switch workspaces
⌥⌘Bfiles, changes, review
⌘Pfind a file
⌘IPR, checks, what each agent said last
⌘Ffind in the terminal

$ ./install

Up in a minute.

macOS on Apple silicon or Intel, Node 22.6+ and git. Optional: claude, codex, gemini, grok or opencode on your PATH, and gh (logged in) for PRs. Linux and Windows coming soon.

install.sh
git clone https://github.com/igorkasyanchuk/laki && cd laki
npm install
npm run pack                      # builds dist/mac-arm64/Laki.app
open dist/mac-arm64/Laki.app      # Intel: dist/mac/Laki.app
npm link                          # optional: the laki CLI on your PATH
  1. ⌘O or drop a folder on the window to add a project.
  2. Pick an agent, type what it should do, press Create.
  3. Add more with ⌘N. They all run at once.
  4. Review in the side panel, then Ship it as a PR.