TermIQ — Your Terminals in Your Pocket
Kick off a Claude Code task in VS Code, walk away, and approve its next step from your phone — without coming back to your desk.
TermIQ syncs the terminals running in your VS Code editor to your phone in real time. Run Claude Code, Gemini CLI, Cursor, or any terminal as usual — TermIQ pings you the moment a task finishes, pauses for a Y/n, or an AI agent fails, and lets you respond on the spot from termiq.io. Your machine does the work. Your phone keeps you in control.
Also runs headless: the @termiq/cli agent (npm i -g @termiq/cli) brings the same remote control to SSH boxes, CI runners, and any plain shell.
Why TermIQ?
| When this happens |
TermIQ does this |
| Claude Code pauses to ask "Apply this change? (y/n)" |
You get a push and tap Yes or No — straight from the notification |
| A long build or test suite finishes |
You get a push the moment it completes, wherever you are |
| An AI agent fails while you're away |
You get a push and can read the live output to see what broke |
| You need to start a fresh terminal on your machine |
You create one from your phone — it appears in your VS Code window |
What you get
Stay in the loop without staying at your desk
- Push the moment it matters — get notified when a terminal completes a task, waits for a
Y/n confirmation, or an AI agent in it fails, even with your phone in your pocket.
- Answer from the notification — approve or decline an AI assistant's next step in one tap, without opening the app.
- Quiet Hours — silence overnight pushes so you stay in control without burning out.
Built so you can trust it with your terminal
- End-to-end encrypted — terminal content is encrypted on your devices with XSalsa20-Poly1305. The TermIQ server is a blind relay: it passes encrypted data and cannot read it.
- Streamed, never stored — your output flows through and is gone; nothing is persisted server-side.
Reliable enough for real work
- Reliable input — what you type from the train reaches the terminal in order, even when the signal drops.
- Sub-second sync that reconnects on its own — live output mirrors to your phone with sub-second latency and recovers automatically when your network changes.
- Follow the files your agent touches — see which files your terminal activity changes as it works, so you can keep up without opening your editor. On by default, respects your
.gitignore.
Works with Claude Code, Gemini CLI, Cursor, and any other terminal — TermIQ mirrors whatever runs in the terminal, so there's nothing AI-specific to configure.
Screenshots
Dashboard — All Your Terminals at a Glance

Mobile — Monitor and Respond From Anywhere
30-Second Setup
1. Install the extension
2. Ctrl+Shift+P → "TermIQ: Login"
3. Scan the QR or paste the code in your browser to authorize
4. Open termiq.io on your phone and add it to your home screen
5. Run "TermIQ: New Terminal" — it's now in your pocket
Only terminals created with TermIQ: New Terminal are synced — pre-existing VS Code terminals aren't captured.
Commands
All commands are prefixed with TermIQ:.
| Command |
What it does |
TermIQ: Login |
Authorize this machine via your browser and connect |
TermIQ: Logout |
Disconnect and sign out |
TermIQ: Reconnect |
Force a reconnect without closing your terminals |
TermIQ: New Terminal |
Create a new cloud-synced terminal |
TermIQ: Upgrade Plan |
Open billing to raise your agent / terminal limits |
TermIQ: Rename Agent |
Set a friendly name for this machine (shown in the web app) |
TermIQ: Set Log Level |
Choose log verbosity (silent / error / warn / info / debug) |
TermIQ: Show Logs |
Open the TermIQ output channel |
TermIQ: Open Log File |
Open the on-disk log file (when file logging is enabled) |
TermIQ: Clear Logs |
Clear the output channel |
Settings
Configure in Settings (search "TermIQ") or in settings.json.
| Setting |
Default |
Description |
termiq.serverUrl |
https://termiq.io |
TermIQ server URL |
termiq.agentName |
"" (auto-detect) |
Friendly name for this machine in the web app |
termiq.autoConnect |
true |
Connect automatically when VS Code starts |
termiq.fileWatcher.enabled |
true |
Track file changes so the phone app shows what your terminals touched |
termiq.fileWatcher.useGitignore |
true |
Respect your .gitignore when watching files |
termiq.fileWatcher.include |
["**/*"] |
Glob patterns of files to watch |
termiq.fileWatcher.exclude |
node_modules, .git, dist, … |
Glob patterns to ignore |
termiq.logLevel |
silent |
Output-channel verbosity: silent / error / warn / info / debug |
termiq.logToFile |
false |
Mirror logs to ~/.termiq/logs/extension.log (rotated, 5MB × 3) |
termiq.multiViewer |
false |
Per-viewer rendering so desktop and mobile each rewrap to their own width |
termiq.pushPromptText |
false |
No effect: notifications never carry the prompt's text — see below |
termiq.shellIntegration |
true |
Start bash and zsh with the hook that reports failed agents — see below |
Notifications and privacy
A notification tells you that a terminal is waiting, not what it asked. The
question and its buttons travel to your phone encrypted and are readable only
by your own devices — the server relays ciphertext and cannot open it.
Notifications never carry the question, whatever the settings: the server puts
no terminal text into them. termiq.pushPromptText, which used to put the
question in the notification body, no longer has any effect, and you can remove
it from your settings.
When an agent fails
You get a notification when an AI agent (Claude Code, Codex, Gemini CLI,
Copilot, Cursor Agent, Aider and others) in a TermIQ terminal exits with an
error, and when the terminal's shell is killed, by the out-of-memory killer for
example. Stopping an agent with Ctrl+C, a clean exit, a failing command that
is not an agent (a build, grep, git), the shell staying open after the
agent, closing the terminal and closing VS Code are not failures. The
notification says only that the task failed, never the error. One failure gives
one notification, and a terminal gives at most one a minute.
Only the shell knows how a command inside it ended, so TermIQ terminals start
bash and zsh with a small hook that reports the exit code and the program name
of each command to the extension, in a sequence the terminal ignores. Each hook
signs its reports with a random value only its shell knows, so text that merely
passes through the terminal, a file you cat or the output of a remote host,
cannot fake a failed agent. The hook only adds itself: your ~/.bashrc or
.zshrc load as usual and are never changed, and its file lives in a private
temporary directory while the shell runs. Other shells, and every shell on
Windows, start as before; there a failed agent is noticed only if your own
shell integration reports command ends (OSC 133). Turn the hook off with
termiq.shellIntegration (for terminals you open afterwards).
How It Works
VS Code ──▶ TermIQ Server (blind relay) ──▶ Your Phone
│ cannot read content │
└────────── End-to-end encrypted ───────────────┘
Your terminal data is streamed, not stored, and end-to-end encrypted — only your devices can read it.
Requirements
- VS Code 1.109 or newer
- A free TermIQ account at termiq.io
- iPhone push requires iOS 16.4+ (Android supported too)
Plan
Free forever — 1 agent and 2 terminals, no credit card required. Upgrade any time for more.
Links
Free forever for personal use. Start now at termiq.io