Geekbot runs asynchronous standups, check-ins, and polls in Slack and Microsoft Teams. This CLI lets you run them straight from your AI coding agent — or the terminal.
Every command returns structured JSON with machine-readable exit codes, credentials live in your OS keychain (never in dotfiles), and it works wherever your agent does — Claude Code, Claude Desktop, Codex CLI, Cursor, Gemini CLI, and any Agent Skills tool (Windsurf, Copilot, …).
Two steps, then you're talking to Geekbot in plain English.
Pick your tool:
Claude Code
# Inside Claude Code:
/plugin marketplace add geekbot-com/geekbot-cli
/plugin install geekbot@geekbot-cli
/reload-pluginsClaude Desktop
- Settings → Extensions → Install from GitHub… and enter
geekbot-com/geekbot-cli, then restart when prompted. - Allowlist the API domain. Claude Desktop sandboxes network access, so add
api.geekbot.comunder Settings → Sandbox → Allowed domains and apply it to all conversations. (Org admins must also allow it in the Anthropic console.)
Skills only run in surfaces that support tools — today that's cowork sessions and code chats, not regular text chats.
Codex CLI
# Register the marketplace (shell):
codex plugin marketplace add geekbot-com/geekbot-cliThen start codex, open /plugins, find geekbot under the geekbot-cli marketplace, and install it.
Cursor
# Register the marketplace (shell, via the Cursor CLI `agent`):
agent plugin marketplace add https://github.com/geekbot-com/geekbot-cliThen in Cursor (IDE chat or the agent CLI) run /plugin, open the Marketplace tab, find geekbot under geekbot-cli, and install it at user scope. The marketplace is tied to your Cursor account, so it also appears in Cursor Desktop under Customize → Plugins.
Teams / Enterprise admins can instead import the repo once as a team marketplace (Dashboard → Plugins → Add Marketplace) so everyone can install it from Customize. If the GitHub import finds no plugins, clone the repo and import the local clone.
Gemini CLI
gemini extensions new geekbot --from geekbot-com/geekbot-cliWindsurf, Copilot & 60+ other agents
These tools don't use plugins — they support the open Agent Skills convention (a SKILL.md file the agent auto-discovers). Install the Geekbot skill into all of them at once with Vercel Skills, which detects your installed agents and copies (or symlinks) the skill into each one's skills/ directory:
npx skills add geekbot-com/geekbot-cliThis covers Windsurf, GitHub Copilot, Cline, Roo Code, Zed, and dozens more. It also works for Cursor if you'd rather skip the plugin.
Just say it in plain English:
"Set up Geekbot."
Your agent will:
- Install the
geekbotCLI (npm install -g geekbot-cli) if it isn't already on your$PATH. - Log you in — browser-based OAuth, no API key to paste. The token is stored securely in your OS keychain.
- Verify everything and report back.
That's it. Now just ask for what you want:
"Fetch my standups." "Draft my standup report for today." "Who hasn't posted in the daily standup?" "Create a poll asking the team where to go for lunch."
You can drive the CLI directly. See Manual installation below.
npm install -g geekbot-cli # install
geekbot auth login # browser OAuth (or: geekbot auth setup --api-key <KEY>)
geekbot standup list # structured JSON on stdoutPlugin updates are pull-based — when a new version ships, your agent won't pick it up on its own (auto-update is off by default for third-party marketplaces). Refresh it yourself:
Claude Code
# Inside Claude Code:
/plugin marketplace update geekbot-cli
/reload-pluginsOr turn on auto-update once: run /plugin → Marketplaces → select geekbot-cli → Enable auto-update. Claude Code then refreshes after each session starts.
Codex CLI
# Refresh the marketplace snapshot, then re-install to pick up the new version:
codex plugin marketplace upgrade geekbot-cli
codex plugin add geekbot@geekbot-cliCursor
# Re-index the marketplace, then reinstall geekbot from /plugin → Marketplace:
agent plugin marketplace update geekbot-cliFor a team marketplace, click Refresh on it in the Dashboard (or pull the clone first if it was imported from a local directory).
The
geekbotCLI binary updates independently of the plugin:npm install -g geekbot-cli@latest(orbun install -g geekbot-cli).
The CLI follows a geekbot <resource> <action> [options] pattern. Run geekbot <resource> <action> --help for the full option list on any command. It wraps the Geekbot API — see developers.geekbot.com for the underlying endpoints and full data shapes.
| Resource | Actions | What it does |
|---|---|---|
standup |
list · get <id> · participation <id> · create · start <id> |
List, inspect, create, trigger standups, or read participation |
report |
list · get <id> · create · edit <id> · delete <id> |
Read and submit standup reports |
poll |
list · get <id> · votes <id> · participation <id> · create |
Manage polls, read results and response rate (Slack teams only) |
me |
show · teams |
Show your profile or the teams you belong to |
team |
list |
List teams with their members |
auth |
login · setup · status · remove |
Manage authentication (see below) |
A few common examples:
geekbot standup list
geekbot standup create --name "Sprint Retro" --channel "#engineering" \
--questions '["What went well?","What could improve?"]'
geekbot standup participation 123 --since 2026-01-01 --until 2026-02-01
geekbot report create --standup-id 123 --answers '{"101":"Shipped auth","102":"Writing tests"}'
geekbot poll create --name "Lunch" --channel "#general" \
--question "Where to?" --choices '["Pizza","Sushi","Tacos"]'
geekbot poll participation 456The CLI resolves credentials from the first source it finds, in this order:
--api-key <key>— per-command override, handy for scripts and CIGEEKBOT_API_KEYenvironment variable — session/shell-level credential- OS keychain — persistent, secure storage written by
geekbot auth loginorgeekbot auth setup
OAuth (geekbot auth login) is the preferred way to sign in — a quick browser approval that stores a short-lived, revocable token in your OS keychain and never exposes a secret in your terminal. The API key is an alternative for cases where OAuth isn't an option, such as CI or headless environments.
geekbot auth loginRuns the OAuth 2.0 authorization-code flow with PKCE: opens your browser, you approve in the Geekbot dashboard, and a short-lived cli_* token is written to your OS keychain — nothing is pasted into your terminal or shell history.
| Option | Default | Description |
|---|---|---|
--no-browser |
— | Print the authorize URL instead of launching a browser (use on WSL, SSH, or headless boxes) |
--device-name <name> |
hostname | Friendly name shown on the token in the dashboard, so you can revoke it later |
--ttl-days <days> |
30 |
Token lifetime. Allowed: 7, 30, 90, 180, 365 |
Handy for CI or where OAuth isn't available. Grab a key at https://app.geekbot.com/dashboard/api-webhooks.
geekbot auth setup --api-key <YOUR_KEY> # or run `geekbot auth setup` to enter it interactivelyThe key is validated against the API before being stored in your OS keychain (macOS Keychain, Windows Credential Vault, or Linux Secret Service) — never on disk in plaintext.
geekbot auth status # verify stored credentials work
geekbot auth remove # delete the stored key from the keychain- The CLI talks only to Geekbot. Network requests go to
api.geekbot.com(andoauth.geekbot.comduring login). - Credentials never leave your machine except to authenticate with Geekbot.
- Command output is your team's data — standups, reports, poll votes. When you run the CLI through an AI agent, that output enters the agent's context and may be sent to the model provider. Keep that in mind for anything sensitive.
Every command writes a JSON envelope to stdout; diagnostics (help, parse errors) go to stderr.
{
"ok": true,
"data": { "id": 123, "name": "Daily Standup", "channel": "#engineering" },
"error": null,
"metadata": { "timestamp": "2026-03-17T10:30:00.000Z" }
}On failure, ok is false and error carries machine-readable fields — including a retryable flag and an actionable suggestion:
{
"ok": false,
"data": null,
"error": {
"code": "standup_not_found",
"message": "Standup 999 not found",
"retryable": false,
"suggestion": "Run `geekbot standup list` to see available standups."
},
"metadata": { "timestamp": "2026-03-17T10:30:00.000Z" }
}Each error class maps to a distinct exit code, so scripts can branch without parsing text:
| Code | Name | Meaning |
|---|---|---|
| 0 | SUCCESS |
Completed successfully |
| 1 | GENERAL |
Unexpected / unclassified error |
| 2 | USAGE |
Invalid syntax or missing required options |
| 3 | NOT_FOUND |
Resource does not exist |
| 4 | AUTH |
Authentication failed (missing or invalid key) |
| 5 | FORBIDDEN |
Insufficient permissions |
| 6 | VALIDATION |
Input validation failed |
| 7 | NETWORK |
Network error (DNS, timeout, connection refused) |
| 8 | CONFLICT |
Resource conflict (duplicate, concurrent change) |
| 9 | API_ERROR |
Geekbot API returned an unexpected error |
| Symptom | Fix |
|---|---|
geekbot: command not found after install |
The global bin isn't on your $PATH. Reopen your shell, or check npm bin -g / bun pm bin -g and add it to $PATH. |
npx geekbot-cli fails with a shebang/bun error |
The CLI uses a #!/usr/bin/env bun shebang — npx is not a Node fallback. Install globally (npm install -g geekbot-cli) and run geekbot, or put Bun ≥ 1.3.5 on your $PATH. |
Browser doesn't open on auth login (WSL, SSH, headless) |
Run geekbot auth login --no-browser and open the printed URL manually. |
| Calls fail in Claude Desktop with a network error | Allowlist api.geekbot.com under Settings → Sandbox → Allowed domains (apply to all conversations). Org admins must also allow it in the Anthropic console. |
auth status reports not authenticated |
Re-run geekbot auth login, or confirm GEEKBOT_API_KEY isn't set to a stale value (env vars override the keychain). |
New to Geekbot, or not sure what's possible? Once it's set up, here are the kinds of things you can ask your agent in plain English — it picks the right commands for you.
Standups — recurring async check-ins where teammates answer a few questions on a schedule.
- "What standups am I in?"
- "Set up a daily standup for #engineering at 10am asking what people did yesterday and what's planned today."
- "Trigger the daily standup now."
Reports — the answers people submit to a standup.
- "Draft my standup report for today."
- "Did everyone post in today's standup? Who's missing?"
- "Summarize this week's reports — what are the blockers?"
Polls (Slack teams only) — quick team votes.
- "Create a poll asking where we should go for the team lunch."
- "Show me the results of the lunch poll."
Team & profile
- "Who's on my team?"
- "Show my Geekbot profile."
Contributions are welcome! To get set up:
git clone https://github.com/geekbot-com/geekbot-cli.git
cd geekbot-cli
bun install
bun test # run the suite
bun run check # lint + formatThen:
- Fork the repo and create a feature branch (
git checkout -b my-feature). - Make your changes and add tests.
- Run
bun testandbun run checkto verify. - Open a pull request against
main.
Found a bug or have an idea? Open an issue.
Maintainers: see RELEASING.md for how the npm CLI and the agent plugin are versioned and published — they're two separate release lines.
MIT © Geekbot