CollabOps

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"
FlagDescription
-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
--forceSkip 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)
--draftCreate 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)
--botMark 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
FlagDescription
-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
--webOpen 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 section

To 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
FlagDescription
--webOpen 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
FlagDescription
--name-onlyList 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-one

For 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
FlagDescription
-l, --limit <n>Maximum timeline events to fetch across pages. 0 = all. Default 30
--repo <workspace/repo>Override the repository
--webOpen 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-one

To 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 issue

co 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
FlagDescription
--undoReverse direction — flip in_review back to proposed (draft)
--checkRead-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
FlagDescription
-a, --approveApprove (review_status=approved)
-r, --request-changesRequest changes (review_status=rejected). Requires --body
-c, --commentComment-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
FlagDescription
-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
FlagDescription
-s, --squashSquash and merge
-m, --mergeCreate a merge commit
-r, --rebaseRebase and merge
-M, --message <msg>Merge commit message (squash / merge only)
-d, --delete-branchDelete the source branch on origin after merging
--adminOverride a rule denial when you hold bypass privileges
--dry-runShow 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>
FlagDescription
--rebaseRebase 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
FlagDescription
-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 2675

These hit a workspace-scoped endpoint, so there's no need to specify a repository. Override the workspace with --workspace if needed.

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          # detach

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

Table of Contents