explainx.ainewsletter3.5k
TrendingNewsPathwaysSkills
Pricing
explainx.ai

Upskill in AI — 16 free pathways, live workshops & bootcamps, and 50+ courses from practitioners. Plus the skills, tools, and MCP servers to practice on.

follow us

custom AI agents

[email protected]

get started

Find your pathTake Free Evaluation

learn

pathways — start freeworkshopsbootcampscoursescertificationsmock testsexplainx universitycorporate traininglearn skills & mcp

discover

skillsmcp serversexplainx mcptoolsagentsllmsdesignsagi trackerranks

company

aboutvisionmissionteaminstructorscommunityhackathonscareers

content

daily AI newsstate of AI — live resultsblogreleasespromptsgeneratorsresource librarydemofor LLMs

solutions

all solutionsdeveloper upskillingmarketing upskillingproduct manager upskillingleadership upskilling

More from us

InfloqInfluencer marketingBgBlurPrivacy-first blurOlly SocialSocial AI copilotCeptoryVideo intelligenceBgRemoverBackground removal

newsletter · weekly

Get AI news, tools, and insights in your inbox.

supportprivacytermsdata rightssubmission guidelines

© 2026 AISOLO Technologies Pvt Ltd

On this page

  • TL;DR — questions people ask after the launch post
  • What Comp AI means by “agentic-first”
  • What it does in practice (from the launch thread)
  • Stack map (monorepo layout)
  • Quick start (copy-paste)
  • How the work queue is supposed to work
  • Honest take: “durable” still needs hardening
  • Who this is for (and who should wait)
  • What to steal even if you never run the CRM
  • Related on explainx.ai
  • Primary sources
← Back to blog

explainx / blog

Comp AI Open-Sourced an Agentic CRM — Agent First, Database Second

Comp AI open-sourced trycompai/crm (~2k stars, MIT): durable research agents on Eve, NestJS, Next.js. What it does, how to run it, and where “durable” still needs hardening.

Aug 3, 2026·8 min read·Yash Thakker
Comp AICRMAI AgentsOpen SourceEve
go deep
Comp AI Open-Sourced an Agentic CRM — Agent First, Database Second

Comp AI open-sourced the CRM they built for their own sales team — and the pitch is literal, not marketing fluff: a durable research agent is the product; the database is where it writes things down.

Co-founder Lewis Carhart announced the MIT release on X in early August 2026. Within a few days trycompai/crm sat near ~2,000 stars and ~237 forks. The thread that followed mixed “HUGE,” fork-and-star energy, vibe-coding skepticism, and one useful engineering critique of the dispatch loop. This explainx.ai read covers what the repo actually ships, how to stand it up, where the architecture is sharp, and where “durable” is still aspirational.

Comp AI CRM README hero: Welcome back dashboard with pipeline charts, deals in progress, and overdue tasks

Comp AI CRM overview: closed-won vs new pipeline, open pipeline by stage, deals in progress, overdue tasks.

TL;DR — questions people ask after the launch post

QuestionDirect answer
What is it?Single-tenant open-source CRM; Eve research agent + Nest/Next/Postgres.
License?MIT.
Agent surface?18 tools, 4 skills (markdown), one dispatch.ts schedule, sandboxed shell.
Mailbox?Gmail + Calendar sync fills contacts/companies; forms are secondary.
Free to run locally?Bun + Docker Postgres; Google OAuth required; enrichment APIs optional.
Multi-tenant SaaS?No — allow-list Google auth; everyone inside sees everything.
Production-ready “durable”?Not yet without hardening; see dispatch catch gaps below.
Related explainx.ai framing?Agent skills, loop/harness stack, software-for-one.

What Comp AI means by “agentic-first”

Most CRM AI products still look like a database with a form, plus a chat panel that drafts emails. Comp AI’s README rejects that layout:

The agent is not a feature of the CRM; the CRM is where the agent keeps its notes.

The agent runs on its own deployment, on its own schedule, against its own work queue. It decides what to look at next, books follow-ups, spends a research budget, and stops when the budget runs out. Close the browser and it keeps going — that is the product claim.

Three codebase rules reinforce the inversion:

  1. Intelligence never lives in the API. NestJS writes queue rows when a thread is ingested or a company is created. The agent leases the row and decides what it means. A Nest service that calls enrichment directly is treated as a bug (documented after an outage that made the rule stick).
  2. Nothing about a person is guessed. Tools report observations (crm.signature-block, github.account-identity); a ledger prices evidence. Strong evidence writes; weak evidence becomes a human suggestion. No confidence scores for the model to inflate.
  3. No organizations column theater. Single-tenant on purpose. An always-constant organizationId would buy nothing and read like real multi-tenancy in review.

That last point matters for anyone comparing this to HubSpot clones: this is an internal team CRM, not a white-label SaaS starter.

Weekly digest3.5k readers

Catch up on AI

Curated AI updates on agents, skills, and MCP — delivered to your inbox. Unsubscribe anytime.

What it does in practice (from the launch thread)

Carhart’s follow-up list maps cleanly onto the README:

  1. Gmail and Calendar connect so records fill themselves in — contacts often arrive from mailbox sync, not typing.
  2. 18 tools, 4 skills, everything queue-based — powered by Eve, Vercel, Context (company brand data), and RapidAPI for LinkedIn research.
  3. Books its own follow-ups and must say when it will return to update research — schedule_recheck reasons are shown to the rep.
  4. Fully sandboxed — bash/grep/glob in a workspace with deny-all egress; the sandbox never receives DATABASE_URL.

The four skills are prose versioned like code: evidence.md, identity-matching.md, data-boundaries.md, writing-a-brief.md. If you already think in agent skills and skills-lock.json, this is the same idea applied to CRM research policy instead of coding workflows.

Stack map (monorepo layout)

PieceChoice
Agent runtimeEve — filesystem-first tools, skills, schedules, durable sessions
ModelsVercel AI Gateway (OIDC on Vercel; no provider SDK in-app)
SandboxVercel Sandbox in prod; Docker / microsandbox locally
Front endNext.js App Router, shadcn/ui, nuqs for URL state
APINestJS + nestjs-trpc — HTTP, auth, Google sync
DataPrisma + Postgres (Neon-friendly); optional Redis
AuthBetter Auth, Google-only, ALLOWED_SIGN_IN allow-list
ToolingBun, Turborepo, Biome, TypeScript everywhere

Layout:

PathRole
apps/agentResearch agent — tools, skills, schedules, sandbox
apps/appNext.js UI (:3000)
apps/apiNestJS API (:3001)
packages/dbPrisma schema and shared client
packages/authBetter Auth + allow-list
packages/uiOnly source of UI components

Deploy is three processes plus Postgres. They must share DATABASE_URL and BETTER_AUTH_SECRET or you get a redirect loop, not a clear error.

Quick start (copy-paste)

You need Bun and Docker.

bash
git clone https://github.com/trycompai/crm.git && cd crm
bun install
docker compose up -d          # Postgres on :5432
cp .env.example .env          # fill the four required values
bun run db:deploy
bun run db:seed               # optional demo pipeline
bun run dev

App: http://localhost:3000 · API: http://localhost:3001.

The four required .env values

VariableWhat to put
BETTER_AUTH_SECRETopenssl rand -base64 32
ALLOWED_SIGN_INDomain (acme.com) and/or addresses
GOOGLE_CLIENT_ID / GOOGLE_CLIENT_SECRETGoogle OAuth web client

Redirect URI for local: http://localhost:3001/api/auth/callback/google. Enable Gmail and Calendar APIs. Unset ALLOWED_SIGN_IN means nobody can sign in — fail closed.

Optional keys (agent prints on/off at startup): RAPIDAPI_KEY (LinkedIn), PERPLEXITY_API_KEY (web research), CONTEXT_DEV_API_KEY (company brand), AGENT_BRIDGE_SECRET (Agent tab chat), CRON_SECRET (mailbox sync route), REDIS_URL.

How the work queue is supposed to work

lib/tasks.ts is the heart of the “keep going with the browser closed” story:

  • claimDue leases rows with FOR UPDATE SKIP LOCKED so two dispatchers take disjoint work.
  • A dead run frees its row when the lease expires.
  • Recurring “every N minutes, oldest ten contacts” belongs in a task’s dueAt, not a cron soup of business logic.
  • dispatch.ts “decides nothing” — it leases what is due and starts a session per row.

That is classic loop / harness thinking: the schedule is a clock; policy lives in skills and tools. It also rhymes with holaOS-style environment design — reliability from structure, not a larger chat box.

Sandbox threat model (worth stealing)

Two absences do the heavy lifting:

  1. Deny-all egress from the sandbox shell — web_fetch / web_search run outside the shell.
  2. No DATABASE_URL in the sandbox — a shell with credentials and egress is exfiltration-shaped; a shell with neither is a text processor for dossiers and greps.

For teams shipping agent shells, that pairs with the same instincts as Destructive Command Guard and the cautionary notes around long-horizon sandbox escapes: bound the tool surface before you trust “it works on my laptop.”

Honest take: “durable” still needs hardening

Social launch threads always attract two bad modes — pure hype and pure dismissiveness. One reply accused the team of shipping a half-day vibe-code flex. That is not a technical review.

A sharper one (widely quoted under the launch) said: decent architecture, but the dispatch loop has real durability gaps — retireExhausted() wrapped in an empty catch {}, settle failures swallowed, tasks can limbo. Comp AI’s reply: they will keep improving.

We pulled current apps/agent/agent/schedules/dispatch.ts from main. The critique holds:

ts
try {
  for (const abandoned of await retireExhausted()) {
    await settle(
      abandoned,
      EnrichmentStatus.FAILED,
      "Research was attempted several times and never completed.",
    );
  }
} catch {}

And on per-task failure:

ts
await settle(task, EnrichmentStatus.FAILED, reason).catch(() => {});

Empty catches hide lease/settle bugs. If settle fails after markRunning, enrichment status and task lease can disagree — the classic limbo. Framework-level Eve sessions can still be “durable” while your queue semantics are not. That is the harness layer failing even when the model layer looks fine — the same stack split we use in loop engineering.

Before production customer data: read SECURITY.md, keep it allow-listed, add observability around retire/settle, and treat empty catches as P0. Forking is the point of MIT.

Who this is for (and who should wait)

Good fit

  • Small GTM teams who already live in Google Workspace and hate empty CRM fields.
  • Engineers building software for one / situated tools who want a reference monorepo with agent + API + app split.
  • Teams studying evidence-led enrichment (observations vs confidence theater).

Wait or fork first

  • Multi-tenant SaaS needs — you would redesign auth entirely.
  • Compliance-sensitive customer PII without a security review — single-tenant does not mean safe by default.
  • Anyone who heard “durable agents” and expected battle-tested queue semantics out of the box.

Comp AI also builds an open-source compliance platform (SOC 2 / ISO-style automation). The CRM is a separate product surface; do not confuse the two repos when evaluating license and architecture.

What to steal even if you never run the CRM

  1. Queue-as-truth — APIs emit facts; agents interpret them.
  2. Evidence ledger — no self-graded confidence on people.
  3. Skills as policy — identity matching and data boundaries in versioned markdown.
  4. Sandbox without DB credentials — text processing without exfiltration shape.
  5. Rep-visible recheck reasons — agents that cannot explain a 14-day return do not have a reason.

Those patterns transfer to any long-running research agent — sales, support, or internal ops — and they connect directly to how explainx.ai talks about skills, MCP servers, and loops.

Related on explainx.ai

  • Genspark GenOffice — open-source AI office
  • What are agent skills?
  • skills-lock.json for reproducible agent skills
  • Context vs prompt vs loop vs harness engineering
  • Loop engineering with Claude Code
  • Software for one: personal apps and AI coding agents
  • holaOS: agent environments and long-running state
  • Fable-OS: self-evolving agentic OS research
  • Destructive Command Guard for AI coding agents

Primary sources

  • trycompai/crm on GitHub — README, docs/agent.md, SECURITY.md, CONTRIBUTING.md
  • Lewis Carhart’s August 2026 X announcement thread (features list, fork/star call)
  • Current apps/agent/agent/schedules/dispatch.ts on main (retire/settle error handling)

Star counts, file paths, and stack details reflect the public GitHub repository and launch discussion as of August 3, 2026. Eve, Vercel, Google OAuth, and enrichment APIs change quickly — verify the README and SECURITY.md before deploying against real customer mail.

Yash Thakker

Written by

Yash Thakker

Yash is an AI expert with over 300K learners. Join his workshops →

Related posts

Aug 3, 2026

Firecrawl Open-Sourced pdf-inspector: PDF to Markdown Without OCR Wait

Agents should not wait on OCR for every PDF. Firecrawl’s pdf-inspector (Rust, MIT) classifies text vs scanned in ~20ms, extracts clean Markdown locally, and powers Firecrawl /parse alongside their OCR models.

Aug 3, 2026

Genspark GenOffice: Open-Source AI Office for Mac & Windows

August 3, 2026: Genspark released GenOffice — an AI-native office suite for PC and Mac with Docs, Sheets, Slides, and PDF, open-sourced under Apache-2.0. explainx.ai covers what’s free vs credit-metered, the Electron/Univer stack, and why the “one week / $10k tokens” origin story matters for builders.

Jul 22, 2026

Jack Dorsey's Buzz: Team Chat, AI Agents, and Git Hosting in One Nostr-Signed Workspace

Jack Dorsey announced Buzz on July 21, 2026 — a self-hostable, open-source workspace where humans and AI agents share one identity system across chat, Git, and workflows. Every message and code event is a signed Nostr event. Here's what's real, what's early, and why it matters for anyone running Claude Code, Codex, or Goose on a team.