{"id":"00d97c4f-db67-41b9-b1ee-c35a5de863e2","shortId":"CwCCLM","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/archived/trashed), `--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 <document_id> --title \"New\" --content \"Updated\"\nbasecamp files update <document_id> --title \"New\" --in <project>      # Preserves existing document content\nbasecamp files update <document_id> --content \"Updated\" --in <project> # Preserves existing document title\n```\n\n**Document update semantics:** `basecamp files update <document_id>` is safe for partial updates in the CLI: when you pass only `--title` or only `--content`, the CLI first fetches the current document and preserves the untouched field.\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 (includes up to 100 comments by default)\nbasecamp show <type> <id> --all-comments --in <project> --json   # Fetch the full discussion when you need every comment\nbasecamp show <type> <id> --no-comments --in <project> --json    # Skip the extra comments fetch\n# Types: todo, todolist, message, comment, card, card-table, document (or omit <type> for generic lookup)\n\n# Typed show commands also support --comments / --all-comments / --no-comments:\nbasecamp todos show <id> --comments --json                        # Opt in to comments on typed show\nbasecamp cards show <id> --all-comments --json                    # Fetch all comments on card\nbasecamp messages show <id> --no-comments --json                  # Suppress comments\n# All commentable show commands: todos, messages, cards, files, todolists, schedule, checkins, forwards, chat\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","cli","agent-skills"],"capabilities":["skill","source-basecamp","skill-basecamp","topic-agent-skills","topic-basecamp"],"categories":["basecamp-cli"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/basecamp/basecamp-cli/basecamp","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add basecamp/basecamp-cli","source_repo":"https://github.com/basecamp/basecamp-cli","install_from":"skills.sh"}},"qualityScore":"0.534","qualityRationale":"deterministic score 0.53 from registry signals: · indexed on github topic:agent-skills · 169 github stars · SKILL.md body (39,256 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-02T12:54:40.363Z","embedding":null,"createdAt":"2026-04-18T22:09:02.162Z","updatedAt":"2026-05-02T12:54:40.363Z","lastSeenAt":"2026-05-02T12:54:40.363Z","tsv":"'+3':599 '+7':3445 '-03':2869,2878,3428 '-1':1306 '-100':3471 '-15':2870,2879,3429 '/.../download/report.pdf':934 '/.cache/basecamp':4032 '/.config/basecamp':4006 '/.config/basecamp/accounts.json':4277 '/.config/basecamp/config.json':4172,4253 '/123/blobs/abc/download/report.pdf':1628 '/2914079/buckets/41746046/messages/9478142982#__recording_9488783598':1020 '/basecamp':39 '/basecamp/basecamp-cli':4633 '/basecamp/bc3-api#key-concepts':4628 '/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':4165 '/dir':2690 '/download/f':2699 '/downloads':1613 '/path/to/.basecamp/config.json':4129,4153 '/tmp':872 '/tmp/att':1781 '/tmp/attachments':1803 '0':3036,3470,4501,4558 '00':2872,2881 '00pm':3040 '00z':2873,2882 '1':75,569,1387,1527,1534,1692,2084,2092,2311,2893,3031,3397,3406,3524,3658,4560 '100':3096,3879 '101':1061 '123':1038,1049,1099,1107,1112,1423,1442,4390 '12345':4072 '155':46 '2':111,1409,1733,1783,1886,2474,2894,3032,3398,3407,3525,3663,3666,3678,3683,4164,4566 '20':3857 '202':1064 '2024':2868,2877,3427 '20240315':2857 '25':3520 '27':1041 '3':122,1725,1805,2895,3033,3399,3408,4418,4572 '3.basecamp.com':1019 '3.basecamp.com/2914079/buckets/41746046/messages/9478142982#__recording_9488783598':1018 '303':1067 '4':133,3034,4578 '404':1071 '42':1336,1351 '42000':1402,1447 '429':4194,4203 '456':1044,1046,1055,1094,1103,1109 '5':141,3035,3039,4583 '50':550,3510 '5mb':3741 '6':241,4596 '60':3079,3082 '67890':4075 '7':4603 '75':989,3502 '789':1052 '8':4612 'accept':144,153 'access':4228,4492 'account':32,68,299,970,994,997,1023,3047,3413,3454,3481,3701,3704,3709,3711,3715,3717,3720,3725,3732,3734,3744,3806,4027,4060,4173,4257,4280 'account-wid':298,969,3046,3412,3453,3480 'account/project':4581 'across':48,281,689,1185,2824,3145,3564 'act':1011 'activ':1210,2353,2557,3049,3055,3061,3068,3201,3225,3248,3350 'active/archived/trashed':2945 'ad':2134 'add':851,3395,3400,3828,3830 'address':4531 'agent':69,181,193,332,334,346,374,419,463,474,518,537,1138,1643 'alex':1477 'alic':2622 'all-com':3885,3932,3953 'all-day':2888,2932 'also':3929 'altern':1787 'alway':388,1007,1901,4452 'ambigu':223,1456,1464,1485,2209,4613 'and/or':1671 'annot':1658,1846 'ansi':445 'answer':2970,2973,2976,2978,3001,3004,3011,3376,4325,4339 'api':10,186,198,1417,4604,4624,4634 'api-coverage.md':4637 'archiv':1214,1216,1269,2356,2365,2394,2560,2569,3168,3169,3183,3187,3207,3226,3239,3241 'archived/trashed':2347,2551 'argument':4282,4348,4356,4368 'array':4465,4548 'as-i':232 'asc':3178 '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,3120,3125,3560,3563,3570,3582,3590,3597,3601,3603,3609,3617,3625 'assigne':496,544,590,662,702,1219,1338,1977,2009,2042,2061,2079,2110,2178,2281,3130 'assum':139 'async':3304 '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':4190,4212,4215,4217,4223,4233,4271,4274,4573,4576 'authent':4208,4221 'author':3708,4093 'auto':395,575,2677,3779,4037 'auto-detect':394,2676 'auto-manag':4036 'auto-pagin':574 'autom':372 'automat':161,4199,4595 'avail':177,2114,2216,3862,4279 'backoff':4198 'bah7cekicg':1405,1428 'bare':3595 'base':4029,4095,4175,4260 '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,2758,2768,2781,2828,2833,2840,2847,2853,2861,2884,2897,2911,2920,2950,2956,2962,2968,2974,2980,2990,2999,3009,3043,3050,3056,3062,3069,3075,3111,3123,3139,3147,3157,3164,3171,3179,3230,3237,3242,3249,3257,3266,3271,3277,3285,3291,3296,3305,3323,3330,3336,3340,3347,3352,3357,3379,3384,3389 'basecamp/config.json':137,252,608,624,4068,4125,4163 '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,2832,2949,3042,3138,3229,3265,3322,3378,3416,3473,3580,3652,3702,3751,3798,3841,3867,4077,4119,4161,4183,4210,4247,4269,4373,4460 'bc3':4229 'behavior':1136 'binari':4450 'block':169,4104 'blue':2480 'board':2603,2606 'bob@x.com':2623 'bodi':149,818,836,2271,2517,2538,2733,4302 'bold':166 'bool':508 'bot':2610 'breadcrumb':357,1929,4500 'breaker':4045 'brows':287,1191,3118 'browser':1838 'built':315,451,4431,4440 'built-in':314,450,4430,4439 'bulk':1353 'buy':4289 'cach':4034,4042 'call':187,199,1418 'callback':4242 'cannot':584,704,1221,2415,3101,3133 'cap':551,3088 '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,3173,3181,3188,3194,3373,3916,3918,3951,3961,3977,4294,4513 'card-tabl':1587,1599,2202,2232,2257,2297,2312,3917 'cards/messages':2116 'cat':4162,4252,4276 'cc':1475 'certain':3028 'chang':1248,1264 'charact':4420 'chat':27,63,844,846,1347,1480,3750,3753,3757,3759,3766,3771,3782,3788,3983,4306 'check':19,55,134,1429,1448,1697,2947,3308,3774,4159,4187,4214,4248,4278,4563,4580,4599,4609 'check-in':18,54,2946 'checkin':2951,2957,2963,2969,2975,2981,2991,3000,3010,3981,4324,4338 'checklist':2425 'choos':76,304 'circuit':4044 'claud':1818 'clean':1379 'cli':8,44,157,457,2791,2801,3986,4188,4196,4360,4436,4629,4640 'client':2188,3256,3263,4022 'client-sid':2187 'client.json':4020 'clone':4111 'cmd':4502 'code':168,1278,4237,4350,4381,4396,4554 'collect':1668 'collid':1881 'color':990,2478,2479,3466,3503,3511,3549 '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,3103 'comma':2588 'comma-separ':2587 'command':42,248,461,470,477,524,530,648,1661,1690,1742,1893,3928,3974 '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,3193,3345,3366,3880,3887,3898,3903,3909,3915,3931,3934,3937,3941,3946,3955,3959,3967,3970,3972,4312,4388 'commit':1284,1296,1311,1312,4052 'common':1275 'complet':770,951,955,1271,1317,1369,1377,1993,1995,2016,2105,2371,2382,2388,2422,2443,3222,3317,3598,3600,4041,4473,4519 'completed/incomplete/archived/trashed':2118 'completion.json':4039 'compos':215,411 'concept':4625 'config':399,4051,4067,4079,4082,4087,4091,4102,4114,4121,4127,4132,4135,4141,4143,4149,4151,4171,4251 'config.json':4024,4055 'configur':3984,4169 'connect':4191,4600 'construct':3298,3307,3310,3312 'contain':1651,1681,1895,2127,4256 'content':142,152,172,229,1118,1245,1669,1715,1759,1896,1915,2669,2756,2767,2771,2799,4292,4310,4327,4422 'context':135,1843,1907,4160 'contract':347 'control':1935 'convert':158 'count':439 'coverag':11,45,4635 '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,2863,2886,2899,2983,3002,3175,3279,3282,3302,3338,3342,3425,3430,3434,3500,3508,3518,4319,4326,4340,4389 'credenti':4012 'credentials.json':4013 'cross':254,626,669,681,695,721,1182,1195,3108,3115 'cross-project':253,625,668,680,694,720,1181,1194,3107,3114 'curl':4416 'current':594,1545,2330,2805,3818 'custom':3522,3557 'data':87,312,340,355,378,414,703,1220,1396,3131,3223,4005,4464,4471,4481,4488,4517,4526 'data-on':339 'dataset':566 'date':604,2856,2930,3438,3578,4330 'day':2890,2934,3019,3029,3030 'dcr':4021 'dd':4334 'decis':1115 'default':499,509,553,589,675,1134,1159,1208,1775,3006,3095,3199,3714,3882,4057,4097,4344 'delet':3293,3359,3448,3534,3789,3792 'depend':397 'desc':2162 'describ':468 'descript':1672,1707,1899,2161,3513,3530 'design':1659,1847 'detail':995,1951,2149,2267,2852,2967,2979,3276,3335,3497,3721,3825 'detect':396,2678 'determinist':179,1385 'dev':4250 'devic':4236 'device-cod':4235 'diagnost':4182 'differ':2099 'dir':1773,2694 'direct':190,240,1836,3177 'directori':3989 'disabl':3356,3545,3547 'disambigu':1495 'discuss':3893 'display':416,4239 'doc':2661,2730,2732,2737,2744,3170 'doctor':4185,4602,4611 'document':226,1066,1203,1649,2650,2766,2776,2778,2806,2815,3166,3192,3367,3920 '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,2925,2929,3577,3604,3610,3611,3614,3618,3619,3622,3626,3627,3632,3638,3640,3642,3646,3649 'due-dat':3576 'e.g':539,3224 'echo':4166 'either':587 'elicit':4372 'email':2591,4529,4530 'emb':188,212 'empti':3283 'enabl':2487,3537,3539 'end':2875,2905 'endpoint':47 'ends-at':2874,2904 'entri':1070,1761,2842,2846,2851,3371 'envelop':329,344,353,380,432,4493 'ephemer':4035 'error':381,433,1489,2212,4179,4204,4209,4244,4268,4349,4364,4379,4394,4399,4562,4574,4598,4605 'escap':4428 'event':688,2823,2864,3097,3361 'everi':2997,3018,3020,3022,3025,3081,3897 'everyon':3554 'everyth':3094 'except':256,628 'exclus':582,2596,2943 'exist':2765,2775,4571 'exit':4417,4553,4555 'expect':407 'explicit':393,4106 'extern':106,320,4448,4458 'extra':3908 'extract':120,1256,4461 'fals':383,435,510,4378,4393,4474 'featur':4296 'fetch':559,1693,1747,1924,2182,2803,3093,3890,3910,3957 'field':143,1262,1666,1685,1723,2409,2811,4400,4462 '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,2759,2769,2782,3978,4133 'file-read':1811,1822 'filter':318,325,330,336,454,545,705,1222,2179,2186,3135,3197,4434,4509 'filter/extract':86,310 'find':1117,1121 'first':114,570,2802 'first.last':217,828,1461,1493 'fix':4557 'flag':308,494,502,2109,2574,2819,2931,4286,4316,4443 'flat':125,1078 'folder':2659,2668,2721,2724,2726,2813 'follow':72,1927 'forbidden':4579 'forc':444,3791 'format':164,309,405,1307,4031,4177,4551 'forward':3982 'found':4267,4568 'four':173 'fragment':1033,1104 'frequenc':2996,3017,4207 'full':9,43,90,348,1230,3847,3892,4226,4227 'full-text':1229,3846 'fuzzi':218,1458 'fyi':2619 'gaug':28,64,295,301,645,968,973,976,979,986,3460,3461,3475,3479,3484,3493,3499,3507,3517,3528,3533,3536,3540,3544,3548 'gemini':1819 'general':4181 'generic':3865,3924 'get':1283,1504,2207,3221,3319 'gfm':366 'git':1297,1304,4054 'github.com':4627,4632 'github.com/basecamp/basecamp-cli':4631 'github.com/basecamp/bc3-api#key-concepts':4626 'global':4025,4170 'goal':307 'gojq':4446 'good':2640 'green':991,3504,3550 'group':1132,3574 'halfway':3514 'handl':4180,4197,4591 'haven':2391 'head':1302 'headless':422,4238 'health':4189 'hello':3768,4308 'help':464,475,519,1139,4565 'hey':827,1424,1443 'hidden':3260 'hide':3261 'hint':538,1686,1724,1930,2214,4383 'hold':804,810,1541,1552,1559,1573,1580,1598,2323,2328,2338,2343,2486,2490 'html':160,239,4429 '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,3313,3688,4028,4059,4061,4063,4071,4074,4085,4090,4174,4258,4489,4618 'id/url':4570 'ident':3995,4008 'identifi':2370,2387 'ids-on':436 'imag':1652,1807,1835,1865 'impli':323,4533 'import':1853,1911 'in':20,56,2948 'inact':3355 'includ':531,1706,1763,2924,2927,3129,3186,3876 'include-du':2923 'index':1528,1878,1885 'indic':2417 'info':1285,2835,2839,2955 'inherit':501 'init':4080 'initi':4076 'inlin':210,418 'instead':110,1228,4619 'integr':423 'interact':2,386,1453 'interv':3078 'introspect':458 'invari':70 'item':1217,2675 'j':506 'jane':1399,1407,1425,1444,1476,1482 'jane.smith':1467,2638,3773 'jq':81,107,109,313,317,321,335,449,453,1395,4433,4442,4449,4454,4459,4470,4480,4487,4499,4507,4516,4525,4532 '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,2831,2837,2844,2953,3045,3053,3059,3065,3142,3151,3185,3268,3274,3327,3477,3487,3495,3583,3592,3599,3606,3613,3621,3631,3655,3664,3670,3679,3706,3719,3730,3737,3747,3755,3762,3802,3811,3817,3823,3845,3861,3871,3889,3905,3942,3956,3968,4069,4186,4376,4391,4534,4552 'kanban':2172,2379,3372 'key':1674,1888,4094 'know':1123 'larg':565 'later':3628,3633,3643,3650 'launch':3435 'layer':4590 'learn':4622 'length':4482 'level':523 'like':2180 'limit':549,579,2122,2395,3085,3722,3856,4193,4585 'line':3783,3786,3793 'lineup':26,62,3411,3418,3424,3433,3441,3447,3450 '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,2845,2960,2972,3269,3325,3328,3419,3420,3476,3591,3656,3661,3700,3705,3707,3756,3763,3801,3809,4137,4468,4478,4485,4497,4505,4514,4524 'live':3072 'llms':1817 'local':1767 'local/repo':4101 'localhost':4245,4265 'log':1305,4019 'login':4218,4224,4234,4577 'logo':3735,3739,3745,3749 'long':483 'look':1388,2639 'lookup':1437,3925 'm':365 'malform':4415 'manag':2450,3228,4038 'mandatori':245 'mark':961,3671,3680 'markdown':145,154,163,371,1413 'marker':3415,3422,3431,3451 'match':345,1459,3696 'max':3742 'may':221,401,561,1454,1650,1718,3216 'md':92,364,392,409 'mean':4556 'meet':2887 'mention':147,174,183,823,1382,1414,1427,1451,2643,3778 '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,3159,3161,3191,3365,3760,3764,3914,3963,3976,4300 'message-board':2601 'messages/123':1092 'messages/documents':1713 'meta':358 'meta.stats.requests':4508 'metadata':3860,4494 'mileston':3426 'milk':4290 'miss':4347,4358,4403 'mm':4333 'mockup':1656,1844 'mockup.png':1874 'mode':80,101,303,306,333,426 'modif':2413 'modifi':1244 'monitor':3073 'month':3026 '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,3234 'msg':1303,1315 'multimod':1642,1816 'multipl':2017,2031,2043,2196,2240,2261,2605 'must':71,2200 'mutual':581,2595,2942 'n':796,3086 '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,3281,3288,3290,3299,3444,3727,3729,4365,4401,4527,4528,4621 'namespac':3990 'nativ':1810 'natur':603,3437 'navig':459 'nearest':4124,4148 'need':84,322,1119,1622,1839,2191,2256,2303,3217,3896,4536 'needl':977,980,984,3467,3485,3488,3494,3496 'network':4243,4597 'never':103,4016 'new':1962,2168,2278,2468,2537,2755,2762,2915,2994,3289,3300,3443,3728,4295 'next':601,3647 'no-com':3901,3935,3965 'no-subscrib':837,2579,2598,2613,2747,2907,2937 'non':942,1150,3587 'non-prior':941,1149,3586 'note':485,532,615,1207,2173,2620,2746,3449,3684 'notic':1684,1722 'notif':30,66,291,293,643,957,959,962,965,1171,1173,2584,3651,3654,3660,3668,3675,3687 'notifi':2891,2935,3521,3553 'numer':1565,2290 'oauth':4014,4117,4230 'object':384,4546 'occurr':2859 'often':1850,1909 'ok':354,382,434,2018,2032,2044,4377,4392,4559 'omit':3922,4342 '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':4004 'opt':3943 'option':3016,4336 '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,3605,3607,3637 'page':568,571,583,3100,3657,3662,3665,3677,3682,3692,3694,3698 'pagin':546,576,2818,3154 'parent':128,1082,1100 'parent.type':2378 'pars':112,118,605,896,900,1006,1008,1017,1091,1242,1254,1300,3439 'part':1854 'partial':2787 'particip':2892,2936 'pass':389,2794,4538 'past':4241 'path':479,490,1764,1828,4158 'pattern':1035,1889 'payload':342 'peopl':1383,1393,1452,2586,2941,3396,3401,3405,3410,3797,3800,3804,3808,3812,3821,3827,3834,4523 'per':4049,4065 'per-repo':4048,4064 'perman':3794 'permiss':4582 'persist':4608 'person':195,201,707,1224,1391,1434,1446,3064,3066,3137,3824 'pin':2542,2544 'pingabl':206,1394 'pipe':104,1633,1869,4456 'pipelin':214 'plain':236,4424,4544 'pleas':1468 'png/jpeg/gif/webp/avif/heic':3740 'point':1765,4263 'poll':3080,3314 'posit':795,988,1524,1533,2082,2090,2310,2317,2473,3501,3509,3519,4284,4355 'post':813,821,831,842,847,1348,1420,1439,1481,3767,3772,4307 'power':4444 'pr':1323,1330,1335,1350 'prefer':178,191,1384,3122,4026,4178,4453 'present':94,1712 'preserv':2764,2774,2808 'prevent':4109 'preview':1358 'print':4542,4549 'printf':1291,1313 'prioriti':940,943,1148,1151,3573,3585,3588 'process':1354 'produc':403 'profil':4098,4099 'progress':1796,3464 '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,2826,3054,3109,3116,3146,3163,3301,3303,3320,3458,3463,3491,3542,3566,3810,3814,3829,3832,3836,3839,3997,4056,4058,4070,4084,4168 'project-scop':3457 'prompt':387,4407 'proper':4427 'provid':3571 'publish':2529,2530 'q':1292 'queri':617,894,1235,3212,3219,3844,3852 'question':37,2958,2961,2964,2966,2982,2992,2995,3374,3375,4329 'questionnair':2954 'quick':613 'quiet':427 'quot':1295 'rate':4192,4584 'raw':376,429 're':4220 're-authent':4219 'read':963,966,1813,1824,3669,3673,3676,3685,4011,4017 'record':22,58,129,285,641,698,1028,1043,1083,1093,1097,1198,1267,1695,2362,2566,3106,3112,3126,3140,3148,3158,3165,3172,3180,3202,3231,3238,3243,3250,3258,3874 'recur':2860 'red':3552 'redirect':4116 'reduc':1463,4205 'refer':614,1937 'registr':4023 'relationship':3998 'reliabl':2416 'remov':2038,2059,2077,3404,3409,3746,3748,3835,3837,4259 'renam':3731 'reopen':2020 'repli':126,1072,1079,1113 'repo':4050,4066,4112,4630,4641 'report':258,270,276,412,630,635,638,672,684,724,1154,1178,1188,1226,2829,3124,3569 'request':4206 'requir':618,1586,2238,4281,4354,4380,4395,4451 'resili':4043,4589 'resolut':220 'resolv':200,592,3686 'resourc':556,1936 'respons':1705,1831,1894 'restor':1270,3244,3246 'result':95,360,417,552,3089,4541 'retri':4588,4593,4606 'retry-aft':4592 'return':465,1022,1096,1487,2352,2556,3204,3311,4361 'rev':1299 'rev-pars':1298 'review':1334,1469 'revok':4145,4154 'rich':171,1678 'rich-text':1677 'right':78 'root':2712 'rule':74 'run':326,337,1367 'safe':1294,2785 'scale':3472 'schedul':17,53,277,280,639,679,685,1069,1176,1179,2820,2830,2834,2838,2841,2848,2854,2862,2885,2898,2912,2921,3015,3370,3980 'scope':243,620,1667,3459,3579,3636,3864,4225 'screenshot':1657,1845 'script':373,424 'search':891,893,1232,1234,3840,3843,3849,3851,3859,3863 'second':3083 'section':1542,1560,1581,2491 'see':99,455,4202,4636 'select':1397,1876,4472,4518 'semant':2780 'sent':231 'separ':1789,2589,3218,3567 'session':441 'set':207,2922,3713,4083,4088 '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,2849,2855,3254,3273,3332,3718,3785,3822,3866,3869,3872,3884,3900,3927,3940,3949,3952,3964,3973,4138 'side':2189 'silent':832,2582 'singl':1864 'skill' 'skill-basecamp' 'skip':3906 'slow':563 'smart':588 'smith':1400,1408,1426,1445 'someth':1122,1249 'sort':3174,3853 'source-basecamp' 'special':4419 'specif':536,1523,1563,2002,2236,2693,2858,4003,4131,4157,4367,4412,4616 'specifi':612,1777,2201,3691 'start':515,2866,2902,2918 'starts-at':2865,2901,2917 'stat':440 'state':4046 'statist':442 'status':1211,1213,1265,1992,2117,2364,2368,2568,2572,2944,3167,3182,3196,3206,3209,3214,3227,3309,3316,4213,4272,4491 '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,4540 'structur':266,370,466,3572,4363 'style':443 'subcommand':486,529,2812 'subject':4301,4304 'subscrib':839,2496,2581,2585,2600,2615,2621,2749,2909,2939,2940,3383,3386,3387 'subscript':25,61,3377,3380,3385,3390,3394,3403,3523,3559,3723 'success':375,428 'suggest':1491 'summar':413 'summari':356,2914 'sun':3037 'support':543,2177,3930 'suppress':3969 'surfac':1662,1841 'sweep':488,493,1363,1375,2103 'sync':2900 'syntax':155,175,1415 't09':2871 't10':2880 'tab':4040 'tabl':367,1589,1601,2198,2204,2211,2217,2234,2237,2259,2299,2304,2314,3919 'target':2345 'task':368,647,758,2006 'temp':1772 'templat':23,59,3264,3267,3270,3272,3275,3278,3280,3284,3286,3292,3295,3297,3306 'text':237,855,1231,1679,1914,2634,3848,4313,4425,4545 'text/html':3780 'time':3038 'timelin':21,57,1001,1003,3041,3044,3051,3057,3063,3070,3076 'titl':786,817,826,835,2270,2277,2467,2516,2536,2754,2761,2777,2796,2916,4298,4475,4490,4521 'to-do':2028,2039 'today':3008,3612,3615,3639,4346 '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,3121,3141,3144,3149,3153,3190,3344,3363,3912,3939,3975,4288,4375,4386,4467,4477,4484,4496,4504 'todolist':763,765,2124,2125,2132,2138,2143,2145,2151,2158,2165,3364,3913,3979,4062,4073,4089 'todos/cards':2928 'token':4015,4118 'tomorrow':597,1341,2012,2280,3436,3620,3623,3641 'tool':1814,1825,4002,4033 'tool-specif':4001 'top':522,2087,2546 'top-level':521 'topic-agent-skills' 'topic-basecamp' 'track':1322,2399,3462 'tradit':1157 'transform':4511 'trash':1268,2358,2369,2562,2573,3210,3232,3236,3294 'trashabl':3796 'tree':514,1116 'true':2383,4520 'trust':4092,4107,4122,4123,4128,4130,4136,4140,4146,4155 'tui':3074 'two':1785,1933,3988 'two-step':1784,1932 'type':289,497,507,1027,1125,1193,1200,2679,3117,3189,3343,3362,3875,3911,3926,3948 'unassign':2034,2054,2072 'uncomplet':2021,2448 'unfamiliar':460 'unpin':2549,2550 'unsubscrib':3391,3392 'unsur':1141 'untouch':2810 'untrust':4144,4152 'upcom':279,687,1175,2822 'updat':1261,1474,1960,1963,2166,2170,2276,2407,2410,2466,2535,2539,2611,2646,2647,2753,2757,2760,2770,2772,2779,2783,2788,2913,2993,3012,3013,3287,3349,3354,3442,3529,3531,3726,3854 'upload':902,906,1206,2706,2709,2715,2719,2814,3195,3368,3736,3738 'upload/file':1063 'url':113,117,864,897,899,928,1005,1009,1016,1034,1090,1239,1241,1251,1253,1619,2096,2703,4030,4096,4176,4240,4246,4322,4414 'url/api_url':4261 'usag':484,500,511,4351,4382,4384,4397,4561 'use':33,108,162,235,408,1137,1212,1225,1255,1290,1410,1433,1460,1492,1714,1820,1916,2360,2384,2564,2827,3084,3110,3205,3693,3712,3987,4369,4404,4423,4617 'user':363,595,3819,4409 'v':446 'valu':209,1263,4413 'vari':554 'vault':908,2665,2717,3369 'verbose/trace':448 'verifi':4273,4569 'via':5,136,205,249,621 'view':268,1158,1806,1833,1904,3561 'visibl':3251,3252,3259 'visual':1842,1906 'vv':447 'wait':4586 'walk':512 'want':1246 'watch':1000,1004,2495,3071,3077,3105 'webhook':24,60,3321,3324,3329,3331,3334,3337,3341,3348,3353,3358,4318 'week':602,2998,3021,3024,3630,3635,3645,3648 'wide':300,971,3048,3414,3455,3482 'wip':2522 'work':262,1144,1331,1639,2987,3555,4275 'workflow':41,1276,1499,1644 'yellow':3512,3551 'yyyi':4332 'yyyy-mm-dd':4331 'zero':185,1416","prices":[{"id":"dcc7a9db-a8a3-40d9-a21d-3a5706a547bb","listingId":"00d97c4f-db67-41b9-b1ee-c35a5de863e2","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"basecamp","category":"basecamp-cli","install_from":"skills.sh"},"createdAt":"2026-04-18T22:09:02.162Z"}],"sources":[{"listingId":"00d97c4f-db67-41b9-b1ee-c35a5de863e2","source":"github","sourceId":"basecamp/basecamp-cli/basecamp","sourceUrl":"https://github.com/basecamp/basecamp-cli/tree/main/skills/basecamp","isPrimary":false,"firstSeenAt":"2026-04-18T22:09:02.162Z","lastSeenAt":"2026-05-02T12:54:40.363Z"}],"details":{"listingId":"00d97c4f-db67-41b9-b1ee-c35a5de863e2","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"basecamp","slug":"basecamp","github":{"repo":"basecamp/basecamp-cli","stars":169,"topics":["agent-skills","basecamp"],"license":"mit","html_url":"https://github.com/basecamp/basecamp-cli","pushed_at":"2026-05-02T03:19:16Z","description":"Basecamp CLI and Agent Skills","skill_md_sha":"3d2304eb4a764588b782c90f6ca3c3cfee9fc740","skill_md_path":"skills/basecamp/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/basecamp/basecamp-cli/tree/main/skills/basecamp"},"layout":"multi","source":"github","category":"basecamp-cli","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/basecamp-cli/basecamp"},"updatedAt":"2026-05-02T12:54:40.363Z"}}