by Pikopod
A sandbox for the third-party APIs you depend on. Built from the provider's spec, it fails on purpose, and it replays the exact failure production hit.
# Add to your Claude Code skills
git clone https://github.com/Pikopod/pikopodGuides for using mcp servers skills like pikopod.
Last scanned: 9/28/2026
{
"issues": [],
"status": "PASSED",
"scannedAt": "2026-09-28T10:37:26.313Z",
"npmAuditRan": true,
"pipAuditRan": true,
"promptInjectionRan": true
}See how pikopod compares with popular alternatives.
pikopod is an open-source mcp servers skill for AI coding assistants such as Claude Code, Codex CLI, and ChatGPT, built by Pikopod. A sandbox for the third-party APIs you depend on. Built from the provider's spec, it fails on purpose, and it replays the exact failure production hit. It has 80 GitHub stars.
Yes. pikopod passed SkillsLLM's automated security scan — a dependency vulnerability audit plus prompt-injection heuristics — with no high-severity issues. You can read the full report in the Security Report section on this page.
Clone the repository with "git clone https://github.com/Pikopod/pikopod" and add it to your Claude Code skills directory (see the Installation section above).
pikopod is primarily written in Go. It is open-source under Pikopod on GitHub, so you can review or fork the full source.
Yes. SkillsLLM lists many other MCP Servers skills you can browse and compare side by side. Open the MCP Servers category from the badge at the top of this page, or use the Related Skills and comparison links further down to weigh pikopod against similar tools.
No comments yet. Be the first to share your thoughts!
Top skills in this category by stars
⚠️ Third-Party Software Notice
This skill is third-party open-source software developed and hosted independently on GitHub. SkillsLLM is an informational directory and does not control or maintain the underlying repository.
Any security checks, ratings, or warnings displayed by SkillsLLM are automated and limited in scope. They do not constitute a security certification or guarantee that the software is safe, error-free, or free from malicious code, vulnerabilities, compromised dependencies, or prompt-injection risks.
Review the source code, permissions, dependencies, and configuration before installing or running any third-party skill. Use is at your own risk. To the maximum extent permitted by applicable law, SkillsLLM is not liable for losses arising from third-party software.
Their sandbox only knows how to succeed. So the first time your retry path runs for real, it runs against real money.
pikopod builds a sandbox from your provider's spec, makes it fail on purpose, learns from what the provider really sends, and replays the exact failure production hit, on your laptop, as a test you keep.
One Go binary. Runs locally. No accounts, no telemetry, no cloud.

go install github.com/pikopod/pikopod/cmd/pikopod@latest
Or with Homebrew:
brew trust pikopod/tap
brew install pikopod/tap/pikopod
Recent Homebrew requires third-party taps to be trusted explicitly; without the
first line it reports Invalid formula. Or download a signed binary from
Releases: macOS and Linux, amd64
and arm64, static, zero dependencies. Every release ships SHA256SUMS, cosign-signed,
with SLSA provenance; the verification command is in Installation.
pikopod demo
Zero config. It stands up a fake provider, sends traffic, silently changes the provider's responses, and prints the alerts. Runs in about a second.
| What it does | Docs | |
|---|---|---|
| Rehearse | A deterministic sandbox built from the provider's spec. Eleven failure stories bind to it with nothing authored: declines, timeouts, retry storms, duplicate webhooks. | Sandbox · Scenarios |
| Observe | A fail-open proxy in front of the real provider. It records failures from the first request, reports what the provider did that the sandbox would not have, and shape changes once it knows what normal is. Every finding carries a fingerprint. | Observe · Divergence |
| Reproduce | The fingerprint becomes a scenario that replays the production failure against the sandbox. Commit it, and the path is guarded forever. The recordings also answer the sandbox before the spec, and a number says how much of the provider's real traffic it reproduces. | Reproduce · Truthfulness |
You cannot ask a provider's sandbox to return that exact 503, with that body, at that point in your state machine. pikopod can, because the same tool recorded it and owns the sandbox. See The loop.
With pikopod up in front of the real provider in staging or production,
every failure the provider throws is recorded, redacted, and listed with a
handle:
pikopod agent incidents
[ERR] incident upstream_error POST /charges (examplepay) · 4 occurrence(s) · last 2026-09-19T10:00:00Z
fp_14835fa32dfb
reproduce: pikopod reproduce fp_14835fa32dfb
export: pikopod agent incidents export fp_14835fa32dfb
pikopod reproduce fp_14835fa32dfb
reproduced fp_14835fa32dfb (examplepay answered 503 on POST /charges) as pikopod-data/scenarios/incident-14835fa32dfb.yaml
PASSED — 1 assertion(s) passed; 0 not evaluated
the failure now happens locally — fix it, then re-run: pikopod scenario check examplepay incident-14835fa32dfb
The generated pack is an ordinary scenario: commit it and it guards that path
on every build. When the agent runs on another host,
pikopod agent incidents export <fp> writes a bundle that reproduce accepts
anywhere. See Incidents and
Reproduce.
curl -fsSL -o examplepay.spec.json https://raw.githubusercontent.com/pikopod/pikopod/main/docs/demo/examplepay.spec.json
pikopod init
pikopod import examplepay --spec ./examplepay.spec.json
pikopod scenario list examplepay
--spec also takes your provider's spec URL, or its documentation page.
archetypes vs examplepay (4 endpoints):
✓ happy_path Happy path (1 candidate binding(s))
✓ unauthorized Unauthorized (4 candidate binding(s))
✓ invalid_request Invalid request (1 candidate binding(s))
✗ duplicate_delivery Duplicate delivery
no webhookEvent matching {} for role 'emittedEvent'
✓ rate_limit_backoff Rate limit and backoff (4 candidate binding(s))
✓ state_transition_sequence State transition sequence (1 candidate binding(s))
✓ retry_storm Retry storm with recovery (1 candidate binding(s))
✓ declines Declines (1 candidate binding(s))
✓ timeouts Timeouts (1 candidate binding(s))
✓ partial_failure Partial failure (1 candidate binding(s))
✓ downtime_recovery Downtime and recovery (1 candidate binding(s))
Ten stories bound to four endpoints with nothing authored. The one that did not says which fact the spec is missing.
pikopod scenario check examplepay declines retry_storm
✓ declines — PASSED (4 assertion(s) passed; 0 not evaluated)
NOT_EVALUATED arm-decline armed error on POST /charges
PASSED declined POST /charges → 400
NOT_EVALUATED clear cleared matching faults
PASSED recovered POST /charges → 201
✓ retry_storm — PASSED (4 assertion(s) passed; 3 matcher(s) matched in order; 0 not evaluated)
NOT_EVALUATED arm armed error on POST /charges
PASSED attempt1 POST /charges → 503
PASSED attempt2 POST /charges → 503
PASSED attempt3 POST /charges → 201
PASSED storm-shape 3 matcher(s) matched in order
That proves the sandbox fails the way the story says. To prove your own code
survives it, serve the sandbox with pikopod up, put it into the story's
standing state, run your tests against :4600/examplepay, then ask:
pikopod mode set examplepay retry_storm
pikopod mode verify examplepay
✓ retry_storm — PASSED (3 matcher(s) matched in order)
PASSED storm-shape 3 matcher(s) matched in order
verify reads what your client actually sent and exits 1 when it fell
short, so it can sit in CI next to your test suite. pikopod chaos arms one
fault directly. See Modes and
Faults.
pikopod up also starts the observing agent on :4700/examplepay. Point your
app's provider base URL at it, keeping your real credentials; it forwards
everything untouched and watches. Incidents fire from the first request. So
does divergence: every production answer is compared with what the sandbox
would have said, and a 422 on a duplicate the spec never mentions becomes an
event with a fingerprint and a reproduce command. Drift waits 50 samples and
48 hours per endpoint, because a baseline built from five responses has not
seen your optional fields yet.
The recordings then answer the sandbox before the spec, so the sandbox learns
from production, and pikopod agent truthfulness examplepay says how much of
what the provider really sent it reproduces. pikopod agent replay --ci gates
every build on recorded traffic, with no network and no provider account. See
Divergence,
Precedence,
Truthfulness and
Replay gate.
No proxy, no account, no config file. It reads two versions of a spec straight from git with no checkout and fails the build on a breaking change:
pikopod spec-diff git:origin/main:openapi.yaml openapi.yaml --fail-on ERR
1 change(s): 1 ERR, 0 WARN, 0 INFO
ERR GET /charges/{id} endpoint-removed
endpoint removed from the spec [fp_bcc85ba9a094]
breaking declared drift at/above ERR — failing the gate (exit 1)
Exit 0 clean, 1 breaking, 2 tool error. In GitHub Actions it is two
lines, with the release verified by cosign before it runs and every finding
inline on the pull request diff:
- uses: Pikop