Analyze PRs with AI and post reviews directly to GitHub.
dobbe review post [OPTIONS]
review post extends the review pipeline by posting AI-generated reviews as GitHub PR reviews. It performs the same 5-phase analysis as review digest, then deduplicates against existing reviews and posts structured feedback with inline comments at specific file and line locations.
┌───────────────────────────────────────────────┐
│ dobbe review post --pr <num|URL|shorthand> │
│ (or: dobbe review post --repo org/repo) │
└───────────────────────┬───────────────────────┘
│
v
┌───────────────────────────────────────────────┐
│ RESOLVE REPO │
│ --repo flag > config watch_repos > CWD auto │
└───────────────────────┬───────────────────────┘
│
v
┌───────────────────────────────────────────────┐
│ PHASE 1: DISCOVER PRs │
│ --pr 42 / URL / org/repo#42: single PR │
│ --all: discover all open PRs via Claude │
│ (default: --all if neither specified) │
└───────────────────────┬───────────────────────┘
│
v
┌───────────────────────────────────────────────┐
│ CONFIRMATION (unless --yes or --dry-run) │
│ Shows target + action, waits for user input │
└───────────────────────┬───────────────────────┘
│
v
┌───────────────────────────────────────────────┐
│ PHASE 2: FILTER │
│ - Remove drafts │
│ - Apply --skip-label, --skip-author │
└───────────────────────┬───────────────────────┘
│
v
┌───────────────────────────────────────────────┐
│ PHASE 3: CODEBASE CONTEXT (unless --no-ctx) │
│ - Load/rebuild cached context │
│ - Respect --context-ttl / --rebuild-context │
└───────────────────────┬───────────────────────┘
│
v
┌───────────────────────────────────────────────┐
│ PHASE 4: PRE-FETCH DIFFS │
│ - Parallel diff fetching │
│ - Truncate at --max-diff-lines │
└───────────────────────┬───────────────────────┘
│
v
┌───────────────────────────────────────────────┐
│ PHASE 5: ANALYZE │
│ - Full code review per PR │
│ - Generate concerns with file:line refs │
│ - Assign risk + recommendations │
└───────────────────────┬───────────────────────┘
│
v
┌───────────────────────────────────────────────┐
│ PHASE 6: DEDUP + POST │
│ │
│ For each analyzed PR: │
│ ┌────────────────────────────────┐ │
│ │ Check existing reviews │ │
│ │ - Compare head SHA │ │
│ │ - Detect prior dobbe review │ │
│ └─────────────┬──────────────────┘ │
│ ┌─────┴──────┐ │
│ │ Already │ │
│ │ reviewed? │ │
│ └─────┬──────┘ │
│ yes | | no │
│ v v │
│ ┌──────────┐ ┌─────────────────┐ │
│ │ Skip, │ │ Build review │ │
│ │ record │ │ payload: │ │
│ │ reason │ │ - Body text │ │
│ └──────────┘ │ - Inline │ │
│ │ comments at │ │
│ │ file:line │ │
│ └────────┬────────┘ │
│ │ │
│ ┌─────┴─────┐ │
│ │ Dry run? │ │
│ └─────┬─────┘ │
│ yes | | no │
│ v v │
│ ┌──────┐ ┌──────────┐ │
│ │ Log │ │ Post via │ │
│ │ only │ │ gh CLI │ │
│ └──────┘ └──────────┘ │
└───────────────────────────────────────────────┘
| Option | Type | Default | Description |
|---|---|---|---|
--repo / -r |
str |
- | Single repo (org/repo). Auto-detected from CWD if omitted. |
--pr |
str |
- | PR number, URL, or shorthand (see formats below) |
--all |
bool |
False |
Review all open PRs |
--reviewer |
str |
- | GitHub username to filter by |
--dry-run |
bool |
False |
Preview reviews without posting |
--format / -f |
str |
table |
Output format: table, json, markdown |
--verbose / -V |
bool |
False |
Show concern details with file:line and suggestions |
--output |
str |
- | Write output to file instead of stdout |
--skip-label |
str |
- | Skip PRs with these labels (comma-separated) |
--skip-author |
str |
- | Skip PRs by these authors (comma-separated) |
--max-diff-lines |
int |
2000 |
Max diff lines to include per PR |
--rebuild-context |
bool |
False |
Force rebuild codebase context cache |
--context-ttl |
int |
7 |
Context cache TTL in days |
--no-context |
bool |
False |
Skip codebase context (diff-only review) |
--yes / -y |
bool |
False |
Skip confirmation prompts |
--quiet / -q |
bool |
False |
Suppress progress output |
--pr Accepted Formats| Format | Example | Notes |
|---|---|---|
| Plain number | 42 |
Requires --repo (or CWD auto-detect) |
| GitHub URL | https://github.com/org/repo/pull/42 |
Repo extracted from URL; --repo not needed |
| Shorthand | org/repo#42 |
Repo extracted from shorthand; --repo not needed |
--pr nor --all is given, defaults to --all--pr and --all cannot be used together--pr (plain number) requires --repo or CWD auto-detectWhen --repo is omitted, dobbe resolves the repository in this order:
[review] watch_repos settingorg/repoIf neither source yields a repo, the command exits with an error.
Before posting, dobbe checks whether it has already reviewed the PR at the current head SHA:
PostResult.skipped_reasonEach posted review contains:
file_path:line_number locations from the concern list, each with a description and suggestionPer-PR posting result:
posted - whether the review was successfully postedskipped_reason - why the review was skipped (if applicable)review_url - URL of the posted reviewerror - error message if posting failedAggregate report with computed properties:
total_posted - reviews successfully postedtotal_skipped - reviews skipped (already reviewed)total_failed - reviews that failed to postdry_run - whether this was a dry rundobbe review post --repo acme/web-app --pr 42
dobbe review post --pr https://github.com/acme/web-app/pull/42
dobbe review post --pr acme/web-app#42
cd ~/projects/api
dobbe review post --pr 42
dobbe review post --repo acme/web-app --all --dry-run --verbose
dobbe review post --pr 42 --yes --rebuild-context
dobbe review post --pr 42 --no-context