# Typed fields & schema — artifacts.md docs

> The ten field types and the board.yaml authoring loop: define a typed board schema as code and apply it with tix board schema apply.

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.
- select and multiSelect — 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:

board.yaml

```
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: 2
```

## Applying 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

```
tix board schema apply  -f board.yaml --dry-run   # validate
tix board schema apply  -f board.yaml              # apply
# export the live schema back out any time:
tix board schema  --yaml
```

Bounded 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&#x27;s declared type — a number field rejects text, a checkbox wants true/false, a select wants one of its option names:

tix ticket create --field

```
tix ticket create --board  \
  --title "Latency spike on /checkout" \
  --field severity=Critical --field sentiment=-2
```

## Filtering by field

Because fields are typed, you can filter a list by them with real comparison operators — =, !=, <, <=, >, >=:

tix ticket list --field

```
tix ticket list --board  --field "severity=Critical"
tix ticket list --board  --field "sentimentThe 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.

← PreviousBoards & ticketsNext →Dependencies & ready work