Settings · crystl Docs

Settings Overview

Settings opens from the app menu ( crystl → Settings, Cmd+,) into a Warp-style sidebar. Pages are grouped into General, Agents, Workspace, and Connect. This page is a map of where everything is.

An agent working inside crystl can read your current values, not just the list of what exists, with crystl settings (add --json for the raw object). The snapshot and settings get are free on every tier, and they never print API-key values, only whether each key is set. Guild members can use settings set to live-apply a small, explicit allowlist of controls. So you can ask your agent “what’s my terminal renderer?” or “turn tool activity notifications on,” and it can act from the live config.

General

App-wide behavior, your data, and your membership. The general page itself is split into four tabs across the top: appearance, terminal, gems, and startup. crystl remembers the tab you were last on, so reopening Settings drops you back where you left off. storage and license are beside general as their own sidebar entries.

appearance

terminal

gems

startup

storage and license

Which terminal renderer?

crystl renders terminals with Prism, its native Metal renderer, backed by the cavrn terminal engine and built for a window full of streaming agents. There’s no picker in Settings for this anymore — Prism is what you get. Structured blocks, indexed shell-command output, and click-to-expand tool calls need Prism.

xterm is still available as an advanced fallback. Prism switches to it automatically at runtime if it fails to initialize, and you can request it manually with crystl settings set terminal_surface xterm or a defaults write override. Terminals already open keep the renderer they started with. See terminal renderers for the exact tradeoffs.

Agents

Per-agent behavior, defaults, and the keys agents run on. Five sidebar entries: agents, schedules, MCP servers, providers & keys, and context.

The agents page holds agent configuration proper, on six tabs of its own, in the same underline strip the general page uses. Panels that offer to take you to an agent setting land on the right tab already selected, and crystl remembers which tab you were last on.

The other four keep their own sidebar entries:

Appearance

There’s no theme picker or light mode yet. crystl is built by one person, its founder and only developer, so a full theming system is a real chunk of time that has so far gone to the orchestration features instead. What exists today is a small set of appearance controls, and they are in three different places, so they’re gathered here.

Background shade and finish: settings, general > appearance. Seven dark presets and a custom… dot that opens the macOS colour wheel, so any colour works. Hover a swatch for its name:

Preset
graphite the default, neutral near-black
black true black
navy · forest · oxblood · plum · espresso tinted near-blacks, blue / green / red / purple / brown

Finish is glass (translucent, shaped by the opacity slider) or solid (fully opaque). The choice re-tints every window and panel live, no restart.

Window opacity: the small slider centered in the title bar, not on the Settings page. It only does anything on the glass finish; solid ignores it.

Terminal font: settings, general > appearance, under TERMINAL FONT, listing the monospaced fonts installed on your Mac. Nerd Fonts show up here too, so agent TUIs that need powerline or icon glyphs render as designed. To add one, install the .ttf or .otf through macOS Font Book, then reopen Settings for it to appear.

Terminal font size: under the font, TERMINAL FONT SIZE lists 10 to 24 pt. Cmd + / Cmd - / Cmd 0 change the same setting, see keyboard shortcuts.

Terminal text colour: TERMINAL TEXT is a colour well for plain terminal text, the text that sets no colour of its own. Programs that colour their own output keep their colours. A light background with dark text works: pick the background on the colour wheel, then a dark text colour here. reset puts the default back.

Per-gem color and icon: each gem carries its own accent color and icon, set in Gem Settings rather than globally. That color is what tints its rail tile, tab, and its panels. See Gems & shards.

Shard colors are not configurable: each crystal name has a fixed signature hue so a shard reads the same everywhere it appears.

Workspace

Configuration for the collaborative features.

Gem and shard settings

App Settings contains global defaults. Project-specific controls are behind the ⋮ menus on gem tabs and shard pills:

See Gems & Shards → The gem menu for the complete, condition-aware inventory of both menus and every Gem Settings tab.

Connect

Reaching crystl and its agents from elsewhere.

Reading and changing settings from an agent

crystl settings                              # grouped, human-readable snapshot
crystl settings --json                       # raw snapshot object
crystl settings get terminal_surface         # one allowed value, free
crystl settings set terminal_surface prism   # live-apply a value, Guild

The snapshot groups values under general, agents, notifications, remote, and api_keys_present, plus your tier (guild or free). It reflects effective values, including defaults for anything you haven’t changed.

settings set is intentionally narrow. It accepts the same allowlist as settings get, validates the new value, and routes through the app’s live control path. It does not expose arbitrary preferences. See the CLI reference for every allowed key and value.

One key reads but never writes: terminal_surface_active. terminal_surface is the renderer you asked for; terminal_surface_active is the one shards were actually built with, so comparing them tells you whether a renderer preference really took effect or quietly fell back. It reads unknown until the first shard is built, since nothing has picked a renderer yet.