an agent-native request library. collecting intelligence, in drips.
agents make hundreds of http calls a day. “pls” catches each one, files it, and turns the ambient traffic into a collection you can replay.
~/ install “pls”⌘
# 1. install the app $ git clone https://github.com/sunbeam-za/pls.git $ cd pls && npm install && npm run build:mac # 2. point your agent at it $ claude mcp add pls -- node ./out/mcp/pls-mcp.mjs # 3. tell the agent: route http through pls. # that's it. open the app and watch it fill up.
— how it works
agent fires a request through “pls”. “pls” renders it live, files it under the right host, and lets you promote the good ones into named fixtures. next time the agent reaches for that endpoint, the fixture is already sitting there. drip, file, recall.
— tell your agent
drop this into your project's CLAUDE.md (or the equivalent rules file for cursor, windsurf, codex). it tells the agent to route every http call through “pls” so you can actually see what it's doing.
~/ CLAUDE.md⌘
# pls ## Network requests: always use the pls MCP All HTTP requests you make on my behalf must go through the **pls MCP server**, not `curl`, `fetch`, `wget`, `http`, Python `requests`, etc. Why: pls gives me a live UI where every request you fire shows up, can be inspected, persisted, replayed, and saved into a collection. Going through pls turns your debugging into something I can actually see and reuse. How to apply: - For any one-off or debugging request, call the pls MCP tools (`create_request`, `send_saved_request`, etc.) instead of shelling out. - If pls is missing an operation you need (new tool, new option, more complex flow), **stop and ask** — describe what you need and I'll add it. Don't fall back to `curl` as a workaround. - The only exception is when the request is part of a script or piece of code being written into the repo itself (e.g. a fetch call inside the app). That's product code, not your own debugging traffic.
— what's in the box
- mcp server.claude, cursor, windsurf, codex — all send through “pls”.
- live feed.every call streams into one window. replay in a keystroke.
- auto-collections.ad-hoc calls get filed by host. promote the keepers.
- local-first.plain json on disk. version it, grep it, ship it in a pr.
- openapi aware.drop in a spec, get a browsable collection.
- secret refs.auth resolves at send time. tokens never get baked in.
— a typical session
~/ a day with “pls”⌘
you → "figure out why the webhook retries are 4xxing for tenant 91" agent → calls pls.send_ad_hoc_request(GET /tenants/91/webhooks) → pls.send_ad_hoc_request(GET /webhooks/{id}/attempts) → pls.send_ad_hoc_request(POST /webhooks/{id}/replay) pls → 3 requests appear in the window. you watch them stream. you ⌘-click "save" on the replay call. name it webhook regression #91. tomorrow → "is the webhook regression still happening?" agent → pls.send_saved_request(webhook regression #91) → 200. fixed.
— get it
mac only for now. free. open source.