Plain text, in git
Requests, captures and asserts live in .hurl files next to your code. Review them, diff them, blame them.
Open source CLI and desktop app
Requests and asserts in .hurl files. Run them in Sonde Desktop, with sonde --test in CI, or through sonde mcp.
brew install nhtera/tap/sonde


The desktop app, the CLI and the MCP server share one engine. A file that passes on your machine passes in CI and for your agent.
24▸POST {{base_url}}/orders25Authorization: Bearer {{token}}26Content-Type: application/json27{"cart_id": "{{cart_id}}"}28✓ passedHTTP 20129[Captures]30◆ capturedorder_id: jsonpath "$.order_id"3132▸GET {{base_url}}/orders/{{order_id}}33Authorization: Bearer {{token}}34✓ passedHTTP 20035[Asserts]36✕ failedjsonpath "$.status" == "paid"got "pending"37✓ passedjsonpath "$.total" == 25.8
error: Assert failure --> orders/checkout.hurl:36:0 | | GET {{base_url}}/orders/{{order_id}} | ... 36 | jsonpath "$.status" == "paid" | actual: string <pending> | expected: string <paid> Failure orders/checkout.hurl (5 request(s) in 116 ms)
// tool result { "filename": "orders/checkout.hurl", "success": false, "time": 116, "entries": [ … 5 entries, 1 failed assert … ] }
The interface stays quiet so the run can speak. Color appears only when it means something: a pass, a failure, a captured value, the method of a request.
Each feature is a few lines in a file you can review in a pull request.
Requests, captures and asserts live in .hurl files next to your code. Review them, diff them, blame them.
One sonde.yaml per project. Secrets stay in files git ignores and print as stars.
sonde.yaml →Check every response against your spec and see which operations your tests cover.
OpenAPI guide →Run a file once per row of a CSV or JSON file.
Server-Sent Events, WebSocket and gRPC calls in .sonde files.
Bring requests from curl, .http files, OpenAPI specs and collection exports. Secrets are lifted into variables.
sonde lsp brings diagnostics, completion and hover to VS Code, Neovim and any LSP client.
One run, the formats CI dashboards and agents expect.
A free app for macOS, Windows and Linux that reads your project folder. Nothing to sign in to.
Open a folder and start. There is nothing to sign in to.
Sonde sends the requests you wrote. Nothing about you.
Runs are kept on your computer, with secrets redacted.
The daily update check can be turned off.
One binary from Homebrew, Scoop, Go, or a signed archive.
A request, then the response you expect.
The same command on your laptop and in CI.
$ brew install nhtera/tap/sonde $ cat health.hurl GET https://api.example.com/health HTTP 200 $ sonde --test health.hurl Success health.hurl (1 request(s) in 41 ms) -------------------------------------------------------- Executed files: 1 Executed requests: 1 (24.4/s) Succeeded files: 1 (100.0%) Failed files: 0 (0.0%) Duration: 41 ms (0h:0m:0s:41ms)