/basecamp
Interact with Basecamp via the Basecamp CLI. Full API coverage: projects, todos, cards, messages, files, schedule, check-ins, timeline, recordings, templates, webhooks, subscriptions, lineup, chat, pings, gauges, assignments, notifications, bookmarks, drafts, notes, calendars,
$ npx -y skills add basecamp/basecamp-cli --skill basecamp --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
- Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
- You can call itInvoke it directly when you want it.
- Slash command
/basecamp
Context preview
The summary Claude sees to decide when to auto-load this skill.
Interact with Basecamp via the Basecamp CLI. Full API coverage: projects, todos, cards, messages, files, schedule, check-ins, timeline, recordings, templates, webhooks, subscriptions, lineup, chat, pings, gauges, assignments, notifications, bookmarks, drafts, notes, calendars,
SKILL.md
basecamp.SKILL.mdname: basecamp
description: |
Interact with Basecamp via the Basecamp CLI. Full API coverage: projects, todos, cards,
messages, files, schedule, check-ins, timeline, recordings, templates, webhooks,
subscriptions, lineup, chat, pings, gauges, assignments, notifications, bookmarks,
drafts, notes, calendars, and accounts.
Use for ANY Basecamp question or action.
triggers:
# Direct invocations
- basecamp
- /basecamp
# Resource actions
- basecamp todos
- basecamp project
- basecamp cards
- basecamp chat
- basecamp campfire
- basecamp messages
- basecamp file
- basecamp document
- basecamp bookmarks
- basecamp drafts
- basecamp notes
- basecamp calendars
- basecamp schedule
- basecamp checkin
- basecamp check-in
- basecamp timeline
- basecamp template
- basecamp webhook
- basecamp gauge
- basecamp assignment
- basecamp notification
- basecamp account
# Common actions
- link to basecamp
- track in basecamp
- post to basecamp
- comment on basecamp
- complete todo
- mark done
- create todo
- move card
- download file
# Search and discovery
- search basecamp
- find in basecamp
- look up basecamp
- check basecamp
- list basecamp
- show basecamp
- get from basecamp
- fetch from basecamp
# Questions
- can I basecamp
- how do I basecamp
- what's in basecamp
- what basecamp
- does basecamp
# My work
- my todos
- my tasks
- my schedule
- my basecamp
- assigned to me
- my assignments
- my notifications
- overdue todos
- upcoming events
- project gauge
- project progress
# URLs
- 3.basecamp.com
- basecampapi.com
- https://3.basecamp.com/
invocable: true
argument-hint: "[action] [args...]"
/basecamp - Basecamp Workflow Command
Full CLI coverage: 155 endpoints across todos, cards, messages, files, schedule, check-ins, timeline, recordings, templates, webhooks, subscriptions, lineup, chat, pings, gauges, assignments, notifications, and accounts.
Agent Invariants
**MUST follow these rules:**
1. **Choose the right output mode** — `--jq` when you need to filter/extract data; `--json` for full JSON; `--md` when presenting results to a human (see Output Modes below). **Never pipe to external `jq` — use `--jq` instead.** 2. **Parse URLs first** with `basecamp url parse "<url>"` to extract IDs 3. **Comments are flat** - reply to parent recording, not to comments 4. **Check context** via `.basecamp/config.json` before assuming project 5. **Content fields accept Markdown and @mentions** — message body and comment content accept Markdown syntax; the CLI converts to HTML automatically. Use Markdown formatting (lists, bold, links, code blocks, tables) for rich content. Four mention syntaxes are available (prefer deterministic for agents):
- **`[@Name](mention:SGID)`** — zero API calls, embeds SGID directly (preferred for agents)
- **`[@Name](person:ID)`** — one API call, resolves person ID to SGID via pingable set
- **`@sgid:VALUE`** — inline SGID embed for pipeline composability
- **`@Name` / `@First.Last`** — fuzzy name resolution (may be ambiguous)
For todos, documents, and cards, content is sent as-is — use plain text or HTML directly.
**Table boundary:** GFM tables render in message/comment bodies, but the TUI in-place editors **refuse to open** table-bearing content (edit it on Basecamp web, or replace the whole field via `messages update` / `comments update` / `todos update --description`, which take fresh content and are unaffected), and human-readable CLI/TUI **display** of such content may lose table structure — both pending server-side Markdown support (BC3 #11986).
**Multiline / non-ASCII content:** do not rely on bash ANSI-C quoting (`$'...\n...'`) — it is a bash/zsh extension. Under a POSIX `/bin/sh` (dash, busybox-ash, common in sandboxes) the `$` is passed through literally and posts a stray leading `$`, and `\n` stays a literal backslash-n. Pipe the content via stdin instead, using `-` as the content argument:
printf '%s\n' '海报 mockup 方向稿:' '' '<bc-attachment ...>' | basecamp comments create <recording_id> - --in <project> --json
6. **Project scope is mandatory for most commands** — via `--in <project>` or `.basecamp/config.json`. Cross-project exceptions: `basecamp reports assigned` for assigned work, `basecamp assignments` for structured assignment views, `basecamp reports overdue` for overdue todos, `basecamp reports schedule` for upcoming schedule across all projects, `basecamp recordings <type>` for browsing by type, `basecamp notifications` for notifications, `basecamp gauges list` for account-wide gauges, and the seven list commands covered in item 7. 7. **Account-wide listing.** `basecamp todos list --all-projects --json` lists across every project; the same flag does the same on `cards list`, `messages list`, `comments list`, `files list`, `forwards list`, and `checkins answers`. It overrides a configured project, and with no project in scope those commands already list account-wide rather than prompting. Flags that name something inside a single project are rejected there rather than silently ignored. Account-wide listings return **the first 100 items by default** — account-wide "all" is the whole account, not one project's worth. Use `--limit N` to raise the cap (it walks pages until N are collected) or `--all` for everything. `--page N` fetches exactly one page, but only on the paginated listings. The two overdue variants — `basecamp todos list --all-projects --overdue` and `basecamp cards list --all-projects --overdue` — come from unpaginated endpoints. They accept `--limit` and `--all` but **reject `--page`**, so do not generate `--page` against them.
Output Modes
**Choosing a mode:**
| Goal | Flag | Format | |------|------|--------| | Filter/extract JSON data | `--jq '<expr>'` | Built-in jq filter (no external jq needed). Implies `--json`; filter runs on the
Read more
name: basecamp description: | Interact with Basecamp via the Basecamp CLI. Full API coverage: projects, todos, cards, messages, files, schedule, check-ins, timeline, recordings, templates, webhooks, subscriptions, lineup, chat, pings, gauges, assignments, notifications, bookmarks, drafts, notes, calendars, and accounts. Use for ANY Basecamp question or action. triggers: # Direct invocations - basecamp - /basecamp # Resource actions - basecamp todos - basecamp project - basecamp cards - basecamp chat - basecamp campfire - basecamp messages - basecamp file - basecamp document - basecamp bookmarks - basecamp drafts - basecamp notes - basecamp calendars - basecamp schedule - basecamp checkin - basecamp check-in - basecamp timeline - basecamp template - basecamp webhook - basecamp gauge - basecamp assignment - basecamp notification - basecamp account # Common actions - link to basecamp - track in basecamp - post to basecamp - comment on basecamp - complete todo - mark done - create todo - move card - download file # Search and discovery - search basecamp - find in basecamp - look up basecamp - check basecamp - list basecamp - show basecamp - get from basecamp - fetch from basecamp # Questions - can I basecamp - how do I basecamp - what's in basecamp - what basecamp - does basecamp # My work - my todos - my tasks - my schedule - my basecamp - assigned to me - my assignments - my notifications - overdue todos - upcoming events - project gauge - project progress # URLs - 3.basecamp.com - basecampapi.com - https://3.basecamp.com/ invocable: true argument-hint: "[action] [args...]"
/basecamp - Basecamp Workflow Command
Full CLI coverage: 155 endpoints across todos, cards, messages, files, schedule, check-ins, timeline, recordings, templates, webhooks, subscriptions, lineup, chat, pings, gauges, assignments, notifications, and accounts.
Agent Invariants
**MUST follow these rules:**
1. **Choose the right output mode** — `--jq` when you need to filter/extract data; `--json` for full JSON; `--md` when presenting results to a human (see Output Modes below). **Never pipe to external `jq` — use `--jq` instead.** 2. **Parse URLs first** with `basecamp url parse "<url>"` to extract IDs 3. **Comments are flat** - reply to parent recording, not to comments 4. **Check context** via `.basecamp/config.json` before assuming project 5. **Content fields accept Markdown and @mentions** — message body and comment content accept Markdown syntax; the CLI converts to HTML automatically. Use Markdown formatting (lists, bold, links, code blocks, tables) for rich content. Four mention syntaxes are available (prefer deterministic for agents):
- **`[@Name](mention:SGID)`** — zero API calls, embeds SGID directly (preferred for agents)
- **`[@Name](person:ID)`** — one API call, resolves person ID to SGID via pingable set
- **`@sgid:VALUE`** — inline SGID embed for pipeline composability
- **`@Name` / `@First.Last`** — fuzzy name resolution (may be ambiguous)
For todos, documents, and cards, content is sent as-is — use plain text or HTML directly.
**Table boundary:** GFM tables render in message/comment bodies, but the TUI in-place editors **refuse to open** table-bearing content (edit it on Basecamp web, or replace the whole field via `messages update` / `comments update` / `todos update --description`, which take fresh content and are unaffected), and human-readable CLI/TUI **display** of such content may lose table structure — both pending server-side Markdown support (BC3 #11986).
**Multiline / non-ASCII content:** do not rely on bash ANSI-C quoting (`$'...\n...'`) — it is a bash/zsh extension. Under a POSIX `/bin/sh` (dash, busybox-ash, common in sandboxes) the `$` is passed through literally and posts a stray leading `$`, and `\n` stays a literal backslash-n. Pipe the content via stdin instead, using `-` as the content argument:
printf '%s\n' '海报 mockup 方向稿:' '' '<bc-attachment ...>' | basecamp comments create <recording_id> - --in <project> --json
6. **Project scope is mandatory for most commands** — via `--in <project>` or `.basecamp/config.json`. Cross-project exceptions: `basecamp reports assigned` for assigned work, `basecamp assignments` for structured assignment views, `basecamp reports overdue` for overdue todos, `basecamp reports schedule` for upcoming schedule across all projects, `basecamp recordings <type>` for browsing by type, `basecamp notifications` for notifications, `basecamp gauges list` for account-wide gauges, and the seven list commands covered in item 7. 7. **Account-wide listing.** `basecamp todos list --all-projects --json` lists across every project; the same flag does the same on `cards list`, `messages list`, `comments list`, `files list`, `forwards list`, and `checkins answers`. It overrides a configured project, and with no project in scope those commands already list account-wide rather than prompting. Flags that name something inside a single project are rejected there rather than silently ignored. Account-wide listings return **the first 100 items by default** — account-wide "all" is the whole account, not one project's worth. Use `--limit N` to raise the cap (it walks pages until N are collected) or `--all` for everything. `--page N` fetches exactly one page, but only on the paginated listings. The two overdue variants — `basecamp todos list --all-projects --overdue` and `basecamp cards list --all-projects --overdue` — come from unpaginated endpoints. They accept `--limit` and `--all` but **reject `--page`**, so do not generate `--page` against them.
Output Modes
**Choosing a mode:**
| Goal | Flag | Format | |------|------|--------| | Filter/extract JSON data | `--jq '<expr>'` | Built-in jq filter (no external jq needed). Implies `--json`; filter runs on the
basecamp is the official command-line interface for Basecamp. Manage projects, todos, messages, and more from your terminal or through AI agents.
Repo: basecamp/basecamp-cli

