Official CLI for SuppyHQ. Drive your inbox from the terminal — or let an AI agent (Claude Code, Cursor, Codex, OpenCode) do it for you.
curl -fsSL https://suppyhq.com/install-cli | bash
suppyhq auth login
suppyhq install-skill # Claude Code| Command | What it does |
|---|---|
suppyhq auth login |
Interactive setup. Paste Client ID + Secret from app.suppyhq.com/agents. |
suppyhq auth status |
Show who's authenticated. |
suppyhq auth logout |
Forget credentials. |
suppyhq install-skill |
Install the Claude Code skill into ~/.claude/skills/suppyhq/. |
suppyhq install-skill --target=cursor |
Same, for Cursor / Codex / OpenCode. |
suppyhq inbox |
List conversations (JSON). |
suppyhq thread <id> |
Show one conversation with messages (JSON). |
suppyhq customers |
List customers (JSON). |
suppyhq reply <id> "<html>" |
Post a reply. Body via 2nd arg or stdin. |
All read commands return JSON — pipe to jq, feed to an LLM, or just read it.
curl -fsSL https://suppyhq.com/install-cli | bashDetects OS + arch, downloads the matching binary from GitHub Releases, drops it in /usr/local/bin/suppyhq (or ~/.local/bin if non-root).
Grab the latest release, unpack the tar.gz for your platform, drop suppyhq in your $PATH.
Supported platforms: darwin/arm64, darwin/amd64, linux/amd64, linux/arm64.
Two ways:
# Built-in (no Node required)
suppyhq install-skill # Claude Code (default)
suppyhq install-skill --target=cursor # Cursor
suppyhq install-skill --target=codex # Codex CLI
suppyhq install-skill --target=opencode # OpenCode
suppyhq install-skill --target=all # All of the above# Or via the open Agent Skills standard
npx skills add karloscodes/suppyhq-cli -a claude-codeRestart your AI agent session after installing the skill so it picks it up.
| Source | Use |
|---|---|
~/.suppyhq/config.json (0600) |
Default. Created by auth login. |
SUPPYHQ_API_URL, SUPPYHQ_CLIENT_ID, SUPPYHQ_CLIENT_SECRET |
Env vars. Override the config file. |
OAuth2 client-credentials grant. The CLI exchanges your Client ID + Secret for a short-lived Bearer token on each invocation. No long-lived tokens, no refresh dance.
When you create an agent at app.suppyhq.com/agents you grant one or both of these:
| Scope | What it lets the agent do |
|---|---|
read |
List conversations, read every message in a thread, look up customer profiles and purchase history. Read-only — can't send anything. |
reply |
Save a draft to your composer, or send a reply on your behalf. Sent replies queue for 30 seconds (cancellable from the operator UI). The email carries an attribution footer naming the agent. |
Most agents need both. A triage-only agent can have just read.
# What's waiting on me?
suppyhq inbox | jq '.[] | select(.status=="open") | {id, subject, customer: .customer.email}'
# Latest message in a thread
suppyhq thread 42 | jq '.messages[-1]'
# Draft + send (with shell escape) or stdin (cleaner)
echo "<p>Yes — out by Friday.</p>" | suppyhq reply 42go test ./...
go build -o suppyhq .
./suppyhq helpReleases are built by GoReleaser on tag push (v*). See .goreleaser.yaml.
MIT — see LICENSE.