Capture, inspect, and replay any HTTP request. Point any traffic at snago — webhooks, API calls, form submissions, health checks — and it saves every request to disk. Replay them later against any target with headers, body, and query strings fully preserved.
Single binary, zero runtime dependencies.
- API development — Capture requests from any client, inspect what was actually sent, and replay to reproduce issues or test changes.
- Webhook debugging — Point GitHub/Stripe/Slack webhooks at snago, inspect payloads, and replay them while iterating on your handler.
- Request archiving — Persist incoming traffic for later analysis without modifying your application.
- Integration testing — Record real requests from third-party services and replay them against your local environment.
go install github.com/nikooo777/snago@latestOr build from source:
git clone https://github.com/nikooo777/snago.git
cd snago
make build# 1. Start capturing
snago serve
# 2. Send any request (from another terminal)
curl -X POST -H "Content-Type: application/json" \
-d '{"action":"test"}' http://localhost:7624/any/path
# 3. Inspect the captured request
snago inspect captures/<file>.gob
# 4. Replay it to your real server
snago replay --target http://localhost:9090 captures/<file>.gobStart an HTTP server that captures every incoming request to a .gob file. All requests receive a 200 OK response with body ok — it acts as a universal sink.
snago serve [--addr :7624] [--dir ./captures] [--verbose] [--no-body]| Flag | Default | Description |
|---|---|---|
--addr |
:7624 |
Listen address |
--dir |
./captures |
Output directory for captured .gob files |
--verbose |
false |
Print full request details (headers + body) for each capture |
--no-body |
false |
Hide request body from verbose output |
Example output:
$ snago serve
INFO snago listening addr=:7624 dir=./captures
POST /api/orders 5 headers 66b → 1771366415797329694_38aab851.gob
GET /health 2 headers 0b → 1771366415801479108_bd746ac6.gob
The server shuts down gracefully on Ctrl+C. If running behind a reverse proxy, it reads X-Forwarded-Proto to detect the original scheme (http/https).
Pretty-print a captured request — method, URL, timestamp, headers, and body. Binary bodies are shown as [binary data, N bytes] instead of raw bytes.
snago inspect [--save-body [file]] [--no-body] <file.gob>| Flag | Default | Description |
|---|---|---|
--save-body |
(off) | Save request body to a file. Omit filename for auto-detection (MIME-based extension) |
--no-body |
false |
Hide request body from output |
$ snago inspect captures/1771366415797329694_38aab851.gob
POST https://example.com/api/orders
Captured: 2026-02-17 23:15:56
Content-Type: application/json
Authorization: Bearer tok_xxx
{"item":"widget","qty":3}
Extract the body with automatic filename and extension detection:
# Auto-detect: generates 1771366415797329694_38aab851_body.json
snago inspect --save-body captures/1771366415797329694_38aab851.gob
# Explicit path
snago inspect --save-body=payload.json captures/1771366415797329694_38aab851.gobRe-send a captured request. By default, replays to the original host. Use --target to redirect it.
snago replay [--target URL] [--verbose] <file.gob>| Flag | Default | Description |
|---|---|---|
--target |
(original host) | Override destination URL (scheme://host) |
--verbose |
false |
Print full response details (headers + body) |
# Replay to original destination
snago replay captures/1771366415797329694_38aab851.gob
# Replay to a different host (path and query string are preserved)
snago replay --target http://localhost:9090 captures/1771366415797329694_38aab851.gobHop-by-hop headers (Connection, Transfer-Encoding, Content-Length) are automatically stripped before sending.
snago version
# or
snago --versionAll flags can be set via environment variables (flags take precedence when both are set):
| Variable | Flag equivalent | Default |
|---|---|---|
SNAGO_SERVE_ADDR |
--addr |
:7624 |
SNAGO_SERVE_DIR |
--dir |
./captures |
SNAGO_SERVE_VERBOSE |
--verbose |
false |
SNAGO_REPLAY_TARGET |
--target |
(empty) |
SNAGO_REPLAY_VERBOSE |
--verbose |
false |
MIT

