Repository navigation
Releases
Releases · hoja-work/hoja
v0.5.0 — smart account selection + WorkflowState fix
[0.5.0] — 2026-06-24
Added
- Intelligent account auto-selection by team key. Accounts can now declare
the team keys they own viateams = ["SWA", "ENG"](config), the new
clinear auth add --teams "SWA,ENG"flag, orclinear auth teams <name> "SWA,ENG".
When a command targets a team — through--team SWAor an identifier like
SWA-20— clinear picks the owning account (and its token) automatically,
with no--accountflag 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.teamsshown inclinear auth accountsoutput (human + JSON).
Fixed
- WorkflowState enum no longer crashes on undocumented state types. Teams
with a workflow state whosetypeis outside the six documented categories
(e.g."duplicate") previously brokeclinear team statesand
clinear issue statewith a Pydantic validation error. Thetypefield 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), fixedcomment add/comment editto positional body
(no--bodyflag), documented--accountand the new team auto-selection.
Tests
- New offline unit suite
tests/test_account_resolution.py(20 tests) covering
team_key_from_hint,resolve_accountprecedence,resolve_token, and the
WorkflowState smart-union.
v0.4.1 — Memory Board for Agents
Added
- Project memory board (
clinear memory) — persistent project-scoped memory
for agents. Every agent invocation should start withclinear 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 metadatamemory add --title "..." --body "..."— add a community entrymemory update <id>— edit an existing entrymemory remove <id>— delete an entrymemory heal --dry-run— remove stale community entries (older than
heal_after_days, default 30)- Storage:
.clinear/memory.yamlin 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 healcan 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 subcommandsclinear/cli.py— registermemory_appclinear/skill_content/overview.md— add memory board rules
v0.4.0 — Multi-account credentials + Auto-update
Added
- Multi-account credential support — manage multiple Linear accounts and switch
between them automatically per workspace or via explicit--accountflag.- New config schema:
[accounts.<name>]sections withtoken,token_env,
and auto-populatedorg_name. - Workspace-aware defaults: git repository roots can be mapped to specific
accounts viaconfig.toml [workspaces]or automatically detected. - New
clinear authsubcommands:auth accounts— list all accounts with default/workspace/current markersauth add <name> --token <token>— add a named account (optionally
verifies token against Linear API to populateorg_name)auth switch <name>— set global default accountauth remove <name>— remove an accountauth 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.defaulton first load. Single-account behavior is preserved
as fallback.
- New config schema:
clinear update— self-update command that checks PyPI for the latest
version and runs the appropriate upgrade command (pip install --upgradeor
pipx upgrade). Supports--dry-runand--yesflags. JSON output mode
supported for agent consumption.- New dependency:
tomli-w>=1.0(required for writing config updates from
auth add/switch/removecommands).
Changed
config.py— replaced singleAuthConfigwithAccountConfigand
AccountsConfigdict. Addedresolve_account()for workspace-aware
account selection andsave_config()for persisting config changes.cli_state.py— addedaccount_namefield toCLIStatefor tracking
the active account.cli.py— added--accountglobal flag andupdatecommand registration.init.py— updated config template to use multi-account schema.
v0.3.1
v0.3.0 — Agent skill + clinear-mcp server
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 withbash skills/install.sh. clinear-mcpMCP 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.
- 1 tool
- By design no mutation tools on the MCP server. Mutations happen via
theclinearCLI 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
LinearClienttoclinear/0.3.0.
Notes
- The MCP code is lazy-imported. Users who install
clinearwithout the
[mcp]extra are not affected; theclinear-mcpscript 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
Added
clinear init— scaffold the config file at~/.config/clinear/config.toml.clinear commentgroup:list,add,edit,delete.clinear labelgroup:list,create,delete.- Label resolution in
issue createandissue update— accept label names
(comma-separated) and resolve to UUIDs server-side per team. VERSIONfile at the repo root;__version__now reads from it.CHANGELOG.md.
Changed
cycle currentnow 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 searchresults 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.subscribersnow flatten the GraphQL
{nodes: [...]}connection wrapper automatically.searchIssuesno longer spreads theIssuefragment on
IssueSearchResult(different GraphQL type).- YAML formatter no longer collapses nested object indentation.
- Error exit codes propagate correctly through the typer entrypoint.