CLI · CommandsIssues

Issues

Work with your space's items, or a repository's GitHub issues, from the terminal.

eqs issue is gh issue for eQuantic Space, with the same subcommands and flags. Without a flag it works on the items of your space. With --gh it works on a GitHub repository's issues, through your workspace's GitHub connection, so your machine needs no GitHub token.

Two modes

Without a flagWith --gh
Works onThe items of a spaceThe issues of a GitHub repository
Addressed byAn identifier, TASK-42, in either caseA number, 42 or #42, or the issue's URL
Where--space <slug>, or the active space (eqs spaces use)-R, --repo [github.com/]<owner>/<name>, or this clone's GitHub remote, origin first
Permissionsitem.*issue.read, issue.write, issue.delete
An issue's URL works without --gh: eqs issue view https://github.com/octo/app/issues/42 reads it from GitHub.

Commands

eqs issue list

Lists the open items of a space, pinned first, or a repository's open issues. Also ls.

-s, --state <state>open (default), closed or all
-a, --assignee <who>Assigned to @me, an email, an id, or a GitHub login
-l, --label <name>Carrying every one of these labels
--type <type>Of this type
-S, --search <words>With these words (on GitHub, its search syntax)
--mention <who>Mentioning @me, a member or a login
-L, --limit <n>How many (default 30)
-w, --webOpen the list in the browser instead
--space <slug>, --list <name>eQuantic: the space, and only this list
-A, --author <login>, --app <slug>GitHub: opened by this login, or by this GitHub App
-m, --milestone <title>GitHub: in this milestone
shell
eqs issue ls -a @me -l api,ui
eqs issue view <ref>

Shows an item or an issue: its type, stage or state, lock, pin, assignees, labels and description, and what it relates to: its parent, its sub-items or sub-issues, what blocks it and what it blocks.

-c, --commentsWith its comments
-w, --webOpen it in the browser instead: an item opens at /w/<workspace>/items/<identifier>, in its list wherever it moved. A browser that is in another workspace is offered the switch first
shell
eqs issue view 650 --gh -c
eqs issue create

Creates an item, of the task type, in the space's only list and in that list's first stage unless told otherwise, or an issue. Also new.

-t, --title <title>Its title (asked for in a terminal)
-b, --body <text>, -F, --body-file <path>Its description, or a file holding it (- reads standard input)
-e, --editorWrite the title (first line) and the description in your editor
-a, --assignee <who>, -l, --label <name>, --type <type>Its assignees, labels and type
--parent <ref>The item or issue it belongs under
--blocked-by <refs>, --blocking <refs>What blocks it, and what it blocks
--space <slug>, --list <name>, --priority <p>, --due <YYYY-MM-DD>eQuantic: its space, list, priority and due day
-m, --milestone <title>GitHub: its milestone
-w, --webOpen the browser to create it there
shell
eqs issue new --gh -t "Flaky test" -l bug --parent 652
eqs issue edit <refs...>

Edits one or more items at once, or several issues of one repository.

-t, --title <title>, -b, --body <text>, -F, --body-file <path>A new title or description
--add-assignee, --remove-assignee <who>Assign or unassign
--add-label, --remove-label <name>Add or remove labels
--type <type>Another type: an item keeps its identifier
--parent <ref>, --remove-parentMove it under another one, or out from under its parent
--add-sub-issue, --remove-sub-issue <refs>Move these under it, or out
--add-blocked-by, --remove-blocked-by <refs>These block it, or no longer do
--add-blocking, --remove-blocking <refs>It blocks these, or no longer does
--stage <name>, --priority <p>, --due <YYYY-MM-DD>eQuantic: a stage of its list, the priority, the due day (none clears the last two)
-m, --milestone <title>, --remove-milestone, --remove-typeGitHub: set the milestone, or take the milestone or the type off
shell
eqs issue edit TASK-41 TASK-42 --add-label api
eqs issue close <ref>

Closes an item, into its list's done stage, or an issue, with a reason. One that is closed already is left as it is.

-r, --reason <reason>completed (default), "not planned" or duplicate
--duplicate-of <ref>Close it as a duplicate of this one
-c, --comment <text>Leave this comment first
shell
eqs issue close TASK-42 --duplicate-of TASK-41
eqs issue reopen <ref>

Reopens an item, back into its list's first to-do stage, or an issue. One that is open already is left as it is.

-c, --comment <text>Leave this comment first
shell
eqs issue reopen 42 --gh
eqs issue delete <ref>

Deletes an item, with everything under it, or an issue, once you type its identifier or number.

--yesSkip the confirmation
shell
eqs issue delete TASK-42
eqs issue comment <ref>

Comments on an item or an issue, or edits or deletes your last comment there.

-b, --body <text>, -F, --body-file <path>, -e, --editorThe comment, from the command line, a file or your editor
--edit-lastReplace the text of your last comment. With --create-if-none, comment when you have none
--delete-lastDelete your last comment. --yes skips the confirmation
-w, --webOpen it in the browser to comment there
shell
eqs issue comment TASK-42 --edit-last -b "On it, tomorrow"
eqs issue status

Your open items, or your open issues in a repository: assigned to you, mentioning you, opened by you.

shell
eqs issue status --gh
eqs issue transfer <ref> <destination>

Moves an item, with its sub-items, to another list (<space>/<list>), or an issue to another repository of the same owner (<owner>/<name>). An item moved to another space leaves its labels behind.

shell
eqs issue transfer TASK-42 platform/Backlog
eqs issue lock <ref>

Locks the conversation: from then on only those who may edit it comment. eqs issue unlock <ref> unlocks it.

-r, --reason <reason>off_topic, resolved, spam or too_heated
shell
eqs issue lock TASK-42 -r resolved
eqs issue pin <ref>

Pins an item to the top of its space, first in every view of its list, or an issue to its repository. Three at most each, as on GitHub. eqs issue unpin <ref> takes it off.

shell
eqs issue pin TASK-42
eqs issue develop <ref>

Makes a branch for an item, in a connected repository, or for an issue, linked to it on GitHub. With --list, lists its branches instead.

-n, --name <branch>Its name (default: the identifier or number, then the title)
-b, --base <branch>Where it starts (default: the repository's default branch)
-c, --checkoutFetch it and check it out in this clone
--worktree <path>Check it out in a new worktree at this path instead
-l, --listList the branches, and whether each is still there
--branch-repo <owner/name>The repository for the branch (GitHub: a fork)
shell
eqs issue develop TASK-42 -c
Every subcommand also takes --gh, -R, --repo and --json [fields], which prints the raw answer, or only the fields named, separated by commas. A field the answer does not have is refused before anything is done, with the list of those it has. Options that take several values take them repeated or separated by commas.

Permissions

Each subcommand needs the action below.

SubcommandWithout a flagWith --gh
list, view, statusitem.readissue.read
createitem.create (item.update for its relations)issue.write
edit, close, reopen, lock, unlock, pin, unpinitem.updateissue.write
transferitem.update (and item.create in another space)issue.write
commentitem.comment (item.update on a locked item)issue.write
deleteitem.deleteissue.delete
developitem.update and scm.write (item.read for --list)issue.write (issue.read for --list)

Of the built-in roles, Reader reads and comments: it holds item.read, item.comment and issue.read. Contributor also creates and changes: every item.* action, plus issue.read and issue.write. Only Owner holds issue.delete.

An item can point at one in another space: the one it duplicates, what blocks it, what it blocks. You are told of that one only when you may read items in its space. Otherwise view leaves it out, and close --duplicate-of answers that there is no such item.

On GitHub

Your workspace's GitHub connection does the work, so GitHub shows the connection's App as the author of what you create and comment, and eQuantic Space logs who asked. @me is your GitHub login, which it knows when you signed in with GitHub. Otherwise, write your login instead. status --gh needs that sign-in.

When GitHub refuses, the CLI says why: a refusal names the permission the App lacks, and a rate limit says when it resets.

Accepting the App's new permissions

--gh needs two permissions the GitHub App did not ask for before: Issues and Contents, both read and write (Contents to create a branch). Until an installation accepts them, GitHub keeps the App's old permissions there and refuses these writes, and the CLI names the permission that is missing.

1
Your own App only: add them
The App eQuantic Space provides already asks for them. A workspace that brings its own App adds them in Settings → Developer settings → GitHub Apps → Edit → Permissions & events: under Repository permissions, set Issues and Contents to Read and write, then Save changes.
2
Each installation accepts them
GitHub emails the owners of every account the App is installed on. On a personal account, open Settings → Applications → Installed GitHub Apps → Configure. On an organization, open Settings → Third-party Access → GitHub Apps → Configure. Review the requested permissions there and accept them.
eqs issue delete --gh cannot be undone: GitHub deletes the issue for good. That is why only owners hold issue.delete, and why the CLI asks you to type the issue's number first.