npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@terminalxapp/cli

v0.10.0

Published

Multi-AI command layer in your terminal. One prompt → every AI.

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 left

Images 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/cli

Requires Node 22+.

First-time setup

tx login

Opens 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 chat with 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 route is the name to learn; tx chat is 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 plan

The 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 (--out to 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-run stops after the plan; --yes skips the prompt for scripts; --model prices 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 billed

tx 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. esc interrupts 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; set TX_BROWSER_PROFILE=system to 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-run pricing, 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