Skip to content

feat(ci): AI PR review via You.com Inference Router (PR-Agent) - #99

Open
EdwardIrby wants to merge 9 commits into
mainfrom
feat/ai-pr-review-router
Open

EdwardIrby wants to merge 9 commits into
mainfrom
feat/ai-pr-review-router

Conversation

@EdwardIrby

@EdwardIrby EdwardIrby commented Sep 23, 2026 •

Copy link
Copy Markdown
Member

User description

🤖 AI PR reviews via the You.com Inference Router

Automated AI reviews on pull requests, running on our own You.com Inference Router instead of a third-party API (this mirrors .github/workflows/droid-review.yml, but reviews are grounded in our repo's own review guidelines at .agents/skills/review-guidelines/SKILL.md rather than Factory's directory).

The Inference Router speaks the OpenAI Chat Completions format, so Qodo Merge (PR-Agent) works with it directly — we only change the base URL, API key, and model name.

What this PR adds

One workflow file: .github/workflows/ai-pr-review.yml. It runs on every new PR and every push to an open PR, posting a review and a summary as PR comments:

  • /review via PR-Agent's auto_review — security, tests, effort estimate
  • /describe via auto_describe — PR summary comment
  • Repo review guidelines injected into the prompt via PR-Agent's native [skills] support (skills.enabled + skills.paths pointing directly at .agents/skills/review-guidelines/SKILL.md)
  • Concurrency-canceled per PR, same as Droid Auto Review

Configuration

Setting Value
Provider OpenAI-compatible via LiteLLM
Base URL https://api.you.com/v1
Auth secrets.YDC_API_KEY (production key from the API Keys page)
Model openai/deepseek-v4-flash
Review guidelines .agents/skills/review-guidelines/SKILL.md

Why this is simple

  • The endpoint is public, so GitHub's own runners can reach it. No self-hosted runner.
  • Only a production YDC API key saved as the YDC_API_KEY repo secret is needed.
  • GET https://api.you.com/v1/models lists the model IDs our account can use.
  • Env-var config verified against PR-Agent's Dynaconf loader (dotted SECTION.KEY env names; lists/booleans parse correctly) and the PR-Agent [skills] loader accepts a direct SKILL.md file path.

Things to watch

  • The router is in preview, so models and API behavior may change.
  • PR-Agent routes requests through LiteLLM — the model is written as openai/deepseek-v4-flash to force the OpenAI provider onto our base URL. If the first run errors, check whether the raw deepseek-v4-flash ID is needed instead.
  • PRs from forks don't receive repo secrets, so auto-review only runs for same-repo branches (external contributors would need the pull_request_target pattern later, similar to Droid's workflow_dispatch fallback).

Open questions

  1. Model — starting with deepseek-v4-flash for speed/cost; deepseek-v4-pro or qwen3.8-max for deeper reviews?
  2. Pilot repo — should we try it on one repo first, and if so, which one?
  3. Dogfooding — anything we want to measure (review quality, response time, cost) so this helps the Inference Router team too?

Refs: PR-Agent GitHub Action docs · Configuration reference


PR Type

Enhancement


Description

  • Add Auto Review workflow using You.com Inference Router

  • Support internal and external contributor review paths

  • Configure PR-Agent with high reasoning, fallback models, and review guidelines

  • Enable push-trigger re-reviews and run details reporting


Diagram Walkthrough

flowchart LR
  A["PR Event"] --> B{"Internal Contributor?"}
  B -- "Yes" --> C["PR-Agent Action<br/>(auto_review, describe, improve)"]
  B -- "No" --> D["workflow_dispatch<br/>(manual trigger)"]
  D --> E["PR-Agent CLI<br/>(describe, review, improve)"]
  C --> F["Review Comments"]
  E --> F
Loading

File Walkthrough

Relevant files
Enhancement
review.yml
Add Auto Review workflow with internal/external paths       

.github/workflows/review.yml

  • New GitHub Actions workflow for automated AI PR reviews
  • Handles internal PR events (opened, synchronize) and external manual
    dispatch
  • Uses You.com Inference Router via PR-Agent with high reasoning effort
  • Configures fallback models, review guidelines, and run cost details
+116/-0 


⚙️ Agent run details
  • Model: openai/deepseek-v4-flash
  • Tokens: 4,630 in / 745 out / 5,375 total
  • Time cost: 8.2s
  • AI calls: 1
  • Estimated API cost: unavailable (no calls could be priced)

@EdwardIrby
EdwardIrby requested a review from a team as a code owner September 23, 2026 22:48
@factory-droid

factory-droid Bot commented Sep 23, 2026 •

Copy link
Copy Markdown
Contributor

Droid encountered an error —— View job


Droid is reviewing code and running a security check…

@factory-droid

factory-droid Bot commented Sep 23, 2026 •

Copy link
Copy Markdown
Contributor

Droid encountered an error —— View job


Droid is reviewing code and running a security check…

@github-actions

github-actions Bot commented Sep 23, 2026 •

Copy link
Copy Markdown
Contributor

PR Reviewer Guide 🔍

(Review updated until commit b30dc0c)

Here are some key observations to aid the review process:

⏱️ Estimated effort to review: 2 🔵🔵⚪⚪⚪
🧪 No relevant tests
🔒 No security concerns identified
⚡ No major issues detected

⚙️ Agent run details
  • Model: openai/deepseek-v4-flash
  • Tokens: 4,959 in / 1,413 out / 6,372 total
  • Time cost: 138.6s
  • AI calls: 1
  • Estimated API cost: unavailable (no calls could be priced)
✅ Resolved findings

.github/workflows/ai-pr-review.yml:28

Security Concern

The production API key YDC_API_KEY is passed as an environment variable to the third-party action qodo-ai/pr-agent. If the action is compromised or logs environment variables, the key could be exposed. Consider using a more restricted token or auditing the action's behavior. Note: This is a common pattern but still a risk.

.github/workflows/ai-pr-review.yml:29

Potential Bug

The environment variable OPENAI.API_BASE contains a dot (.), which is not allowed in GitHub Actions environment variable names (only alphanumeric characters and underscores are permitted). This will cause the variable to be ignored or the step to fail, meaning the custom API base URL will not be set and the action will default to the OpenAI endpoint, breaking the integration with the You.com Inference Router. Use OPENAI_API_BASE (underscore) instead.

@factory-droid

factory-droid Bot commented Sep 23, 2026 •

Copy link
Copy Markdown
Contributor

Droid encountered an error —— View job


Droid is reviewing code and running a security check…

@factory-droid

factory-droid Bot commented Sep 23, 2026 •

Copy link
Copy Markdown
Contributor

Droid finished @EdwardIrby's task —— View job


Droid review complete. The PR adds a single GitHub Actions workflow for AI-powered PR review via the You.com Inference Router. The most critical issue is an invalid JSON format in SKILLS.PATHS (single quotes instead of double quotes) that will prevent the review-guidelines skill from loading — a core feature of this PR. Additionally, the workflow lacks a fork-PR guard present in the sibling droid-review.yml, causing auth failures on external contributor PRs, and pins a secret-handling third-party action to a mutable tag rather than a commit SHA.

@github-actions

Copy link
Copy Markdown
Contributor

Persistent review updated to latest commit c4b089e

Comment thread .github/workflows/ai-pr-review.yml Outdated
GITHUB_ACTION_CONFIG.AUTO_IMPROVE: "false"
GITHUB_ACTION_CONFIG.PR_ACTIONS: '["opened", "reopened", "ready_for_review", "synchronize"]'
SKILLS.ENABLED: "true"
SKILLS.PATHS: "['.agents/skills/review-guidelines/SKILL.md']" No newline at end of file

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[P1] SKILLS.PATHS uses single-quoted string instead of valid JSON

The value "['.agents/skills/review-guidelines/SKILL.md']" uses Python-style single quotes inside the list literal. Dynaconf (used by PR-Agent) parses env vars whose value starts with [ via json.loads, which rejects single-quoted strings — json.loads("['x']") raises JSONDecodeError. When parsing fails, Dynaconf falls back to a raw string, so PR-Agent receives the literal text ['.agents/skills/review-guidelines/SKILL.md'] instead of a one-element list. The review-guidelines skill — a core feature of this PR — will never be loaded. Every other list env var in this file (CONFIG.FALLBACK_MODELS, GITHUB_ACTION_CONFIG.PR_ACTIONS) correctly uses double-quoted JSON; this one is inconsistent.

Suggested change
SKILLS.PATHS: "['.agents/skills/review-guidelines/SKILL.md']"
SKILLS.PATHS: '[".agents/skills/review-guidelines/SKILL.md"]'

Comment thread .github/workflows/ai-pr-review.yml Outdated
group: ${{ github.workflow }}-${{ github.event.pull_request.number }}
cancel-in-progress: true

jobs:

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[P2] No fork-PR guard causes auth failure on external contributor PRs

The sibling droid-review.yml checks whether the PR author is an internal contributor before running review. This workflow has no equivalent guard. For pull_request events from forks, GitHub withholds repository secrets, so secrets.YDC_API_KEY resolves to an empty string. PR-Agent will then call https://api.you.com/v1 without a valid API key and fail with an auth error on every external contributor PR, wasting CI minutes and producing no review. Adding a permission-check step (as in droid-review.yml) or an if: guard checking github.event.pull_request.head.repo.full_name == github.repository would skip execution cleanly for external contributors.

Comment thread .github/workflows/ai-pr-review.yml Outdated
fetch-depth: 1

- name: Run PR-Agent review via You.com Inference Router
uses: qodo-ai/pr-agent@v0.46.0

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[P2] [security] Third-party action pinned to mutable tag with secret access

The qodo-ai/pr-agent@v0.46.0 action is pinned to a mutable Git tag rather than an immutable commit SHA. This action receives both secrets.YDC_API_KEY (via the OPENAI_KEY env var) and secrets.GITHUB_TOKEN as environment variables, giving it full access to these credentials at runtime. If the v0.46.0 tag is moved to a malicious or compromised commit in the upstream qodo-ai/pr-agent repository — through account compromise, supply-chain attack, or a rogue maintainer — the action could exfiltrate the You.com API key and the GitHub token on every PR review run. Pinning to a commit SHA (e.g., qodo-ai/pr-agent@<full-sha>) prevents tag-swap attacks and is the recommended GitHub security hardening practice for actions that handle secrets.

@factory-droid

factory-droid Bot commented Sep 23, 2026 •

Copy link
Copy Markdown
Contributor

Droid finished @EdwardIrby's task —— View job


Droid review complete. The PR adds a single GitHub Actions workflow for AI-powered PR review via the You.com Inference Router. Three issues were already reported in prior review comments (invalid JSON in SKILLS.PATHS, missing fork-PR guard, and mutable tag pinning for a secret-handling third-party action). This validation confirms one additional security finding: because the workflow checks out the PR branch before loading the SKILL.md review guidelines, a PR author can modify those guidelines to inject malicious review instructions, enabling review evasion.

@github-actions

Copy link
Copy Markdown
Contributor

Persistent review updated to latest commit 91aaef6

Comment thread .github/workflows/ai-pr-review.yml Outdated
Comment on lines +39 to +40
SKILLS.ENABLED: "true"
SKILLS.PATHS: "['.agents/skills/review-guidelines/SKILL.md']" No newline at end of file

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[P2] [security] Prompt injection via attacker-controlled SKILL.md loaded from PR branch

The workflow checks out the PR head ref (line 18) and then passes SKILLS.PATHS to PR-Agent (line 40), causing the AI reviewer to load its review guidelines from a file whose content is controlled by the PR author. Since the checkout includes the PR's own changes, a contributor can modify .agents/skills/review-guidelines/SKILL.md in their PR to inject malicious instructions into the AI review agent — for example, instructing it to always post a positive review, suppress security findings, or auto-describe the PR with a benign summary that conceals malicious changes. With AUTO_REVIEW: "true" and AUTO_DESCRIBE: "true", these injected instructions directly affect automated comments and PR description modifications that human reviewers rely on. The fix is to load review guidelines from the base branch (e.g., a separate checkout of github.base_ref for the guidelines file, or hardcode the guidelines inline as env config) rather than from the PR under review.

@factory-droid

factory-droid Bot commented Sep 23, 2026 •

Copy link
Copy Markdown
Contributor

Droid finished @EdwardIrby's task —— View job


Droid review complete. The PR adds a single GitHub Actions workflow for AI-powered PR review via the You.com Inference Router. Three issues were already reported in prior review comments (invalid JSON in SKILLS.PATHS, missing fork-PR guard, and mutable tag pinning for the secret-handling third-party action). This review identifies one additional security finding: the pull_request trigger uses the PR's workflow YAML for same-repo PRs, allowing internal contributors to modify the workflow and exfiltrate secrets before merge review.

@github-actions

Copy link
Copy Markdown
Contributor

Persistent review updated to latest commit b032236

@github-actions

github-actions Bot commented Sep 23, 2026 •

Copy link
Copy Markdown
Contributor

PR Code Suggestions ✨

Latest suggestions up to b628069

Explore these optional code suggestions:

CategorySuggestion                                                                                                                                    Impact
Possible issue
Add missing GitHub token

The pr-agent CLI expects GITHUB_TOKEN to authenticate with GitHub. Without it, the
external review step will fail with authentication errors. Add GITHUB_TOKEN: ${{
github.token }} to the environment block.

.github/workflows/review.yml [95-109]

         env:
           GH_TOKEN: ${{ github.token }}
           PR_NUMBER: ${{ inputs.pr_number }}
+          GITHUB_TOKEN: ${{ github.token }}
           GITHUB__USER_TOKEN: ${{ github.token }}
           OPENAI_KEY: ${{ secrets.YDC_API_KEY }}
           OPENAI__API_BASE: "https://api.you.com/v1"
           CONFIG__MODEL: "openai/deepseek-v4-flash"
           CONFIG__CUSTOM_MODEL_MAX_TOKENS: "128000"
           CONFIG__FALLBACK_MODELS: '["openai/qwen3.8-flash"]'
           CONFIG__OUTPUT_RUN_DETAILS: "true"
           CONFIG__OUTPUT_RUN_COST: "true"
           CONFIG__REASONING_EFFORT: "high"
           PR_REVIEWER__NUM_MAX_FINDINGS: "5"
           SKILLS__ENABLED: "true"
           SKILLS__PATHS: "['.agents/skills/review-guidelines/SKILL.md']"
Suggestion importance[1-10]: 8

__

Why: The suggestion correctly identifies that the pr-agent CLI requires GITHUB_TOKEN for authentication. Without it, the external review step may fail. The addition is accurate and addresses a potential runtime issue.

Medium

⚙️ Agent run details
  • Model: openai/deepseek-v4-flash
  • Tokens: 7,372 in / 6,516 out / 13,888 total
  • Time cost: 66.9s
  • AI calls: 2
  • Estimated API cost: unavailable (no calls could be priced)

Previous suggestions

Suggestions up to commit b032236
CategorySuggestion                                                                                                                                    Impact
Possible issue
Fix SKILLS.PATHS quotes

The environment variable SKILLS.PATHS uses single quotes inside a Python-style list
representation, which may not be parsed as a JSON array by the action. Use double
quotes for the strings to match JSON conventions and ensure the path list is
interpreted correctly.

.github/workflows/ai-pr-review.yml [42]

-          SKILLS.PATHS: "['.agents/skills/review-guidelines/SKILL.md']"
+          SKILLS.PATHS: '[".agents/skills/review-guidelines/SKILL.md"]'
Suggestion importance[1-10]: 7

__

Why: The suggestion correctly identifies that the inner strings in the SKILLS.PATHS value should use double quotes to be valid JSON, preventing potential parsing errors by the action.

Medium

Comment thread .github/workflows/ai-pr-review.yml Outdated

on:
pull_request:
types: [opened, ready_for_review, reopened, synchronize]

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[P2] [security] pull_request trigger allows workflow self-modification with secret access

For same-repository PRs, GitHub executes the workflow file from the PR's merge ref, not from the base branch. An internal contributor — or a compromised account with branch-creation rights — can modify this workflow YAML in their PR to exfiltrate secrets.YDC_API_KEY and secrets.GITHUB_TOKEN, and the modified workflow will run with full secret access before any maintainer reviews or merges the change. The sibling droid-review.yml mitigates this class of risk with an explicit collaborator-permission check (gh api repos/.../collaborators/.../permission) that gates secret access before checkout; this workflow has no equivalent guard. Pinning the third-party action to a commit SHA (already recommended) does not address this, because the attacker controls the workflow YAML itself, not the action version. Consider adding an if guard that checks the PR author's collaborator permission before the step that handles secrets, or restricting workflow file modifications to protected branches only.

…tch external review

- workflow_dispatch path uses pr-agent CLI (action runner has no dispatch handler)
- GITHUB__USER_TOKEN double-underscore for dynaconf SECTION__KEY mapping
- fix concurrency group to use inputs.pr_number on dispatch
- gate internal step on is_internal, dedupe config, update skip message
- drop unneeded id-token/actions permissions
@factory-droid

factory-droid Bot commented Sep 24, 2026 •

Copy link
Copy Markdown
Contributor

Droid encountered an error —— View job


Code review subagent complete. Waiting for security-reviewer subagent to finish before merging findings and writing review_candidates.json.

@github-actions

Copy link
Copy Markdown
Contributor

Persistent review updated to latest commit 99d1529

@github-actions

Copy link
Copy Markdown
Contributor

PR Code Suggestions ✨

No code suggestions found for the PR.


⚙️ Agent run details
  • Model: openai/deepseek-v4-flash
  • Tokens: 7,933 in / 4,800 out / 12,733 total
  • Time cost: 71.4s
  • AI calls: 2
  • Estimated API cost: unavailable (no calls could be priced)

@factory-droid

factory-droid Bot commented Sep 24, 2026 •

Copy link
Copy Markdown
Contributor

Droid finished @EdwardIrby's task —— View job


Droid review complete — PR #99 validation


Droid review complete. The PR adds a well-structured AI PR review workflow that mirrors the sibling droid-review.yml pattern with appropriate permission scoping, concurrency control, and immutable SHA pinning for the third-party action. Most issues identified in prior review rounds (SKILLS.PATHS quoting, fork-PR guard, mutable tag pinning, SKILL.md injection, secret exfiltration via pull_request trigger) have been addressed or are already documented in existing PR comments. One remaining concern: the external review path runs commands sequentially with bash errexit, so a failure in the secondary describe command blocks the primary review command from running.

@github-actions

Copy link
Copy Markdown
Contributor

Persistent review updated to latest commit b628069

- name: Auto Review (external)
if: github.event_name == 'workflow_dispatch'
run: |
PR_URL="https://github.com/${{ github.repository }}/pull/$PR_NUMBER"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[P2] External review: describe failure blocks review due to bash errexit

The three pr-agent CLI commands (describe, review, improve) run sequentially in a single run block. GitHub Actions invokes Linux shells with bash -eo pipefail by default, so if pr-agent describe exits non-zero (e.g., a transient You.com API timeout or model error), the script terminates immediately and pr-agent review — the core functionality of this workflow — never executes. The internal path avoids this because the PR-Agent Action handles all three tools internally and can continue past individual failures. Consider running review first, separating the commands into distinct steps, or tolerating non-critical failures with || true on describe and improve.

…n Auto Review

- synchronize events are handled before GITHUB_ACTION_CONFIG.PR_ACTIONS in
  pr-agent's runner and skipped without push trigger config; enable
  handle_push_trigger + push_commands so pushes to open PRs are re-reviewed
  (matches the Droid Auto Review behavior this workflow mirrors)
- list router model IDs in additional_reasoning_effort_models, otherwise
  pr-agent drops reasoning_effort for models LiteLLM metadata doesn't know
- drop issues: write (PR-Agent only posts to PRs)
@EdwardIrby

Copy link
Copy Markdown
Member Author

Verification report (against qodo-ai/pr-agent @ v0.46.0 source)

Checked every config claim in this PR against the actual pr-agent source, not just the docs.

✅ Confirmed correct

Claim Verified
SHA pin 1d01f24 = v0.46.0 exact tag match
pr-agent==0.46.0 on PyPI + pr-agent CLI entry point both exist
[skills] config (skills.enabled + skills.paths) real; a direct …/SKILL.md path is accepted (loader requires basename SKILL.md for file paths) and is injected into review/describe/improve prompts
OPENAI.API_BASE for custom gateways consumed by the LiteLLM handler ✓
config.reasoning_effort values high valid ✓
output_run_details / output_run_cost exist ✓

🐛 Two bugs found and fixed (cbb Pushed commit)

  1. synchronize in GITHUB_ACTION_CONFIG.PR_ACTIONS did nothing. In github_action_runner.py, synchronize is handled before pr_actions and skipped with "No push_commands configured, skipping synchronize" unless handle_push_trigger=true + push_commands are set. So pushes to open PRs were never re-reviewed — silently diverging from the Droid pattern this PR mirrors. Fixed with HANDLE_PUSH_TRIGGER: "true" + PUSH_COMMANDS: '["/describe", "/review"]'.
  2. CONFIG.REASONING_EFFORT: "high" was silently dropped. litellm_ai_handler.py only sends reasoning_effort when LiteLLM's bundled metadata marks the model reasoning-capable or the model is listed in additional_reasoning_effort_models. openai/deepseek-v4-flash on a custom base URL is neither. Fixed by adding CONFIG.ADDITIONAL_REASONING_EFFORT_MODELS: '["openai/deepseek-v4-flash", "openai/qwen3.8-flash"]' to both the action and CLI paths.

Also dropped issues: write (PR-Agent only posts to PRs; pull-requests: write covers everything).

⚠️ Still unverified

  • Model IDs — I couldn't confirm deepseek-v4-flash / qwen3.8-flash from here: my API key gets 403 key_model_access_denied on GET /v1/models. Someone with a router-enabled key should run GET https://api.you.com/v1/models before merge, or just let the first workflow run prove it (the fallback chain covers the primary failing).

Corrected event flow

flowchart LR
  PR_EVENT[PR opened / reopened / ready_for_review] --> PERM{Internal\ncontributor?}
  PERM -- yes --> REVIEW[PR-Agent action: describe + review + improve]
  PERM -- no --> SKIP[Skip, prompt workflow_dispatch]
  SYNC[Push to open PR] --> GUARD{Merge commit or bot push?}
  GUARD -- no --> REVIEW
  DISPATCH[workflow_dispatch] --> CHECKOUT_PR[checkout PR head]
  CHECKOUT_PR --> CLI[pr-agent CLI: describe + review + improve]
  REVIEW --> POST[Post PR comments]
  CLI --> POST
Loading

@factory-droid

factory-droid Bot commented Oct 13, 2026 •

Copy link
Copy Markdown
Contributor

Droid encountered an error —— View job


Droid is reviewing code and running a security check…

@factory-droid

factory-droid Bot commented Oct 13, 2026 •

Copy link
Copy Markdown
Contributor

Droid encountered an error —— View job


Droid is reviewing code and running a security check…

@github-actions

Copy link
Copy Markdown
Contributor

Persistent review updated to latest commit ca31ed4

@EdwardIrby
EdwardIrby force-pushed the feat/ai-pr-review-router branch from ca31ed4 to b628069 Compare October 13, 2026 22:17
@factory-droid

factory-droid Bot commented Oct 13, 2026 •

Copy link
Copy Markdown
Contributor

Droid finished @EdwardIrby's task —— View job


Droid review complete. The workflow is well-structured with a proper internal/external contributor split and immutable SHA pinning. One real P1 bug remains: SKILLS.PATHS uses single-quoted JSON that will silently prevent the review-guidelines skill from loading, breaking a core feature of this PR. Two security candidates (prompt injection via attacker-controlled SKILL.md, and workflow self-modification with secret access) were validated and rejected as false positives per the review methodology — user-controlled AI prompt content is a hard exclusion, and the workflow self-modification concern requires a trusted write-access user.

@github-actions

Copy link
Copy Markdown
Contributor

Persistent review updated to latest commit b30dc0c

1 similar comment
@github-actions

Copy link
Copy Markdown
Contributor

Persistent review updated to latest commit b30dc0c

CONFIG.ADDITIONAL_REASONING_EFFORT_MODELS: '["openai/deepseek-v4-flash", "openai/qwen3.8-flash"]'
PR_REVIEWER.NUM_MAX_FINDINGS: "5"
SKILLS.ENABLED: "true"
SKILLS.PATHS: "['.agents/skills/review-guidelines/SKILL.md']"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[P1] SKILLS.PATHS uses single-quoted string instead of valid JSON

The value "['.agents/skills/review-guidelines/SKILL.md']" uses Python-style single quotes inside the list literal. Dynaconf (PR-Agent's config loader) parses env vars whose value starts with [ via json.loads, which rejects single-quoted strings, so Dynaconf falls back to treating the value as a raw string. PR-Agent then receives the literal text ['.agents/skills/review-guidelines/SKILL.md'] instead of a one-element list, and the review-guidelines skill — a core feature of this PR — will never be loaded. Every other list env var in this file (CONFIG.FALLBACK_MODELS, GITHUB_ACTION_CONFIG.PR_ACTIONS, CONFIG.ADDITIONAL_REASONING_EFFORT_MODELS, GITHUB_ACTION_CONFIG.PUSH_COMMANDS) correctly uses double-quoted JSON; this one is inconsistent. The same bug exists at line 116 (SKILLS__PATHS) on the external CLI path. This was previously reported on the old file ai-pr-review.yml before it was renamed to review.yml, but the single-quote value was never fixed.

Suggested change
SKILLS.PATHS: "['.agents/skills/review-guidelines/SKILL.md']"
SKILLS.PATHS: '[".agents/skills/review-guidelines/SKILL.md"]'

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant