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
Issue tracking from the shell — for humans and their agents. Query your queue, claim tasks, report progress, close with proof. Works the same whether you're typing or a subagent is.
@@ -57,6 +57,9 @@ linear tasks # your queue in the active cycle
57
57
linear tasks --board # whole team board
58
58
linear tasks ANT-42 # detail view
59
59
linear tasks --query "auth refresh"# search title + description
60
+
linear tasks --cycle all # whole team: every cycle + backlog
61
+
linear tasks --cycle none # the backlog (issues in no cycle)
62
+
linear tasks --assignee me # by assignee: me | none | someone@x.com
60
63
linear tasks --json | jq # machine-readable
61
64
62
65
linear update ANT-42 --pickup # claim (In Progress)
linear update ANT-42 --priority urgent --assign someone@x.com
66
69
linear update ANT-42 --title "Renamed" --description "Rewritten body"
67
70
linear update ANT-42 --project "Foo" --milestone "v1.0"
71
+
linear update ANT-42 --blocked-by ANT-7 --blocks ANT-9 # relations
68
72
linear update ANT-42 --unlabel agent:claude --label agent:codex # hand off
69
73
70
74
linear create "Fix auth bug" --label security --priority high
@@ -77,18 +81,23 @@ linear projects # list projects + progress
77
81
linear projects "Phoenix"# detail view with milestones
78
82
linear labels # available labels
79
83
linear users # assignable users (for --assign lookup)
84
+
linear states # the team's workflow states (valid --status values)
80
85
linear cycles
81
86
82
87
linear --team ENG tasks # one-shot override (multi-team workspace)
83
88
```
84
89
90
+
> Every list is fully paginated — no silent truncation at Linear's 50-issue
91
+
> page cap, so `linear tasks` and `--query` see the *whole* cycle/team before
92
+
> you create a duplicate.
93
+
85
94
Full help: `linear <command> --help`.
86
95
87
96
## For humans and agents
88
97
89
98
The same CLI works whether you're typing or a subagent is. Driving Linear from either shouldn't require shelling out to `@linear/sdk`, hand-rolling GraphQL, or parsing HTML.
90
99
91
-
-**Assignee-as-queue.**`linear tasks` returns what *you* own, filtered to the active cycle. No dashboards, no saved views.
100
+
-**Assignee-as-queue.**`linear tasks` returns what *you* own in the active cycle. Widen with `--cycle all` (whole team) or `--cycle none` (backlog), or filter by `--assignee me|none|<email>`. No dashboards, no saved views.
92
101
-**Agent-lane labels.** Set `--agent claude` at setup and `linear tasks` filters to issues labeled for that agent. Multiple agents can share a team without stepping on each other.
93
102
-**Proof-first completion.**`--done --proof <file|url|text>` uploads attachments, records links, and appends notes in one call — so reviewers see evidence without digging.
94
103
-**JSON everywhere.**`--json` on every read command. Pipe to `jq` or hand to a subagent.
@@ -129,13 +138,13 @@ import subprocess
129
138
import sys
130
139
```
131
140
132
-
Every symbol is in the Python standard library. No `pip install`. No `npm install`. No `cargo build`. No Deno. The whole tool is one ~43 KB file you can read top-to-bottom in an hour.
141
+
Every symbol is in the Python standard library. No `pip install`. No `npm install`. No `cargo build`. No Deno. The whole tool is one ~76 KB file you can read top-to-bottom in an hour.
133
142
134
143
### How it compares
135
144
136
145
| Tool | Runtime | Deps | Install footprint | Last published |
@@ -152,7 +161,7 @@ This is the boring superpower of having no dependencies.
152
161
153
162
Every notable CLI supply chain attack of the last few years — `event-stream`, `colors`/`faker`, `ua-parser-js`, `node-ipc`, the `xz` backdoor, `polyfill.io`, the dozens of [npm typosquats](https://socket.dev) caught monthly — happened through a compromised dependency, not the tool itself. linear-cli has none. The full audit surface is:
154
163
155
-
- The ~1700 lines of Python in this repo (read it: [`linear`](./linear))
164
+
- The ~2,100 lines of Python in this repo (read it: [`linear`](./linear))
156
165
- Python's standard library
157
166
- Linear's own GraphQL API at `api.linear.app`
158
167
@@ -181,7 +190,7 @@ If you want the MCP, use it. If you want a subagent to burn through 50 tickets w
181
190
182
191
Yes. If your agent has its own Linear account (many teams provision one seat per agent — e.g. `claude@yourcompany.com`, `codex@yourcompany.com`), run `linear setup --api-key <agent's own key>` without `--agent`. Then `linear tasks` returns tickets assigned *directly to the agent's user*. No labels, no filtering — the assignee IS the lane.
183
192
184
-
Use `--agent <label>` when you want multiple agents to share one Linear seat; skip it when each agent has its own.
193
+
Use `--agent <label>` when you want multiple agents to share one Linear seat; skip it when each agent has its own. To query any assignee on demand, `linear tasks --assignee me|none|<email>`.
-`linear tasks` without flags returns issues assigned to the identity that owns the API key.
89
104
- If `cfg.agent` is set at setup time (e.g. `claude`, `codex`), `linear tasks` additionally filters by a matching label — the "agent lane" pattern. Override with `--all`.
105
+
- Default scope is the active cycle. Use `--cycle all` to search the whole team (e.g. before creating, to avoid duplicates), `--cycle none` for the backlog, or `--assignee <email>` to query someone else's queue.
90
106
-`linear update <id> --pickup` = claim the task. Follow with `--done --proof` when shipped.
0 commit comments