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)

bash
curl -fsSL https://tempo.xyz/install | bash && tempo wallet login

Tempo Wallet uses USDC by default. Access keys are scoped to USDC. This is the recommended setup.

Option 2: mppx

bash
npx mppx account create   # Creates wallet, stores key in OS keychain
npx mppx account fund     # Fund with pathUSD on Tempo mainnet

This 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

bash
npx otterkit tunnel 3000
The server accepts both USDC and pathUSD on Tempo mainnet. Use --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

bash
npx skills add useotterkit/skill -g

The -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.

FileURLDescription
llms.txtotterkit.com/llms.txtConcise summary - product overview, key features, CLI commands, pricing
llms-full.txtotterkit.com/llms-full.txtFull 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.

bash
curl https://www.otterkit.com/llms.txt

llms-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.

bash
curl https://www.otterkit.com/llms-full.txt
The llms.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:

AgentSkill InstallNotes
Claude Codenpx skills add useotterkit/skill -gFull support including hooks
Cursornpx skills add useotterkit/skill -gFull support
GitHub Copilotnpx skills add useotterkit/skill -gFull support
Clinenpx skills add useotterkit/skill -gFull support including hooks
Codexnpx skills add useotterkit/skill -gFull support
Windsurfnpx skills add useotterkit/skill -gFull support
Any agentRead llms-full.txtVia 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.

You can also give an agent the direct setup command: 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.

bash
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.

bash
$ 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.

bash
npx otterkit tunnel <port> --daemon [--ttl <duration>]

Available TTLs and pricing:

TTLDurationPrice
1m1 minute$0.01
1h1 hour (default)$0.01
4h4 hours$0.03
12h12 hours$0.05
24h24 hours$0.08
bash
# 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 4h

Webhook

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.

bash
npx otterkit webhook

This 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.

bash
$ 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.

bash
# Background webhook for 4 hours
npx otterkit webhook --daemon --ttl 4h

# Quick 1-minute background webhook
npx otterkit webhook --daemon --ttl 1m

Status & Stop

Manage running daemon tunnels:

bash
# List all running daemons
npx otterkit status

# Stop a specific daemon
npx otterkit stop agent-a1b2c3d4

The status command shows each daemon's public URL, target port, TTL remaining, and PID. Dead or expired daemons are cleaned up automatically.

Options Reference

FlagDescriptionDefault
--host <host>Local host to forward to127.0.0.1
--account <name>mppx account for paymentdefault account
--wallet <name>Force wallet: tempo or mppx (overrides auto-detect)auto-detect
--daemonRun in backgroundoff
--ttl <duration>Daemon TTL: 1m, 1h, 4h, 12h, 24h1h
The CLI auto-detects your wallet: Tempo Wallet first, then mppx (via 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.

POST/api/agent/tunnels

Response (200):

json
{
  "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.

POST/api/agent/tunnels/daemon?ttl=1h

Query parameters:

ParameterRequiredValues
ttlNo (default: 1h)1m, 1h, 4h, 12h, 24h

Response (200):

json
{
  "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.

GET/api/agent/tunnels/:subdomain
json
{
  "subdomain": "agent-a1b2c3d4",
  "publicUrl": "https://agent-a1b2c3d4.otterkit.app",
  "connected": true
}

Deprovision Tunnel

Close an active tunnel connection and clean up.

DELETE/api/agent/tunnels/:subdomain
json
{
  "subdomain": "agent-a1b2c3d4",
  "status": "deprovisioned"
}

Pricing Endpoint

Get current pricing for all tunnel types.

GET/api/agent/pricing
json
{
  "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

PlanPriceDetails
Free TrialFree3 days, full access, no credit card
Pro$29/yearUnlimited domains, tunnels, webhooks, all features

CLI Tunnel Pricing

Pay per tunnel using pathUSD stablecoins via MPP on Tempo mainnet. No subscription required.

ModeTTLPrice
ForegroundWhile terminal is open$0.01
Daemon1 minute$0.01
Daemon1 hour (default)$0.01
Daemon4 hours$0.03
Daemon12 hours$0.05
Daemon24 hours$0.08
All API endpoints are on https://otterkit.app. The base URL for tunnel public URLs is https://<subdomain>.otterkit.app.