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_FROZENerror 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:
| Action | Next proxy call gets | Reversible |
|---|---|---|
| Freeze the agent | 403 frozen | Yes — unfreeze |
Revoke the virtual key (agent page, or DELETE /api/v1/agents/<agentId>/virtual-keys/<keyId>) | 401 invalid_api_key | No — create a new key |
| Turn Cap off on the agent page | 403 cap_disabled | Yes — 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_blockedentries - Maintenance window — pause agents while updating integration code
- End of project — freeze before decommissioning to preserve the audit trail