Skip to main content
The kill switch lets workspace admins stop all agent activity immediately — no policy changes needed, no redeployment required.

Two levels of control

Global kill switch — blocks all write actions for the entire workspace. Every request through gateway-proxy, evaluate-action, and mcp-gate that reaches the policy engine will return block with reason "Kill switch is active". Per-tool pause — pauses a single tool connection (e.g. GitHub) while leaving others active. Stored as paused: true on the tool_connections row. Both are checked at evaluation time. The global kill switch is also checked before executing a deferred action, so approvals queued before the kill switch was enabled will not execute while it is active.

Activating the kill switch

curl -X POST \
  https://<project-ref>.supabase.co/functions/v1/kill-switch \
  -H "Authorization: Bearer <supabase-jwt>" \
  -H "Content-Type: application/json" \
  -d '{
    "workspaceId": "your-workspace-id",
    "action": "enable"
  }'
The kill-switch endpoint requires a Supabase user JWT (not an agk_ API key) and the caller must have the admin or owner role in the workspace.

Actions

action valueAdditional fieldEffect
enableGlobal kill switch on
disableGlobal kill switch off
pause_tooltool (required)Pause one tool
resume_tooltool (required)Resume one tool
Valid tool values: github, linear, slack, notion, internal_api, mcp

Response

{ "ok": true }
On error:
{ "ok": false, "error": "Admin or owner role required" }

Audit logging

Every kill switch action is written to audit_logs with:
  • tool: "system"
  • action: "kill_switch.enable" / "kill_switch.disable" / "github.pause_tool" / etc.
  • risk_level: "critical"
  • decision: "allow"
  • payload_preview: { "actor": "<user_id>" }
A Slack and email notification is queued for the kill_switch notification event if enabled in workspace settings.

Status in poll responses

When you poll /gateway-proxy/status/:correlationId, the response includes the current kill switch state:
{
  "ok": true,
  "status": "pending",
  "killSwitch": {
    "global": true,
    "enabledAt": "2026-04-20T10:30:00.000Z",
    "enabledBy": "user-uuid",
    "toolsPaused": ["linear"]
  }
}
This lets agents surface kill switch state to operators without requiring a separate API call.