← All guides

Send a message to a channel from your terminal

#cli #automation #ci

You can send a message to any Ano channel from your terminal without opening the app. This is the simplest possible recipe with the CLI: auth once, post anywhere. It runs anywhere bash runs, which is what makes it useful in scripts, GitHub Actions, cron jobs, and on-call playbooks.

What you need

  • Node 18 or newer.
  • An Ano account with access to at least one workspace and one channel.

1. Install the CLI

npm install -g @ano-chat/cli

The package is MIT-licensed and lives at github.com/ano-chat/ano-cli.

2. Sign in

For interactive use on your own machine, run:

ano auth login

A browser window opens, you confirm, you’re back in the terminal with a session token stored locally.

For scripts and headless environments (CI, cron, a remote box you don’t own), use an API key instead:

ano auth login --key ano_cwk_your_api_key

API keys are created from the Ano workspace settings; treat them like any other secret.

3. Post a message

ano messages send "Deploy is live" --channel engineering

That’s it. The message lands in #engineering exactly as if you’d typed it in the desktop app.

A few variations worth knowing

Direct messages instead of a channel:

ano dm send "Got a sec?" --to "Jane"

JSON output so the next step in your pipeline can read what happened:

ano messages send "Build #2241 passed" --channel ci --json

That returns the message ID, timestamp, and channel ID as structured JSON. Pipe to jq or read directly in your script.

Pre-flight check that the channel exists and you have access:

ano channels list --json | jq '.[] | select(.name == "engineering")'

If that returns nothing, the channel doesn’t exist or your account can’t see it. Either fix is in the desktop app.

Wiring it into CI

In CI you authenticate with an API key. The CLI accepts one via the --key flag on ano auth login:

- name: Notify #engineering
  run: |
    ano auth login --key "${{ secrets.ANO_API_KEY }}"
    ano messages send "Deploy ${{ github.sha }} live" --channel engineering

Store the key as a repo or org secret, never in plaintext. Generate the key from your Ano workspace settings.

When this gets boring

Once you’ve got messages flowing, the natural next step is to read messages back the other way (CI status pulled from a channel into your terminal), or to wire up Claude Code as a workspace coworker so an agent can do the typing.

Going deeper

The CLI is the headless / scripted side of the same idea behind ⌘J in every channel, which is the interactive surface. For the inbound counterpart, see Send a thread into your terminal. For the broader “Claude Code with your team” pattern, see Best team chat for Claude Code users.