Skip to content

Releases: alexgrais/lin

Release list

v0.1.1

Choose a tag to compare

@github-actions github-actions released this 20 Jul 19:18

Two fixes, both found by driving a real QA card end to end against a production
Linear workspace. Neither was reachable from the test suite.

--fields no longer fails silently

An unknown field name was dropped without a word, so this returned exit 0 and
no milestone:

lin issue get ENG-123 --fields identifier,milestone   # the real key is projectMilestone

Nothing distinguished that from a genuinely unset value, which invites a caller
to conclude the milestone was empty when it had simply mistyped the field. Since
--fields is the flag agents shape their context with, a silent miss is worse
than a loud one. It now fails with exit 65 and lists what was available:

lin: unknown --fields milestone (available: …, projectMilestone, …): validation error

Validation runs against the union of a page's keys, so a field that is null on
the first record is still accepted, and an empty page is not validated at all
since it cannot describe its own shape.

Teams resolve by name, not only by key

--team KTM returned exit 66 on create while --project "API Experience"
worked, making teams the one reference in the CLI that refused a human value.

List commands had a nastier version of the same bug: they filter server-side to
save a round-trip and matched on the key alone, so lin issue list --team KTM
returned an empty page rather than an error - a wrong answer wearing the shape
of an ordinary empty result. That affected issue, cycle, state, label
and project listings.

Both paths now accept a key or a name. The key is still tried first, so a value
that is one team's key can never resolve to another team's name, and listing
still costs no extra round-trip.

Install

brew install alexgrais/tap/lincli      # or brew upgrade lincli
go install github.com/alexgrais/lin/cmd/lin@v0.1.1

Full changelog: CHANGELOG.md

v0.1.0

Choose a tag to compare

@github-actions github-actions released this 20 Jul 13:26

The first release of lin - the Linear CLI for humans and AI agents. One fast
native binary over the Linear GraphQL API, JSON-first and headless-friendly.

Docs: https://lin.alexgrais.dev

Added

  • Full-spectrum command surface (MCP parity + staged waves): issue (CRUD, relations,
    sub-issues, archive lifecycle), comment, label, team, state, project (+ labels),
    milestone, initiative (+ labels, project linking), cycle, user, status-update,
    document, attachment (3-step signed upload dance), release / release-note /
    release-pipeline, customer / customer-need, whoami, version, describe.
  • Agent-friendly contract: JSON-first output (--output json|ndjson|table),
    --fields masking, --dry-run on every mutation, raw --json payloads,
    cursor pagination (--limit/--cursor/--all), sysexits exit codes,
    lin describe runtime introspection, input hardening, --confirm on deletes.
  • lin auth with named profiles (login, status, logout, switch), stored in
    ~/.config/lin/config.json at mode 0600 and selected with --profile. Secrets
    are read from stdin, a hidden TTY prompt, or --from-env, never from a flag, and
    are validated against the API before being written.
  • Retrying GraphQL transport (Authorization without Bearer, backoff + jitter,
    Retry-After, mutation-safe retry policy, null pruning to avoid field clears).
  • Vendored Linear GraphQL schema with genqlient codegen and refresh tool.
  • Documentation site generated from lin describe, so the command reference
    cannot drift from the binary.
  • Token benchmark against the Linear MCP under bench/: ~8,300 tokens for a
    40-turn agent session, against ~69,800 through a lazy MCP client. Methodology,
    raw payloads, and scripts are reproducible.

Install

go install github.com/alexgrais/lin/cmd/lin@v0.1.0

Or download a binary for your platform from the assets below. Verify with
checksums.txt.

A Homebrew tap is not published yet; it will land as alexgrais/tap/lincli.

Getting started

lin auth login          # store a Linear API key, validated before saving
lin issue list --team ENG --fields identifier,title,state
lin issue create --team ENG --title "Fix login" --labels bug --assignee me