Actions
Actions automate your testing while you browse. Define a condition, attach functions, and Grroxy runs them on every matching request or response — in real time, as traffic flows through the proxy. No scripts. No extensions. No context-switching.
How it works
Three parts. That's it.
- Trigger — When does the action fire? On every request, on response, before the request leaves, or manually via a button on a request row.
- Condition — What does the request/response need to match? Uses DADQL filtering — the same query language you use everywhere in Grroxy.
- Functions — What happens when it matches? Pick from the built-in functions. Chain them together.
Actions run in the background. You keep browsing. Results appear as labels, new requests in the table, or modified headers — depending on what functions you chained.
Triggers
| Trigger | When it fires |
|---|---|
before_request | Before the request leaves the proxy to the target |
request | After the request is saved to the database |
response | After the response is saved to the database |
request-action-button | Manual — user clicks Actions button on a request row |
Conditions
Conditions use DADQL — Grroxy's query language. If you've filtered traffic in the data table, you already know it.
Available fields: req.method, req.path, req.ext, req.url, req.query, req.headers.<Name>, resp.status, resp.mime, resp.headers.<Name>, resp.length, host, port, is_https.
Functions
Manipulation
Modify request fields. Works on before_request hook to change the
live request, or on action buttons to modify the editor.
| Function | What it does | Key params |
|---|---|---|
set | Set request/response fields (headers, method, path, body, query) | req.method, req.headers.<Name>, req.path, req.body, req.query.<param> |
delete | Remove fields. Supports wildcard (req.headers.Sec-*) | req.headers.<Name>, req.body, req.query.<param> |
replace | Search and replace in the raw request — string or regex | search, value, regex (bool) |
Request Execution
Send modified copies of the current request.
| Function | What it does | Key params |
|---|---|---|
send_request | Send a modified copy of the current request. Response saved to DB. | req.method, req.headers.<Name>, req.body |
Output
Label requests for easy identification.
| Function | What it does | Key params |
|---|---|---|
create_label | Create a label and attach it to the request row | name, color, type |
All function values support variable interpolation: {{req.ext}}, {{resp.mime}}, {{host}}.
Recipes
Real workflows you can build today.
Label by Extension
Auto-label every request by its file extension. JavaScript gets yellow, images get ignored.
Strip Tracking Headers
Remove fingerprinting headers before every request leaves the proxy.
Label by Response Status
Color-code responses by HTTP status.
Custom User-Agent per Target
Set a custom User-Agent for specific hosts.
Test HTTP Methods
Action button — click on any request to resend it with all common HTTP methods.
Label API and GraphQL
Auto-label API endpoints and GraphQL requests.
Default Templates
Grroxy ships with built-in templates that run out of the box:
| Template | Description |
|---|---|
Extension labels | Labels requests by file extension (.js, .css, .pdf, etc.) |
MIME labels | Labels responses by content type (json, html, image, etc.) |
Path labels | Labels by URL patterns (api, graphql, wordpress, docker, etc.) |
Proxy configs | Per-host request modifications |
Test HTTP Methods | Action button to test all methods on a request |
Creating via AI
Actions can be created by AI agents through MCP tools:
| MCP Tool | What it does |
|---|---|
templateGetInfo | Get the full syntax reference — call this first |
templateList | List all actions |
templateRead | Read an action's full content |
templateCreate | Create a new action |
templateUpdate | Edit an existing action |
Tell Claude Code "create an action that labels all 403 responses" and it will
call templateGetInfo, learn the syntax, build the action,
validate it, and save it. You don't write YAML.