sunbeam“pls” / v0.1.1an agent-native request library

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

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