A community-built, open-source UI for screenpipe — the AI screen & audio memory tool.
Three interfaces, one codebase:
- CLI — quick terminal commands (
screenpipe-ui search "meeting notes") - TUI — interactive terminal app with keyboard navigation
- Web — browser-based SPA
# CLI — search, health, activity
bunx @screenpipe-ui/cli search "your query"
bunx @screenpipe-ui/cli health
# TUI — interactive terminal app
bunx @screenpipe-ui/tuiAlso works with npx if you prefer.
git clone https://github.com/remoun/screenpipe-ui
cd screenpipe-ui
bun install
# CLI
bun cli search "your query"
bun cli health
bun cli activity --today
# TUI
bun tui
# Web UI
bun webRequires screenpipe running locally on port 3030.
packages/
core/ Framework-agnostic business logic, state stores, formatters
react/ React hooks bridging core stores (shared by TUI + Web)
cli/ Commander.js commands — no React, instant startup
tui/ Ink-based interactive terminal app
web/ Vite + React + Tailwind SPA
All packages share core for data fetching, state management, and formatting. The CLI calls core functions directly for speed. The TUI and Web both use React (Ink is a React renderer for terminals) and share hooks via react. Config persistence uses a PreferenceStorage adapter — Web uses localStorage, TUI uses ~/.config/screenpipe-ui/preferences.json.
- Search — full-text search across screen captures (OCR) and audio transcriptions
- Timeline — browse activity chronologically, filter by app
- Meetings — view detected meetings and transcripts
- Health — check screenpipe server status
- Date range presets — Today, Yesterday, Last 7 days, All (Web dropdown; TUI: press
dto cycle) - Config persistence — date range preference is saved (Web:
localStorage; TUI:~/.config/screenpipe-ui/preferences.json)
screenpipe-ui search "meeting notes" --type audio --limit 10
screenpipe-ui search "github" --app Chrome
screenpipe-ui health
screenpipe-ui activity --today
screenpipe-ui activity --app "VS Code"
# Custom server: --url or SCREENPIPE_BASE_URL
screenpipe-ui search "query" --url http://custom:3030
SCREENPIPE_BASE_URL=http://custom:3030 screenpipe-ui health| Key | Action |
|---|---|
Tab |
Switch between Search / Timeline / Meetings |
j / k or ↑ / ↓ |
Navigate up / down |
n / p or → / ← |
Next / prev (page in Search list; item in detail view) |
/ |
Focus search input |
Enter |
Expand / select item |
t |
Cycle content type (Search: all / ocr / audio / ui) |
d |
Cycle date range preset (Today → Yesterday → Last 7 days → All) |
q |
Quit |
# Run all tests (98 tests across packages)
bun test --recursive
# Run tests for a specific package
bun test packages/core/
# Dev server for web UI
bun webPRs must include tests for new behavior, bug fixes, or refactors. Run bun test --recursive and ensure all tests pass before submitting.
Publishing is automated via GitHub Actions: push to main with updated packages/*/package.json versions, or run the workflow manually. When bumping versions, run bun update and commit the updated bun.lock so workspace dependencies resolve correctly in published packages.
Setup: (1) Use npm Trusted Publishing (OIDC). No tokens needed. On npmjs.com, go to each package’s Settings → Trusted publishing, add a GitHub Actions publisher, and set workflow filename to publish.yml. Configure for: @screenpipe-ui/core, @screenpipe-ui/react, @screenpipe-ui/cli, @screenpipe-ui/tui. (2) In GitHub repo Settings → Environments, create an npm environment and add required reviewers if desired.
Manual publish:
bun run build && \
cd packages/core && bun publish && \
cd ../react && bun publish && \
cd ../cli && bun publish && \
cd ../tui && bun publishMIT