The terminal client for termchat — presence, matchmaking, and paid help for the terminal AI era, right where you already work.
This is the open-source client: a Bun-powered TUI, a presence daemon, and the
agent hooks that wire termchat into Claude Code. It talks to the termchat service
over the network. Your prompts, cwd, file paths, and transcripts never leave
your machine — the client derives a coarse topic locally and sends only that.
This repo is open precisely so you can verify that.
curl -fsSL https://termchat.sh/install.sh | shThe installer fetches Bun if needed, clones this repo to ~/.termchat/src,
installs dependencies, and wires the Claude Code hooks + status line — pointed at
production by default. Re-running it updates the client.
To point at a different backend (e.g. self-hosting or staging), set TERMCHAT_EDGE:
TERMCHAT_EDGE=https://your-edge.example.com curl -fsSL https://termchat.sh/install.sh | shtermchat login # link this terminal via GitHub
termchat chat # open the lounge TUI
termchat whoami # show the current identity
termchat update # update to the latest release
termchat card # save a payment card (opens the browser)Once installed, opening a Claude Code session starts the presence daemon and the status line shows who's online.
termchat update fast-forwards the installed copy to the newest release; inside
the TUI, /update does the same and restarts. A * beside the version in the
header means a newer release is available.
DMs are end-to-end encrypted — the server stores ciphertext and never holds a key that can open it. By default that means the key on your machine is the only thing that can read your history, so a reinstall or a second machine loses it.
/dm setup backs the key up under a PIN. The backup is encrypted before it leaves
your machine, and the wrapping key comes from your PIN combined with a server-side
value, so guesses have to go through the server one at a time and are
rate-limited. Two things to know before you set one:
- Forget the PIN and your history is gone. There is no reset, for anyone.
- A short PIN is convenient but weaker. With a long one we could not read your messages even if compelled; with a short one we could.
/dm unlock restores on a new machine, /dm lock locks this one immediately, and
/dm panic destroys the backup (your keys then live only on this machine).
| Path | What |
|---|---|
apps/cli |
the termchat client — TUI (Ink/React), presence daemon, hooks, installer |
packages/protocol |
shared wire types + Zod validation (the network contract) |
The termchat service (matchmaking, payments, escrow, moderation) is not part of this repo — the client only ever holds a session token and talks to the API.
The client is pure TypeScript run by Bun — there is no compile
or bundling step. The curl … | sh installer is just a convenience wrapper around
the steps below, so you can do the same by hand and skip it entirely.
Prerequisite: Bun (curl -fsSL https://bun.sh/install | bash). No Node — the
client never uses or falls back to it.
# 1. Get the source
git clone https://github.com/OviatoHQ/termchat-client.git
cd termchat-client
# 2. Install dependencies
bun install
# 3. Run the CLI straight from source (the `termchat` command is apps/cli/src/cli.ts)
bun apps/cli/src/cli.ts whoami
bun apps/cli/src/cli.ts login # link this terminal via GitHub
bun apps/cli/src/cli.ts chat # open the lounge TUITo wire the agent hooks + status line yourself (what the installer's last step does), pointing at whichever backend you want:
bun apps/cli/src/cli.ts install --edge https://termchat.sh # prompts about the status line
bun apps/cli/src/cli.ts install --yes --edge https://termchat.sh # non-interactive (status line on)For a short termchat command, add an alias to your shell profile:
alias termchat="bun $HOME/.termchat/src/apps/cli/src/cli.ts" # or wherever you cloned itbun install
bun run typecheck # tsc --noEmit across the workspace
bun run test # bun test for the CLI + protocol
bun run lint # biome checkApache-2.0. Redistributions and derivative works must retain the
attribution in NOTICE and state any changes. "termchat" is a
trademark of Atoll27 Inc — the license does not grant use of the name or branding.