Configuration Reference
Outpost is configured through environment variables. Copy .env.example to
.env and customize the values below.
Core Settings
| Variable | Description | Default |
| DATABASE_URL | PostgreSQL connection string | — |
| NODE_ENV | Environment: development or production | development |
| PORT | Web app port | 3000 |
| LOG_LEVEL | Logging verbosity: debug, info, warn, error | info |
AI Configuration
| Variable | Description | Default |
| ANTHROPIC_API_KEY | Anthropic API key for Claude | — |
| AI_MODEL | Claude model to use for triage and responses | claude-sonnet-4-6 |
| PATHFINDER_MCP_URL | Pathfinder MCP server URL for knowledge base search | https://mcp.copilotkit.ai |
Discord Bot
| Variable | Description | Default |
| DISCORD_BOT_TOKEN | Discord bot token from the Developer Portal | — |
| DISCORD_CLIENT_ID | Application ID for slash command registration | — |
| DISCORD_GUILD_ID | Server ID (for guild-scoped commands in development) | — |
| DISCORD_SUPPORT_CHANNEL | Channel ID where support threads are created | — |
GitHub App
| Variable | Description | Default |
| GITHUB_APP_ID | GitHub App ID | — |
| GITHUB_PRIVATE_KEY | PEM-encoded private key (or path to .pem file) | — |
| GITHUB_WEBHOOK_SECRET | Webhook secret for signature verification | — |
| GITHUB_APP_PORT | Port for the webhook receiver | 3001 |
Slack Bot
| Variable | Description | Default |
| SLACK_BOT_TOKEN | Bot User OAuth Token (xoxb-...) | — |
| SLACK_APP_TOKEN | App-Level Token for Socket Mode (xapp-...) | — |
| SLACK_SIGNING_SECRET | Signing secret for verifying webhook requests | — |
| MONITORED_CHANNEL_IDS | Comma-separated Slack channel IDs to monitor | — (all channels) |
| TEAM_MEMBER_IDS | Comma-separated Slack user IDs for team members (fast-path detection) | — |
Teams Bot
| Variable | Description | Default |
| TEAMS_APP_ID | Microsoft App ID from Azure Bot registration | — |
| TEAMS_APP_PASSWORD | Microsoft App Password (client secret) | — |
| TEAMS_TENANT_ID | Azure AD Tenant ID (optional; omit for multi-tenant) | — |
| HEALTH_PORT | Port for the health check endpoint | 3003 |
Linear Integration
| Variable | Description | Default |
| LINEAR_API_KEY | Linear API key for reading and writing issues | — |
| LINEAR_WEBHOOK_SECRET | Webhook signing secret for verifying Linear payloads | — |
| LINEAR_TEAM_ID | Linear team ID to sync issues with | — |
See also: The Linear Integration page covers
full setup instructions, status mapping, and identity mapping configuration.
HubSpot CRM
| Variable | Description | Default |
| HUBSPOT_API_KEY | HubSpot private app access token (scopes: crm.objects.companies.read, crm.objects.owners.read) | — |
Authentication
| Variable | Description | Default |
| AUTH_PROVIDER | Authentication provider: credentials, github, or oidc | credentials |
| NEXT_PUBLIC_AUTH_PROVIDER | Client-side auth provider hint (must match AUTH_PROVIDER) | credentials |
| GITHUB_CLIENT_ID | GitHub OAuth App client ID (required when AUTH_PROVIDER=github) | — |
| GITHUB_CLIENT_SECRET | GitHub OAuth App client secret (required when AUTH_PROVIDER=github) | — |
| OIDC_ISSUER | OIDC provider issuer URL (required when AUTH_PROVIDER=oidc) | — |
| OIDC_CLIENT_ID | OIDC client ID (required when AUTH_PROVIDER=oidc) | — |
| OIDC_CLIENT_SECRET | OIDC client secret (required when AUTH_PROVIDER=oidc) | — |
Pluggable auth: Outpost defaults to credentials-based authentication
(email + password). To use GitHub OAuth or an OIDC provider instead, set both
AUTH_PROVIDER and NEXT_PUBLIC_AUTH_PROVIDER to the same value,
then supply the corresponding client credentials above.
Email (Resend)
| Variable | Description | Default |
| RESEND_API_KEY | API key for Resend email delivery (used for team invitations, notifications, and template-based emails) | — |
| EMAIL_FROM | Sender address for outgoing emails | [email protected] |
Setup (First Run)
On first launch, Outpost detects an empty database and redirects to the setup wizard at
/setup. The wizard creates the organization record and the first admin user
account in three steps: organization details, admin credentials, and launch. No environment
variables are required for the setup flow — it works out of the box with credentials
auth. The database schema is automatically pushed on startup if needed.
SLA Targets
SLA targets are configured per priority level in the database through the admin dashboard.
Default values when seeding:
| Priority | First Response | Resolution |
| Critical | 15 minutes | 4 hours |
| High | 1 hour | 24 hours |
| Medium | 4 hours | 72 hours |
| Low | 24 hours | 1 week |
Note: SLA targets can also be overridden per-account for enterprise
customers with custom support agreements.
Routing Rules
Routing rules determine which agent or team handles a ticket. Rules are evaluated in
priority order and can match on:
- Source channel — Discord, Slack, Teams, GitHub, or web
- Priority level — critical, high, medium, low
- Tags/labels — keyword-based matching
- Account — specific customer organizations
- Content patterns — regex matching on ticket content
Routing rules are managed through the admin dashboard under
Settings → Routing.
Job Queue
| Variable | Description | Default |
| QUEUE_CONCURRENCY | Max concurrent job workers | 5 |
| QUEUE_POLL_INTERVAL | How often to poll for new jobs (ms) | 1000 |
| QUEUE_MAX_RETRIES | Max retry attempts before dead-letter | 3 |
| QUEUE_RETRY_DELAY | Base delay between retries (ms, exponential backoff) | 5000 |