laki GitHub

v0.36 · macOS 13+ on Apple silicon · signed & notarized · free & MIT · no account

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 over Cloudflare or Tailscale, plus pushes to ntfy, Slack or Telegram when an agent waits, with its choices as buttons.

$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

Workflows, MCP, CLI

Plan, build, test, PR, CI until green, as blocks Laki runs. Agents start workspaces and ask each other by name 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, effort and permission mode, and which of your accounts it signs in as. 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. A notification has the agent's choices as buttons, ⌘J jumps to the next one that needs you, and bubbles float over your other apps.

✓ Done means checked

As an agent finishes, your lint, test and format scripts run in its worktree, then a second agent reviews the diff. A failure goes back to the agent; you hear done and checked.

⇄ Collision radar

Two worktrees changing the same lines, or main changing them since you branched, are flagged on both rows before merge day. Tell either agent to merge in one click.

→ One next step

One button, ⌘G, does what a workspace needs from you now: answer, fix CI, resolve conflicts, review, ship, merge, archive. The agent's own plan ticks off under its tab.

▤ 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.

⧉ Workflows

Blocks Laki runs for a task, on a canvas or as Markdown in the repo: a plan you approve, the build, tests until they pass, a PR, CI until green. Started by you, a schedule or an event, with a time and money budget.

✶ Laki AI

Optional. Ask in plain words: start workspaces from a screenshot of PR links, ask what your agents are doing, make an extension. On OpenRouter, or your own claude or codex.

▦ Extensions

Live tiles for the sidebar, the bars and My Desk, fed by any command on a schedule, drawn with a 60-element UI kit. Make one with Laki AI, previewed on sample data before it runs.

▷ 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, ask another agent by name, 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; tap an answer there. The menu bar counts what needs you; Allow or Deny right in the notification.

✦ The small things

.env copied into new worktrees. Reader view: an agent's tab as a chat. Specs and notes. Share a tab as a live page. Image diffs, a timer, a video while agents work, and a meme button for the wait.

$ laki config set theme phosphor

100 themes. 82 of them change the shapes and type, 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. Your own accent, corners, icons and CSS on top. 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 or a PIN, or through Tailscale for your own devices. It lasts an hour to three days, or until you stop it. A phone gets its own layout: a sliding sidebar, one pane at a time, agents as chats, and the keys a phone keyboard lacks.

  • your email, a PIN or your tailnet; a new key each time
  • QR code to open it on the phone; the link works once
  • stops on its own when time runs out
  • pushes to ntfy, Slack or Telegram when an agent waits, answered with a tap
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 ask @backend "which endpoints changed?" # one agent asks another

$ 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

No analytics, no crash reports. Laki calls only what you use: gh, your plan limits, an update check (the full list). Data stays in ~/.laki.

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

$ laki keys

Hands stay on the keyboard.

⌘Kpalette: every action, workspace and tab
⌘Nnew workspace
⌘Jnext agent that needs you
⌘Gthe workspace's next step
⌘↑↓switch workspaces
⌥⌘Bfiles, changes, review
⌘IPR, checks, what each agent said last
⌃⌥⌘LLaki from any app

$ ./install

Up in a minute.

macOS 13 or later on Apple silicon. Signed and notarized, and it updates itself. You need git and the agents you use on your PATH (claude, codex, gemini, grok, opencode); gh, signed in, for PRs.

or with Homebrew
brew install --cask igorkasyanchuk/laki/laki

Intel Macs, Linux and Windows (WSL 2): build it yourself, a preview for now. The laki command: Settings › General › Developer.

  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.