Skip to content
Geld

Repository config

One file, every reviewer.

A repository can configure Geld for everyone who reviews it by committing .github/geld.yml. This page lists every key the file accepts and every valid value, generated from @geld/core (opens in a new tab) and the review-bot registry the extension ships, so it cannot drift from what is actually accepted.

Where it lives

.github/geld.yml on the default branch of the repository. An organisation puts its defaults in its public .github repository (acme/.github, where GitHub reads default community files from), as geld.yml or .github/geld.yml; the first that exists is used, and a repository's own file is layered on top. The file is YAML with the keys below; keys Geld does not know are ignored, so a newer Geld can accept more without an older one reporting an error. A full example:

# .github/geld.yml
version: 1

categories:
  docs: true                     # hide docs here, even for people who keep them
  stories: true

groups:
  tests/snapshots: false         # but always show snapshot changes

categoryPatterns:
  generated:
    - src/api/__generated__/**
    - "!src/api/__generated__/README.md"

customCategories:
  - id: custom:fixtures
    title: Fixtures
    icon: package
    patterns:
      - fixtures/**
    noun: fixture

reviewBots:
  - coderabbit
  - greptile

version

Optional. The only accepted value is 1. Any other value is reported as a problem and the file is not applied.

categories

A mapping of category id to true (hide these files for everyone reviewing here) or false (never hide them here, even for people who have the category on). The repository's value wins over each reviewer's own switch for the categories it names and leaves the rest alone. Ids are the built-in ones below and, once defined under customCategories, custom:<slug> ids. The patterns behind each built-in category are on the Patterns page.

Category idWhat it hides
testsTests (on by default). 5 groups.
generatedGenerated. 2 groups.
vendoredVendored. 1 group.
agentsAgent config. 1 group.
docsDocs. 1 group.
toolingTooling & CI. 3 groups.
storiesFixtures. 3 groups.
trivialTrivial changes. 6 groups.
largeLarge diffs. 1 group.

groups

A mapping of category/group to true or false: the off-switch for one pattern group inside a built-in category, for everyone. A group is only consulted while its category is on. The keys are every group of every built-in category:

  • tests/unit
  • tests/e2e
  • tests/directories
  • tests/snapshots
  • tests/tooling
  • generated/lockfiles
  • generated/generated-code
  • vendored/vendored
  • agents/agents
  • docs/docs
  • tooling/ci
  • tooling/lint-format
  • tooling/build-config
  • stories/stories
  • stories/fixtures
  • stories/i18n
  • trivial/renames
  • trivial/modes
  • trivial/binary
  • trivial/deleted
  • trivial/whitespace
  • trivial/comments
  • large/large

categoryPatterns

A mapping of built-in category id to a list of extra pattern lines for that category. Lines use gitignore semantics (a pattern without a slash matches a file name at any depth, a trailing slash a directory and everything in it, ** spans directories, {a,b} expands alternatives); a line starting with ! rescues a path the category would otherwise hide, and a line of the form [owner/repo] scopes the lines after it to one repository ([*] returns to everywhere). Every pattern is compiled when the file is read; one that does not compile is reported with its line.

customCategories

A list of categories of the repository's own. Each entry is an object with these keys:

KeyValue
idRequired. custom:<slug> where the slug is lowercase letters, digits and dashes, unique in the file. The id is what categories and every reviewer's settings refer to, so it should not change once published.
titleRequired. The name shown in the panel and the sidebar, up to 40 characters.
iconOptional. One of the Octicon names below; package when left out.
  • beaker
  • package-dependencies
  • package
  • copilot
  • book
  • tools
  • stack
  • archive
  • bug
  • checklist
  • clock
  • code
  • container
  • cpu
  • database
  • dependabot
  • device-mobile
  • file-binary
  • file-media
  • file-zip
  • filter
  • flame
  • gear
  • globe
  • graph
  • hash
  • history
  • image
  • key
  • law
  • light-bulb
  • link
  • lock
  • mail
  • megaphone
  • moon
  • note
  • number
  • organization
  • paintbrush
  • pencil
  • people
  • pin
  • plug
  • project
  • pulse
  • repo
  • rocket
  • ruby
  • search
  • server
  • shield
  • sparkle-fill
  • star
  • stopwatch
  • sync
  • table
  • tag
  • telescope
  • terminal
  • trash
  • typography
  • versions
  • video
  • workflow
  • zap
patternsRequired. A list of pattern lines with the same syntax as categoryPatterns. Custom categories are matched before the built-in ones.
noun, nounPluralOptional. Short words for counts (“2 fixtures”); the lower-cased title when left out.

reviewBots

A list of the review bots installed on the repository, by id. Geld can only tell a bot is available from what it has already done on a pull request, which is nothing on one that is waiting for its first review; a repository that names its bots here makes the panel's Request a review menu list them on every pull request, for every reviewer, with no sign-in. Only the ids below are accepted: Geld knows what to post, read and show for each of them, which a bare login would not tell it. The menu also offers a bot whose own config file is in the repository, and the rest of the registry behind “Other bots”.

Bot idWhat Run posts
bugbotBugbot: the comment bugbot run. Also offered when the repository holds .cursor/BUGBOT.md.
greptileGreptile: the comment @greptileai. Also offered when the repository holds greptile.json or .greptile.yml or .greptile.yaml.
devinDevin: the comment /devin review.
codexCodex: the comment @codex review. Also offered when the repository holds .codex/.
copilotCopilot: the comment @copilot. Also offered when the repository holds .github/copilot-instructions.md.
coderabbitCodeRabbit: the comment @coderabbitai review. Also offered when the repository holds .coderabbit.yaml or .coderabbit.yml.
geminiGemini Code Assist: the comment @gemini-code-assist. Also offered when the repository holds .gemini/.
capyCapy: the comment @capy review. Also offered when the repository holds .capy/.
replicasReplicas: the comment /replicas run code-review.
claudeClaude Code Review: the comment @claude review. Also offered when the repository holds REVIEW.md.
cubiccubic: the comment @cubic-dev-ai review this PR. Also offered when the repository holds cubic.yaml.
sourcerySourcery: the comment @sourcery-ai review. Also offered when the repository holds .sourcery.yaml.
qodoQodo: the comment /agentic_review. Also offered when the repository holds .pr_agent.toml.
amazon-qAmazon Q Developer: the comment /q review.
ellipsisEllipsis: the comment @ellipsis-dev review. Also offered when the repository holds .ellipsis/code-review.yaml or ellipsis.yaml.
macroscopeMacroscope: the comment @macroscope-app review.
korbitKorbit: the comment /korbit-review. Also offered when the repository holds .korbit/.
entelligenceEntelligence: the comment @entelligence review.

What is rejected

Personal settings have no place in a repository's file and are reported as problems: enabled, repoRules, hiddenAuthors, layout and display switches, the keyboard shortcut, Enterprise hosts, the repoConfigs choice itself and the AI settings. A file with any problem is not applied at all; the popup lists the problems with their path in the file (customCategories[1].icon, reviewBots[0], line 3, column 9 for a YAML error) so they can be fixed in one pass. Keys Geld does not know are ignored on purpose.

How it is applied

Hiding is Geld's whole point, which makes a repository config an attack surface: a *.ts pattern in a compromised repository would hide a backdoor from its reviewers. So the file is only applied when the reviewer allows it (the Repository configs setting: always, ask once per repository, the default, or never), files it hides are counted and listed exactly like the ones the reviewer's own patterns hide, and the popup names whose config is in use. Files are fetched through the reviewer's own GitHub session, so private repositories work with no extra permission, and cached for half an hour. Repositories that mark files linguist-generated in .gitattributes feed the Generated category the same way, with nothing to configure.

Missing a key or a bot? Open an issue (opens in a new tab).