Skip to content

Releases: nesszer/linear-cli

v0.2.7 - Secure API Key Storage

Choose a tag to compare

@Finesssee Finesssee released this 05 Feb 10:02

New Features

Secure API Key Storage (Optional Feature)

Store your Linear API keys in your operating system's secure credential storage instead of plaintext config files:

  • macOS: Keychain
  • Windows: Credential Manager
  • Linux: Secret Service (requires D-Bus and a keyring daemon)

Usage

Enable the feature when building:

cargo install linear-cli --features secure-storage

Store a key securely:

linear-cli auth login --secure

Migrate existing keys from config to keyring:

linear-cli auth migrate

Check storage status:

linear-cli auth status

Priority Order

API keys are resolved in this order:

  1. LINEAR_API_KEY environment variable
  2. OS keyring (if secure-storage feature enabled)
  3. Config file (~/.config/linear-cli/config.toml)

Notes

  • Feature is opt-in to avoid adding keyring dependencies for users who don't need it
  • Graceful fallback to config file if keyring is unavailable
  • Profile-aware: each workspace has its own keyring entry
  • auth logout removes keys from both keyring and config

v0.2.6 - Code Quality and Performance

Choose a tag to compare

@Finesssee Finesssee released this 05 Feb 09:38

Refactoring

  • Generic ID resolver: Extracted common logic from resolve_team_id, resolve_user_id, and resolve_label_id into a reusable resolve_id helper with ResolverConfig. Reduces code by ~100 lines while maintaining the same functionality.

Performance

  • Streaming NDJSON output: linear-cli i list --output ndjson now streams results as they arrive instead of buffering all results in memory. This is memory-efficient for large result sets (1000+ issues).

Full Changelog

v0.2.5...v0.2.6

v0.2.5 - Large Organization Support

Choose a tag to compare

@Finesssee Finesssee released this 05 Feb 09:32

Fixes

  • Pagination for ID resolution: resolve_team_id, resolve_user_id, and resolve_label_id now paginate through all results instead of using a hardcoded first: 500 limit. This fixes "not found" errors for organizations with more than 500 teams, users, or labels.

Full Changelog

v0.2.4...v0.2.5

v0.2.4 - Security and Reliability

Choose a tag to compare

@Finesssee Finesssee released this 05 Feb 09:28

Security

  • Secure file permissions: Config and cache files are now created with 0600 permissions on Unix systems, preventing other users from reading API keys

Fixes

  • Concurrency limit: Batch issue fetching now limits concurrent requests to 10, preventing socket exhaustion and rate limiting when fetching many issues
  • Consolidated error handling: HTTP error mapping logic extracted into helper function, reducing code duplication

Refactoring

  • Simplified jitter calculation using cleaner range syntax

Full Changelog

v0.2.3...v0.2.4

v0.2.3 - Reliability and Performance

Choose a tag to compare

@Finesssee Finesssee released this 05 Feb 09:09

Features

HTTP Client Hardening

  • HTTP timeouts: 30s request timeout, 10s connect timeout
  • User-Agent header: linear-cli/{version} for better debugging
  • Mutation retries: Automatic retry with exponential backoff (Linear API is idempotent)
  • Jittered backoff: ±25% jitter prevents thundering herd on rate limits

Cache Improvements

  • Profile-scoped cache: Each workspace profile has isolated cache
  • Atomic writes: Write to temp file, sync, rename - prevents corruption

Output Quality

  • Numeric sorting: Numbers sort correctly (10 > 9, not "10" < "9")
  • Date sorting: RFC3339 dates sort by timestamp
  • RFC 4180 CSV: Proper escaping of quotes, commas, newlines

Performance

  • Streaming pagination: Memory-efficient exports for 1000+ issues

Developer Experience

  • Typed structs: src/types.rs with serde structs for gradual typed API adoption

Dependencies Added

  • rand = "0.8" - jittered exponential backoff
  • csv = "1" - RFC 4180 compliant CSV exports

Full Changelog

v0.2.2...v0.2.3

v0.2.2

Choose a tag to compare

@github-actions github-actions released this 05 Feb 08:34

Full Changelog: v0.2.1...v0.2.2

v0.2.1

Choose a tag to compare

@Finesssee Finesssee released this 30 Jan 13:37

What's Changed

Bug Fixes

  • fix(error): Show GraphQL error details in CLI output - Previously errors just showed "GraphQL error", now displays actual error messages (#7)
  • feat(issues): Add --labels, --due, --estimate flags to update command for feature parity with create (#7)

CI/CD

  • ci: Add automated crates.io publishing to release workflow (#8)

Features

  • Add date parsing utilities (today, tomorrow, +3d, +1w, YYYY-MM-DD)
  • Add new command modules: export, favorites, history, initiatives, metrics, relations, roadmaps, triage, watch

Fixes

  • Closes #7 - Unable to add multiple labels via CLI
  • Closes #8 - Crates.io now updated automatically on release

Full Changelog: v0.2.0...v0.2.1

v0.2.0

Choose a tag to compare

@Finesssee Finesssee released this 16 Jan 13:38

What's New in v0.2.0

This is a major CLI protocol upgrade with authentication, pagination, and enhanced output controls.

Authentication & Profiles

  • auth login: Interactive API key setup with validation
  • auth logout: Remove stored credentials
  • auth status: Show current authentication state
  • doctor: Diagnostic command for troubleshooting setup
  • Profile-aware config: Support multiple Linear workspaces

Pagination Controls

  • --limit N: Limit results to N items
  • --after CURSOR: Fetch results after cursor
  • --before CURSOR: Fetch results before cursor
  • --page-size N: Batch size for fetching
  • --all: Exhaustive fetching (all pages)

Cache Controls

  • --cache-ttl SECONDS: Set cache TTL
  • --no-cache: Bypass cache entirely

Output Enhancements

  • NDJSON output: --ndjson for streaming/newline-delimited JSON
  • Template output: --template "{{.identifier}}: {{.title}}"
  • --fail-on-empty: Exit non-zero if no results (for scripting)
  • Schema version: --schema prints output schema version
  • Improved error JSON: Includes details and retry_after fields

Filter Plumbing

  • Filters integrated across all list/search commands
  • Consistent filter syntax for issues, projects, documents, etc.

New Files

File Purpose
src/pagination.rs Pagination utilities
src/commands/auth.rs Authentication commands
src/commands/doctor.rs Diagnostic command
docs/json/schema.json Versioned output schema

Documentation

  • Updated README with auth, pagination, and filter examples
  • Added JSON schema documentation
  • Updated error.json format

Full Changelog: v0.1.9...v0.2.0

v0.1.9

Choose a tag to compare

@Finesssee Finesssee released this 16 Jan 11:24

What's New

Agent Harness Features

  • linear agent command for quick agent guidance and examples
  • context --id-only with JSON output support
  • Consistent JSON output with --compact, --fields, --sort, --order
  • Structured JSON errors with details and retry_after fields
  • LINEAR_CLI_OUTPUT env var for default JSON mode + --api-key override
  • --data JSON input for issue create/update from stdin
  • --dry-run for issue/project/document updates
  • JSON sample files in docs/json/ for agent developers

CLI UX Improvements

  • Color control: --color / --no-color flags
  • Table width: --width N to limit column widths
  • Disable truncation: --no-truncate for full content
  • common/tasks command for quick CLI examples
  • Interactive mode: --team preselect and respects width

Batch & Stdin Support

  • Multi-ID support: issues, projects, teams, documents, statuses, comments
  • Stdin input via - for IDs and content
  • Batch JSON outputs for multi-get operations

Table Sorting

  • --sort/--order honored for major list commands
  • Sync summary can sort by name, path, or type

Documentation

  • Updated README, AGENTS.md, CLAUDE.md, docs/examples.md
  • Added docs/json/ with sample JSON outputs

Full Changelog: v0.1.8...v0.1.9

v0.1.8

Choose a tag to compare

@Finesssee Finesssee released this 16 Jan 10:50

What's New

Agent-Focused Output & Errors

  • Structured JSON errors with error, code, message, and details fields
  • Rate-limit metadata with retry_after for 429 responses
  • JSON formatting utilities: --compact, --fields, --sort, --order
  • Environment variable: LINEAR_CLI_OUTPUT=json for default JSON mode
  • Per-invocation API key: --api-key KEY to override credentials

CLI UX Controls

  • Color control: --color / --no-color flags
  • Table width: --width N to limit column widths
  • Disable truncation: --no-truncate for full content
  • Team preselect: --team flag for interactive command

Batch & IO Improvements

  • Multiple IDs: projects get, teams get accept multiple IDs
  • Stdin input: - for descriptions/IDs from pipe
  • JSON data input: --data - for issue create/update from stdin

Help & Common Tasks

  • common command (alias: tasks) with quick examples
  • Top-level help shows common flags

Documentation

  • Updated AGENTS.md, CLAUDE.md, docs/ai-agents.md, docs/examples.md
  • Refreshed README.md with new options and cleaned comparison table

Fixes

  • Resolved clippy warnings for CI
  • Fixed stray Unicode glyphs in comments, sync, git modules

Full Changelog: v0.1.7...v0.1.8