Skip to main content

Configuration Files

You can configure our tool using either TOML or YAML format. To do so, create a file named zenable_config.toml or zenable_config.yaml in any directory of your repository.

TOML Example

[pr_reviews]
skip_filenames = ["foo.txt", "bar.txt", "*.log", "**/*.tmp", "test/**/*.spec.js"]
skip_branches = ["internal/*"]

[pr_reviews.reactions]
taking_a_look = true  # Emoji reaction while review is in progress (default: "eyes" for 👀)

[pr_reviews.comments]
no_findings = true    # Enable "Nice work" comment when no issues found (default: true)

YAML Example

pr_reviews:
  skip_filenames:
    - foo.txt
    - bar.txt
    - "*.log"
    - "**/*.tmp"
    - "test/**/*.spec.js"
  skip_branches:
    - internal/*
  reactions:
    taking_a_look: true  # Emoji reaction while review is in progress (default: true)
  comments:
    no_findings: true    # Enable "Nice work" comment when no issues found (default: true)
Both formats are supported, choose the one that best fits your workflow.

Configuration Options

skip_filenames

List of additional filenames or glob patterns to skip. This field accepts a list (array) of patterns and works like gitignore, including support for negation patterns.
A standard list of lock files will automatically be added to the beginning of your configuration.
Supports:
  • Exact filename matches (e.g., "package-lock.json")
  • Glob patterns (e.g., "**/*.rbi", "foo/**/*.pyc")
  • Negation patterns with ! prefix (e.g., "!keep-this.json")
  • *.log - Skip all log files in any directory
  • **/*.tmp - Skip all .tmp files in any directory (recursive)
  • src/**/*.test.js - Skip all .test.js files under src/ directory
  • docs/*.md - Skip markdown files directly in docs/ directory
  • build/* - Skip all files directly in build/ directory
  • **/node_modules/** - Skip all files in any node_modules directory
  • example.py - Skip files named example.py in any directory
  • **/example.tmp - Skip files named example.tmp in any directory (i.e. the same as example.tmp)
  • /example.py - Skip example.py only in the root directory
Negation patterns start with ! and allow you to include files that would otherwise be skipped. Order matters - the last matching pattern wins.Skip all log files except important.log
[pr_reviews]
skip_filenames = ["*.log", "!important.log"]
Skip all files in build/ except those in build/keep/
[pr_reviews]
skip_filenames = ["build/**/*", "!build/keep/**/*"]
Escaping files that literally start with !
# TOML requires double backslash
skip_filenames = ["\\!important.txt"]
# YAML with a single backslash
skip_filenames:
  - \!important.txt
To skip files that literally start with ! (fairly rare), be sure to escape the exclamation mark appropriately:
  • TOML requires a double backslash "\\!filename.txt"
  • YAML uses a single backslash \!filename.txt

preflight

Preflight lets you optionally skip reviews based on static analysis findings.
  • enabled: Whether to enable preflight. (default: false)
  • max_changed_lines: Maximum total changed lines allowed before skipping the review. (default: 2500)
[pr_reviews.preflight]
enabled = true
max_changed_lines = 500
pr_reviews:
  preflight:
    enabled: true
    max_changed_lines: 500

pr_quality_filter

PR Quality Filter lets you optionally skip reviews based on the quality of the PR. We measure the PR quality based on analysis of the whole PR and the generated review. We measure multiple dimensions of quality, such as code quality, architecture quality, testing quality, documentation quality, security quality, and maintainability. This generates a final overall quality score for the PR, which is used to determine if the PR review will be sent or not. Skip reviews with quality score below the threshold can be a useful way to skip reviews on pr that are not fully done, and reduce the noise in your PRs.
  • enabled: Whether to enable pr_quality_filter. (default: false)
  • quality_threshold: The minimum quality score required to post a review. Valid values are between 0 and 1. (default: 0.5)
[pr_reviews.pr_quality_filter]
enabled = true
quality_threshold = 0.5
pr_reviews:
  pr_quality_filter:
    enabled: true
    quality_threshold: 0.5

skip_branches

List of branches to skip. You can use python regex to match the branch names. We will check all the patterns in the list, if any pattern match, the PR opened in that branch will be skipped.

reactions

Configuration section for controlling which reactions are added during reviews. This allows you to enable or disable specific reactions that the reviewer generates.

reactions.taking_a_look

Controls the “eyes” emoji reaction (👀) that is added at the start of a review. The reaction is automatically removed once the review is complete. Default: true (👀 reaction is added) Examples:
[pr_reviews.reactions]
taking_a_look = true      # Use 👀 reaction (default)
# or
taking_a_look = false     # Disable reaction
[pr_reviews.reactions]
taking_a_look = false
pr_reviews:
  reactions:
    taking_a_look: false
[pr_reviews.reactions]
taking_a_look = true  # Use 👀 reaction (default)
pr_reviews:
  reactions:
    taking_a_look: true  # Use 👀 reaction (default)

comments

Configuration section for controlling which comments are posted during reviews. This allows you to enable or disable specific informational comments that the reviewer generates.

comments.no_findings

When set to true, posts the “Nice work! 😎” comment when no issues are found in the PR. Set to false to disable this comment - when disabled and there are no findings, no review comment will be posted at all. Default: true (comment is posted)
These settings only affect informational comments. Reviews with actual findings or suggestions will always be posted regardless of these settings.
[pr_reviews.reactions]
taking_a_look = false

[pr_reviews.comments]
no_findings = false
pr_reviews:
  reactions:
    taking_a_look: false
  comments:
    no_findings: false

findings

Control the behavior for each comment in the PR review based on different labels. Each review comment is classified into one of the following labels:
  • Bug
  • Readability
  • Performance
  • Complexity
  • Security
  • Inconsistency
  • Accessibility
  • Mistake
  • Other

findings.<label>

For each label you can configure the behavior of the comment.

findings.<label>.hide

Set to true to hide all the comments with the specified label, false to show it. Default: false (comment is posted)
[pr_reviews.findings]
bug = { hide = true }
readability = { hide = true }
pr_reviews:
  findings:
    bug:
      hide: true
    readability:
      hide: true

Default Configuration

By default, all review reactions and comments are enabled:
[pr_reviews.reactions]
taking_a_look = true

[pr_reviews.comments]
no_findings = true

[pr_reviews.findings]
bug = { hide = false }
readability = { hide = false }
performance = { hide = false }
complexity = { hide = false }
security = { hide = false }
inconsistency = { hide = false }
accessibility = { hide = false }
mistake = { hide = false }
other = { hide = false }
Preflight defaults:
[pr_reviews.preflight]
enabled = true
max_changed_lines = 2500
PR Quality Filter defaults:
[pr_reviews.pr_quality_filter]
enabled = true
quality_threshold = .5
The following files are prepended to your skip file configuration by default:
conda-lock.yml
bun.lock
go.mod
requirements.txt
uv.lock
.terraform.lock.hcl
Gemfile.lock
package-lock.json
yarn.lock
composer.lock
poetry.lock
pdm.lock
Cargo.lock
go.sum
Package.resolved
Podfile.lock
mix.lock
*.ico
*.jpeg
*.jpg
*.png
*.svg
By default, no branches are skipped.

Troubleshooting

If you’re having issues with the GitHub or GitLab reviewers, try the following:
  • Check that you only have one configuration file in your repository, either zenable_config.toml or zenable_config.yaml. If you have multiple in different directories, the reviewer will fail to load the configuration and will use the default configuration.
  • Check that the file is a valid TOML or YAML file and that the structure is correct.
  • The skip_branches option uses python regex to match the branch names. Check that the regex is correct.
  • If any of these solutions don’t work, you can contact our support team at support@zenable.io.