@terminalxapp/cli
v0.10.0
Published
Multi-AI command layer in your terminal. One prompt → every AI.
Maintainers
Readme
Terminal X CLI
Multi-AI command layer in your terminal. One prompt — every AI.
$ tx route "build me a landing page with a hero image and audio narration"
● plan (3 tasks)
⎿ flux generate hero image: SaaS landing concept
⎿ elevenlabs narrate intro: 30s warm welcome
⎿ claude-code assemble the page around the image + audio
~14 credits · 11–19
● flux
✓ saved flux.png 1.2 MB
● elevenlabs
✓ saved elevenlabs.mp3 340 KB
● claude-code
✓ saved claude-code.html 12.4 KB
✓ done 14 credits used · 374 leftImages also render inline, in the best format your terminal supports (kitty
graphics, iTerm2, sixel, or 24-bit half-blocks). Every saved file opens in your
default app — TX_AUTO_OPEN=0 turns that off.
Install
npm install -g @terminalxapp/cliRequires Node 22+.
First-time setup
tx loginOpens your browser to terminalxapp.com to authenticate. Your credits, sessions, and connectors all sync — there's no separate CLI account. Pick the browser option: it mints a signed token, and the hosted executor requires one.
By default the CLI talks to the hosted executor at
https://api.terminalxapp.com. To run against a local executor (dev
mode), set TERMINAL_X_API=http://localhost:3003 before tx login.
Two commands, two products
tx and tx route are not two spellings of one thing. Pick by what the job
needs to touch.
| | tx <prompt> — the agent | tx route <prompt> — the router |
| -------------- | ---------------------------------- | --------------------------------------- |
| models | one, with tools | every model you have credits for |
| runs where | on your machine | in the cloud |
| can | read/write files, run commands, git, drive Chrome, use your MCP servers | generate images, audio, video, decks, whole sites; fan out in parallel |
| cannot | fan one prompt out across the catalogue | read or write anything on your disk (you can still attach a file with -f) |
| shows | a live tool trace | a task DAG, priced before it runs |
A bare prompt goes to the agent on purpose. tx "fix the typo on line 12 of
login.tsx" has to be able to open that file, and a cloud DAG never can.
Usage
# agent — tools on this machine
tx # interactive agent REPL
tx "<prompt>" # one-shot agent prompt
tx agent "<prompt>" # the same thing, spelled out
# router — every model, nothing local
tx route "<prompt>" # plan across models, then run the waves
tx r "<prompt>" # short form
tx route --dry-run "<prompt>" # print the plan and the price, run nothing
tx route -f shot.png "<p>" # attach a file to the prompt
tx bulk leads.csv --template "cold email to {{name}}"
tx resume [runId] # reattach to a run you walked away from
tx stop [runId] # cancel a run
tx chat "<prompt>" # older name for tx route
tx chat # cloud REPL — see the note below
# account
tx login / tx logout / tx whoami / tx balance
tx update # upgrade to the latest version
tx --help # all commands
tx --version # version
tx --debug <cmd> # any command, plus API URLs + connection state--route on a bare prompt forces the router. --dry-run implies it, because
only the router has a price to quote before it starts.
tx chatwith no prompt opens the older cloud REPL. It has its own renderer but now shares the authenticated path — every router surface in the CLI sends a signed Bearer token.tx routeis the name to learn;tx chatis kept working for anyone with it in a script.
Price it before you spend it
$ tx route --dry-run "3 product shots and a 20s voiceover"
● plan (4 tasks)
⎿ flux product shot: front three-quarter, white sweep
⎿ flux product shot: detail crop, hard light
⎿ flux product shot: in-hand lifestyle
⎿ elevenlabs voiceover: 20s, warm, mid-pace
~23 credits · 11–40 · 388 remaining
about 70s of wall time
✓ dry run — nothing ran, nothing billed
⎿ drop --dry-run to execute this planThe parse itself is free — you're only ever billed for tasks that run.
Bulk — one prompt over every row of a CSV
$ tx bulk leads.csv --template "cold email to {{name}} at {{company}}"
● batch leads.csv
rows 120
columns name, company, role
prompt cold email to {{name}} at {{company}}
row 1 cold email to Ada at Analytical Engines
projected ~360 credits up to 630 worst case
projected from the table cost; rows are metered as they run
$2.16 batched vs $17.76 typed one at a time
balance 388 credits
Run 120 rows for ~360 credits? [y/N] y
● 120 rows queued ~360 credits
✓ 118 rows ok · 2 failed
⎿ leads-tx-results.csv 184.2 KB{{column}}placeholders are filled from the CSV header row.- The batch is parsed once, not once per row — that's most of the saving.
- Rows run in parallel, capped server-side, and are metered individually.
- Results land in
<file>-tx-results.csv(--outto choose the path), one row per input row:tx_row, tx_prompt, tx_status, tx_output. Media rows are saved as files and the filename goes in the sheet. - Nothing runs until you confirm.
--dry-runstops after the plan;--yesskips the prompt for scripts;--modelprices the projection against a specific model. - Caps: 500 rows and 5,000 credits per batch, and the worst case has to fit inside your balance — a batch that dies at row 140 is worse than one that never starts.
Runs survive you leaving
A router run lives on the server, not in your terminal. Closing the lid, losing Wi-Fi, or hitting Ctrl-C does not stop it.
^C
◆ Detached — the run keeps going on the server.
⎿ tx resume reattach and print the rest
⎿ tx stop cancel it — work not yet run isn't billedtx resume replays the whole run from the start, including everything that
happened while you were gone, then follows it live. If the socket drops
mid-run the CLI reattaches by itself and picks up from the last event it saw.
Finished runs stay replayable for 15 minutes; after that the results are in
your history on the web app.
Because the run keeps going, leaving bills for the work that gets done.
tx stop is the only thing that cancels, and work that never started isn't
charged.
What the agent can do
The tx REPL is a true coding agent — it reads and writes files in your
project, runs shell commands, searches code, hits Git, and chains that with
30+ connectors (Gmail, GitHub, Notion, Stripe, etc.) and multiple AI models in
parallel.
- Full-screen terminal UI — the transcript streams above a pinned input box
with a live status line, native scrollback preserved.
escinterrupts the agent mid-turn. - Chrome control —
tx "open the pricing page and tell me what breaks at 320px". Drives real Chrome over the DevTools Protocol: open, read, click, type, screenshot. Uses an isolated profile by default; setTX_BROWSER_PROFILE=systemto attach to your own logged-in browser. - Your MCP servers — anything you add on /connections shows up as agent
tools, namespaced
mcp__<server>__<tool>and called in parallel with the rest. Streamable-HTTP transport. - Memory — the agent hydrates your saved memories at session start, so what you told the web app is known here too.
- Plan mode — a numbered checklist for multi-step tasks, ticked off live.
- Sub-agents — parallel research and opinion sampling, then a synthesis.
- Consult panel —
tx "should I switch to Postgres or stay with Mongo?"asks Claude, GPT and Gemini in parallel and returns one recommendation.
Differentiation
- Claude Code = single AI (Anthropic only)
- Perplexity Computer = web-only, model choice abstracted
- Terminal X CLI = a local coding agent and multi-AI orchestration in one binary — every AI you have credits for, explicit per-task routing
Roadmap
- v0.1–v0.5: streaming, file writes, browser login, project context, auto-update ✓
- v0.6: plan mode, sub-agents, consult panel, signed-token auth ✓
- v0.7: full-screen terminal UI + mid-turn interrupt ✓
- v0.8: OAuth-style loopback login, Chrome control, MCP client, memory ✓
- v0.9: router as a first-class command (
tx route), authenticated HTTP path,--dry-runpricing,tx bulk, durable runs (tx resume/tx stop) ← current - next: session persistence in the REPL, multi-line paste, per-prompt credit caps, results as xlsx
