Use this skill when changing the Astral Hermes or Hermes Spawn chat interface.
/home/avalon/apps/hermes-ui-kitfiremountain/hermes-ui-kit private repo@hermes/ui-kit/home/avalon/apps/astral-hermes-platform/web/home/avalon/apps/hermes-spawn/home/avalon/apps/hermes-mobileGeneric chat-shell work belongs in @hermes/ui-kit:
App-specific behavior stays in the consuming app and is passed via props/slots:
Do not duplicate shared chat UI directly in Astral or Spawn unless it is a temporary spike that gets moved back to the kit before finishing.
Consumers currently depend on the kit via local file dependencies:
"@hermes/ui-kit": "file:../../hermes-ui-kit""@hermes/ui-kit": "file:../hermes-ui-kit""@hermes/ui-kit": "file:../hermes-ui-kit"When wiring a Vite app to this sibling local React package, add/keep a consumer-side vite.config.js that dedupes and aliases React back to the consumer's own node_modules:
resolve: {
dedupe: ['react', 'react-dom'],
alias: {
react: path.resolve(__dirname, 'node_modules/react'),
'react-dom': path.resolve(__dirname, 'node_modules/react-dom'),
},
}
This avoids duplicate-React/runtime-hook problems and also prevents local package builds from failing to resolve react from the sibling package path.
references/hermes-app-visual-language.md for tokens, layout cues, and verification notes.@hermes/ui-kit generic. Do not move tenant API calls, Astral transit/timewave logic, Spawn provider/provisioning logic into the kit.{ audioBase64, mimeType, waveform, audioUrl } to the consumer. Transcription credentials and API calls stay server-side in the consuming app.progress: string[], optional toolCalls, and optional images; consuming apps translate their actual SSE/tool events into those fields. Add/update shape tests whenever normalized message fields change.sidebarSections, sidebarPreview, onSidebarItemClick) rather than hard-coding file APIs.sessionId through the app-server adapter.SharedHermesChat inside a mobile/PWA app shell, let the shared chat own the chat header and drawer on the chat route. Avoid stacking an app-level header/hamburger on top of the kit header; it creates duplicate menu buttons and makes the chat feel like a nested widget. If the kit's floating and topbar drawer toggles both appear on mobile, hide one explicitly or add a generic kit prop rather than adding another consumer-side control.overflow-x: hidden, overscroll-behavior-x: none, and touch-action: pan-y on the full-screen chat shell/panel.sessionId. Opening an existing session should fetch real transcript messages in pages (latest chunk first, with "load older" pagination) rather than showing only a placeholder, so users can scroll back without overloading the app. If adding a history pager/thread header above the shared message list, verify the grid rows and force the message list to remain the scroll container; otherwise loaded sessions can become non-scrollable with strange mobile margins. See references/hermes-mobile-chat-integration-pitfalls-2026-06.md.width:100% or by applying broad overflow:hidden; that clips long imported messages and collapses chat semantics. Instead use min-width:0, shell/thread overflow-x:hidden, overscroll-behavior-x:none, touch-action:pan-y, and wrapping rules for p, pre, and code. Test with old/resumed sessions containing long copied text, not just new chat. See references/hermes-mobile-loaded-session-chat-debugging-2026-06.md.react from /home/avalon/apps/hermes-ui-kit/src/..., check the consumer vite.config.js dedupe/alias and the kit peerDependencies/local devDependencies before changing component code.references/astral-spawn-chat-extraction-2026-06.md — session notes for the initial extraction into a private sibling repo and the Vite/local-package workaround.references/mobile-pwa-chat-shell-and-vps-console.md — mobile PWA pattern for Desktop-like thread drawers, Hermes session resume, LLM wiki browsing, and all-PM2 VPS status links.references/hermes-mobile-sidebar-chat-redesign-2026-06.md — session notes for making Hermes Mobile a @hermes/ui-kit consumer, adding progress/tool metadata, voice-note adapter flow, full app sidebar navigation, and multi-consumer verification.references/hermes-mobile-chat-integration-pitfalls-2026-06.md — duplicate-hamburger, iOS horizontal rubber-band, and unexplained wiki-vault dropdown lessons from integrating the shared chat into Hermes Mobile.references/hermes-mobile-loaded-session-chat-debugging-2026-06.md — resumed-session mobile chat lessons: horizontal overflow, clipped bubbles, markdown rendering, history pager grid rows, and verification checklist.Run all of these after shared UI changes:
npm --prefix /home/avalon/apps/hermes-ui-kit test
npm --prefix /home/avalon/apps/hermes-spawn test
npm --prefix /home/avalon/apps/astral-hermes-platform/web run build
npm --prefix /home/avalon/apps/hermes-spawn run build
For deployment changes, also restart/verify PM2 apps per the vps-app-deployment skill.