Skip to content

Security Exceptions

Exceptions let you temporarily bypass governance blocks for specific plugins, MCP servers, or base images.

Terminal window
# List active exceptions
scc exceptions list
# Create a temporary exception
scc unblock <target> --reason "Testing feature X" --ttl 8h
# Clean up expired exceptions
scc exceptions cleanup

Symptom: Created an exception but plugin/server still blocked.

Causes:

Security Block vs Delegation Denial

Local exceptions can only override delegation denials, not security blocks.

Wrong Target Name

The target name must match exactly what’s shown in scc config explain.

Diagnose:

Terminal window
# Check what's blocked vs denied
scc config explain --field blocked_items
scc config explain --field denied_additions

Understanding the difference:

TypeSourceCan Override Locally?
Security BlockOrg blocked_plugins patternNo — requires policy PR
Delegation DenialTeam doesn’t allow additionsYes — use scc unblock

Fix for security blocks:

Terminal window
# Generate YAML for policy PR (cannot override locally)
scc exceptions create --policy --id my-exception \
--allow-plugin "blocked-plugin@marketplace" \
--reason "Approved by security team"

Symptom: scc exceptions list shows exception but it’s not working.

Check expiration:

Terminal window
scc exceptions list --all

Look for the “Expires In” column — if negative or says “expired”, it’s no longer active.

Fix:

Terminal window
# Create a new exception with longer TTL
scc unblock <target> --reason "Extended testing" --ttl 24h

Symptom: Commands fail with JSON errors or exceptions behave strangely.

Location of exception files:

ScopeFile Path
User (local)~/.config/scc/exceptions.json
Repo (shared).scc/exceptions.json

Fix:

  1. Backup the corrupt file

    Terminal window
    cp ~/.config/scc/exceptions.json ~/.config/scc/exceptions.json.bak
  2. Reset the exception store

    Terminal window
    # Reset user exceptions
    scc exceptions reset --user --yes
    # Reset repo exceptions
    scc exceptions reset --repo --yes
  3. Recreate needed exceptions

    Terminal window
    scc unblock <target> --reason "Recreated after reset" --ttl 8h

Symptom: Team member created --shared exception but you can’t see it.

Causes:

  1. File not committed.scc/exceptions.json needs to be in git
  2. Git ignored — Check if .scc/ is in .gitignore
  3. Not pulled — Run git pull to get latest

Check:

Terminal window
# See if shared exceptions exist
cat .scc/exceptions.json
# Check if git-ignored
git check-ignore .scc/exceptions.json

Fix for git-ignored:

Terminal window
# Add exception to .gitignore exclusion
echo "!.scc/exceptions.json" >> .gitignore
git add .scc/exceptions.json
git commit -m "Add shared SCC exceptions"

Terminal window
scc exceptions list [OPTIONS]
OptionDescription
--activeShow only active (non-expired) exceptions
--expiredShow only expired exceptions
--allShow all exceptions
--jsonOutput as JSON
Terminal window
scc exceptions create [OPTIONS]
OptionDescription
--allow-mcp NAMEAllow MCP server (repeatable)
--allow-plugin NAMEAllow plugin (repeatable)
--allow-image REFAllow base image (repeatable)
--reason TEXTReason for exception (required)
--ttl DURATIONTime-to-live (e.g., 8h, 30m, 1d)
--expires-at RFC3339Exact expiration time
--until HH:MMExpire at time of day
--sharedSave to repo store (.scc/exceptions.json)
--policyGenerate YAML for policy PR
Terminal window
scc exceptions delete <EXCEPTION_ID> [OPTIONS]
OptionDescription
-y, --yesSkip confirmation

Remove all expired exceptions from both stores.

Terminal window
scc exceptions cleanup

Remove all exceptions (destructive).

Terminal window
scc exceptions reset --user --yes # Reset user store
scc exceptions reset --repo --yes # Reset repo store

Quick way to create an exception for a denied target.

Terminal window
scc unblock <TARGET> [OPTIONS]
OptionDescription
--reason TEXTReason (required with --yes)
--ticket IDRelated ticket ID for audit trail
--ttl DURATIONTime-to-live
--sharedSave to repo store
-y, --yesSkip confirmation (requires --reason)

Examples:

Terminal window
# Interactive - prompts for reason
scc unblock my-plugin@marketplace

{
"schema_version": 1,
"exceptions": [
{
"id": "local-20250106-a3f2",
"created_at": "2025-01-06T10:00:00Z",
"expires_at": "2025-01-06T18:00:00Z",
"reason": "Testing new feature",
"scope": "local",
"allow": {
"plugins": ["my-plugin@marketplace"],
"mcp_servers": [],
"base_images": []
}
}
]
}