Key Features
- Request Capture: Automatic capture of all proxied traffic
- Request Replay: Repeat requests with modifications
- Scope Management: Filter traffic by domain patterns
- Sitemap Discovery: Hierarchical view of discovered endpoints
- HTTPQL Filtering: Powerful query language for request filtering
- Request Search: Regex search within request/response data
Tools
list_requests
List and filter proxy requests using HTTPQL with pagination.HTTPQL filter using Caido’s syntax:Integer fields (port, code, roundtrip, id) - eq, gt, gte, lt, lte, ne:
resp.code.eq:200,resp.code.gte:400,req.port.eq:443
req.method.regex:"POST",req.path.regex:"/api/.*",req.host.regex:".*.com"
req.created_at.gt:"2024-01-01T00:00:00Z"
source:intercept, preset:"name"Starting page (1-based)
Ending page (1-based, inclusive)
Requests per page
Sort field: “timestamp”, “host”, “status_code”, “response_time”, “response_size”
Sort direction: “asc” or “desc”
Scope ID to filter requests (use scope_rules to manage scopes)
view_request
View request/response data with search and pagination.Request ID
Which part to return: “request” or “response”
Regex pattern to search content. Common patterns:
- API endpoints:
r"/api/[a-zA-Z0-9._/-]+" - URLs:
r"https?://[^\\s<>"\']+" - Parameters:
r'[?&][a-zA-Z0-9_]+=([^&\\s<>"\']+)'
Page number for pagination
Lines per page
send_request
Send a simple HTTP request through proxy.HTTP method (GET, POST, etc.)
Target URL
Headers as key-value pairs (e.g.,
{"key": "value"})Request body
Request timeout in seconds
repeat_request
Repeat an existing proxy request with modifications for pentesting.ID of the original request to repeat (from list_requests)
Changes to apply to the original request:
url: New URL or modify existing oneparams: Dict to update query parametersheaders: Dict to add/update headersbody: New request body (replaces original)cookies: Dict to add/update cookies
scope_rules
Manage proxy scope patterns for domain/file filtering using Caido’s scope system.Scope action:
get: Get specific scope by ID or list all if no IDupdate: Update existing scope (requires scope_id and scope_name)list: List all available scopescreate: Create new scope (requires scope_name)delete: Delete scope (requires scope_id)
Domain patterns to include. Examples: [“*.example.com”, “api.test.com”]
Patterns to exclude. Common extensions:
[“.gif”, “.jpg”, “.png”, “.css”, “.js”, “.ico”, “.svg”, “woff”, “.ttf”]
Specific scope ID to operate on (required for get, update, delete)
Name for scope (required for create, update)
list_sitemap
View hierarchical sitemap of discovered attack surface from proxied traffic.Scope ID to filter sitemap entries
ID of parent entry to expand. If None, returns root domains.
“DIRECT”: Only immediate children. “ALL”: All descendants recursively.
Page number for pagination (30 entries per page)
view_sitemap_entry
Get detailed information about a specific sitemap entry and related requests.ID of the sitemap entry to examine
Examples
Filtering Requests
Request Replay
Scope Management
Sitemap Discovery
Proper Workflow
This mirrors real pentesting: browse → capture → analyze → test
Sitemap Entry Kinds
- DOMAIN: Root domains (example.com)
- DIRECTORY: Path directories (/api/, /admin/)
- REQUEST: Individual endpoints
- REQUEST_BODY: POST/PUT body variations
- REQUEST_QUERY: GET parameter variations
Check
hasDescendants=true to identify entries worth expanding. Use parent_id from any entry to drill down into subdirectories.Scope Pattern Syntax
- Empty allowlist = allow all domains
- Denylist overrides allowlist
- Glob patterns:
*(any characters)?(single character)[abc](one of)[a-z](range)[^abc](none of)