Favorite colors: one per personality, derived favorites for composed identities #16

Closed
opened 2026-07-22 22:57:23 +00:00 by coilyco-ops · 1 comment
Member

From a design conversation with Kai during #8.

What to build

Each personality gains a terminal-legible color; an agent identity derives its favorite color from its components.

  • Spec: personality "curious" skill="..." color="#d98e48" - one color per personality, stored as hex data.
  • Legibility is a parse-time constraint, not a hope: colors must sit in the mid-lightness band (OKLab L ~0.6-0.8, chroma above a gray floor) so they read on dark and light terminals alike.
  • Derivation: a single-personality composition's favorite is that personality's color. A multi-component identity (e.g. a seat whose role spans several personalities) derives its favorite as the OKLab centroid of the component colors, with chroma restored to the components' minimum so N-way blends don't gray out, clamped back into the legible band.
  • Rendering: truecolor ANSI with nearest-ANSI-256 fallback, only on a TTY with NO_COLOR unset (same rule #8 established). Containers are transparent to ANSI - only the attached terminal or log capture matters, so captured output stays plain.
  • Surfaces: describe tints personality lines with their color; the seat dispatch table gains an identity line ('your favorite color is #d98e48'); manifest carries the composed favorite.

Initial palette is placeholder pending Kai's taste: curious #d98e48 (amber), grounded #5fa87a (moss), meticulous #7d9fd3 (slate). The full sixteen-personality palette lands with #10.

Filed by Claude Code from a design discussion with Kai.

From a design conversation with Kai during #8. ## What to build Each personality gains a terminal-legible color; an agent identity derives its favorite color from its components. - Spec: `personality "curious" skill="..." color="#d98e48"` - one color per personality, stored as hex data. - Legibility is a parse-time constraint, not a hope: colors must sit in the mid-lightness band (OKLab L ~0.6-0.8, chroma above a gray floor) so they read on dark and light terminals alike. - Derivation: a single-personality composition's favorite is that personality's color. A multi-component identity (e.g. a seat whose role spans several personalities) derives its favorite as the OKLab centroid of the component colors, with chroma restored to the components' minimum so N-way blends don't gray out, clamped back into the legible band. - Rendering: truecolor ANSI with nearest-ANSI-256 fallback, only on a TTY with NO_COLOR unset (same rule #8 established). Containers are transparent to ANSI - only the attached terminal or log capture matters, so captured output stays plain. - Surfaces: describe tints personality lines with their color; the seat dispatch table gains an identity line ('your favorite color is #d98e48'); manifest carries the composed favorite. Initial palette is placeholder pending Kai's taste: curious #d98e48 (amber), grounded #5fa87a (moss), meticulous #7d9fd3 (slate). The full sixteen-personality palette lands with #10. Filed by Claude Code from a design discussion with Kai.
Author
Member

Shipped in 934dc2c.

  • Spec: personality nodes take color="#rrggbb" (docs/person-contract.md, Favorite colors section). The three current personalities carry the placeholder palette: curious #d98e48 amber, grounded #5fa87a moss, meticulous #7d9fd3 slate - swap at will, the gate will tell you if a choice is illegible.
  • Legibility is parse-time: internal/color validates OKLab lightness 0.60-0.80 and chroma >= 0.05, so black/white/gray and near-gray all fail with a message naming the measured value (tested).
  • Derivation: color.Favorite computes the OKLab centroid with chroma restored to the components' minimum, clamped into the band. Single component = itself; the amber+slate complementary pair stays above the gray floor (tested). Consumed today for the single-personality composed favorite; the multi-component path is ready for seat identities and the dispatch table.
  • Surfaces: manifest gains "color" (omitted when the personality declares none); describe's header shows 'favorite #d98e48' always and a tinted swatch on a TTY - truecolor when COLORTERM says so, nearest ANSI-256 otherwise, plain hex text when redirected. Containers are transparent to all of this; only the attached terminal matters.

Closed by Claude Code working the issue queue.

Shipped in 934dc2c. - Spec: personality nodes take color="#rrggbb" (docs/person-contract.md, Favorite colors section). The three current personalities carry the placeholder palette: curious #d98e48 amber, grounded #5fa87a moss, meticulous #7d9fd3 slate - swap at will, the gate will tell you if a choice is illegible. - Legibility is parse-time: internal/color validates OKLab lightness 0.60-0.80 and chroma >= 0.05, so black/white/gray and near-gray all fail with a message naming the measured value (tested). - Derivation: color.Favorite computes the OKLab centroid with chroma restored to the components' minimum, clamped into the band. Single component = itself; the amber+slate complementary pair stays above the gray floor (tested). Consumed today for the single-personality composed favorite; the multi-component path is ready for seat identities and the dispatch table. - Surfaces: manifest gains "color" (omitted when the personality declares none); describe's header shows 'favorite #d98e48' always and a tinted swatch on a TTY - truecolor when COLORTERM says so, nearest ANSI-256 otherwise, plain hex text when redirected. Containers are transparent to all of this; only the attached terminal matters. Closed by Claude Code working the issue queue.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
coilyco-flight-deck/agent-compose#16
No description provided.