Claude Code AUP refusal guard
output-guard:claude-code-aup-refusal
OutputGuardsecurity/output-guards/claude-code-aup-refusal.yaml·Open in Graph → {
"id": "output-guard:claude-code-aup-refusal",
"_kind": "OutputGuard",
"_file": "security/output-guards/claude-code-aup-refusal.yaml",
"_cluster": "security",
"attributes": {
"displayName": "Claude Code AUP refusal guard",
"appliesTo": "assistant-text",
"phase": "post-call",
"detectorKinds": [
"refusal-stop-reason",
"aup-violation"
],
"onTrigger": "rewrite",
"severity": "block-call",
"description": "Detects BetaStopReason='refusal' on a completed assistant turn. Logs\ntengu_refusal_api_response and replaces the assistant content with the\nAUP-pointing message (https://www.anthropic.com/legal/aup), plus a\n/model claude-sonnet-4-20250514 switch suggestion when the active model\nis not already that variant. Marked as an isApiErrorMessage with\nerror='invalid_request' so downstream UI treats it as a non-retryable\nblock-call.\n"
},
"outgoingEdges": [],
"incomingEdges": [
{
"from": "agent-core-impl:claude-code.core@1.x",
"to": "output-guard:claude-code-aup-refusal",
"kind": "output_guard_applied_by",
"attributes": {}
},
{
"from": "agent-runtime-impl:claude-code.runtime@1.x",
"to": "output-guard:claude-code-aup-refusal",
"kind": "output_guard_applied_by",
"attributes": {}
}
]
}