Releases: VidGuiCode/plane-cli
Release list
v0.4.4
Closes the two verification items left open by v0.4.3 (both implemented offline against documented field names, never confirmed live) plus one agent-facing discovery nicety. See pages-support-root-cause.md and production-use-gap-report.md.
Polish
discoveradvertises Plane Pages (un)support —discover contextanddiscover issue-inputsnow include an additivecapabilities.pagesfield ({ supported, reason }) so AI agents can skip the Pages surface instead of probing and hitting a 404. The probe is a lightweight, non-fatal GET of the project-pages endpoint: a 404 reportssupported: false, a success reportssupported: true, and any probe error (or no project in context) reportssupported: null— the probe can never makediscoverfail, and--jsonoutput stays pure JSON.
Verification
- Module
leadwrite key confirmed live — verified against a real work-items instance thatmodule update/create --leadmust send body keylead(notlead_id):PATCH { lead }persists on read-back, whilePATCH { lead_id }is silently ignored. The v0.4.3 mapping was already correct; the code comment is updated from "unverified offline" to live-confirmed. No behavior change. - Member-role field shape confirmed live — the token-authenticated workspace
members/endpoint returns role as a top-levelrolefield (no nested/annotated shape on this instance), which the v0.4.3getMemberRolehelper already reads correctly. No behavior change. (Note: the endpoint reports the same role value for every member on that instance — an upstream public-API data quirk, not a field-mapping bug the CLI can remap.)
Install / upgrade
npm install -g https://github.com/VidGuiCode/plane-cli/releases/download/v0.4.4/plane-cli-0.4.4.tgz
Or if already installed: plane upgrade.
v0.4.3
Clears the actionable items from the 2026-07-10 production-use gap report. See production-use-gap-report.md.
Bug fixes
- Ambiguous sequence refs no longer resolve to the wrong issue —
findIssueBySeqpicked the first of any issues sharing asequence_id(real in migrated/imported projects) and mutated it while reporting success. It now aborts on duplicates, listing every candidate by UUID + state + title, and requires an unambiguous UUID. P1 / data-integrity. members listno longer shows every member as "Viewer" — role was read as a raw top-level field while name/email tolerate three API shapes. Added agetMemberRolehelper (nestedmember.role→ annotatedmember__role→ top-levelrole) and render-when role is genuinely absent.- Unknown
--fieldsnames no longer fail silently —issue get/list/minenow emit a stderr warning naming unrecognized fields and listing the valid normalized names; stdout stays pure JSON.
Features
plane module update/plane cycle update— update a module (--name,--description,--status,--start→start_date,--target→target_date,--lead) or cycle (--name,--description,--start→start_date,--end→end_date) in place. The same property options were added to module/cyclecreateandensure, so structures can be born fully specified. Bothupdatecommands require at least one option and support--dry-run/--json.--module/--cycleonissue create— join a module/cycle at creation. Membership is resolved up-front and POSTed after create;--dry-runpreviews the create plus each membership call, and a membership failure after the issue exists reports partial success with a non-zero exit and the created UUID.
Polish
- Tracking columns on
issue list/issue mine— added--columns <list>(id, title, state, priority, due, start, assignee, labels, uuid, created, updated); the default table now includesDUE. Unknown column names error before any network call.
Confirmations
- Single-issue mutations (
issue update/close/reopen/delete,module add/remove,cycle add/remove) now print the resolved issue UUID, so a wrong target is visible even when resolution is unambiguous.
Testing
- Added resolver tests for duplicate-sequence resolution,
getMemberRoleacross all member shapes, and unknown-field detection; command tests for the--fieldsstderr warning,--columns,issue create --module/--cycledry-run, andmodule/cycle updatedry-run.
Install / upgrade
npm install -g https://github.com/VidGuiCode/plane-cli/releases/download/v0.4.3/plane-cli-0.4.3.tgz
Or if already installed: plane upgrade.
v0.4.1
Bug fixes
- Fixed cycle issue membership commands to use Plane's
cycle-issuesendpoint forcycle current,cycle issues,cycle add, andcycle remove. - Improved the 404 hint for cycle membership endpoint failures so a resolved cycle is not reported as missing.
Testing
- Added command tests for cycle issue listing and removal through the
cycle-issuesendpoint.
v0.4.0
Features
- Added
plane module ensure <name>andplane cycle ensure <name>for idempotent automation workflows. - Added bulk module and cycle assignment with comma-separated issue refs, e.g.
plane module add ROADMAP-157,158,159 "Website Deployment". - Added
plane page search <query>and name-basedplane page get <page>lookup. - Updated
discover issue-inputsto advertise comma-separated issue refs, ensure commands, and bulk assignment commands.
Reliability
- Added runtime round-trip assertions for
issue updateso the CLI exits non-zero if Plane silently ignores requested fields. - Fixed
cycle createto includeproject_idin the request body. - Improved page endpoint compatibility errors when a Plane instance/API version returns 404 for project pages.
Testing
- Added command-level tests for cycle/module ensure, bulk assignment, and issue update round-trip validation.
v0.3.2 — fix --due silent no-op on issue update
Bug fixes
- Fixed
--dueflag silently dropped onissue create,issue update, andissue move— the request body sentdue_date: "..."but Plane's API expectstarget_dateand silently ignored the wrong key, leaving the due date unset despite the CLI printingUpdatedand exiting zero. Same class of bug as the v0.3.1--labelfix. - Fixed
issue getnever displaying the due date — theDue:line readissue.due_date(the wrong field) so it was always skipped. - Fixed
--jsonoutput fielddueDatealways returningnull— the normalizer was reading the wrong source field.
Testing
- Added
tests/smoke/due-date-roundtrip.test.ts— live regression test gated onPLANE_CLI_LIVE_TESTS=1+PLANE_TEST_PROJECT, round-trips--dueon create, update, and clear (--due none), verifies both rawtarget_dateand normalizeddueDatealias. - Added
tests/smoke/issue-update-audit.test.ts— silent-drop audit for otherissue updateflags:--priority,--description,--assignee me,--state(opt-in),--parent(opt-in). Live run against the reporter's instance found no other silent drops.
Install
npm install -g https://github.com/VidGuiCode/plane-cli/releases/download/v0.3.2/plane-cli-0.3.2.tgzv0.3.1 — fix --label silent drop, add --label-id
Bug fixes
--labelflag silently dropped onissue create,issue update,label add,label remove— the request body was sendinglabel_ids: [...]but Plane's v1 API silently ignores that key and expectslabels: [...]. Issues were created with no labels attached despite the CLI exiting zero. All four call sites now send the correct field name. (fixes #19)
Features
--label-id <uuid>onissue createandissue update— alternative to--label <name>that skips name resolution (no extraGET /labels/call) and validates the UUID format up front.
Polish
--labelhelp text now says case-insensitive, sosecurity,Security, andSECURITYare all accepted.discover issue-inputsnow listslabels(notlabel_ids) as an optional field, matching the actual API payload key.- New live round-trip integration test (
tests/smoke/label-roundtrip.test.ts) gated onPLANE_CLI_LIVE_TESTS=1— round-trips--labelagainst a real workspace and asserts the labels array is non-empty, preventing this exact silent regression from returning.
Install / upgrade
npm install -g github:VidGuiCode/plane-cli
Or if already installed: plane upgrade.
v0.3.0
What's new
plane project create
Create projects from the CLI without leaving the terminal:
```
plane project create "My Project" --identifier PROJ --network 2
```
Prompts to set as active project in interactive mode.
plane project update
Update the active project's name, description, or network visibility:
```
plane project update --name "Renamed" --description "New description"
```
plane issue move
Move (or copy) an issue to a different project. State is mapped by group (e.g. started → started):
```
plane issue move PROJ-42 --to-project OTHER
plane issue move PROJ-42 --to-project OTHER --copy # skip delete
```
Bulk issue update
Update multiple issues in one call using comma-separated refs:
```
plane issue update PROJ-1,2,3 --state Done
plane issue update PROJ-5,PROJ-6 --priority high --assignee me
```
All refs are resolved before any API calls are sent (fail-fast). Patches run in parallel.
Multi-filter on issue list / issue mine
--state, --priority, and --assignee now accept comma-separated values:
```
plane issue list --state Todo,InProgress
plane issue list --assignee me,alice --priority high,urgent
```
Prettier formatting fixes
Applied consistent formatting across cycle.ts, issue.ts, project.ts, html.ts, and resolvers.ts.
Install / upgrade
```
npm install -g github:VidGuiCode/plane-cli
```
v0.2.6
What's new
Bug fixes
- Fixed
issue createandpage createhanging in non-interactive mode when optional fields (description, content) have no default (fixes #8)
Features
--namealias for--titleonissue update— matches the Plane API field name (fixes #9)viewalias forissue getandpage get—plane issue view PROJ-42now works (fixes #10)stripHtml()preserves paragraph breaks, line breaks, and list structure instead of collapsing to a single line (fixes #11)- Richer
cycleandmoduleoutput: progress counters (totalIssues,completedIssues),module listshows NAME/STATUS/START/TARGET columns, anddiscover cycles/discover modulesexpose progress fields (fixes #12)
Install
npm install -g https://github.com/VidGuiCode/plane-cli/releases/download/v0.2.6/plane-cli-0.2.6.tgzOr upgrade from an existing install:
plane upgradev0.2.5
What's new
Features
--assignee me— resolves to the current authenticated user onissue list,create, andupdateplane issue mine— shortcut for listing issues assigned to youplane cycle current— shows the active cycle and its issues--updated-since <date>— filterissue listby last-updated date (YYYY-MM-DD)- Post-pack release verification —
npm run verify-packsmoke tests the.tgzbefore publishing
Output consistency
issue list --json,issue get --json,cycle issues --json, andmodule issues --jsonnow return normalized camelCase fields (state name, identifier string, label names) instead of raw API shapes
Error messages
- API errors now include actionable hints (401→check token, 404→verify identifiers, 429→rate limited)
- Resolver errors include more context (e.g., which workspace was searched)
Install
npm install -g https://github.com/VidGuiCode/plane-cli/releases/download/v0.2.5/plane-cli-0.2.5.tgzv0.2.4
Bug fixes
- Fixed `plane issue list --fields` and `plane issue get --fields` returning `[{}, {}, ...]` for every issue — raw Plane API fields (`id`, `name`, `priority`, `assignees`, `sequence_id`, `updated_at`, etc.) are now directly accessible by their exact API name, not just via a curated alias map
- Fixed `--fields` failing when the shell (e.g. PowerShell) splits a comma-separated list like `id,name,title` into separate arguments
Install
```bash
npm install -g https://github.com/VidGuiCode/plane-cli/releases/download/v0.2.4/plane-cli-0.2.4.tgz
```
Or upgrade from within the CLI:
```bash
plane upgrade
```