Skip to main content

Command

Enum Command 

Source
pub enum Command {
Show 30 variants Init, InitAgents, Create {
Show 16 fields title: Option<String>, body: Option<String>, status: Option<String>, priority: Option<String>, assignee: Option<String>, labels: Option<String>, files: Option<String>, estimate: Option<String>, cycles: Option<String>, milestones: Option<String>, reviewer: Option<String>, start_date: Option<String>, due_date: Option<String>, parent: Option<String>, related_issues: Option<String>, type: Option<String>,
}, Link { action: Option<LinkAction>, from: Option<String>, to: Option<String>, type: Option<String>, }, Bulk { action: BulkAction, }, Unlink { from: String, to: String, type: Option<String>, }, Chain { issue: String, }, Parent { action: ParentAction, }, Edit {
Show 19 fields issue: String, title: Option<String>, body: Option<String>, status: Option<String>, priority: Option<String>, assignee: Option<String>, labels: Option<String>, files: Option<String>, estimate: Option<String>, cycles: Option<String>, milestones: Option<String>, reviewer: Option<String>, start_date: Option<String>, due_date: Option<String>, commit: Option<String>, parent: Option<String>, reason: Option<String>, related_issues: Option<String>, type: Option<String>,
}, Move { issue: String, column: String, commit: Option<String>, reason: Option<String>, yes: bool, }, View { issue: String, show: Option<String>, }, List { status: Option<String>, filter: Option<String>, with_archived: bool, sort: Option<String>, group: Option<String>, columns: Option<String>, show: Option<String>, }, Workflow { action: WorkflowAction, }, Status { filter: Option<String>, sort: Option<String>, group: Option<String>, }, Triage { action: TriageAction, }, Delete { issue: String, yes: bool, }, Archive { issues: Vec<String>, }, Restore { issues: Vec<String>, }, Cycle { command: CycleCommand, }, Milestone { command: MilestoneCommand, }, Export { target: String, dry_run: bool, project: Option<String>, cycle: Option<String>, output: Option<String>, }, Import { target: String, triage_policy: Option<String>, }, Rollover { cycle: Option<String>, yes: bool, }, Search { string: String, with_archived: bool, }, Render, Clean { force: bool, }, New, Lint { no_foreign: bool, }, Layout { action: LayoutAction, }, Mcp,
}

Variants§

§

Init

Create a default tix.toml ([kanban.default], issues_dir, [export])

§

InitAgents

Append or replace the tix block in AGENTS.md (idempotent)

§

Create

Create an issue

Fields

§title: Option<String>

Issue title (prompted when missing on a TTY)

§body: Option<String>

Issue body (markdown)

§status: Option<String>

Column name (default: first column)

§priority: Option<String>

Priority: low | medium | high (default medium)

§assignee: Option<String>

Assignee (@name)

§labels: Option<String>

Labels, comma-separated

§files: Option<String>

Files governing this issue, comma-separated

§estimate: Option<String>

Estimate

§cycles: Option<String>

Cycle names, comma-separated

§milestones: Option<String>

Milestone names, comma-separated

§reviewer: Option<String>

Reviewer (free-form name/identity)

§start_date: Option<String>

Start date (YYYY-MM-DD)

§due_date: Option<String>

Due date (YYYY-MM-DD); must be >= start_date

§parent: Option<String>

Create as a child of this issue (number, filename or title fragment)

At most one parent, so this takes a single selector and there is no list form (C-001). The parent must already exist; a selector that matches no issue is refused and nothing is created.

§related_issues: Option<String>

Related issues, comma-separated: a local number/selector, a relative or absolute path to another issue file, or a repository URL (host/path#id). Free-form; stored verbatim.

§type: Option<String>

Issue type (e.g. bug, feature); tix lint warns on a value not in custom_types.

Create, edit, remove, or list typed relationships

Creating requires --type; there is no default kind, so an untyped relationship is never recorded by accident (C-001). Omit the subcommand to create: tix link <from> <to> --type <kind>.

Fields

§action: Option<LinkAction>

edit, remove, or list. Omit to create a relationship.

These three words are reserved on tix link: an issue whose number, filename, or title selector is exactly edit, remove, or list must be addressed by number.

§from: Option<String>

[create] Issue number, filename fragment or unique title fragment

§to: Option<String>

[create] Issue number, filename fragment or unique title fragment

§type: Option<String>

[create] Relationship kind: blocks, blocked_by, duplicates, related

§

Bulk

Batch editing over a selection

Preview is the default; --apply writes. Name exactly one of --select, --filter or --search — they are different grammars, and a bulk operation will not guess which issues you meant.

Fields

§action: BulkAction

Remove a typed relationship between two issues

Fields

§from: String

Issue number, filename fragment or unique title fragment

§to: String

Issue number, filename fragment or unique title fragment

§type: Option<String>

Relationship kind: blocks, blocked_by, duplicates, related

§

Chain

Print the transitive dependency chain an issue holds up

Fields

§issue: String

Issue number, filename fragment or unique title fragment

§

Parent

Inspect the issue hierarchy

show, children, or list. Every figure comes from the hierarchy service’s typed values, so the CLI, the TUI detail block and the MCP read tools report the same numbers for the same issue.

Fields

§action: ParentAction

show, children, or list

§

Edit

Edit an issue

Fields

§issue: String

Issue number, filename fragment or unique title fragment

§title: Option<String>

New title

§body: Option<String>

New body (markdown)

§status: Option<String>

New status

Setting the status is a move, validated by the same service as tix mv and recorded as the same TransitionDecision — it is not a way around the transition policy. --status "" clears the field (matching every other field here) and is a plain field write, not a transition, because there is no target column to judge.

§priority: Option<String>

New priority: low | medium | high

§assignee: Option<String>

New assignee (@name)

§labels: Option<String>

New label list, comma-separated

§files: Option<String>

New files list, comma-separated

§estimate: Option<String>

New estimate

§cycles: Option<String>

New cycle list, comma-separated (--cycles "" clears)

§milestones: Option<String>

New milestone list, comma-separated (--milestones "" clears)

§reviewer: Option<String>

New reviewer (--reviewer "" clears)

§start_date: Option<String>

New start date (YYYY-MM-DD; --start-date "" clears)

§due_date: Option<String>

New due date (YYYY-MM-DD; --due-date "" clears)

§commit: Option<String>

Commit hash to record (auto resolves it from git history, clear removes it)

§parent: Option<String>

Set or change the parent (number, filename or title fragment)

--parent "" clears the parent, mirroring --assignee ""; omitting the flag leaves it untouched. Validated before any write, so a self-parent, an unknown parent, or a change that would close a cycle leaves the file byte-identical.

§reason: Option<String>

Why a transition policy is being overridden by --status

--status is validated exactly as tix mv is, so moving an issue out of a terminal category needs the same reasoned override, and the reason is recorded in the same History decision. --status deliberately has no --yes: acknowledging blockers is spelled tix move … --yes, and giving this flag a second spelling would give the audit trail two.

§related_issues: Option<String>

New related-issues list, comma-separated (--related-issues "" clears). A local number/selector, a relative or absolute path to another issue file, or a repository URL (host/path#id).

§type: Option<String>

New issue type (--type "" clears it); tix lint warns on a value not in custom_types.

§

Move

Move an issue to a column

Fields

§issue: String

Issue number, filename fragment or unique title fragment

§column: String

Target column

§commit: Option<String>

Commit hash to record when moving to a completion column (auto resolves it from git history; omitted, the current HEAD is captured automatically)

“Completion” is whatever the board’s category mapping calls completed — not a column literally named done. On a board with no [kanban.<name>.category_map] the board’s done_column is the completion column.

§reason: Option<String>

Why a transition policy is being overridden

Required to move an issue out of a terminal category (completed or canceled) when the board declares a category_map. The reason is recorded in the issue’s History, so the audit trail explains itself later. A blank value is not a reason and is refused.

A board with no category_map has no transition policy to override: it keeps the completion definition and the commit rule, and moving out of done stays permitted.

§yes: bool

Confirm without prompting

Also the acknowledgement a move toward the board’s completion column needs when the issue has open blockers. Without it that move is refused, and a recorded acknowledgement is appended to the issue’s History so the decision stays auditable.

§

View

Print the full issue (frontmatter + body) to stdout

Fields

§issue: String

Issue number, filename fragment or unique title fragment

§show: Option<String>

Extra information to append, comma-separated

relationships appends the service-derived relationship block, the transitive chain, and the blocked reason. Without it the issue file is printed verbatim, so tix view <n> > file still round-trips.

§

List

Table of issues

Fields

§status: Option<String>

Only issues in this status

§filter: Option<String>

Token query (cycle:, milestone:, reviewer:, overdue, etc.)

§with_archived: bool

Include archived issues, marked with an ARCHIVED column

Off by default, and off for a reason: archived issues are skipped without being read, so a repository with thousands of them lists fast.

§sort: Option<String>

Sort key (created, due, start, reviewer, cycle, milestone, status, priority)

§group: Option<String>

Group key (cycle | milestone)

§columns: Option<String>

Comma-separated columns to display

§show: Option<String>

Extra information to include, comma-separated

relationships adds a relationship summary and a blocked marker per issue, read from the relationship service so the CLI and the TUI cannot disagree.

progress adds a parent rollup; category adds the issue’s resolved category label, read from the shared service so this surface and the TUI cannot spell one category two ways.

§

Workflow

Inspect the status-category vocabulary, a board’s mapping, and the effective transition policy

A read-only surface. It never writes and never repairs, so it is safe to run on a repository whose tix.toml is mid-edit.

Fields

§

Status

Board summary: count per column + total

Fields

§filter: Option<String>

Token query (cycle:, milestone:, reviewer:, overdue, etc.)

§sort: Option<String>

Sort key (created, due, start, reviewer, cycle, milestone, status, priority)

§group: Option<String>

Group key (cycle | milestone)

§

Triage

Triage the inbox: read-only queue views and the four decisions

Fields

§

Delete

Delete an issue file

Fields

§issue: String

Issue number, filename fragment or unique title fragment

§yes: bool

Confirm without prompting

§

Archive

Archive issue files: rename each in place to a dot-prefixed name

The default views (tix list, tix search) skip archived issues; pass their --with-archived flag or the archived:true filter to see them.

Fields

§issues: Vec<String>

Issue numbers, filename fragments or unique title fragments

§

Restore

Restore archived issue files: the inverse of tix archive

Fields

§issues: Vec<String>

Issue numbers, filename fragments or unique title fragments

§

Cycle

Manage planning cycles

Fields

§

Milestone

Manage milestones

Fields

§

Export

Export local issues to an external tracker via glab/linear-cli

Fields

§target: String

Target tracker: gitlab | linear

§dry_run: bool

Print what would change without invoking the remote tracker

§project: Option<String>

Override the configured project path (gitlab) or team (linear)

§cycle: Option<String>

Cycle to export for ICS output

§output: Option<String>

Output path for ICS export

§

Import

Import open issues from an external tracker via glab/linear-cli, or mirror a local GitHub Spec Kit project

Fields

§target: String

Target: gitlab | linear (remote trackers) | speckit (local mirror)

§triage_policy: Option<String>

Where an imported issue lands in the local triage inbox (WP07)

entry routes into [triage].entry_status and refuses a project with no [triage] section instead of quietly falling back; remote keeps the column the remote mapping named. Absent is the documented default: route when the project has an inbox, otherwise leave the mapping alone. Either way the report names the mapping that was used.

§

Rollover

Roll open issues forward from expired cycles to the next successor

Fields

§cycle: Option<String>

Restrict rollover to one source cycle

§yes: bool

Skip interactive confirmation

§

Search

Search issue files for a string (case-insensitive substring over full markdown)

Fields

§string: String

Case-insensitive substring to match against the full markdown of every issue

§with_archived: bool

Include archived issues in the search corpus

§

Render

Render the current board once and exit

§

Clean

Remove the backup files tix leaves beside issues it rewrites

*.tixbak (an editor save, a repair, a conflict) and *.md.bak (an import overwrite). By default each file is confirmed interactively.

Fields

§force: bool

Remove every backup without prompting

§

New

Open the TUI with the create-issue form already open

The session tix starts, with the modal that n opens already in front of you: one command to file an issue, instead of “start the board, then press n”. It is the interactive twin of tix create, which never opens the TUI.

§

Lint

Validate frontmatter option values in all issue files

Fields

§no_foreign: bool

Do not lint the foreign repositories reachable from related_issues for this run (overrides lint_foreign_repositories in tix.toml).

§

Layout

Inspect or migrate the configured on-disk issue layout ([layout])

Fields

§

Mcp

Serve the MCP protocol (JSON-RPC 2.0 over stdio) for agent tools

Trait Implementations§

Source§

impl FromArgMatches for Command

Source§

fn from_arg_matches(__clap_arg_matches: &ArgMatches) -> Result<Self, Error>

Instantiate Self from ArgMatches, parsing the arguments as needed. Read more
Source§

fn from_arg_matches_mut( __clap_arg_matches: &mut ArgMatches, ) -> Result<Self, Error>

Instantiate Self from ArgMatches, parsing the arguments as needed. Read more
Source§

fn update_from_arg_matches( &mut self, __clap_arg_matches: &ArgMatches, ) -> Result<(), Error>

Assign values from ArgMatches to self.
Source§

fn update_from_arg_matches_mut<'b>( &mut self, __clap_arg_matches: &mut ArgMatches, ) -> Result<(), Error>

Assign values from ArgMatches to self.
Source§

impl Subcommand for Command

Source§

fn augment_subcommands<'b>(__clap_app: Command) -> Command

Append to Command so it can instantiate Self via FromArgMatches::from_arg_matches_mut Read more
Source§

fn augment_subcommands_for_update<'b>(__clap_app: Command) -> Command

Append to Command so it can instantiate self via FromArgMatches::update_from_arg_matches_mut Read more
Source§

fn has_subcommand(__clap_name: &str) -> bool

Test whether Self can parse a specific subcommand

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.