Skip to main content
Labels are additive, colored tags you attach to sessions. Where a status answers “what stage is this session in?” and allows exactly one per session, labels answer “what is this session about?” — and a session can carry zero, one, or many of them. Synti stores a session’s labels as a simple list in its metadata. Labels can also nest into a tree, and they can carry a typed value, which turns a plain tag like priority into structured data like priority::3.

Labels vs. statuses

New workspaces start with no labels — you add exactly the ones your work needs.

Typed values

A label can hold a value using the :: separator, for example due::2026-01-30. A label’s valueType acts as a display hint for how that value renders; Synti infers the actual type when it reads the raw string, trying an ISO date first, then a number, then falling back to text. Values pair naturally with auto-apply rules, which extract values from your messages and attach them for you.

The label tree

Labels form a hierarchy through a children array, up to five levels deep. Position within an array sets display order. Filtering on a parent includes every session tagged with any of its descendants, so a broad label like area can gather everything beneath it.
Label ids must be globally unique across the entire tree, not just within their parent. Use lowercase slugs — alphanumeric characters and hyphens only.

Colors

Each label renders as a colored dot. Set its color to a system token, a token with opacity, or a custom light/dark pair. A label with no color renders as a muted foreground dot.
Common conventions: destructive for bugs, accent for features, success for finished work, info for metadata, and foreground/60 for neutral tags. See Colors for the full palette and opacity rules.

Configuration

The fastest way to create a label is to ask the agent — for example, “create a red Bug label.” To edit by hand, open your workspace’s label config:
Each label supports these fields:
After editing the file, validate it with config_validate({ target: "labels" }). Synti checks the JSON, confirms IDs are unique and correctly slugged, and enforces the five-level nesting limit.

In the app

Labels appear in the left sidebar as a multi-level, expandable section. Click one to filter the session list to matching sessions; clicking a parent includes everything beneath it. Selecting more than one label narrows to sessions that carry all of them — an intersection filter — which makes it easy to answer questions like “billing sessions that are also high priority.”

Auto-apply rules

Attach labels automatically from patterns in your messages.

Statuses

The one-per-session workflow state that complements labels.