← Experience

Founder & Engineer

SheetOS

Boston, MA · Dec 2024 – Present

sheetos.ai →

SheetOS is an AI-powered data platform. The core idea: spreadsheets that keep running when you close the tab. Users describe what they need in natural language, and AI agents build workbooks with tables, sheets, charts, and automations that stay alive.

I designed and built every part of this as the sole engineer.

The Agent System

The heart of the product. A custom agentic framework written in Go from scratch — not a LangChain wrapper.

  • Multi-turn reasoning: agents think, call tools, observe results, and reason again across extended sessions
  • 40+ context modules that dynamically compose the system prompt based on what's relevant — workbook state, tool guides, SDK docs, conversation history
  • Sub-agent spawning: the main agent delegates focused research tasks to specialized researcher agents
  • Tool orchestration: web search, browser automation (full Playwright), table/sheet read-write, Python execution, automation creation
  • Real-time SSE/WebSocket streaming with provider-specific adapters for Anthropic and OpenAI

Architecture

Backend
Go (Gin, sqlc for type-safe SQL)
Frontend
React/Remix, TypeScript, Tailwind, Jotai
Database
PostgreSQL — isolated schema per workbook, true multi-tenancy
Real-time
ElectricSQL/PGlite — WASM Postgres in the browser, synced to server
Infra
Docker Compose, MinIO, Prometheus/Grafana
Deployment
Multi-VM production with Kubernetes configs

Hard Problems

  • Managing context windows across long multi-turn agent sessions with dynamic module composition and conversation summarization
  • Real-time browser sync without traditional WebSocket pub/sub — using WASM Postgres client-side
  • Multi-tenant database isolation with per-workbook schemas and live migrations for existing users
  • Streaming LLM responses through multiple layers (LLM → Go → WebSocket → React) with provider-specific adapters
  • Sandboxed Python execution in isolated containers with full SDK access back into the platform