Skip to content

basecamp v0.12.0

Choose a tag to compare

@github-actions github-actions released this 06 Oct 01:18
· 101 commits to main since this release
8ec1cb4

Breaking changes

  • Rich-text input is Markdown unless you pass --format html. The CLI no longer guesses from the content whether a body is Markdown or HTML. Before, a single supported tag anywhere in a body sent the whole thing unconverted, so Markdown beside it posted as literal ##, ** and pipes. Now Markdown is always converted, and HTML tags that Basecamp rich text supports are kept where they appear. To send HTML without conversion, add --format html. A one-line warning on stderr flags Markdown that carries raw HTML; --format markdown silences it. (#832)
  • checkins question notify: --digest-include-unanswered is gone. It named a setting Basecamp doesn't have. Use --responding / --no-responding (whether the question asks you) and --on-answer / --no-on-answer (whether you're notified when someone answers). The command used to report success without changing anything; now it changes the settings it names and fails when Basecamp doesn't apply them. (#830)

New

  • basecamp files move moves a document, upload or folder into another folder in the same project, keeping its comments and history. Pass IDs or Basecamp URLs: basecamp files move <item> --to <folder>. (#831)
  • basecamp subtasks lists, shows, creates, updates, completes, moves and deletes the steps on cards and to-dos. (#791, thanks @zachasme)
  • Message categories: messages create and messages update take --category <id or name>, and messages update --no-category removes one. (#798)
  • templates construct --start-date lines the template's dated to-dos and schedule up with the date you give, instead of with today. (#695)
  • Grok Build is supported as a coding agent: basecamp setup grok installs the Basecamp skill for it, alongside Claude Code and Codex. (#703)

Improvements

  • auth status tells you who you're signed in as, and auth status --check confirms the credential with Basecamp. (#716)
  • Signing out revokes the credential with Basecamp, not just locally: auth logout, profile delete and auth revoke. A token you imported with --with-token is forgotten locally, and the CLI tells you it stays valid until you revoke it in Basecamp. (#713, #714)
  • Clearer device login: two numbered steps, a note on why no browser opened, and a countdown while it waits. (#710)
  • An expired or revoked refresh token is reported as an auth error that says what to run, instead of a generic API error. (#711)
  • Parallel commands are more reliable: they queue for a moment instead of failing when several run at once, back off and retry when Basecamp asks them to slow down, and no longer lose a credential while refreshing it. (#712, #720, thanks @jorgemanrubia)
  • Long step lists are read in full when a card's or to-do's embedded list is cut off at 100. (#819)
  • notifications list says "100+ unread" when Basecamp's cap is reached, instead of an exact-looking count. (#799)
  • The Basecamp skill for coding agents is much smaller (about 8 KB, down from 89 KB) and leans on the CLI's own --help, so it loads faster and stays in step with the installed version. (#835)
  • The coding-agent plugin no longer adds Basecamp context to every new session. It loads when you use it. (#675, thanks @almirsarajcic)

Fixes

  • Check-in questions can be created and edited again. checkins question create was refused by Basecamp every time, and update with --time, --frequency or --days was refused too. Both work now, and an update keeps whatever part of the schedule you didn't change. (#841)
  • Links copied from the Basecamp web app work everywhere: app.basecamp.com URLs are accepted by comments show, comments thread, chat update and files replace, the same as 3.basecamp.com. (#807)
  • A comment's link boosts, trashes, archives or restores the comment, not the item it sits on. (#813)
  • A chat line URL reaches the right room in a project with more than one. (#807)
  • Yes/no prompts open on their default, so Enter picks it. (#802)
  • Tables show every column, not only those present in the first row (profile list lost Default and Active). (#790, thanks @zachasme)
  • BASECAMP_NONINTERACTIVE=1 refuses browser and pasted-callback logins instead of waiting on input. (#693)
  • me names an account with no email instead of printing a blank. (#715)
  • doctor's Codex check no longer leaves a stray process behind when it times out. (#694)