The Pi terminal is Balaur’s owned daily surface. It should feel like an old-school fantasy RPG command interface, but still be compact, truthful, and useful.
avatar default: portrait only, no badge/name.badge: [ <BALAUR_USER_NAME> ] | and [ Balaur ] |.both: portrait first, badge underneath.auto: Kitty PNG image when supported; badge fallback otherwise.BALAUR_AVATAR_RECENT_LIMIT=10: cap rich image avatars to recent panels; older history uses badges for performance.both mode it shows the thinking badge under the portrait.local/privatefrontier/opt-ingit:branch*both mode the icon gets a compact [ tool ] badge under it.Nameplates use a fixed-width gutter across all roles, so messages align vertically.
Good:
[ cico ] | ask
[ Balaur ] | answer
Rules:
BALAUR_USER_NAME in .env, falling back to $USER, then You.[ Name ], no @/B/?/T prefix.BALAUR_AVATAR_MODE=badge|avatar|both.BALAUR_AVATAR_BACKEND=auto|image|ansi.BALAUR_AVATAR_RECENT_LIMIT=<n|all>; default 10, 0 means active-only rich avatars./balaur-avatar [badge|avatar|both] [auto|image|ansi].Mode/backend source of truth: ../pi/lib/ui/sprites.ts. Canonical role sprite source of truth: ../pi/lib/ui/pixel-avatar.ts.
Current internal sprite catalog:
@ user/player
B Balaur idle
? Balaur thinking
T tool work
M memory/life tracking
+ doctor/health check
* self-evolution/new capability
Only @ and B are currently rendered in message nameplates. The other states are reserved so the interface can evolve without inventing new visual language each time.
The working state should be portable and quiet.
Rules:
Hmm... I will think about that..both mode, include a simple [ Balaur ] badge under the thinking portrait.Messages use a quiet ASCII RPG dialog panel: a small avatar/nameplate box on the left, message body on the right, connected by a shared border.
Short message:
+----------+----------------+
| | answer |
| avatar | |
| avatar | |
| | |
+----------+----------------+
Long message:
+----------+----------------+
| | answer |
| avatar | more |
| avatar | more |
| | more |
+----------+ more |
| more |
+----------------+
Rules:
+, -, | only; no box-drawing in the fallback terminal UI.Tool execution uses the same panel language as chat turns:
+----------+----------------+
| | read file |
| hammer | |
| hammer | result/preview |
| | |
+----------+----------------+
Rules:
read), needle/loom shuttle (edit), quill (write), anvil (bash), lens/folder (grep/find/ls), Keeper (memory/life tracking), Warden (doctor/health), New Head (skill_write/evolution), and Seer (open-websearch/web retrieval). Unknown tools fall back to the maker’s hammer. In both mode, tools show a truncated [ tool ] badge under the icon. Tool avatars animate only while actively running; pending/ok/error panels are static.The text input should use the same restrained ASCII panel language as chat turns, including the user’s avatar/nameplate on the left so it visually becomes the next user message when submitted:
+----------+-- input -----------+
| | > draft message |
| avatar | |
| avatar | |
| | |
+----------+--------------------+
Rules:
input label; teal > prompt.Header should be compact, width-aware, and ASCII pixel-framed. Target shape:
+-- B A L A U R ----------------+
| local-first | private | yours | FOSS |
+--------------------------------+
The header may truncate to terminal width, but must not exceed three lines. On wide terminals it may use the third line for the Basm motto: woven, not rendered.
Footer should be one line:
Balaur local/private | qwen/... | git:main* | 12 tools | ctx [===---] 42%
Rules:
local/private for frontier models.Use Basm palette:
See avatars.md.
avatar/both use canonical 64×64 PNG sprite sheets: one 3×3, 9-frame sheet per avatar/tool.BALAUR_AVATAR_BACKEND=auto uses Kitty PNG images in Kitty-compatible terminals and badges elsewhere.Pi currently exposes custom renderers only for custom messages, not built-in user/assistant role messages. Balaur decorates Pi’s exported UserMessageComponent and AssistantMessageComponent in ../pi/lib/ui/avatars.ts. Keep this patch small, idempotent, and easy to remove if Pi adds official role-rendering hooks.