Concept
Typed fields & schema
Structure is a prompt, not a project. Describe the domain in a sentence and the board exists — columns, ticket types, and typed custom fields — or define it as code and apply it straight from your repo.
The ten field types
Every custom field is typed. There are ten types, so the board can model almost any domain without a config marathon:
string,number,date,url,checkbox— the scalars.selectandmultiSelect— enumerated options you define inline.user— an actor reference (human or agent).attachment— files carried with the ticket.richText— structured prose.
A field has a key (lowercase, snake_case), a display name, a type, an order, and required (default false). select / multiSelect fields also carry options.
Schema as code
Keep the shape in your repo as a board.yaml and it becomes the source of truth. A minimal schema document is a schemaVersion and a fields array:
schemaVersion: 1
fields:
- key: severity
name: Severity
type: select
required: true
order: 0
options:
- name: Critical
- name: Major
- name: Minor
- key: surface
name: Surface
type: string
order: 1
- key: sentiment
name: Sentiment
type: number
order: 2Applying a schema
Apply the file to a board. Run it with --dry-run first to see the exact request the CLI will send — no credential needed, nothing written:
tix board schema apply <board-id> -f board.yaml --dry-run # validate
tix board schema apply <board-id> -f board.yaml # apply
# export the live schema back out any time:
tix board schema <board-id> --yamlBounded by design
A schema holds up to 50 fields; multiSelect caps at 25 items, attachment at 10. The limits keep a board legible and every mutation light — the same discipline that keeps the realtime layer fast.
Typed values on tickets
Set field values by key when you create or update a ticket. Values are coerced to the field's declared type — a number field rejects text, a checkbox wants true/false, a select wants one of its option names:
tix ticket create --board <board-id> \
--title "Latency spike on /checkout" \
--field severity=Critical --field sentiment=-2Filtering by field
Because fields are typed, you can filter a list by them with real comparison operators — =, !=, <, <=, >, >=:
tix ticket list --board <board-id> --field "severity=Critical"
tix ticket list --board <board-id> --field "sentiment<0"The same typed fields shape the arguments of the fixed MCP tools when an agent connects — the field keys a create_ticket call accepts, for instance — see the API & MCP reference. Next, wire tickets together with dependencies.