Themes
volee draws with semantic roles, such as state.needs_input or
diff.added, never with fixed colors. A theme maps those roles to colors.
Pick a theme
volee ships with five themes:
| Theme | Look |
|---|---|
catppuccin-mocha | Dark, the default. |
catppuccin-macchiato | Dark, a little softer. |
catppuccin-frappe | Dark, the softest. |
catppuccin-latte | Light. |
terminal | Your terminal’s own 16 colors and background. |
From the interface
Press Space t, or type :theme, to open the theme picker at the bottom
right of the screen. It lists the built-in themes, then your own from
~/.config/volee/themes. Moving in the list applies each theme at once, so
you see it on your own agents before you decide.
Enterkeeps the theme and saves it as[tui] themein your configuration. The rest of the file, comments included, is left as it was.Esccloses the picker and brings back the theme you had.
From the command line
volee --theme <name> opens the interface with that theme for this run. It
does not change the configuration, and it wins over [tui] theme. An
unknown name is refused with the list of the themes that exist.
volee --theme catppuccin-latte
volee demo --theme catppuccin-latte
In the configuration
[tui]
theme = "catppuccin-latte"
volee looks for a theme in ~/.config/volee/themes/<name>.toml first, then
among the built-in themes.
When nothing is set
With no --theme and no [tui] theme, volee looks at your terminal: it asks
for the background color and uses catppuccin-mocha on a dark background and
catppuccin-latte on a light one. When the terminal does not answer (some
multiplexers and remote sessions), it reads the COLORFGBG variable, and
when that is missing too it keeps catppuccin-mocha. The guess is only made
when the output is a terminal, and never waits more than a moment. Set a
theme to turn it off.
The order is: --theme, then [tui] theme, then the guess, then
catppuccin-mocha.
volee uses 24-bit colors when the terminal announces them in COLORTERM
(truecolor or 24bit), and otherwise replaces each color by the nearest
one of the 256-color palette. The terminal theme uses only the 16 colors
your terminal lets you configure.
The background
volee shows your terminal’s own background under its text, whatever the theme: its color, and its transparency or blur when your terminal has some. The theme colors the text, the borders and what fills a cell on purpose, such as the selected row, a state badge or a notice.
To have the theme’s own background color instead (the background role
of the theme):
[tui]
background = "theme"
The theme picker shows each theme over the background you chose. A theme made for a light background reads badly on a dark terminal, and the other way round: when nothing is set, volee picks the flavor that matches your terminal (above).
Write a theme
A theme is a TOML file with an optional parent, a palette of named colors, and the roles:
# ~/.config/volee/themes/dusk.toml
inherits = "catppuccin-mocha"
[palette]
ember = "#ff9e64"
[roles]
"state.needs_input" = { fg = "ember", modifiers = ["bold"] }
"role.worker" = "sky"
edge = "#3b4261"
inheritsstarts from another theme (yours or a built-in one). A theme may inherit from the built-in theme of the same name to change only a few roles of it.[palette]names colors. A palette entry of the child replaces the parent’s, and every role that uses it follows: that is how the Catppuccin flavors share one set of roles.[roles]gives each role a color (a plain string sets the foreground) or a style:{ fg = "...", bg = "...", modifiers = [...] }. Modifiers arebold,dim,italic,underlined,reversedandcrossed-out.- A color is a palette name, an ANSI name (
red,light-blue,dark-gray…),resetfor the terminal’s default,#rrggbb, or a 256-color index. - A role a theme does not set falls back to its parent role
(
state.workingfalls back tostate), then to the terminal’s default style. Unknown roles are ignored, so a theme keeps working with older and newer versions of volee.
Roles
| Role | Used for |
|---|---|
background | The default text color of the whole screen, and its background with background = "theme" (by default, the terminal’s own shows). |
text | Regular text. |
text.dim | Secondary text: labels, separators, elapsed times, paths. |
title | Panel titles. |
border | Borders of panels. |
border.focused | The border and the title of the focused panel. |
selection | The selected row of a list. |
card.selected | The border of the selected card in the hierarchy. |
card.flash | The border of a card the person just wrote to, for an instant. |
card.mail | The count of messages waiting for an agent, on its card. |
topbar | The top bar. |
topbar.brand | The volee badge at the left of the top bar. |
tab | Tabs that are not shown. |
tab.active | The tab on screen. |
tab.number | The number in front of each tab. |
counter | Counters in the top bar. |
counter.urgent | The count of agents that need you, when it is not zero. |
letter | The letter that jumps to an agent. |
state.launching | An agent volee launched but has not seen running yet. |
state.working | An agent running a turn. |
state.needs_input | An agent that waits for a person: permission, question or dialog. |
state.idle | An agent waiting for its next instruction. |
state.done | An agent that finished its last task. |
state.failed | An agent that ended with an error. |
state.stopped | An agent whose process stopped; its conversation can be resumed. |
state.lost | An agent volee cannot find any more. |
role.lead | The lead agent you talk to. |
role.coordinator | The coordinator of a mission. |
role.worker | A worker in one repository. |
role.subagent | A helper started by another agent inside its session. |
role.independent | A session volee did not launch, or a program run with volee run. |
edge | Lines between cards, and who launched whom in the network view. |
edge.pulse | A message moving along an edge of the network view. |
edge.message | Agents that exchanged messages, in the network view. |
edge.question | A question that waits for its answer, in the network view. |
diff.added | Added lines. |
diff.removed | Removed lines. |
badge.pr | Pull request numbers. |
checks.passing | Checks that passed. |
checks.failing | Checks that failed. |
checks.pending | Checks that still run. |
sparkline | Activity sparklines on cards. |
agent.1 | The first of the nine colors that tell agents apart: each worker and each session started on its own keeps one, on its card’s border, its name and its activity. |
agent.2 | The second color that tells agents apart. |
agent.3 | The third color that tells agents apart. |
agent.4 | The fourth color that tells agents apart. |
agent.5 | The fifth color that tells agents apart. |
agent.6 | The sixth color that tells agents apart. |
agent.7 | The seventh color that tells agents apart. |
agent.8 | The eighth color that tells agents apart. |
agent.9 | The ninth color that tells agents apart. |
hint.key | Keys in the hint bar and in the help. |
hint.text | Descriptions in the hint bar and in the help. |
notice | Short notices at the bottom of the screen. |
notice.error | Notices about something that failed. |
input | Text being typed, such as a filter. |
placeholder | Words that stand in for missing content, such as an empty view. |