You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
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)