CollabOps

co chat — chat

Channels, DMs and agent conversations. Interactive screen, send and read messages, ask the agent, webhooks

co chat brings workspace channels, DMs and agent conversations to the terminal. Run co chat with no arguments to open the interactive chat screen (same as co chat open); the subcommands send and read messages from scripts.

For <channel>, use a channel name (#general or general), @username for a DM, agent for your agent conversation, or a channel id.

co chat open

Opens a screen with conversations on the left, messages on the right and a composer at the bottom. Arrows move, Enter opens or sends, Esc goes back one step, Tab switches panes, ? shows every key. New messages arrive live.

co chat                             # the chat screen
co chat open fun-time               # straight into #fun-time
co chat open @alice
co chat open general --plain        # line mode (pipes, tmux send-keys, ...)
OptionDescription
--plainLine mode instead of the full screen. New messages are printed and every line you type is sent
--thread <message-id>Open the thread of this message (line mode)

Outside a terminal it falls back to line mode automatically.

co chat list

Lists the channels, DMs and agent conversations you are in.

co chat list
co chat list --unread               # only unread conversations

co chat view <channel>

Shows recent messages. Reading marks the channel as read.

co chat view general
co chat view @alice -n 50
co chat view general --follow       # keep printing new messages (Ctrl+C to stop)
co chat view general --ids          # show message ids (for --thread)
co chat view general --thread <message-id>
OptionDescription
-n, --limit <n>Number of messages (1-100, default 30)
-f, --followStay connected and print new messages live
--idsPrint message ids
--thread <message-id>Show the replies of this message

co chat send <channel> [message]

Sends a plain-text message. The body comes from the argument, -m, or stdin. Each line becomes a paragraph; ``` fences become a code block.

co chat send general "Deploy finished"
co chat send @alice -m "Could you review this?"
co chat send general --thread <message-id> "Got it"
git log -1 --oneline | co chat send dev

co chat ask [question]

Sends a question to your agent conversation (creating one if needed), waits for the reply and prints it. Progress steps go to stderr.

co chat ask "Summarize this sprint's open issues"
co chat ask --mode agent "Add the bug label to Issue-9918"
git diff | co chat ask "Review this change"
OptionDescription
--mode <ask / agent>ask uses read-only tools and is fast, agent runs the full loop (default ask)
--agent <name>Agent conversation name (default: the first one)
--model <id>LLM model id (default: the workspace default)
--timeout <duration>How long to wait for the reply (default 5m)

co chat approve / reject

Approves or rejects an agent action waiting for approval.

co chat approve <agent-run-id> <step>
co chat reject <agent-run-id> <step>

co chat inbox / unread

inbox collects mentions, thread replies and DMs addressed to you. unread prints the workspace unread badge.

co chat inbox
co chat inbox --kind mention -n 10   # mention | thread_reply | dm
co chat unread

Edit, delete, react, pin

Find message ids with co chat view <channel> --ids. edit and delete work on your own messages only.

co chat edit fun-time <message-id> -m "fixed text"
co chat delete fun-time <message-id> -y
co chat react fun-time <message-id> thumbs_up
co chat react fun-time <message-id> 👍 --remove
co chat pin fun-time                         # list pins
co chat pin fun-time <message-id>
co chat pin fun-time <message-id> --remove

Reaction kinds: thumbs_up, thumbs_down, laugh, hooray, confused, heart, rocket, eyes (or the emoji itself).

co chat create / invite

Creates a channel and adds members by user id.

co chat create company-os --private -d "strategy, todos, morning brief"
co chat create company-os --if-missing     # succeed if it already exists
co chat invite company-os <user-id>
OptionDescription
--privatePrivate channel (invite only)
-d, --description <text>Channel description
--if-missingSucceed without changes if a channel with that name exists

co chat webhook

Incoming webhooks let an outside tool post to a channel as a bot using only the webhook URL and a Bearer secret. With --can-read the same URL can also read the channel. No user login is needed on the machine that runs the tool.

POST <url>                  Authorization: Bearer <secret>   {"text": "markdown"}
GET  <url>/messages?since=  Authorization: Bearer <secret>   (needs can_read)
co chat webhook create company-os --name brief-bot --can-read
co chat webhook create company-os --name brief-bot --json > webhook.json
co chat webhook list company-os
co chat webhook edit company-os 12 --pause
co chat webhook edit company-os 12 --can-read=false
co chat webhook delete company-os 12 --yes

The secret is shown once, at create. --json output includes it too, so don't commit a file you saved it to.

CommandMain options
create <channel>--name bot display name, --can-read allow reading, --no-join (with --can-read) keep the bot out of the channel, --json
list <channel>--json
edit <channel> <id>--name, --pause / --resume (the URL stays valid), --can-read true / false
delete <channel> <id>--yes. Revokes the URL and deactivates the bot

Table of Contents