Valta Docs

Kill Switch

The kill switch instantly stops all financial activity for an agent. It is not queued — the freeze takes effect immediately. No transactions can execute while an agent is frozen.

Freeze an agent

ts
const result = await valta.agents.freeze(agentId)
// result.status === 'frozen'
// All subsequent run attempts return AGENT_FROZEN error

Unfreeze an agent

ts
const result = await valta.agents.unfreeze(agentId)
// result.status === 'active'

What happens when an agent is frozen

  • Run attempts return an AGENT_FROZEN error immediately
  • No transactions can be initiated or completed
  • The audit trail remains fully readable
  • The spending policy remains intact and accessible
  • The wallet balance is preserved — funds are not moved or locked

Freeze and the OpenAI proxy

If the agent calls OpenAI through the enforced proxy, a freeze also stops its next proxy call: Valta answers 403 with reason: "frozen" and nothing is sent to OpenAI.

  • The freeze lives on Valta's side. It holds even if the agent's process has crashed, restarted, or is stuck in a retry loop — the agent has no OpenAI key of its own to go around it.
  • Proxy-only agents can be frozen too. An agent id that exists only as a Cap policy or a virtual key (no wallet) can still be frozen with POST /api/v1/agents/<agentId>/freeze, or from My Agents in the dashboard.
  • Unfreeze with POST /api/v1/agents/<agentId>/unfreeze (or the dashboard). The next proxy call goes through normally.

Other ways to stop proxy calls, if you need them:

ActionNext proxy call getsReversible
Freeze the agent403 frozenYes — unfreeze
Revoke the virtual key (agent page, or DELETE /api/v1/agents/<agentId>/virtual-keys/<keyId>)401 invalid_api_keyNo — create a new key
Turn Cap off on the agent page403 cap_disabledYes — turn Cap back on

CLI

bash
valta agents freeze <agent-id>
valta agents unfreeze <agent-id>

Bulk freeze all active agents

Use this in an incident response scenario where you need to stop all agent activity immediately.

ts
const { data: agents } = await valta.agents.list({ status: 'active' })
await Promise.all(agents.map(a => valta.agents.freeze(a.id)))
console.log(`Froze ${agents.length} agents`)

Note: Freezing does not delete anything. The audit trail, policy, and wallet balance are all preserved. You can unfreeze and resume at any time.

When to use the kill switch

  • Suspected compromise — unusual spending patterns or unexpected transactions
  • Prompt injection detected — audit trail shows injection_attempt_blocked entries
  • Maintenance window — pause agents while updating integration code
  • End of project — freeze before decommissioning to preserve the audit trail