basecamp v0.7.0
Big one! 100+ PRs spanning new commands, capabilities, quality-of-life polish, and bugfixes.
Highlights:
basecamp show <url>: paste in any Basecamp URL to display it.- Inline images and attachments. Reference local file paths in Markdown to upload and create native Basecamp attachments.
- Attachment downloads. Fetch all inline attachments along with your message, comment, etc with
--download-attachments. - @mentions: "Hey @jane, take a look" becomes a native Basecamp mention. Works in comments, messages, and chat. Ambiguous names get helpful suggestions to disambiguate. Use @First.Last to be specific.
- Sort and reverse. Ubiquitous
--sortand--reverseon list commands to sort by name, date, position, etc. - Built-in
--jqfor JSON querying and transformation without jq installed. Works everywhere--jsondoes. - Auto-update. The CLI and Basecamp skill update themselves on new releases.
- And much more!
Install
macOS:
brew install --cask basecamp/tap/basecamp
basecamp auth loginLinux (deb/rpm/apk):
Download the package for your architecture from the assets below, then:
sudo apt install ./basecamp-cli_0.7.0_linux_amd64.deb # Debian/Ubuntu
sudo dnf install ./basecamp-cli_0.7.0_linux_amd64.rpm # Fedora/RHEL
sudo apk add --allow-untrusted ./basecamp-cli_0.7.0_linux_amd64.apk # Alpine
basecamp auth loginArm64 users: substitute arm64 for amd64 in the filename. Verify the SHA-256 checksum from checksums.txt before installing — especially Alpine packages installed with --allow-untrusted.
Arch Linux / Omarchy:
yay -S basecamp-cli
basecamp auth loginNix:
nix profile install github:basecamp/basecamp-cli
basecamp auth loginWindows:
scoop bucket add basecamp https://github.com/basecamp/homebrew-tap
scoop install basecamp
basecamp auth loginOther platforms: download the matching archive from the assets below.
What's Changed
⚠️ Breaking Changes
- Extend assign/unassign to support cards and card steps by @robzolkos in #269
- Fix
basecamp me404 for BASECAMP_TOKEN users by @jeremy in #272 - Hide TUI from release builds via dev build tag by @jeremy in #274
- Fix
campfire liston multi-campfire projects by @jeremy in #275 - Refactor campfire list to use getDockTools helper by @jeremy in #281
- Error on bare group commands with explicit flags by @jeremy in #313
- Fix url --help to show as argument, not [parse] by @jeremy in #315
- Support multiple IDs in assign and unassign by @jeremy in #317
- Rename --chat flag to --room by @jeremy in #321
- Fix 3 post-QA issues on api command by @jeremy in #330
- Replace "pending" with "incomplete" in todos output; omit from default view by @jeremy in #327
- Fix
reports schedulediscoverability and default date window by @robzolkos in #344 - Fix chat post JSON output contract and upload error handling by @jeremy in #365
Features
- Support multi-todoset projects end-to-end by @jeremy in #270
- Enforce bare-group-shows-help convention by @jeremy in #271
- Add QA happy-path replay tests and smoke suite scaffolding by @jeremy in #276
- Improve date display and HTML stripping in generic renderer by @jeremy in #277
- Add input validation and delete confirmation UX by @jeremy in #278
- TUI experimental flag and device code auth flow by @jeremy in #280
- Improve help text, naming, and discoverability by @jeremy in #282
- Expand smoke suite to full command coverage by @jeremy in #287
- Add built-in --jq flag via gojq by @robzolkos in #286
- Auth success screen by @jzimdars in #227
- Close every remaining smoke coverage gap by @jeremy in #289
- Add inline @mention support for comments, messages, and chat by @nnemirovsky in #288
- Factory-mode provisioning for smoke tests by @jeremy in #292
- Add messages publish command by @jeremy in #294
- Add --position flag to cards move by @jeremy in #298
- Add deterministic mention syntax and harden fuzzy resolution by @jeremy in #297
- Return structured JSON help from bare group commands when --json is active by @jeremy in #304
- Provision smoke test data dependencies, drop 4 allowlist entries by @jeremy in #305
- Show -- separator in card creation help and add test coverage by @jeremy in #303
- Add breadcrumbs for archived/trashed cards and messages by @jeremy in #310
- Add --sort and --reverse flags to list commands by @jeremy in #299
- Promote parent-scoped persistent flags into FLAGS section by @jeremy in #307
- Wire up markdown-to-HTML conversion for cards, schedule, and sweep by @jeremy in #302
- Add e2e test coverage for --jq flag by @jeremy in #308
- Add paragraph spacing and line accumulation to MarkdownToHTML by @jeremy in #306
- Add --assignee flag to card creation by @jeremy in #300
- Show file size for campfire upload lines by @jeremy in #322
- Filter low-value columns from --md markdown output by @jeremy in #311
- Add pagination notice when search results are truncated by @jeremy in #314
- Add --limit flag to timeline command by @jeremy in #318
- Add [action] hint to tools command Use string by @jeremy in #316
- Support storage URL downloads in files download by @jorgemanrubia in #283
- Improve tool instance disambiguation format by @jeremy in #329
- Fix dock ordering and add --all flag to
projects showby @robzolkos in #333 - Switch CODEOWNERS from sip to cli team by @jeremy in #346
- Add --on-hold flag to cards move command by @nnemirovsky in #325
- Add attachment listing for items by @brianevanmiller in #296
- Add
todos updatecommand by @jeremy in #348 - Make
--inoptional for all tools commands by @robzolkos in #340 - Add lineup list command by @jeremy in #324
- Support all URL types in show command by @robzolkos in #349
- Add
hillchartscommands (show, track, untrack) by @robzolkos in #347 - ci: harden GitHub Actions workflows by @flavorjones in #350
- Stamp plugin version at release time by @jeremy in #355
- Add plugin version checking and auto-update awareness by @jeremy in #357
- Add ambient update notice for interactive TTY sessions by @jeremy in #358
- Skip interactive setup wizard in non-TTY environments by @robzolkos in #353
- Add bats to make tools target by @jeremy in #359
- Remove MCP command stub by @jeremy in #362
- Upgrade to basecamp-sdk v0.7.1 — gauges, assignments, notifications, accounts by @jeremy in #373
- Add attachments download and show-command inline attachment discovery by @jeremy in #360
- Add field clearing to todos update by @jeremy in #370
- Add --list flag to todos position for cross-list moves by @jeremy in #372
- Default check-ins answer date to today by @robzolkos in #376
- Close smoke coverage gap from .surface alias expansion by @jeremy in #378
Bug Fixes
- Don't truncate URLs in formatted output by @jeremy in #273
- Validate item before person picker in assign/unassign by @robzolkos in #279
- Fix bash quoting bug in smoke_provision.sh by @jeremy in #295
- Exempt URL columns from width cap in generic table renderer by @jeremy in #309
- Protect URL columns from being dropped in selectColumns() by @jeremy in #320
- Skip user-authored lines in attachment size injection by @jeremy in #323
- Migrate step validation to SDK CardSteps().Get() by @jeremy in #312
- Include todolist group todos in
todos listby @jeremy in #319 - Add
--inas global alias for--projectby @robzolkos in #334 - Show full content in detail views instead of truncating at 40 chars by @robzolkos in #338
- Gracefully degrade unresolved fuzzy @mentions instead of failing the message by @robzolkos in #339
- Fix IsHTML false positive on backtick code spans by @robzolkos in #345
- Fix setup claude skipping install due to stale plugin entries by @jeremy in #336
- Refresh skills at all installed locations on CLI upgrade by @jeremy in #356
- Bump SDK to fix empty ID array handling by @robzolkos in #351
- Fix campfire messages --limit being ignored by @jeremy in #367
- Fix blank-line-after-list suppressing paragraph break by @jeremy in #363
- Fix schedule update silently dropping --attach without --description by @jeremy in #364
- Fix --assignee filter ignored with --list by @jeremy in #369
- Fix update detection for pseudo-version builds by @robzolkos in #375
- Fix campfire messages returning stale messages by @jeremy in #371
Documentation
- Add file upload command to SKILL.md by @robzolkos in #343
Other Changes
- Add smoke test for messages publish command by @jeremy in #301
- Fix emoji/CJK alignment in search results by @jeremy in #328
- Regenerate .surface from Go walker with ARG and alias support by @jeremy in #366
New Contributors
- @jzimdars made their first contribution in #227
- @nnemirovsky made their first contribution in #288
- @brianevanmiller made their first contribution in #296
Full Changelog: v0.4.0...v0.7.0