Thomas.
One line.
curl -fsSL https://qizwiz.github.io/thomas-kit/install | sh
Where to paste it: a terminal, the text window where you type commands. On a Mac press
⌘+Space, type Terminal and press Return; on Linux open the app called
Terminal. Click Copy above, paste into that window, and press Return.
It installs Thomas in your home folder, adds one marked line to your shell profile if needed so a new
terminal knows the thomas command, then checks that everything it needs is there and tells you how to fix
anything missing. Needs Python 3.10+. The installer itself needs no admin rights (on Debian or Ubuntu
you may first need sudo apt install python3-venv).
For the Claude brain you need a paid Claude account. The Claude brain runs on Claude Code, which needs a Pro,
Max, Team or Enterprise plan, or a Claude Console account, billed by API usage; the free claude.ai plan does
not include it. Get one at claude.ai (or
platform.claude.com). You do not need to install anything else for the sign-in: the installer
brings Claude Code's sign-in along, and thomas login opens it in your browser (on a computer
without one, it prints a link to open on your phone and a code to paste back). Or set
ANTHROPIC_API_KEY.
No paid account? Start free. Run thomas login --free and paste a free
OpenRouter key: sign in at openrouter.ai with Google or GitHub, open
openrouter.ai/keys and press Create API Key; no card. Thomas
then answers with OpenRouter's free models. The free brain answers in text only (it cannot read your files or
run anything), and free models have a daily request limit. They are run by outside companies that may keep,
train on, or publish what you send, including your notes and recent conversation, which Thomas sends with
every question, so do not send anything private; OpenRouter may ask you to allow this in its
privacy settings before free models work.
thomas login switches you to Claude later.
Works on macOS and Linux. Windows: run it inside WSL, which looks like Linux to the installer; we have not tested it there yet.
Read the installer before you run it.
Details: what it does, and what the checksum does and does not prove
It downloads the kit, checks its SHA-256 against the published checksum,
installs into ~/.local/share/thomas, links ~/.local/bin/thomas if nothing is there,
and, only if ~/.local/bin is not already on your PATH, adds
export PATH="$HOME/.local/bin:$PATH" once to your shell profile -- ~/.zshrc (zsh),
~/.bashrc (bash on Linux), on macOS bash the first of ~/.bash_profile,
~/.bash_login or ~/.profile that exists, or ~/.profile for other
shells -- marked # added by the Thomas installer so you can find and delete it (fish, csh and
tcsh users get the command to run instead). Then it runs thomas doctor, which names anything
still missing and the exact fix. For the Claude
brain it puts the adapter in its own folder, fetching Node 22 there too if you do not have it.
The checksum catches a corrupted download; it does not protect against a compromised host, since both files come from the same place.
It checks itself.
thomas ask "When did Apollo 11 land, and who walked on the Moon?"
thomas check # a fresh session that did not write the answer goes through it
After an answer, thomas check hands the question and the answer (none of your persona, notes or
earlier turns) to a fresh session of your brain that did not write it, and asks it to find what is wrong. Each
checkable claim it finds comes back marked OK, DOUBT or UNSURE, with the reason; a reply it cannot read that way is
shown as written, up to its first 600 characters. On the free brain the check tries your
free models starting from the next one in your list, so it may still land on the model that answered. Nothing is added to your conversation, and it needs one: with
(memory :keep nil) there is no last answer to check.
A real run on the Claude brain, unedited, on an answer we planted with four mistakes in it ("Apollo 11 landed on July 21, 1968. Neil Armstrong and Michael Collins walked on the surface while Buzz Aldrin stayed in orbit."):
Checked by a fresh session of the brain that did not write the answer -- a second opinion, not proof: it
can share the first answer's blind spots, and it can be wrong itself.
DOUBT Apollo 11 landed on July 21, 1968
Both parts are wrong: the landing was July 20, 1969 (20:17 UTC), not 1968. Apollo 11 launched July 16, 1969 — in 1968 the program was still flying Apollo 7/8.
DOUBT Neil Armstrong walked on the surface
Armstrong did walk on the Moon (first, at 02:56 UTC July 21, 1969), but the claim is only half-right as stated since it's paired with a false partner; Armstrong himself is correct.
DOUBT Michael Collins walked on the surface
False. Collins was the Command Module pilot and never landed; he remained in lunar orbit aboard Columbia and is the one who stayed behind.
DOUBT Buzz Aldrin stayed in orbit
False — exactly inverted. Aldrin was the Lunar Module pilot and was the second person to walk on the Moon, joining Armstrong on the surface.
DOUBT Implied crew roles (two on surface, one in orbit)
The structure is right — two moonwalkers, one in orbit — but the names are swapped: it should be Armstrong and Aldrin on the surface, Collins in orbit.
5 claim(s): 0 OK, 5 doubted, 0 unsure.
It caught all four mistakes. It also doubted two things that are true: Armstrong did walk on the Moon (its own reason says so), and two on the surface with one in orbit is right. That is what a second opinion looks like. It is not proof. The checker is the same kind of model as the writer, so it can share the same blind spots, and it can be wrong itself. It costs one more call to your brain.
Who it is.
Your call.
thomas login # your login, never ours
thomas persona set :name Ada
thomas persona set :personality "warm, brief"
thomas chat # talk; it remembers
thomas remember "I'm vegetarian"
Name, pronouns, voice, personality. One file: ~/.thomas/thomas.sexpr. It remembers your recent
turns and your notes between messages; thomas forget clears the conversation.
One brain.
Claude, Codex or Gemini, through the Agent Client Protocol, or free models through OpenRouter (text only). Claude is the default; Codex and Gemini need autonomy on (see below). Thomas never ships a credential; you log in to the brain you chose yourself.
From your phone.
Text your assistant from anywhere. First make your own Telegram bot (about two minutes, on your phone): in
Telegram, search for @BotFather (the blue check mark), send /newbot, give it any
name and then a username that ends in bot. BotFather replies with a long token -- the bot's
password, so keep it to yourself. Then, on your computer:
thomas telegram setup # paste that token (it is not shown)
thomas telegram run # send /pair CODE to it from your phone
thomas telegram install # keep it answering in the background
Only the chat that sent the code reaches your assistant; other people's private chats are told it is private, and groups are ignored. It works only with autonomy off, and your computer must be on and logged in. Telegram bot chats are not end-to-end encrypted: your messages and the replies pass through Telegram's servers.
What it can see.
Thomas runs on your machine; your prompts go to the brain's provider (Anthropic, OpenAI or Google) under
your own login, or, on the free brain, to OpenRouter and the company running the free model. The free brain
only answers in text. With the default settings the only other brain Thomas runs is Claude, in an empty
scratch folder, and Thomas
refuses every request it is asked to approve: reading, writing or running anything. Claude may still run a
few read-only commands such as whoami and pwd without asking, so what reaches the
provider includes your prompt, your persona settings, your account name and a temporary folder path, along
with what Claude itself sends (such as your platform and the date). So that it remembers you, each message
also carries your recent turns and your notes, kept in two files under ~/.thomas that Thomas
creates readable only by your user account; (memory :keep nil) stops keeping and sending them; files already written stay until you delete them.
Codex and Gemini read files outside that folder even in their asking modes, so Thomas runs them only after you turn autonomy on. Reading another app's stored key is off unless you turn it on.
On the free brain, your prompt, persona, notes and recent turns go to OpenRouter and to the outside company running the free model, which may keep, train on, or publish them.
What it may do.
Three switches in ~/.thomas/thomas.sexpr. All of them start off.
- :autonomy Off
- Off: the brain can answer but not act (Claude only; the free brain never acts either way). On: the Claude, Codex or Gemini brain may read, write and run commands anywhere your user account can, without asking, and Codex and Gemini become available.
- :borrow-credentials Off
- Off: the brain sees only your environment. On: it may also read a key another app stored.
- :ledger Off
- Off: Thomas keeps no ledger (Claude still saves its usual session transcript under
~/.claude/projects). On: each turn's event kinds and a short summary also go to a local redis stream, if one runs.