@kyaukyuai/linear-cli 2.10.0 → 2.12.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +26 -0
- package/README.md +63 -35
- package/npm-shrinkwrap.json +2 -2
- package/package.json +3 -3
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,32 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [2.12.0] - 2026-03-30
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- added schema-style metadata to `linear capabilities --json` so agents can inspect command arguments, input modes, output semantics, and exit codes without scraping docs
|
|
10
|
+
- added Automation Contract v5 coverage for `initiative list/view --json`, `project-update list --json`, and `initiative-update list --json`
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
|
|
14
|
+
- upgraded write timeout handling to reconcile against Linear after client-side confirmation timeouts, distinguishing `probably_succeeded`, `definitely_failed`, and `partial_success` outcomes for high-value write commands
|
|
15
|
+
|
|
16
|
+
## [2.11.0] - 2026-03-30
|
|
17
|
+
|
|
18
|
+
### Added
|
|
19
|
+
|
|
20
|
+
- added `linear capabilities --json` so agents can discover supported JSON, dry-run, stdin, confirmation, and retry semantics without scraping help text
|
|
21
|
+
- added Automation Contract v4 coverage for `team`, `user`, `workflow-state`, and label read surfaces
|
|
22
|
+
|
|
23
|
+
### Changed
|
|
24
|
+
|
|
25
|
+
- standardized write retry semantics with explicit idempotency categories, retry-safe notification archive/read behavior, and shared partial-success metadata
|
|
26
|
+
|
|
27
|
+
### Fixed
|
|
28
|
+
|
|
29
|
+
- improved write timeout semantics with distinct `timeout_error` JSON failures, exit code `6`, and clearer partial-success details for combined write flows such as `issue update --comment --json`
|
|
30
|
+
|
|
5
31
|
## [2.10.0] - 2026-03-30
|
|
6
32
|
|
|
7
33
|
### Added
|
package/README.md
CHANGED
|
@@ -1,24 +1,20 @@
|
|
|
1
|
-
#
|
|
1
|
+
# linear-cli
|
|
2
2
|
|
|
3
|
-
`
|
|
3
|
+
`linear-cli` is an agent-first Linear CLI for Claude Code, Codex, and other automation that needs a stable command surface instead of screen scraping or ad-hoc GraphQL scripts. this fork of [`schpet/linear-cli`](https://github.com/schpet/linear-cli) keeps the git and [jj](https://www.jj-vcs.dev/) workflow ergonomics from upstream, then adds stable JSON contracts, dry-run previews, retry-safe error semantics, and pipeline-friendly command behavior for automation-heavy teams.
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
here's how it works:
|
|
5
|
+
if you want an agent to read Linear state, preview a write, apply it, and return structured output without leaving the shell, this repo is designed for that path first.
|
|
8
6
|
|
|
9
7
|
```bash
|
|
10
|
-
linear
|
|
11
|
-
|
|
12
|
-
linear issue
|
|
13
|
-
linear issue
|
|
14
|
-
linear issue
|
|
15
|
-
linear
|
|
16
|
-
linear
|
|
17
|
-
linear issue pr # makes a PR with title/body preset, using gh cli
|
|
18
|
-
linear issue create # create a new issue
|
|
8
|
+
linear capabilities --json
|
|
9
|
+
linear issue list --json
|
|
10
|
+
linear issue view ENG-123 --json
|
|
11
|
+
linear issue create -t "Backfill webhook contract docs" --team ENG --dry-run --json
|
|
12
|
+
linear issue update ENG-123 --state done --comment "Shipped in v2.10.0" --json
|
|
13
|
+
linear project view "Automation Contract v3" --json
|
|
14
|
+
linear notification list --json
|
|
19
15
|
```
|
|
20
16
|
|
|
21
|
-
|
|
17
|
+
interactive commands still exist for humans, but the primary design goal is that an agent can discover commands incrementally, pass all important input as flags or stdin, and get machine-readable success or failure back.
|
|
22
18
|
|
|
23
19
|
## screencast demos
|
|
24
20
|
|
|
@@ -38,21 +34,11 @@ it aims to be a complement to the web and desktop apps that lets you stay on the
|
|
|
38
34
|
|
|
39
35
|
## install
|
|
40
36
|
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
```
|
|
44
|
-
brew install kyaukyuai/tap/linear
|
|
45
|
-
```
|
|
46
|
-
|
|
47
|
-
### deno via jsr
|
|
48
|
-
|
|
49
|
-
```bash
|
|
50
|
-
deno install -A --reload -f -g -n linear jsr:@kyaukyuai/linear-cli
|
|
51
|
-
```
|
|
37
|
+
for agents and scripts, prefer a pinned install in the repo or runtime you control.
|
|
52
38
|
|
|
53
39
|
### npm / bun / pnpm
|
|
54
40
|
|
|
55
|
-
install as a
|
|
41
|
+
install as a dependency to pin a version in your project:
|
|
56
42
|
|
|
57
43
|
```bash
|
|
58
44
|
npm install -D @kyaukyuai/linear-cli
|
|
@@ -73,6 +59,18 @@ bunx linear issue list
|
|
|
73
59
|
|
|
74
60
|
package on npm: [@kyaukyuai/linear-cli](https://www.npmjs.com/package/@kyaukyuai/linear-cli)
|
|
75
61
|
|
|
62
|
+
### deno via jsr
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
deno install -A --reload -f -g -n linear jsr:@kyaukyuai/linear-cli
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### homebrew
|
|
69
|
+
|
|
70
|
+
```bash
|
|
71
|
+
brew install kyaukyuai/tap/linear
|
|
72
|
+
```
|
|
73
|
+
|
|
76
74
|
### binaries
|
|
77
75
|
|
|
78
76
|
https://github.com/kyaukyuai/linear-cli/releases/latest
|
|
@@ -85,10 +83,17 @@ cd linear-cli
|
|
|
85
83
|
deno task install
|
|
86
84
|
```
|
|
87
85
|
|
|
88
|
-
##
|
|
86
|
+
## agent-facing capabilities
|
|
89
87
|
|
|
90
|
-
compared to upstream, this fork adds and maintains
|
|
88
|
+
compared to upstream, this fork adds and maintains capabilities aimed at automation-heavy workflows:
|
|
91
89
|
|
|
90
|
+
- stable JSON contracts for the automation tier, with machine-readable failures for parser, validation, and runtime errors
|
|
91
|
+
- a self-describing `linear capabilities --json` surface so agents can discover contract coverage, primary input schema, output semantics, and command traits without scraping docs
|
|
92
|
+
- `--dry-run` previews for high-value write commands, including `issue start`, issue writes, and non-issue writes
|
|
93
|
+
- stdin and pipeline support for high-value write paths
|
|
94
|
+
- retry-safe semantics for relation add/delete, project label add/remove, notification read/archive, and structured partial-failure details
|
|
95
|
+
- canonical `--yes` confirmation bypass handling for destructive commands
|
|
96
|
+
- agent-focused help examples across automation-tier and major write commands
|
|
92
97
|
- cycle workflows beyond listing and viewing, including `cycle current`, `cycle next`, `cycle create`, `cycle add`, and `cycle remove`
|
|
93
98
|
- issue workflow commands for `search`, `assign`, `move`, `priority`, `estimate`, `label add/remove`, comment delete, relations, and attachments
|
|
94
99
|
- inbox notification commands for `list`, `count`, `read`, and `archive`
|
|
@@ -96,7 +101,8 @@ compared to upstream, this fork adds and maintains several capabilities aimed at
|
|
|
96
101
|
- workflow state commands for `list` and `view`
|
|
97
102
|
- user commands for `list` and `view`
|
|
98
103
|
- project label commands for `list` and `project label add/remove`
|
|
99
|
-
-
|
|
104
|
+
- initiative commands for `list` and `view`, plus project update and initiative update feeds
|
|
105
|
+
- JSON output for scripting across issue, cycle, project, milestone, initiative, document, webhook, notification, and update-feed commands
|
|
100
106
|
- workspace-aware auth management with keyring migration and default workspace support
|
|
101
107
|
- generated AI-agent skill docs, Claude plugin metadata, npm publishing, and Homebrew tap release plumbing
|
|
102
108
|
|
|
@@ -104,14 +110,20 @@ compared to upstream, this fork adds and maintains several capabilities aimed at
|
|
|
104
110
|
|
|
105
111
|
for bot and org-wide automation use cases, `linear-cli` defines a stable JSON contract for a focused automation tier.
|
|
106
112
|
|
|
113
|
+
to discover the curated agent-facing command surface programmatically, use `linear capabilities --json`. it reports stable contract versions, automation-tier membership, and per-command support for `--json`, `--dry-run`, stdin, confirmation bypass, idempotency category, primary arguments and flags, and success/failure output semantics.
|
|
114
|
+
|
|
107
115
|
- v1 in scope: `issue list/view/create/update --json`, `issue relation add/delete/list --json`, `issue comment add --json`, `team members --json`, `issue parent/children/create-batch --json`
|
|
108
116
|
- v2 additions: `project list/view --json`, `cycle list/view/current/next --json`, `milestone list/view --json`
|
|
109
117
|
- v3 additions: `document list/view --json`, `webhook list/view --json`, `notification list/count --json`
|
|
118
|
+
- v4 additions: `team list/view --json`, `user list/view --json`, `workflow-state list/view --json`, `label list --json`, `project-label list --json`
|
|
119
|
+
- v5 additions: `initiative list/view --json`, `project-update list --json`, `initiative-update list --json`
|
|
110
120
|
- out of scope: non-JSON terminal output, `linear api`, and other `--json` commands that are not listed above
|
|
111
121
|
|
|
112
122
|
the contract fixes top-level success payload shapes and requires machine-readable failure payloads for the automation tier. see [docs/json-contracts.md](docs/json-contracts.md) for the full contract, compatibility rules, and example payloads. that guarantee also covers parser and argument validation failures when `--json` is present.
|
|
113
123
|
|
|
114
|
-
for automation consumers, auth and authorization failures now use exit code `4`,
|
|
124
|
+
for automation consumers, auth and authorization failures now use exit code `4`, free-plan or workspace-plan limit failures use exit code `5`, and client-side write confirmation timeouts use exit code `6`. other contract failures remain non-zero and currently use `1`. rate-limited responses remain on exit code `1`, but now include retry guidance and, when available, `error.details.rateLimit` metadata.
|
|
125
|
+
|
|
126
|
+
high-value write commands honor `LINEAR_WRITE_TIMEOUT_MS` and accept `--timeout-ms` for per-command overrides. timeout failures return a distinct machine-readable failure mode, `timeout_error`, with `error.details.failureMode = "timeout_waiting_for_confirmation"`. when reconciliation runs after the timeout, `error.details.outcome` now distinguishes `definitely_failed`, `probably_succeeded`, and `partial_success` from the fallback `unknown` state. notification `read` and `archive` now use the same timeout contract as issue write commands.
|
|
115
127
|
|
|
116
128
|
the same document also defines the shared preview contract for future `--dry-run` write commands. those commands are not all implemented yet, but the contract now fixes the expected `stdout`, `exit code`, and `--json --dry-run` envelope shape ahead of rollout.
|
|
117
129
|
|
|
@@ -120,10 +132,11 @@ destructive commands use `--yes` as the canonical confirmation-bypass flag. lega
|
|
|
120
132
|
for retry behavior, prefer treating write commands in three buckets:
|
|
121
133
|
|
|
122
134
|
- retry-safe set-style writes: `issue update` without `--comment`, plus relation add/delete
|
|
135
|
+
- retry-safe no-op writes: `project label add/remove` and `notification read/archive`, which succeed without mutating when the target state is already satisfied
|
|
123
136
|
- non-idempotent writes: `issue create`, `issue comment add`, and `issue update --comment`
|
|
124
137
|
- resumable but non-idempotent batch writes: `issue create-batch`, which reports `error.details.createdIdentifiers` and `failedStep` on partial failure
|
|
125
138
|
|
|
126
|
-
when
|
|
139
|
+
when a write command completes part of its work and then fails, `error.details` uses a shared partial-success shape with `failureStage`, `retryable`, and `partialSuccess`. for example, `issue update --comment --json` sets `error.details.partialSuccess.issueUpdated = true` and includes a standalone retry command for `issue comment add`.
|
|
127
140
|
|
|
128
141
|
For stdin and pipeline behavior, see [docs/stdin-policy.md](docs/stdin-policy.md).
|
|
129
142
|
|
|
@@ -257,6 +270,8 @@ For short inline text, `-d/--description` is fine. For Markdown content, prefer
|
|
|
257
270
|
|
|
258
271
|
```bash
|
|
259
272
|
linear team list # list teams
|
|
273
|
+
linear team list --json # emit contract-stable team summaries
|
|
274
|
+
linear team view ENG --json # emit contract-stable team details
|
|
260
275
|
linear team id # print out the team id (e.g. for scripts)
|
|
261
276
|
linear team members # list team members
|
|
262
277
|
linear team members ENG --json # emit assignable candidates for a team
|
|
@@ -383,11 +398,24 @@ inspect workflow states directly, without going through issue mutations.
|
|
|
383
398
|
|
|
384
399
|
```bash
|
|
385
400
|
linear workflow-state list --team ENG
|
|
386
|
-
linear workflow-state list --json
|
|
401
|
+
linear workflow-state list --team ENG --json
|
|
387
402
|
linear workflow-state view <workflowStateId>
|
|
388
403
|
linear workflow-state view <workflowStateId> --json
|
|
389
404
|
```
|
|
390
405
|
|
|
406
|
+
### label commands
|
|
407
|
+
|
|
408
|
+
inspect issue labels and project labels directly with a primitive GraphQL-aligned surface.
|
|
409
|
+
|
|
410
|
+
```bash
|
|
411
|
+
linear label list
|
|
412
|
+
linear label list --team ENG
|
|
413
|
+
linear label list --json
|
|
414
|
+
linear project-label list
|
|
415
|
+
linear project-label list --include-archived
|
|
416
|
+
linear project-label list --json
|
|
417
|
+
```
|
|
418
|
+
|
|
391
419
|
### project label commands
|
|
392
420
|
|
|
393
421
|
inspect workspace project labels directly with a primitive GraphQL-aligned surface.
|
|
@@ -405,9 +433,9 @@ inspect workspace users directly with a primitive GraphQL-aligned surface.
|
|
|
405
433
|
```bash
|
|
406
434
|
linear user list
|
|
407
435
|
linear user list --all
|
|
408
|
-
linear user list --json
|
|
436
|
+
linear user list --json # emit contract-stable user summaries
|
|
409
437
|
linear user view <userId>
|
|
410
|
-
linear user view <userId> --json
|
|
438
|
+
linear user view <userId> --json # emit contract-stable user details
|
|
411
439
|
```
|
|
412
440
|
|
|
413
441
|
### other commands
|
package/npm-shrinkwrap.json
CHANGED
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"hasInstallScript": true,
|
|
24
24
|
"license": "MIT",
|
|
25
25
|
"name": "@kyaukyuai/linear-cli",
|
|
26
|
-
"version": "2.
|
|
26
|
+
"version": "2.12.0"
|
|
27
27
|
},
|
|
28
28
|
"node_modules/@isaacs/cliui": {
|
|
29
29
|
"engines": {
|
|
@@ -542,5 +542,5 @@
|
|
|
542
542
|
}
|
|
543
543
|
},
|
|
544
544
|
"requires": true,
|
|
545
|
-
"version": "2.
|
|
545
|
+
"version": "2.12.0"
|
|
546
546
|
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"artifactDownloadUrls": [
|
|
3
|
-
"https://github.com/kyaukyuai/linear-cli/releases/download/v2.
|
|
3
|
+
"https://github.com/kyaukyuai/linear-cli/releases/download/v2.12.0"
|
|
4
4
|
],
|
|
5
5
|
"bin": {
|
|
6
6
|
"linear": "run-linear.js"
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"detect-libc": "^2.1.2",
|
|
13
13
|
"rimraf": "^6.1.3"
|
|
14
14
|
},
|
|
15
|
-
"description": "
|
|
15
|
+
"description": "Agent-first Linear CLI with stable JSON contracts, dry-run previews, and workflow-safe automation",
|
|
16
16
|
"devDependencies": {
|
|
17
17
|
"prettier": "^3.8.1"
|
|
18
18
|
},
|
|
@@ -85,7 +85,7 @@
|
|
|
85
85
|
"zipExt": ".tar.xz"
|
|
86
86
|
}
|
|
87
87
|
},
|
|
88
|
-
"version": "2.
|
|
88
|
+
"version": "2.12.0",
|
|
89
89
|
"volta": {
|
|
90
90
|
"node": "18.14.1",
|
|
91
91
|
"npm": "9.5.0"
|