Overview
OtterKit is a local development toolkit with two products:
Desktop App - A native macOS app for .localhost domains with HTTPS, public tunnels, webhook testing, traffic inspection, and port management.
CLI - A command-line tool that lets AI agents provision tunnels programmatically. Pay per tunnel with MPP (Machine Payments Protocol) using Tempo stablecoins.
Install Desktop App
Download OtterKit for macOS (12.0 Monterey or later):
Drag OtterKit to your Applications folder. Open it and you're ready to go. Total setup: ~2 minutes.
CLI Setup
The CLI requires Node.js 18+ and a payment wallet. Two wallets are supported: Tempo Wallet and mppx. The CLI auto-detects which wallet is available (Tempo Wallet first, mppx fallback) and prints the wallet address when connecting (e.g. "Using Tempo Wallet (0x1e69...)"). Works on macOS, Linux, and Windows.
Option 1: Tempo Wallet (recommended)
curl -fsSL https://tempo.xyz/install | bash && tempo wallet loginTempo Wallet uses USDC by default. Access keys are scoped to USDC. This is the recommended setup.
Option 2: mppx
npx mppx account create # Creates wallet, stores key in OS keychain
npx mppx account fund # Fund with pathUSD on Tempo mainnetThis creates a wallet and stores the private key in your OS keychain (macOS Keychain, Linux secret-tool). The key never leaves your machine. If the server asks for USDC but the mppx wallet holds pathUSD, the CLI auto-swaps via Tempo DEX.
Create a tunnel
npx otterkit tunnel 3000--wallet tempo or --wallet mppx to override auto-detection. If you have multiple mppx accounts, use --account name to specify which one.Agent Skill
OtterKit provides an Agent Skill that teaches AI coding agents how to use the OtterKit CLI. When installed, agents automatically know when and how to create tunnels for you.
Install the skill
npx skills add useotterkit/skill -gThe -g flag installs globally so the skill is available across all your projects. It works with any agent that supports the Agent Skills standard. View the skill source on GitHub.
What the skill teaches agents
Once installed, your AI agent will automatically use OtterKit when you ask it to:
- "Expose my local server to the internet"
- "Create a public URL for port 3000"
- "I need a webhook endpoint for testing"
- "Share my localhost with a teammate"
- "Set up a tunnel that runs in the background"
The skill includes the full command reference, pricing, daemon mode options, and troubleshooting steps so the agent can handle everything autonomously.
llms.txt
OtterKit publishes machine-readable documentation following the llms.txt standard. These files help AI models understand OtterKit without needing to crawl the website.
| File | URL | Description |
|---|---|---|
| llms.txt | otterkit.com/llms.txt | Concise summary - product overview, key features, CLI commands, pricing |
| llms-full.txt | otterkit.com/llms-full.txt | Full documentation - detailed features, API reference, setup guides, FAQ |
llms.txt
A concise markdown summary of OtterKit. Includes product description, key links, core features, CLI commands with examples, agent skill installation, and pricing. Ideal for LLMs that need a quick overview to answer user questions or decide whether to use OtterKit.
curl https://www.otterkit.com/llms.txtllms-full.txt
Comprehensive documentation in a single text file. Covers everything: desktop app features in detail, full CLI reference with all flags and daemon mode, complete API endpoint documentation with request/response examples, pricing tables, FAQ, and system requirements. Use this when an LLM needs deep context to help a user with OtterKit.
curl https://www.otterkit.com/llms-full.txtllms.txt file is linked in the HTML <head> via <link rel="llms" href="/llms.txt"> so AI crawlers can discover it automatically.Supported Agents
The OtterKit skill works with any AI coding agent that supports the Agent Skills standard:
| Agent | Skill Install | Notes |
|---|---|---|
| Claude Code | npx skills add useotterkit/skill -g | Full support including hooks |
| Cursor | npx skills add useotterkit/skill -g | Full support |
| GitHub Copilot | npx skills add useotterkit/skill -g | Full support |
| Cline | npx skills add useotterkit/skill -g | Full support including hooks |
| Codex | npx skills add useotterkit/skill -g | Full support |
| Windsurf | npx skills add useotterkit/skill -g | Full support |
| Any agent | Read llms-full.txt | Via llms.txt if skills not supported |
For agents that don't support the skills standard, you can point them to the llms-full.txt file directly. Most modern AI agents can read and follow the instructions in it.
claude -p "Read https://www.otterkit.com/llms-full.txt and set up otterkit tunnels"Local Domains
Create .localhost domains for your projects. Instead of localhost:3000, use myapp.localhost. OtterKit acts as a local DNS resolver and reverse proxy, routing requests to your specified port entirely on your machine.
Auto HTTPS
Every .localhost domain gets an automatic SSL certificate. Trust OtterKit's Certificate Authority once, and all certificates are trusted by every browser on your machine. You'll see the green padlock just like on production sites.
Public Tunnels
Share your local server with anyone via a public URL like https://myapp.otterkit.app. Click Connect in the Tunnels tab and your local server is accessible from the internet. Great for client demos, webhook testing, and mobile device testing.
Webhook Testing
Create webhook endpoints instantly. Point third-party services (Stripe, GitHub, Slack, etc.) to your webhook URL. Every incoming request is captured with full headers, body, and metadata. Replay requests to debug your handler without re-triggering the external service.
Traffic Inspector
Real-time HTTP traffic monitoring for all your local domains and tunnels. See every request and response with headers, bodies, timing, and status codes. Filter and search through traffic.
Port Manager
See what processes are running on any port. Identify which application is using a port, kill blocking processes instantly, and save frequently used ports as favorites.
Tunnel Command
Expose a local port to the internet with a single command. The CLI provisions a tunnel, pays via MPP, and connects via WebSocket - all automatically.
npx otterkit tunnel <port>This creates a public URL like https://agent-a1b2c3d4.otterkit.app that forwards all HTTP traffic to your local port. The tunnel stays alive as long as the terminal is open. Costs $0.01.
$ npx otterkit tunnel 3000
Initializing payment...
Provisioning tunnel...
Tunnel provisioned: agent-a1b2c3d4
Tunnel ready: https://agent-a1b2c3d4.otterkit.app -> 127.0.0.1:3000
Press Ctrl+C to disconnect
200 GET / (12ms)
200 GET /api/users (8ms)Daemon Mode
Run a tunnel in the background as a detached process that survives terminal close. Daemon tunnels auto-expire when the TTL runs out.
npx otterkit tunnel <port> --daemon [--ttl <duration>]Available TTLs and pricing:
| TTL | Duration | Price |
|---|---|---|
| 1m | 1 minute | $0.01 |
| 1h | 1 hour (default) | $0.01 |
| 4h | 4 hours | $0.03 |
| 12h | 12 hours | $0.05 |
| 24h | 24 hours | $0.08 |
# 1-minute daemon for quick testing
npx otterkit tunnel 3000 --daemon --ttl 1m
# 4-hour daemon for extended work
npx otterkit tunnel 8080 --daemon --ttl 4hWebhook
Create a webhook endpoint that captures incoming HTTP requests without needing a local server. Point third-party services (Stripe, GitHub, Slack, etc.) to the URL and all requests are captured with full headers, body, and metadata. Same pricing as tunnels.
npx otterkit webhookThis creates a public URL like https://agent-e5f6g7h8.otterkit.app that captures all incoming HTTP requests. The webhook stays alive as long as the terminal is open. Costs $0.01.
$ npx otterkit webhook
Initializing payment...
Provisioning webhook...
Webhook provisioned: agent-e5f6g7h8
Webhook ready: https://agent-e5f6g7h8.otterkit.app
Press Ctrl+C to disconnect
POST /webhook (Stripe) 204 (3ms)
POST /events (GitHub) 204 (5ms)Daemon Mode for Webhooks
Run a webhook in the background as a detached process. Same daemon pricing as tunnels.
# Background webhook for 4 hours
npx otterkit webhook --daemon --ttl 4h
# Quick 1-minute background webhook
npx otterkit webhook --daemon --ttl 1mStatus & Stop
Manage running daemon tunnels:
# List all running daemons
npx otterkit status
# Stop a specific daemon
npx otterkit stop agent-a1b2c3d4The status command shows each daemon's public URL, target port, TTL remaining, and PID. Dead or expired daemons are cleaned up automatically.
Options Reference
| Flag | Description | Default |
|---|---|---|
| --host <host> | Local host to forward to | 127.0.0.1 |
| --account <name> | mppx account for payment | default account |
| --wallet <name> | Force wallet: tempo or mppx (overrides auto-detect) | auto-detect |
| --daemon | Run in background | off |
| --ttl <duration> | Daemon TTL: 1m, 1h, 4h, 12h, 24h | 1h |
MPPX_PRIVATE_KEY env var or OS keychain set by npx mppx account create). Use --wallet to override.Provision Tunnel
Provision a foreground tunnel. Returns HTTP 402 with an MPP payment challenge if no credential is provided. On successful payment, returns tunnel details with a receipt.
/api/agent/tunnelsResponse (200):
{
"subdomain": "agent-a1b2c3d4",
"publicUrl": "https://agent-a1b2c3d4.otterkit.app",
"connectUrl": "wss://otterkit.app/ws/connect?subdomain=agent-a1b2c3d4",
"mode": "foreground"
}Response (402): MPP payment challenge with WWW-Authenticate: Payment header.
Provision Daemon Tunnel
Provision a daemon tunnel with TTL-based pricing. The ttl query parameter determines the duration and price.
/api/agent/tunnels/daemon?ttl=1hQuery parameters:
| Parameter | Required | Values |
|---|---|---|
| ttl | No (default: 1h) | 1m, 1h, 4h, 12h, 24h |
Response (200):
{
"subdomain": "agent-f7e8d9c0",
"publicUrl": "https://agent-f7e8d9c0.otterkit.app",
"connectUrl": "wss://otterkit.app/ws/connect?subdomain=agent-f7e8d9c0",
"mode": "daemon",
"ttl": "4h",
"price": "0.03"
}Tunnel Status
Check if a tunnel client is currently connected.
/api/agent/tunnels/:subdomain{
"subdomain": "agent-a1b2c3d4",
"publicUrl": "https://agent-a1b2c3d4.otterkit.app",
"connected": true
}Deprovision Tunnel
Close an active tunnel connection and clean up.
/api/agent/tunnels/:subdomain{
"subdomain": "agent-a1b2c3d4",
"status": "deprovisioned"
}Pricing Endpoint
Get current pricing for all tunnel types.
/api/agent/pricing{
"tunnel": {
"description": "Expose a local port to the internet.",
"foreground": {
"price": "0.01",
"description": "One-time charge, alive while terminal is open"
},
"daemon": {
"description": "Background tunnel with TTL, auto-expires",
"options": {
"1m": "0.01",
"1h": "0.01",
"4h": "0.03",
"12h": "0.05",
"24h": "0.08"
}
}
},
"webhook": {
"description": "Capture incoming HTTP requests without a local server. Same pricing as tunnels.",
"foreground": {
"price": "0.01",
"description": "One-time charge, alive while terminal is open"
},
"daemon": {
"description": "Background webhook with TTL, auto-expires",
"options": {
"1m": "0.01",
"1h": "0.01",
"4h": "0.03",
"12h": "0.05",
"24h": "0.08"
}
}
}
}Desktop App Pricing
| Plan | Price | Details |
|---|---|---|
| Free Trial | Free | 3 days, full access, no credit card |
| Pro | $29/year | Unlimited domains, tunnels, webhooks, all features |
CLI Tunnel Pricing
Pay per tunnel using pathUSD stablecoins via MPP on Tempo mainnet. No subscription required.
| Mode | TTL | Price |
|---|---|---|
| Foreground | While terminal is open | $0.01 |
| Daemon | 1 minute | $0.01 |
| Daemon | 1 hour (default) | $0.01 |
| Daemon | 4 hours | $0.03 |
| Daemon | 12 hours | $0.05 |
| Daemon | 24 hours | $0.08 |
https://otterkit.app. The base URL for tunnel public URLs is https://<subdomain>.otterkit.app.