Use linear-cli for all Linear.app operations. Do not use Linear MCP tools.
linear-cli i list- List issueslinear-cli i list -t TEAM- List team's issueslinear-cli i create "Title" -t TEAM- Create issuelinear-cli i get LIN-123- View issue detailslinear-cli i get LIN-1 LIN-2 LIN-3- Batch fetch multiple issueslinear-cli i get LIN-123 --output json- View as JSONlinear-cli i update LIN-123 -s Done- Update statuslinear-cli i start LIN-123 --checkout- Start work (assign + branch)linear-cli g pr LIN-123- Create GitHub PRlinear-cli g pr LIN-123 --draft- Create draft PRlinear-cli s issues "query"- Search issueslinear-cli context- Get current issue from git branchlinear-cli update- Check for and install the latest CLI releaselinear-cli cm list ISSUE_ID --output json- Get comments as JSONlinear-cli up fetch URL -f file.png- Download attachments
--output json- Machine-readable output--compact- Compact JSON output (no pretty formatting)--fields a,b,c- Limit JSON output to selected fields (supports dot paths)--sort field- Sort JSON array output by field (default: identifier/id)--order asc|desc- Sort order for JSON array output--quietor-q- Suppress decorative output--id-only- Output only created/updated ID--api-key KEY- Override API key for this invocation--dry-run- Preview without executing (create)-d -- Read description from stdin
- 0 = Success
- 1 = General error
- 2 = Not found
- 3 = Auth error
- 4 = Rate limited
- Set
LINEAR_CLI_OUTPUT=jsonto default all output to JSON - Errors with
--output jsonreturn{"error": true, "message": "...", "code": N, "details": {...}, "retry_after": N} linear-cli i create/updateaccept--dataJSON input (use-for stdin)linear-cli agentprints agent-focused capabilities and exampleslinear-cli update --checkreports current vs latest release without installing- JSON samples live in
docs/json/ - Use
--helpon any command for full options
| symptom | evidence | root cause | wrong instinct | corrected default behavior | where the lesson belongs next |
|---|---|---|---|---|---|
On macOS, a successful table-output command can leave the shell acting raw-ish until reset or stty sane. |
stty -a after the command may show pendin; piping through an external pager can avoid the symptom. |
Auto-pager cleanup depended on a guard Drop, but async_main called std::process::exit, which skips destructors entirely. The pager path also redirected stdout with dup2 without restoring the original fd on teardown. |
Tweaking LESS, PAGER, or termios flags first. |
When touching pager code, preserve a saved stdout fd, restore it before pager shutdown, and return an exit code to main instead of calling std::process::exit while cleanup guards are still in scope. |
Keep this note in AGENTS.md and add/keep a Unix regression test around stdout redirection in src/main.rs. |
A published GitHub release exists, but cargo binstall or release-asset based installs cannot find binaries. |
gh release view shows a tag but zero assets; recent Release workflow runs fail immediately. |
The release workflow can be healthy in-repo but still never upload assets if the GitHub Actions account is locked externally, such as a billing lock. | Debugging the packaging script first or assuming cargo-binstall metadata is wrong. |
Check the latest Release workflow run and GitHub account status before changing updater or packaging code; keep a Cargo install fallback in the CLI updater. |
Keep this note in AGENTS.md and re-verify release assets on the next patch release. |