paperpod
High-risk skill: documents a service that runs arbitrary shell/code via ppod exec and POST https://paperpod.dev/execute, and can expose public ports with URLs like https://8080-{sandbox-id}-p8080_v1.paperpod.work. It requires a bearer token (PAPERPOD_TOKEN) and exposes file and persistent memory access under /workspace and /memory/*.
PaperPod
Isolated, agent-native sandboxes for code execution, live preview URLs, browser automation, 50+ tools (ffmpeg, sqlite, pandoc, imagemagick), LLM inference, and persistent memory — all via CLI or HTTP, no SDK or API keys required. Billed per second of compute usage and topup via stripe or x402.
Quick Start
curl -X POST https://paperpod.dev/login -d '{"email":"you@email.com"}' # Verify and get token
npm install -g @paperpod/cli
ppod login <token> && ppod help
Authentication
Step 1: Get a token
curl -X POST https://paperpod.dev/login -d '{"email":"you@email.com"}'
# Check email → click magic link → copy token (pp_sess_...)
Step 2: Use the token (pick one method)
| Method | How | Best for |
|---|---|---|
| CLI login | ppod login pp_sess_... | Everyday, Interactive use |
| Env var | export PAPERPOD_TOKEN=pp_sess_... | Scripts, CI/CD |
| Per-request | -H "Authorization: Bearer pp_sess_..." | HTTP one-shots |
Tokens expire in 15 days. On EXPIRED_TOKEN error, re-authenticate via POST /login.
CLI (Recommended)
The CLI is the easiest way to use PaperPod. It handles streaming, sessions, and reconnection automatically.
CLI Commands
| Category | Command | Description |
|---|---|---|
| Sandbox | ppod exec <cmd> | Run shell command |
ppod write <path> [file] | Write file (stdin if no file) | |
ppod read <path> | Read file | |
ppod ls <path> | List directory | |
| Processes | ppod start <cmd> | Start background process |
ppod ps | List processes | |
ppod kill <id> | Stop process | |
| Ports | ppod expose <port> | Get public URL (-q for URL only) |
| Browser | ppod browser:screenshot <url> | Capture webpage |
ppod browser:pdf <url> | Generate PDF | |
ppod browser:scrape <url> [sel] | Scrape elements (default: body) | |
ppod browser:markdown <url> | Extract markdown | |
ppod browser:content <url> | Get rendered HTML | |
ppod browser:test <url> '<json>' | Run Playwright tests | |
ppod browser:acquire | Acquire reusable session | |
ppod browser:connect <id> | Connect to existing session | |
ppod browser:sessions | List active sessions | |
ppod browser:limits | Check browser limits | |
| AI | ppod ai <prompt> | Text generation |
ppod ai:embed <text> | Generate embeddings | |
ppod ai:image <prompt> | Generate image | |
ppod ai:transcribe <audio> | Transcribe audio | |
ppod ai:models | List available AI models | |
| Code | ppod interpret <code> | Rich output (charts) |
| Memory | ppod mem:write <path> | Persist data |
ppod mem:read <path> | Read persisted data | |
ppod mem:ls | List memory files | |
ppod mem:rm <path> | Delete from memory | |
ppod mem:usage | Check quota | |
| Account | ppod balance | Check credits |
ppod status | Connection info | |
ppod help | Show all commands | |
ppod <cmd> --help | Help for specific command |
Update CLI: npm update -g @paperpod/cli
CLI Examples
# Execute code
ppod exec "python -c 'print(2+2)'"
ppod exec "npm init -y && npm install express"
# Start server + expose (--bind 0.0.0.0 required for public access)
ppod start "python -m http.server 8080 --bind 0.0.0.0"
ppod expose 8080 # → https://8080-{sandbox-id}-p8080_v1.paperpod.work (stable URL)
# Browser with tracing
ppod browser:screenshot https://example.com --trace debug.zip
# Persistent storage (survives sandbox reset)
echo '{"step":3}' | ppod mem:write state.json
# Built-in tools (50+ available: ffmpeg, sqlite3, pandoc, imagemagick, git, jq, ripgrep...)
ppod exec "ffmpeg -i input.mp4 -vf scale=640:480 output.mp4" # Video processing
ppod exec "sqlite3 data.db 'SELECT * FROM users'" # Database queries
ppod exec "convert image.png -resize 50% thumbnail.png" # Image manipulation
HTTP Endpoints
Use HTTP for one-shot tasks or when CLI isn't available. Run curl https://paperpod.dev/docs or visit https://paperpod.dev/docs for full API reference.
Quick Reference
| Endpoint | Purpose |
|---|---|
POST /execute | Run code (python, javascript, shell) |
POST /execute/stream | Stream output (SSE) |
POST /files/write | Write file |
POST /files/read | Read file |
POST /files/list | List directory |
POST /process/start | Start background process |
POST /process/list | List processes |
POST /expose | Get preview URL for port |
POST /memory/write | Persist data |
POST /memory/read | Read persisted data |
POST /browser/screenshot | Capture screenshot |
POST /browser/pdf | Generate PDF |
POST /browser/markdown | Extract markdown |
POST /ai/generate | Text generation |
POST /ai/embed | Embeddings |
POST /ai/image | Image generation |
GET /ai/models | List models |
HTTP Example
# Execute shell command
curl -X POST https://paperpod.dev/execute \
-H "Authorization: Bearer $PAPERPOD_TOKEN" \
-d '{"code": "ls -la", "language": "shell"}'
Capabilities
| Category | What you can do |
|---|---|
| Code Execution | Python, JavaScript, shell commands |
| Processes | Background servers, long-running jobs |
| Preview URLs | Expose ports → https://8080-{sandbox-id}-p8080_v1.paperpod.work |
| Agent Memory | 10MB persistent storage (R2) |
| Browser | Screenshots, PDFs, scraping (Playwright) |
| AI Models | Text, embeddings, images, transcription |
| Files | Read/write, git, bulk operations |
Pre-installed Tools (50+)
| Category | Tools |
|---|---|
| Runtimes | python, node, npm, bun, pip |
| Version Control | git, gh (GitHub CLI) |
| HTTP & Networking | curl, httpie, jq, dig, ss |
| Search & Text | ripgrep (rg), find, sed, awk, tree |
| Media & Docs | ffmpeg, imagemagick, pandoc |
| Build & Data | make, sqlite3, tar, gzip, zip, unzip |
Key Notes
- Sandboxes are isolated — each user gets their own container with a full Linux environment; you can only affect your own ephemeral sandbox
- Sandbox is ephemeral — use Agent Memory (
/memory/*) for persistence - Working directory is
/workspace— relative paths likefile.txtresolve to/workspace/file.txt - Servers must bind to
0.0.0.0for public access - Ports 3000-3010 are reserved — use 8080, 5000, 4000, etc.
- Browser sessions — Each command creates an ephemeral session. Use
browser:acquirefor multi-command session reuse,--traceto capture Playwright traces
Billing
$0.0001/sec compute + browser, $0.02/1K neurons AI. New accounts get $5 free (~14 hours), no credit card required.
Discovery
ppod help— CLI command referenceGET https://paperpod.dev/— API schema (JSON)GET https://paperpod.dev/docs— Full documentation