co cr — change requests
Create, list, view, edit, close, and reopen CRs (alias: co pr)
co cr operates on change requests. If you're coming from gh, co pr is an alias for the same commands.
co cr create
Opens a new CR from the current git branch. Without -t / -b you'll be prompted (the body opens in $EDITOR).
co cr create -t "New feature" -B main
co cr create -t "Patch" --draft
co cr create -t "Bug fix" --issue 2675
co cr create --bot --bot-agent "Claude Code"| Flag | Description |
|---|---|
| -t, --title <title> | CR title (prompted if omitted) |
| -b, --body <body> | CR description (opens $EDITOR if omitted) |
| -B, --base <branch> | Target branch. Defaults to config defaults.targetBranch or main |
| -H, --head <branch> | Source branch. Defaults to current git branch |
| -L, --label <labels> | Labels — comma-separated names or ids |
| --reviewer <users> | Reviewers — comma-separated usernames/emails/IDs, or me |
| --force | Skip the pre-create branch comparison (allows an empty or duplicate CR) |
| --repo <workspace/repo> | Override the repository if you're outside the worktree |
| -W, --workspace <slug> | Workspace slug for this run, overriding the saved default (global flag) |
| --draft | Create with case_status=proposed |
| --assignee <user> | username/email/numeric ID. Default: yourself. "none" to skip |
| --issue <keys> | Comma-separated issue keys. Default: extracted from branch name (feat/123-foo → 123) |
| --bot | Mark as AI/agent-generated (title prefix + body footer) |
| --bot-model <name> | Override AI model name in the footer (or env CO_BOT_MODEL) |
| --bot-agent <name> | Override agent name in the footer (or env CO_BOT_AGENT) |
Use the <type>/<issue-key>-<slug> branch convention (e.g. feat/123-add-login) and the linked issue is auto-detected. Pass --issue none to opt out.
If CLAUDECODE=1 or CO_AS_BOT=1 is set, the bot prefix/footer is applied even without --bot.
co cr list
Lists open CRs you authored as a compact table.
co cr list
co cr list --status merged
co cr list -l 50| Flag | Description |
|---|---|
| -s, --status <status> | open |
| -l, --limit <n> | Maximum items to fetch across pages. 0 = all. Default 20 |
| -L, --label <labels> | Filter by label — comma-separated, OR semantics |
| --web | Open the CR list in the browser instead of printing |
co cr status
Groups your change requests by role — created by you / waiting on your review / assigned to you. --limit is per section (default 5).
co cr status # 5 per section
co cr status --limit 10 # 10 per sectionTo see issues alongside CRs, use co status (alias co me).
co cr view <key>
Shows CR detail by key — status, title, branch arrow (head → base), description.
co cr view 2675
co cr view 2675 --repo collabops-one/web| Flag | Description |
|---|---|
| --web | Open the CR in the browser instead of printing |
| --repo <workspace/repo> | Override the repository (workspace/repo). Defaults to the current git remote |
| -W, --workspace <slug> | Workspace slug for this run, overriding the saved default (global flag) |
co cr diff <key>
Prints the CR's diff (origin/<base>...origin/<head>) to stdout, so it pipes and redirects like any other diff.
co cr diff 4312
co cr diff 4312 | less # page through it
co cr diff 4312 > pr.patch # save to a file
co cr diff 4312 --name-only # changed paths only| Flag | Description |
|---|---|
| --name-only | List changed file paths only, one per line |
co cr checks <key>
Shows the CI workflow runs attached to the CR — the overall result plus one line per workflow.
co cr checks 4312
co cr checks 4312 -W collabops-oneFor the run output itself, use co run logs.
co cr activity <key>
Prints the CR's activity timeline — status changes, comments, reviews, links — oldest to newest.
co cr activity 4312 # latest 30 events
co cr activity 4312 -l 100 # up to 100 (auto-follows the cursor)
co cr activity 4312 -l 0 # the entire history
co cr activity 4312 --web # open the CR page in the browser| Flag | Description |
|---|---|
| -l, --limit <n> | Maximum timeline events to fetch across pages. 0 = all. Default 30 |
| --repo <workspace/repo> | Override the repository |
| --web | Open the CR in the browser instead of printing |
co cr checkout <key>
Fetches the CR's source branch from origin and switches to it — the entry point for pulling a reviewer's copy down to build and run.
co cr checkout 2786 # fetch, then switch to the source branch
co cr checkout 2786 -W collabops-oneTo keep your current checkout where it is, create a separate worktree with co issue develop --worktree.
co cr develop <issue-key>
Creates a topic branch (and optionally a worktree) from an issue. It is the same command as co issue develop — same flags, same behavior — so the full description lives on the issue page.
co cr develop 3010 # branch in the current repo
co cr develop 3010 --worktree ../co-3010 # branch + worktree
co cr develop 3010 --list # just list CRs linked to the issueco cr ready <key>
Moves a draft CR into review. --undo flips it back, and --check only reports the current state without changing anything.
co cr ready 4312 # proposed (draft) → in_review
co cr ready 4312 --undo # in_review → proposed (draft)
co cr ready 4312 --check # read-only status check| Flag | Description |
|---|---|
| --undo | Reverse direction — flip in_review back to proposed (draft) |
| --check | Read-only — print the current case_status |
co cr review <key>
Submits a review on a CR — approve, request changes, or comment-only. Request-changes and comment-only reviews require a body.
co cr review 2786 -a # approve (no body needed)
co cr review 2786 -r -b "needs a test case" # request changes (body required)
co cr review 2786 -c -b "see related issue #2951" # comment-only| Flag | Description |
|---|---|
| -a, --approve | Approve (review_status=approved) |
| -r, --request-changes | Request changes (review_status=rejected). Requires --body |
| -c, --comment | Comment-only review (review_status=commented). Requires --body |
| -b, --body <md> | Review body (markdown) |
| -W, --workspace <slug> | Workspace slug for this run, overriding the saved default (global flag) |
To see who decided what, open the CR detail with co cr view.
co cr comment <key>
Adds a comment to a CR. Pass the body with -b, read it from a file (or stdin) with -F, or run it with no flags to compose in $EDITOR.
co cr comment 2786 -b "LGTM, ship it"
co cr comment 2786 -F notes.md
git log -1 --pretty=%B | co cr comment 2786 -F -
co cr comment 2786 # opens $EDITOR| Flag | Description |
|---|---|
| -b, --body <text> | Comment body (omit to open $EDITOR) |
| -F, --body-file <path> | Read from file ('-' for stdin). Mutually exclusive with -b |
| -W, --workspace <slug> | Workspace slug for this run, overriding the saved default (global flag) |
@username in the body is automatically converted to a mention token ({{user:id=N|label=...}}). Unresolved handles are left as raw @handle.
Editing and deleting comments is not available in the CLI — use the web app. To leave a review, use co cr review.
co cr merge <key>
Merges a CR. --squash / --merge / --rebase are mutually exclusive — pick one, or pass none and the repository's default method is used. Check conflicts and rule violations up front with --dry-run.
co cr merge 2786 -s # squash merge
co cr merge 2786 -m # merge commit
co cr merge 2786 -r # rebase merge
co cr merge 2786 -s -d # squash, then delete the remote source branch
co cr merge 2786 -s -M "feat: better logs" # custom merge message
co cr merge 2786 --dry-run # preview + rule validation only| Flag | Description |
|---|---|
| -s, --squash | Squash and merge |
| -m, --merge | Create a merge commit |
| -r, --rebase | Rebase and merge |
| -M, --message <msg> | Merge commit message (squash / merge only) |
| -d, --delete-branch | Delete the source branch on origin after merging |
| --admin | Override a rule denial when you hold bypass privileges |
| --dry-run | Show the merge preview and rule validation without merging |
| -W, --workspace <slug> | Workspace slug for this run, overriding the saved default (global flag) |
Already-merged or closed CRs are rejected up front. The merged-state field isn't consistent (some CRs report status='merged', others status='closed' with case_status='approved'), so we look at both.
co cr update-branch <key>
Brings the target branch into the CR's source branch. Merges by default; --rebase rebases instead.
co cr update-branch 4312 # merge origin/<base> into the current branch
co cr update-branch 4312 --rebase # rebase the current branch onto origin/<base>| Flag | Description |
|---|---|
| --rebase | Rebase instead of merging |
co cr edit <key>
Updates an existing CR's title, body, linked issues, assignee, or reviewers. At least one flag is required.
co cr edit 2675 -t "New title"
co cr edit 2675 --reviewer alice,bob
co cr edit 2675 --add-issue 100,101
co cr edit 2675 --remove-issue 100
co cr edit 2675 --assignee me| Flag | Description |
|---|---|
| -t, --title <title> | New title |
| -b, --body <body> | New description (markdown). Empty string clears. |
| --assignee <user> | username/email/numeric ID/me/none |
| --reviewer <users> | Comma-separated reviewers, or me/none |
| --issue <keys> | Replace linked issues entirely (or none) |
| --add-issue <keys> | Add to the existing list |
| --remove-issue <keys> | Remove from the existing list |
| -L, --label <labels> | Replace all labels (or none to clear) |
| --add-label <labels> | Add these labels |
| --remove-label <labels> | Remove these labels |
| --milestone <key> | Milestone numeric key (or none to clear) |
co cr close / co cr reopen
co cr close 2675
co cr reopen 2675These hit a workspace-scoped endpoint, so there's no need to specify a repository. Override the workspace with --workspace if needed.
co cr link / co cr unlink
Attaches issues to a CR or detaches them. Pass several issue keys at once with commas.
co cr link 4312 2950 # attach Issue-2950 to CR-4312
co cr link 4312 2950,2960 # attach several at once
co cr unlink 4312 2950 # detachco cr link-doc / co cr unlink-doc
Links a doc to a CR or removes the link. Doc keys come from co docs list.
co cr link-doc 4377 369 # link Doc-369 to CR-4377
co cr unlink-doc 4377 369 # remove the link