One local assistant per teammate changes the trust boundary
Each teammate runs 1 Rowboat on their own computer, with personal memory built from email, meetings, notes, and code. A shared Space holds only the messages and files people or their agents choose to post. That split is Rowboat's best idea. The team gets a common work room without first copying everyone's inbox and private knowledge into one central bot.
The desktop app covers much more than chat. It keeps a Markdown knowledge graph, drafts email, records meeting notes, runs scheduled agents, and provides an isolated browser. Code Mode can hand work to Claude Code or Codex with selected context. Local models work through Ollama or LM Studio, while hosted providers use each person's own credentials. The breadth is useful, although it gives Rowboat more permissions and failure modes than a plain model client.
Harbor exposes the same three doors to people and agents
Harbor has 3 interfaces over one service: HTTP, a live WebSocket, and an MCP server. Rowboat's built-in agent uses the same MCP surface available to another compatible agent. Actions are attributed to the member and agent name, and the contract requires agents to attach a reason to file-changing operations. That parity makes the collaboration model easier to inspect than a hidden internal agent API.
A Space combines threaded messages with Markdown files, uploads, and whiteboards. File edits carry versions and history; concurrent edits use line-level three-way merging, with conflicts returned as normal outcomes that include the current content and collision regions. The v0 contract lists 30 MCP tools for messages, members, spaces, direct conversations, search, polls, files, history, and diffs. It is a substantial collaboration server, not a thin chat relay.
What happened when we ran it
Our sandbox cloned commit 2fdae42 with 3 CPUs, 8 GB of RAM, and Node 22. The 39.4 MB monorepo contained 1,454 files and about 291,715 source lines. Inside apps/harbor, pnpm installed 195 packages in 8 seconds and occupied 130 MB on disk. The build completed successfully in 14 seconds.
Vitest completed in 63 seconds with 381 passed, 0 failed, and 1 skipped out of 382. The scan found 2 CI workflow files, a Dockerfile, monorepo workspaces, and no tests directory. Those signals describe the supplied checkout and target. They do not measure desktop responsiveness, model quality, email accuracy, or the behavior of third-party services.
Production Harbor needs Postgres, OIDC, and domain routing
Local development can boot an in-memory Harbor on port 4272 with seeded users and dev tokens. That is a quick way to inspect the HTTP, live, and MCP interfaces, but the README warns that dev tokens must never be exposed publicly. Durable self-hosting switches to Postgres and a deployment mode that maps organization slugs under an apex domain.
Authentication uses an OIDC issuer with verified JSON Web Tokens. The login and consent page needs a publishable auth setting, and organizations can restrict invite acceptance by email domain. Uploads go to local disk or S3-compatible storage. Operators must also arrange TLS and route wildcard organization hosts correctly. The provided Node 22 Dockerfile builds Harbor, yet it does not remove the identity, database, backup, and domain work around the container.
Private context stays local until a person or agent posts it
Rowboat states that personal data stays in local Markdown and that only posted material crosses into Harbor. Its agent rules say to read only what a task needs and summarize private sources rather than paste them. Those are sensible defaults. They are also behavioral rules executed by an agent that can read private sources and write to a shared room.
A careful rollout should start with a test Space and low-risk data. Review model prompts, MCP permissions, connected accounts, and what appears in history when an agent acts as a member. Optional integrations expand the boundary: Google has its own setup, while Deepgram, ElevenLabs, Exa, and Composio use separate keys. Local storage reduces central collection, but it does not make every agent action private.
The v0 contract and three open server issues deserve attention
Harbor's 52 KB contract calls itself v0 and says breaking changes are expected while the team dogfoods it. Client and server schemas live in the same workspace, which reduces accidental drift, but self-hosters still need to coordinate upgrades. That is acceptable for an early internal deployment and awkward for an organization promising long-lived compatibility to other clients.
Open issues 880, 881, and 882 concern rowboat-server, not Harbor's measured test result. They report a WebSocket bearer token in a query string, absent Host validation for LAN exposure, and a workspace file route that can follow symlinks outside its root. The issue text narrows the conditions and proposes fixes, but all 3 remained open when checked. Review the current network surface before remote deployment.
September 17 activity shows speed more than stability
GitHub recorded 17,875 stars, 171 combined issues and pull requests, and a last push on September 17, 2026. Release v1.0.3 arrived the same day with Spaces as its main addition. Recent pull requests include protocol, sign-in, invite, live-update, and interface fixes. This is active maintenance, and the combined open count should not be mistaken for a bug count.
Rowboat is most convincing when the team agrees with its architecture: private work memory on each computer, selected shared state in Harbor, and equal MCP access for built-in and external agents. The clean 381-pass Harbor run makes a trial reasonable. Keep the first deployment small enough that a v0 protocol change or permission mistake can be corrected without turning private work history into an incident.

