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.
Example
Section titled “Example”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 repoSecrets never go in this file. Where a provider needs one, the config names the environment variable that holds it.
llm — your model
Section titled “llm — your model”| 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.
tracing
Section titled “tracing”| 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.
Environment variables
Section titled “Environment variables”| 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 |