Skip to content

Releases

v0.5.0 — smart account selection + WorkflowState fix

Choose a tag to compare

@rinadelph rinadelph released this 24 Jun 22:17
9e8ccdb

[0.5.0] — 2026-06-24

Added

  • Intelligent account auto-selection by team key. Accounts can now declare
    the team keys they own via teams = ["SWA", "ENG"] (config), the new
    clinear auth add --teams "SWA,ENG" flag, or clinear auth teams <name> "SWA,ENG".
    When a command targets a team — through --team SWA or an identifier like
    SWA-20 — clinear picks the owning account (and its token) automatically,
    with no --account flag or env-var juggling. Resolution order is now:
    --account › team-key ownership › workspace mapping › default › first.
  • clinear auth teams <name> "<keys>" command to set/clear an account's team keys.
  • teams shown in clinear auth accounts output (human + JSON).

Fixed

  • WorkflowState enum no longer crashes on undocumented state types. Teams
    with a workflow state whose type is outside the six documented categories
    (e.g. "duplicate") previously broke clinear team states and
    clinear issue state with a Pydantic validation error. The type field is
    now a smart union (WorkflowStateType | str): known types become the enum,
    unknown types pass through as plain strings.

Changed

  • Agent skill (SKILL.md + skill_content/) rewritten to match reality:
    corrected the multi-account/auth section (removed the dangerous "rewrite to
    [auth]" advice), fixed comment add/comment edit to positional body
    (no --body flag), documented --account and the new team auto-selection.

Tests

  • New offline unit suite tests/test_account_resolution.py (20 tests) covering
    team_key_from_hint, resolve_account precedence, resolve_token, and the
    WorkflowState smart-union.

v0.4.1 — Memory Board for Agents

Choose a tag to compare

@rinadelph rinadelph released this 25 May 22:10

Added

  • Project memory board (clinear memory) — persistent project-scoped memory
    for agents. Every agent invocation should start with clinear memory remind
    to load forced behavioral rules and recent community learnings.
    • memory remind — print a formatted digest (forced rules + community context)
    • memory list — list all entries with metadata
    • memory add --title "..." --body "..." — add a community entry
    • memory update <id> — edit an existing entry
    • memory remove <id> — delete an entry
    • memory heal --dry-run — remove stale community entries (older than
      heal_after_days, default 30)
    • Storage: .clinear/memory.yaml in the git repo root (project-scoped)
    • Seeded with 5 forced rules: verify auth, search before create, use JSON
      for piping, dry-run on ambiguous mutations, read memory board first
    • Community entries auto-heal after 30 days; forced entries never expire
  • Cron-ready: clinear memory heal can be scheduled daily to keep the board
    clean and relevant.

Files Changed

  • clinear/memory_board.py — storage layer (YAML read/write, heal logic)
  • clinear/commands/memory.py — 6 subcommands
  • clinear/cli.py — register memory_app
  • clinear/skill_content/overview.md — add memory board rules

v0.4.0 — Multi-account credentials + Auto-update

Choose a tag to compare

@rinadelph rinadelph released this 25 May 21:38

Added

  • Multi-account credential support — manage multiple Linear accounts and switch
    between them automatically per workspace or via explicit --account flag.
    • New config schema: [accounts.<name>] sections with token, token_env,
      and auto-populated org_name.
    • Workspace-aware defaults: git repository roots can be mapped to specific
      accounts via config.toml [workspaces] or automatically detected.
    • New clinear auth subcommands:
      • auth accounts — list all accounts with default/workspace/current markers
      • auth add <name> --token <token> — add a named account (optionally
        verifies token against Linear API to populate org_name)
      • auth switch <name> — set global default account
      • auth remove <name> — remove an account
      • auth workspace — show current git repo workspace and mapped account
    • New global flag: --account <name> / -a <name> — one-off override for
      any subcommand.
    • Backward compatibility: existing [auth] sections auto-migrate to
      accounts.default on first load. Single-account behavior is preserved
      as fallback.
  • clinear update — self-update command that checks PyPI for the latest
    version and runs the appropriate upgrade command (pip install --upgrade or
    pipx upgrade). Supports --dry-run and --yes flags. JSON output mode
    supported for agent consumption.
  • New dependency: tomli-w>=1.0 (required for writing config updates from
    auth add/switch/remove commands).

Changed

  • config.py — replaced single AuthConfig with AccountConfig and
    AccountsConfig dict. Added resolve_account() for workspace-aware
    account selection and save_config() for persisting config changes.
  • cli_state.py — added account_name field to CLIState for tracking
    the active account.
  • cli.py — added --account global flag and update command registration.
  • init.py — updated config template to use multi-account schema.

v0.3.1

Choose a tag to compare

@rinadelph rinadelph released this 14 May 23:26
v0.3.1

v0.3.0 — Agent skill + clinear-mcp server

Choose a tag to compare

@rinadelph rinadelph released this 14 May 19:15

Added

  • Agent skill bundle at skills/clinear/ — a Swarm/Claude-style skill
    (SKILL.md frontmatter + references/*.md) that teaches AI agents both the
    mechanics of the CLI and the behavior of working through Linear (when to
    search before create, when to use --output json, how to chain commands,
    safety rules, anti-patterns). Install with bash skills/install.sh.
  • clinear-mcp MCP server — optional Model Context Protocol server
    exposing:
    • 1 tool clinear_guide(topic) returning structured teaching content
      (overview / commands / workflows / filters / output-formats
      / examples).
    • 7 read-only resources: clinear://me, clinear://issue/{id},
      clinear://team/{key}, clinear://project/{id_or_slug},
      clinear://cycle/current/{team_key}, clinear://issues/mine,
      clinear://issues/team/{team_key}.
    • 6 prompt templates: triage, daily_standup, create_from_error,
      hand_off, cycle_review, issue_investigate.
  • By design no mutation tools on the MCP server. Mutations happen via
    the clinear CLI in a shell — every tool/prompt response carries a
    reminder reinforcing this rule.
  • clinear/skill_content/ — canonical markdown source bundled inside the
    wheel via [tool.hatch.build.targets.wheel.force-include]. Single source
    of truth for both the skill bundle and the MCP server.
  • New optional dependency extra: pip install 'clinear[mcp]' pulls in
    mcp>=1.12.0. Core install stays untouched for users who don't need MCP.
  • New console script clinear-mcp (entry point of the MCP server).

Changed

  • Bumped version to 0.3.0.
  • Updated User-Agent string emitted by LinearClient to clinear/0.3.0.

Notes

  • The MCP code is lazy-imported. Users who install clinear without the
    [mcp] extra are not affected; the clinear-mcp script prints a friendly
    install hint and exits 2 if invoked without the dep.
  • ALL MCP server logging is routed to stderr to keep stdio JSON-RPC clean.

v0.2.0 — Initial public release

Choose a tag to compare

@rinadelph rinadelph released this 14 May 18:25

Added

  • clinear init — scaffold the config file at ~/.config/clinear/config.toml.
  • clinear comment group: list, add, edit, delete.
  • clinear label group: list, create, delete.
  • Label resolution in issue create and issue update — accept label names
    (comma-separated) and resolve to UUIDs server-side per team.
  • VERSION file at the repo root; __version__ now reads from it.
  • CHANGELOG.md.

Changed

  • cycle current now exits 0 with { "active_cycle": null } (JSON) or
    a friendly message (human) instead of crashing with NotFoundError when
    a team has no active cycle.
  • issue search results now render a full table with priority, state,
    assignee, and identifier columns.
  • Bumped version to 0.2.0.

Fixed

  • 4 issues from the v0.1 smoke test:
    • Issue.labels / Issue.subscribers now flatten the GraphQL
      {nodes: [...]} connection wrapper automatically.
    • searchIssues no longer spreads the Issue fragment on
      IssueSearchResult (different GraphQL type).
    • YAML formatter no longer collapses nested object indentation.
    • Error exit codes propagate correctly through the typer entrypoint.