alden

Configuration

Where settings live

Alden merges three layers, later ones winning:

  1. Built-in defaults.
  2. Your user config: ~/.alden/config.toml (alden config path prints it).
  3. The repo's config: .alden.toml at the root of the repo you run Alden from.

alden config set writes to your user config. Edit .alden.toml by hand to share settings with a team, for example sensitive paths. alden config list prints the merged result.

# ~/.alden/config.toml
[model]
name = "sonnet"
effort = "medium"

[budget]
perReviewUsd = 0.5
dailyUsd = 10

[queue]
fastTrackMaxLines = 50

model

Key Default What it does
model.provider anthropic anthropic, openai, bedrock, vertex, foundry or openai-compatible.
model.name sonnet An alias (sonnet, opus, haiku, fable), a full model ID, or a local model's name.
model.effort unset low, medium, high, xhigh or max. Unset uses the model's own default.
model.baseUrl http://localhost:11434/v1 openai-compatible only: the endpoint.
model.region unset bedrock (AWS region) and vertex (GCP region, e.g. global).
model.projectId unset vertex only: the GCP project ID.
model.resource unset foundry only: the Azure AI Foundry resource name.

See Models, providers and budgets.

budget

Key Default What it does
budget.perReviewUsd 0.5 The most one review may cost, in US dollars.
budget.dailyUsd 10 The most all reviews may cost in your local day.

queue

Key Default What it does
queue.includeDrafts false Include draft PRs in alden queue.
queue.fastTrackMaxLines 50 The largest PR, in changed lines, that can be fast-tracked.
queue.sensitivePaths see below Glob patterns that raise a PR's risk and trigger the sensitive-paths check. Setting it replaces the defaults.
queue.orgs [] Only PRs in these organisations' (or users') repos. Empty means everywhere. Your user config only.
queue.repos [] Only PRs in these repos (owner/name); with queue.orgs, a PR in either counts. Your user config only.
queue.ignore [] Organisations or repos (owner/name) to leave out, even when covered above. Your user config only.
queue.rank.<weight> 1 How much a ranking signal counts, 0 to 10: urgentLabel, stacked, sameAuthor, ownsFiles, waiting, size, risk, noTests, learned, rereview. 0 ignores it, 2 doubles it. Your user config only.
queue.rank.rules [] Rules that put PRs first or last, or boost or lower them ([[queue.rank.rules]]). Your user config only.

queue.orgs, queue.repos and queue.ignore set what your queue covers on this machine, everywhere Alden shows it (the terminal, the web UI, the desktop app's menu and background briefings, and alden mcp): only your company's organisation on a work laptop, say, and only your own repos on a personal one. Set them in Settings → Your queue on this machine, or with alden config set queue.orgs "acme" (lists are comma-separated). --repo and --org override them for one run. A repo's .alden.toml can't set them.

[queue.rank] is how you rank: a weight per signal and your rules. Set it in Settings → Ranking, which previews your queue's top 5 before you save, with alden config set queue.rank.waiting 2, or by hand:

[queue.rank]
waiting = 2
learned = 0

[[queue.rank.rules]]
when = { path = "payments/" }
then = "first"

[[queue.rank.rules]]
when = { author = "bots" }
then = "last"

Each rule's when takes any of path, label, author (a login, or people, bots, agents), repo, base and title; then is first, last, boost or lower, with by for the points (default 5) and an optional name for the row. See Your ranking for what each weight is worth and how rules apply, and packages/schema/json/rank-settings.v1.json for the format. A repo's .alden.toml can't set them.

Default sensitive paths:

**/migrations/**      **/auth/**         **/payments/**      **/infra/**
.github/workflows/**  **/package-lock.json  **/pnpm-lock.yaml  **/yarn.lock
**/composer.lock      **/go.sum          **/poetry.lock

review

Key Default What it does
review.eyes 3 How many places "Needs your eyes" holds, 1 to 10: the few a careful reviewer would look at first. More catches more, and asks more of your attention.

background

For the desktop app, which briefs your top PRs while you're away.

Key Default What it does
background.enabled true Prepare briefings in the background. A repo's .alden.toml can turn it off there.
background.model false Ask the model for them too, within your caps. Read from your user config only, so a repo can't make you spend.
background.prepare 3 How many of the top PRs in Needs you to keep briefed, 0 to 10, in your ranked order. 0 briefs none.

notifications

For the desktop app.

Key Default What it does
notifications.sound true Play the system's notification sound with "Briefing ready" and follow-ups. Read from your user config only. Settings → Notifications sets it too.
notifications.followUps "your-turn" How much you hear about PRs you reviewed: off, rereview (a second review request), your-turn (a re-review, or every comment you left resolved or answered) or every-reply (each reply, resolve, re-review and outdated comment). See Follow-ups. Any PR can have its own level with alden watch. Read from your user config only. Settings → Notifications sets it too.

drafts

Key Default What it does
drafts.auto true On as soon as a model is set up. When a model briefs a PR, also draft comments for up to five of its medium and high findings, in the same call, for you to keep, edit or drop in the Comments drawer. Untouched drafts are never sent, and none approves. Off asks the model exactly what it asked before. Read from your user config only. Settings → Drafts sets it too. See Alden's drafts.
drafts.tone "concise" How Alden writes the comments it drafts, in every drafting path: terse (one line, no reasoning), concise, detailed (why, impact and a fix) or teaching (for newer teammates). A style you pick, not an imitation of anyone. Any repo can have its own, kept on this machine (the UI's Tune, or PUT /api/tone); alden comment <pr> --draft --tone … picks one for one call. Read from your user config only. See The tone of drafts.

learning

Key Default What it does
learning.fromReviews true Learn from the reviews you send: comments and suggestions near Alden's flags, approving past a place you saw, comments where it flagged nothing, and what the author did with your comments afterwards (suggestions applied, comments resolved). Off records none of it: Alden notes nothing about what you saw, keeps no record of where your comments went and asks GitHub nothing about them; Useful and Not useful still count, and what was already learned stays. Read from your user config only. Settings → Learning sets it too. See Reviews you send, Places you saw and What comes of them.

stats

Key Default What it does
stats.reviewTime true Record how long your reviews take, on this machine, for time to review: when you first open a PR's briefing, active time, how many flagged places you saw, comments drafted, kept and sent, whether Alden's model helped, the verdict and when you sent it. Durations and counts only, kept 120 days. Off records nothing new and drops a review under way; what's recorded stays until it ages out. Read from your user config only. Settings → Time to review sets it too.

telemetry

Key Default What it does
telemetry.enabled unset Send anonymous usage stats. Read from your user config only. DO_NOT_TRACK, ALDEN_TELEMETRY=0 and CI turn it off. See Usage stats.

clones

Key Default What it does
clones.folders [] Folders your clones live in, e.g. ~/src. Searched (three levels down) for a clone of a PR's repo, so its briefing finds callers from anywhere. Your user config only.

PR briefings find callers in a local clone of the PR's repo. Alden uses, in order: the clone it runs in, if it has a remote for that repo; the clone it last saw for that repo (Alden remembers every clone with a GitHub remote it runs in, and checks the folder is still there and still has that remote); then the first clone under clones.folders. So alden config set clones.folders "~/src" once is enough for the desktop app, alden ui or alden mcp started anywhere to find callers in every repo under ~/src.

updates

Key Default What it does
updates.check true alden --version and alden doctor say when a newer Alden exists (checked at most once a day).

Environment variables

Variable What it does
ALDEN_DEBUG queue prints where a fresh queue's time goes, step by step, on stderr. See The review queue.
ALDEN_GITHUB_TOKEN A GitHub token to use instead of the stored one.
ALDEN_HOME Where Alden keeps its files. Default ~/.alden.
ALDEN_NO_UPDATE_CHECK Set to anything to skip the check for a newer Alden.
ALDEN_OPENAI_API_KEY The key for an openai-compatible endpoint (falls back to OPENAI_API_KEY).
ALDEN_TELEMETRY 0 or false turns usage stats off, whatever your config says.
ANTHROPIC_API_KEY Your Anthropic API key, for the anthropic provider. Comes before the key stored with alden auth model.
OPENAI_API_KEY Your OpenAI API key, for the openai provider. Comes before the key stored with alden auth model.
DO_NOT_TRACK Set (to anything but 0) to turn usage stats off.
OLLAMA_HOST Where Ollama listens, as Ollama reads it, for alden setup. Default http://localhost:11434.

Files Alden keeps

Everything is under ~/.alden (or ALDEN_HOME):

Path What it holds
config.toml Your user settings.
credentials.json Your GitHub token and Anthropic key, only where there's no OS keychain (readable by you only).
cache/ GitHub responses, cached briefly, and your last queue (for alden open and alden review <#>).
index/ The code graph's per-file cache. Around 100 MB for a repo the size of Kubernetes.
worktrees/ Checkouts of PRs for the code graph, one per repo.
alden.db The local database: feedback, the PRs you open, your notes, your draft comments, the places you saw (90 days), where your sent line comments went (30 days, without their text), model spending, first use per repo, the follow-ups on PRs you reviewed (each thread of yours as last seen, and the news not yet shown or seen in Your turn; 30 days) and the PRs you gave their own level, how long your reviews took (120 days, durations and counts only), queued usage stats, the clone Alden last saw for each repo, and this install's anonymous id and salt. See Learning and memory.
legacy/ Files from before the database, kept after their one-time import. Safe to delete.

Deleting any of these is safe, but deleting alden.db also deletes your feedback, notes and what Alden learned, and resets today's daily cap. Alden rebuilds everything else as needed.