Skip to content

Configuration Reference

Complete reference of all configuration keys available in Lango. Configuration is stored in encrypted profiles managed by lango config commands. Use lango onboard for guided setup or lango settings for the full interactive editor.

All configuration is managed through the lango settings TUI (interactive terminal editor) or by importing a JSON file with lango config import. Lango does not use YAML configuration files. The JSON examples below show the structure expected by lango config import and reflect what lango settings edits behind the scenes.

See Configuration Basics for an introduction to the configuration system.


Server

Gateway server settings for HTTP API and WebSocket connections.

Settings: lango settings → Server

{
  "server": {
    "host": "localhost",
    "port": 18789,
    "httpEnabled": true,
    "wsEnabled": true,
    "allowedOrigins": []
  }
}
Key Type Default Description
server.host string localhost Host address to bind to
server.port int 18789 Port to listen on
server.httpEnabled bool true Enable HTTP API endpoints
server.wsEnabled bool true Enable WebSocket server
server.allowedOrigins []string [] Allowed origins for CORS. Empty = same-origin only

Agent

LLM agent settings including model selection, prompt configuration, and timeouts.

Settings: lango settings → Agent

{
  "agent": {
    "provider": "anthropic",
    "model": "claude-sonnet-4-20250514",
    "fallbackProvider": "",
    "fallbackModel": "",
    "maxTokens": 4096,
    "temperature": 0.7,
    "systemPromptPath": "",
    "promptsDir": "",
    "requestTimeout": "5m",
    "toolTimeout": "2m",
    "multiAgent": false
  }
}
Key Type Default Description
agent.provider string anthropic Primary AI provider ID (references providers.<id>)
agent.model string Model ID to use (e.g., claude-sonnet-4-20250514)
agent.fallbackProvider string Fallback provider ID when primary fails
agent.fallbackModel string Fallback model ID
agent.maxTokens int 4096 Maximum tokens per response
agent.temperature float64 0.7 Sampling temperature (0.0 - 1.0)
agent.systemPromptPath string Path to a custom system prompt file
agent.promptsDir string Directory containing .md files for system prompts
agent.requestTimeout duration 5m Maximum duration for a single AI provider request
agent.toolTimeout duration 2m Maximum duration for a single tool call
agent.multiAgent bool false Enable multi-agent orchestration

Providers

Named AI provider configurations. Referenced by other sections via provider ID.

Settings: lango settings → Providers

{
  "providers": {
    "my-anthropic": {
      "type": "anthropic",
      "apiKey": "${ANTHROPIC_API_KEY}"
    },
    "my-openai": {
      "type": "openai",
      "apiKey": "${OPENAI_API_KEY}",
      "baseUrl": "https://api.openai.com/v1"
    },
    "local-ollama": {
      "type": "ollama",
      "baseUrl": "http://localhost:11434/v1"
    }
  }
}
Key Type Default Description
providers.<id>.type string Provider type: anthropic, openai, google, gemini, ollama
providers.<id>.apiKey string API key (supports ${ENV_VAR} substitution)
providers.<id>.baseUrl string Base URL for OpenAI-compatible or self-hosted providers

Logging

Settings: lango settings → Logging

{
  "logging": {
    "level": "info",
    "format": "console"
  }
}
Key Type Default Description
logging.level string info Log level: debug, info, warn, error
logging.format string console Output format: console, json

Session

Session storage and lifecycle settings.

Settings: lango settings → Session

{
  "session": {
    "databasePath": "~/.lango/data.db",
    "ttl": "24h",
    "maxHistoryTurns": 100
  }
}
Key Type Default Description
session.databasePath string ~/.lango/data.db Path to the SQLite session database
session.ttl duration Session time-to-live before expiration (empty = no expiration)
session.maxHistoryTurns int Maximum conversation turns to retain per session

Security

Signer

Key Type Default Description
security.signer.provider string local Signer provider (local)

Interceptor

The security interceptor controls tool execution approval and PII protection. See Tool Approval and PII Redaction.

Settings: lango settings → Security

{
  "security": {
    "interceptor": {
      "enabled": true,
      "redactPii": false,
      "approvalPolicy": "dangerous",
      "approvalTimeoutSec": 30,
      "notifyChannel": "",
      "sensitiveTools": [],
      "exemptTools": []
    }
  }
}
Key Type Default Description
security.interceptor.enabled bool true Enable the security interceptor
security.interceptor.redactPii bool false Enable PII redaction in messages
security.interceptor.approvalPolicy string dangerous Tool approval policy: always, dangerous, never
security.interceptor.approvalTimeoutSec int 30 Timeout for approval requests (seconds)
security.interceptor.notifyChannel string Channel to send approval notifications
security.interceptor.sensitiveTools []string Tools that always require approval
security.interceptor.exemptTools []string Tools exempt from approval regardless of policy

PII Detection

Settings: lango settings → Security

{
  "security": {
    "interceptor": {
      "piiRegexPatterns": [],
      "piiDisabledPatterns": [],
      "piiCustomPatterns": []
    }
  }
}
Key Type Default Description
security.interceptor.piiRegexPatterns []string Built-in PII regex pattern names to enable
security.interceptor.piiDisabledPatterns []string Built-in PII patterns to disable
security.interceptor.piiCustomPatterns []object Custom PII regex patterns (name + regex pairs)

Presidio Integration

Settings: lango settings → Security

{
  "security": {
    "interceptor": {
      "presidio": {
        "enabled": false,
        "url": "http://localhost:5002",
        "scoreThreshold": 0.7,
        "language": "en"
      }
    }
  }
}
Key Type Default Description
security.interceptor.presidio.enabled bool false Enable Microsoft Presidio for advanced PII detection
security.interceptor.presidio.url string Presidio analyzer service URL
security.interceptor.presidio.scoreThreshold float64 0.7 Minimum confidence score (0.0 - 1.0)
security.interceptor.presidio.language string en Language for PII analysis

Auth

Configure OAuth2/OIDC authentication providers for the gateway API.

Settings: lango settings → Auth

{
  "auth": {
    "providers": {
      "google": {
        "issuerUrl": "https://accounts.google.com",
        "clientId": "${GOOGLE_CLIENT_ID}",
        "clientSecret": "${GOOGLE_CLIENT_SECRET}",
        "redirectUrl": "http://localhost:18789/auth/callback",
        "scopes": ["openid", "email", "profile"]
      }
    }
  }
}
Key Type Default Description
auth.providers.<id>.issuerUrl string OIDC issuer URL
auth.providers.<id>.clientId string OAuth2 client ID
auth.providers.<id>.clientSecret string OAuth2 client secret
auth.providers.<id>.redirectUrl string OAuth2 redirect URL
auth.providers.<id>.scopes []string OAuth2 scopes to request

Channels

Communication channel configurations.

Telegram

Key Type Default Description
channels.telegram.enabled bool false Enable Telegram channel
channels.telegram.botToken string Bot token from BotFather
channels.telegram.allowlist []int64 [] Allowed user/group IDs (empty = allow all)

Discord

Key Type Default Description
channels.discord.enabled bool false Enable Discord channel
channels.discord.botToken string Bot token from Discord Developer Portal
channels.discord.applicationId string Application ID for slash commands
channels.discord.allowedGuilds []string [] Allowed guild IDs (empty = allow all)

Slack

Key Type Default Description
channels.slack.enabled bool false Enable Slack channel
channels.slack.botToken string Bot OAuth token
channels.slack.appToken string App-level token for Socket Mode
channels.slack.signingSecret string Signing secret for request verification

Tools

Exec Tool

Key Type Default Description
tools.exec.defaultTimeout duration Default timeout for shell command execution
tools.exec.allowBackground bool true Allow background command execution
tools.exec.workDir string Working directory for command execution

Filesystem Tool

Key Type Default Description
tools.filesystem.maxReadSize int Maximum file read size in bytes
tools.filesystem.allowedPaths []string Allowed filesystem paths (empty = all)

Browser Tool

Key Type Default Description
tools.browser.enabled bool false Enable browser automation tool
tools.browser.headless bool true Run browser in headless mode
tools.browser.sessionTimeout duration 5m Browser session timeout

Knowledge

Key Type Default Description
knowledge.enabled bool false Enable the knowledge system
knowledge.maxContextPerLayer int 5 Maximum context items per knowledge layer

Skill

Key Type Default Description
skill.enabled bool false Enable the skill system
skill.skillsDir string ~/.lango/skills Directory for skill files
skill.allowImport bool false Allow importing skills from external sources
skill.maxBulkImport int 50 Maximum skills per bulk import
skill.importConcurrency int 5 Concurrent import workers
skill.importTimeout duration 2m Timeout per skill import

Observational Memory

Settings: lango settings → Observational Memory

{
  "observationalMemory": {
    "enabled": false,
    "provider": "",
    "model": "",
    "messageTokenThreshold": 1000,
    "observationTokenThreshold": 2000,
    "maxMessageTokenBudget": 8000,
    "maxReflectionsInContext": 5,
    "maxObservationsInContext": 20
  }
}
Key Type Default Description
observationalMemory.enabled bool false Enable observational memory
observationalMemory.provider string AI provider for memory extraction (empty = agent default)
observationalMemory.model string Model for memory extraction (empty = agent default)
observationalMemory.messageTokenThreshold int 1000 Minimum tokens in recent messages before triggering observation
observationalMemory.observationTokenThreshold int 2000 Token threshold to trigger reflection
observationalMemory.maxMessageTokenBudget int 8000 Max tokens to include from message history
observationalMemory.maxReflectionsInContext int 5 Max reflections injected into LLM context
observationalMemory.maxObservationsInContext int 20 Max observations injected into LLM context

Embedding & RAG

Settings: lango settings → Embedding & RAG

{
  "embedding": {
    "providerID": "my-openai",
    "provider": "",
    "model": "text-embedding-3-small",
    "dimensions": 1536,
    "local": {
      "baseUrl": "http://localhost:11434/v1",
      "model": ""
    },
    "rag": {
      "enabled": false,
      "maxResults": 5,
      "collections": []
    }
  }
}
Key Type Default Description
embedding.providerID string References a key in the providers map
embedding.provider string Embedding provider type (set to local for Ollama)
embedding.model string Embedding model identifier
embedding.dimensions int Embedding vector dimensionality
embedding.local.baseUrl string Local embedding service URL (e.g., Ollama)
embedding.local.model string Model override for local provider
embedding.rag.enabled bool false Enable RAG retrieval
embedding.rag.maxResults int Maximum results per RAG query
embedding.rag.collections []string Collection names to search (empty = all)

Graph

Settings: lango settings → Graph Store

{
  "graph": {
    "enabled": false,
    "backend": "bolt",
    "databasePath": "~/.lango/graph.db",
    "maxTraversalDepth": 2,
    "maxExpansionResults": 10
  }
}
Key Type Default Description
graph.enabled bool false Enable the knowledge graph
graph.backend string bolt Graph storage backend (bolt)
graph.databasePath string Path to the graph database file
graph.maxTraversalDepth int 2 Max depth for graph traversal in Graph RAG
graph.maxExpansionResults int 10 Max results from graph expansion

A2A Protocol

Experimental

The A2A protocol is experimental. See A2A Protocol.

Settings: lango settings → A2A Protocol

{
  "a2a": {
    "enabled": false,
    "baseUrl": "",
    "agentName": "",
    "agentDescription": "",
    "remoteAgents": [
      {
        "name": "code-reviewer",
        "agentCardUrl": "https://reviewer.example.com/.well-known/agent.json"
      }
    ]
  }
}
Key Type Default Description
a2a.enabled bool false Enable A2A protocol support
a2a.baseUrl string External URL where this agent is reachable
a2a.agentName string Name advertised in the Agent Card
a2a.agentDescription string Description in the Agent Card
a2a.remoteAgents []object List of remote agents to connect to

Each remote agent entry:

Key Type Description
a2a.remoteAgents[].name string Display name for the remote agent
a2a.remoteAgents[].agentCardUrl string URL to the remote agent's agent card

Payment

Experimental

The payment system is experimental. See Payments.

Settings: lango settings → Payment

{
  "payment": {
    "enabled": false,
    "walletProvider": "local",
    "network": {
      "chainId": 84532,
      "rpcUrl": "https://sepolia.base.org",
      "usdcContract": "0x036CbD53842c5426634e7929541eC2318f3dCF7e"
    },
    "limits": {
      "maxPerTx": "1.00",
      "maxDaily": "10.00",
      "autoApproveBelow": ""
    },
    "x402": {
      "autoIntercept": false,
      "maxAutoPayAmount": ""
    }
  }
}
Key Type Default Description
payment.enabled bool false Enable blockchain payment features
payment.walletProvider string local Wallet backend: local, rpc, composite
payment.network.chainId int 84532 EVM chain ID (84532 = Base Sepolia)
payment.network.rpcUrl string JSON-RPC endpoint for the blockchain network
payment.network.usdcContract string USDC token contract address
payment.limits.maxPerTx string 1.00 Maximum USDC per transaction
payment.limits.maxDaily string 10.00 Maximum daily USDC spending
payment.limits.autoApproveBelow string Auto-approve payments below this amount
payment.x402.autoIntercept bool false Enable X402 auto-interception for paid APIs
payment.x402.maxAutoPayAmount string Maximum auto-pay amount for X402 requests

Cron

See Cron Scheduling for usage details and CLI reference.

Settings: lango settings → Cron Scheduler

{
  "cron": {
    "enabled": false,
    "timezone": "UTC",
    "maxConcurrentJobs": 5,
    "defaultSessionMode": "isolated",
    "historyRetention": "720h",
    "defaultDeliverTo": []
  }
}
Key Type Default Description
cron.enabled bool false Enable the cron scheduling system
cron.timezone string UTC Default timezone for cron expressions
cron.maxConcurrentJobs int 5 Maximum concurrently executing jobs
cron.defaultSessionMode string isolated Default session mode: isolated or main
cron.historyRetention duration 720h How long to retain execution history (30 days)
cron.defaultDeliverTo []string [] Default delivery channels for job results

Background

Experimental

Background tasks are experimental. See Background Tasks.

Settings: lango settings → Background Tasks

{
  "background": {
    "enabled": false,
    "yieldMs": 30000,
    "maxConcurrentTasks": 3,
    "defaultDeliverTo": []
  }
}
Key Type Default Description
background.enabled bool false Enable the background task system
background.yieldMs int 30000 Auto-yield threshold in milliseconds
background.maxConcurrentTasks int 3 Maximum concurrently running tasks
background.defaultDeliverTo []string [] Default delivery channels for task results

Workflow

Experimental

The workflow engine is experimental. See Workflow Engine and CLI reference.

Settings: lango settings → Workflow Engine

{
  "workflow": {
    "enabled": false,
    "maxConcurrentSteps": 4,
    "defaultTimeout": "10m",
    "stateDir": "~/.lango/workflows/",
    "defaultDeliverTo": []
  }
}
Key Type Default Description
workflow.enabled bool false Enable the workflow engine
workflow.maxConcurrentSteps int 4 Maximum steps running in parallel
workflow.defaultTimeout duration 10m Default timeout per workflow step
workflow.stateDir string ~/.lango/workflows/ Directory for workflow state files
workflow.defaultDeliverTo []string [] Default delivery channels for workflow results

Librarian

Experimental

The Proactive Librarian is experimental. See Proactive Librarian.

Settings: lango settings → Librarian

{
  "librarian": {
    "enabled": false,
    "observationThreshold": 2,
    "inquiryCooldownTurns": 3,
    "maxPendingInquiries": 2,
    "autoSaveConfidence": "high",
    "provider": "",
    "model": ""
  }
}
Key Type Default Description
librarian.enabled bool false Enable the Proactive Librarian
librarian.observationThreshold int 2 Observations needed before triggering inquiry
librarian.inquiryCooldownTurns int 3 Minimum turns between inquiries
librarian.maxPendingInquiries int 2 Maximum pending inquiries at once
librarian.autoSaveConfidence string high Confidence level for auto-saving: low, medium, high
librarian.provider string AI provider for librarian (empty = agent default)
librarian.model string Model for librarian (empty = agent default)

Environment Variable Substitution

String configuration values support ${ENV_VAR} syntax for environment variable substitution. This is useful for sensitive values like API keys and tokens:

{
  "providers": {
    "my-provider": {
      "type": "anthropic",
      "apiKey": "${ANTHROPIC_API_KEY}"
    }
  },
  "channels": {
    "telegram": {
      "botToken": "${TELEGRAM_BOT_TOKEN}"
    }
  }
}