Guides

Configuration

Customize your Security Layer security policy.


Security Layer's configuration lives at ~/.securitylayer/. All config files use YAML with a version field for schema compatibility.

Config files

FilePurpose
config.yamlMain configuration (mode, judge settings, logging)
capabilities/sessions.yamlSession capability grants
capabilities/channels.yamlChannel capability restrictions
capabilities/skills.yamlSkill capability declarations
ai-tools.yamlAI tool caller profiles and detection rules
projects.yamlProject directory trust rules
learned-rules.jsonAuto-approved patterns from "Approve & Remember"

Main config

# ~/.securitylayer/config.yaml
version: 1
mode: enforce  # or "learning"

judge:
  enabled: true
  provider: anthropic
  model: claude-haiku-4-5-20251001
  api_key_env: ANTHROPIC_API_KEY
  timeout_ms: 500

logging:
  level: info  # debug, info, warn, error

Session capabilities

# ~/.securitylayer/capabilities/sessions.yaml
version: 1
sessions:
  claude-code:
    capabilities:
      - exec
      - file.read
      - file.write
      - web_fetch
    default_taint: owner

  restricted:
    capabilities:
      - file.read
      - exec:owner  # exec only in owner-taint projects
    default_taint: untrusted

AI tool profiles

# ~/.securitylayer/ai-tools.yaml
version: 1
callers:
  claude-code:
    display_name: Claude Code
    default_taint: OWNER
    capabilities:
      - exec
      - file.read
      - file.write
      - web_fetch
    detect:
      env:
        - CLAUDE_CODE
      process:
        - claude

  cursor:
    display_name: Cursor
    default_taint: TRUSTED_CONTACT
    capabilities:
      - exec
      - file.read
      - file.write
    detect:
      env:
        - CURSOR_SESSION
      process:
        - cursor

Project trust

# ~/.securitylayer/projects.yaml
version: 1
trust_rules:
  - path: "~/Dev/Personal/**"
    taint: OWNER
  - path: "~/Dev/Work/**"
    taint: TRUSTED_CONTACT
  - path: "/tmp/**"
    taint: WEB_CONTENT
default: UNTRUSTED_HUMAN

Schema versioning

All config files include a version field. When Security Layer loads a config file:

  1. It checks the version field
  2. If the version is supported, it loads normally
  3. If the version is newer than expected, it runs any available migrations
  4. If the version is unsupported, it refuses to load rather than silently misinterpreting

This prevents silent configuration breakage during upgrades.

Viewing config

# Full status overview
sl status

# Capabilities
sl capabilities show

# Taint and project trust
sl taint show
sl projects list

# Caller profiles
sl callers list

See also

On this page