12 KiB
12 KiB
version, name, description, omitted, colors, typography, rounded, spacing, components
| version | name | description | omitted | colors | typography | rounded | spacing | components | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| alpha | Hermes Mobile Design System | High-density, minimal Material 3 interface for the Hermes Agent Android client |
|
|
|
|
|
Overview
Hermes Mobile (com.m57.hermescontrol) is a high-density, keyboard-first, distraction-free Android client for the Hermes Agent platform. The UI philosophy prioritizes information density, low battery drain (OLED-friendly), and instantaneous feedback over decorative visual noise.
The visual language follows Material 3 guidelines strictly adapted for developer utilities:
- Tone: Technical, focused, utilitarian, crisp.
- Form Factors: Native Android phones, foldables, and tablets via adaptive Navigation 3 layouts.
- Core Principle: Zero fluff. Fast render cycles, explicit states, flat surfaces, and zero visual ambiguity.
Colors
The app supports 6 dynamic presets managed by PaletteTemplate.kt (Default/Slate, Monochrome, Gruvbox, Catppuccin, AMOLED, Nord), plus dynamic Android 12+ wallpaper theming:
- Surfaces:
bg-root: Deep canvas background (#0F1416in Default Dark,#000000in AMOLED).bg-surface: Top app bars, bottom sheets, navigation drawer background.bg-surface-container: Assistant message bubbles, session list cards, settings group panels (#1B2022).bg-surface-container-high: Dialogs, interactive chips, elevated tool surfaces (#252B2D).bg-surface-container-highest: Selected containers and active pills (#303638).
- Accents & Tints:
- Primary accent (
#80D5D2Slate Bright Teal) is reserved for interactive controls, user bubbles, selected drawer icons, and active tabs. - Selected navigation drawer items MUST tint icons directly to
primaryto prevent low-contrast grey-on-grey visual loss.
- Primary accent (
- Semantic Status Colors (
HermesStatusColors):- Status indicators (
success,warning,error,info) must always satisfy a minimum 3:1 contrast ratio against their respective container backgrounds (onErrorContaineronerrorContainer). - Every theme preset must explicitly define
onErrorContainer(#FFB4ABin Default Dark) to prevent invisible text bugs.
- Status indicators (
Typography
- UI Fonts: System
Roboto/ sans-serif with strict semantic scaling to prevent layout shifts. - Code & Logs: Tabular
JetBrains Monofor terminal traces, tool payloads, JSON viewers, and memory tokens. - Scale Discipline (
Type.kt):- Screen titles:
20sp(title-large) with 0.1sp tracking. - Card headings:
16sp(title-medium) with 0.15sp tracking. - Chat content:
16sp(body-large) with 24sp line-height for readability. - Metadata & Subtitles:
14sp(body-medium) or12sp(body-small/label-medium). - Hero stats & Display numbers:
44sp(display-large) down to30sp(display-small).
- Screen titles:
Layout
- Scaffolding (
HermesScaffold):- Global
TopAppBarcontaining screen title, connection indicator, profile switch dropdown, and quick action icon buttons. - No Floating Action Buttons (FABs): Primary triggers live in the top-bar actions or fixed bottom composer docks.
- Scaffold Padding Foot-Gun Rule: Content lambdas must NEVER apply
Modifier.padding(paddingValues)on root children — the scaffold's internalBoxalready handles top-bar offsets.
- Global
- Spacing Scale (
Spacing.kt):xs: 2dp: Hairline gaps, micro dividers.sm: 6dp: Default inner padding, icon-to-text gap.md: 12dp: Card content, screen edge, section gaps.lg: 18dp: Hero spacing, between major sections.xl: 24dp: Full-feature spacing, large section break.xxl: 36dp: Maximum outer margin.
- Controls & Navigation:
- Horizontal chip bars must be single-row with
horizontalScroll(). Never stack chips vertically into multi-row wraps. - Dropdown pickers take precedence over cycle buttons to ensure all options are discoverable in one tap.
- Horizontal chip bars must be single-row with
Elevation & Depth
- Elevation Language: Surface luminance layering (
surfaceContainertiers) and 1px borders (outline/outlineVariant) replace heavy drop shadows. - Flat Surface Rule:
- Chat background is flat
colorScheme.background. - User message bubbles use solid
colorScheme.primary(no multi-color gradients). - Shimmer effects (
StateViews.kt) are used strictly as animated loading states, never as static background decorations.
- Chat background is flat
Shapes
- Corner Radii Hierarchy (
Shapes.kt):0dp(rounded.none): Terminal panels, full-bleed code blocks.4dp(rounded.extra-small): Chips, badges, inline toggles.8dp(rounded.small): Text fields, small cards, code cards.12dp(rounded.medium): Standard cards, list rows, message bubbles, dialogs.16dp(rounded.large): Large cards, bottom sheets.28dp(rounded.extra-large): Feature cards, full-bleed surfaces.9999dp(rounded.full): Interactive filter chips, timeline markers, circular icon buttons.
Components
- Top App Bar: Flat surface, 56dp height, contains title marquee, WS connection status pill, and action buttons.
- Chat Timeline:
- User Bubbles: Right-aligned, solid primary fill, high-contrast text (
onPrimary). - Assistant Bubbles: Left-aligned,
surfaceContainerfill (#1B2022), full Markdown renderer support. - Tool Bubbles: Expandable rows with tool vector icon, execution state indicator, parameter summary, and full payload bottom sheet.
- User Bubbles: Right-aligned, solid primary fill, high-contrast text (
- Action & Filter Chips:
- Must represent real system state (e.g., active model, selected profile, filter criteria).
- Active chips:
primaryContainerfill withonPrimaryContainertext/icon. - Inactive chips:
surfaceContainerHighfill withtext-secondarytext. - Disabled controls: Visually greyed out with
alpha = 0.38f.
- Dialogs & Bottom Sheets:
- Standard CRUD flows must provide all 4 operations (Create, Read, Update, Delete) with confirmation gates for destructive actions.
- Every managed resource must have a discoverable navigation surface in the UI.
Do's and Don'ts
Do's
- DO use official
androidx.compose.material.iconsvectors for every UI element and status indicator. - DO use
Icons.AutoMirrored.Filled.*for directional icons (ArrowBack,Send,VolumeUp,MenuBook). - DO maintain
\ge 4.5:1text contrast and\ge 3:1container contrast across all 6 presets. - DO use Android string
<plurals>for count labels (1 agentvs2 agents). - DO grey out disabled controls (
enabled = false) visibly. - DO ensure every created resource has a discoverable UI list or navigation tab.
Don'ts
- DON'T render emoji glyphs (
✅,❌,⭕,🔄,⚡,🛠,📄) in the app UI — replace them with real vector icons. - DON'T use Floating Action Buttons (FABs); anchor actions in top bars or fixed docks.
- DON'T apply
Modifier.padding(paddingValues)insideHermesScaffoldcontent lambdas. - DON'T use gradient backgrounds on chat surfaces or message bubbles.
- DON'T create multi-layer nested cards or unnecessary decorative borders.
- DON'T use cycle buttons where a dropdown menu provides immediate option visibility.