Repository: rowboatlabs/rowboat
Stars: 12626
CLAUDE.md
CLAUDE.md - AI Coding Agent Context
This file provides context for AI coding agents working on the Rowboat monorepo.
Quick Reference Commands
Electron App (apps/x)
cd apps/x && pnpm install # Install dependencies
cd apps/x && npm run deps # Build workspace packages (shared β core β preload)
cd apps/x && npm run dev # Development mode (builds deps, runs app)
cd apps/x && npm run lint # Lint check
cd apps/x/apps/main && npm run package # Production build (.app)
cd apps/x/apps/main && npm run make # Create DMG distributableMonorepo Structure
rowboat/
βββ apps/
β βββ x/ # Electron desktop app (focus of this doc)
β βββ rowboat/ # Next.js web dashboard
β βββ rowboatx/ # Next.js frontend
β βββ cli/ # CLI tool
β βββ python-sdk/ # Python SDK
β βββ docs/ # Documentation site
βββ CLAUDE.md # This file
βββ README.md # User-facing readmeElectron App Architecture (apps/x)
The Electron app is a nested pnpm workspace with its own package management.
apps/x/
βββ package.json # Workspace root, dev scripts
βββ pnpm-workspace.yaml # Defines workspace packages
βββ pnpm-lock.yaml # Lockfile
βββ apps/
β βββ main/ # Electron main process
β β βββ src/ # Main process source
β β βββ forge.config.cjs # Electron Forge config
β β βββ bundle.mjs # esbuild bundler
β βββ renderer/ # React UI (Vite)
β β βββ src/ # React components
β β βββ vite.config.ts
β βββ preload/ # Electron preload scripts
β βββ src/
βββ packages/
βββ shared/ # @x/shared - Types, utilities, validators
βββ core/ # @x/core - Business logic, AI, OAuth, MCPBuild Order (Dependencies)
shared (no deps)
β
core (depends on shared)
β
preload (depends on shared)
β
renderer (depends on shared)
main (depends on shared, core)The npm run deps command builds: shared β core β preload
Key Entry Points
| Component | Entry | Output |
|-----------|-------|--------|
| main | apps/main/src/main.ts | .package/dist/main.cjs |
| renderer | apps/renderer/src/main.tsx | apps/renderer/dist/ |
| preload | apps/preload/src/preload.ts | apps/preload/dist/preload.js |
Build System
- Package manager: pnpm (required for workspace:* protocol)
- Main bundler: esbuild (bundles to single CommonJS file)
- Renderer bundler: Vite
- Packaging: Electron Forge
- TypeScript: ES2022 target
Why esbuild bundling?
pnpm uses symlinks for workspace packages. Electron Forge's dependency walker can't follow these symlinks. esbuild bundles everything into a single file, eliminating the need for node_modules in the packaged app.
Key Files Reference
| Purpose | File |
|---------|------|
| Electron main entry | apps/x/apps/main/src/main.ts |
| React app entry | apps/x/apps/renderer/src/main.tsx |
| Forge config (packaging) | apps/x/apps/main/forge.config.cjs |
| Main process bundler | apps/x/apps/main/bundle.mjs |
| Vite config | apps/x/apps/renderer/vite.config.ts |
| Shared types | apps/x/packages/shared/src/ |
| Core business logic | apps/x/packages/core/src/ |
| Workspace config | apps/x/pnpm-workspace.yaml |
| Root scripts | apps/x/package.json |
Common Tasks
LLM configuration (single provider)
- Config file:
~/.rowboat/config/models.json- Schema:
{ provider: { flavor, apiKey?, baseURL?, headers? }, model: string }- Models catalog cache:
~/.rowboat/config/models.dev.json (OpenAI/Anthropic/Google only)Add a new shared type
1. Edit
apps/x/packages/shared/src/2. Run
cd apps/x && npm run deps to rebuildModify main process
1. Edit
apps/x/apps/main/src/2. Restart dev server (main doesn't hot-reload)
Modify renderer (React UI)
1. Edit
apps/x/apps/renderer/src/2. Changes hot-reload automatically in dev mode
Add a new dependency to main
1.
cd apps/x/apps/main && pnpm add <package>2. Import in source - esbuild will bundle it
Verify compilation
cd apps/x && npm run deps && npm run lintTech Stack
| Layer | Technology |
|-------|------------|
| Desktop | Electron 39.x |
| UI | React 19, Vite 7 |
| Styling | TailwindCSS, Radix UI |
| State | React hooks |
| AI | Vercel AI SDK, OpenAI/Anthropic/Google/OpenRouter providers, Vercel AI Gateway, Ollama, models.dev catalog |
| IPC | Electron contextBridge |
| Build | TypeScript 5.9, esbuild, Electron Forge |
Environment Variables (for packaging)
For production builds with code signing:
- APPLE_ID - Apple Developer ID
- APPLE_PASSWORD - App-specific password
- APPLE_TEAM_ID - Team ID
Not required for local development.
README.md
<a href="https://www.youtube.com/watch?v=5AWoGo-L16I" target="_blank" rel="noopener noreferrer">
<img width="1339" height="607" alt="rowboat-github-2" src="https://github.com/user-attachments/assets/fc463b99-01b3-401c-b4a4-044dad480901" />
</a>
<h5 align="center">
<p align="center" style="display: flex; justify-content: center; gap: 20px; align-items: center;">
<a href="https://trendshift.io/repositories/13609" target="blank">
<img src="https://trendshift.io/api/badge/repositories/13609" alt="rowboatlabs/rowboat | Trendshift" width="250" height="55"/>
</a>
</p>
<p align="center">
<a href="https://www.rowboatlabs.com/" target="_blank" rel="noopener">
<img alt="Website" src="https://img.shields.io/badge/Website-10b981?labelColor=10b981&logo=window&logoColor=white">
</a>
<a href="https://discord.gg/wajrgmJQ6b" target="_blank" rel="noopener">
<img alt="Discord" src="https://img.shields.io/badge/Discord-5865F2?logo=discord&logoColor=white&labelColor=5865F2">
</a>
<a href="https://x.com/intent/user?screen_name=rowboatlabshq" target="_blank" rel="noopener">
<img alt="Twitter" src="https://img.shields.io/twitter/follow/rowboatlabshq?style=social">
</a>
<a href="https://www.ycombinator.com" target="_blank" rel="noopener">
<img alt="Y Combinator" src="https://img.shields.io/badge/Y%20Combinator-S24-orange">
</a>
</p>
Rowboat
Open-source AI coworker that turns work into a knowledge graph and acts on it
</h5>
Rowboat connects to your email and meeting notes, builds a long-lived knowledge graph, and uses that context to help you get work done - privately, on your machine.
You can do things like:
- Build me a deck about our next quarter roadmap β generates a PDF using context from your knowledge graph
- Prep me for my meeting with Alex β pulls past decisions, open questions, and relevant threads into a crisp brief (or a voice note)
- Track a person, company or topic through live notes
- Visualize, edit, and update your knowledge graph anytime (itβs just Markdown)
- Record voice memos that automatically capture and update key takeaways in the graph
Download latest for Mac/Windows/Linux: Download
β If you find Rowboat useful, please star the repo. It helps more people find it.
Demo

---
Installation
Download latest for Mac/Windows/Linux: Download
All release files: https://github.com/rowboatlabs/rowboat/releases/latest
Google setup
To connect Google services (Gmail, Calendar, and Drive), follow Google setup.
Voice input
To enable voice input and voice notes (optional), add a Deepgram API key in
~/.rowboat/config/deepgram.jsonVoice output
To enable voice output (optional), add an ElevenLabs API key in ~/.rowboat/config/elevenlabs.json
Web search
To use Exa research search (optional), add the Exa API key in ~/.rowboat/config/exa-search.json
External tools
To enable external tools (optional), you can add any MCP server or use Composio tools by adding an API key in ~/.rowboat/config/composio.json
All API key files use the same format:
{
"apiKey": "<key>"
}What it does
Rowboat is a local-first AI coworker that can:
- Remember the important context you donβt want to re-explain (people, projects, decisions, commitments)
- Understand whatβs relevant right now (before a meeting, while replying to an email, when writing a doc)
- Help you act by drafting, summarizing, planning, and producing real artifacts (briefs, emails, docs, PDF slides)
Under the hood, Rowboat maintains an Obsidian-compatible vault of plain Markdown notes with backlinks β a transparent βworking memoryβ you can inspect and edit.
Integrations
Rowboat builds memory from the work you already do, including:
- Gmail (email)
- Google Calendar
- Rowboat meeting notes or Fireflies
It also contains a library of product integrations through Composio.dev
How itβs different
Most AI tools reconstruct context on demand by searching transcripts or documents.
Rowboat maintains long-lived knowledge instead:
- context accumulates over time
- relationships are explicit and inspectable
- notes are editable by you, not hidden inside a model
- everything lives on your machine as plain Markdown
The result is memory that compounds, rather than retrieval that starts cold every time.
What you can do with it
- Meeting prep from prior decisions, threads, and open questions
- Email drafting grounded in history and commitments
- Docs & decks generated from your ongoing context (including PDF slides)
- Follow-ups: capture decisions, action items, and owners so nothing gets dropped
- On-your-machine help: create files, summarize into notes, and run workflows using local tools (with explicit, reviewable actions)
Live notes
Live notes are notes that stay updated automatically. You can create one by typing '@rowboat' on a note.
- Track a competitor or market topic across X, Reddit, and the news
- Monitor a person, project, or deal across web or your communications
- Keep a running summary of any subject you care about
Everything is written back into your local Markdown vault. You control what runs and when.
Bring your own model
Rowboat works with the model setup you prefer:
- Local models via Ollama or LM Studio
- Hosted models (bring your own API key/provider)
- Swap models anytime β your data stays in your local Markdown vault
Extend Rowboat with tools (MCP)
Rowboat can connect to external tools and services via Model Context Protocol (MCP).
That means you can plug in (for example) search, databases, CRMs, support tools, and automations - or your own internal tools.
Examples: Exa (web search), Twitter/X, ElevenLabs (voice), Slack, Linear/Jira, GitHub, and more.
Local-first by design
- All data is stored locally as plain Markdown
- No proprietary formats or hosted lock-in
- You can inspect, edit, back up, or delete everything at any time
---
<div align="center">