blowhorn-axi

Reply in Slack as Blowhorn profiles, session only. Slack reads stay on the Cursor Slack connection; every write needs --confirm.

The agent interface to Blowhorn: TOON output, every write a dry run until --confirm, and every answer ending in a help[] list of next commands. It is installed with Blowhorn, next to blowhorn. Each command's --help prints the same text.

Exit codes:

Exit code Meaning
0 Every profile succeeded (a dry run included)
1 A refusal, a Slack rejection, an attribution finding or a partial failure
2 A usage error: an unknown flag, command or missing value, caught before blowhorn runs
3 The shared store could not be reached
Command What it does
blowhorn-axi Reply in Slack as Blowhorn profiles, session only.
blowhorn-axi profile list Every profile: workspace, Slack user, session state
blowhorn-axi profile status One profile: its Slack credential and each workspace's session
blowhorn-axi slack send Send one message (a thread reply from a message link) as each profile, once.
blowhorn-axi slack edit Replace the text of a message the profile sent with blowhorn (the send ledger says so).
blowhorn-axi slack delete Delete a message the profile sent with blowhorn (the send ledger says so).
blowhorn-axi slack react Add (or with --remove take back) an emoji reaction to any message as each profile.
blowhorn-axi setup hooks Install or repair the SessionStart hooks that show this home view to Claude Code, Codex and OpenCode.

blowhorn-axi

Reply in Slack as Blowhorn profiles, session only. Slack reads stay on the Cursor Slack connection; every write needs --confirm.

output
blowhorn-axi

Examples:

terminal
blowhorn-axi
blowhorn-axi profile list
blowhorn-axi slack send --profile rian --to https://acme.slack.com/archives/C0123/p1776000000000100 --text-file reply.md

blowhorn-axi profile list

Every profile: workspace, Slack user, session state

output
blowhorn-axi profile list [-h] [--offline]
Flag Type Default Description
--offline boolean false Skip auth.test; session reads unchecked

Examples:

terminal
blowhorn-axi profile list
blowhorn-axi profile list --offline

blowhorn-axi profile status

One profile: its Slack credential and each workspace's session

output
blowhorn-axi profile status [-h] [--profile PROFILE] [--offline] [--full]
Flag Type Default Description
--profile string, repeatable The profile to show
--offline boolean false Skip auth.test; session reads unchecked
--full boolean false List every workspace, not the first five

Examples:

terminal
blowhorn-axi profile status --profile rian
blowhorn-axi profile status --profile rian --full

blowhorn-axi slack send

Send one message (a thread reply from a message link) as each profile, once. Dry run unless --confirm. Session only: a profile with only an app token is refused (token_only). Slack reads (history, search, threads) are out of scope; use the Cursor Slack connection.

output
blowhorn-axi slack send [-h] [--profile PROFILE] [--confirm] [--dry-run] [--to TO] [--workspace WORKSPACE] [--idempotency-key IDEMPOTENCY_KEY] [--offline] [--full] [--text TEXT] [--text-file TEXT_FILE] [--message MESSAGE]
Flag Type Default Description
--profile string, repeatable Profile to act as; repeat it or give a,b for several
--confirm boolean false Actually do it; without it nothing is written to Slack
--dry-run boolean false Rehearse (the default); --confirm --dry-run is an error
--to string A Slack message link (thread reply), channel link, or #channel with --workspace
--workspace string The workspace host when --to does not name one
--idempotency-key string The key the send is recorded under (default: derived)
--offline boolean false Skip the auth.test session check
--full boolean false Do not truncate the message preview
--text string '-' reads the text from stdin (mrkdwn passes through untouched)
--text-file string Read the text from this UTF-8 file
--message string One line of text

Examples:

terminal
blowhorn-axi slack send --profile rian --to https://acme.slack.com/archives/C0123/p1776000000000100 --text-file reply.md
blowhorn-axi slack send --profile rian,lee --to https://acme.slack.com/archives/C0123/p1776000000000100 --text-file reply.md --confirm
blowhorn-axi slack send --profile rian --to '#general' --workspace acme.slack.com --text - --confirm

blowhorn-axi slack edit

Replace the text of a message the profile sent with blowhorn (the send ledger says so). Dry run unless --confirm. Session only: a profile with only an app token is refused (token_only). Slack reads (history, search, threads) are out of scope; use the Cursor Slack connection.

output
blowhorn-axi slack edit [-h] [--profile PROFILE] [--confirm] [--dry-run] [--permalink PERMALINK] [--full] [--text TEXT] [--text-file TEXT_FILE] [--message MESSAGE]
Flag Type Default Description
--profile string, repeatable Profile to act as; repeat it or give a,b for several
--confirm boolean false Actually do it; without it nothing is written to Slack
--dry-run boolean false Rehearse (the default); --confirm --dry-run is an error
--permalink string The Slack message link of the message to edit
--full boolean false Do not truncate the message preview
--text string '-' reads the text from stdin (mrkdwn passes through untouched)
--text-file string Read the text from this UTF-8 file
--message string One line of text

Examples:

terminal
blowhorn-axi slack edit --profile rian --permalink https://acme.slack.com/archives/C0123/p1776000000000400 --text-file fixed.md
blowhorn-axi slack edit --profile rian --permalink https://acme.slack.com/archives/C0123/p1776000000000400 --message 'Fixed link' --confirm

blowhorn-axi slack delete

Delete a message the profile sent with blowhorn (the send ledger says so). Dry run unless --confirm. Session only: a profile with only an app token is refused (token_only). Slack reads (history, search, threads) are out of scope; use the Cursor Slack connection.

output
blowhorn-axi slack delete [-h] [--profile PROFILE] [--confirm] [--dry-run] [--permalink PERMALINK]
Flag Type Default Description
--profile string, repeatable Profile to act as; repeat it or give a,b for several
--confirm boolean false Actually do it; without it nothing is written to Slack
--dry-run boolean false Rehearse (the default); --confirm --dry-run is an error
--permalink string The Slack message link of the message to delete

Examples:

terminal
blowhorn-axi slack delete --profile rian --permalink https://acme.slack.com/archives/C0123/p1776000000000400
blowhorn-axi slack delete --profile rian --permalink https://acme.slack.com/archives/C0123/p1776000000000400 --confirm

blowhorn-axi slack react

Add (or with --remove take back) an emoji reaction to any message as each profile. Dry run unless --confirm. Session only: a profile with only an app token is refused (token_only). Slack reads (history, search, threads) are out of scope; use the Cursor Slack connection.

output
blowhorn-axi slack react [-h] [--profile PROFILE] [--confirm] [--dry-run] [--permalink PERMALINK] [--emoji EMOJI] [--remove]
Flag Type Default Description
--profile string, repeatable Profile to act as; repeat it or give a,b for several
--confirm boolean false Actually do it; without it nothing is written to Slack
--dry-run boolean false Rehearse (the default); --confirm --dry-run is an error
--permalink string The Slack message link of the message to react to
--emoji string The emoji name, with or without colons (white_check_mark, :+1:)
--remove boolean false Take the reaction back (reactions.remove)

Examples:

terminal
blowhorn-axi slack react --profile rian,lee --permalink https://acme.slack.com/archives/C0123/p1776000000000100 --emoji white_check_mark --confirm
blowhorn-axi slack react --profile rian --permalink https://acme.slack.com/archives/C0123/p1776000000000100 --emoji eyes --remove --confirm

blowhorn-axi setup hooks

Install or repair the SessionStart hooks that show this home view to Claude Code, Codex and OpenCode. The npm launcher installs them; this command says how.

output
blowhorn-axi setup hooks [-h] [--status] [--remove] [--project]
Flag Type Default Description
--status boolean false Report which agents have the hook; writes nothing
--remove boolean false Take back only the hooks blowhorn-axi wrote
--project boolean false Use this project's agent settings instead of your user settings

Examples:

terminal
npx -y blowhorn-axi setup hooks
npx -y blowhorn-axi setup hooks --status
npx -y blowhorn-axi setup hooks --remove
Last modified October 18, 2026