Skip to content

Configure

The backend reads one file, cotracer.yaml (mounted at /app/cotracer.yaml), and secrets from environment variables. Unknown keys are rejected at startup, so a typo fails loudly instead of being ignored. Remove a section to turn that integration off — its tools are never built and the model never sees them.

llm:
provider: anthropic
model: claude-opus-4-8
api_key_env: ANTHROPIC_API_KEY
tracing:
provider: jaeger
url: http://jaeger-query.internal:16686
logs:
provider: opensearch
url: http://opensearch.internal:9200
vcs:
provider: github
org: your-org # cross-repo search scope
# repo: your-org/default # fallback when a request names no repo

Secrets never go in this file. Where a provider needs one, the config names the environment variable that holds it.

Key Meaning
provider provider id, e.g. anthropic, openai
model the provider’s model id, e.g. claude-opus-4-8, gpt-…
url optional — your own endpoint (self-hosted model, internal gateway)
api_key_env env var holding the key; startup fails if it is unset

api_key_env can name any variable (e.g. LLM_GATEWAY_KEY); the backend passes its value to the provider.

Model choice matters: use the strongest model your policy allows. Small local models guess service names and stop early.

Without an llm section the backend falls back to a small local model — fine for a smoke test, not for real analyses.

Key Meaning
provider provider id, e.g. jaeger
url your tracing backend’s query endpoint
Key Meaning
provider provider id, e.g. opensearch
url your logs backend’s endpoint
Key Default Meaning
provider github
url https://api.github.com GitHub Enterprise Server: https://<host>/api/v3
org your GitHub org — where the App is installed; scopes cross-repo search. Set org or repo
repo default owner/name when a request names none
app_id_env GITHUB_APP_ID env var with the App id
app_private_key_env GITHUB_APP_PRIVATE_KEY env var with the App private key (PEM contents)
cache_dir ~/.cache/cotracer/repos local bare clones used for code search
cache_max_gb 20 least-recently-used repos are evicted beyond this
clone_size_cap_mb 500 larger repos are not cloned

Code search and file reads run on local bare clones of your repos, fetched lazily and updated incrementally — keep cache_dir on a persistent volume. Setup of the App itself: Connect GitHub.

Variable Required Meaning
COTRACER_API_KEY yes clients must send it (Authorization: Bearer …). Unset = auth disabled — never in production
COTRACER_LICENSE_TOKEN yes* clt_… license fetch token (*or mount a license file)
your LLM key per llm the variable named by llm.api_key_env
GITHUB_APP_ID, GITHUB_APP_PRIVATE_KEY with vcs GitHub App credentials
COTRACER_LICENSE_FILE no license file path (default /app/cotracer-license.jwt)
COTRACER_LICENSE_URL no license server (default https://platform.cotracer.ai)
HTTPS_PROXY, NO_PROXY no outbound proxy for the LLM, GitHub and license refresh