rowboat

GitHub

Open-source AI coworker, with memory

AI Prompts & Endpoints
Agent Skills View CodeWiki Knowledge Base

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

bash

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 distributable

Monorepo Structure

text
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 readme

Electron App Architecture (apps/x)

The Electron app is a nested pnpm workspace with its own package management.

text
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, MCP

Build Order (Dependencies)

text
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 rebuild

Modify 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


bash
cd apps/x && npm run deps && npm run lint

Tech 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


![Demo](https://www.youtube.com/watch?v=7xTpciZCfpw)

Watch the full video

---

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.json

Voice output

To enable voice output (optional), add an ElevenLabs API key in ~/.rowboat/config/elevenlabs.json

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:

text
{
"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">

Discord Β· Twitter
</div>