Feishu themes and desktop skin for Paseo 0.8–0.12; native mobile palette support
Supported platforms: macOS.
paseo plugin add Laokashouji/paseo-feishu-ui --ref c1d1301cee172e298929c58e91d505567a3f0f65Git security status and fallback installation are pinned to commit c1d1301cee17.
From the plugin's README
Requires Paseo 0.8.x–0.12.x on both the app and daemon. The plugin manifest accepts >=0.8.0 <0.13.0.
paseo plugin install github:Laokashouji/paseo-feishu-ui --ref main
Select 飞书 · 浅色 (light) or 飞书 · 暗黑 (dark) in Settings → Appearance. Install on every daemon whose conversations should receive thinking previews; timeline contributions belong to the conversation's host.
paseo plugin update paseo-feishu-ui
paseo plugin disable paseo-feishu-ui
paseo plugin enable paseo-feishu-ui
paseo plugin remove paseo-feishu-ui
Git pushes do not automatically update installed copies. For local source development, run paseo plugin reload paseo-feishu-ui after changes; no daemon restart is needed.
README
English | 简体中文
Feishu-inspired light and dark themes for Paseo, with a desktop workspace layout, continuous assistant bubbles, compact tool cards, and first-line thinking previews.
An independent community project. It is not affiliated with Feishu/Lark, ByteDance, or the Paseo maintainers, and does not integrate with Feishu services.
Requires Paseo 0.8.x–0.12.x on both the app and daemon. The plugin manifest accepts >=0.8.0 <0.13.0.
paseo plugin install github:Laokashouji/paseo-feishu-ui --ref main
Select 飞书 · 浅色 (light) or 飞书 · 暗黑 (dark) in Settings → Appearance. Install on every daemon whose conversations should receive thinking previews; timeline contributions belong to the conversation's host.
paseo plugin update paseo-feishu-ui
paseo plugin disable paseo-feishu-ui
paseo plugin enable paseo-feishu-ui
paseo plugin remove paseo-feishu-ui
Git pushes do not automatically update installed copies. For local source development, run paseo plugin reload paseo-feishu-ui after changes; no daemon restart is needed.
| Client | Support |
|---|---|
| macOS desktop, Paseo 0.8.0 / 0.9.1 | Layout, bubbles, thinking/tool cards; exercised in the installed app |
| Browser | DOM adapter and compact layouts; Chrome fixture tests at 1342px and 390px |
| Official iOS / Android | Theme colors only; native bubbles, tools and thinking are unchanged |
| Windows / Linux desktop | Not tested |
The desktop adapter depends on version-specific Paseo DOM structure. It is not a public host styling API; verify it after a Paseo upgrade. The UI labels are currently Chinese.
Native mobile appearance requires additional upstream APIs: compatibility details, upstream request #4697. The mobile HTML prototype in design/ is a design reference, not an implemented iOS feature.
Thinking previews use only provider-exposed text; the plugin cannot make a provider disclose otherwise unavailable reasoning. Switching away from the Feishu theme restores native reasoning and resets that row's expansion state. Tool status is inferred from native visual state; idle calls show a neutral details hint because the DOM cannot reliably distinguish completed from canceled calls.
These are design references with fictional data, not captures of a user's conversations. The implementation preserves native controls and differs in some details; the current thinking and command headings show first-line content.
Interactive design · Thinking/tool design
The plugin is client-only: no server entry, extra network connection, telemetry, credentials, model requests or workspace-file access. It reads Paseo's local appearance preference and rendered transcript structure to apply styles. The public reasoning transformer receives provider-exposed thought text; copy buttons write that text to the clipboard only when clicked. Dependencies are public npm packages, and package-lock.json uses registry.npmjs.org exclusively.
Paseo plugins execute trusted code inside the app. Inspect the adapter contract and the publication audit for the exact boundaries.
Node.js 20.19.4+ and npm:
npm ci --registry=https://registry.npmjs.org
npm run typecheck
npm test
npm run test:browser
Browser tests require an installed Chrome; set CHROME_PATH=/path/to/chrome outside the default macOS path. Tests use fictional RNW-shaped content and do not count as iPhone verification. See verification for native checks and coverage limits. The historical message-grouping.browser.js check is superseded by response-bubble.browser.js for shared bubbles.
index.client.tsx registers themes and settings. client/web.ts isolates browser integration and lifecycle cleanup. client/thinking.tsx renders exposed reasoning only while the web adapter's exact theme gate is active. Native iOS/Android exit before browser integration or reasoning replacement.
MIT. Product names belong to their respective owners.
Scanned 20 Oct 2026, 09:19 UTC from Laokashouji/paseo-feishu-ui.