Clarus started from a simple frustration: AI writing tools kept trying to write for writers rather than write with them. Most tools optimize for speed and output volume, I built Clarus to optimize for voice, craft, and the writing experience.
The Problem
I wanted to get back into writing regularly and found I often got frustrated or insecure about my writing when using tools like Grammarly which were too intrusive or simply chatting with an LLM for general feedback. I wanted a collaborator that understood how I wrote and provided proofreading and strategic editing which was grounded and unobtrusive.
What I Built
Clarus is a full-stack web application built on TanStack Start, React, and Convex. Given the solopreneur approach to this project I wanted to outsource as many of the technical decisions as possible to prevent going down any rabbit holes. The web application is mated to multiple agents which I trigger via convex mutations and execute on E2B sandboxes utilizing a mixture of models from Anthropic and Google.
Key features include:
- Voice preservation: the system imports a large corpus of your writing from your existing blog/website. If you don’t have a body of work online you can upload a text or PDF file for the agent which utilizes a built in skill to create a stylometric model of your writing.
- Expert feedback: instead of highlighting text as you write the agent is triggered manually by the user and generates is suggestions and edits via a dynamic rubric based on the style of the document being submitted. A piece classified as persuasive advertising content will be critiqued differently from a technical document.
- Built in Publishing: sharing a document with other users provides a real time collaboration experience similar to google docs. Making the document public generates a link in a minimalist interface resembling a simple blog allowing authors to share their writing with the world with ease.
Technical Highlights
The writing environment is a custom rich-text editor built in React with tiptap. Real-time AI annotations render appear in the margin rather than inline. The backend handles streaming AI responses from E2B via a convex websocket mutation that is called repeatedly on an interval to prevent the Convex mutation from timing out and also maintaining a connection to the sandbox. The agent was implemented using pi-agent as the harness primarily due to it’s extensibility.
Status
Clarus is in active development and early access. Growing a community of writers through Product Hunt, direct outreach to writing communities, and partnerships with writing coaches.

