Endo Shell — Prompt Design Gallery
10 prompt styles for a customizable shell · truecolor · unicode · fixed-width grid
Single character prompt. Zero noise. Directory via window title / OSC 7.
❯ ls -la
drwxr-xr-x 12 user user 4096 Feb 13 14:22 .
-rw-r--r-- 1 user user 1847 Feb 13 14:20 CLAUDE.md
❯
Functional programming nod with λ symbol. Tilde-contracted path. Exit status on error only.
~/projects/endo λ cargo build 2>/dev/null
Compiling endo v0.1.0
~/projects/endo λ false
~/projects/endo [1] λ
Vertical left accent bar inspired by code editors. Current Endo default style.
▎ ~/projects/endo on master
▎ git status
On branch master
Changes not staged for commit:
modified: src/shell/SyntaxHighlighter.cpp
▎ ~/projects/endo on master
▎
Angled powerline segments with git branch, directory, and execution context.
endo master 2 ⤫
❯ cmake --build --preset clang-debug
[100%] Built target endo
endo master
❯
Full prompt shown only on active line. Previous prompts collapse to a simple arrow + duration badge. Reduces visual clutter in scrollback.
❯ ls src/ 2.1ms
❯ cmake --build --preset clang-debug 4.3s
❯ false ✗ 1 0.8ms
╭─ ~/projects/endo on master [2⤫]
╰─ ❯
Left: path + git. Right-aligned: clock, battery, exec time. Demonstrates right-prompt capability.
~/projects/endo master 87% │ 14:22:08
❯ ctest --preset=clang-debug
100% tests passed, 0 tests failed
~/projects/endo master ⏱ 3.2s │ 87% │ 14:22:11
❯
Box-drawing characters create structured info blocks. Each block is a "module" that can be enabled/disabled.
┌─╮──────────────────────────────────────────────────────
│ ~/projects/endo master ⤫2 ✚1 cmake │ C++23 │ clang-18
└───────────────────────────────────────────────────────
❯❯ cmake --build --preset clang-debug
[100%] Built target endo
┌─╮──────────────────────────────────────────────────────
│ ~/projects/endo master ⤫2 ✚1 ✓ 4.3s
└───────────────────────────────────────────────────────
❯❯
Truecolor gradient on the path and arrow. Demonstrates per-character color interpolation. Visually distinctive.
~/projects/endo
➤➤➤ git log --oneline -3
c20a91d docs: mark Phase 6.4.3 Table Rendering complete
ad31c1c lang: route bare ps/ls/jobs as structured F# expressions
af6f416 table: add terminal-width-aware column shrinking
~/projects/endo
➤➤➤
Prompt morphs based on context: git status colors the branch, error changes the arrow, SSH adds host, toolchain detected from project. Shows only what matters.
┌ normal ─ clean repo
endo master ❯ echo "all clean"
all clean
┌ dirty working tree ─ branch turns yellow
endo master ⤫2 ❯ make test
FAIL: 2 tests failed
┌ command failed ─ arrow turns red, exit code shown
endo master ⤫2 ❯[2] vi src/main.cpp
┌ SSH session ─ hostname prepended automatically
devbox:endo master ❯ uptime
14:22:08 up 42 days, 3:17, 2 users
┌ long-running command ─ duration badge appears
endo master ⏱12.4s ❯
Purpose-built for Endo: functional pipe symbol, F# mode indicator, structured output badge, two-line with rounded corners. The "brand" prompt.
╭─ ~/projects/endo master │ 𝑓# │ ▷ ps ls jobs
╰─ |> ps |> filter (fun p -> p.cpu > 5.0) |> each println
PID CPU% MEM% COMMAND
1234 12.3 4.1 firefox
5678 8.7 2.3 code
╭─ ~/projects/endo master │ 𝑓# │ ✓ ⏱1.2s
╰─ |>
Design Notes & Customization Engine Implications
- Prompt Sections as Modules: Each info element (path, git, duration, clock, battery, exit status) is an independent
PromptModule that can be enabled/disabled/reordered.
- Conditional Visibility: Modules like exit status (#2, #9), duration (#5, #6, #9, #10), SSH hostname (#9), and battery (#6) only render when their condition is met (error, >threshold, SSH session, on battery).
- Transient Prompt (#5): After command execution, the full prompt collapses to a minimal form in scrollback. This requires re-rendering the previous prompt line.
- Right Prompt (#6): Content right-aligned on the info line. Requires knowing terminal width and padding calculation.
- Gradient Support (#8): Per-character truecolor interpolation between two RGB endpoints. Engine needs a
gradient(start_color, end_color, text) primitive.
- Layout Models: Single-line (#1, #2, #9), two-line (#3, #5, #10), boxed (#7), and powerline (#4). The engine should support a
layout property.
- Separator Glyphs: Powerline (#4) uses
/. Box-drawing (#5, #7, #10) uses ╭╰─│. Bar (#3) uses ▎. These are configurable separator styles.
- Color Semantics: Colors should be theme-aware tokens (
prompt.path, prompt.git.clean, prompt.git.dirty, prompt.error) not hardcoded RGB, enabling theme switching.
- Suggested Config Format (YAML):
prompt:
layout: two-line # single-line | two-line | boxed
separator: rounded # arrow | powerline | rounded | bar | none
modules:
line1: [path, git, duration?, exit_status?]
line2: [indicator]
right_prompt: [clock, battery?]
transient: minimal # off | minimal | arrow
indicator: "|>" # character(s) before cursor
theme: tokyo-night # color theme reference
- Module Examples:
path (tilde-contracted CWD, depth limit), git (branch, dirty/staged counts), duration (last cmd time, threshold), exit_status (nonzero only), clock (HH:MM:SS), battery (icon + percentage), hostname (SSH only), toolchain (detected from project), fsharp_mode (Endo-specific indicator).