{"id":"81fab936-0a36-4905-b9ea-7accb70777c2","shortId":"EdcjXH","kind":"skill","title":"basecamp","tagline":"Interact with Basecamp via the Basecamp CLI. Full API coverage: projects, todos, cards,\nmessages, files, schedule, check-ins, timeline, recordings, templates, webhooks,\nsubscriptions, lineup, chat, gauges, assignments, notifications, and accounts.\nUse for ANY Basecamp question or","description":"# /basecamp - Basecamp Workflow Command\n\nFull CLI coverage: 155 endpoints across todos, cards, messages, files, schedule, check-ins, timeline, recordings, templates, webhooks, subscriptions, lineup, chat, gauges, assignments, notifications, and accounts.\n\n## Agent Invariants\n\n**MUST follow these rules:**\n\n1. **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.**\n2. **Parse URLs first** with `basecamp url parse \"<url>\"` to extract IDs\n3. **Comments are flat** - reply to parent recording, not to comments\n4. **Check context** via `.basecamp/config.json` before assuming project\n5. **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) for rich content. Four mention syntaxes are available (prefer deterministic for agents):\n   - **`[@Name](mention:SGID)`** — zero API calls, embeds SGID directly (preferred for agents)\n   - **`[@Name](person:ID)`** — one API call, resolves person ID to SGID via pingable set\n   - **`@sgid:VALUE`** — inline SGID embed for pipeline composability\n   - **`@Name` / `@First.Last`** — fuzzy name resolution (may be ambiguous)\n   For todos, documents, and cards, content is sent as-is — use plain text or HTML directly.\n6. **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.\n\n### Output Modes\n\n**Choosing a mode:**\n\n| Goal | Flag | Format |\n|------|------|--------|\n| Filter/extract JSON data | `--jq '<expr>'` | Built-in jq filter (no external jq needed). Implies `--json`; filter runs on the envelope. |\n| Filter in agent mode | `--agent --jq '<expr>'` | Filter runs on data-only payload (no envelope), matching `--agent` contract. |\n| Full JSON output | `--json` | JSON envelope: `{ok, data, summary, breadcrumbs, meta}` |\n| Show results to a user | `--md` / `-m` | GFM tables, task lists, structured Markdown |\n| Automation / scripting | `--agent` | Success: raw JSON data (no envelope); errors: `{ok:false,...}` object; no interactive prompts |\n\nAlways pass `--json` or `--md` explicitly — auto-detection depends on config and may not produce the format you expect. Use `--md` when composing reports, summarizing data, or displaying results inline. `--agent` is for headless integration scripts.\n\n**Other modes:** `--quiet` (success: raw JSON, no envelope; errors: `{ok:false,...}`), `--ids-only`, `--count`, `--stats` (session statistics), `--styled` (force ANSI), `-v` / `-vv` (verbose/trace), `--jq '<expr>'` (built-in jq filter — see below).\n\n### CLI Introspection\n\nNavigate unfamiliar commands with `--agent --help` — returns structured JSON describing any command:\n\n```bash\nbasecamp todos --agent --help\n```\n\n```json\n{\"command\":\"todos\",\"path\":\"basecamp todos\",\"short\":\"...\",\"long\":\"...\",\"usage\":\"...\",\"notes\":[\"...\"],\n \"subcommands\":[{\"name\":\"sweep\",\"short\":\"...\",\"path\":\"basecamp todos sweep\"}],\n \"flags\":[{\"name\":\"assignee\",\"type\":\"string\",\"default\":\"\",\"usage\":\"...\"}],\n \"inherited_flags\":[{\"name\":\"json\",\"shorthand\":\"j\",\"type\":\"bool\",\"default\":\"false\",\"usage\":\"...\"}]}\n```\n\nWalk the tree: start at `basecamp --agent --help` for top-level commands, then drill into any subcommand. Commands include `notes` with domain-specific agent hints (e.g., \"Cards do NOT support --assignee filtering\").\n\n### Pagination\n\n```bash\nbasecamp <cmd> --limit 50   # Cap results (default varies by resource)\nbasecamp <cmd> --all        # Fetch all (may be slow for large datasets)\nbasecamp <cmd> --page 1     # First page only, no auto-pagination\n```\n\n`--all` and `--limit` are mutually exclusive. `--page` cannot combine with either.\n\n### Smart Defaults\n\n- `--assignee me` resolves to current user\n- `--due tomorrow` / `--due +3` / `--due \"next week\"` - natural date parsing\n- Project from `.basecamp/config.json` if `--in` not specified\n\n## Quick Reference\n\n> **Note:** Most queries require project scope (via `--in <project>` or `.basecamp/config.json`). Cross-project exceptions: `basecamp reports assigned`, `basecamp assignments`, `basecamp reports overdue`, `basecamp reports schedule`, `basecamp recordings <type>`, `basecamp notifications`, `basecamp gauges list`.\n\n| Task | Command |\n|------|---------|\n| List projects | `basecamp projects list --json` |\n| My todos (in project) | `basecamp todos list --assignee me --in <project> --json` |\n| My todos (cross-project) | `basecamp reports assigned --json` (defaults to \"me\") |\n| My schedule (cross-project) | `basecamp reports schedule --json` (upcoming events across all projects) |\n| All todos (cross-project) | `basecamp recordings todos --json` (no assignee data — cannot filter by person) |\n| Overdue todos (in project) | `basecamp todos list --overdue --in <project> --json` |\n| Overdue todos (cross-project) | `basecamp reports overdue --json` |\n| Assign todo | `basecamp assign <id> [id...] --to <person> --in <project> --json` |\n| Assign card | `basecamp assign <id> [id...] --card --to <person> --in <project> --json` |\n| Assign card step | `basecamp assign <id> [id...] --step --to <person> --in <project> --json` |\n| Create todo | `basecamp todo \"Task\" --in <project> --list <list> --json` |\n| Create todolist | `basecamp todolists create \"Name\" --in <project> --json` |\n| Complete todo | `basecamp done <id> --json` |\n| List cards | `basecamp cards list --in <project> --json` |\n| Create card | `basecamp card \"Title\" --in <project> --json` |\n| Move card | `basecamp cards move <id> --to <column> [--position N] --in <project> --json` |\n| Move card to on-hold | `basecamp cards move <id> --on-hold --in <project> --json` |\n| Post message | `basecamp message \"Title\" \"Body\" --in <project> --json` |\n| Post with @mention | `basecamp message \"Title\" \"Hey @First.Last, ...\" --in <project> --json` |\n| Post silently | `basecamp message \"Title\" \"Body\" --no-subscribe --in <project> --json` |\n| Post to chat | `basecamp chat post \"Message\" --in <project> --json` |\n| Add comment | `basecamp comment <recording_id> \"Text\" --in <project> --json` |\n| List attachments | `basecamp attachments list <id\\|url> --json` |\n| Download attachments | `basecamp attachments download <id> --out /tmp/` |\n| Show + download | `basecamp todos show <id> --download-attachments --json` |\n| Stream attachment to stdout | `basecamp attachments download <id> --file <name> --out -` |\n| Search | `basecamp search \"query\" --json` |\n| Parse URL | `basecamp url parse \"<url>\" --json` |\n| Upload file | `basecamp files uploads create <file> [--vault <folder_id>] --in <project> --json` |\n| Download file | `basecamp files download <id> --in <project>` |\n| Stream file to stdout | `basecamp files download <id> --out - --in <project>` |\n| Download storage URL | `basecamp files download \"https://storage.3.basecamp.com/.../download/report.pdf\"` |\n| My assignments | `basecamp assignments --json` (priorities + non-priorities) |\n| Overdue assignments | `basecamp assignments due overdue --json` |\n| Completed assignments | `basecamp assignments completed --json` |\n| Notifications | `basecamp notifications --json` |\n| Mark notification read | `basecamp notifications read <id> --json` |\n| Gauges (account-wide) | `basecamp gauges list --json` |\n| Gauge needles | `basecamp gauges needles --in <project> --json` |\n| Create needle | `basecamp gauges create --position 75 --color green --in <project> --json` |\n| Account details | `basecamp accounts show --json` |\n| Watch timeline | `basecamp timeline --watch` |\n\n## URL Parsing\n\n**Always parse URLs before acting on them:**\n\n```bash\nbasecamp url parse \"https://3.basecamp.com/2914079/buckets/41746046/messages/9478142982#__recording_9488783598\" --json\n```\n\nReturns: `account_id`, `project_id`, `type`, `recording_id`, `comment_id` (from fragment).\n\n**URL patterns:**\n- `/buckets/27/messages/123` - Message 123 in project 27\n- `/buckets/27/messages/123#__recording_456` - Comment 456 on message 123\n- `/buckets/27/card_tables/cards/789` - Card 789\n- `/buckets/27/card_tables/columns/456` - Column 456 (for creating cards)\n- `/buckets/27/todos/101` - Todo 101\n- `/buckets/27/uploads/202` - Upload/file 202\n- `/buckets/27/documents/303` - Document 303\n- `/buckets/27/schedule_entries/404` - Schedule entry 404\n\n**Replying to comments:**\n```bash\n# Comments are flat - reply to the parent recording_id, not the comment_id\nbasecamp url parse \"https://...messages/123#__recording_456\" --json\n# Returns recording_id: 123 (parent), comment_id: 456 (fragment) - comment on 123, not 456\nbasecamp comment 123 \"Reply\" --in <project>\n```\n\n## Decision Trees\n\n### Finding Content\n\n```\nNeed to find something?\n├── Know the type + project? → basecamp <type> list --in <project> --json\n│   (some groups have default list behavior; use --agent --help if unsure)\n├── My assigned work? → basecamp assignments --json (priorities + non-priorities)\n│   Or: basecamp reports assigned --json (traditional view, defaults to \"me\")\n├── My overdue assignments? → basecamp assignments due overdue --json\n├── My notifications? → basecamp notifications --json\n├── Upcoming schedule? → basecamp reports schedule --json (cross-project)\n├── Overdue across projects? → basecamp reports overdue --json\n├── Browse by type cross-project? → basecamp recordings <type> --json\n│   (types: todos, messages, documents, comments, cards, uploads)\n│   Note: Defaults to active status; use --status archived for archived items\n│   ⚠ No assignee data — cannot filter by person; use reports assigned instead\n├── Full-text search? → basecamp search \"query\" --json\n└── Have a URL? → basecamp url parse \"<url>\" --json\n```\n\n### Modifying Content\n\n```\nWant to change something?\n├── Have URL? → basecamp url parse \"<url>\" → use extracted IDs\n├── Have ID? → basecamp <resource> update <id> --field value\n├── Change status? → basecamp recordings trash|archive|restore <id>\n└── Complete todo? → basecamp done <id>\n```\n\n## Common Workflows\n\n### Link Code to Basecamp Todo\n\n```bash\n# Get commit info and comment on todo (use printf %q for safe quoting)\nCOMMIT=$(git rev-parse --short HEAD)\nMSG=$(git log -1 --format=%s)\nbasecamp comment <todo_id> \"Commit $COMMIT: $(printf '%s' \"$MSG\")\" --in <project>\n\n# Complete when done\nbasecamp done <todo_id>\n```\n\n### Track PR in Basecamp\n\n```bash\n# Create todo for PR work\nbasecamp todo \"Review PR #42\" --in <project> --assignee me --due tomorrow\n\n# When merged\nbasecamp done <todo_id>\nbasecamp chat post \"Merged PR #42\" --in <project>\n```\n\n### Bulk Process Overdue Todos\n\n```bash\n# Preview overdue todos\nbasecamp todos sweep --overdue --dry-run --in <project>\n\n# Complete all with comment\nbasecamp todos sweep --overdue --complete --comment \"Cleaning up\" --in <project>\n```\n\n### Mentioning people (preferred — deterministic)\n\n```bash\n# 1. Look up the person\nbasecamp people pingable --jq '.data[] | select(.name == \"Jane Smith\")'\n# => {\"id\": 42000, \"attachable_sgid\": \"BAh7CEkiCG...\", \"name\": \"Jane Smith\"}\n\n# 2. Use SGID in Markdown mention syntax (zero API calls during post)\nbasecamp comment 123 \"Hey [@Jane Smith](mention:BAh7CEkiCG...), check this\" --in <project>\n\n# Or use person ID (one lookup during post)\nbasecamp comment 123 \"Hey [@Jane Smith](person:42000), check this\" --in <project>\n```\n\n### Mentioning people (interactive — may be ambiguous)\n\n```bash\n# Fuzzy matching: use @First.Last to reduce ambiguity\nbasecamp comment <id> \"@Jane.Smith, please review this\" --in <project>\nbasecamp message \"Update\" \"cc @Jane, @Alex\" --in <project>\nbasecamp chat post \"@Jane, done!\" --in <project>\n\n# Ambiguous names return an error with suggestions\n# Use @First.Last for disambiguation\n```\n\n### Move Card Through Workflow\n\n```bash\n# List columns to get IDs\nbasecamp cards columns --in <project> --json\n\n# Move card to column\nbasecamp cards move <card_id> --to <column_id> --in <project>\n\n# Move card to specific position in column (1-indexed)\nbasecamp cards move <card_id> --to <column_id> --position 1 --in <project>\n\n# Move card to on-hold section of its current column\nbasecamp cards move <card_id> --on-hold --in <project>\n\n# Move card to on-hold section of a specific column (numeric ID)\nbasecamp cards move <card_id> --to <column_id> --on-hold --in <project>\n\n# Move card to on-hold section of a named column (requires --card-table)\nbasecamp cards move <card_id> --to \"Column Name\" --on-hold --card-table <table_id> --in <project>\n```\n\n### Download File from Basecamp\n\n```bash\nbasecamp files download <upload_id> --in <project> --out ./downloads\n\n# Download attachment from a storage URL (no --in needed)\nbasecamp files download \"https://storage.3.basecamp.com/123/blobs/abc/download/report.pdf\"\n\n# Stream to stdout (for piping)\nbasecamp files download <upload_id> --out - --in <project>\n```\n\n### Working with Attachments (Multimodal Agent Workflow)\n\nMessages, todos, cards, and documents may contain images and file attachments\n(mockups, screenshots, annotated designs). Show commands surface these as\nfield-scoped collections — `content_attachments` and/or `description_attachments`\n— keyed by which rich-text attribute contained them. The notice field hints at\nthe download command.\n\n**Step 1: Fetch the recording and check for attachments**\n```bash\nbasecamp todos show <id> --json\n# Response includes description_attachments when attachments are present\n# Messages/documents use content_attachments; cards may have both\n# The notice field hints: \"3 attachment(s) — download: basecamp attachments download <id>\"\n```\n\n**Step 2 (one-shot): Download attachments with the show command**\n```bash\n# --download-attachments fetches + downloads in one shot\nbasecamp todos show <id> --download-attachments --json\n# content_attachments/description_attachments entries now include \"path\" pointing to local files\n# Downloads to OS temp dir by default, or specify: --download-attachments /tmp/att\n```\n\n**Step 2 (two-step alternative): Download separately**\n```bash\n# Download all at once (shows progress on stderr)\nbasecamp attachments download <id> --out /tmp/attachments\n```\n\n**Step 3: View images with your native file-read tool**\nFor multimodal LLMs (Claude, Gemini), use your file-read tool on the `path`\nfrom the response to view downloaded images directly — no browser needed.\nThis surfaces visual context (mockups, screenshots, annotated designs) that\nis often the most important part of a Basecamp todo or message.\n\n```bash\n# Stream a single image to stdout for piping\nbasecamp attachments download <id> --file mockup.png --out -\n\n# Select by index when names collide\nbasecamp attachments download <id> --index 2 --out -\n```\n\n**Key pattern:** When a show command response contains `content_attachments`\nor `description_attachments`, always download and view them — visual context is\noften more important than the text content. Use `--download-attachments` for\none-shot fetch+download, or follow the breadcrumb hint for two-step control.\n\n## Resource Reference\n\n### Projects\n\n```bash\nbasecamp projects list --json               # List all\nbasecamp projects show <id> --json          # Show details\nbasecamp projects create \"Name\" --json      # Create\nbasecamp projects update <id> --name \"New\"  # Update\n```\n\n### Todos\n\n```bash\nbasecamp todos list --in <project> --json               # List in project\nbasecamp todos list --assignee me --in <project>        # My todos\nbasecamp todos list --overdue --in <project>            # Overdue only\nbasecamp todos list --status completed --in <project>   # Completed\nbasecamp todos list --list <todolist_id> --in <project> # In specific list\nbasecamp todo \"Task\" --in <project> --list <list> --assignee me --due tomorrow\nbasecamp done <id> [id...]                              # Complete (multiple OK)\nbasecamp reopen <id>                                    # Uncomplete\nbasecamp assign <id> [id...] --to <person> --in <project>       # Assign to-do (multiple OK)\nbasecamp unassign <id> [id...] --from <person> --in <project>   # Remove to-do assignee (multiple OK)\nbasecamp assign <id> [id...] --card --to <person> --in <project>   # Assign card\nbasecamp unassign <id> [id...] --card --from <person> --in <project> # Remove card assignee\nbasecamp assign <id> [id...] --step --to <person> --in <project>   # Assign card step\nbasecamp unassign <id> [id...] --step --from <person> --in <project> # Remove step assignee\nbasecamp todos position <id> --to 1                     # Move to top\nbasecamp todos position <id> --to 1 --list <id|name|url> # Move to different list\nbasecamp todos sweep --overdue --complete --comment \"Done\" --in <project>\n```\n\n**Flags:** `--assignee` (todos only - not available on cards/messages), `--status` (completed/incomplete), `--overdue`, `--list`, `--due`, `--limit`, `--all`\n\n### Todolists\n\nTodolists are containers for todos. Create a todolist before adding todos.\n\n```bash\nbasecamp todolists list --in <project> --json              # List todolists\nbasecamp todolists show <id> --in <project>                # Show details\nbasecamp todolists create \"Name\" --in <project> --json     # Create\nbasecamp todolists create \"Name\" --description \"Desc\" --in <project>\nbasecamp todolists update <id> --name \"New\" --in <project> # Update\n```\n\n### Cards (Kanban)\n\n**Note:** Cards do NOT support `--assignee` filtering like todos. Fetch all cards and filter client-side if needed. If a project has multiple card tables, you must specify `--card-table <id>`. When you get an \"Ambiguous card table\" error, the hint shows available table IDs and names.\n\n```bash\nbasecamp cards list --in <project> --json             # All cards\nbasecamp cards list --card-table <id> --in <project>  # Specific table (required if multiple)\nbasecamp cards list --column <id> --in <project>      # Cards in column\nbasecamp cards columns --in <project> --json          # List columns (needs --card-table if multiple)\nbasecamp cards show <id> --in <project>               # Card details\nbasecamp card \"Title\" \"<p>Body</p>\" --in <project> --column <id>\nbasecamp cards update <id> --title \"New\" --due tomorrow --assignee me\nbasecamp cards move <id> --to <column_id>             # Move to column (numeric ID)\nbasecamp cards move <id> --to \"Done\" --card-table <table_id>  # Move by name (needs table)\nbasecamp cards move <id> --to \"Done\" --position 1 --card-table <table_id>  # Move to position\nbasecamp cards move <id> --on-hold                    # Move to on-hold of current column\nbasecamp cards move <id> --to <column_id> --on-hold   # Move to on-hold of target column\n```\n\n**Archived/trashed cards:** `cards list` only returns active cards. For archived or trashed cards, use `basecamp recordings cards --status archived --in <project>` or `--status trashed`.\n\n**Identifying completed cards:** Cards in Done columns have `parent.type: \"Kanban::DoneColumn\"` and `completed: true`. Use this to identify completed cards that haven't been archived.\n\n**Limitation:** Basecamp does not track when cards are moved between columns. The `updated_at` field updates on any modification and cannot reliably indicate when a card was completed.\n\n**Card Steps (checklists):**\n```bash\nbasecamp cards steps <card_id> --in <project>     # List steps\nbasecamp cards step create \"Step\" --card <id> --in <project>\nbasecamp cards step complete <step_id> --in <project>\nbasecamp cards step uncomplete <step_id>\n```\n\n**Column management:**\n```bash\nbasecamp cards column show <id> --in <project>\nbasecamp cards column create \"Name\" --in <project>\nbasecamp cards column update <id> --title \"New\"\nbasecamp cards column move <id> --position 2\nbasecamp cards column color <id> --color blue\nbasecamp cards column on-hold <id>                # Enable on-hold section\nbasecamp cards column watch <id>                  # Subscribe to column\n```\n\n### Messages\n\n```bash\nbasecamp messages list --in <project> --json  # List messages\nbasecamp messages show <id> --in <project>    # Show message\nbasecamp message \"Title\" \"Body\" --in <project>\nbasecamp message \"Draft\" \"WIP\" --draft --in <project>  # Create draft\nbasecamp messages publish <id>               # Publish a draft\nbasecamp messages update <id> --title \"New\" --body \"Updated\"\nbasecamp messages pin <id> --in <project>     # Pin to top\nbasecamp messages unpin <id>                  # Unpin\n```\n\n**Archived/trashed messages:** `messages list` only returns active messages. For archived or trashed messages, use `basecamp recordings messages --status archived --in <project>` or `--status trashed`.\n\n**Flags:** `--draft` (create as draft), `--no-subscribe` (silent, no notifications), `--subscribe \"people\"` (comma-separated names, emails, IDs, or \"me\"; mutually exclusive with `--no-subscribe`), `--message-board <id>` (if multiple boards)\n\n```bash\nbasecamp message \"Bot update\" \"Done\" --no-subscribe --in <project>\nbasecamp message \"FYI\" \"Note\" --subscribe \"Alice,bob@x.com\" --in <project>\n```\n\n### Comments\n\n```bash\nbasecamp comments list <recording_id> --in <project> --json\nbasecamp comment <recording_id> \"Text\" --in <project>\nbasecamp comment <recording_id> \"@Jane.Smith, looks good!\" --in <project>  # With @mention\nbasecamp comments update <id> \"Updated\" --in <project>\n```\n\n### Files & Documents\n\n```bash\nbasecamp files list --in <project> --json               # List all (folders, files, docs)\nbasecamp files list --vault <folder_id> --in <project>  # List folder contents\nbasecamp files show <id> --in <project>                 # Show item (auto-detects type)\nbasecamp files download <id> --in <project>             # Download file\nbasecamp files download <id> --out ./dir                # Download to specific dir\nbasecamp files download \"https://storage.../download/f\" # Download from storage URL\nbasecamp files uploads create <file> --in <project>      # Upload file to root\nbasecamp files uploads create <file> --vault <folder_id> --in <project>  # Upload to folder\nbasecamp files folder create \"Folder\" --in <project>\nbasecamp files doc create \"Doc\" \"Body\" --in <project>\nbasecamp files doc create \"Draft\" --draft --in <project>\nbasecamp files doc create \"Notes\" \"...\" --no-subscribe --in <project>\nbasecamp files update <id> --title \"New\" --content \"Updated\"\n```\n\n**Subcommands:** `folders`, `uploads`, `documents` (each with pagination flags)\n\n### Schedule\n\nFor upcoming events across all projects, use `basecamp reports schedule --json`.\n\n```bash\nbasecamp schedule info --in <project> --json       # Schedule info\nbasecamp schedule entries --in <project> --json   # List entries\nbasecamp schedule show <id> --in <project>        # Entry details\nbasecamp schedule show <id> --date 20240315       # Specific occurrence (recurring)\nbasecamp schedule create \"Event\" --starts-at \"2024-03-15T09:00:00Z\" --ends-at \"2024-03-15T10:00:00Z\" --in <project>\nbasecamp schedule create \"Meeting\" --all-day --notify --participants 1,2,3 --in <project>\nbasecamp schedule create \"Sync\" --starts-at \"...\" --ends-at \"...\" --no-subscribe --in <project>\nbasecamp schedule update <id> --summary \"New title\" --starts-at \"...\"\nbasecamp schedule settings --include-due --in <project>  # Include todos/cards due dates\n```\n\n**Flags:** `--all-day`, `--notify`, `--participants <ids>`, `--no-subscribe`, `--subscribe \"people\"` (mutually exclusive), `--status` (active/archived/trashed)\n\n### Check-ins\n\n```bash\nbasecamp checkins --in <project> --json           # Questionnaire info\nbasecamp checkins questions --in <project>        # List questions\nbasecamp checkins question <id> --in <project>    # Question details\nbasecamp checkins answers <question_id> --in <project>  # List answers\nbasecamp checkins answer <id> --in <project>      # Answer details\nbasecamp checkins question create \"What did you work on?\" --in <project>\nbasecamp checkins question update <id> \"New question\" --frequency every_week\nbasecamp checkins answer create <question-id> \"My answer\" --in <project>  # Defaults to today\nbasecamp checkins answer update <id> \"Updated\" --in <project>\n```\n\n**Schedule options:** `--frequency` (every_day, every_week, every_other_week, every_month, on_certain_days), `--days 1,2,3,4,5` (0=Sun), `--time \"5:00pm\"`\n\n### Timeline\n\n```bash\nbasecamp timeline --json                          # Account-wide activity\nbasecamp timeline --in <project> --json           # Project activity\nbasecamp timeline me --json                       # Your activity\nbasecamp timeline --person <id> --json            # Person's activity\nbasecamp timeline --watch                         # Live monitoring (TUI)\nbasecamp timeline --watch --interval 60           # Poll every 60 seconds\n```\n\nUse `--limit N` to cap results or `--all` to fetch everything (default: 100 events). `--all` and `--page` cannot be combined with `--watch`.\n\n### Recordings (Cross-project)\n\nUse `basecamp recordings <type>` for cross-project type browsing. **For assigned todos, prefer `basecamp reports assigned`** — recordings do not include assignee data and cannot be filtered by person.\n\n```bash\nbasecamp recordings todos --json                  # All todos across projects\nbasecamp recordings todos --all --json            # All todos (paginate through all)\nbasecamp recordings messages --in <project>       # Messages in project\nbasecamp recordings documents --status archived   # Archived docs\nbasecamp recordings cards --sort created_at --direction asc\nbasecamp recordings cards --status archived --all --json  # Include archived cards\n```\n\n**Types:** `todos`, `messages`, `documents`, `comments`, `cards`, `uploads`\n\n**Status filtering:** By default, only `active` recordings are returned. Use `--status archived` or `--status trashed` to query other statuses. You may need separate queries to get complete data (e.g., active + archived).\n\n**Status management:**\n```bash\nbasecamp recordings trash <id> --in <project>     # Move to trash\nbasecamp recordings archive <id> --in <project>   # Archive\nbasecamp recordings restore <id> --in <project>   # Restore to active\nbasecamp recordings visibility <id> --visible --in <project>  # Show to clients\nbasecamp recordings visibility <id> --hidden      # Hide from clients\n```\n\n### Templates\n\n```bash\nbasecamp templates --json                         # List templates\nbasecamp templates show <id> --json               # Template details\nbasecamp templates create \"Template Name\"         # Create empty template\nbasecamp templates update <id> --name \"New Name\"\nbasecamp templates delete <id>                    # Trash template\nbasecamp templates construct <id> --name \"New Project\"  # Create project (async)\nbasecamp templates construction <template_id> <construction_id>  # Check status\n```\n\n**Construct returns construction_id - poll until status=\"completed\" to get project.**\n\n### Webhooks\n\n```bash\nbasecamp webhooks list --in <project> --json  # List webhooks\nbasecamp webhooks show <id> --in <project>    # Webhook details\nbasecamp webhooks create \"https://...\" --in <project>\nbasecamp webhooks create \"https://...\" --types \"Todo,Comment\" --in <project>\nbasecamp webhooks update <id> --active --in <project>\nbasecamp webhooks update <id> --inactive      # Disable\nbasecamp webhooks delete <id> --in <project>\n```\n\n**Event types:** Todo, Todolist, Message, Comment, Document, Upload, Vault, Schedule::Entry, Kanban::Card, Question, Question::Answer\n\n### Subscriptions\n\n```bash\nbasecamp subscriptions <recording_id>              # Who's subscribed\nbasecamp subscriptions subscribe <id>              # Subscribe yourself\nbasecamp subscriptions unsubscribe <id>            # Unsubscribe\nbasecamp subscriptions add <id> --people 1,2,3     # Add people\nbasecamp subscriptions remove <id> --people 1,2,3  # Remove people\n```\n\n### Lineup (Account-wide Markers)\n\n```bash\nbasecamp lineup list                              # List all markers\nbasecamp lineup create \"Milestone\" \"2024-03-15\"   # Create marker\nbasecamp lineup create \"Launch\" tomorrow          # Natural date parsing\nbasecamp lineup update <id> \"New Name\" \"+7\"\nbasecamp lineup delete <id>\n```\n\n**Note:** Lineup markers are account-wide, not project-scoped.\n\n### Gauges\n\nGauges track project progress with colored needles on a 0-100 scale.\n\n```bash\nbasecamp gauges list --json                           # All gauges (account-wide)\nbasecamp gauges needles --in <project> --json         # Needles for a project\nbasecamp gauges needle <id> --json                    # Needle details\nbasecamp gauges create --position 75 --color green --in <project>\nbasecamp gauges create --position 50 --color yellow --description \"Halfway\" --in <project>\nbasecamp gauges create --position 25 --notify custom --subscriptions 1,2 --in <project>\nbasecamp gauges update <id> --description \"Updated\"\nbasecamp gauges delete <id>\nbasecamp gauges enable --in <project>                 # Enable gauge on project\nbasecamp gauges disable --in <project>                # Disable gauge\n```\n\n**Colors:** green, yellow, red. **Notify:** everyone, working_on, custom (with `--subscriptions`).\n\n### Assignments\n\nView your assignments across all projects. Separate from `reports assigned` — provides structured priority grouping and due-date scoping.\n\n```bash\nbasecamp assignments --json                           # All (priorities + non-priorities)\nbasecamp assignments list --json                      # Same as bare\nbasecamp assignments completed --json                 # Completed assignments\nbasecamp assignments due overdue --json               # Overdue\nbasecamp assignments due due_today --json             # Due today\nbasecamp assignments due due_tomorrow --json          # Due tomorrow\nbasecamp assignments due due_later_this_week --json   # Due later this week\n```\n\n**Scopes:** overdue, due_today, due_tomorrow, due_later_this_week, due_next_week, due_later.\n\n### Notifications\n\n```bash\nbasecamp notifications --json                         # List (page 1)\nbasecamp notifications list --page 2 --json           # Page 2\nbasecamp notifications read <id> --json               # Mark as read\nbasecamp notifications read <id> <id> --page 2 --json # Mark from page 2\n```\n\n**Note:** `read` resolves notification IDs from the specified page. Use `--page` to match the page you listed.\n\n### Accounts\n\n```bash\nbasecamp accounts list --json                         # List authorized accounts\nbasecamp accounts use <id>                            # Set default account\nbasecamp accounts show --json                         # Account details, limits, subscription\nbasecamp accounts update --name \"New Name\" --json     # Rename account\nbasecamp accounts logo upload <file> --json           # Upload logo (PNG/JPEG/GIF/WebP/AVIF/HEIC, 5MB max)\nbasecamp accounts logo remove --json                  # Remove logo\n```\n\n### Chat\n\n```bash\nbasecamp chat --in <project> --json           # List chats\nbasecamp chat messages --in <project> --json  # List messages\nbasecamp chat post \"Hello!\" --in <project>\nbasecamp chat post \"@Jane.Smith, check this\" --in <project>  # With @mention (auto text/html)\nbasecamp chat line <line_id> --in <project>   # Show line\nbasecamp chat delete <line_id> --in <project> --force # Delete line (permanent, not trashable)\n```\n\n### People\n\n```bash\nbasecamp people list --json                          # All people in account\nbasecamp people list --project <project> --json    # People on project\nbasecamp me --json                                 # Current user\nbasecamp people show <id> --json                   # Person details\nbasecamp people add <id> --project <project>       # Add to project\nbasecamp people remove <id> --project <project>    # Remove from project\n```\n\n### Search\n\n```bash\nbasecamp search \"query\" --json                    # Full-text search\nbasecamp search \"query\" --sort updated_at --limit 20\nbasecamp search metadata --json                   # Available search scopes\n```\n\n### Generic Show\n\n```bash\nbasecamp show <type> <id> --in <project> --json   # Show any recording type\n# Types: todo, todolist, message, comment, card, card-table, document (or omit <type> for generic lookup)\n```\n\n## Configuration\n\nThe CLI uses two directory namespaces: `basecamp` for your Basecamp identity and project relationships, `basecamp` for tool-specific operational data.\n\n```\n~/.config/basecamp/           # Basecamp identity (DO NOT read credentials)\n├── credentials.json          #   OAuth tokens — NEVER read or log\n├── client.json               #   DCR client registration\n└── config.json               #   Global preferences (account_id, base_url, format)\n\n~/.cache/basecamp/            # Tool cache (ephemeral, auto-managed)\n├── completion.json           #   Tab completion cache\n└── resilience/               #   Circuit breaker state\n\n.basecamp/                    # Per-repo config (committed to git)\n└── config.json               #   Project defaults (project_id, account_id, todolist_id)\n```\n\n**Per-repo config:** `.basecamp/config.json`\n```json\n{\n  \"project_id\": \"12345\",\n  \"todolist_id\": \"67890\"\n}\n```\n\n**Initialize:**\n```bash\nbasecamp config init\nbasecamp config set project_id <id>\nbasecamp config set todolist_id <id>\n```\n\n**Config Trust:**\n\nAuthority keys (`base_url`, `default_profile`, `profiles`) in local/repo configs are blocked until explicitly trusted. This prevents a cloned repo's config from redirecting OAuth tokens.\n\n```bash\nbasecamp config trust                    # Trust nearest .basecamp/config.json\nbasecamp config trust /path/to/.basecamp/config.json  # Trust specific config file\nbasecamp config trust --list             # Show all trusted configs\nbasecamp config untrust                  # Revoke trust for nearest config\nbasecamp config untrust /path/to/.basecamp/config.json  # Revoke trust for specific path\n```\n\n**Check context:**\n```bash\ncat .basecamp/config.json 2>/dev/null || echo \"No project configured\"\n```\n\n**Global config:** `~/.config/basecamp/config.json` (account_id, base_url, format preferences)\n\n## Error Handling\n\n**General diagnostics:**\n```bash\nbasecamp doctor --json                            # Check CLI health, auth, connectivity\n```\n\n**Rate limiting (429):** The CLI handles backoff automatically. If you see 429 errors, reduce request frequency.\n\n**Authentication errors:**\n```bash\nbasecamp auth status                              # Check auth\nbasecamp auth login                               # Re-authenticate\nbasecamp auth login --scope full                  # Full access (BC3 OAuth only)\nbasecamp auth login --device-code                 # Headless: display URL, paste callback\n```\n\n**Network errors / localhost URLs:**\n```bash\n# Check for dev config\ncat ~/.config/basecamp/config.json\n# Should only contain: {\"account_id\": \"<id>\"}\n# Remove base_url/api_url if pointing to localhost\n```\n\n**Not found errors:**\n```bash\nbasecamp auth status                              # Verify auth working\ncat ~/.config/basecamp/accounts.json              # Check available accounts\n```\n\n**Required arguments are positional (not flags):**\n- `basecamp todo \"Buy milk\"` (not `--content`)\n- `basecamp card \"New feature\"` (not `--title`)\n- `basecamp message \"Subject\" \"Body\"` (not `--subject`)\n- `basecamp chat post \"Hello\"` (not `--content`)\n- `basecamp comment <id> \"Text\"` (not a flag)\n- `basecamp webhooks create \"https://...\" --in <project>` (not `--url`)\n- `basecamp checkins answer create <question-id> \"content\"` (not `--question`)\n- `--date YYYY-MM-DD` is optional for `checkins answer create`; if omitted, it defaults to today\n\n**Missing argument errors (code: \"usage\"):**\nWhen a required positional argument is missing, the CLI returns a structured error naming\nthe specific argument. Use this for elicitation:\n\n```bash\n$ basecamp todo --json\n{\"ok\": false, \"error\": \"<content> required\", \"code\": \"usage\",\n \"hint\": \"Usage: basecamp todo <content>\"}\n\n$ basecamp comments create 123 --json\n{\"ok\": false, \"error\": \"<content> required\", \"code\": \"usage\", ...}\n```\n\nThe `error` field names the missing `<arg>` — use it to prompt the user for the specific value.\n\n**URL malformed (curl exit 3):** Special characters in content. Use plain text or properly escaped HTML.\n\n## Built-in jq Filtering\n\nThe CLI has a built-in `--jq` flag powered by gojq — no external `jq` binary required. **Always prefer `--jq` over piping to external `jq`.**\n\n```bash\n# Extract fields from data array\nbasecamp todos list --in <project> --jq '.data[] | select(.completed == false) | .title'\nbasecamp todos list --in <project> --jq '.data | length'\nbasecamp todos list --in <project> --jq '[.data[] | {id, title, status}]'\n\n# Access envelope metadata\nbasecamp todos list --in <project> --jq '.breadcrumbs[0].cmd'\nbasecamp todos list --in <project> --jq '.meta.stats.requests'\n\n# Filter and transform\nbasecamp cards list --in <project> --jq '[.data[] | select(.completed == true) | .title]'\nbasecamp people list --jq '[.data[] | {name: .name, email: .email_address}]'\n```\n\n`--jq` implies `--json` — no need to pass both. String results print as plain text; objects and arrays print as formatted JSON.\n\n## Exit Codes\n\n| Exit | Meaning | Fix |\n|------|---------|-----|\n| 0 | OK | — |\n| 1 | Usage error | Check `basecamp <cmd> --help` |\n| 2 | Not found | Verify ID/URL exists |\n| 3 | Auth error | `basecamp auth login` |\n| 4 | Forbidden | Check account/project permissions |\n| 5 | Rate limit | Wait and retry (resilience layer handles Retry-After automatically) |\n| 6 | Network error | Check connectivity, `basecamp doctor` |\n| 7 | API error | Retry; if persistent, check `basecamp doctor` |\n| 8 | Ambiguous | Be more specific (use ID instead of name) |\n\n## Learn More\n\n- API concepts: https://github.com/basecamp/bc3-api#key-concepts\n- CLI repo: https://github.com/basecamp/basecamp-cli\n- API coverage: See API-COVERAGE.md in the CLI repo","tags":["basecamp","skills","agent-skills"],"capabilities":["skill","source-basecamp","skill-basecamp","topic-agent-skills","topic-basecamp"],"categories":["skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/basecamp/skills/basecamp","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add basecamp/skills","source_repo":"https://github.com/basecamp/skills","install_from":"skills.sh"}},"qualityScore":"0.467","qualityRationale":"deterministic score 0.47 from registry signals: · indexed on github topic:agent-skills · 34 github stars · SKILL.md body (38,029 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:04:08.132Z","embedding":null,"createdAt":"2026-04-18T20:35:47.391Z","updatedAt":"2026-05-18T19:04:08.132Z","lastSeenAt":"2026-05-18T19:04:08.132Z","tsv":"'+3':599 '+7':3391 '-03':2815,2824,3374 '-1':1306 '-100':3417 '-15':2816,2825,3375 '/.../download/report.pdf':934 '/.cache/basecamp':3885 '/.config/basecamp':3859 '/.config/basecamp/accounts.json':4130 '/.config/basecamp/config.json':4025,4106 '/123/blobs/abc/download/report.pdf':1628 '/2914079/buckets/41746046/messages/9478142982#__recording_9488783598':1020 '/basecamp':39 '/basecamp/basecamp-cli':4486 '/basecamp/bc3-api#key-concepts':4481 '/buckets/27/card_tables/cards/789':1050 '/buckets/27/card_tables/columns/456':1053 '/buckets/27/documents/303':1065 '/buckets/27/messages/123':1036,1042 '/buckets/27/schedule_entries/404':1068 '/buckets/27/todos/101':1059 '/buckets/27/uploads/202':1062 '/dev/null':4018 '/dir':2690 '/download/f':2699 '/downloads':1613 '/path/to/.basecamp/config.json':3982,4006 '/tmp':872 '/tmp/att':1781 '/tmp/attachments':1803 '0':2982,3416,4354,4411 '00':2818,2827 '00pm':2986 '00z':2819,2828 '1':75,569,1387,1527,1534,1692,2084,2092,2311,2839,2977,3343,3352,3470,3604,4413 '100':3042 '101':1061 '123':1038,1049,1099,1107,1112,1423,1442,4243 '12345':3925 '155':46 '2':111,1409,1733,1783,1886,2474,2840,2978,3344,3353,3471,3609,3612,3624,3629,4017,4419 '20':3803 '202':1064 '2024':2814,2823,3373 '20240315':2803 '25':3466 '27':1041 '3':122,1725,1805,2841,2979,3345,3354,4271,4425 '3.basecamp.com':1019 '3.basecamp.com/2914079/buckets/41746046/messages/9478142982#__recording_9488783598':1018 '303':1067 '4':133,2980,4431 '404':1071 '42':1336,1351 '42000':1402,1447 '429':4047,4056 '456':1044,1046,1055,1094,1103,1109 '5':141,2981,2985,4436 '50':550,3456 '5mb':3687 '6':241,4449 '60':3025,3028 '67890':3928 '7':4456 '75':989,3448 '789':1052 '8':4465 'accept':144,153 'access':4081,4345 'account':32,68,299,970,994,997,1023,2993,3359,3400,3427,3647,3650,3655,3657,3661,3663,3666,3671,3678,3680,3690,3752,3880,3913,4026,4110,4133 'account-wid':298,969,2992,3358,3399,3426 'account/project':4434 'across':48,281,689,1185,2770,3091,3510 'act':1011 'activ':1210,2353,2557,2995,3001,3007,3014,3147,3171,3194,3296 'active/archived/trashed':2891 'ad':2134 'add':851,3341,3346,3774,3776 'address':4384 'agent':69,181,193,332,334,346,374,419,463,474,518,537,1138,1643 'alex':1477 'alic':2622 'all-day':2834,2878 'altern':1787 'alway':388,1007,1901,4305 'ambigu':223,1456,1464,1485,2209,4466 'and/or':1671 'annot':1658,1846 'ansi':445 'answer':2916,2919,2922,2924,2947,2950,2957,3322,4178,4192 'api':10,186,198,1417,4457,4477,4487 'api-coverage.md':4490 'archiv':1214,1216,1269,2356,2365,2394,2560,2569,3114,3115,3129,3133,3153,3172,3185,3187 'archived/trashed':2347,2551 'argument':4135,4201,4209,4221 'array':4318,4401 'as-i':232 'asc':3124 'assign':29,65,259,261,264,267,631,633,673,727,730,735,738,744,748,936,938,945,947,952,954,1143,1146,1155,1164,1166,1227,2023,2027,2046,2051,2063,2068,3066,3071,3506,3509,3516,3528,3536,3543,3547,3549,3555,3563,3571 'assigne':496,544,590,662,702,1219,1338,1977,2009,2042,2061,2079,2110,2178,2281,3076 'assum':139 'async':3250 'attach':859,861,867,869,880,883,887,1403,1615,1641,1655,1670,1673,1699,1708,1710,1716,1726,1730,1738,1746,1757,1780,1800,1871,1883,1897,1900,1919 'attachments/description_attachments':1760 'attribut':1680 'auth':4043,4065,4068,4070,4076,4086,4124,4127,4426,4429 'authent':4061,4074 'author':3654,3946 'auto':395,575,2677,3725,3890 'auto-detect':394,2676 'auto-manag':3889 'auto-pagin':574 'autom':372 'automat':161,4052,4448 'avail':177,2114,2216,3808,4132 'backoff':4051 'bah7cekicg':1405,1428 'bare':3541 'base':3882,3948,4028,4113 'basecamp':1,4,7,36,40,116,257,263,269,275,284,290,294,472,480,491,517,548,557,567,629,632,634,637,640,642,644,651,659,671,683,697,712,723,729,737,747,756,764,772,777,784,791,805,815,824,833,845,853,860,868,875,886,892,898,904,913,921,929,937,946,953,958,964,972,978,985,996,1002,1015,1089,1110,1127,1145,1153,1165,1172,1177,1187,1197,1233,1240,1252,1260,1266,1273,1280,1309,1320,1325,1332,1344,1346,1361,1373,1392,1421,1440,1465,1472,1479,1506,1515,1529,1547,1567,1590,1606,1608,1623,1634,1701,1729,1752,1799,1857,1870,1882,1940,1946,1952,1958,1966,1974,1982,1989,1996,2004,2013,2019,2022,2033,2045,2053,2062,2071,2080,2088,2101,2137,2144,2150,2157,2164,2222,2229,2241,2249,2262,2268,2274,2283,2292,2305,2318,2332,2361,2396,2427,2433,2440,2445,2452,2457,2463,2469,2475,2481,2492,2501,2508,2514,2519,2527,2533,2540,2547,2565,2608,2617,2627,2632,2636,2644,2652,2662,2670,2680,2686,2695,2704,2713,2722,2728,2735,2742,2751,2774,2779,2786,2793,2799,2807,2830,2843,2857,2866,2896,2902,2908,2914,2920,2926,2936,2945,2955,2989,2996,3002,3008,3015,3021,3057,3069,3085,3093,3103,3110,3117,3125,3176,3183,3188,3195,3203,3212,3217,3223,3231,3237,3242,3251,3269,3276,3282,3286,3293,3298,3303,3325,3330,3335,3339,3348,3363 'basecamp/config.json':137,252,608,624,3921,3978,4016 'bash':471,547,1014,1075,1282,1326,1357,1386,1457,1500,1607,1700,1743,1790,1861,1939,1965,2136,2221,2426,2451,2500,2607,2626,2651,2778,2895,2988,3084,3175,3211,3268,3324,3362,3419,3526,3598,3648,3697,3744,3787,3813,3930,3972,4014,4036,4063,4100,4122,4226,4313 'bc3':4082 'behavior':1136 'binari':4303 'block':169,3957 'blue':2480 'board':2603,2606 'bob@x.com':2623 'bodi':149,818,836,2271,2517,2538,2733,4155 'bold':166 'bool':508 'bot':2610 'breadcrumb':357,1929,4353 'breaker':3898 'brows':287,1191,3064 'browser':1838 'built':315,451,4284,4293 'built-in':314,450,4283,4292 'bulk':1353 'buy':4142 'cach':3887,3895 'call':187,199,1418 'callback':4095 'cannot':584,704,1221,2415,3047,3079 'cap':551,3034 'card':14,50,228,540,736,740,745,776,778,783,785,790,792,800,806,1051,1058,1205,1497,1507,1512,1516,1521,1530,1537,1548,1555,1568,1576,1588,1591,1600,1647,1717,2048,2052,2056,2060,2069,2171,2174,2184,2197,2203,2210,2223,2228,2230,2233,2242,2246,2250,2258,2263,2266,2269,2275,2284,2293,2298,2306,2313,2319,2333,2348,2349,2354,2359,2363,2372,2373,2389,2401,2420,2423,2428,2434,2438,2441,2446,2453,2458,2464,2470,2476,2482,2493,3119,3127,3134,3140,3319,3827,3829,4147,4366 'card-tabl':1587,1599,2202,2232,2257,2297,2312,3828 'cards/messages':2116 'cat':4015,4105,4129 'cc':1475 'certain':2974 'chang':1248,1264 'charact':4273 'chat':27,63,844,846,1347,1480,3696,3699,3703,3705,3712,3717,3728,3734,4159 'check':19,55,134,1429,1448,1697,2893,3254,3720,4012,4040,4067,4101,4131,4416,4433,4452,4462 'check-in':18,54,2892 'checkin':2897,2903,2909,2915,2921,2927,2937,2946,2956,4177,4191 'checklist':2425 'choos':76,304 'circuit':3897 'claud':1818 'clean':1379 'cli':8,44,157,457,3839,4041,4049,4213,4289,4482,4493 'client':2188,3202,3209,3875 'client-sid':2187 'client.json':3873 'clone':3964 'cmd':4355 'code':168,1278,4090,4203,4234,4249,4407 'collect':1668 'collid':1881 'color':990,2478,2479,3412,3449,3457,3495 'column':1054,1502,1508,1514,1526,1546,1564,1585,1594,2244,2248,2251,2255,2273,2289,2331,2346,2376,2405,2449,2454,2459,2465,2471,2477,2483,2494,2498 'combin':585,3049 'comma':2588 'comma-separ':2587 'command':42,248,461,470,477,524,530,648,1661,1690,1742,1893 'comment':123,132,151,852,854,1030,1045,1074,1076,1087,1101,1105,1111,1204,1287,1310,1372,1378,1422,1441,1466,2106,2625,2628,2633,2637,2645,3139,3291,3312,3826,4165,4241 'commit':1284,1296,1311,1312,3905 'common':1275 'complet':770,951,955,1271,1317,1369,1377,1993,1995,2016,2105,2371,2382,2388,2422,2443,3168,3263,3544,3546,3894,4326,4372 'completed/incomplete':2118 'completion.json':3892 'compos':215,411 'concept':4478 'config':399,3904,3920,3932,3935,3940,3944,3955,3967,3974,3980,3985,3988,3994,3996,4002,4004,4024,4104 'config.json':3877,3908 'configur':3837,4022 'connect':4044,4453 'construct':3244,3253,3256,3258 'contain':1651,1681,1895,2127,4109 'content':142,152,172,229,1118,1245,1669,1715,1759,1896,1915,2669,2756,4145,4163,4180,4275 'context':135,1843,1907,4013 'contract':347 'control':1935 'convert':158 'count':439 'coverag':11,45,4488 'creat':754,762,766,782,907,983,987,1057,1327,1954,1957,2130,2152,2156,2159,2436,2460,2525,2576,2707,2716,2725,2731,2738,2745,2809,2832,2845,2929,2948,3121,3225,3228,3248,3284,3288,3371,3376,3380,3446,3454,3464,4172,4179,4193,4242 'credenti':3865 'credentials.json':3866 'cross':254,626,669,681,695,721,1182,1195,3054,3061 'cross-project':253,625,668,680,694,720,1181,1194,3053,3060 'curl':4269 'current':594,1545,2330,3764 'custom':3468,3503 'data':87,312,340,355,378,414,703,1220,1396,3077,3169,3858,4317,4324,4334,4341,4370,4379 'data-on':339 'dataset':566 'date':604,2802,2876,3384,3524,4183 'day':2836,2880,2965,2975,2976 'dcr':3874 'dd':4187 'decis':1115 'default':499,509,553,589,675,1134,1159,1208,1775,2952,3041,3145,3660,3910,3950,4197 'delet':3239,3305,3394,3480,3735,3738 'depend':397 'desc':2162 'describ':468 'descript':1672,1707,1899,2161,3459,3476 'design':1659,1847 'detail':995,1951,2149,2267,2798,2913,2925,3222,3281,3443,3667,3771 'detect':396,2678 'determinist':179,1385 'dev':4103 'devic':4089 'device-cod':4088 'diagnost':4035 'differ':2099 'dir':1773,2694 'direct':190,240,1836,3123 'directori':3842 'disabl':3302,3491,3493 'disambigu':1495 'display':416,4092 'doc':2661,2730,2732,2737,2744,3116 'doctor':4038,4455,4464 'document':226,1066,1203,1649,2650,2761,3112,3138,3313,3831 'domain':535 'domain-specif':534 'done':773,1274,1319,1321,1345,1483,2014,2107,2296,2309,2375,2612 'donecolumn':2380 'download':866,870,874,879,888,911,915,923,926,931,1603,1610,1614,1625,1636,1689,1728,1731,1737,1745,1748,1756,1769,1779,1788,1791,1801,1834,1872,1884,1902,1918,1925,2682,2684,2688,2691,2697,2700 'download-attach':878,1744,1755,1778,1917 'draft':2521,2523,2526,2532,2575,2578,2739,2740 'dri':1366 'drill':526 'dry-run':1365 'due':596,598,600,948,1167,1340,2011,2121,2279,2871,2875,3523,3550,3556,3557,3560,3564,3565,3568,3572,3573,3578,3584,3586,3588,3592,3595 'due-dat':3522 'e.g':539,3170 'echo':4019 'either':587 'elicit':4225 'email':2591,4382,4383 'emb':188,212 'empti':3229 'enabl':2487,3483,3485 'end':2821,2851 'endpoint':47 'ends-at':2820,2850 'entri':1070,1761,2788,2792,2797,3317 'envelop':329,344,353,380,432,4346 'ephemer':3888 'error':381,433,1489,2212,4032,4057,4062,4097,4121,4202,4217,4232,4247,4252,4415,4427,4451,4458 'escap':4281 'event':688,2769,2810,3043,3307 'everi':2943,2964,2966,2968,2971,3027 'everyon':3500 'everyth':3040 'except':256,628 'exclus':582,2596,2889 'exist':4424 'exit':4270,4406,4408 'expect':407 'explicit':393,3959 'extern':106,320,4301,4311 'extract':120,1256,4314 'fals':383,435,510,4231,4246,4327 'featur':4149 'fetch':559,1693,1747,1924,2182,3039 'field':143,1262,1666,1685,1723,2409,4253,4315 'field-scop':1665 'file':16,52,889,903,905,912,914,918,922,930,1604,1609,1624,1635,1654,1768,1812,1823,1873,2649,2653,2660,2663,2671,2681,2685,2687,2696,2705,2710,2714,2723,2729,2736,2743,2752,3986 'file-read':1811,1822 'filter':318,325,330,336,454,545,705,1222,2179,2186,3081,3143,4287,4362 'filter/extract':86,310 'find':1117,1121 'first':114,570 'first.last':217,828,1461,1493 'fix':4410 'flag':308,494,502,2109,2574,2765,2877,4139,4169,4296 'flat':125,1078 'folder':2659,2668,2721,2724,2726,2759 'follow':72,1927 'forbidden':4432 'forc':444,3737 'format':164,309,405,1307,3884,4030,4404 'found':4120,4421 'four':173 'fragment':1033,1104 'frequenc':2942,2963,4060 'full':9,43,90,348,1230,3793,4079,4080 'full-text':1229,3792 'fuzzi':218,1458 'fyi':2619 'gaug':28,64,295,301,645,968,973,976,979,986,3406,3407,3421,3425,3430,3439,3445,3453,3463,3474,3479,3482,3486,3490,3494 'gemini':1819 'general':4034 'generic':3811,3835 'get':1283,1504,2207,3167,3265 'gfm':366 'git':1297,1304,3907 'github.com':4480,4485 'github.com/basecamp/basecamp-cli':4484 'github.com/basecamp/bc3-api#key-concepts':4479 'global':3878,4023 'goal':307 'gojq':4299 'good':2640 'green':991,3450,3496 'group':1132,3520 'halfway':3460 'handl':4033,4050,4444 'haven':2391 'head':1302 'headless':422,4091 'health':4042 'hello':3714,4161 'help':464,475,519,1139,4418 'hey':827,1424,1443 'hidden':3206 'hide':3207 'hint':538,1686,1724,1930,2214,4236 'hold':804,810,1541,1552,1559,1573,1580,1598,2323,2328,2338,2343,2486,2490 'html':160,239,4282 'human':98 'id':121,196,202,437,731,739,749,863,1024,1026,1029,1031,1084,1088,1098,1102,1257,1259,1401,1435,1505,1566,2015,2024,2035,2047,2055,2064,2073,2094,2218,2291,2592,3259,3634,3881,3912,3914,3916,3924,3927,3938,3943,4027,4111,4342,4471 'id/url':4423 'ident':3848,3861 'identifi':2370,2387 'ids-on':436 'imag':1652,1807,1835,1865 'impli':323,4386 'import':1853,1911 'in':20,56,2894 'inact':3301 'includ':531,1706,1763,2870,2873,3075,3132 'include-du':2869 'index':1528,1878,1885 'indic':2417 'info':1285,2781,2785,2901 'inherit':501 'init':3933 'initi':3929 'inlin':210,418 'instead':110,1228,4472 'integr':423 'interact':2,386,1453 'interv':3024 'introspect':458 'invari':70 'item':1217,2675 'j':506 'jane':1399,1407,1425,1444,1476,1482 'jane.smith':1467,2638,3719 'jq':81,107,109,313,317,321,335,449,453,1395,4286,4295,4302,4307,4312,4323,4333,4340,4352,4360,4369,4378,4385 'json':88,91,311,324,349,351,352,377,390,430,467,476,504,654,665,674,686,700,717,726,734,743,753,761,769,774,781,788,798,812,820,830,841,850,857,865,881,895,901,910,939,950,956,960,967,975,982,993,999,1021,1095,1130,1147,1156,1169,1174,1180,1190,1199,1236,1243,1510,1704,1758,1943,1949,1956,1970,2141,2155,2226,2253,2505,2631,2656,2777,2783,2790,2899,2991,2999,3005,3011,3088,3097,3131,3214,3220,3273,3423,3433,3441,3529,3538,3545,3552,3559,3567,3577,3601,3610,3616,3625,3652,3665,3676,3683,3693,3701,3708,3748,3757,3763,3769,3791,3807,3817,3922,4039,4229,4244,4387,4405 'kanban':2172,2379,3318 'key':1674,1888,3947 'know':1123 'larg':565 'later':3574,3579,3589,3596 'launch':3381 'layer':4443 'learn':4475 'length':4335 'level':523 'like':2180 'limit':549,579,2122,2395,3031,3668,3802,4046,4438 'line':3729,3732,3739 'lineup':26,62,3357,3364,3370,3379,3387,3393,3396 'link':167,1277 'list':165,296,369,646,649,653,661,714,760,775,779,858,862,974,1128,1135,1501,1942,1944,1968,1971,1976,1984,1991,1998,1999,2003,2008,2093,2100,2120,2139,2142,2224,2231,2243,2254,2350,2431,2503,2506,2554,2629,2654,2657,2664,2667,2791,2906,2918,3215,3271,3274,3365,3366,3422,3537,3602,3607,3646,3651,3653,3702,3709,3747,3755,3990,4321,4331,4338,4350,4358,4367,4377 'live':3018 'llms':1817 'local':1767 'local/repo':3954 'localhost':4098,4118 'log':1305,3872 'login':4071,4077,4087,4430 'logo':3681,3685,3691,3695 'long':483 'look':1388,2639 'lookup':1437,3836 'm':365 'malform':4268 'manag':2450,3174,3891 'mandatori':245 'mark':961,3617,3626 'markdown':145,154,163,371,1413 'marker':3361,3368,3377,3397 'match':345,1459,3642 'max':3688 'may':221,401,561,1454,1650,1718,3162 'md':92,364,392,409 'mean':4409 'meet':2833 'mention':147,174,183,823,1382,1414,1427,1451,2643,3724 'merg':1343,1349 'messag':15,51,148,814,816,825,834,848,1037,1048,1202,1473,1645,1860,2499,2502,2507,2509,2513,2515,2520,2528,2534,2541,2548,2552,2553,2558,2563,2567,2602,2609,2618,3105,3107,3137,3311,3706,3710,3825,4153 'message-board':2601 'messages/123':1092 'messages/documents':1713 'meta':358 'meta.stats.requests':4361 'metadata':3806,4347 'mileston':3372 'milk':4143 'miss':4200,4211,4256 'mm':4186 'mockup':1656,1844 'mockup.png':1874 'mode':80,101,303,306,333,426 'modif':2413 'modifi':1244 'monitor':3019 'month':2972 'move':789,793,799,807,1496,1511,1517,1520,1531,1536,1549,1554,1569,1575,1592,2085,2097,2285,2287,2294,2300,2307,2315,2320,2324,2334,2339,2403,2472,3180 'msg':1303,1315 'multimod':1642,1816 'multipl':2017,2031,2043,2196,2240,2261,2605 'must':71,2200 'mutual':581,2595,2888 'n':796,3032 'name':182,194,216,219,487,495,503,767,1398,1406,1486,1584,1595,1880,1955,1961,2095,2153,2160,2167,2220,2302,2461,2590,3227,3234,3236,3245,3390,3673,3675,4218,4254,4380,4381,4474 'namespac':3843 'nativ':1810 'natur':603,3383 'navig':459 'nearest':3977,4001 'need':84,322,1119,1622,1839,2191,2256,2303,3163,4389 'needl':977,980,984,3413,3431,3434,3440,3442 'network':4096,4450 'never':103,3869 'new':1962,2168,2278,2468,2537,2755,2861,2940,3235,3246,3389,3674,4148 'next':601,3593 'no-subscrib':837,2579,2598,2613,2747,2853,2883 'non':942,1150,3533 'non-prior':941,1149,3532 'note':485,532,615,1207,2173,2620,2746,3395,3630 'notic':1684,1722 'notif':30,66,291,293,643,957,959,962,965,1171,1173,2584,3597,3600,3606,3614,3621,3633 'notifi':2837,2881,3467,3499 'numer':1565,2290 'oauth':3867,3970,4083 'object':384,4399 'occurr':2805 'often':1850,1909 'ok':354,382,434,2018,2032,2044,4230,4245,4412 'omit':3833,4195 'on-hold':802,808,1539,1550,1557,1571,1578,1596,2321,2326,2336,2341,2484,2488 'one':197,1436,1735,1750,1922 'one-shot':1734,1921 'oper':3857 'option':2962,4189 'os':1771 'output':79,100,302,350 'overdu':271,273,636,708,715,718,725,944,949,1163,1168,1184,1189,1355,1359,1364,1376,1985,1987,2104,2119,3551,3553,3583 'page':568,571,583,3046,3603,3608,3611,3623,3628,3638,3640,3644 'pagin':546,576,2764,3100 'parent':128,1082,1100 'parent.type':2378 'pars':112,118,605,896,900,1006,1008,1017,1091,1242,1254,1300,3385 'part':1854 'particip':2838,2882 'pass':389,4391 'past':4094 'path':479,490,1764,1828,4011 'pattern':1035,1889 'payload':342 'peopl':1383,1393,1452,2586,2887,3342,3347,3351,3356,3743,3746,3750,3754,3758,3767,3773,3780,4376 'per':3902,3918 'per-repo':3901,3917 'perman':3740 'permiss':4435 'persist':4461 'person':195,201,707,1224,1391,1434,1446,3010,3012,3083,3770 'pin':2542,2544 'pingabl':206,1394 'pipe':104,1633,1869,4309 'pipelin':214 'plain':236,4277,4397 'pleas':1468 'png/jpeg/gif/webp/avif/heic':3686 'point':1765,4116 'poll':3026,3260 'posit':795,988,1524,1533,2082,2090,2310,2317,2473,3447,3455,3465,4137,4208 'post':813,821,831,842,847,1348,1420,1439,1481,3713,3718,4160 'power':4297 'pr':1323,1330,1335,1350 'prefer':178,191,1384,3068,3879,4031,4306 'present':94,1712 'prevent':3962 'preview':1358 'print':4395,4402 'printf':1291,1313 'prioriti':940,943,1148,1151,3519,3531,3534 'process':1354 'produc':403 'profil':3951,3952 'progress':1796,3410 'project':12,140,242,255,283,606,619,627,650,652,658,670,682,691,696,711,722,1025,1040,1126,1183,1186,1196,1938,1941,1947,1953,1959,1973,2194,2772,3000,3055,3062,3092,3109,3247,3249,3266,3404,3409,3437,3488,3512,3756,3760,3775,3778,3782,3785,3850,3909,3911,3923,3937,4021 'project-scop':3403 'prompt':387,4260 'proper':4280 'provid':3517 'publish':2529,2530 'q':1292 'queri':617,894,1235,3158,3165,3790,3798 'question':37,2904,2907,2910,2912,2928,2938,2941,3320,3321,4182 'questionnair':2900 'quick':613 'quiet':427 'quot':1295 'rate':4045,4437 'raw':376,429 're':4073 're-authent':4072 'read':963,966,1813,1824,3615,3619,3622,3631,3864,3870 'record':22,58,129,285,641,698,1028,1043,1083,1093,1097,1198,1267,1695,2362,2566,3052,3058,3072,3086,3094,3104,3111,3118,3126,3148,3177,3184,3189,3196,3204,3820 'recur':2806 'red':3498 'redirect':3969 'reduc':1463,4058 'refer':614,1937 'registr':3876 'relationship':3851 'reliabl':2416 'remov':2038,2059,2077,3350,3355,3692,3694,3781,3783,4112 'renam':3677 'reopen':2020 'repli':126,1072,1079,1113 'repo':3903,3919,3965,4483,4494 'report':258,270,276,412,630,635,638,672,684,724,1154,1178,1188,1226,2775,3070,3515 'request':4059 'requir':618,1586,2238,4134,4207,4233,4248,4304 'resili':3896,4442 'resolut':220 'resolv':200,592,3632 'resourc':556,1936 'respons':1705,1831,1894 'restor':1270,3190,3192 'result':95,360,417,552,3035,4394 'retri':4441,4446,4459 'retry-aft':4445 'return':465,1022,1096,1487,2352,2556,3150,3257,4214 'rev':1299 'rev-pars':1298 'review':1334,1469 'revok':3998,4007 'rich':171,1678 'rich-text':1677 'right':78 'root':2712 'rule':74 'run':326,337,1367 'safe':1294 'scale':3418 'schedul':17,53,277,280,639,679,685,1069,1176,1179,2766,2776,2780,2784,2787,2794,2800,2808,2831,2844,2858,2867,2961,3316 'scope':243,620,1667,3405,3525,3582,3810,4078 'screenshot':1657,1845 'script':373,424 'search':891,893,1232,1234,3786,3789,3795,3797,3805,3809 'second':3029 'section':1542,1560,1581,2491 'see':99,455,4055,4489 'select':1397,1876,4325,4371 'sent':231 'separ':1789,2589,3164,3513 'session':441 'set':207,2868,3659,3936,3941 'sgid':184,189,204,208,211,1404,1411 'short':482,489,1301 'shorthand':505 'shot':1736,1751,1923 'show':359,873,877,998,1660,1703,1741,1754,1795,1892,1948,1950,2146,2148,2215,2264,2455,2510,2512,2672,2674,2795,2801,3200,3219,3278,3664,3731,3768,3812,3815,3818,3991 'side':2189 'silent':832,2582 'singl':1864 'skill' 'skill-basecamp' 'slow':563 'smart':588 'smith':1400,1408,1426,1445 'someth':1122,1249 'sort':3120,3799 'source-basecamp' 'special':4272 'specif':536,1523,1563,2002,2236,2693,2804,3856,3984,4010,4220,4265,4469 'specifi':612,1777,2201,3637 'start':515,2812,2848,2864 'starts-at':2811,2847,2863 'stat':440 'state':3899 'statist':442 'status':1211,1213,1265,1992,2117,2364,2368,2568,2572,2890,3113,3128,3142,3152,3155,3160,3173,3255,3262,4066,4125,4344 'stderr':1798 'stdout':885,920,1631,1867 'step':746,750,1691,1732,1782,1786,1804,1934,2065,2070,2074,2078,2424,2429,2432,2435,2437,2442,2447 'storag':927,1618,2698,2702 'storage.3.basecamp.com':933,1627 'storage.3.basecamp.com/.../download/report.pdf':932 'storage.3.basecamp.com/123/blobs/abc/download/report.pdf':1626 'stream':882,917,1629,1862 'string':498,4393 'structur':266,370,466,3518,4216 'style':443 'subcommand':486,529,2758 'subject':4154,4157 'subscrib':839,2496,2581,2585,2600,2615,2621,2749,2855,2885,2886,3329,3332,3333 'subscript':25,61,3323,3326,3331,3336,3340,3349,3469,3505,3669 'success':375,428 'suggest':1491 'summar':413 'summari':356,2860 'sun':2983 'support':543,2177 'surfac':1662,1841 'sweep':488,493,1363,1375,2103 'sync':2846 'syntax':155,175,1415 't09':2817 't10':2826 'tab':3893 'tabl':367,1589,1601,2198,2204,2211,2217,2234,2237,2259,2299,2304,2314,3830 'target':2345 'task':368,647,758,2006 'temp':1772 'templat':23,59,3210,3213,3216,3218,3221,3224,3226,3230,3232,3238,3241,3243,3252 'text':237,855,1231,1679,1914,2634,3794,4166,4278,4398 'text/html':3726 'time':2984 'timelin':21,57,1001,1003,2987,2990,2997,3003,3009,3016,3022 'titl':786,817,826,835,2270,2277,2467,2516,2536,2754,2862,4151,4328,4343,4374 'to-do':2028,2039 'today':2954,3558,3561,3585,4199 'todo':13,49,225,274,473,478,481,492,656,660,667,693,699,709,713,719,728,755,757,771,876,1060,1201,1272,1281,1289,1328,1333,1356,1360,1362,1374,1646,1702,1753,1858,1964,1967,1975,1981,1983,1990,1997,2005,2081,2089,2102,2111,2129,2135,2181,3067,3087,3090,3095,3099,3136,3290,3309,3823,4141,4228,4239,4320,4330,4337,4349,4357 'todolist':763,765,2124,2125,2132,2138,2143,2145,2151,2158,2165,3310,3824,3915,3926,3942 'todos/cards':2874 'token':3868,3971 'tomorrow':597,1341,2012,2280,3382,3566,3569,3587 'tool':1814,1825,3855,3886 'tool-specif':3854 'top':522,2087,2546 'top-level':521 'topic-agent-skills' 'topic-basecamp' 'track':1322,2399,3408 'tradit':1157 'transform':4364 'trash':1268,2358,2369,2562,2573,3156,3178,3182,3240 'trashabl':3742 'tree':514,1116 'true':2383,4373 'trust':3945,3960,3975,3976,3981,3983,3989,3993,3999,4008 'tui':3020 'two':1785,1933,3841 'two-step':1784,1932 'type':289,497,507,1027,1125,1193,1200,2679,3063,3135,3289,3308,3821,3822 'unassign':2034,2054,2072 'uncomplet':2021,2448 'unfamiliar':460 'unpin':2549,2550 'unsubscrib':3337,3338 'unsur':1141 'untrust':3997,4005 'upcom':279,687,1175,2768 'updat':1261,1474,1960,1963,2166,2170,2276,2407,2410,2466,2535,2539,2611,2646,2647,2753,2757,2859,2939,2958,2959,3233,3295,3300,3388,3475,3477,3672,3800 'upload':902,906,1206,2706,2709,2715,2719,2760,3141,3314,3682,3684 'upload/file':1063 'url':113,117,864,897,899,928,1005,1009,1016,1034,1090,1239,1241,1251,1253,1619,2096,2703,3883,3949,4029,4093,4099,4175,4267 'url/api_url':4114 'usag':484,500,511,4204,4235,4237,4250,4414 'use':33,108,162,235,408,1137,1212,1225,1255,1290,1410,1433,1460,1492,1714,1820,1916,2360,2384,2564,2773,3030,3056,3151,3639,3658,3840,4222,4257,4276,4470 'user':363,595,3765,4262 'v':446 'valu':209,1263,4266 'vari':554 'vault':908,2665,2717,3315 'verbose/trace':448 'verifi':4126,4422 'via':5,136,205,249,621 'view':268,1158,1806,1833,1904,3507 'visibl':3197,3198,3205 'visual':1842,1906 'vv':447 'wait':4439 'walk':512 'want':1246 'watch':1000,1004,2495,3017,3023,3051 'webhook':24,60,3267,3270,3275,3277,3280,3283,3287,3294,3299,3304,4171 'week':602,2944,2967,2970,3576,3581,3591,3594 'wide':300,971,2994,3360,3401,3428 'wip':2522 'work':262,1144,1331,1639,2933,3501,4128 'workflow':41,1276,1499,1644 'yellow':3458,3497 'yyyi':4185 'yyyy-mm-dd':4184 'zero':185,1416","prices":[{"id":"e485afac-c710-45f3-977a-fdd8f24a4d31","listingId":"81fab936-0a36-4905-b9ea-7accb70777c2","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"basecamp","category":"skills","install_from":"skills.sh"},"createdAt":"2026-04-18T20:35:47.391Z"}],"sources":[{"listingId":"81fab936-0a36-4905-b9ea-7accb70777c2","source":"github","sourceId":"basecamp/skills/basecamp","sourceUrl":"https://github.com/basecamp/skills/tree/main/skills/basecamp","isPrimary":false,"firstSeenAt":"2026-04-18T22:22:37.907Z","lastSeenAt":"2026-05-18T19:04:08.132Z"},{"listingId":"81fab936-0a36-4905-b9ea-7accb70777c2","source":"skills_sh","sourceId":"basecamp/skills/basecamp","sourceUrl":"https://skills.sh/basecamp/skills/basecamp","isPrimary":true,"firstSeenAt":"2026-04-18T20:35:47.391Z","lastSeenAt":"2026-05-07T22:40:37.907Z"}],"details":{"listingId":"81fab936-0a36-4905-b9ea-7accb70777c2","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"basecamp","slug":"basecamp","github":{"repo":"basecamp/skills","stars":34,"topics":["agent-skills","basecamp"],"license":null,"html_url":"https://github.com/basecamp/skills","pushed_at":"2026-03-25T10:01:39Z","description":"AI agent skills for Basecamp","skill_md_sha":"d1d220827024a26d3c9dc08964a3cde746d1d93c","skill_md_path":"skills/basecamp/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/basecamp/skills/tree/main/skills/basecamp"},"layout":"multi","source":"github","category":"skills","frontmatter":{"name":"basecamp","description":"Interact with Basecamp via the Basecamp CLI. Full API coverage: projects, todos, cards,\nmessages, files, schedule, check-ins, timeline, recordings, templates, webhooks,\nsubscriptions, lineup, chat, gauges, assignments, notifications, and accounts.\nUse for ANY Basecamp question or action."},"skills_sh_url":"https://skills.sh/basecamp/skills/basecamp"},"updatedAt":"2026-05-18T19:04:08.132Z"}}