Skip to content

Configuration Reference

Complete reference for all environment variables, configuration files, and schemas used by claude-superpowers.


Environment Variables (.env)

The .env file in the project root is loaded by superpowers/config.py at startup. Variables already set in the shell environment take precedence over .env values.

LLM

Variable Type Default Description
ANTHROPIC_API_KEY string "" Anthropic API key for Claude-type cron jobs and intake pipeline
OPENAI_API_KEY string "" OpenAI API key for ChatGPT/OpenAI provider and fallback
OPENAI_MODEL string gpt-4o Default model used by the OpenAI provider
LLM_FALLBACK boolean true If true, Claude primary calls auto-fallback to OpenAI when OPENAI_API_KEY is set

Messaging

Variable Type Default Description
SLACK_BOT_TOKEN string "" Slack bot token (xoxb-...) for sending messages
TELEGRAM_BOT_TOKEN string "" Telegram Bot API token from @BotFather
TELEGRAM_DEFAULT_CHAT_ID string "" Default Telegram chat ID for outbound notifications
DISCORD_BOT_TOKEN string "" Discord bot token for sending messages
SMTP_HOST string "" SMTP server hostname (e.g., smtp.gmail.com)
SMTP_USER string "" SMTP login username
SMTP_PASS string "" SMTP login password or app-specific password
SMTP_PORT integer 587 SMTP port (587 for STARTTLS, 465 for SSL)
SMTP_FROM string "" From address for outbound emails

Dashboard

Variable Type Default Description
DASHBOARD_USER string "" HTTP Basic auth username. Code default is empty string; .env.example uses admin as a template value. Must be set to a non-trivial value
DASHBOARD_PASS string "" HTTP Basic auth password. Must be set -- no insecure default
DASHBOARD_SECRET string "" JWT signing key for session tokens. Auto-generated at startup if left empty

Infrastructure

Variable Type Default Description
REDIS_URL string redis://localhost:6379/0 Redis connection URL for session storage and pubsub
BROWSER_ENGINE_URL string http://browser-engine:8300 URL for the Playwright browser engine service. Set automatically in Docker Compose; override for local dev

Vault

Variable Type Default Description
VAULT_IDENTITY_FILE string ~/.claude-superpowers/vault.key Path to the age identity (private key) file

SSH Fabric

Variable Type Default Description
SSH_CONNECT_TIMEOUT integer 10 SSH connection timeout in seconds
SSH_COMMAND_TIMEOUT integer 30 SSH command execution timeout in seconds
SSH_AUTO_ADD_HOST_KEYS boolean false If true, unknown SSH host keys are auto-accepted. Leave false for strict host key verification

Telegram Bot

Variable Type Default Description
ALLOWED_CHAT_IDS string "" Comma-separated list of allowed Telegram chat IDs. If empty, all messages are rejected
TELEGRAM_SESSION_TTL integer 3600 Conversation history TTL in seconds
TELEGRAM_MAX_HISTORY integer 20 Maximum messages retained per chat session
TELEGRAM_MAX_PER_CHAT integer 2 Maximum concurrent jobs per chat
TELEGRAM_MAX_GLOBAL integer 5 Maximum concurrent jobs across all chats
TELEGRAM_QUEUE_OVERFLOW integer 10 Maximum queued jobs before rejecting new requests
TELEGRAM_MODE string polling Transport mode: webhook or polling
TELEGRAM_WEBHOOK_URL string "" Public HTTPS URL for webhook endpoint (e.g., https://bot.example.com/webhook/telegram). Required when TELEGRAM_MODE=webhook
TELEGRAM_ADMIN_CHAT_ID string "" Admin chat ID for receiving access request notifications

Home Automation

Variable Type Default Description
HOME_ASSISTANT_URL string "" Home Assistant base URL (e.g., http://192.168.30.50:8123)
HOME_ASSISTANT_TOKEN string "" Home Assistant long-lived access token

Model Routing (Phase F)

Variable Type Default Description
CHAT_MODEL string claude Model/provider for interactive chat. Supports claude, openai, chatgpt (alias), or custom provider names
JOB_MODEL string claude Model/provider for background cron and workflow jobs. Supports claude, openai, chatgpt (alias), or custom provider names

Security (Phase G)

Variable Type Default Description
ENVIRONMENT string development Runtime environment: development or production. Setting production auto-enables FORCE_HTTPS
FORCE_HTTPS boolean false Enforce HTTPS for all connections. Automatically true when ENVIRONMENT=production
WEBHOOK_REQUIRE_SIGNATURE boolean true Fail-closed webhook signature validation. Set to false to disable (not recommended)
RATE_LIMIT_PER_IP integer 60 Maximum requests per minute per IP address
RATE_LIMIT_PER_USER integer 120 Maximum requests per minute per authenticated user
SLACK_SIGNING_SECRET string "" Slack HMAC signing secret for inbound webhook validation. Required for Slack webhooks
DISCORD_PUBLIC_KEY string "" Discord application public key (hex) for Ed25519 webhook verification. Required for Discord webhooks

Data Directory

Variable Type Default Description
SUPERPOWERS_DATA_DIR string ~/.claude-superpowers Override the base data directory
CLAUDE_SUPERPOWERS_DATA_DIR string ~/.claude-superpowers Legacy alias for SUPERPOWERS_DATA_DIR

Configuration Files

~/.claude-superpowers/hosts.yaml -- SSH Hosts

Defines hosts for the SSH fabric. Used by claw ssh commands.

hosts:
  - alias: proxmox              # Short name (required)
    hostname: 192.168.30.10     # IP or DNS name (required)
    port: 22                    # SSH port (default: 22)
    username: root              # Login user (default: root)
    auth: key                   # Auth method: key | password | agent (default: key)
    key_file: ~/.ssh/id_ed25519 # Private key path (for auth: key)
    groups:                     # Host groups (default: [all])
      - servers
      - hypervisors
    tags:                       # Arbitrary metadata (default: {})
      role: hypervisor

Field reference:

Field Required Default Type Description
alias yes -- string Short name used in CLI commands
hostname yes -- string IP address or DNS hostname
port no 22 integer SSH port
username no root string SSH login username
auth no key enum key, password, or agent
key_file no "" string Path to SSH private key
groups no ["all"] list[string] Group membership; all is auto-appended
tags no {} dict Key-value metadata

Vault keys used by SSH:

Vault Key Purpose
ssh:<alias>:password Password for password auth
ssh:<alias>:passphrase Key passphrase for key auth

~/.claude-superpowers/profiles.yaml -- Notification Profiles

Maps profile names to one or more channel+target pairs. Used by claw msg notify.

critical:
  - channel: slack
    target: "#alerts"
  - channel: telegram
    target: "123456789"

info:
  - channel: slack
    target: "#general"

daily-digest:
  - channel: email
    target: admin@example.com
  - channel: slack
    target: "#daily"

Entry fields:

Field Type Description
channel enum slack, telegram, discord, email
target string Channel-specific target: Slack channel, Telegram chat ID, Discord channel ID, email address

~/.claude-superpowers/watchers.yaml -- File Watcher Rules

Defines file monitoring rules for the watcher daemon. Used by claw watcher.

- name: torrent-mover           # Unique rule ID (required)
  path: ~/Downloads/*.torrent   # Directory or glob pattern (required)
  events: [created]             # Event types (default: [created])
  action: move                  # Action type (required)
  command: /mnt/data/watch/     # Action-specific target (required)
  args: {}                      # Extra arguments (default: {})
  enabled: true                 # Active flag (default: true)

Fields:

Field Required Default Type Description
name yes -- string Unique rule identifier
path yes -- string Directory or glob pattern to monitor
events no [created] list[enum] created, modified, deleted, moved
action yes -- enum shell, skill, workflow, move, copy
command yes -- string Command to run or target directory
args no {} dict Extra arguments (exposed as WATCHER_{KEY} env vars for shell actions)
enabled no true boolean Whether the rule is active

Action types:

Action command value Behavior
shell Shell command Runs command with WATCHER_FILE set to triggering path
skill Skill name Runs the named skill with file argument
workflow Workflow name Triggers the named workflow
move Target directory Moves the triggering file to the directory
copy Target directory Copies the triggering file to the directory

~/.claude-superpowers/rotation_policies.yaml -- Credential Rotation

Defines rotation policies for vault credentials.

ANTHROPIC_API_KEY:
  max_age_days: 90
  last_rotated: "2026-01-15T00:00:00+00:00"

SLACK_BOT_TOKEN:
  max_age_days: 180
  last_rotated: "2025-12-01T00:00:00+00:00"

Fields:

Field Default Type Description
max_age_days 90 integer Maximum days before credential is considered expired
last_rotated "" string (ISO 8601) Date when the credential was last rotated

Warning is raised at 80% of max_age_days. Expired status at 100%.


Skill Manifest Schema (skill.yaml)

Every skill directory must contain a skill.yaml manifest.

name: network-scan              # Unique kebab-case ID (required)
version: "0.1.0"                # Semver string (required)
description: "Scan subnets"     # One-line summary (required)
author: DreDay                  # Author name (required)
script: run.sh                  # Entry point, relative to skill dir (required)
slash_command: true             # Register as Claude Code slash command (default: false)
triggers: []                    # Event triggers (default: [])
dependencies: [nmap, jq]        # Required binaries on PATH (default: [])
permissions: [ssh, vault]       # Permission scopes (default: [])

Field reference:

Field Required Default Type Description
name yes -- string Kebab-case identifier, unique across all skills
version yes -- string Semantic version
description yes -- string Shown in claw skill list output
author yes -- string Author attribution
script yes -- string Entry point script relative to skill directory
slash_command no false boolean If true, claw skill sync creates a Claude Code slash command
triggers no [] list[string] Event triggers for cron integration
dependencies no [] list[string] Binaries checked via which before execution
permissions no [] list[string] Permission scopes for sandboxed execution

Permissions:

Permission Effect
vault Sandboxed execution receives full environment including vault secrets
ssh Declares SSH access intent
nmap Declares network scanning capability
(custom) Allowed; only vault is currently enforced

Without vault permission, sandboxed execution strips the environment to PATH, HOME, LANG, TERM only.


Workflow Schema (workflows/*.yaml)

Workflow definitions live in the workflows/ directory.

name: deploy                    # Workflow name (required)
description: "Pull, test, deploy, verify"  # Summary (required)
notify_profile: critical        # Notification profile to use on completion (optional)

steps:                          # Ordered list of steps (required)
  - name: git-pull              # Step name (required)
    type: shell                 # Step type (required)
    command: "git pull"         # Command/target (required)
    on_failure: abort           # Failure behavior (default: abort)
    timeout: 300                # Timeout in seconds (default: 300)
    condition: ""               # Run condition (default: "" = always)
    args: {}                    # Extra arguments (default: {})

rollback:                       # Rollback steps, run when on_failure=rollback triggers
  - name: undo-deploy
    type: shell
    command: "docker compose down"

Step types:

Type command value Description
shell Shell command Runs via subprocess.run()
claude_prompt Prompt text Runs through the job LLM provider (JOB_MODEL) with optional OpenAI fallback
skill Skill name Executes a registered skill
http URL HTTP request (POST by default, configurable via args.method)
approval_gate -- Pauses for human confirmation (auto-approved in dry-run)

Step options:

Field Default Type Description
on_failure abort enum abort (stop workflow), continue (proceed), rollback (run rollback steps)
timeout 300 integer Maximum seconds before step is killed
condition "" enum previous.ok, previous.failed, always, or "" (always)
args {} dict Extra arguments; shell steps receive these as WF_* env vars

Cron Job Configuration

Jobs are stored in ~/.claude-superpowers/cron/jobs.json:

{
  "network-scan-6h": {
    "type": "skill",
    "skill": "network-scan",
    "schedule": "every 6h",
    "enabled": true,
    "created": "2026-02-28T10:30:00Z"
  }
}

Schedule formats:

Format Example Description
Cron expression "0 */6 * * *" Standard 5-field cron: minute hour day month weekday
Interval "every 6h" Units: s, m, h, d. Combinable: every 2h30m
Daily-at "daily at 09:00" Once per day at the specified HH:MM

Job types:

Type Required Fields Description
shell command Subprocess execution
claude prompt LLM prompt via configured job provider (JOB_MODEL)
webhook url, optional body HTTP POST to a URL
skill skill, optional args Runs a registered skill

Output routing (optional output field):

Format Example Description
Direct "slack:#alerts" <channel>:<target>
Profile "critical" Uses a notification profile

Docker Compose Services

Defined in docker-compose.yaml:

Service Port Image Description
redis 6379 redis:7-alpine Session storage, message pubsub
msg-gateway 8100 Built from msg_gateway/Dockerfile HTTP API for sending messages
dashboard 8200 Built from dashboard/Dockerfile Web UI + REST API
browser-engine 8300 Built from browser_engine/Dockerfile Playwright + Chrome headless browser automation engine
telegram-bot -- Built from telegram-bot/Dockerfile Telegram bot service (no exposed port; connects outbound to Telegram API)

All services read from .env via env_file. The dashboard mounts ~/.claude-superpowers for access to jobs, memory, and audit data. The browser-engine mounts ~/.claude-superpowers/browser/profiles for session persistence.


Settings Dataclass

superpowers/config.py defines a Settings dataclass loaded by Settings.load(). The .env file is read with a minimal built-in parser (no external dependency). Only variables not already set in the shell environment are loaded from .env.

from superpowers.config import Settings

settings = Settings.load()
print(settings.redis_url)          # "redis://localhost:6379/0"
print(settings.data_dir)           # Path("~/.claude-superpowers")

Call settings.ensure_dirs() to create all required subdirectories under data_dir.