Releases: VidGuiCode/plane-cli
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
```
v0.2.3
Bug fixes
--fieldsproducing{}empty objects —issue listandissue getwith--fieldsnow accept both the normalized camelCase names and raw Plane API field names as aliases. Previously, passing names likestate_name,sequence_id,name, orupdated_atproduced empty objects{}because none matched the internal normalized keys.
Both of these now work:
# normalized names
plane issue list --json --fields id,sequence,title,state,updatedAt
# raw API names (same result)
plane issue list --json --fields id,sequence_id,name,state_name,updated_atFull alias table:
| Normalized | Also accepts |
|---|---|
title |
name |
sequence |
sequence_id |
state |
state_name, state_id |
projectId |
project_id |
updatedAt |
updated_at |
createdAt |
created_at |
dueDate |
due_date |
startDate |
start_date |
labels |
label_ids |
- Added
projectIdfield — now available in--fieldsoutput (also accessible asproject_id)
Install
npm install -g https://github.com/VidGuiCode/plane-cli/releases/download/v0.2.3/plane-cli-0.2.3.tgzOr upgrade in-place:
plane upgradev0.2.2
Bug fixes
Follow-up to 0.2.1 — member name/email still blank and --assignee still failing.
Root cause: The most common Plane API layout returns workspace members with display_name and email as top-level fields, and member as a plain UUID string (not an object). The 0.2.1 fix only handled two other formats (double-underscore annotations and a nested member object), missing this third shape entirely.
The three member formats now handled:
| Format | Fields | Plane versions |
|---|---|---|
| Top-level flat | display_name, email, member: "uuid" |
Most current versions |
| Double-underscore | member__display_name, member__email |
Some older versions |
| Nested object | member: { id, display_name, email } |
Some versions |
getMemberId also updated: when member is a string UUID, that string is returned as the user UUID for assignee filtering (instead of falling back to the membership record id).
Install
npm install -g https://github.com/VidGuiCode/plane-cli/releases/download/v0.2.2/plane-cli-0.2.2.tgzOr upgrade in-place:
plane upgrade