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.

  1. Trigger — When does the action fire? On every request, on response, before the request leaves, or manually via a button on a request row.
  2. Condition — What does the request/response need to match? Uses DADQL filtering — the same query language you use everywhere in Grroxy.
  3. Functions — What happens when it matches? Pick from the built-in functions. Chain them together.
AUTOMATIC FLOWBrowserPROXYConditionmatchFunctionsMANUAL TRIGGERAction ButtonRequest RowFunctionsResult

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

TriggerWhen it fires
before_requestBefore the request leaves the proxy to the target
requestAfter the request is saved to the database
responseAfter the response is saved to the database
request-action-buttonManual — 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.

FunctionWhat it doesKey params
setSet request/response fields (headers, method, path, body, query)req.method, req.headers.<Name>, req.path, req.body, req.query.<param>
deleteRemove fields. Supports wildcard (req.headers.Sec-*)req.headers.<Name>, req.body, req.query.<param>
replaceSearch and replace in the raw request — string or regexsearch, value, regex (bool)

Request Execution

Send modified copies of the current request.

FunctionWhat it doesKey params
send_requestSend a modified copy of the current request. Response saved to DB.req.method, req.headers.<Name>, req.body

Output

Label requests for easy identification.

FunctionWhat it doesKey params
create_labelCreate a label and attach it to the request rowname, 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:

TemplateDescription
Extension labelsLabels requests by file extension (.js, .css, .pdf, etc.)
MIME labelsLabels responses by content type (json, html, image, etc.)
Path labelsLabels by URL patterns (api, graphql, wordpress, docker, etc.)
Proxy configsPer-host request modifications
Test HTTP MethodsAction button to test all methods on a request

Creating via AI

Actions can be created by AI agents through MCP tools:

MCP ToolWhat it does
templateGetInfoGet the full syntax reference — call this first
templateListList all actions
templateReadRead an action's full content
templateCreateCreate a new action
templateUpdateEdit 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.