— Sri Rang, Solutions Architect @ Qodo
Per-repo, version-controlled
alongside the code
Org-wide governance
overrides repo rules
- title: "Work item must be linked in the PR description"
objective: "Ensure every PR is traceable to a work item"
success_criteria: "PR description contains AB#1234"
failure_criteria: "No AB# reference found in the PR description"
compliance_label: true
category: "traceability"
external_id: "ORG-POLICY-001"
- title: "No secrets or connection strings in committed code"
compliance_label: true
category: "security"
severity: "critical"
external_id: "ORG-POLICY-002"
.pr_agent.toml:
[config]
add_repo_metadata = true
add_repo_metadata_file_list = [".qodo/rules.yaml"]
On the next PR, Qodo:
.qodo/rules.yaml — no LLM step| Constraint | Detail |
|---|---|
File must end in .yaml or .yml |
.json, .toml, .md not picked up |
| YAML list at the top level | Dict at root → skipped with warning |
title is the only required field |
All other fields default |
compliance_label: true adds a blocking label |
Defaults to false |
enable_rules_platform: true overrides file rules |
Platform rules replace repo rules entirely |
| Without sync | With sync |
|---|---|
| Re-reports the same findings on every push | Tracks new vs. still open across pushes |
| Pre-PR findings lost when PR opens | Surfaced in the PR review automatically |
| No record of accepted/dismissed suggestions | Tracked per finding; feeds impact metrics |
| Compliance statistics unavailable | Captured on merge |
| No workspace analytics | Aggregate trends across repos and teams |
Required
[qodo_platform]
enable_findings_sync = true
[azure_devops_server]
pr_commands = ["/agentic_review"]
push_commands = ["/agentic_review"]
Optional — control which findings appear inline:
[review_agent]
inline_comments_severity_threshold = 2 # 1=informational 2=remediation_recommended 3=action_required
comments_location_policy = "both" # "inline" | "summary" | "both"
Browse, filter, and triage all findings across repos — by severity, category, state, and PR.
Aggregate trends over time — fix rates, top violation categories, per-team and per-repo breakdowns.
[azure_devops_server]
push_commands = ["/agentic_review"]
[review_agent]
enable_incremental_review = false
Pros - Always shows the complete picture of open findings - No dependency on previous review state
Cons - Re-reports findings the developer already saw - Higher LLM cost per push - Noisy on PRs with many small commits
Best for: one-off audits on significant PRs, not daily pushes.
[azure_devops_server]
push_commands = ["/agentic_review"]
[review_agent]
enable_incremental_review = true
persistent_comment = true
[qodo_platform]
enable_findings_sync = true
Pros - Focuses only on what changed since the last review - Developers see new findings, not repeats - Lower LLM cost per push
Requires findings persistence — if a prior review failed, the incremental focus may be incomplete.
Incremental — less noise,
lower cost, faster feedback loop
Full re-review — complete
picture, no state dependency
[azure_devops_server]
feedback_on_draft_pr = false
When false, Qodo skips automatic review on draft PRs entirely.
Manual /agentic_review is still available on demand.
Enable suppression when your team uses drafts as genuine WIP — code that isn't ready for feedback.
Keep it enabled when your team uses drafts for early collaboration and expects feedback during drafting.
| Pro | Con |
|---|---|
| No premature feedback on WIP | Developers lose early signal |
| Saves LLM cost | Draft → never-converted = never reviewed |
| Cleaner PR thread | Relies on developer discipline for manual /agentic_review |
Team treats drafts as genuine WIP.
Review only fires when PR is marked ready.
Team uses drafts for early collaboration.
Pair with incremental review to reduce noise.
Runs automatically if pr_commands includes /agentic_review:
[azure_devops_server]
pr_commands = ["/agentic_review"]
YAML rules file or platform rules must be configured — without rules, the statistics are empty.
Statistics are log events, not a dashboard. Your team must consume the Qodo analytics pipeline or export to a BI tool.
Qodo finds linked work items from three sources:
AB#123, full URLs, #1231234-fix-auth-flow → work item 1234Read separately from the description — if you only fill the description, you're leaving signal on the table.
| Weak | Strong |
|---|---|
| "The API should be fast" | "Must respond within 200ms under normal load" |
| "Handle errors properly" | "Must return HTTP 400 with a structured error body on missing fields" |
| "Make it secure" | "JWT signatures must be validated before granting access" |
Good:
- Return HTTP 404 when the resource does not exist
- Include an error_code field on all failures
- Use parameterized statements for all DB queries
Avoid:
- Handle errors correctly, return the right status codes,
and ensure no SQL injection is possible
Feature is on by default. To verify explicitly:
[pr_compliance]
require_ticket_analysis_review = true
[review_agent]
requirements_gap_enabled = true
No work item linked or referenced → ticket compliance pass is skipped entirely.
| Pitfall | Impact |
|---|---|
| No acceptance criteria + vague description | Zero compliance rules generated |
| No linked or referenced work item | Ticket compliance pass skipped entirely |
| Description longer than 10,000 characters | Truncated — put key constraints in Acceptance Criteria |
| Ambiguous or compound criteria | Inconsistent rule extraction |
/agentic_describe — What It GeneratesReplaces vague titles
like "fix stuff"
What changed and why
Role of each changed file
No comment spam on push
/agentic_describe — Configuration[azure_devops_server]
pr_commands = [
"/agentic_describe",
"/agentic_review",
]
Keep publish_as_comment = true (default) under [pr_agentic_description] on ADO.
ADO does not support collapsible sections — writing to the PR body
makes large PRs very long.
/agentic_describe — Reviewer Impact/agentic_describe — PitfallPitfall: push_commands includes /agentic_describe by default — description updates on every push. Large PRs can produce a long persistent comment.
Mitigation: remove from push_commands if per-push updates are noisy:
[azure_devops_server]
push_commands = ["/agentic_review"]
Keep publish_as_comment = true under [pr_agentic_description] on ADO — no collapsible sections means writing to the PR body makes large PRs very long.
Developer replies to a Qodo finding comment.
Agent answers in context — knows exactly what was flagged and why.
Developer posts /qodo <question>.
Agent answers questions about the diff, code, or findings.
Access: full PR diff + published findings. No access to external systems (Jira, ADO Boards, etc.).
[chat_agent]
enabled = true
That's it. No additional setup needed for Azure DevOps.
| Pitfall | Mitigation |
|---|---|
| Off by default — easy to miss | Explicitly add chat_agent.enabled = true |
| Triggered by any reply to bot comments | Agent may respond to human discussion threads unexpectedly |
| Adds LLM calls per reply | Monitor usage if cost is a concern |
chat_agent.enabled = true/agentic_review on the PR.pr_agent.toml[config]
add_repo_metadata = true
add_repo_metadata_file_list = [".qodo/rules.yaml"]
[azure_devops_server]
pr_commands = ["/agentic_describe", "/agentic_review"]
push_commands = ["/agentic_review"]
feedback_on_draft_pr = false
[review_agent]
enable_incremental_review = true
persistent_comment = true
inline_comments_severity_threshold = 2
[qodo_platform]
enable_findings_sync = true
[pr_compliance]
require_ticket_analysis_review = true
[chat_agent]
enabled = true