Your AI agents, from anywhere.

Steer, approve, and interrupt Claude Code, Codex, and Gemini CLI from your phone. End-to-end encrypted. Your keys. Your code. Nothing in between.

╔══ PHONE ═══════════════════╗             ╔══ DESKTOP ════════════════════════╗
║                            ║             ║                                   ║
║  * myapp                   ║             ║  $ steer                          ║
║  Claude Code  Active       ║   <---->    ║  + Paired with iPhone 15          ║
║                            ║     E2E     ║  + Watching ~/projects/myapp      ║
║  ┌────────────────────┐    ║   encrypt   ║                                   ║
║  │ Analyzing auth.ts..│    ║             ║  ┌──────────────────────────┐     ║
║  │ Found 3 issues.    │    ║             ║  │ Analyzing auth.ts...     │     ║
║  │ ░░░░░░░░░░░░░ 100% │    ║             ║  │ Found 3 issues:          │     ║
║  └────────────────────┘    ║             ║  │                          │     ║
║                            ║             ║  │ 1. Null check  line 42   │     ║
║  ╔════════════════════╗    ║             ║  │ 2. Unused import: lodash │     ║
║  ║    [ S T O P ]     ║    ║             ║  │ 3. Type assert w/o guard │     ║
║  ╚════════════════════╝    ║             ║  └──────────────────────────┘     ║
║  ┌────────────────────┐    ║             ║                                   ║
║  │ Type a message...  │    ║             ║  Fix all three? (y/n) _           ║
║  └────────────────────┘    ║             ║                                   ║
╚════════════════════════════╝             ╚═══════════════════════════════════╝
╔══ PHONE ══════════════╗ 
║                        ║
║  * myapp  Active       ║
║                        ║
║  Analyzing auth.ts     ║
║  Found 3 issues.       ║
║  ░░░░░░░░░░░░░ 100%    ║
║                        ║
║  ╔════════════════╗    ║
║  ║  [ S T O P ]   ║    ║
║  ╚════════════════╝    ║
║  ┌────────────────┐    ║
║  Type a message..      ║
║  └────────────────┘    ║
╚════════════════════════╝
        | E2E             
        | encrypted       
        v                 
╔══ DESKTOP ═════════════╗
║  $ steer               ║
║  + Paired              ║
║  + Watching myapp      ║
╚════════════════════════╝

AI agents don't wait for you.

You step away. Your agent hits a permission prompt. It waits. You don't know. Twenty minutes later you're back, staring at a frozen terminal, realizing your agent needed a single "yes" to keep going.

Or worse — it's doing something destructive and you can't stop it because your laptop is in the other room.

Steer fixes this. One tap to approve. One tap to stop. From anywhere.

Three steps. Under a minute.

01

Install the CLI

$ npm i -g @steer/cli
$ cd ~/your-project  
$ steer              
                     
┌──────────────────┐ 
│  ▓▓▓▓ ▓▓▓▓ ▓▓▓▓  │ 
│  ▓▓▓▓      ▓▓▓▓  │ 
│  ▓▓▓▓  QR  ▓▓▓▓  │ 
│  ▓▓▓▓      ▓▓▓▓  │ 
│  ▓▓▓▓ ▓▓▓▓ ▓▓▓▓  │ 
└──────────────────┘ 
Scan with Steer app  
02

Scan the QR

Keys exchanged via 
Noise IK protocol. 
                   
┌───────┐ ┌───────┐
│ [KEY] │─│ [KEY] │
└───────┘ └───────┘
 phone     desktop 
                   
░░░░░░░░░░░░░░░░░░░
Zero-knowledge.    
One round-trip.    
03

You're in control

╔═════════════════════╗
║                     ║
║  * myapp  Active    ║
║                     ║
║  Agent is working   ║
║  on auth.ts...      ║
║                     ║
║  ╔═════════════╗    ║
║  ║ [ S T O P ] ║    ║
║  ╚═════════════╝    ║
║                     ║
╚═════════════════════╝

Stop anything, instantly.

One tap sends SIGINT. Hold for SIGKILL. Your agent obeys in under 200ms, even on a cellular connection. No SSH. No tmux. No laptop required.

╔════════════════════════╗
║                        ║
║  ╔══════════════╗      ║
║  ║ [ S T O P ]  ║      ║
║  ╚══════════════╝      ║
║                        ║
║  tap  : SIGINT         ║
║  hold : SIGKILL        ║
║  2x   : terminate      ║
║                        ║
║  Response: <200ms      ║
╚════════════════════════╝

Permission prompts, in your pocket.

When Claude Code wants to run rm -rf build/ or edit a sensitive file, you get a push notification. Review the command, see the risk level, and approve or deny without touching your laptop.

╔═════════════════════════╗
║  (!) Permission Request ║
║  ─────────────────────  ║
║                         ║
║  Claude wants to run:   ║
║  rm -rf ./build/        ║
║                         ║
║  Risk: ▓▓▓▓▓▓░░ HIGH    ║
║                         ║
║  [+ Allow]  [x Deny]    ║
╚═════════════════════════╝

Your code never touches our servers.

Noise Protocol IK handshake. ChaCha20-Poly1305 encryption. Keys generated and stored in your phone's Secure Enclave. We relay opaque encrypted blobs. We can't read them. Nobody can — except your paired devices.

phone ── relay ── desktop
  |        |        |    
  | ┌────┐ | ┌────┐ |    
  | │▓▓▓▓│─┼─│▓▓▓▓│ |    
  | └────┘ | └────┘ |    
  |        |        |    
 keys   opaque   keys    
 here   blobs    here    
         only            

Everything you need. Nothing you don't.

Diff Viewer

Review code changes with syntax highlighting before approving. Side-by-side on tablet.

Cost Dashboard

Track tokens, costs, and spending trends across all sessions. Set budget alerts.

Slash Commands

/clear, /compact, /status, /cost, /git diff — plus your own custom commands.

Background Service

Install a background listener on your machine. Start new sessions from your phone without touching the keyboard.

Multi-Agent

Claude Code, Codex, Gemini CLI, or any CLI tool. Switch agents mid-session.

Session History

Browse past sessions, see token counts and costs. Continue where you left off.

Smart Notifications

Only get notified for what matters: permission prompts, errors, completion. Not noise.

Universal Links

Sign in by tapping the link in your email. No codes to copy. Magic link opens the app directly.

QR Pairing

Scan a QR code to pair your phone with your desktop. Cryptographic keys exchanged instantly. No accounts needed.

We can't read your code. By design.

server vs device
╔══════════════════════════════════════════════════════════════╗
║                                                              ║
║  WHAT THE SERVER SEES           WHAT YOUR DEVICES SEE        ║
║  ════════════════════           ═══════════════════════      ║
║                                                              ║
║  - Session ID (UUID)            - Full terminal output       ║
║  - Timestamp of activity        - File diffs with color      ║
║  - Encrypted blob size          - Permission prompt details  ║
║  - Source: mobile/desktop       - Project paths and names    ║
║                                 - Agent type and config      ║
║  That's it.                     - Cost data and tokens       ║
║  No code. No paths.             - Every keystroke you send   ║
║  No prompts. No diffs.                                       ║
║  No file names.                 Decrypted only on your       ║
║                                 devices.                     ║
║                                                              ║
╚══════════════════════════════════════════════════════════════╝

Every byte between your phone and desktop is encrypted with ChaCha20-Poly1305 before it leaves either device. The Cloudflare relay that connects them handles routing — not reading. Your encryption keys live in hardware (Secure Enclave on iOS, Keystore on Android) and never leave the device.

If we get hacked, attackers get encrypted blobs and session metadata. Your code, your prompts, your diffs — all unreadable without your keys.

Read the full security whitepaper →

How Steer compares.

╔═════════════════════╤═══════════╤═══════════╤═══════════╤═══════════╗
║                     │   Steer   │   Happy   │  Kibbler  │ SSH+tmux  ║
║                     │           │   Coder   │           │           ║
╠═════════════════════╪═══════════╪═══════════╪═══════════╪═══════════╣
║ Interrupt agent     │ ✓ <200ms  │     ✗     │     ✗     │    ~2s    ║
║ E2E encrypted       │  ✓ Noise  │     ✗     │     ✗     │   ✓ SSH   ║
║ Hardware keys       │     ✓     │     ✗     │     ✗     │     ✗     ║
║ Permission prompts  │     ✓     │     ✓     │     ✓     │     ✗     ║
║ Diff viewer         │     ✓     │     ✗     │     ✓     │     ✗     ║
║ Cost tracking       │     ✓     │     ✗     │     ✗     │     ✗     ║
║ Multi-agent         │     ✓     │     ✗     │     ✓     │     ✓     ║
║ Daemon mode         │     ✓     │     ✗     │     ✗     │     ✓     ║
║ Tablet layout       │     ✓     │     ✗     │     ✗     │     ✗     ║
║ Works offline*      │  queued   │     ✗     │     ✗     │     ✗     ║
║ Recovery phrase     │     ✓     │     ✗     │     ✗     │    n/a    ║
║ Price (Pro)         │ $9.99/mo  │ $19.99/mo │ $3.99/mo  │   free    ║
╚═════════════════════╧═══════════╧═══════════╧═══════════╧═══════════╝
                                                                       
  * queued: commands encrypted and queued until reconnect              

Start free. Upgrade when you need more.

Free

$0 /mo
  • 1 concurrent session
  • Claude Code only
  • Basic push notifications
  • E2E encryption included
  • Interrupt mechanism
Get Started

Team

$19.99 /user/mo
  • Everything in Pro
  • Shared session observation
  • Audit logs
  • SSO / SAML
  • Role-based access control
  • Priority support
Contact Sales

All plans include end-to-end encryption, the interrupt mechanism, and QR pairing. Your code never touches our servers on any plan.

That's it. You're in control.

╔════════════════════════════════════════════════╗
║                                                ║
║         $ npm i -g @steer/cli                  ║
║                                                ║
║         Then scan the QR with the Steer app.   ║
║         That's it. You're in control.          ║
║                                                ║
╚════════════════════════════════════════════════╝