# --- GitLab --- GITLAB_BASE_URL=https://gitlab.example.com GITLAB_PROJECT_ID=group/project # Personal or project access token, scope: api. Only used to list open MRs; # the actual review runs through your account's GitLab/Atlassian connectors # (see REPO_LOCAL_PATH below), not this token. GITLAB_TOKEN=glpat-xxxxxxxxxxxxxxxxxxxx # Your own GitLab username. MRs you authored are routed to /mr-comments # (triage reviewer comments) instead of /code-review — do NOT also list it in # EXCLUDE_AUTHORS below, or those MRs are filtered out before ever reaching # that routing. GITLAB_USERNAME=your-username # --- Claude --- # `claude` must be logged into your claude.ai account on this machine (not # ANTHROPIC_API_KEY-only), since /code-review relies on the account's GitLab # and Atlassian connectors to fetch the ticket and MR description. # Path to the claude CLI binary if not on PATH CLAUDE_BIN=claude # Path to the VS Code CLI, used to open a review from the "Review ready" # notification (needs terminal-notifier: `brew install terminal-notifier`, # otherwise the notification falls back to a plain, non-clickable alert). VSCODE_BIN=code # Your real local checkout of the repo to review (WEBAPP_LOCAL_PATH still works # as an alias). If your commands/agents live in its .claude/ (often gitignored), # the bot links it into its worktree; user-level ~/.claude works too. REPO_LOCAL_PATH=/path/to/your/checkout # Slash commands run headless as `claude -p " MR !"`. Any command # works: the bot injects the output contract (see README). Leave TRIAGE_COMMAND # empty to ignore your own MRs. Starter files: examples/commands/. REVIEW_COMMAND=/code-review TRIAGE_COMMAND=/mr-comments # Space-separated extra tools your commands need (e.g. your own MCP tools). A # refused tool fails the run with the tool name in the error. CLAUDE_EXTRA_ALLOWED_TOOLS= # Every run is sandboxed (macOS Seatbelt): Bash can only write to the bot worktree, # the repo's .git and the reviews dir, can only reach the GitLab host, and cannot # read ~/.ssh, ~/.aws and the bot's .env. Set to false to turn the sandbox off # (the Read/Edit deny rules for secrets and trusted .claude config stay on). CLAUDE_SANDBOX=true # Space-separated env var names a command needs although they look like secrets. # By default the run gets no variable named *TOKEN*, *SECRET*, *PASSWORD* or *API_KEY*. CLAUDE_ENV_PASSTHROUGH= # Optional free text appended to the instructions injected into every run. REVIEW_PROMPT_EXTRA= # A worktree of REPO_LOCAL_PATH dedicated to this bot, created automatically # on first run, so reviewing MRs never touches whatever branch you have # checked out for your own work. Defaults to ./worktree if unset. BOT_WORKTREE_DIR= # --- Behaviour --- # Only these target branches get auto-reviewed (comma-separated). Leave empty for all. ALLOWED_TARGET_BRANCHES=develop # GitLab usernames (not emails) whose MRs are never touched at all (neither # /code-review nor /mr-comments), comma-separated. Draft MRs are always # skipped regardless of author. Do not put GITLAB_USERNAME here. EXCLUDE_AUTHORS= # MRs with no activity (push/comment/...) for this many days are assumed stale # and skipped, so we don't spend time reviewing something likely out of sync # with develop already. STALE_AFTER_DAYS=14 # How often to poll for new/updated open MRs (default; the studio can override # it at runtime through settings.json). POLL_INTERVAL_MINUTES=5 # macOS notifications (review ready / review failed / bot in error). Set to # false to disable. NOTIFICATIONS=true # Port of the local review reader (http://localhost:, 127.0.0.1 only). STUDIO_PORT=4477 # Show a "Post to GitLab" button on the studio's "Comment to post" blocks. It # posts a general comment on the MR as you (GITLAB_TOKEN), after a confirmation. # Off by default: nothing is ever posted unless you set this to true. ALLOW_POSTING=false # Show a "Push" button on a triage whose fixes are committed locally: it pushes # them to your MR's branch (fast-forward only, never --force) after a # confirmation, and only if the branch hasn't moved since the triage. ALLOW_PUSH=false # How the bot checks out an MR: "branch" (default) skips an MR whose branch is # checked out in another worktree; "detached" checks out the MR's head without a # local branch, for people who keep one worktree per open MR. BOT_CHECKOUT=branch # Optional. JIRA_BASE_URL alone (e.g. https://your-team.atlassian.net) turns the # ticket in the studio's side panel into a link. With all three set, reviews are # also listed by the Jira priority of the ticket named in the MR (title, branch # or description), most urgent first; otherwise the order is newest first. JIRA_BASE_URL= JIRA_EMAIL= JIRA_API_TOKEN=