TICGIT DOCS TICKET FIELDS

Ticket Fields

Commands: ti tag, ti assign, ti priority, ti points, ti milestone, ti subissue, ti spec, ti code, ti meta, ti edit

Every ticket has a set of built-in fields. These commands let you set them without opening an editor.

Tags

ADD TAGS
$ ti tag bug
$ ti tag "bug,urgent"
$ ti tag --ticket a3f security compliance
REMOVE TAGS
$ ti tag --remove bug
$ ti tag -d urgent

Tags are useful for filtering:

FILTER BY TAG
$ ti list --tag bug
$ ti list --only-tagged

Assign

ASSIGN
$ ti assign alice@example.com
$ ti assign --ticket a3f bob@example.com
 
$ ti assign --clear
Removes the assignee.

In list output, the email domain is stripped for readability (alice@example.com shows as alice).

FILTER BY ASSIGNEE
$ ti list --assigned alice@example.com

Priority

PRIORITY
$ ti priority 3
$ ti priority --ticket a3f 5
 
$ ti priority --clear

Lower values mean more important (e.g. 1 is highest priority). Priority is the dominant factor in ti next scoring.

Points

POINTS
$ ti points 5
$ ti points --ticket a3f 8
 
$ ti points --clear

Milestone

MILESTONE
$ ti milestone v2.0
$ ti milestone --ticket a3f "sprint-14"
 
$ ti milestone --clear

Sub-issues

Tickets can be organized into parent/child hierarchies. A child ticket has a single parent, and a parent ticket lists all its children.

MAKE A SUB-ISSUE
$ ti subissue a3f
Makes the checked-out ticket a sub-issue of a3f.
 
$ ti subissue --ticket b7e a3f
Makes b7e a sub-issue of a3f.
CLEAR SUB-ISSUE
$ ti subissue --clear
Removes the sub-issue relationship from the checked-out ticket.

You can also create a ticket as a sub-issue in one step:

CREATE AS SUB-ISSUE
$ ti new --title "fix edge case" --subissue a3f
Created: c4d81b (sub-issue of a3f29c)

When a ticket has a parent or children, ti show displays the relationships:

PARENT & CHILDREN IN TI SHOW
$ ti show a3f
-----------------------------------------------------------
Title    : Refactor auth middleware
Id       : a3f29c84-d6ec-3da1-a180-0a33fb090d59
Created  : 2026-05-09 (0d) by alice@example.com
Status   : open
State    : in-progress
Children : c4d81b, e9f2a1
Tags     : security, refactor
...

Circular chains are detected and rejected. A ticket cannot be its own ancestor.

Spec

The spec field holds implementation specifications -- the "how", separate from the description's "what/why". It's a top-level ticket field like title and description.

Use a spec when the ticket title and description identify the problem, but the implementation path needs to be agreed on before coding. Specs are especially useful for multi-step changes, agent workflows, and review handoff because they travel with the ticket and show up in JSON, Markdown, and filtered output.

Viewing the spec

When a spec is set, ti show displays its first line in the ticket header:

SPEC IN TI SHOW
$ ti show a3f
-----------------------------------------------------------
Title   : Refactor auth middleware
Id      : a3f29c84-d6ec-3da1-a180-0a33fb090d59
Created : 2026-05-09 (0d) by alice@example.com
Status  : open
State   : in-progress
Spec    : Use RS256 tokens with 24h expiry, rotate via cron
Tags    : security, refactor
...

To read the full spec (which may be multiline), use --filter or --json:

READ FULL SPEC
$ ti show a3f --filter .spec
Use RS256 tokens with 24h expiry, rotate via cron.
Migrate existing HS256 sessions in a background job.
Add a feature flag for gradual rollout.
 
$ ti show a3f --json | jq -r '.spec'
Use RS256 tokens with 24h expiry, rotate via cron.
Migrate existing HS256 sessions in a background job.
Add a feature flag for gradual rollout.

Setting the spec

Use ti spec to set the spec inline, from a file, or via your editor:

SET SPEC INLINE
$ ti spec "Use RS256 tokens with 24h expiry"
a3f29c spec: Use RS256 tokens with 24h expiry
 
$ ti spec --ticket a3f "Use RS256 tokens with 24h expiry"
SET SPEC FROM FILE
$ ti spec --file spec.md
EDIT SPEC IN $EDITOR
$ ti spec
Opens $EDITOR with the current spec for editing.
 
$ ti spec --ticket a3f
Edit the spec for a specific ticket.
CLEAR SPEC
$ ti spec --clear

Code

Link a ticket to a specific branch in a Git repository using ti code. The URI format is https://<host>/<path>:<branch>.

SET CODE URI
$ ti code https://github.com/schacon/ticgit:sc-fix-parser
a3f29c code: https://github.com/schacon/ticgit:sc-fix-parser
 
$ ti code --ticket a3f https://github.com/schacon/ticgit:feature-branch
CLEAR CODE URI
$ ti code --clear

The URI is validated on set: it must start with http:// or https://, include a host and path, and end with :branch-name.

Custom metadata

For anything that doesn't fit the built-in fields, use ti meta to set arbitrary key-value pairs:

META
$ ti meta branch feature/auth-refactor
$ ti meta priority P0
$ ti meta --ticket a3f source "customer-report"
 
$ ti meta spec-doc --file design.md

Custom metadata shows up in ti show output and in JSON:

READ META
$ ti show a3f --filter .meta.branch
feature/auth-refactor

All fields in JSON

The full ticket schema is at ticgit.dev/schema/v1.json. A ticket object looks like:

TICKET SCHEMA
{
  "id": "a3f29c84-...",
  "title": "fix parser panic",
  "description": "Panics on empty input...",
  "spec": null,
  "status": "open",
  "state": "in-progress",
  "assigned": "alice@example.com",
  "points": 5,
  "milestone": "v2.0",
  "code": "https://github.com/owner/repo:fix-branch",
  "tags": ["bug", "urgent"],
  "parent": "7b2e4f91-...",
  "children": ["c4d81b23-...", "e9f2a1d7-..."],
  "meta": { "branch": "feature/fix-parser" },
  "comments": [...],
  "created_at": "2026-05-01T10:30:00Z",
  "created_by": "bob@example.com"
}