From 068f3f6659e098b5dae2094f2ce5e2a39eca06ab Mon Sep 17 00:00:00 2001 From: Jeremy Daer Date: Tue, 4 Aug 2026 10:56:17 -0700 Subject: [PATCH] Tell agents the truth about card column moves MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit skills/basecamp/SKILL.md claimed "Basecamp does not track when cards are moved between columns." It does: `basecamp events ` records an `adopted` event on every column move, paired with `completed`/`uncompleted` when the card crosses a Done boundary. The claim survived because `basecamp events` appeared nowhere in the skill — an agent reading it never learned the command exists — and `events --help` listed common actions without `adopted`, so neither source could correct the other. This file installs to ~/.agents/skills/, so it was actively misinforming agents. Fix all three: replace the false limitation with the events recipe, document `events` as its own section next to Timeline plus a Quick Reference row, and add `adopted` to the command's own list of common actions. Closes #595 --- internal/commands/events.go | 3 ++- skills/basecamp/SKILL.md | 28 +++++++++++++++++++++++++++- 2 files changed, 29 insertions(+), 2 deletions(-) diff --git a/internal/commands/events.go b/internal/commands/events.go index 468fbe86e..e89b37efc 100644 --- a/internal/commands/events.go +++ b/internal/commands/events.go @@ -29,7 +29,8 @@ You can pass either an ID or a Basecamp URL: Events track all changes to an item. Common event actions: - created - Item was created -- completed/uncompleted - Todo completion state changed +- completed/uncompleted - Todo or card completion state changed +- adopted - A card moved to another column - assignment_changed - Assignees were added/removed - content_changed - Content was edited - archived/unarchived - Status changed diff --git a/skills/basecamp/SKILL.md b/skills/basecamp/SKILL.md index 44f79ac25..619174890 100644 --- a/skills/basecamp/SKILL.md +++ b/skills/basecamp/SKILL.md @@ -221,6 +221,7 @@ basecamp --page 1 # First page only, no auto-pagination | Download attachments | `basecamp attachments download --out /tmp/` | | Show + download | `basecamp todos show --download-attachments --json` | | Stream attachment to stdout | `basecamp attachments download --file --out -` | +| Change history for an item | `basecamp events --json` (when a card moved columns, when a todo was completed) | | Search | `basecamp search "query" --json` | | Parse URL | `basecamp url parse "" --json` | | Upload file | `basecamp files uploads create [--vault ] --in --json` | @@ -659,7 +660,11 @@ against the source table's wormholes. **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. -**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. +**When a card moved columns:** don't read `updated_at` — it changes on any +modification. Use the event history instead: `basecamp events --json` +records an `adopted` event for every column move, and a card crossing into or +out of a Done column pairs that with `completed`/`uncompleted`. See +[Events](#events-change-history). **Card Steps (checklists):** ```bash @@ -857,6 +862,27 @@ basecamp timeline --watch --interval 60 # Poll every 60 seconds Use `--limit N` to cap results or `--all` to fetch everything (default: 100 events). `--all` and `--page` cannot be combined with `--watch`. +### Events (change history) + +`basecamp timeline` reports activity across a project or account. For the audit +trail of one specific item — todo, card, message, document — use `basecamp +events`: + +```bash +basecamp events --json # Change history for one item +basecamp events --limit 25 --json # Cap results (default 100) +basecamp events --all --json # Fetch everything +``` + +Common `action` values: `created`, `completed`/`uncompleted`, +`assignment_changed`, `content_changed`, `archived`/`unarchived`, +`commented_on`, and — for cards — `adopted`, which is recorded every time a card +moves to another column. That makes `events` the way to answer "when did this +card move?" or "when was this actually finished?", neither of which `updated_at` +can tell you. + +`--page` accepts only `1`; use `--all` to walk every page. + ### Recordings (Cross-project) Use `basecamp recordings ` for cross-project type browsing. **For assigned todos, prefer `basecamp reports assigned`** — recordings do not include assignee data and cannot be filtered by person.