skills/gerrit-workflow/SKILL.md
Work with Gerrit code reviews using the ger CLI tool. Use when reviewing changes, posting comments, managing patches, or interacting with Gerrit. Covers common workflows like fetching changes, viewing diffs, adding comments, voting, managing change status, cherry-picking, and tree worktrees.
npx skillsauth add aaronshaf/ger gerrit-workflowInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
This skill helps you work effectively with Gerrit code reviews using the ger CLI tool.
The ger CLI tool must be installed and accessible in your PATH. It's available globally if installed from ~/github/ger.
Most commands support --json and --xml flags:
--json — Structured JSON for programmatic consumption--xml — XML with CDATA-wrapped content, optimized for LLM/AI consumptionThese are mutually exclusive; using both is an error.
Show comprehensive change information:
ger show [change-id]
Displays metadata, diff, and all comments. Auto-detects from HEAD commit if omitted.
View specific diff:
ger diff [change-id]
ger diff [change-id] --file src/api/client.ts # specific file
View all comments:
ger comments [change-id]
ger comments [change-id] --unresolved-only
List changed files:
ger files [change-id]
ger files [change-id] --json
List reviewers:
ger reviewers [change-id]
ger reviewers [change-id] --xml
Your open changes:
ger mine
ger list
Changes needing your review (reviewer OR cc'd):
ger incoming
ger team
Both query reviewer:self OR cc:self status:open. Options:
--all-verified — Include all verification states (default: open only)-f, --filter <query> — Append custom Gerrit query syntax--status <status> — Filter by status: open, merged, abandoned-n, --limit <n> — Limit number of results (default: 25)--detailed — Show detailed info for each change--json / --xmlGeneral list with options:
ger list --status merged
ger list --reviewer # same as incoming
ger list -n 10 --json
Search with custom query:
ger search "owner:self is:wip"
ger search "project:my-project status:open" -n 10 --xml
Post a comment:
ger comment [change-id] -m "Your comment"
echo "Review feedback" | ger comment [change-id] # from stdin
ger comment [change-id] --file src/api/client.ts --line 42 -m "Inline comment"
Vote on a change:
ger vote <change-id> --code-review 2
ger vote <change-id> --verified 1 --message "Looks good"
ger vote <change-id> --label My-Label 1
Abandon / restore:
ger abandon [change-id] -m "No longer needed"
ger restore [change-id]
Submit a change:
ger submit [change-id]
Set WIP / Ready:
ger set-wip [change-id]
ger set-wip [change-id] -m "Still working on tests"
ger set-ready [change-id]
ger set-ready [change-id] -m "Ready for review"
Topic:
ger topic [change-id] # get current topic
ger topic [change-id] my-topic # set topic
ger topic [change-id] --delete # delete topic
Push changes to Gerrit:
ger push
ger push -b main -t my-feature -r [email protected] --wip
Options: -b, -t, -r, --cc, --wip, --ready, --hashtag, --private, --dry-run
Checkout a change locally:
ger checkout 12345
ger checkout 12345 --revision 3 # specific patchset
Cherry-pick a change into current branch:
ger cherry 12345
ger cherry 12345/3 # specific patchset
ger cherry 12345 --no-commit # stage without committing
ger cherry 12345 --no-verify # skip pre-commit hooks
ger cherry https://gerrit.example.com/c/my-project/+/12345
Rebase a change on Gerrit (server-side):
ger rebase [change-id]
ger rebase [change-id] --base <sha-or-change>
ger rebase [change-id] --allow-conflicts # rebase even with conflicts
ger rebase [change-id] --json
Auto-detects from HEAD commit if no change-id provided.
Post a CI retrigger comment:
ger retrigger [change-id]
Auto-detects from HEAD. Saves the retrigger comment to config on first use (or configure via ger setup).
Check Jenkins build status:
ger build-status [change-id]
ger build-status --watch --interval 20 --timeout 1800
ger build-status --exit-status # non-zero exit on failure (for scripting)
Extract build URLs:
ger extract-url "build-summary-report"
ger extract-url "build-summary-report" | tail -1
Canonical CI workflow:
ger build-status --watch --interval 20 --timeout 1800 && \
ger extract-url "build-summary-report" | tail -1 | jk failures --smart --xml
View merged change analytics (year-to-date by default):
ger analyze
ger analyze --start-date 2025-01-01 --end-date 2025-12-31
ger analyze --repo canvas-lms
ger analyze --json
ger analyze --xml
ger analyze --markdown
ger analyze --csv
ger analyze --output report.md # write to file
Default start date: January 1 of current year.
Update ger to the latest version:
ger update
ger update --skip-pull # reinstall without version check
View recent failures summary:
ger failures
ger failures --xml
Manage git worktrees for reviewing changes in isolation.
Setup a worktree for a change:
ger tree setup 12345
ger tree setup 12345:3 # specific patchset
ger tree setup 12345 --xml
Creates worktree at <repo-root>/.ger/<change-number>/.
List ger-managed worktrees:
ger trees
ger trees --json
Rebase a worktree (run from inside the worktree):
cd .ger/12345
ger tree rebase
ger tree rebase --onto origin/main
ger tree rebase --interactive # interactive rebase (-i)
Remove a worktree:
ger tree cleanup 12345
Add reviewers:
ger add-reviewer [email protected] -c 12345
ger add-reviewer --group project-reviewers -c 12345
ger add-reviewer --cc [email protected] -c 12345
ger add-reviewer --notify none [email protected] -c 12345
Remove reviewers:
ger remove-reviewer [email protected] -c 12345
List groups:
ger groups
ger groups --pattern "^team-.*"
ger groups --project canvas-lms
ger groups --owned
Show group details / members:
ger groups-show administrators
ger groups-members project-reviewers
ger setup # interactive first-time setup
ger config list # list all config
ger config get gerrit.url
ger config set gerrit.url https://gerrit.example.com
These commands auto-detect the change from the HEAD commit's Change-Id footer when no change-id is provided:
show, build-status, topic, rebase, extract-url, diff, comments, vote, retrigger, files, reviewers
# Review a change
ger show <id> --xml
ger diff <id> --xml
ger comments <id> --xml
# Post a review
ger comment <id> -m "..."
ger vote <id> Code-Review +1
# Manage changes
ger push
ger checkout <id>
ger abandon <id>
ger submit <id>
# WIP toggle
ger set-wip <id>
ger set-ready <id> -m "message"
# Check CI
ger build-status <id> --exit-status
Change-Id--xml is preferred over --json for LLM/AI consumption (easier to parse)tools
Use when work should span one or more detached tasks but still behave like one job with a single owner context. TaskFlow is the durable flow substrate under authoring layers like Lobster, ACPX, plugins, or plain code. Keep conditional logic in the caller; use TaskFlow for flow identity, child-task linkage, waiting state, revision-checked mutations, and user-facing emergence.
tools
# Lobster Lobster executes multi-step workflows with approval checkpoints. Use it when: - User wants a repeatable automation (triage, monitor, sync) - Actions need human approval before executing (send, post, delete) - Multiple tool calls should run as one deterministic operation ## When to use Lobster | User intent | Use Lobster? | | ------------------------------------------------------ | --------------------------
tools
# Lobster Lobster executes multi-step workflows with approval checkpoints. Use it when: - User wants a repeatable automation (triage, monitor, sync) - Actions need human approval before executing (send, post, delete) - Multiple tool calls should run as one deterministic operation ## When to use Lobster | User intent | Use Lobster? | | ------------------------------------------------------ | --------------------------
tools
A CLI tool for making authenticated requests to the X (Twitter) API. Use this skill when you need to post tweets, reply, quote, search, read posts, manage followers, send DMs, upload media, or interact with any X API v2 endpoint.