mirror of
https://github.com/Gitlawb/openclaude.git
synced 2026-08-24 10:14:19 -05:00
* feat: add LongCat as first-class OpenAI-compatible provider
Register LongCat-2.0 in the integration catalog with LONGCAT_API_KEY auth,
/provider preset support, and zai-compatible thinking controls that emit
thinking:{type} while stripping unverified reasoning_effort fields.
* fix: complete LongCat provider integration
* fix: complete LongCat provider integration
* test: isolate LongCat provider environment
* test: isolate LongCat environment in provider tests
* test: isolate LongCat environment in route tests
* test: isolate LongCat environment in utility tests
* fix: harden LongCat provider integration
* fix: complete LongCat transport support
* fix: keep LongCat requests text-only
* fix: normalize LongCat endpoint URLs
* fix: reject malformed LongCat base URLs
* fix: harden LongCat text-only transport
* fix: scope LongCat transport hardening
* fix: scope generic OpenAI credentials by route
* fix: preserve required provider API formats
* fix: align LongCat with documented tool support
* fix: harden LongCat environment routing
* fix: enable LongCat tool calling
* Revert "fix: enable LongCat tool calling"
This reverts commit d8b1802ed1.
590 lines
26 KiB
Bash
590 lines
26 KiB
Bash
# =============================================================================
|
|
# OpenClaude Environment Configuration
|
|
# =============================================================================
|
|
# If you want a file-based workflow, copy this file to .env and fill in your values:
|
|
# cp .env.example .env
|
|
#
|
|
# OpenClaude does not automatically load .env files to protect you from
|
|
# accidental key exposure in untrusted repositories.
|
|
#
|
|
# To load this file, explicitly pass it to OpenClaude:
|
|
# openclaude --provider-env-file .env
|
|
#
|
|
# The explicit loader accepts OpenClaude provider/setup variables and rejects
|
|
# process-control variables such as PATH, NODE_OPTIONS, and LD_PRELOAD.
|
|
# Export shell/runtime/debug variables from your shell or launcher instead.
|
|
#
|
|
# Only set the variables for the provider you want to use.
|
|
# All other sections can be left commented out.
|
|
# =============================================================================
|
|
|
|
# =============================================================================
|
|
# SYSTEM-WIDE SETUP (OPTIONAL)
|
|
# =============================================================================
|
|
# Instead of using a .env file per project, you can set these variables
|
|
# system-wide so OpenClaude works from any directory on your machine.
|
|
#
|
|
# STEP 1: Pick your provider variables from the list below.
|
|
# STEP 2: Set them using the method for your OS (see further down).
|
|
#
|
|
# ── Provider variables ───────────────────────────────────────────────
|
|
#
|
|
# Option 1 — Anthropic:
|
|
# ANTHROPIC_API_KEY=sk-ant-your-key-here
|
|
# ANTHROPIC_MODEL=claude-sonnet-4-5 (optional)
|
|
# ANTHROPIC_BASE_URL=https://api.anthropic.com (optional)
|
|
# ANTHROPIC_AUTH_TOKEN=your-provider-token (custom Bearer endpoints)
|
|
#
|
|
# Option 1b — Custom Anthropic-compatible API (Bearer auth):
|
|
# ANTHROPIC_BASE_URL=https://your-provider.example
|
|
# ANTHROPIC_AUTH_TOKEN=your-provider-token
|
|
# ANTHROPIC_MODEL=your-model-name
|
|
#
|
|
# Option 2 — OpenAI:
|
|
# CLAUDE_CODE_USE_OPENAI=1
|
|
# OPENAI_API_KEY=sk-your-key-here
|
|
# OPENAI_MODEL=gpt-4o
|
|
# OPENAI_BASE_URL=https://api.openai.com/v1 (optional)
|
|
#
|
|
# Option 11 — NEAR AI (unified gateway: Claude, GPT, Gemini + TEE models):
|
|
# NEARAI_API_KEY=your_key_here
|
|
# OPENAI_MODEL=anthropic/claude-sonnet-4-6 (optional, default)
|
|
#
|
|
# Option 3 — Google Gemini:
|
|
# CLAUDE_CODE_USE_GEMINI=1
|
|
# GEMINI_API_KEY=your-gemini-key-here
|
|
# GEMINI_MODEL=gemini-2.0-flash
|
|
# GEMINI_BASE_URL=https://generativelanguage.googleapis.com (optional)
|
|
#
|
|
# Option 4 — GitHub Models:
|
|
# CLAUDE_CODE_USE_GITHUB=1
|
|
# GITHUB_TOKEN=ghp_your-token-here
|
|
#
|
|
# -- Copilot Premium Request optimization (default ON for sub-agents) --
|
|
# By default, when using GitHub Copilot, OpenClaude serializes sub-agent
|
|
# execution to reduce Premium Request consumption. Set these to tune:
|
|
#
|
|
# GITHUB_COPILOT_MAX_SUBAGENTS=1 Max concurrent sub-agents.
|
|
# 0 = suppress sub-agents, 1 = force
|
|
# sync, 2-10 = parsed/clamped.
|
|
# Default: 1.
|
|
# GITHUB_COPILOT_ALLOW_SUBAGENTS= Set to 1 to re-enable parallel
|
|
# background sub-agents
|
|
# (overrides the cap).
|
|
# GITHUB_COPILOT_FORCE_SYNC_SUBAGENTS= Set to 1 to force sync
|
|
# execution regardless of cap.
|
|
# GITHUB_COPILOT_OPTIMIZATION_DISABLED= Set to 1 to disable all
|
|
# optimization (sub-agents run
|
|
# as before this feature).
|
|
#
|
|
# Option 5 — Ollama (local):
|
|
# CLAUDE_CODE_USE_OPENAI=1
|
|
# OPENAI_BASE_URL=http://localhost:11434/v1
|
|
# OPENAI_API_KEY=ollama
|
|
# OPENAI_MODEL=llama3.2
|
|
#
|
|
# Option 6 — LM Studio (local):
|
|
# CLAUDE_CODE_USE_OPENAI=1
|
|
# OPENAI_BASE_URL=http://localhost:1234/v1
|
|
# OPENAI_MODEL=your-model-id-here
|
|
# OPENAI_API_KEY=lmstudio (optional)
|
|
#
|
|
# Option 7 — AWS Bedrock (may also need: aws configure):
|
|
# CLAUDE_CODE_USE_BEDROCK=1
|
|
# AWS_REGION=us-east-1
|
|
# AWS_DEFAULT_REGION=us-east-1
|
|
# AWS_BEARER_TOKEN_BEDROCK=your-bearer-token-here
|
|
# ANTHROPIC_BEDROCK_BASE_URL=https://bedrock-runtime.us-east-1.amazonaws.com
|
|
#
|
|
# Option 8 — Google Vertex AI:
|
|
# CLAUDE_CODE_USE_VERTEX=1
|
|
# ANTHROPIC_VERTEX_PROJECT_ID=your-gcp-project-id
|
|
# CLOUD_ML_REGION=us-east5
|
|
# GOOGLE_CLOUD_PROJECT=your-gcp-project-id
|
|
#
|
|
# ── How to set variables on each OS ──────────────────────────────────
|
|
#
|
|
# macOS (zsh):
|
|
# 1. Open: nano ~/.zshrc
|
|
# 2. Add each variable as: export VAR_NAME=value
|
|
# 3. Save and reload: source ~/.zshrc
|
|
#
|
|
# Linux (bash):
|
|
# 1. Open: nano ~/.bashrc
|
|
# 2. Add each variable as: export VAR_NAME=value
|
|
# 3. Save and reload: source ~/.bashrc
|
|
#
|
|
# Windows (PowerShell):
|
|
# Run for each variable:
|
|
# [System.Environment]::SetEnvironmentVariable('VAR_NAME', 'value', 'User')
|
|
# Then restart your terminal.
|
|
#
|
|
# Windows (Command Prompt):
|
|
# Run for each variable:
|
|
# setx VAR_NAME value
|
|
# Then restart your terminal.
|
|
#
|
|
# Windows (GUI):
|
|
# Settings > System > About > Advanced System Settings >
|
|
# Environment Variables > under "User variables" click New,
|
|
# then add each variable.
|
|
#
|
|
# ── Important notes ──────────────────────────────────────────────────
|
|
#
|
|
# LOCAL SERVERS: If using LM Studio or Ollama, the server MUST be
|
|
# running with a model loaded before you launch OpenClaude —
|
|
# otherwise you'll get connection errors.
|
|
#
|
|
# SWITCHING PROVIDERS: To temporarily switch, unset the relevant
|
|
# variables in your current terminal session:
|
|
#
|
|
# macOS / Linux:
|
|
# unset VAR_NAME
|
|
# # e.g.: unset CLAUDE_CODE_USE_OPENAI OPENAI_BASE_URL OPENAI_MODEL
|
|
#
|
|
# Windows (PowerShell — current session only):
|
|
# Remove-Item Env:VAR_NAME
|
|
#
|
|
# To permanently remove a variable on Windows:
|
|
# [System.Environment]::SetEnvironmentVariable('VAR_NAME', $null, 'User')
|
|
#
|
|
# LOAD ORDER:
|
|
# Shell and system environment variables are inherited by the process.
|
|
# Project .env files are only used if you pass --provider-env-file explicitly, or if
|
|
# your launcher or shell loads them before starting OpenClaude.
|
|
# COMPATIBILITY:
|
|
# System-wide variables work regardless of how you run OpenClaude:
|
|
# npx, global npm install, bun run, or node directly. Any process
|
|
# launched from your terminal inherits your shell's environment.
|
|
#
|
|
# REMINDER: Make sure .env is in your .gitignore to avoid committing secrets.
|
|
# =============================================================================
|
|
|
|
# =============================================================================
|
|
# PROVIDER SELECTION — uncomment ONE block below
|
|
# =============================================================================
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Option 1: Anthropic (default — no provider flag needed)
|
|
# -----------------------------------------------------------------------------
|
|
ANTHROPIC_API_KEY=sk-ant-your-key-here
|
|
|
|
# Override the default model (optional)
|
|
# ANTHROPIC_MODEL=claude-sonnet-4-5
|
|
|
|
# Use a custom Anthropic-compatible endpoint (optional)
|
|
# ANTHROPIC_BASE_URL=https://api.anthropic.com
|
|
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Option 2: OpenAI
|
|
# -----------------------------------------------------------------------------
|
|
# CLAUDE_CODE_USE_OPENAI=1
|
|
# OPENAI_API_KEY=sk-your-key-here
|
|
# Optional: rotate across multiple OpenAI-compatible API keys on auth/quota/rate-limit failures.
|
|
# OPENAI_API_KEYS=sk-key-a,sk-key-b
|
|
# OPENAI_MODEL=gpt-4o
|
|
# For DeepSeek, set:
|
|
# OPENAI_BASE_URL=https://api.deepseek.com/v1
|
|
# OPENAI_MODEL=deepseek-v4-flash
|
|
# Optional: OPENAI_MODEL=deepseek-v4-pro
|
|
# Legacy aliases also work: deepseek-chat and deepseek-reasoner
|
|
# For Z.AI GLM Coding Plan, set:
|
|
# OPENAI_BASE_URL=https://api.z.ai/api/coding/paas/v4
|
|
# OPENAI_MODEL=glm-5.2
|
|
# Optional: OPENAI_MODEL=GLM-5.1, GLM-5-Turbo, GLM-4.7, or GLM-4.5-Air
|
|
# Optional GLM-5.2 thinking controls:
|
|
# OPENAI_MODEL='glm-5.2?reasoning=high' # enhanced reasoning
|
|
# OPENAI_MODEL='glm-5.2?reasoning=xhigh' # maps to Z.AI reasoning_effort=max
|
|
# OPENAI_MODEL='glm-5.2?thinking=disabled' # faster direct answers for simple tasks
|
|
# For Hicap, use the OpenAI-compatible route flag above and set:
|
|
# HICAP_API_KEY=your-hicap-key-here
|
|
# OPENAI_BASE_URL=https://api.hicap.ai/v1
|
|
# OPENAI_MODEL=claude-opus-4.8
|
|
# For AI/ML API, the key alone enables the OpenAI-compatible route:
|
|
# AIMLAPI_API_KEY=your-aimlapi-key-here
|
|
# OPENAI_BASE_URL=https://api.aimlapi.com/v1
|
|
# OPENAI_MODEL=gpt-4o
|
|
|
|
# Use a custom OpenAI-compatible endpoint (optional — defaults to api.openai.com)
|
|
# OPENAI_BASE_URL=https://api.openai.com/v1
|
|
# Choose the OpenAI-compatible API surface (optional).
|
|
# Supported: chat_completions, responses, responses_compat
|
|
# Left unset, GPT-5.4/5.5/5.6 models (mini/nano variants excluded) on
|
|
# api.openai.com or Azure OpenAI are auto-routed to responses (they reject
|
|
# function tools + reasoning_effort on chat_completions); everything else
|
|
# defaults to chat_completions. Set this to override: an explicit
|
|
# chat_completions wins over the model auto-detection, but a provider
|
|
# catalog's requiredApiFormat still takes precedence over it. GPT-5.6 omits
|
|
# reasoning effort on this fallback because chat_completions rejects it with tools.
|
|
# OPENAI_API_FORMAT=chat_completions
|
|
# Force Azure-style URL and api-key-header handling for
|
|
# custom or private Azure endpoints whose hostname would not otherwise match
|
|
# (APIM-fronted, private link). Note: this also widens the GPT-5.4/5.5/5.6
|
|
# responses auto-route above to ANY base URL — do not set it against gateways
|
|
# that lack /v1/responses.
|
|
# On Azure, OPENAI_MODEL is your deployment name; if it is not the model id
|
|
# (e.g. production-coding), the model-name auto-route cannot recognize it —
|
|
# set OPENAI_API_FORMAT=responses explicitly for gpt-5.4/5.5/5.6 deployments.
|
|
# OPENAI_AZURE_STYLE=1
|
|
# Choose a custom auth header for OpenAI-compatible providers (optional).
|
|
# Authorization defaults to Bearer; custom headers default to the raw API key.
|
|
# Set OPENAI_AUTH_HEADER_VALUE when the header value differs from OPENAI_API_KEY.
|
|
# OPENAI_AUTH_HEADER=api-key
|
|
# OPENAI_AUTH_SCHEME=raw
|
|
# OPENAI_AUTH_HEADER_VALUE=your-header-value-here
|
|
|
|
# Fallback context window size (tokens) when the model is not found in
|
|
# integration model metadata (default: 128000). Increase this for models with larger
|
|
# context windows (e.g. 200000 for Claude-sized contexts).
|
|
# CLAUDE_CODE_OPENAI_FALLBACK_CONTEXT_WINDOW=128000
|
|
|
|
# Per-model context window overrides as a JSON object.
|
|
# Takes precedence over integration model metadata, so you can register new or
|
|
# custom models without patching source.
|
|
# Example: CLAUDE_CODE_OPENAI_CONTEXT_WINDOWS={"my-corp/llm-v3":262144,"gpt-4o-mini":128000}
|
|
# CLAUDE_CODE_OPENAI_CONTEXT_WINDOWS=
|
|
|
|
# Per-model maximum output token overrides as a JSON object.
|
|
# Use this alongside CLAUDE_CODE_OPENAI_CONTEXT_WINDOWS when your model
|
|
# supports a different output limit than what integration metadata specifies.
|
|
# Example: CLAUDE_CODE_OPENAI_MAX_OUTPUT_TOKENS={"my-corp/llm-v3":8192}
|
|
# CLAUDE_CODE_OPENAI_MAX_OUTPUT_TOKENS=
|
|
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Option 3: Google Gemini
|
|
# -----------------------------------------------------------------------------
|
|
# CLAUDE_CODE_USE_GEMINI=1
|
|
# GEMINI_API_KEY=your-gemini-key-here
|
|
# GEMINI_MODEL=gemini-2.0-flash
|
|
|
|
# Use a custom Gemini endpoint (optional)
|
|
# GEMINI_BASE_URL=https://generativelanguage.googleapis.com/v1beta/openai
|
|
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Option 4: GitHub Models
|
|
# -----------------------------------------------------------------------------
|
|
# CLAUDE_CODE_USE_GITHUB=1
|
|
# GITHUB_TOKEN=ghp_your-token-here
|
|
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Option 5: Ollama (local models)
|
|
# -----------------------------------------------------------------------------
|
|
# CLAUDE_CODE_USE_OPENAI=1
|
|
# OPENAI_BASE_URL=http://localhost:11434/v1
|
|
# OPENAI_API_KEY=ollama
|
|
# OPENAI_MODEL=llama3.2
|
|
# OPENCLAUDE_OLLAMA_NUM_CTX=32768 — request-level Ollama context window
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Option 6: LM Studio (local models)
|
|
# -----------------------------------------------------------------------------
|
|
# LM Studio exposes an OpenAI-compatible API, so we use the OpenAI provider.
|
|
# Make sure LM Studio is running with the Developer server enabled
|
|
# (Developer tab > toggle server ON).
|
|
#
|
|
# Steps:
|
|
# 1. Download and install LM Studio from https://lmstudio.ai
|
|
# 2. Search for and download a model (e.g. any coding or instruct model)
|
|
# 3. Load the model and start the Developer server
|
|
# 4. Set OPENAI_MODEL to the model ID shown in LM Studio's Developer tab
|
|
#
|
|
# The default server URL is http://localhost:1234 — change the port below
|
|
# if you've configured a different one in LM Studio.
|
|
#
|
|
# OPENAI_API_KEY is optional — LM Studio runs locally and ignores it.
|
|
# Some clients require a non-empty value; if you get auth errors, set it
|
|
# to any dummy value (e.g. "lmstudio").
|
|
#
|
|
# CLAUDE_CODE_USE_OPENAI=1
|
|
# OPENAI_BASE_URL=http://localhost:1234/v1
|
|
# OPENAI_MODEL=your-model-id-here
|
|
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Option 7: AWS Bedrock
|
|
# -----------------------------------------------------------------------------
|
|
|
|
# You may also need AWS CLI credentials configured (run: aws configure)
|
|
# or have AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY set in your
|
|
# environment in addition to the variables below.
|
|
#
|
|
# CLAUDE_CODE_USE_BEDROCK=1
|
|
# AWS_REGION=us-east-1
|
|
# AWS_DEFAULT_REGION=us-east-1
|
|
# AWS_BEARER_TOKEN_BEDROCK=your-bearer-token-here
|
|
# ANTHROPIC_BEDROCK_BASE_URL=https://bedrock-runtime.us-east-1.amazonaws.com
|
|
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Option 8: Google Vertex AI
|
|
# -----------------------------------------------------------------------------
|
|
# CLAUDE_CODE_USE_VERTEX=1
|
|
# ANTHROPIC_VERTEX_PROJECT_ID=your-gcp-project-id
|
|
# CLOUD_ML_REGION=us-east5
|
|
# GOOGLE_CLOUD_PROJECT=your-gcp-project-id
|
|
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Option 9: NVIDIA NIM
|
|
# -----------------------------------------------------------------------------
|
|
# NVIDIA NIM provides hosted inference endpoints for NVIDIA models.
|
|
# Get your API key from https://build.nvidia.com/
|
|
#
|
|
# CLAUDE_CODE_USE_OPENAI=1
|
|
# NVIDIA_API_KEY=nvapi-your-key-here
|
|
# OPENAI_BASE_URL=https://integrate.api.nvidia.com/v1
|
|
# OPENAI_MODEL=nvidia/llama-3.1-nemotron-70b-instruct
|
|
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Option 10: MiniMax
|
|
# -----------------------------------------------------------------------------
|
|
# MiniMax API provides text generation models.
|
|
# Get your API key from https://platform.minimax.io/
|
|
#
|
|
# MINIMAX_API_KEY=your-minimax-key-here
|
|
# ANTHROPIC_BASE_URL=https://api.minimax.io/anthropic
|
|
# ANTHROPIC_MODEL=MiniMax-M2.7
|
|
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Option 11: NEAR AI
|
|
# -----------------------------------------------------------------------------
|
|
# NEAR AI is a unified OpenAI-compatible gateway to Claude, GPT, Gemini,
|
|
# and TEE-hosted open models — all under one API key.
|
|
# Get your API key from https://cloud.near.ai/dashboard/organizations
|
|
#
|
|
# NEARAI_API_KEY=your-nearai-key-here
|
|
# OPENAI_BASE_URL=https://cloud-api.near.ai/v1 (optional, default)
|
|
# OPENAI_MODEL=anthropic/claude-sonnet-4-6 (optional, default)
|
|
#
|
|
# For direct TEE completions (lower latency + verifiable privacy):
|
|
# OPENAI_BASE_URL=https://qwen35-122b.completions.near.ai/v1
|
|
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Option 12: Fireworks AI
|
|
# -----------------------------------------------------------------------------
|
|
# Fireworks AI provides a fully OpenAI-compatible endpoint.
|
|
# Get your API key from https://fireworks.ai/
|
|
# Model IDs use the full path format: accounts/fireworks/models/<model-name>
|
|
#
|
|
# CLAUDE_CODE_USE_OPENAI=1
|
|
# FIREWORKS_API_KEY=fw_your_key_here
|
|
# OPENAI_BASE_URL=https://api.fireworks.ai/inference/v1
|
|
# OPENAI_MODEL=accounts/fireworks/models/llama-v3p1-70b-instruct
|
|
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Option 13: LongCat
|
|
# -----------------------------------------------------------------------------
|
|
# LongCat is Meituan's OpenAI-compatible API for LongCat-2.0.
|
|
# Get your API key from https://longcat.chat/platform/api_keys
|
|
# Docs: https://longcat.chat/platform/docs/
|
|
#
|
|
# CLAUDE_CODE_USE_OPENAI=1
|
|
# LONGCAT_API_KEY=your-longcat-key-here
|
|
# OPENAI_BASE_URL=https://api.longcat.chat/openai/v1
|
|
# OPENAI_MODEL=LongCat-2.0
|
|
#
|
|
# Or run: openclaude --provider longcat
|
|
# Or configure interactively with /provider
|
|
|
|
|
|
# -----------------------------------------------------------------------------
|
|
# Option 14: ClinePass
|
|
# -----------------------------------------------------------------------------
|
|
# ClinePass is an AI model gateway with usage limits (5hr, weekly, monthly).
|
|
# Get your API key from https://app.cline.bot/dashboard/subscription?personal=true
|
|
# Models include DeepSeek, Qwen, GLM, Kimi, MiMo, and MiniMax.
|
|
#
|
|
# CLINE_API_KEY=your-cline-api-key-here
|
|
# CLINE_API_MODEL=cline-pass/deepseek-v4-flash (optional, default)
|
|
#
|
|
# Usage limits are displayed via /usage command.
|
|
|
|
# =============================================================================
|
|
# OPTIONAL TUNING
|
|
# =============================================================================
|
|
|
|
# Max number of API retries on failure (default: 10, cap: 100)
|
|
# Set to 0 to disable retries after the initial request
|
|
# Deprecated fallback when OPENCLAUDE_MAX_RETRIES is unset: CLAUDE_CODE_MAX_RETRIES
|
|
# OPENCLAUDE_MAX_RETRIES=10
|
|
|
|
# Base retry delay in milliseconds when the API does not send Retry-After
|
|
# Uses exponential backoff from this value with jitter (default: 500, cap: 60000)
|
|
# OPENCLAUDE_RETRY_DELAY_MS=500
|
|
|
|
# Enable persistent retry mode for unattended/CI sessions
|
|
# Retries 429/529 indefinitely with smart backoff
|
|
# CLAUDE_CODE_UNATTENDED_RETRY=1
|
|
|
|
# Enable extended key reporting (Kitty keyboard protocol)
|
|
# Useful for iTerm2, WezTerm, Ghostty if modifier keys feel off
|
|
# OPENCLAUDE_ENABLE_EXTENDED_KEYS=1
|
|
|
|
# Disable "Co-authored-by" line in git commits made by OpenClaude
|
|
# OPENCLAUDE_DISABLE_CO_AUTHORED_BY=1
|
|
|
|
# Disable strict tool schema normalization for non-Gemini providers
|
|
# Useful when MCP tools with complex optional params (e.g. list[dict])
|
|
# trigger "Extra required key ... supplied" errors from OpenAI-compatible endpoints
|
|
# OPENCLAUDE_DISABLE_STRICT_TOOLS=1
|
|
|
|
# Disable hidden <system-reminder> messages injected into tool output
|
|
# Suppresses the file-read cyber-risk reminder and the todo/task tool nudges
|
|
# Useful for users who want full transparency over what the model sees
|
|
# OPENCLAUDE_DISABLE_TOOL_REMINDERS=1
|
|
|
|
# Log structured per-request token usage (including cache metrics) to stderr.
|
|
# Useful for auditing cache hit rate / debugging cost spikes outside the REPL.
|
|
# Any truthy value enables it ("verbose", "1", "true").
|
|
#
|
|
# Complements (does NOT replace) CLAUDE_CODE_ENABLE_TOKEN_USAGE_ATTACHMENT —
|
|
# they serve different audiences:
|
|
# - OPENCLAUDE_LOG_TOKEN_USAGE is user-facing: one JSON line per API
|
|
# request on stderr, intended for humans inspecting cost/caching.
|
|
# - CLAUDE_CODE_ENABLE_TOKEN_USAGE_ATTACHMENT is model-facing: injects
|
|
# a context-usage attachment INTO the prompt so the model can reason
|
|
# about its own remaining context. Does not touch stderr.
|
|
# Turn on whichever audience you're debugging; both can run together.
|
|
# OPENCLAUDE_LOG_TOKEN_USAGE=verbose
|
|
|
|
# Time-to-response-headers deadline for OpenAI-compatible API requests
|
|
# in milliseconds (default: 600000, or 10 minutes). Use a safe positive
|
|
# integer; invalid values use the default and values above 2147483647 are capped.
|
|
# This runtime setting must be exported from your shell or launcher; the
|
|
# provider env-file loader intentionally ignores runtime/debug knobs.
|
|
# This covers generic OpenAI-compatible requests, direct GitHub Copilot
|
|
# Responses, and Copilot chat-to-Responses fallback requests. First-party
|
|
# Codex OAuth Responses and the Anthropic SDK retain their existing handling.
|
|
# API_TIMEOUT_MS=600000
|
|
|
|
# Enable debug logging
|
|
# CLAUDE_DEBUG=1
|
|
|
|
|
|
# =============================================================================
|
|
# WEB SEARCH (OPTIONAL)
|
|
# =============================================================================
|
|
# OpenClaude includes a web search tool. By default it uses DuckDuckGo (free)
|
|
# or the provider's native search (Anthropic firstParty / vertex).
|
|
#
|
|
# Set one API key below to enable a provider. That's it.
|
|
|
|
# ── Provider API keys — set ONE of these ────────────────────────────
|
|
|
|
# Tavily (AI-optimized search, recommended)
|
|
# TAVILY_API_KEY=tvly-your-key-here
|
|
|
|
# Exa (neural/semantic search)
|
|
# EXA_API_KEY=your-exa-key-here
|
|
|
|
# You.com (RAG-ready snippets)
|
|
# YOU_API_KEY=your-you-key-here
|
|
|
|
# Jina (s.jina.ai endpoint)
|
|
# JINA_API_KEY=your-jina-key-here
|
|
|
|
# Brave (independent web index, generous free tier)
|
|
# BRAVE_API_KEY=your-brave-key-here
|
|
|
|
# Bing Web Search
|
|
# BING_API_KEY=your-bing-key-here
|
|
|
|
# Mojeek (privacy-focused)
|
|
# MOJEEK_API_KEY=your-mojeek-key-here
|
|
|
|
# Linkup
|
|
# LINKUP_API_KEY=your-linkup-key-here
|
|
|
|
# Firecrawl (premium, uses @mendable/firecrawl-js)
|
|
# FIRECRAWL_API_KEY=fc-your-key-here
|
|
|
|
# Self-hosted Firecrawl endpoint (optional — omit to use cloud API)
|
|
# FIRECRAWL_API_URL=https://your-firecrawl-instance.com
|
|
|
|
# ── Provider selection mode ─────────────────────────────────────────
|
|
#
|
|
# WEB_SEARCH_PROVIDER controls fallback behavior:
|
|
#
|
|
# "auto" (default) — try all configured providers, fall through on failure
|
|
# "custom" — custom API only, throw on failure (NOT in auto chain)
|
|
# "firecrawl" — firecrawl only
|
|
# "tavily" — tavily only
|
|
# "exa" — exa only
|
|
# "you" — you.com only
|
|
# "jina" — jina only
|
|
# "brave" — brave only
|
|
# "bing" — bing only
|
|
# "mojeek" — mojeek only
|
|
# "linkup" — linkup only
|
|
# "ddg" — duckduckgo only
|
|
# "native" — anthropic native / codex only
|
|
#
|
|
# Auto mode priority: firecrawl → tavily → exa → you → jina → brave → bing →
|
|
# mojeek → linkup → ddg
|
|
# Note: "custom" is NOT in the auto chain. To use the custom API provider,
|
|
# you must explicitly set WEB_SEARCH_PROVIDER=custom.
|
|
#
|
|
# WEB_SEARCH_PROVIDER=auto
|
|
# WEB_SEARCH_TIMEOUT_SEC=15 — built-in search provider timeout in seconds (default 15)
|
|
|
|
# ── Built-in custom API presets ─────────────────────────────────────
|
|
#
|
|
# Use with WEB_KEY for the API key:
|
|
# WEB_PROVIDER=searxng|google|brave|serpapi
|
|
# WEB_KEY=your-api-key-here
|
|
#
|
|
# Google Custom Search additionally requires the Programmable Search Engine ID:
|
|
# WEB_PROVIDER=google
|
|
# WEB_KEY=your-google-api-key
|
|
# GOOGLE_CSE_ID=your-programmable-search-engine-id
|
|
#
|
|
# Note: Google's Custom Search JSON API is closed to new customers and is
|
|
# scheduled for sunset on 2027-01-01. Prefer BRAVE_API_KEY / TAVILY_API_KEY
|
|
# / EXA_API_KEY for new setups.
|
|
|
|
# ── Custom API endpoint (advanced) ──────────────────────────────────
|
|
#
|
|
# WEB_SEARCH_API — base URL of your search endpoint
|
|
# WEB_QUERY_PARAM — query parameter name (default: "q")
|
|
# WEB_METHOD — GET or POST (default: GET)
|
|
# WEB_PARAMS — extra static query params as JSON: {"lang":"en","count":"10"}
|
|
# WEB_URL_TEMPLATE — URL template with {query} for path embedding
|
|
# WEB_BODY_TEMPLATE — custom POST body with {query} placeholder
|
|
# WEB_AUTH_HEADER — header name for API key (default: "Authorization")
|
|
# WEB_AUTH_SCHEME — prefix before key (default: "Bearer")
|
|
# WEB_HEADERS — extra headers as "Name: value; Name2: value2"
|
|
# WEB_JSON_PATH — dot-path to results array in response
|
|
|
|
# ── Custom API security guardrails ──────────────────────────────────
|
|
#
|
|
# The custom provider enforces security guardrails by default.
|
|
# Override these only if you understand the risks.
|
|
#
|
|
# WEB_CUSTOM_TIMEOUT_SEC=120 — request timeout in seconds (default 120)
|
|
# WEB_CUSTOM_MAX_BODY_KB=300 — max POST body size in KB (default 300)
|
|
# WEB_CUSTOM_ALLOW_ARBITRARY_HEADERS=false — set "true" to use non-standard headers
|
|
# WEB_CUSTOM_ALLOW_HTTP=false — set "true" to allow http:// URLs
|
|
# WEB_CUSTOM_ALLOW_PRIVATE=false — set "true" to target localhost/private IPs
|
|
# (needed for self-hosted SearXNG)
|
|
|
|
# ── Config directory override ───────────────────────────────────────
|
|
#
|
|
# By default openclaude stores per-user state under ~/.openclaude
|
|
# (and falls back to ~/.claude for installs that pre-date the rename).
|
|
# Set this to point openclaude at a different directory — useful for
|
|
# isolating profiles or sharing config across machines.
|
|
#
|
|
# OPENCLAUDE_CONFIG_DIR=/path/to/dir — preferred name
|
|
# CLAUDE_CONFIG_DIR=/path/to/dir — legacy alias (still works)
|
|
#
|
|
# When both are set with different values, OPENCLAUDE_CONFIG_DIR wins
|
|
# and a warning is logged once per process.
|