Skip to content

basecamp v0.7.0

Choose a tag to compare

@github-actions github-actions released this 25 Mar 09:39
· 281 commits to main since this release

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 --sort and --reverse on list commands to sort by name, date, position, etc.
  • Built-in --jq for JSON querying and transformation without jq installed. Works everywhere --json does.
  • 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 login

Linux (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 login

Arm64 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 login

Nix:

nix profile install github:basecamp/basecamp-cli
basecamp auth login

Windows:

scoop bucket add basecamp https://github.com/basecamp/homebrew-tap
scoop install basecamp
basecamp auth login

Other 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 me 404 for BASECAMP_TOKEN users by @jeremy in #272
  • Hide TUI from release builds via dev build tag by @jeremy in #274
  • Fix campfire list on 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 schedule discoverability 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 show by @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 update command by @jeremy in #348
  • Make --in optional 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 hillcharts commands (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 list by @jeremy in #319
  • Add --in as global alias for --project by @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

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

Full Changelog: v0.4.0...v0.7.0