-
-
Notifications
You must be signed in to change notification settings - Fork 1.8k
Expand file tree
/
Copy pathconfiguration.toml
More file actions
535 lines (492 loc) · 27 KB
/
Copy pathconfiguration.toml
File metadata and controls
535 lines (492 loc) · 27 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
# Important: This file contains all available configuration options.
# Do not copy this entire file to your repository configuration.
# Your repository configuration should only include options you wish to override from the defaults.
[config]
# models
model="gpt-5.6"
fallback_models=["gpt-5.6-terra"]
#model_reasoning="gpt-5.6-terra" # dedicated reasoning model for self-reflection
#model_weak="gpt-5.6-luna" # optional, a weaker model to use for some easier tasks
# CLI
git_provider="github"
publish_output=true
publish_output_progress=true
progress_gif_url="" # optional, override for the progress loading gif url (example: 'https://.../spinner.gif').
progress_gif_width=48 # optional, width (in px) of the progress loading gif.
verbosity_level=0 # 0,1,2
use_extra_bad_extensions=false
# Log
log_level="DEBUG"
# Configurations
use_repo_settings_file=true
use_global_settings_file=true
extra_config_url="" # optional URL or path to an additional .pr_agent.toml merged before the repo-local config; also settable via --extra_config_url or PR_AGENT_EXTRA_CONFIG_URL. See docs/docs/usage-guide/configuration_options.md#external-configuration-url.
disable_auto_feedback = false
enable_auto_approval = false # when true, /review may auto-approve a PR via auto_approve_logic(); that caller is currently commented out
ai_timeout=120 # 2 minutes
retry_same_model_on_timeout = true # when false, a timed-out call is not retried on the same model and moves on to fallback_models
# num_retries = 0 # per-call retries inside the completion client itself; unset keeps the client's default. These multiply the handler's own retry attempts
skip_keys = []
custom_reasoning_model = false # when true, disables system messages and temperature controls for models that don't support chat-style inputs
response_language="en-US" # Language locales code for PR responses in ISO 3166 and ISO 639 format (e.g., "en-US", "it-IT", "zh-CN", ...)
repo_context_files = ["AGENTS.md"] # Repository-relative files (e.g. AGENTS.md, CLAUDE.md) to include as AI prompt context; set to [] to disable
repo_context_from_default_branch = true # Read repo context files from the repository default branch (trusts only default-branch content). Set to false to read from the PR target branch instead.
repo_context_max_lines = 500 # Maximum total rendered lines for repo context, including wrapper tags
# token limits
max_description_tokens = 500
max_commits_tokens = 500
max_model_tokens = 32000 # Limits the maximum number of tokens that can be used by any model, regardless of the model's default capabilities.
custom_model_max_tokens=-1 # for models not in the default list
max_output_tokens = 0 # Output token limit sent as max_tokens on model calls; 0 = unset (the provider's own default applies)
model_token_count_estimate_factor=0.3 # factor to increase the token count estimate, in order to reduce likelihood of model failure due to too many tokens - applicable only when requesting an accurate estimate.
# patch extension logic
patch_extension_skip_types =[".md",".txt"]
allow_dynamic_context=true
max_extra_lines_before_dynamic_context = 10 # will try to include up to 10 extra lines before the hunk in the patch, until we reach an enclosing function or class
patch_extra_lines_before = 5 # Number of extra lines (+3 default ones) to include before each hunk in the patch
patch_extra_lines_after = 1 # Number of extra lines (+3 default ones) to include after each hunk in the patch
secret_provider="" # "" (disabled), "google_cloud_storage", or "aws_secrets_manager" for secure secret management
cli_mode=false
output_relevant_configurations=false
output_run_details=false # if true, append an agent run details section (model, tokens, time cost, AI calls) to generated PR comments
output_run_cost=false # if true, collect estimated LiteLLM API cost and include it inside the enabled run details section
large_patch_policy = "clip" # "clip", "skip"
duplicate_prompt_examples = false
# Persistent inline comments (issue #2037): when true, the GitHub, GitLab, and Azure DevOps providers
# fingerprint each inline comment, embed the fingerprint as an HTML marker, and skip
# re-posting suggestions already present on the PR/MR across runs.
persistent_inline_comments = false
# seed
seed=-1 # set positive value to fix the seed (and ensure temperature=0)
temperature=0.2
# ignore logic
ignore_pr_title = ["^\\[Auto\\]", "^Auto"] # a list of regular expressions to match against the PR title to ignore the PR agent
ignore_pr_target_branches = [] # a list of regular expressions of target branches to ignore from PR agent when an PR is created
ignore_pr_source_branches = [] # a list of regular expressions of source branches to ignore from PR agent when an PR is created
ignore_pr_labels = [] # labels to ignore from PR agent when an PR is created
ignore_pr_authors = [] # authors to ignore from PR agent when an PR is created
ignore_repositories = [] # a list of regular expressions of repository full names (e.g. "org/repo") to ignore from PR agent processing
ignore_language_framework = [] # a list of code-generation languages or frameworks (e.g. 'protobuf', 'go_gen') whose auto-generated source files will be excluded from analysis
# Substring indicators used to skip bot users on webhook events. Currently consumed by
# the GitLab webhook (`is_bot_user`); other providers may adopt this list in future.
# The match is case-insensitive against the sender's display name. Overriding this
# setting REPLACES the default list — include the entries below in your override if
# you want to keep them (e.g. `["codium", "bot_", "bot-", "_bot", "-bot", "renovate"]`).
bot_user_indicators = ["codium", "bot_", "bot-", "_bot", "-bot"]
#
restricted_mode = false # when true, skip operations that require elevated permissions (e.g. pushing code to the repository)
is_auto_command = false # will be auto-set to true if the command is triggered by an automation
propagate_tool_errors = false # when true, a tool re-raises instead of swallowing an internal error, so a caller can tell a failed run from an empty one
enable_ai_metadata = false # will enable adding ai metadata
add_user_to_requests = false # send the current command and PR URL in the OpenAI-compatible "user" request field, for provider-side attribution of requests (e.g. OpenRouter "external_user")
reasoning_effort = "medium" # "none", "minimal", "low", "medium", "high", "xhigh", "max"
# extended thinking for Claude reasoning models
enable_claude_extended_thinking = false # Set to true to enable extended thinking feature
extended_thinking_budget_tokens = 2048
extended_thinking_max_output_tokens = 4096
# Adaptive thinking for Claude Opus 4.7/4.8 and Claude 5 models. When enabled,
# these models receive thinking={"type": "adaptive"} and an output_config effort.
# Do not add adaptive-only models to claude_extended_thinking_models_override;
# when both features are enabled, adaptive thinking takes precedence.
enable_claude_adaptive_thinking = false
# Optional: override the built-in list of Claude models that receive the extended-thinking payload.
# When non-empty, this list fully replaces the built-in defaults (see CLAUDE_EXTENDED_THINKING_MODELS
# in pr_agent/algo/__init__.py). Leave empty to use the defaults.
claude_extended_thinking_models_override = []
# Extract issue number from PR source branch name (e.g. feature/1-auth-google -> issue #1). When true, branch-derived
# issue URLs are merged with tickets from the PR description for compliance. Set to false to restore description-only behaviour.
# Note: Branch-name extraction is GitHub-only for now; other providers planned for later.
extract_issue_from_branch = true
# Optional: custom regex with exactly one capturing group for the issue number (validated at runtime; falls back
# to default if missing). If empty, uses default pattern: first 1-6 digits at start of branch or after a slash,
# followed by hyphen or end (e.g. feature/1-test, 123-fix). GitHub only; other providers planned for later.
branch_issue_regex = ""
[pr_reviewer] # /review #
# enable/disable features
require_score_review=false
require_tests_review=true
require_estimate_effort_to_review=true
require_can_be_split_review=false
require_security_review=true
require_estimate_contribution_time_cost=false
require_todo_scan=false
require_ticket_analysis_review=true
# Opt-in structured assessment fields. Each adds one field to the review output and to the model's output schema.
require_risk_assessment=false # ask the model for an overall risk level (low/medium/high)
require_merge_recommendation=false # ask the model for a merge recommendation (safe_to_merge/merge_with_caution/changes_required)
require_priority_files=false # ask the model which files a human should inspect first
# general options
publish_output_no_suggestions=true # Set to "false" if you only need the reviewer's remarks (not labels, not "security audit", etc.) and want to avoid noisy "No major issues detected" comments.
persistent_comment=true
# Visible base heading for full and incremental review comments. Identity is tracked separately.
review_heading = "PR Reviewer Guide"
persistent_finding_state=true # Persist review finding state across complete review runs.
inline_key_issues=false
extra_instructions = ""
num_max_findings = 3
final_update_message = true
# review labels
enable_review_labels_security=true
enable_review_labels_effort=true
# specific configurations for incremental review (/review -i)
require_all_thresholds_for_incremental_review=false
minimal_commits_for_incremental_review=0
minimal_minutes_for_incremental_review=0
enable_intro_text=true
enable_help_text=false # Determines whether to include help text in the PR review. Enabled by default.
enable_review_coverage_footer=true
# large-diff chunking (opt-in). When the token budget leaves files out of the review, split the diff
# into chunks, review each chunk, and merge the per-chunk results into one review.
enable_large_pr_chunking=false
max_number_of_calls=3 # maximum number of chunk review calls, used only when enable_large_pr_chunking is true
[pr_description] # /describe #
publish_labels=false
add_original_user_description=true
generate_ai_title=false
use_bullet_points=true
extra_instructions = ""
enable_pr_type=true
enable_pr_description=true # adds a section with an AI-generated summary of the PR changes
final_update_message = true
enable_help_text=false
enable_help_comment=false
enable_pr_diagram=true # adds a section with a diagram of the PR changes
pr_diagram_direction='adaptive' # 'adaptive', 'LR', 'TD'. 'adaptive' picks the direction from the shape of the diagram
pr_diagram_direction_threshold=5 # with 'adaptive', a chain longer than this many nodes is drawn top-down
# describe as comment
publish_description_as_comment=false
publish_description_as_comment_persistent=true
## changes walkthrough section
enable_semantic_files_types=true
collapsible_file_list='adaptive' # true, false, 'adaptive'
collapsible_file_list_threshold=6
file_table_collapsible_open_by_default=false
inline_file_summary=false # false, true, 'table'
# markers
use_description_markers=false
enable_large_pr_handling=true
include_generated_by_header=true
#custom_labels = ['Bug fix', 'Tests', 'Bug fix with tests', 'Enhancement', 'Documentation', 'Other']
max_ai_calls=4
async_ai_calls=true
[pr_questions] # /ask #
enable_help_text=false
use_conversation_history=true
# Set the plain-text heading for top-level /ask answers; provider-specific presentation is added automatically.
ask_heading = "Ask"
# Enable to let /ask_line resolve the review thread when the LLM judges the
# issue addressed. Note: also resolves threads started by human reviewers.
resolve_threads=false
extra_instructions = ""
[pr_code_suggestions] # /improve #
commitable_code_suggestions = false
dual_publishing_score_threshold=-1 # -1 to disable, [0-10] to set the threshold (>=) for publishing a code suggestion both in a table and as committable
focus_only_on_problems=true
#
extra_instructions = ""
# Visible base heading for summary-table /improve comments. Identity is tracked separately.
suggestions_heading = "PR Code Suggestions"
enable_help_text=false
enable_chat_text=false
persistent_comment=true
max_history_len=4
publish_output_no_suggestions=true
enable_suggestions_coverage_footer=true # show when failed analysis chunks make the suggestions incomplete
# suggestions scoring
suggestions_score_threshold=0 # [0-10]| recommend not to set this value above 8, since above it may clip highly relevant suggestions
new_score_mechanism=true
new_score_mechanism_th_high=9
new_score_mechanism_th_medium=7
# params for '/improve --extended' mode
auto_extended_mode=true
num_code_suggestions_per_chunk=3
# Maximum suggestions retained per file after all chunks are merged; 0 disables the cap.
max_suggestions_per_file = 0
max_number_of_calls = 3
parallel_calls = true
final_clip_factor = 0.8
decouple_hunks = false
# self-review checkbox
demand_code_suggestions_self_review=false # add a checkbox for the author to self-review the code suggestions
code_suggestions_self_review_text= "**Author self-review**: I have reviewed the PR code suggestions, and addressed the relevant ones."
approve_pr_on_self_review=false # if true, the PR will be auto-approved after the author clicks on the self-review checkbox
fold_suggestions_on_self_review=true # if true, the code suggestions will be folded after the author clicks on the self-review checkbox
[pr_custom_prompt] # /custom_prompt #
prompt = """\
The code suggestions should focus only on the following:
- ...
- ...
...
"""
suggestions_score_threshold=0
num_code_suggestions_per_chunk=3
self_reflect_on_custom_suggestions=true
enable_help_text=false
[pr_add_docs] # /add_docs #
extra_instructions = ""
docs_style = "Sphinx" # "Google Style with Args, Returns, Attributes...etc", "Numpy Style", "Sphinx Style", "PEP257", "reStructuredText"
file = "" # in case there are several components with the same name, you can specify the relevant file
class_name = "" # in case there are several methods with the same name in the same file, you can specify the relevant class name
[pr_update_changelog] # /update_changelog #
push_changelog_changes=false
extra_instructions = ""
add_pr_link=true
skip_ci_on_push=true
[pr_analyze] # /analyze #
enable_help_text=true
[pr_test] # /test #
extra_instructions = ""
testing_framework = "" # specify the testing framework you want to use
num_tests=3 # number of tests to generate. max 5.
avoid_mocks=true # if true, the generated tests will prefer to use real objects instead of mocks
file = "" # in case there are several components with the same name, you can specify the relevant file
class_name = "" # in case there are several methods with the same name in the same file, you can specify the relevant class name
enable_help_text=false
[pr_improve_component] # /improve_component #
num_code_suggestions=4
extra_instructions = ""
file = "" # in case there are several components with the same name, you can specify the relevant file
class_name = "" # in case there are several methods with the same name in the same file, you can specify the relevant class name
[pr_help] # /help #
force_local_db=false
num_retrieved_snippets=5
[pr_config] # /config #
[pr_help_docs]
repo_url = "" #If not overwritten, will use the repo from where the context came from (issue or PR)
repo_default_branch = "main"
docs_path = "docs"
exclude_root_readme = false
supported_doc_exts = [".md", ".mdx", ".rst"]
enable_help_text=false
[github]
# The type of deployment to create. Valid values are 'app' or 'user'.
deployment_type = "user"
ratelimit_retries = 5
base_url = "https://api.github.com"
publish_inline_comments_fallback_with_verification = true
try_fix_invalid_inline_comments = true
app_name = "pr-agent"
ignore_bot_pr = true
publish_as_check_run = false # when true, publish review/description/improve output as GitHub Checks instead of PR comments
[github_action_config]
# auto_review = true # set as env var in .github/workflows/pr-agent.yaml
# auto_describe = true # set as env var in .github/workflows/pr-agent.yaml
# auto_improve = true # set as env var in .github/workflows/pr-agent.yaml
# pr_actions = ['opened', 'reopened', 'ready_for_review', 'review_requested']
# handle_push_trigger = false # when true, handle synchronize events using push_commands (falls back to github_app.handle_push_trigger)
# push_trigger_ignore_bot_commits = true
# push_trigger_ignore_merge_commits = true
# push_commands = ['/describe', '/review'] # defaults mirror github_app.push_commands
# review_states = ['changes_requested'] # states that trigger review_commands after a submitted GitHub review
# review_author_types = ['User'] # review.user.type values allowed to trigger review_commands
# review_commands = [] # empty by default; falls back to github_app.review_commands when unset
[github_app]
# these toggles allows running the github app from custom deployments
bot_user = "github-actions[bot]"
override_deployment_type = true
# settings for "pull_request" event
handle_pr_actions = ['opened', 'reopened', 'ready_for_review']
feedback_on_draft_pr = false
# A submitted GitHub review can optionally trigger these commands. The empty default preserves current behavior.
review_states = ["changes_requested"]
review_author_types = ["User"]
review_commands = []
# settings for "pull_request" event with "synchronize" action - used to detect and handle push triggers for new commits
handle_push_trigger = false
push_trigger_ignore_bot_commits = true
push_trigger_ignore_merge_commits = true
push_trigger_wait_for_initial_review = true
push_trigger_pending_tasks_backlog = true
push_trigger_pending_tasks_ttl = 300
push_commands = [
"/describe",
"/review",
]
[gitlab]
url = "https://gitlab.com"
expand_submodule_diffs = false
feedback_on_draft_pr = false
# Post the /review summary as a resolvable thread (discussion) instead of a plain note.
publish_review_as_thread = false
# Post the /improve suggestions comment as a resolvable thread (discussion) instead of a plain note.
publish_improve_as_thread = false
# When pr_code_suggestions.commitable_code_suggestions is true, queue each suggestion as a GitLab draft
# note and publish them all together in one batch (like GitLab's own "start a review" flow) instead of
# posting each as its own live discussion - and its own notification - as soon as it's created.
publish_code_suggestions_as_review = false
# Resolve the bot's own inline threads that a later push left on an outdated diff version.
resolve_outdated_inline_threads = false
handle_push_trigger = false
push_commands = [
"/describe",
"/review",
]
# Configure SSL validation for GitLab. Can be either set to the path of a custom CA or disabled entirely.
# ssl_verify = true
# Auto-trigger commands when the bot is assigned as a reviewer on an MR
handle_reviewer_assignment = false
reviewer_commands = [
"/review",
]
[gitea]
url = "https://gitea.com"
# Optional user-facing base URL used to build links published in comments, for
# self-hosted instances where the API is reached via an internal address but
# users browse a different external URL, or where the server's own ROOT_URL is
# misconfigured. Defaults to `url` when it differs from the shipped default
# above, else derived from the PR's html_url.
# web_url = ""
handle_push_trigger = false
push_commands = [
"/describe",
"/review",
]
[bitbucket_app]
avoid_full_files = false
request_timeout = 30 # positive seconds for connection and response-read inactivity timeouts
[local]
# LocalGitProvider settings - uncomment to use paths other than default
# description_path= "path/to/description.md"
# review_path= "path/to/review.md"
# improve_path= "path/to/improve.md"
[gerrit]
# both are required: the gerrit webhook endpoint rejects every call until they are set
webhook_username = ""
webhook_password = ""
# endpoint to the gerrit service
# url = "ssh://gerrit.example.com:29418"
# user for gerrit authentication
# user = "ai-reviewer"
# patch server where patches will be saved
# patch_server_endpoint = "http://127.0.0.1:5000/patch"
# token to authenticate in the patch server
# patch_server_token = ""
[bitbucket_server]
# URL to the BitBucket Server instance
# url = "https://git.bitbucket.com"
url = ""
[litellm]
# use_client = false
# drop_params = false
enable_callbacks = false
success_callback = []
failure_callback = []
service_callback = []
turn_off_message_logging = false # set true to keep prompt/response content (the whole PR diff) out of callback payloads; strongly recommended with the "otel" callback
# Optional: forward a fixed custom_llm_provider to LiteLLM, so a raw hosted model id
# (e.g. "claude-sonnet-4-5") reaches the provider unchanged instead of being rewritten
# by LiteLLM's prefix inference. Empty = let LiteLLM infer the provider from the model name.
custom_llm_provider = ""
# Force streaming when the request matches this provider AND its api_base contains one of the
# substrings below. Some OpenAI-compatible endpoints return a response that LiteLLM cannot
# normalize in non-streaming mode. Both must be set for the workaround to apply.
force_streaming_custom_llm_provider = ""
force_streaming_api_base_substrings = []
callback_timeout_seconds = 30 # max seconds to wait for pending litellm callbacks to flush before exiting
# Application inference profile ARN for classic `bedrock/` calls through the `bedrock-runtime` APIs.
# Not used by `bedrock_mantle/`, which uses Projects for cost allocation.
# model_id = ""
cache_control_injection_points = [] # Optional: enable Anthropic prompt caching via LiteLLM, e.g. [{location = "message", role = "system"}] (https://docs.litellm.ai/docs/tutorials/prompt_caching)
[openrouter]
# OpenRouter provider routing, reasoning control and output cap. These apply only
# to models addressed as "openrouter/...". The API key and api_base live in
# .secrets.toml (or the openrouter__key env var); the keys below are non-secret.
# Refs: https://openrouter.ai/docs/guides/routing/provider-selection
# https://openrouter.ai/docs/guides/best-practices/reasoning-tokens
provider_only = [] # restrict routing to these upstream providers only, a hard allowlist (e.g. ["z-ai"]); empty = OpenRouter default routing
provider_order = [] # preferred provider order; ignored when provider_only is set; empty = unset
allow_fallbacks = true # when provider_order is set, allow routing beyond the listed providers
# Invalid reasoning_effort values are warned about and treated as unset.
# Empty inherits config.reasoning_effort for models in SUPPORT_REASONING_EFFORT_MODELS.
# Valid values: "none", "minimal", "low", "medium", "high", "xhigh", "max".
# OpenRouter normalizes "max" to "xhigh" to match LiteLLM 1.98.0.
# Model-specific support varies; mandatory reasoning models reject "none".
reasoning_effort = ""
# A positive value overrides global effort and non-none OpenRouter-specific efforts.
# Explicit openrouter.reasoning_effort = "none" keeps reasoning disabled, except on
# Grok 4.5/4.6: there "none" is clamped to the lowest supported
# effort first, so a positive budget wins over it.
# Some providers require max_tokens to be greater than the reasoning budget.
reasoning_max_tokens = 0
max_tokens = 0 # hard cap on completion tokens for the request; 0 = unset
[otel]
# Keys map to settings.get("OTEL.*") via section-key dot notation.
is_enabled = false # disabled by default; set to true to enable telemetry
exporter_type = "console" # "console", "otlp", or "none"
service_name = "pr-agent"
environment = "development" # "development", "staging", "production", etc.
otlp_timeout = 3 # seconds; hard deadline per OTLP export call (incl. retries). Bounds CLI-exit/request stalls when the collector is unreachable; batches slower than this are dropped.
otlp_protocol = "http" # "http" (default; exporter ships with pr-agent) or "grpc" (requires the otel-grpc extra: pip install pr-agent[otel-grpc])
include_pr_url = false # set to true to attach PR URLs to spans (may expose private repo names)
include_error_details = false # set to true to attach exception messages and rejected-command text to spans (may expose PR URLs, repo names, or other request content)
[pr_similar_issue]
skip_comments = false
force_update_dataset = false
max_issues_to_scan = 500
vectordb = "pinecone" # options: "pinecone", "lancedb", "qdrant"
[pr_find_similar_component]
class_name = ""
file = ""
search_from_org = false
allow_fallback_less_words = true
number_of_keywords = 5
number_of_results = 5
[pinecone]
# fill and place in .secrets.toml
#api_key = ...
# environment = "gcp-starter"
[lancedb]
uri = "./lancedb"
[qdrant]
# fill and place credentials in .secrets.toml
# url = "https://YOUR-QDRANT-URL"
# api_key = "..."
[skills]
# Agent skills (SKILL.md) support: discovers SKILL.md files from the configured
# filesystem paths and injects their content into review/improve/describe and
# top-level /ask prompts.
# Sibling *.md files in the skill directory tree (e.g. references/guide.md) are
# inlined alongside SKILL.md. PR-Agent supports text-only skills: scripts/ and
# assets/ subdirectories are skipped because PR-Agent uses a single-shot model
# call (no tool-use loop) and cannot execute scripts or load binary assets on
# demand. Skills that depend on script execution will not work here.
# See https://github.com/The-PR-Agent/pr-agent/issues/2384
enabled = false
paths = [] # directories to scan recursively for "*/SKILL.md"; supports ~ and $VAR
max_skills_tokens = 8000 # token budget for the combined skills_context block
[best_practices]
content = ""
organization_name = ""
max_lines_allowed = 800
enable_global_best_practices = false
[auto_best_practices]
enable_auto_best_practices = true # public - general flag to disable all auto best practices usage
utilize_auto_best_practices = true # public - disable usage of auto best practices in the 'improve' tool
extra_instructions = "" # public - extra instructions to the auto best practices generation prompt
content = ""
max_patterns = 5 # max number of patterns to be detected
[artifacts]
# Enable artifact injection into tool prompts (off by default; auto-enabled when artifact_path input is set)
enable = false
# File path to the artifact (relative to GITHUB_WORKSPACE, or absolute)
artifact_path = ""
# Custom instructions appended after the artifact content (leave empty for a sensible default)
artifact_instructions = ""
# Label shown to the AI — defaults to the filename when empty
artifact_label = ""
# Which tools receive artifact context
target_tools = ["pr_reviewer", "pr_description", "pr_code_suggestions"]
# Max artifact size in characters (content is truncated if exceeded)
max_artifact_size = 50000
[asana]
request_timeout = 10 # seconds allowed for each Asana task API request
[azure_devops]
default_comment_status = "closed"
[azure_devops_server]
agent_identity = "" # empty: discover the identity from earlier agent comments on the PR
[push_outputs] # push tool outputs to external sinks without calling git-provider APIs (disabled by default)
enable = false
channels = [] # any of: "stdout", "file", "webhook", "slack". Nothing is emitted until a channel is listed here
file_path = "pr-agent-outputs/reviews.jsonl" # used by the "file" channel
webhook_url = "" # used by the "webhook" channel: generic JSON POST target. Must be an absolute https:// URL
slack_webhook_url = "" # used by the "slack" channel: a Slack Incoming Webhook URL. Must be an absolute https:// URL