What's missing
linear cycles lists cycles but only shows names and dates. There's no way from the CLI to:
- See cycle IDs (needed for any mutation or external GraphQL call)
- Rename a cycle (
cycles update <id> --name "...")
- Create a cycle (
cycles create --name "..." --starts 2026-07-01 --ends 2026-07-07)
- Delete a cycle (
cycles delete <id>)
The team helper at line 277 (list_team_cycles) already fetches IDs from the API — they're just not surfaced.
Why it matters
Triage scenarios where the team's MRR/goal targets shift mid-quarter. In this session I had 13 weekly cycles with mis-calibrated targets baked into their names (e.g. Q2W13 — Unicorn (\$2.78M MRR)) and the only way to rename them was to drop to raw GraphQL with the cycleUpdate mutation.
The single-file no-deps story means raw GraphQL is technically fine, but it defeats the whole "Linear from the shell" promise for any agent doing cycle-level cleanup.
Proposed surface
linear cycles # list (already works) — add an --ids/--json flag
linear cycles create --name "..." --starts ISO --ends ISO
linear cycles update <id-or-name> --name "..." [--starts ISO] [--ends ISO]
linear cycles delete <id-or-name>
Accept fuzzy match on cycle name as a convenience (since IDs are uuids).
Linear API reference
- Query:
team.cycles(...) — already used at line 254 and line 277
- Mutations:
cycleCreate(input: CycleCreateInput!), cycleUpdate(id: String!, input: CycleUpdateInput!), cycleArchive(id: String!)
What's missing
linear cycleslists cycles but only shows names and dates. There's no way from the CLI to:cycles update <id> --name "...")cycles create --name "..." --starts 2026-07-01 --ends 2026-07-07)cycles delete <id>)The team helper at line 277 (
list_team_cycles) already fetches IDs from the API — they're just not surfaced.Why it matters
Triage scenarios where the team's MRR/goal targets shift mid-quarter. In this session I had 13 weekly cycles with mis-calibrated targets baked into their names (e.g.
Q2W13 — Unicorn (\$2.78M MRR)) and the only way to rename them was to drop to raw GraphQL with thecycleUpdatemutation.The single-file no-deps story means raw GraphQL is technically fine, but it defeats the whole "Linear from the shell" promise for any agent doing cycle-level cleanup.
Proposed surface
Accept fuzzy match on cycle name as a convenience (since IDs are uuids).
Linear API reference
team.cycles(...)— already used at line 254 and line 277cycleCreate(input: CycleCreateInput!),cycleUpdate(id: String!, input: CycleUpdateInput!),cycleArchive(id: String!)