# See docs/development/CONFIGURATION.md for a categorized reference of every # var below (and how it interacts with the shell and CLI). # The canonical schema is packages/toolshed/env.ts. ENV=development PORT=8000 LOG_LEVEL=debug ## Build metadata # Source-run fallback for /api/meta.gitSha, matching the field a compiled # toolshed reads from baked metadata. This does not gate pattern updates. # COMMIT_SHA= # Explicit toolshed-only override; takes priority over compiled metadata and # COMMIT_SHA. Normally leave unset. # TOOLSHED_GIT_SHA= ## OpenTelemetry Configuration # Enable or disable OpenTelemetry tracing. When enabled, ALL spans (HTTP request # spans + LLM spans) are exported to OTEL_EXPORTER_OTLP_ENDPOINT. In deployed # environments a local OTel Collector runs there and forwards everything to # SigNoz. Set OTEL_ENABLED=true in the deployed .env to ship telemetry. OTEL_ENABLED=false # Service name for traces (use "toolshed" in deployed environments) OTEL_SERVICE_NAME=toolshed-dev # OpenTelemetry collector endpoint (local collector; do not point directly at SigNoz) OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318 # Sampling configuration. Supported: always_on (default), always_off, # traceidratio, parentbased_always_on, parentbased_always_off, # parentbased_traceidratio. OTEL_TRACES_SAMPLER_ARG is the ratio (0.0-1.0) for # the *ratio variants. A ratio below 1.0 also thins the LLM spans reaching SigNoz. OTEL_TRACES_SAMPLER=always_on OTEL_TRACES_SAMPLER_ARG=1.0 ## /api/ai/llm Provider API keys # Note: toolshed uses the CFTS_AI_LLM_ prefix (not the conventional # ANTHROPIC_API_KEY / OPENAI_API_KEY names). A model is only registered if # its provider's prefixed key is set — see routes/ai/llm/models.ts. Use the # exact variable names below. # CFTS_AI_LLM_ANTHROPIC_API_KEY # CFTS_AI_LLM_GROQ_API_KEY # CFTS_AI_LLM_OPENAI_API_KEY # CFTS_AI_LLM_GOOGLE_APPLICATION_CREDENTIALS # CFTS_AI_LLM_GOOGLE_VERTEX_PROJECT # CFTS_AI_LLM_GOOGLE_VERTEX_LOCATION ## Gateway (Common Fabric LLM gateway) # OpenAI-compatible /v1/models endpoint. When set and reachable, toolshed # discovers gateway-hosted models at startup and prefers gateway:claude-sonnet-4-6 # as the default model (falling back to anthropic:claude-sonnet-4-6, then # anthropic:claude-sonnet-4-5). When unreachable, toolshed logs a warning and # continues with the direct-provider models — startup is not blocked. # # Default: https://llm.stage.commontools.dev (Tailscale-only — expected to be # unreachable for external users; that fallback path is supported). # Set to an empty string to opt out entirely and skip the startup probe. # CFTS_AI_GATEWAY_URL= # CFTS_AI_GATEWAY_URL="" # explicitly disable ## AI image generation, voice transcription, and misc AI services # FAL_API_KEY ## Jina AI web reader API key # JINA_API_KEY ## GitHub OAuth # GITHUB_CLIENT_ID= # GITHUB_CLIENT_SECRET= ## Notion OAuth # NOTION_CLIENT_ID= # NOTION_CLIENT_SECRET= ## Linear OAuth # LINEAR_CLIENT_ID= # LINEAR_CLIENT_SECRET= ## Spotify OAuth # SPOTIFY_CLIENT_ID= # SPOTIFY_CLIENT_SECRET= ## Discord OAuth # DISCORD_CLIENT_ID= # DISCORD_CLIENT_SECRET= ## Strava OAuth # STRAVA_CLIENT_ID= # STRAVA_CLIENT_SECRET=