# ByteClaw configuration. Secrets can come from env instead: # BYTECLAW_AUTH_TOKEN, BYTECLAW_LLM_API_KEY, BYTECLAW_LLM_BASE_URL, BYTECLAW_LLM_MODEL, # BYTECLAW_LISTEN, BYTECLAW_DATA_DIR, BYTECLAW_WORKSPACE, BYTECLAW_ALLOWED_ORIGINS (comma separated) listen: 127.0.0.1:8787 # bind to 0.0.0.0 only behind TLS (reverse proxy) or in a trusted LAN auth_token: "" # required, >= 16 chars. Generate: openssl rand -hex 32 allowed_origins: [] # browser origins allowed besides same host; "*" only if you really mean it data_dir: ./data workspace: "" # default: /workspace; file tools cannot leave it llm: # Preset: openai | openrouter | ollama | dahl | gonkarouter | custom (env: BYTECLAW_LLM_PROVIDER) # Presets fill base_url/model if empty; api_key falls back to OPENAI_API_KEY, OPENROUTER_API_KEY, # DAHL_API_KEY or GONKAROUTER_API_KEY. "custom" requires base_url and model. provider: openai base_url: "" # override, e.g. https://inference.dahl.global/v1 api_key: "" model: "" # e.g. MiniMaxAI/MiniMax-M2.7, zai-org/GLM-5.3-Flash timeout_sec: 120 temperature: 0.7 agent: system_prompt: "You are ByteClaw, a concise and helpful self-hosted assistant. Use tools when they help." max_iterations: 8 history_limit: 50 tools: web_fetch: enabled: true max_bytes: 524288 timeout_sec: 15 allow_private: false # true allows localhost/LAN targets (SSRF risk) files_enabled: true file_max_bytes: 1048576