Claude Code — TUI Design System
The AI coding agent that lives in your terminal. Based on Claude Code by Anthropic — warm, playful, and content-forward with a signature terracotta accent.
1. Theme Overview
- Mood: Warm, playful, content-forward
- Density: Balanced — clean conversation flow, minimal chrome
- Target: AI coding agents, conversational terminal interfaces, developer tools
- Terminal: TrueColor recommended for shimmer effects, 256-color acceptable
2. Color Palette
Semantic Roles
| Role | Hex | ANSI 256 | ANSI 16 | Usage |
|---|---|---|---|---|
| Background | #1a1a1a |
234 |
black |
Terminal default dark bg |
| Foreground | #ffffff |
15 |
bright white |
Default text, AI responses |
| Primary | #d77757 |
173 |
yellow |
Terracotta — Anthropic brand accent |
| Secondary | #fd5db1 |
206 |
bright magenta |
Hot pink — bash/tool borders |
| Accent | #b1b9f9 |
147 |
bright blue |
Lavender — permission dialogs |
| Success | #4eba65 |
71 |
green |
Green — completion |
| Warning | #ffc107 |
220 |
yellow |
Amber/gold — caution |
| Error | #ff6b80 |
204 |
red |
Soft red-pink — errors |
| Muted | #888888 |
245 |
bright black |
Gray — input borders, inactive |
| Surface | #373737 |
237 |
black |
User message background |
Claude-Specific Colors
| Name | Hex | Usage |
|---|---|---|
| Claude shimmer | #eb9f7f |
Lighter terracotta for shimmer animation |
| Bash border | #fd5db1 |
Hot pink tool execution borders |
| Permission | #b1b9f9 |
Lavender-blue permission dialogs |
| Auto-accept | #af87ff |
Purple — YOLO/auto-accept mode |
| Inactive | #999999 |
Gray — disabled elements |
| Subtle | #505050 |
Dark gray — separators |
| Diff added bg | #225c2b |
Green tint for added lines |
| Diff removed bg | #7a2936 |
Red tint for removed lines |
3. Typography & ASCII Art
- Header font: None — Claude Code doesn’t use figlet; clean text only
- Body text: plain terminal font, monospaced
- Emphasis:
boldfor headers,dimfor metadata - Code/values: syntax-highlighted in response
Text Hierarchy
| Level | Style | Example Usage |
|---|---|---|
| H1 | BOLD + Primary (terracotta) | Session header |
| Body | Foreground (white) | AI response text |
| Code | Syntax highlighted | Code blocks |
| User input | > prefix on Surface bg |
User messages |
| Caption | Muted + dim | Token counts, timestamps |
| Thinking | Primary (terracotta) + shimmer | Thinking verb |
4. Borders & Box Drawing
Input Box (Dashed ASCII — Signature Style)
- - - - - - - - - - - - - - - -
| > your message here_ |
- - - - - - - - - - - - - - - -
No Unicode box-drawing for input — plain ASCII dashed lines (- horizontal, | vertical). Border is Muted gray with shimmer between #888 and #A6A6A6. This is a deliberate design choice — casual, not corporate.
Tool Call Border (Hot Pink)
┌─ Bash ─────────────────────────┐
│ $ npm test │
│ │
│ PASS src/app.test.ts │
│ ✓ handles input (12ms) │
└─────────────────────────────────┘
Tool/bash output uses box-drawing with hot pink (#fd5db1) borders.
Permission Dialog (Lavender)
┌─ Allow Edit to src/app.ts? ────┐
│ │
│ [Y]es [N]o [A]lways │
│ │
└─────────────────────────────────┘
Permission prompts use lavender (#b1b9f9) borders.
Parts Table
| Part | Character | Color | Usage |
|---|---|---|---|
| Input horizontal | - (dashed) |
Muted gray | Input box |
| Input vertical | | |
Muted gray | Input box sides |
| Tool top_left | ┌ |
Hot pink | Tool call blocks |
| Tool horizontal | ─ |
Hot pink | Tool call blocks |
| Tool vertical | │ |
Hot pink | Tool call blocks |
| Tool bottom_left | └ |
Hot pink | Tool call blocks |
| Permission border | ┌─┐│└─┘ |
Lavender | Permission dialogs |
Dividers
- Between messages: subtle thin line in
#505050 - No heavy separators — content flows naturally
5. Components
User Prompt
- - - - - - - - - - - - - - - - -
| > What does this function do? |
- - - - - - - - - - - - - - - - -
- Dashed ASCII border in Muted gray (shimmering)
>prefix- Background: Surface (
#373737)
Thinking Indicator (Signature Feature)
✳ Percolating...
- Spinner cycles through 6 symbols:
· ✢ ✳ ✶ ✻ ✽then reverses - 120ms interval per frame
- Rendered in Primary terracotta with shimmer to
#eb9f7f - Paired with a random whimsical verb from ~184 options: “Cogitating…”, “Percolating…”, “Shenaniganing…”, “Moonwalking…”, “Ruminating…”
AI Response
This function parses the configuration file and returns
a structured object. Here's what each part does:
...
- White text on terminal default background
- Markdown rendered with syntax highlighting
- No border, no prefix — clean content-forward
Tool Call Block
┌─ Read: src/config.ts ─────────────────┐
│ │
│ 1 │ export function parseConfig() { │
│ 2 │ const raw = readFileSync(path); │
│ 3 │ return JSON.parse(raw); │
│ │
└─────────────────────────────────────────┘
- Hot pink (
#fd5db1) border — visually distinct from text - Tool name and file path in border header
- Code with syntax highlighting inside
- Background:
rgb(65,60,65)for bash output
Diff View
┌─ Edit: src/app.ts ─────────────────────┐
│ │
│ - const old = getValue(); │
│ + const result = getNewValue(); │
│ + logger.info('Updated'); │
│ │
└─────────────────────────────────────────┘
- Added lines:
+prefix,#225c2bbackground tint - Removed lines:
-prefix,#7a2936background tint - Hot pink border (same as tool calls)
Permission Prompt
┌─ Allow Bash: npm test? ──────────────┐
│ │
│ [Y]es [N]o [A]lways │
│ │
└───────────────────────────────────────┘
- Lavender (
#b1b9f9) border - Options with key highlighted in bold
Status Bar (Bottom)
Opus · 12.4K tokens · $0.04 · 3.2s · normal
- Persistent bottom line
- Token count, cost, elapsed time, effort level
- Muted color
Subagent Indicators
Each subagent gets a unique color from a palette: red, blue, green, yellow, purple, orange, pink, cyan
6. Layout & Spacing
- Min terminal width:
80 - Ideal terminal width:
120 - Padding inside tool blocks: 1 line top/bottom, 1 char left/right
- Gap between messages: 1 line with subtle separator
- Indent level: 2 spaces
Alignment Principles
- Left-align all conversation content
- Tool call blocks are indented slightly
- Status bar persistent at bottom
- No centering except startup logo
- Conversation flows top-to-bottom
7. Icons & Indicators
| Purpose | Icon | Fallback (ASCII) |
|---|---|---|
| Success | ✓ |
+ |
| Error | ✗ |
x |
| Warning | ⚠ |
! |
| Thinking | · ✢ ✳ ✶ ✻ ✽ |
* |
| Prompt | > |
> |
| Running | ▸ |
> |
| Bullet | • |
- |
8. Animation & Motion
Thinking Spinner (Signature)
Frames: · → ✢ → ✳ → ✶ → ✻ → ✽ → ✻ → ✶ → ✳ → ✢ → · ...
- 120ms per frame
- Primary terracotta color with shimmer to lighter terracotta
- Reverse-mirror cycle (goes up then back down)
- Random whimsical verb: “Cogitating…”, “Percolating…”, “Moonwalking…”
Input Border Shimmer
- Dashed input border shimmers between
#888888and#A6A6A6 - Subtle, gentle animation
Transitions
- No animated transitions between states
- Streaming text appears as received from API
- Tool blocks appear with distinct hot pink border
Progress
- Counter-based: “Reading files… (3/12)”
- No progress bars
- Spinner + verb for indeterminate waits
9. Agent Prompt Guide
Quick Reference
Background: terminal default (dark)
Foreground: #ffffff (white)
Terracotta: #d77757 (brand primary — thinking, accents)
Hot pink: #fd5db1 (tool/bash call borders)
Lavender: #b1b9f9 (permission dialogs)
Green: #4eba65 (success)
Red-pink: #ff6b80 (errors)
Amber: #ffc107 (warnings)
Purple: #af87ff (auto-accept mode)
Gray: #888888 (input borders, muted)
Input: - - | - (dashed ASCII, NOT Unicode box-drawing)
Tool: ┌─┐│└─┘ (single line, hot pink)
Style: warm terracotta accent, dashed input, hot pink tools, whimsical thinking verbs
Example Prompts
- “Build an AI chat CLI: Claude Code style, dashed ASCII input border, hot pink bordered tool call blocks, terracotta thinking spinner with random verbs, white response text”
- “Create a coding agent TUI: warm terracotta accent, lavender permission dialogs, hot pink for tool execution, whimsical spinner (· ✢ ✳ ✶ ✻ ✽), status bar with token count”
- “Design a conversational CLI: Claude Code aesthetic, minimal chrome, dashed input box, colored tool borders (pink=bash, lavender=permission), shimmer animations”
Do’s and Don’ts
Do
- Use terracotta (
#d77757) as the primary brand accent — it’s warm and distinctive - Use dashed ASCII borders for input — NOT Unicode box-drawing (this is deliberate)
- Use hot pink for tool call borders — makes them visually pop
- Use whimsical, playful language for loading states
- Keep response text pure white — readability is paramount
Don’t
- Don’t use cold/corporate blues as primary accent — Claude Code is warm
- Don’t use Unicode box-drawing for the input area — dashed ASCII is the signature
- Don’t over-border — most content should flow without frames
- Don’t use generic “Loading…” — the random verbs are part of the personality
- Don’t colorize AI response body text — white for trust and readability