Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion internal/commands/reports.go
Original file line number Diff line number Diff line change
Expand Up @@ -261,7 +261,7 @@ func newReportsScheduleCmd() *cobra.Command {
Short: "View upcoming schedule entries",
Long: `View upcoming schedule entries and assignables within a date window.

By default shows the upcoming schedule. Use --start and --end to specify a date range.
By default starts from today. Use --start and --end to specify a different range.
Dates can be natural language (e.g., "today", "next week", "+7") or YYYY-MM-DD format.`,
RunE: func(cmd *cobra.Command, args []string) error {
app := appctx.FromContext(cmd.Context())
Expand All @@ -272,6 +272,10 @@ Dates can be natural language (e.g., "today", "next week", "+7") or YYYY-MM-DD f

// Parse dates if provided (dateparse handles natural language like "today", "+7")
// Unrecognized formats are normalized (trimmed/lowercased) and passed through for the API to validate
// Default start to today when omitted (API requires at least a start date)
if startDate == "" {
startDate = "today"
}
parsedStart := dateparse.Parse(startDate)
parsedEnd := dateparse.Parse(endDate)

Expand Down
6 changes: 4 additions & 2 deletions internal/commands/schedule.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,11 @@ func NewScheduleCmd() *cobra.Command {
Short: "Manage schedules and entries",
Long: `Manage project schedules and schedule entries.

Use 'basecamp schedule' to view the project schedule.
Use 'basecamp schedule info' to view the project schedule.
Use 'basecamp schedule entries' to list schedule entries.
Use 'basecamp schedule create' to create new entries.`,
Use 'basecamp schedule create' to create new entries.

For a cross-project view of your upcoming schedule, use 'basecamp reports schedule'.`,
Annotations: map[string]string{"agent_notes": "Each project has one schedule\nRecurring events: use --date on show to get a specific occurrence\nschedule settings --include-due makes todo/card due dates appear on the schedule\nNatural dates work for --starts-at: tomorrow, next monday"},
}

Expand Down
12 changes: 9 additions & 3 deletions skills/basecamp/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -51,9 +51,11 @@ triggers:
# My work
- my todos
- my tasks
- my schedule
- my basecamp
- assigned to me
- overdue todos
- upcoming events
# URLs
- 3.basecamp.com
- basecampapi.com
Expand All @@ -80,7 +82,7 @@ Full CLI coverage: 130 endpoints across todos, cards, messages, files, schedule,
- **`@sgid:VALUE`** — inline SGID embed for pipeline composability
- **`@Name` / `@First.Last`** — fuzzy name resolution (may be ambiguous)
For todos, documents, and cards, content is sent as-is — use plain text or HTML directly.
6. **Project scope is mandatory for most commands** — via `--in <project>` or `.basecamp/config.json`. Cross-project exceptions: `basecamp reports assigned` for assigned work, `basecamp reports overdue` for overdue todos, `basecamp recordings <type>` for browsing by type.
6. **Project scope is mandatory for most commands** — via `--in <project>` or `.basecamp/config.json`. Cross-project exceptions: `basecamp reports assigned` for assigned work, `basecamp reports overdue` for overdue todos, `basecamp reports schedule` for upcoming schedule across all projects, `basecamp recordings <type>` for browsing by type.

### Output Modes

Expand Down Expand Up @@ -133,13 +135,14 @@ basecamp <cmd> --page 1 # First page only, no auto-pagination

## Quick Reference

> **Note:** Most queries require project scope (via `--in <project>` or `.basecamp/config.json`). Cross-project exceptions: `basecamp reports assigned`, `basecamp reports overdue`, `basecamp recordings <type>`.
> **Note:** Most queries require project scope (via `--in <project>` or `.basecamp/config.json`). Cross-project exceptions: `basecamp reports assigned`, `basecamp reports overdue`, `basecamp reports schedule`, `basecamp recordings <type>`.

| Task | Command |
|------|---------|
| List projects | `basecamp projects list --json` |
| My todos (in project) | `basecamp todos list --assignee me --in <project> --json` |
| My todos (cross-project) | `basecamp reports assigned --json` (defaults to "me") |
| My schedule (cross-project) | `basecamp reports schedule --json` (upcoming events across all projects) |
| All todos (cross-project) | `basecamp recordings todos --json` (no assignee data — cannot filter by person) |
| Overdue todos (in project) | `basecamp todos list --overdue --in <project> --json` |
| Overdue todos (cross-project) | `basecamp reports overdue --json` |
Expand Down Expand Up @@ -201,6 +204,7 @@ Need to find something?
├── Know the type + project? → basecamp <type> list --in <project> --json
│ (some groups have default list behavior; use --agent --help if unsure)
├── My assigned work? → basecamp reports assigned --json (defaults to "me")
├── Upcoming schedule? → basecamp reports schedule --json (cross-project)
├── Overdue across projects? → basecamp reports overdue --json
├── Browse by type cross-project? → basecamp recordings <type> --json
│ (types: todos, messages, documents, comments, cards, uploads)
Expand Down Expand Up @@ -444,8 +448,10 @@ basecamp files update <id> --title "New" --content "Updated"

### Schedule

For upcoming events across all projects, use `basecamp reports schedule --json`.

```bash
basecamp schedule --in <project> --json # Schedule info
basecamp schedule info --in <project> --json # Schedule info
basecamp schedule entries --in <project> --json # List entries
basecamp schedule show <id> --in <project> # Entry details
basecamp schedule show <id> --date 20240315 # Specific occurrence (recurring)
Expand Down
Loading