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 |
| --repo <ws/repo> | Override the repository if you're outside the worktree |
| --workspace <slug> | Override the default workspace |
| --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> | Page size (default: 20) |
co cr view <key>
Shows CR detail by key — status, title, branch arrow (head → base), description.
co cr view 2675
co cr view 2675 --comments # also print the comment thread
co cr view 2675 --repo collabops-one/webco cr checkout <key>
Fetches the CR's source branch from origin and either switches to it locally or creates a separate worktree. This is the entry point for the reviewer flow — pull the change, build/run it, leave a comment.
co cr checkout 2786 # fetch + switch (current clone)
co cr checkout 2786 --worktree # separate worktree at ../<repo>-<branch>
co cr checkout 2786 -b review-2786 # override local branch name
co cr checkout 2786 --repo collabops-one/web # CR in a different repo| Option | Description |
|---|---|
| --worktree | Create a separate worktree at ../<repo>-<branch-suffix> (your current work isn't disturbed) |
| -b, --branch <name> | Override the local branch name (when the same name is already in use) |
| -f, --force | Skip the dirty working-tree guard (changes follow you to the new branch) |
| --repo <ws/repo> | CR in a different repo (refused if it doesn't match the cwd's remote) |
| --workspace <slug> | Override workspace |
In switch mode, after fetch the command runs a fast-forward-only merge from origin/<source> so reviewers don't review a stale snapshot. If ff isn't possible, you'll get a clear error.
co cr review <key>
Shows the CR's review status (approved/rejected) and a per-reviewer summary. Useful right before merge to see who decided what.
co cr review 2786
co cr review 2786 --workspace collabops-oneco cr comment <key>
Add, edit, or delete a comment on a CR. Body comes from -b, -F (file or stdin), or — with no flag — $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
co cr comment 2786 --edit 482 -b "updated body"
co cr comment 2786 --delete 482| Option | Description |
|---|---|
| -b, --body <text> | Comment body (omit to open $EDITOR) |
| -F, --body-file <path> | Read from file ('-' for stdin). Mutually exclusive with -b |
| --edit <id> | Edit an existing comment (PUT). Author only |
| --delete <id> | Delete an existing comment. Author or admin |
| --repo <ws/repo> | CR in a different repo |
| --workspace <slug> | Override workspace |
@username in the body is automatically converted to a mention token ({{user:id=N|label=...}}). Unresolved handles are left as raw @handle.
To see comments inline with the CR detail, use co cr view <key> --comments. For review status, use co cr review <key>.
co cr merge <key>
Merges a CR. Default strategy is squash (matches CollabOps convention). Use --dry-run to validate first — surfaces conflicts and policy violations without writing.
co cr merge 2786 # squash (default)
co cr merge 2786 --merge # merge commit
co cr merge 2786 --rebase
co cr merge 2786 --dry-run # validate only
co cr merge 2786 --workspace collabops-one| Option | Description |
|---|---|
| --squash | Squash all commits into one (default — repo convention) |
| --merge | Standard merge commit |
| --rebase | Rebase onto target branch |
| --dry-run | Validate without writing |
| --workspace <slug> | Override workspace |
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.
v1 doesn't yet support --delete-branch / --auto (auto-merge after checks) / --admin (policy bypass) — those land in follow-up issues.
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 |
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.