# Honcho Configuration File # This file demonstrates all available configuration options. # Copy this to config.toml and modify as needed. # Environment variables will override these values. # Application-level settings [app] LOG_LEVEL = "INFO" SESSION_OBSERVERS_LIMIT = 10 GET_CONTEXT_MAX_TOKENS = 100000 MAX_FILE_SIZE = 5242880 # 5MB MAX_MESSAGE_SIZE = 25000 # Characters EMBED_MESSAGES = true # LANGFUSE_HOST = "https://api.langfuse.com" # LANGFUSE_PUBLIC_KEY = "your-public-key-here" # COLLECT_METRICS_LOCAL = false # LOCAL_METRICS_FILE = "metrics.jsonl" # REASONING_TRACES_FILE = "traces.jsonl" # Path to JSONL file for reasoning traces NAMESPACE = "honcho" # Database settings [db] CONNECTION_URI = "postgresql+psycopg://postgres:postgres@localhost:5432/postgres" SCHEMA = "public" POOL_CLASS = "default" POOL_PRE_PING = true POOL_SIZE = 10 MAX_OVERFLOW = 20 POOL_TIMEOUT = 30 # seconds POOL_RECYCLE = 300 # seconds POOL_USE_LIFO = true SQL_DEBUG = false TRACING = false # Authentication settings [auth] USE_AUTH = false JWT_SECRET = "your-secret-key-here" # Must be set if USE_AUTH is true # Sentry settings [sentry] ENABLED = false DSN = "" RELEASE = "" ENVIRONMENT = "development" TRACES_SAMPLE_RATE = 0.1 PROFILES_SAMPLE_RATE = 0.1 # LLM settings [llm] DEFAULT_MAX_TOKENS = 2500 MAX_TOOL_OUTPUT_CHARS = 10000 # Max chars for tool output (~2500 tokens) MAX_MESSAGE_CONTENT_CHARS = 2000 # Max chars per message in tool results # API Keys for LLM providers (set the ones you need) # Supported transports: openai, anthropic, gemini # Base URLs are set per-module via model_config.overrides.base_url # Built-in text-generation defaults use openai / gpt-5.4-mini. # Embeddings default to openai / text-embedding-3-small. OPENAI_API_KEY = "your-api-key-here" # ANTHROPIC_API_KEY = "your-api-key" # GEMINI_API_KEY = "your-api-key" # Embedding settings [embedding] VECTOR_DIMENSIONS = 1536 MAX_INPUT_TOKENS = 8192 MAX_TOKENS_PER_REQUEST = 300000 [embedding.model_config] transport = "openai" model = "text-embedding-3-small" # Optional module-level endpoint overrides # [embedding.model_config.overrides] # base_url = "https://embedding-proxy.internal.example/v1" # api_key_env = "EMBEDDING_CUSTOM_API_KEY" # Deriver settings [deriver] ENABLED = true WORKERS = 1 POLLING_SLEEP_INTERVAL_SECONDS = 1.0 STALE_SESSION_TIMEOUT_MINUTES = 5 # QUEUE_ERROR_RETENTION_SECONDS = 2592000 # 30 days DEDUPLICATE = true LOG_OBSERVATIONS = false MAX_INPUT_TOKENS = 23000 WORKING_REPRESENTATION_MAX_OBSERVATIONS = 100 REPRESENTATION_BATCH_MAX_TOKENS = 1024 FLUSH_ENABLED = false # Bypass batch token threshold, process work immediately [deriver.model_config] transport = "openai" model = "gpt-5.4-mini" # temperature = 0.0 # thinking_effort = "minimal" # thinking_budget_tokens = 1024 # max_output_tokens = 4096 # Optional module-level endpoint overrides # transport = "openai" # model = "my-local-model" # [deriver.model_config.overrides] # base_url = "https://llm.internal.example/v1" # api_key_env = "DERIVER_CUSTOM_API_KEY" # Optional fallback model # [deriver.model_config.fallback] # transport = "anthropic" # model = "claude-haiku-4-5" # [deriver.model_config.fallback.overrides] # base_url = "https://llm-backup.internal.example/v1" # api_key_env = "DERIVER_CUSTOM_BACKUP_API_KEY" # [deriver.model_config.overrides.provider_params] # verbosity = "low" # Peer card settings [peer_card] ENABLED = true # Dialectic settings [dialectic] MAX_OUTPUT_TOKENS = 8192 MAX_INPUT_TOKENS = 100000 HISTORY_TOKEN_LIMIT = 8192 SESSION_HISTORY_MAX_TOKENS = 4096 # Per-level settings for reasoning levels # MAX_OUTPUT_TOKENS is optional per level; if not set, uses global MAX_OUTPUT_TOKENS [dialectic.levels.minimal] MAX_TOOL_ITERATIONS = 1 MAX_OUTPUT_TOKENS = 250 TOOL_CHOICE = "auto" [dialectic.levels.minimal.model_config] transport = "openai" model = "gpt-5.4-mini" [dialectic.levels.low] MAX_TOOL_ITERATIONS = 5 TOOL_CHOICE = "auto" [dialectic.levels.low.model_config] transport = "openai" model = "gpt-5.4-mini" [dialectic.levels.medium] MAX_TOOL_ITERATIONS = 2 [dialectic.levels.medium.model_config] transport = "openai" model = "gpt-5.4-mini" [dialectic.levels.high] MAX_TOOL_ITERATIONS = 4 [dialectic.levels.high.model_config] transport = "openai" model = "gpt-5.4-mini" [dialectic.levels.max] MAX_TOOL_ITERATIONS = 10 [dialectic.levels.max.model_config] transport = "openai" model = "gpt-5.4-mini" # [dialectic.levels.max.model_config.fallback] # transport = "gemini" # model = "gemini-2.5-pro" # Summary settings [summary] ENABLED = true MESSAGES_PER_SHORT_SUMMARY = 20 MESSAGES_PER_LONG_SUMMARY = 60 MAX_TOKENS_SHORT = 1000 MAX_TOKENS_LONG = 4000 [summary.model_config] transport = "openai" model = "gpt-5.4-mini" # thinking_effort = "minimal" # thinking_budget_tokens = 1024 # [summary.model_config.fallback] # transport = "anthropic" # model = "claude-haiku-4-5" # Dream settings [dream] ENABLED = true DOCUMENT_THRESHOLD = 50 IDLE_TIMEOUT_MINUTES = 60 MIN_HOURS_BETWEEN_DREAMS = 8 ENABLED_TYPES = ["omni"] MAX_TOOL_ITERATIONS = 20 HISTORY_TOKEN_LIMIT = 16384 [dream.deduction_model_config] transport = "openai" model = "gpt-5.4-mini" [dream.induction_model_config] transport = "openai" model = "gpt-5.4-mini" # Surprisal-based sampling subsystem [dream.surprisal] ENABLED = false TREE_TYPE = "kdtree" # Options: kdtree, balltree, rptree, covertree, lsh, graph, prototype TREE_K = 5 # k for kNN-based trees SAMPLING_STRATEGY = "recent" # Options: recent, random, all SAMPLE_SIZE = 200 TOP_PERCENT_SURPRISAL = 0.10 # Top 10% of observations MIN_HIGH_SURPRISAL_FOR_REPLACE = 10 INCLUDE_LEVELS = ["explicit", "deductive"] # Webhook settings [webhook] SECRET = "" MAX_WORKSPACE_LIMIT = 10 # Prometheus metrics settings (pull-based metrics) [metrics] ENABLED = false # NAMESPACE = "honcho" # Inherits from app.NAMESPACE if not set # CloudEvents telemetry settings (analytics events) [telemetry] ENABLED = false # ENDPOINT = "https://telemetry.honcho.dev/v1/events" # HEADERS = '{"Authorization": "Bearer your-token"}' # JSON string for auth headers BATCH_SIZE = 100 FLUSH_INTERVAL_SECONDS = 1.0 FLUSH_THRESHOLD = 50 MAX_RETRIES = 3 MAX_BUFFER_SIZE = 10000 # NAMESPACE = "honcho" # Inherits from app.NAMESPACE if not set # Cache settings [cache] ENABLED = false URL = "redis://localhost:6379/0?suppress=true" # NAMESPACE = "honcho" # Inherits from app.NAMESPACE if not set DEFAULT_TTL_SECONDS = 300 DEFAULT_LOCK_TTL_SECONDS = 5 # Vector store settings [vector_store] # Vector store type: "pgvector", "turbopuffer", or "lancedb" TYPE = "pgvector" # Migration flag: set to true when migration from pgvector is complete MIGRATED = false NAMESPACE = "honcho" # This should match embedding.vector_dimensions. pgvector and dual-write mode # currently still require 1536 until a schema migration lands. DIMENSIONS = 1536 # TURBOPUFFER_API_KEY = "your-turbopuffer-api-key" # TURBOPUFFER_REGION = "us-east-1" LANCEDB_PATH = "./lancedb_data" RECONCILIATION_INTERVAL_SECONDS = 300