Our repo is https://github.com/rowboatlabs/rowboat, and there’s a demo video here: https://www.youtube.com/watch?v=et5yQABJ3xI
In a previous startup, we built a deep-learning product for enterprise support reps, including teams supporting P&G brands. Models took live notes, suggested replies, and recommended actions while support reps were on calls or handling emails. One lesson stuck with us: it's not enough for the AI to be right, the help has to show up where the work is happening.
So we added what we came to call “work surfaces”: dedicated areas for email, meetings, notes, browser, and parallel coding, where the assistant can help inside the workflow itself rather than only through chat:
- Email client: Rowboat has a simple email client that sorts incoming emails into important vs. everything else, and pre-creates drafts for important emails. As you edit and send emails, it takes notes on your style, so future drafts get closer to your voice.
- Meeting notes: We built a Granola-style local meeting notetaker. Notes are stored as plain Markdown files on your machine. After a meeting, Rowboat feeds the notes back into the knowledge graph and updates the relevant people, project, and topic notes.
- Browser: We added a built-in browser, isolated from your main one, where you can log in only to the accounts you want the assistant to help with. The assistant uses browser-use skills to navigate websites.
- Parallel coding: The code-mode inside Rowboat lets you spin multiple instances of Claude Code or Codex and either work with them directly or let Rowboat use your work context to orchestrate them. We built an ACP (Agent Client Protocol) client in Rowboat for this.
- Notes: Rowboat has an Obsidian-style local note-taking system. It comes with graph view, bases view, and voice notes. You can also sync Google Docs files and edit them inside Rowboat.
You can also build your own work surfaces inside Rowboat (web apps). Each app gets its own UI and a background agent, and can use all of Rowboat's tools, product integrations, and your work memory. For instance: an app to manage GitHub activity, project tracking, or ads campaign management. There are a few community apps at launch you can search and install, and you can publish your own by creating a GitHub repo for it and registering it.
Rowboat also indexes your work into a knowledge graph that all of the above surfaces use to have better context. We did a Show HN a few months back on this: https://news.ycombinator.com/item?id=46962641.
As an example that ties some of these together: you can create an app inside Rowboat that collects feature requests from your email, meetings, and Slack and ranks them, then uses Claude Code to draft a first version of the top-ranked feature, pulling prior context about it from your knowledge graph.
Rowboat is local-first: data is stored as plain Markdown files you can read, edit, or delete anytime. It is Apache-2.0 and works with any LLM, including local models through Ollama or LM Studio.
We’d love to hear your thoughts, and contributions are welcome!
Some third-party APIs we couldn't avoid (search has to be an API call). For TTS/STT we deliberately chose cloud quality over local support for now - if there's demand, we'll support local.
On PostHog: usage metadata only, never content. Anonymous install ID unless you sign in to Rowboat; email and plan attached after. Everything sent is cataloged in apps/x/ANALYTICS.md. We shipped v1 with no analytics and were flying little blind on whether anyone used it. If you build without the PostHog env vars, it no-ops entirely.
You should choose different language.
Can Rowboat do this? If not, does anybody know a harness that can?
That's what Amp is built around!
By default conversations are shares in your team (you can also make them private), and the agent has access to them.
So you can do things like "how would $teammate think about this" and the agent will read your colleague's conversations with Amp to get a feel for that and evaluate your work based on that.
Or just figuring out what everyone is doing at the moment is much easier that way
What they do have is funding and distribution, but that's the same advantage every incumbent has against every startup.
The single biggest advantage we have is that the labs are tied to their ecosystems. Claude still doesn't have image generation; Gemini-flash-lite is the best cheap model, but Gemini's apps can't use the latest models from Anthropic or OpenAI. We can always use the best tool for each job.
Also different members of the team could steer/approve what the AI did or did not do.
Ahhh found the talk: https://www.youtube.com/watch?v=ClWD8OEYgp8
Didn't really consider putting it out in public. Is there a viable product out of this? How much would you pay.
I get that great pains have been made to make sure that doesn't happen by default. But if you really want to co-op on something, why not at the session level on a dedicated VM/login pair?
That's why we're exploring a peer-to-peer setup for group chats instead. Each person keeps their own machine and data, and the assistant knows who's who and can ask the primary user for permission if the secondary user wants to run something non-trivial.
Or you could use tmux and a shared login and any tui agent harness.
Obviously they would be very flawed but a place to start.
I’ve spent a ridiculous amount of time building my wiki, feature plans, retrospectives, client overviews, meta overview, log, skills, commands and the barrier to trying a new command surface or agent is always “will I maintain my edge”.
Or am I misunderstanding? Is it that I would just spawn windows to that existing harness and get to harvest additive features/data from rowboat on top?
Edit - my typical approach would be to scrape out features from a tool like this to bolt onto my harness, why would I not do that here?
Alternately you can point Rowboat directly to your folder by setting workspace in the assistant chat and it should be able to read and use it. It can update it as well, but you would need to explicitly ask it to do so.
I'm happy to onboard you over a call if you'd like (you can DM me on Discord).
Will take you up on that! Thank you!
Each skill lives in its own subfolder with a skill.ts, and they're registered in the catalog at skills/index.ts.
And we're releasing an update shortly that makes them all readable and editable directly in the app, so merging yours with Rowboat's the way you describe becomes straightforward. Looking forward to the call!
All of them take my notes, meeting transcripts, jira tickets, code, websites, and give me more to read.
Then everyone else in the org is doing the same, to give me more to read. At the end of the day there is too much to read.
AI is supposed to be reducing toil, but it's just making more.
Overall productivity hasn't increased, has it? At best there are cases of increased per productivity due to layoffs, at worst it's just busywork.
> Somebody needs to care enough.
Why?
On somebody needs to care enough: I meant that AI agents by design have no intrinsic motivations, so (stating the obvious) they do not really care if the product works or actually solves the user's problem. This puts the onus on the human to care for the problem to really solve it, vs just building something. With increased AI output there are too many things to care about which the AI won't, and I believe that's why people might be working more and not less
Fair - it's Gmail-only today. We've thought about generic IMAP, but it seems to have some technical gaps for how our email surface works. For instance, there's no reliable cross-provider way to pre-create drafts on a thread. So we haven't prioritized it just yet. We do plan to add Outlook support soon.
Again, great app - all the best for the future!
starting with indies and SV startups and education is less risky, but the real market outside startup culture is often overlooked by those who came up inside that culture
generic IMAP is not worth the time, first class integration with M365 is worth the time
OIDC flavor "Continue with Microsoft" should be right there beside Continue with Google / Github / Whatever, on every SaaS that wants business clients small enough to make "sign up online" decisions. By contrast, for consumer, Continue with Apple would be the equivalently overlooked OIDC option if you are targeting "wallet share" (a revenue model) instead of headcount (an ad model, for instance).
* Didn't look this up. Used to be. Doesn't matter if 50% or 90%, it's substantial, and point stands: don't overlook it.
My question is, can I interact with it over mobile? If I'm away from the desktop, and I want to check-in with it (query the .knowledge, or trigger some coding task etc), is there that option?
In addition, we have a caffeinate mode (in new release) that keeps your machine awake so the connection doesn't drop. We are also working on a mobile app.
What I actually ended up doing was regularly pointing Claude at the Rowboat directory. Really useful to have all of this context available as markdown files.
I use my own standard format for all context capsules, and had my own branch running with that format hacked in.
Being able to describe the format in a plugin style architecture would be awesome.
Granola notes silently stopped working when they decided to encrypt the DB, interesting to see you've got your own in there now.
Will check it out again.
We heard of others pointing Claude to the knowledge graph. It made us double down on building a Claude desktop alternative, so we could couple them deeply. For instance, there are places you could provide feedback on emails to Rowboat and that goes into the knowledge graph which then improves the email handling. Something like this would be hard, if we did not control the assistant as well.
Would love to see your context capsule format. We could definitely make it possible to describe your own format.
Granola no longer working was what led us to build it natively.
Welcome back. Would love your thoughts on the product.
https://contextcapsules.com/v2/CONTEXT_CAPSULES.md
Context Capsules cover business concepts (even org structure), all the way through to implementation. Compounding value from bounded context.
I implemented the Granola Sync when rowboat stopped pulling it in (I have a year's worth of transcripts of pretty much every conversation I've had over the past year).
One shot granola sync in both TypeScript and go from a single Context Capsule:
https://downkeep.com/sDzvgoKx/granola-sync?k=bJ0JXOTErCt1XVU...
Nightmare passing markdown files around in this day and age, and yet they are the future. DownKeep is my personal attempt at keeping some sanity, not production!
We're exploring a company brain - team-level context rather than just individual, and the context capsule seems like a great way to distill the individual knowledge graph into team level useful context!
Thanks for the Granola script. Yep, I never imagined markdown would be the killer format.
One thought, the knowledge graph rowboat creates is passive, based on context in emails, transcripts etc. A tool to pull further context from an individual would be amazing. Sit there and chat with it to flush out all of the tribal knowledge (gotchas in this spec).
We have Context Capsules running in production as agent context (amongst other layers of governance) to define metrics etc, so we can guarantee what you see in your dashboard matches exactly what your invoice says, what we're reporting externally, regardless of who is reporting it. Agent or human.
This is a great idea. Almost like an interview mode where the assistant asks pointed questions (using your capsule spec as a guideline) and writes the answers back into the graph.
And thanks for the production context - this is not something we would have come up with. So really helpful data point.
1. cd <myVeryImportantProject.repo> 2. start_AI_agent_REPL 3. "hey AI, analyze the code base in this repo, and find any and all bugs related to 'e.g. porting from 32bit -> 64bit architecture', create work branches for the bug fixes, submit a PR at the repo site for each fix" 4. Goto 3.
I want to be able to treat my AI/ML assistant as a daemon I can turn on and off for any repo - I do not want it to be running all the time, I don't want an email interface to it, I don't want it to analyze my system to try to help me, I want it to be treated like any other system service I will enable and disable, per-directory, manually.
Everything else - the desktop app, the in-built browser, the Obsidian note-taking system - is pure noise, and it immediately disqualifies Rowboat from any investment on my part.
Just a simple daemon style approach, with a REPL, an interface to Git, and THAT IS ALL.
There will be a time and place for a whole new radical UI to AI/ML in my personal laboratory - that time is when I get a brand new machine dedicated just to AI/ML and only put things on it that I want to put on it. Not my personal machine, not my development machine - a machine that will only function as a junior AI/ML-based software developer in my team, with an interface to Git that is standard and battle-tested over years and years of actual work - and nothing else.
I know this tool is out there. I continue to swim through the junk to find it, however.
Rowboat is instantly disqualified from my environment by bringing in too many bells and whistles - all of it junk, because I will have to learn to manage it all anew, and that is not what I want in an AI/ML agent.
Anything which detracts from having AI/ML sandboxed as a daemon and its only interface through the current .git/config for the repo I'm applying it to, is noise and nonsense.
The "Agent Apps" (or whatever we are calling them) from the big vendors are organized around projects/folders, and we attach apps (via plugins) to the projects.
This appears to mae the apps (work surfaces) the primary artifact?
Surfaces are the primary artifact for collaborating with the assistant - each one attaches an app to a workflow and gives both you and the agent a structured place to work, instead of everything flowing through chat.
Chat is still first class, and projects/folders exist separately to organize work around it.
Really love the whole idea and I hope it gets more usable.
We looked into the specific issue you mentioned. Collapsing replies does exist in the product, but we found it doesn't work for emails sent from Outlook (our guess on why you might have faced this). We are fixing this in the next release, shipping this week. Hope you give it a try.
Is there a way to control the isolation myself, e.g. let it run code only in some VM that I provide?
Edit: is there a sandbox for code?
- Codex runs under its native OS sandbox (Seatbelt on macOS, bubblewrap on Linux) — where it's sandboxed to the selected working directory with network off. - Claude Code's sandbox is opt-in and we don't enable it yet, but we load your Claude config (~/.claude/settings.json), so if you've enabled sandboxing there it should work.
Surfacing these options in the app UI is a small change on our side, which we'll pick up shortly.
Any plans for a more opinionated way to handle memory ( but still within user's control )?
edit: syntax
My aim is to build a truly local app using only tiny/small models. I have had really good results from Qwen 3.5 1B, 4B, etc. Also, Gliner or similar models for different uses. SQLite + sqlite-vec + Tantivy + a tiny embedding model will stay as my go to.
In my case, coding agent is a separate product. I have https://github.com/brainless/nocodo for that. nocodo is also built for tiny/small models from the ground up. And recently I started building a wGPU based UI framework to build both these apps as native UI apps in Rust: https://github.com/brainless/akar. I also want e2e encrypted team/family sharing in my products.
Thank you for the inspiration. Would love to share notes and follow your progress.
2. Doesn't support generic IMAP email.
3. Doesn't accept my STT.
4. Doesn't accept my TTS.
5. Doesn't accept my SearxNG/custom search engine
1. True - no OS-level container today. The constraint is approval gating: consequential actions surface as a permission ask before they run (a separate supervisor LLM flags anything outside your intent). 2. True today. We'd deprioritized generic IMAP (drafts-on-thread is unreliable cross-provider), but you're the third person in this thread to raise it, so we'll scope it properly.
3/4/5. Today: Deepgram for STT, ElevenLabs for TTS, Exa for search.
At least for search we supported more providers earlier (e.g. Brave) and found the assistant's skills degrade when they can't lean on provider-specific capabilities, like Exa's granular search. So we trimmed and went deep on a few.
Feel free to raise a GitHub issue with what you want us to support and we'll do our best.
Right now, with my Nanoclaw, I'm running it in a container on a VM on proxmox. If things get bad, I lose a backed up machine and any services it has credentials to.
I can understand why IMAP is a pain. There's plenty of functions that can trash mailboxes. I don't envy you all in this task.
For my STT and TTS, ones on the HN front page right now: https://ariya.io/2026/03/local-cpu-friendly-high-quality-tts...
And OpenWhispr is local Whisper model that I also run locally. And still, no data leaks. And since its local, its also FAST. I also use it via HomeAssiatant.
For search, I use SearXNG. Ive even changed my daily driver to it at home, since it gets great results and none of the public cloud forced crap (llm searches when I don't want it).
Will go through these and see what we could support. If you drop your stack into a GitHub issue, that's the best place for us to work through it (and for others to +1).
In hosted, we support: OpenAI, Anthropic, Gemini, OpenRouter, Vercel AI Gateway.
No native Amazon Bedrock support, but you could use OpenRouter or LiteLLM with the Bedrock key and point Rowboat to that today.