caido-capture
Ensure Caido is running, create per-engagement project, route browser through Caido proxy. Use when starting any live-target session. Idempotent.
SKILL.md.claude/skills/caido-capture/SKILL.md
GitHubcaido-capture
Purpose
All traffic to and from the live target should land in Caido for later inspection, replay, and IDOR/BAC fuzzing. This skill wires the plumbing.
Inputs
targets/<name>/status.json(for target name).- Caido GUI running locally with API enabled (Settings → Other → enable API).
Steps
- Probe Caido API:
caido_health()via thecaidoMCP. If it errors, halt with instructions to open Caido and enable API. - Ensure project:
caido_project_ensure(name="<target>-<YYYYMMDD>"). Creates if missing; selects current. - Set scope:
caido_scope_set(in=[scope.in...], out=[scope.out...]). - Tell the chrome-devtools MCP to relaunch Chrome with the Caido
proxy URL (default
http://127.0.0.1:8080). Practical recipe:- Close current Chrome via chrome-devtools
close_pagethen start a new one with--proxy-server=http://127.0.0.1:8080(we document this as a launch-flag the user keeps on their Chrome profile for bounty work — seewiki/tools/browser/proxy-setup.md).
- Close current Chrome via chrome-devtools
- Verify capture: navigate to a benign in-scope URL; query
caido_recent_requests(count=1); assert our request is there.
Outputs
- Caido project populated as user browses.
targets/<name>/caido/project.json(mirror of project metadata).- updated
status.json.phases.caido_capture.
Failure modes
- Caido API disabled → halt with explicit GUI step list.
- Chrome refuses proxy (cert pinning, HSTS pre-loaded sites) → user
must install Caido CA into Chrome trust store. Document one-time
setup in
wiki/tools/caido/cert-trust.md. - Scope mismatch (browser tries to navigate out-of-scope) → Caido
drops the request; we log to
status.json.caido_capture.dropped[].
Result block
"phases": { "caido_capture": { "status": "done", "ts": "<iso>",
"project": "<target>-<YYYYMMDD>", "proxy_url": "...", "verified": true } }