Skip to content

Splitterm Desktop

Your terminal while you work. Your runner while you're away.

Splitterm is a fast tiling terminal you drive by hand. The same app can work through your project's issues in the background, on your own machine, with your project's notes as context. Send work from the web or your phone. Review it when you're back.

Coming soon for Windows. Free forever for the terminal. macOS and Linux in progress.

project-012Needs you, 2 items
5h 34% · wk 61%Home PC · 1 running
#60 Add dark mode to settingsheadlessst/60-dark-mode-settingsRunning · 41m
Read src/settings/SettingsPage.tsx
PauseTake over
Claudeproject-01-apimainContext: 3 notes
> Why is GET /invoices slow for big accounts?
· Read src/db/invoices.ts
· Ran EXPLAIN on the list query
It does a sequential scan: there is no index on invoices.created_at.
> Add an index for invoices.created_at and show me the query plan
Working · 1m 12sesc to interrupt
>

Pause stops everything in the window. Sample project, sample data.

The terminal

If you never touch agents, nothing gets in your way.

Every shell you have, tiled from the keyboard. Split, drag to re-tile, zoom, and rebind any key. A tab for each project, a second window when you drag a tab out, and your Windows Terminal profiles imported in one click.

After a reboot, your layout comes back per project, and Claude panes resume their session in one click. Files and Git open as tiles when you want them.

Agent features stay out of sight until you set them up. Sign in once to download. After that, the terminal never asks you to sign in.

Hidden window

Idle

Nothing animates while the window is hidden

After a reboot

Restored

Your layout comes back, per project

No usage chip, no runner chip, no bell. Absent, not greyed.

project-01
project-01project-02project-03
pwshproject-01-web
PS C:\dev\project-01-web> git pull
Updating 3b9e0c1..f24d7a8
Fast-forward, 3 files changed
PS C:\dev\project-01-web> npm install
up to date, audited 412 packages in 2s
PS C:\dev\project-01-web> npm run dev
> node scripts/dev.mjs
compiled client and server in 1.8s
ready on http://localhost:3000
GET /invoices 200 in 41ms
GET /settings 200 in 12ms
Git Bashproject-01-api
dev@home-pc ~/dev/project-01-api (main)
$ git log --oneline -4
a41c9e2 Add invoice PDF footer
7d03b1f Round tax per line, not per invoice
c52e8a0 Move currency helpers to lib/money
19fa6d4 Run CI on Node 22
dev@home-pc ~/dev/project-01-api (main)
$

Pane

Split rightCtrl+Shift+D
Zoom pane

Open a tile here

Files here
Git graph for this repo
Claudeproject-01-api

Session from yesterday 18:40

ResumeStart fresh
Ctrl+Shift+DSplitAlt+1..9Focus a paneCtrl+1..9Switch projectCtrl+KEverything elseDrag a tab outNew window

How it fits

One project. The same issues on your desk, on the web and on your phone.

A project holds your repos, your issues and your notes. An issue becomes a run on one of your own machines. Any of them can run any issue, and if the repo isn't there, it clones it.

The desktop shows the same Issues and Notes as the web, so there's one queue, not two boards. Needs you is one list too: answer it anywhere and it clears everywhere.

The web and your phone come with Pro. The terminal on your desk is free.

Diagram: the web and your phone file, send, answer and review. The sample project, project-01, holds repos, issues and notes. It sends issues, notes and commands to your machines, Home PC and Laptop, and they send back run state, questions, summaries and a heartbeat. Terminals stay on the machine.

Web and phone

  • File
  • Send to a machine
  • Answer
  • Review
the same issues, notes and Needs you

Project · project-01

Repos
project-01-apiproject-01-web
Issues
9 open, 2 in review
Notes
3 in context
issues, notes, commands
run state, questions, summaries, heartbeat
Home PCRunner on · 1 running
5h34%
Week61%
LaptopAsleep

1 queued, starts when it wakes

Terminals stay here

On the web
IssuesAll repos
  • #57Export invoices as CSVIn review
  • #58Fix timezone bug in recurring paymentsNeeds answer
  • #59Upgrade the Postgres driverUp next
  • #60Add dark mode to settingsRunning on Home PC
In the desktop
project-01IssuesListBoard
  • #57Export invoices as CSVIn review
  • #58Fix timezone bug in recurring paymentsNeeds answer
  • #59Upgrade the Postgres driverUp next
  • #60Add dark mode to settingsRunning on Home PC

Six words to learn

  • Project

    your repos, issues and notes

  • Issue

    a piece of work, #numbered

  • Run

    one attempt at an issue on one machine

  • Note

    lasting context for agents. Pin it to load it

  • Machine

    a computer with Splitterm open

  • Pane

    a terminal you drive

The runner

Background work with plain states, and a next move for every one.

A run is Claude Code in its own headless mode, on your machine, in its own copy of the repo on its own branch: one per attempt. Nothing types into a terminal to steer it.

The agent talks back through Splitterm: it asks, plans, reports and presents. Every state says why it's in that state. Every stuck run has a next move: Answer, Take over or Retry clean.

You can always read exactly what the agent was told.

project-01
Home PC · 1 running2Needs you, 2 items
Runsproject-01 · Home PC

Needs you2

  • #58Fix timezone bug in recurring payments38m

    project-01-apiQuestion

  • #62Add audit log for refunds6m

    project-01-apiPlan to approve

Running1

  • #60Add dark mode to settings41m

    project-01-webRunning tests (2 of 3 suites)

Held and queued1

  • #59Upgrade the Postgres driver

    project-01-apiHeld · Keeping 30% of your 5h window for you. Starts at 01:40.

In review1

  • #57Export invoices as CSV

    project-01-webRevision 2

Branches on this machine: 4 · 1.8 GB · 1 not pushed yet (protected)

#58 Fix timezone bug in recurring payments

Needs you · Question

Home PCst/58-recurring-tzattempt 1sent from the web at 23:02

The agent asks

Store recurring times in UTC or in the account's timezone?

Read 6 files23:05
  • src/jobs/recurring.ts
  • src/jobs/scheduler.ts
  • src/lib/time.ts
  • src/models/schedule.ts
  • test/recurring.test.ts
  • package.json
Ran npm test: 2 failing23:21
  • recurring › keeps 09:00 across a DST change
  • recurring › monthly on the 31st

Asked a question23:40

Take overRetry clean

This machine

Home PC

Nights, 22:00 to 07:00

1 running · 1 held

5h72%
Week61%
  • Answer: from any device

  • Take over: finish it yourself in a pane

  • Retry clean: a fresh attempt from the base branch that carries the last attempt's summary

File it at night, review it in the morning. Watch one night with the runner

Panes and runs

Pin a run next to your panes. Take it over when it drifts.

Drag a run into your grid to watch it in your own terminal font. If it heads the wrong way, Take over turns it into a live Claude pane on the same session, on the run's own branch. Hand it back when you're done.

How a run tile behaves

  • A run never opens a pane, types into one or steals focus.
  • A run tile is a read-only live view, in your terminal font and theme.
  • Closing the tile does not stop the run.
  • Take over stops the run after its current tool call, then resumes the same session in a pane.
  • The web shows Taken over on Home PC until you hand it back or send it for review.

Take over, then hand back

Wrong file.

#60 Add dark mode to settingsheadlessRunning
· Read src/settings/SettingsPage.tsx
› Editing src/settings/LegacyThemeMenu.tsx
PauseTake over

Keep going without meCtrl+K from a Claude pane

Leaving mid-task? Turn what you're doing into a run on its own branch, so your folder stays yours.

Goal: Finish moving forms to the new validation helper

Files #64, copies your uncommitted changes into st/64-validation-helper and carries on there.

File from this pane

A stack trace shows up in a pane. One shortcut turns it into an issue, with the last output attached if you want it.

pwshproject-01-apimain
PS C:\dev\project-01-api> npm run jobs:once
running recurring-payments for 2026-10-25
RangeError: Invalid time value
at toZonedTime (src/jobs/recurring.ts:88:17)
at nextRunAt (src/jobs/recurring.ts:41:10)
at scheduleAll (src/jobs/scheduler.ts:23:5)
at async runTick (src/jobs/scheduler.ts:57:3)
Job recurring-payments failed at 02:30 (Europe/Berlin)
PS C:\dev\project-01-api>

File from this pane

Ctrl+I

Project

project-01

Repo

project-01-api

from pane

Branch

main

from pane

Attach last output
RangeError: Invalid time value
    at toZonedTime (src/jobs/recurring.ts:88:17)
    at nextRunAt (src/jobs/recurring.ts:41:10)
    at scheduleAll (src/jobs/scheduler.ts:23:5)
    at async runTick (src/jobs/scheduler.ts:57:3)
Job recurring-payments failed at 02:30 (Europe/Berlin)

Exactly these 6 lines are attached.

Criteria

One per line, ticked at review

Priority

Only what is shown here leaves this machine

CancelFile #66

Project context

Write it once. Every run starts with it, and so can your Claude panes.

Notes are titled and filed in a folder or bound to a repo. Pin one and it's In context: it loads into every run, and into every Claude pane you start from the Claude preset, from outside your repo. You can see exactly what an agent was told and how big it is, so the context stays lean.

Want it in a plain claude you type yourself? One optional click, Add Splitterm to Claude Code, and those sessions get it too.

Agents can suggest notes when they learn something lasting. Only you pin them.

project-01
Notes
Search notesAnyonePinned

In context · 3 notes · 2.1k tokens · loaded into 2 panes and 1 run

2.1k / 8k

Warns above about 8k tokens

Pinned3

  • How to run project-01 locallyOps
  • Money is always integer centsConventions
  • API errors: shape and codesproject-01-api

Suggested by agents1

Stripe webhook retries

Agent · Home PC · #58 · not pinned

PinDismiss
Diagram: pinned notes, notes for the repo, the issue and its criteria, the last attempt summary and review feedback merge into what the agent is told, about 3.1k tokens. That goes to run 60 on Home PC and to a Claude pane in project-01-api. Anything else is fetched on request with notes_search.

Goes in

  • Pinned notes (3)
  • Notes for this repo
  • Issue #60 and its criteria
  • Last attempt summary
  • Review feedback

What it was told · 3.1k tokens

## project-01: pinned notes

- Money is always integer cents

- API errors are { code, message }, codes in docs/errors.md

- Run locally: npm run dev in project-01-web

## Issue #60: Add dark mode to settings

Criteria: a Theme menu in Settings; follows the system by default

One block, shown verbatim on every run

  • #60 on Home PC

    a run

  • Claude · project-01-api

    Context: 3 notes

  • More on request

    notes_search

Your repo's CLAUDE.md still loads as usual. Splitterm writes nothing into your repo.

Review

Look at it, run it, comment. The PR opens only after you say yes.

When a run is done it presents its work: a summary, what changed and screenshots of the result. Tick the acceptance criteria, leave a comment, or open a terminal on the run's branch and try it yourself.

Request changes goes back to the same session. Approve asks once, then the agent rebases, runs the checks and opens the pull request.

project-01

#57 Export invoices as CSV

In reviewRan on Home PCst/57-export-csvpushed

Presentationsample data

Added Export CSV to the invoice list. It exports every invoice in the chosen date range, with amounts written from integer cents as two-decimal values. A preview shows the first rows before anything downloads.

What changed in revision 2: header row is bold

Screenshots and pinned comments

InvoicesExport CSV
Preview before downloadDateNumberCustomerAmountDownload
1

Header row should be bold

Addressed in revision 2

Acceptance criteria

7 files · +212 -38

  • src/invoices/export.ts+96-4
  • src/invoices/export.test.ts+58-0
  • src/invoices/InvoiceTable.tsx+41-22
  • 4 more files+17-12

41m · 412k in · 38.9k out · Claude Sonnet 5

git fetch origin st/57-export-csv && git switch st/57-export-csv

A run that changed nothing lands in Needs you as Finished, no changes. It never lands in Done.

From another machine, Check out here makes a fresh copy from the pushed branch. It never switches your working copy.

This machine

You decide when it runs, and how much of your limits it gets.

Only you, at the machine, can turn the runner on. From the web or your phone you can send work, pause it or stop it, but never switch it on.

Setup ends with a short test run, so you see the whole loop work before you trust it overnight.

Leave room for me holds new runs before they eat the window you need. Anything outside your run policy asks you first.

Setup

4 steps

Checks, a name, a schedule and a test run

Switching on

Only here

The web can pause the runner, never start it

A

Let this machine run work

  1. 1

    Checks

    • Claude Code signed in
    • git 2.46
    • GitHub access: 3 repos
  2. 2

    Name this machine

    Home PC

  3. 3

    When and how much

    Nights, 2 at once, Leave room for me. See B.

  4. 4

    Test run

    One-minute test: read the repo and present a five-line summary

    Running

Once per machine. You can change any of it later.

B

This machine

Runner

Turned on here. The web can pause it, never turn it on.

When

The schedule decides when runs start. A run that has started always finishes.

At once2

1 on laptops, 2 on desktops.

Leave room for me
More
  • Keep this PC awake while running
  • Only on power
  • Pause while I share my screen
  • Take from Up next: Off
  • Repos folder C:\dev
  • Run policy: edits, tests and lockfile installs in the worktree. Anything else asks, and pushes only go to the run's branch.

C

Usage

5-hour window72%

resets 14:05your 30% starts at the line

Week61%

resets Mon 09:00your 15% starts at the line

Opus, week18%

Sonnet, week44%

#65Add a yearly summary report

Held: outside Nights. Starts at 22:00.

Show the state: Usage unknown

#58 asks: Allow npm install date-fns-tz?

Receipt#6352m · 388k in · 41.2k out · Claude Sonnet 5

  • Stop everything on Home PC

    One button on the web stops every run there and pauses the runner. Turning it back on still takes you, at the machine.

  • Resumed after restart

    If the PC restarts mid-run, the run picks up on the same session when Splitterm opens, and says so.

  • Quiet while you type

    No toast while you are typing in a pane. Finished runs wait in Needs you without a sound, and quiet hours hold every alert until morning.

Local first

Splitterm never sees your terminals. Here is exactly what it sends.

What you type, what your shells print and your code are never sent to Splitterm. Your code goes to GitHub through your own git.

If you link a project, only what the web needs to show your work goes to Splitterm, and a log in Settings shows every request with its size and purpose. Your Claude login stays where Claude Code keeps it.

No remote view of your terminals. On purpose.

Sign out and every project, note and branch stays on disk as a local project.

Never sent to Splitterm

  • terminal contents and scrollback, except output you choose to attach when filing an issue, shown to you first
  • keystrokes and shell history
  • environment variables
  • your code (it goes to GitHub through your own git)
  • full run transcripts
  • your Claude login

Sent only for a project you link (Pro)

  • issues and notes you write, and anything you attach
  • issue and run states
  • one line of activity per run
  • questions and answers
  • plans and summaries
  • screenshots an agent presents (kept 30 days)
  • diff stats and receipts
  • machine name and a heartbeat every 60 s
  • usage percentages (its own switch)

Runs send what Claude Code sends to Anthropic, with your own login, the same as running claude yourself. That traffic is Claude Code's, so the log below lists only what Splitterm itself sends.

What Splitterm sends

Pause usage sharing
  • 07:40:12Splitterm312 B

    heartbeat

    Home PC is online

  • 07:40:15Splitterm1.1 KB

    run #63 state

    state and one activity line

  • 07:41:02Anthropic410 B

    usage

    your limits; the token never goes to Splitterm

  • 07:41:03Splitterm96 B

    usage share

    5h and week percentages only

  • 07:44:30Image storage184 KB

    screenshot for #63

    presented for review

Pricing

The terminal is free forever. Pro takes your projects everywhere.

Free gives you the full terminal, forever, and one agent team with issues, notes and the runner on your own machine.

Pro is $8 per month or $75 per year: unlimited agent teams, cloud sync, and the dashboard on the web and your phone.

Free

$0forever

Free account required to download

  • The full tiling terminal, with tabs, windows and every shell
  • Layouts and Claude sessions restored
  • One agent team with issues, notes and the runner on this machine
  • Runs on your Claude login
  • Review on the desktop
Get Splitterm

Pro

$8per month

Billed monthly

  • Everything in Free
  • Unlimited agent teams
  • Cloud sync for projects, notes, settings and keymap
  • The dashboard: file, send, answer and review from the web and your phone
  • Send work to any of your machines
  • Needs you on every device
Get Pro

A free account gets you the download. The terminal never asks you to sign in again.

Runs use your own Claude account, so model usage isn't included.

Every plan detail is on the pricing page.

Your terminal while you work. Your runner while you're away.

Free for the terminal, forever. Pro when your projects need the web and your phone.

Coming soon for Windows. macOS and Linux in progress.