Skip to content

neo ticket

Manage team tickets.

A ticket is team-scoped planning work, addressed KEY-N, and a team’s board is its tickets. The repo-scoped twin is neo issue, which works a repository’s intake (owner/repo#N); see neo docs tickets-and-issues.

neo ticket [OPTIONS] <COMMAND>

Create a ticket on a team’s board

neo ticket create [OPTIONS] --team <TEAM> --title <TITLE>
Option Value Required Default Env Values Description
--team <TEAM> yes Team key (ENG or <workspace>/ENG) whose board the ticket lands on. A ticket has no repo, so this is its only scope
--title <TITLE> yes Ticket title, and the only other required flag here. It is the whole of what a board, a search result or a link preview shows; the detail belongs in --body
--body <BODY> no "" Markdown description
--priority <PRIORITY> no none, urgent, high, medium, low Priority to file it at. Left to the server’s default when omitted
--json no Print the raw response as JSON

List a team’s board.

A board holds the team’s tickets and nothing else, so every row renders KEY-N. A repo-bound issue lives on its repo’s issue list (neo issue list <owner>/<repo>) even when it carries the same team.

neo ticket list [OPTIONS] --team <TEAM>
Option Value Required Default Env Values Description
--team <TEAM> yes Team key (ENG or <workspace>/ENG) whose board to list
--state <STATE> no open open, closed, all, backlog, todo, in_progress, in_review, done, cancelled, duplicate open (non-terminal), closed (done/cancelled/duplicate), all, or one exact status
--json no Print the raw response as JSON

Show one ticket with its comments

neo ticket view [OPTIONS] <TICKET>
Option Value Required Default Env Values Description
<TICKET> yes Ticket to act on, as ENG-7 or <workspace>/ENG-7
--json no Print {issue, comments} as JSON

Agent context pack for a ticket (always JSON).

The ticket plus its labels, links, comments, and every linked PR (open AND closed) with a checks summary and review comments/threads.

neo ticket context [OPTIONS] <TICKET>
Option Value Required Default Env Values Description
<TICKET> yes Ticket to act on, as ENG-7 or <workspace>/ENG-7

Close a ticket with a terminal status

neo ticket close [OPTIONS] <TICKET>
Option Value Required Default Env Values Description
<TICKET> yes Ticket to act on, as ENG-7 or <workspace>/ENG-7
--reason <REASON> no done done, cancelled, duplicate Terminal status to close it with
--json no Print the updated ticket as JSON

Edit a ticket’s title, body, or priority.

Only supplied fields change; anything omitted keeps its current value. At least one of --title, --body, --body-file, or --priority is required.

neo ticket edit [OPTIONS] <TICKET>
Option Value Required Default Env Values Description
<TICKET> yes Ticket to act on, as ENG-7 or <workspace>/ENG-7
--title <TITLE> no Replace the title
--body <BODY> no Markdown description. Mutually exclusive with --body-file
--body-file <BODY_FILE> no Read the markdown description from a file instead of a shell argument — - reads stdin. Avoids shell-quoting long bodies. Mutually exclusive with --body
--priority <PRIORITY> no none, urgent, high, medium, low Replace the priority
--json no Print the updated ticket as JSON

Re-open a closed ticket

neo ticket reopen [OPTIONS] <TICKET>
Option Value Required Default Env Values Description
<TICKET> yes Ticket to act on, as ENG-7 or <workspace>/ENG-7
--json no Print the updated ticket as JSON

Comment on a ticket

neo ticket comment [OPTIONS] --body <BODY> <TICKET>
Option Value Required Default Env Values Description
<TICKET> yes Ticket to act on, as ENG-7 or <workspace>/ENG-7
--body <BODY> yes Markdown comment body
--json no Print the created comment as JSON

Atomically claim a ticket (backlog/todo → in_progress, assigned to you).

Exactly one claimer wins; a lost claim exits non-zero with the server’s 409 — the agent loop’s mutual exclusion.

neo ticket claim [OPTIONS] <TICKET>
Option Value Required Default Env Values Description
<TICKET> yes Ticket to act on, as ENG-7 or <workspace>/ENG-7
--json no Print the claimed ticket as JSON

Release a claimed ticket: in_progress → todo, drop your assignment

neo ticket release [OPTIONS] <TICKET>
Option Value Required Default Env Values Description
<TICKET> yes Ticket to act on, as ENG-7 or <workspace>/ENG-7
--json no Print the released ticket as JSON

Record that a ticket tracks a repo-bound issue.

The direction is fixed: planning work tracks intake, never the reverse. The inverse (tracked_by) row is written by the server in the same transaction and is never created directly.

neo ticket track [OPTIONS] <TICKET> <ISSUE>
Option Value Required Default Env Values Description
<TICKET> yes Ticket doing the tracking, as ENG-7 or <workspace>/ENG-7
<ISSUE> yes Repo-bound issue being tracked, as acme/api#1526 or api#1526 (owner defaults to your handle). A bare #1526 is not accepted — a leading # is a comment to the shell
--json no Print the created link as JSON

Remove a ticket’s tracking link to a repo-bound issue.

Both rows of the pair go in one transaction. There is no --json: the route answers 204 with no body, so exit 0 is the whole result.

neo ticket untrack [OPTIONS] <TICKET> <ISSUE>
Option Value Required Default Env Values Description
<TICKET> yes Ticket that was doing the tracking, as ENG-7 or <workspace>/ENG-7
<ISSUE> yes Repo-bound issue to stop tracking, as acme/api#1526