Skip to content

Exceptions

Sometimes you need to temporarily bypass governance controls. SCC provides a time-bounded exception system.

For delegation denials, developers can create local overrides:

Terminal window
scc unblock jira-api --ttl 8h --reason "Sprint demo integration"

Use cases:

  • Urgent integrations during active development
  • Testing before requesting permanent delegation
  • Personal tooling not worth formal approval

For security policy overrides, use policy exceptions:

Terminal window
scc exceptions create --policy --id INC-2025-00123 \
--allow-plugin vendor-tools --ttl 24h \
--reason "Emergency vendor integration per INC-2025-00123"

Policy exceptions:

  • Require PR review and approval (stored in config repo)
  • Can override any block (security + delegation)
  • Should reference an incident/ticket ID
  • Have organization-defined TTL limits

Both exception types can target:

TargetFlagExample
Plugins--allow-plugin--allow-plugin vendor-tool
MCP Servers--allow-mcp--allow-mcp jira-api
Base Images--allow-image--allow-image docker.io/custom:v1
Terminal window
# Basic override
scc unblock my-plugin --ttl 8h --reason "Testing"
# Override for MCP server
scc unblock --mcp jira-api --ttl 4h --reason "Demo prep"
# Share with team (repo store)
scc unblock my-plugin --ttl 8h --reason "Team testing" --shared

Policy exceptions require more formality:

Terminal window
scc exceptions create --policy \
--id INC-2025-00123 \
--allow-plugin blocked-vendor-tool \
--ttl 24h \
--reason "Emergency integration approved by security team"

The exception is written to the config repo and requires PR approval.

All exceptions are time-bounded:

SettingValue
Default TTL8 hours
Maximum TTL24 hours (configurable by org)
Terminal window
scc unblock plugin --ttl 8h
scc unblock plugin --ttl 30m
scc unblock plugin --ttl 1d

Expired exceptions are automatically ignored.

StoreLocationPurpose
User~/.config/scc/exceptions.jsonPersonal, machine-local
Repo.scc/exceptions.jsonShared with team (if committed)
PolicyConfig repoOrg-approved, PR-reviewed

Use --shared with scc unblock to write to repo store instead of user store.

Terminal window
# See in config explain output
scc config explain
# List all exceptions with expiry times
scc exceptions list

Example output:

Active Exceptions:
plugin:vendor-tool
expires: 2025-01-15T18:00:00Z (in 6h)
reason: Emergency integration per INC-2025-00123
source: policy
id: INC-2025-00123
mcp:jira-api
expires: 2025-01-15T14:00:00Z (in 2h)
reason: Sprint demo prep
source: user

Remove expired exceptions:

Terminal window
scc exceptions cleanup

Remove a specific exception:

Terminal window
scc exceptions remove plugin:vendor-tool

Control exception behavior:

{
"exceptions": {
"max_ttl_hours": 24,
"require_reason": true,
"require_ticket_id_for_policy": true,
"allowed_override_types": ["plugin", "mcp"]
}
}
FieldDescription
max_ttl_hoursMaximum TTL for any exception
require_reasonReason is mandatory
require_ticket_id_for_policyPolicy exceptions need --id
allowed_override_typesWhat can be overridden
ScenarioSolution
Delegation denied, need it nowscc unblock <target> --ttl 8h --reason "..."
Security blocked, have approvalscc exceptions create --policy --id INC-... --allow-* ...
Check what’s blocked/overriddenscc config explain
List active exceptionsscc exceptions list
Clean up old exceptionsscc exceptions cleanup
  1. Use short TTLs: Request only the time you need
  2. Always provide reasons: Helps with auditing
  3. Reference tickets: For policy exceptions, always link to approval
  4. Don’t commit user exceptions: Keep personal overrides local
  5. Review regularly: Run scc exceptions list to check active overrides