HANKS SPLICE TERMINAL · GTK/VTE · BASH PREFLIGHT · DEBIAN / UBUNTU

Hanks Splice Terminal — Bash gets a preflight check.

Splice (a.k.a. Splice Hub or Splice Terminal) checks the line when you press Enter. Valid commands run untouched. An unknown command word is matched locally against your PATH, builtins, aliases, functions, and typo cache — and if there is a fix, SPLICE asks before anything runs. No model call, no network, no login. The terminal absorbs the mistake before Bash can print an error.

  • Ctrl+Space — ask for one editable command
  • Ctrl+B — choose exactly what the model sees
  • no claude CLI — still a full terminal, still local rescue
SPLICE
⌁ SPLICE 1.3.0 — typo-rescue armed · Ctrl+Space ask · Ctrl+B context
 
hank@shop:~/claudecode$ git status
On branch main
nothing to commit, working tree clean
hank@shop:~/claudecode$ sudo ap-get update
did you mean: sudo apt-get update ? [Y/n] y
Hit:1 http://deb.debian.org/debian trixie InRelease
Get:2 https://git.hankelsner.tech/apt ./ InRelease [1,891 B]
Fetched 1,891 B in 0.4s (4,719 B/s)
Reading package lists... Done
hank@shop:~/claudecode$
cache miss → fuzzy hit · 12 ms · 0 model tokens FIG. 1 — VALID COMMAND PASSES THROUGH · TYPO VETOED BEFORE BASH ERRORS
Model calls are last resort.
Cache, fuzzy match, and typo table run on this machine before SPLICE ever asks Claude.
Commands require approval.
Rescue waits on [Y/n]. Ask results can RUN, TYPE, or DISMISS — the default is TYPE, so you edit first.
AUTO cannot override your context.
Pinned cards stay fixed. AUTO may only manage default and ai selections.

TWO PIECES · CLIENT + SERVER · FREE · NO TELEMETRY

Download.

Two products, one system. Hanks Splice Terminal is the client you install on your machine. Splice Server is the optional host your terminals coordinate through. Grab either — or both.

HANKS SPLICE TERMINAL

The Linux terminal — local typo-rescue, an ask bar, a context sidebar, and bring-your-own-key AI. Debian / Ubuntu .deb, v1.6.0. Also known as Splice, Splice Hub or Splice Terminal.

$ sudo apt install ./splice-terminal_1.6.0_all.deb

SPLICE SERVER

The self-hostable session coordinator — a shared work ledger, file locks, and session-to-session messaging for terminals and AI agents. One command stands up a host.

$ curl -fsSL https://git.hankelsner.tech/releases/splice-server-setup.sh | bash

DEBUG TRAP · EXTDEBUG VETO · <300 MS · 0 TOKENS

Typo rescue is local. Bash never sees the error.

A DEBUG trap with extdebug inspects each command the instant you press Enter. Valid commands hit a type -t check and pass through with zero overhead. A miss runs a local pipeline against your real PATH, builtins, aliases, and functions — the corrected line replaces the typo in history and runs on Y (default yes).

ENTERtype -t valid? → pass through untouched — the trap costs nothing when you type correctly0 ms0 TOK
STAGE 1suggest cache — repeat typos, hits AND misses, keyed by cmdline<1 ms0 TOK
STAGE 2difflib fuzzy vs PATH executables + builtins + your aliases/functions<300 ms0 TOK
STAGE 3curated typo table — gtigit, grpegrep, pyhton3python3, slls<1 ms0 TOK

WHAT THE TRAP WILL NOT DO

  • Touch a valid command. type -t hits return immediately — the rescue layer costs nothing when you type correctly.
  • Run anything unasked. The rescue is a [Y/n] prompt on /dev/tty; n lets Bash do its normal thing.
  • Guess in prose. The model contract is “ONLY the corrected command, or NONE.” One line or nothing.
  • Bill twice. Negative results are cached too — a command SPLICE can’t fix never costs a second call.

WRAPPER-AWARE

Leading VAR=val assignments and wrappers — sudo, env, nohup, time, watch… — are skipped, so the real command word gets corrected, not the prefix.

CTRL+SPACE · CMD / CHAT · INSERT, NOT EXECUTE

Ask for a shell line. Edit before Enter.

The ask bar drops from the header. CMD mode answers a task with exactly one shell command — the prompt contract is “ONLY the shell command, no backticks, no prose” — shown in a result row for your decision. CHAT mode answers questions with your selected context attached, concise, no preamble.

SPLICE ASK CTX ~880 tok
which package owns the vte widget this terminal uses CMD CHAT
dpkg -S /usr/lib/*/libvte-2.91.so.* RUN TYPE DISMISS
READY · ASK_MODEL: DEFAULT · CTX ~880t ATTACHED
hank@shop:~/claudecode$
FIG. 2 — Ctrl+Space TOGGLES THE BAR · THE RESULT ROW IS A PROPOSAL, TYPE IS THE DEFAULT

THREE EXITS, ALL YOURS

  • TYPE — drops the command at your prompt without a newline, so you edit flags before committing. The default Enter action.
  • RUN — feeds the command to the shell with Enter. One click, executed, on your explicit choice.
  • DISMISS — discards it. Nothing entered the terminal.

WHY IT ANSWERS WELL

CMD asks ship with the context blob you selected in the sidebar — your machine, your projects, your conventions — capped at the token budget. So “redeploy the site” comes back as your rsync line, not a generic guess.

All model work runs in threads; the terminal never blocks. A status line reports what the engine is doing, in the interface’s voice: READY, THINKING…, claude CLI not found — install/login first.

CTRL+B · CONTEXTS · SET_BY: DEFAULT / AI / USER

You choose the context. AUTO cannot uncheck a pin.

The sidebar lists every context SPLICE discovered — Claude memory cards, project MEMORY.md files, workspace docs — each with a live token estimate. Only checked contexts are sent. AUTO lets the AI pick a relevant set for your cwd (it sends titles only — never bodies), but a box you set by hand is locked against it.

SPLICE ASK CTX ~880 tok
hank@shop:~/claudecode$ splice-ctx auto --cwd applications/splice-terminal
auto: model picked 3 of 24 contexts (titles only sent)
enabled applications/splice-terminal/MEMORY.md (by ai)
enabled claudecode/PLAYBOOK.md (by ai)
respecting user override: memory/user-hank-nti.md
 
hank@shop:~/claudecode$
CONTEXTS AUTO RESCAN
memory/user-hank-nti.md~180t · user PIN
splice-terminal/MEMORY.md~460t · ai
claudecode/PLAYBOOK.md~240t · ai
applications/trading/MEMORY.md~310t · default
applications/ledger/MEMORY.md~150t · default
applications/asbuilt/MEMORY.md~200t · default
3 ENABLED · ~880t OF 6,000 CAP · COST VISIBLE BEFORE SEND
FIG. 3 — Ctrl+B TOGGLES THE SIDEBAR · THE PINNED CARD SURVIVES AUTO
THE OVERRIDE RULE — WHO MAY FLIP A CHECKBOX
STATEMEANINGAI MAY FLIP IT?
set_by: defaultdiscovered by scan, untouchedyes
set_by: aiAUTO picked it for this cwdyes
releaseun-pins a card without changing its checkboxback to AI-manageable

WHAT GETS DISCOVERED

  • Memory cards from your Claude memory directory.
  • Project cards — every applications/*/MEMORY.md, plus workspace docs like CLAUDE.md.
  • Anything elsesplice-ctx add <path> pins an arbitrary file.

Estimates are chars/4, shown per card and totaled in the header chip — the cost of an ask is visible before you send it.

LEDGER · COST CONTROLS · LOCAL FIRST, TOKENS LAST

Every token accounted for.

An AI terminal that bills you for typing would be a bad tool. SPLICE treats tokens like any other metered utility and shows you the meter.

MEASUREMECHANISMCOST
Local-first rescuecache → difflib fuzzy → curated typo table; a model only when all three miss0 TOK
Negative cachemisses are cached too — a repeat miss never re-bills0 TOK
Model tieringfix_model: haiku for cheap corrections; ask_model of your choice for real asksTIERED
Input capcontext blob trimmed to max_context_tokens (6,000), per-card estimates visible in the sidebarBOUNDED
Output contractprompts demand “ONLY the command” / “be concise, no preamble” — no essay taxTERSE
AUTO sends titlescontext auto-pick sends the id + title list, never file bodies1 CHEAP CALL

V1.3.0 · SHIPPED 2026-07-05

v1.3 is built against measured pain.

The spec did not start from a feature wishlist. It started from Stack Exchange view counts, GitHub issue-title counts, and disaster postmortems — then kept only what a terminal can fix locally, deterministically, for zero tokens. The numbers below are the actual research inputs.

THE EVIDENCE — WHAT PEOPLE ACTUALLY SUFFER, AND WHAT SHIPS FOR IT
MEASURED SIGNALSIZEWHAT V1.3 SHIPS
Error classes fixable by local rules — archives, cp -r, permissions, ports, disk-full, apt locks, “command not found”~70M viewsStack Exchange clustersRescue Engine v2 + Doctors — exit-code-aware strip with the one-line fix, or an expandable diagnosis card
“How do I exit Vim?” — the most famous UX failure in terminal history3.3M views · 5,546 votesStack Overflow · >1M devsEditor lifeline — a dismissible overlay strip when vim traps you; zero bytes injected into the pty
thefuck, a purely local typo fixer — proof users prefer instant local fixes over an LLM call96.5k starsGitHubcategory validation — SPLICE’s hot path stays 100% local and extends to exit-code errors
Session loss and broken resume — the single biggest measured friction in claude-code5,943 + 1,307 titles'session' + 'resume' issuesDurable tabs — cwd, scrollback tail, AI conversation, and pinned cards survive a crash
Permission-prompt fatigue → blind approval → the Dec-2025 rm -rf ~/ incident2,245 titles · 93% blind-approve'permission' issuesAI Command Sentry — read-only inserts green, mutating amber, destructive never one-key
Token and cost anxiety, surprise drains711 titles'usage limit' issuesToken ledger — live session meter, pre-send estimates, a “saved by local” counter
SPLICE
hank@shop:~/downloads$ tar -xvf project-src.tar.gz
gzip: stdin: not in gzip format
tar: Child returned status 1
tar: Error is not recoverable: exiting now
hank@shop:~/downloads$ tar -xzvf project-src.tar.gz
project-src/
project-src/Makefile
project-src/src/main.c
hank@shop:~/downloads$ sudo rm -rf $STAGING/*
GUARD — blocked before execution0 TOKENS
$STAGING is unset — this line expands to: sudo rm -rf /*
protected path / — hard veto; the raw text is not what you were about to run
e edit line   Esc abort — nothing runs until you choose
aborted — nothing was run.
hank@shop:~/downloads$
try: tar -xzvf project-src.tar.gz — .gz needs -z Tab insert · Space explain · A ask AI · Esc dismiss 0 TOKENS
guard veto — deterministic, shell-side, pre-exec FIG. 4 — V1.3 RESCUE STRIP (EXIT-CODE MATCH) + GUARD (EXPANDED-COMMAND VETO)
THE V1.3 RELEASE SHAPE — NINE FEATURES, ZERO TOKENS ON THE HOT PATH
#FEATURETOKENS
F1Rescue Engine v2 — exit-code-aware strip; ~40 launch rules tested against the literal Stack Exchange error text0
F2Doctors — permission, port, disk, apt-lock, apt-locate: stat-level diagnosis, minimal fix, never 777, never “delete the lock file”0
F3Guardrails — pre-exec veto for rm/dd/mkfs/chmod -R/curl|bash/pkill classes, computed on the expanded command0
F4AI Command Sentry — every AI-suggested command classified before insertion; destructive is never one-key0 added
F5Ask-about-this — Ctrl+Shift+A attaches the last command + output; no copy-paste, estimate before sendEXPLICIT ASK
F6Explain-before-run — Ctrl+Shift+E breaks the line down per token from local man pages0 LOCAL
F7Durable tabs — session persistence and one-key restore, with AI-conversation rehydrate on demand0
F8Editor lifeline — the exit-vim overlay; pure GTK chrome, tmux/vim untouched0
F9Token ledger — live meter, per-ask breakdown, daily budget with no hard lockout0

THE GUARD RULES ARE BINDING

  • Never auto-execute. AI output’s ceiling is insertion into the prompt line; your Enter is the only trigger.
  • Approve the expanded command. Confirmations show what actually runs after variable and glob expansion — the raw text is not what you’re approving.
  • Approve consequences, not syntax. Every destructive confirm carries a locally computed effect statement: N files, sizes, devices, reversible or not.
  • Destructive classes are never one-key. rm -rf, dd, mkfs, curl|bash, git push -f — no allowlist applies, doubly so when AI-suggested.
  • The guard is deterministic, not a model. Pure pattern + stat logic that file or web content cannot talk its way past.
  • Prefer reversible. Trash before rm, TERM before -9, backup before truncate, typed device names for raw writes.
  • Two independent gates. Sentry chip at insertion time AND the DEBUG-trap guard at Enter time; neither trusts the other ran.
  • Everything works with AI off. Eight of nine features need no claude CLI at all.

SPLICE SERVER · SESSION COORDINATOR · CLIENT ⇄ HOST

Splice Server — one host, many terminals.

Run more than one terminal — or hand work to AI agents — across the same machines and they step on each other. Splice Server is the fix: a lightweight host that keeps a shared work ledger, coordinates file locks, and passes messages between sessions so nothing collides.

HOW THE CLIENT FINDS THE HOST

  • A server is set → the terminal invokes the master Splice host and shares its ledger, locks and messages with every other client.
  • Run locally with no server → the terminal works standalone; coordination is a no-op, nothing to configure.
  • Running on the server itself → it talks to the local host directly — same behavior, zero network hop.

Fail-open by design: if the host is unreachable, the terminal never blocks — it just proceeds uncoordinated.

WHAT THE HOST TRACKS

  • Ledger — who is working where, from which machine.
  • Locks — automatic claims so two sessions never edit the same project at once.
  • Messages — direct notes between sessions, delivered on their next action.
  • Context — the files, memories and notes a project knows about itself.

STAND UP A HOST

$ curl -fsSL https://git.hankelsner.tech/releases/splice-server-setup.sh | bash

Installs the splice-server service on 127.0.0.1:8114; point remote clients at it over an SSH tunnel.

APT · SIGNED REPO · GIT.HANKELSNER.TECH

Install from the apt repo.

Three commands on any Debian or Ubuntu box. The repo is signed; the keyring lands in /usr/share/keyrings. Installing registers the launcher icon, so SPLICE shows up in your Activities grid — and every future release arrives with a plain sudo apt upgrade.

1 TRUST THE SIGNING KEY
$ curl -fsSL https://git.hankelsner.tech/apt/key.gpg | sudo gpg --dearmor -o /usr/share/keyrings/hankelsner.gpg
2 ADD THE SOURCE
$ echo 'deb [signed-by=/usr/share/keyrings/hankelsner.gpg] https://git.hankelsner.tech/apt ./' | sudo tee /etc/apt/sources.list.d/hankelsner.list
3 INSTALL
$ sudo apt update && sudo apt install splice-terminal
VERIFY
$ apt-cache policy splice-terminal

Done. Launch SPLICE from the Activities grid or run splice. Updates: sudo apt upgrade — same as everything else on your system.

ALTERNATIVE — DIRECT .DEB

Grab the latest package from git.hankelsner.tech/releases and install it directly (no repo, no automatic updates):

$ sudo apt install ./splice-terminal_1.6.0_all.deb

REQUIREMENTS

Debian 12+/Ubuntu 22.04+ · python3 (≥3.10), python3-gi, gir1.2-gtk-3.0, gir1.2-vte-2.91, bash ≥5 — apt pulls them all in. Wayland and X11 both work.

AI features use your local claude CLI and its login. No claude CLI? The terminal, the local typo rescue, and (in v1.3) the rescue strip, doctors, and guardrails all work in full.

REFERENCE · KEYS · CLIS · DEGRADED MODE

Reference.

KEYBINDINGS — 1.3 = SHIPS IN V1.3.0
KEYSACTION
Ctrl+Spacetoggle the ask bar (CMD / CHAT)
Ctrl+Btoggle the context sidebar
Ctrl+Shift+A 1.3ask about this — opens the ask bar with the last command + output attached (visible chip, token estimate, one-click removable)
Ctrl+Shift+E 1.3explain the command in the prompt line, token by token, from local man pages
rescue strip: Tab / Space / A / Esc 1.3insert the fix at the prompt / expand the diagnosis card / ask AI with the failure attached / dismiss
Ctrl++ / Ctrl+font size up / down
Ctrl+Shift+T / Wnew tab (label follows your cwd) / close tab
Ctrl+Shift+C / Vcopy / paste

DEGRADED MODE

Without the claude CLI installed and logged in, SPLICE is still a complete terminal: tabs, scrollback, OSC7 cwd tab labels, the local typo rescue — and in v1.3 the rescue strip, doctors, guardrails, explain, durable tabs, and the editor lifeline — all work at full strength. The ask bar states it plainly — claude CLI not found — install/login first — and stays out of your way.

SPLICE-AI — THE ENGINE CLI
COMMANDDOES
suggest "<cmdline>"corrected full cmdline on stdout, or rc 1 — the rescue pipeline, scriptable
ask "<english>"one shell command for a task, context attached
chat "<question>"concise answer, no preamble, context attached
explain "<cmdline>"one-paragraph explanation of a command
rescue 1.3failed command + stderr in → ONLY the corrected command + one-line why; haiku tier, cached
classify 1.3command on stdin → JSON verdict: read-only / mutating / destructive (the sentry’s gate)
SPLICE-CTX — THE CONTEXT CLI
COMMANDDOES
scandiscover memory cards + project MEMORY.md files; pins survive rescans
list [--json]every card: checkbox, ~tokens, set_by, title
enable / disable --by user|aiflip cards — --by ai bounces off user pins
release <id>un-pin without changing the checkbox
add <path>register any file as a pinned context
blob [--max-tokens N]print the exact blob an ask would send, trimmed to budget
auto [--cwd DIR]one cheap call picks relevant cards — titles only

FAQ · PLAIN ANSWERS

Questions.

Is Splice the same as Splice Hub or Splice Terminal?

Hanks Splice Terminal is the full name; Splice, Splice Hub, Splice Terminal and Hanks Terminal all refer to the same product.

How is it different from a normal terminal?

It checks the command line the instant you press Enter. Valid commands run untouched with zero overhead; a typo is caught by a local pipeline and fixed on Y/n before Bash ever prints an error. Destructive commands are vetoed by a deterministic guard, not a model.

Does it send my commands to the cloud?

No. Typo-rescue and guardrails run entirely on your machine with no network call. The ask bar only sends what you explicitly ask, and only to the provider whose key you supplied. No telemetry.

Does it run on Android?

Not today — it is a Linux desktop terminal for Debian and Ubuntu. An Android path is being scoped.

How much does it cost?

The terminal is free. AI features use your own API key, so you pay only your provider for what you use — and most features need no AI at all.

How do I install it on Debian or Ubuntu?

Add the signed apt repo and run sudo apt install splice-terminal, or grab the .deb directly. Updates arrive with sudo apt upgrade.

What is Splice Server?

A lightweight, self-hostable session coordinator: a shared ledger, file-lock coordination and session-to-session messaging so multiple terminals and AI agents on the same machines don't collide. Clients invoke a master Splice host; run locally with no server, or on the server itself.

Which AI providers work?

Bring your own key: Anthropic (first-class), OpenAI, Gemini, or any OpenAI-compatible endpoint (Mistral, DeepSeek, Together, OpenRouter, Ollama, LM Studio).