crm is a free, open source miscellaneous project written in TypeScript and released under MIT. It has 10,577 GitHub stars, 1,458 forks and 34 open issues, and was last pushed 7 days ago. On this registry it ranks #8 of 25 tracked projects in Miscellaneous, with 5 head-to-head comparisons available. It gained 257 stars over the last 6 tracked days.

What is crm?

What it is

Comp AI CRM is an open source, TypeScript, MIT licensed CRM designed for AI agents. It lives in the open source CRM ecosystem, where the agent is not a feature bolted onto a form but the main worker that keeps notes in the CRM.

The project solves the problem of human-only CRM data entry. It runs on its own deployment, on its own schedule, and against its own work queue, so it can continue after the browser closes. It decides what to look at next, books follow-ups, spends a research budget, and stops when the budget runs out. It also refuses to guess facts: tools report observed evidence, a ledger prices that evidence, strong evidence writes to the record, and weak evidence becomes a suggestion for a human to settle.

Key capabilities

  • The agent uses 18 authored tools, including read_crm_history, search_crm, identify_contact, research_person, enrich_company, record_fact, and schedule_recheck.
  • It reads 4 versioned markdown skills: evidence.md, identity-matching.md, data-boundaries.md, and writing-a-brief.md.
  • It treats tools as files, skills as markdown files, and schedules as files, while the eve runtime handles durable sessions that survive a redeploy and resume where they stopped.
  • It leases due tasks with FOR UPDATE SKIP LOCKED, so two dispatchers take disjoint work and a run that dies frees its row when the lease expires.
  • It can run with no API keys by reading a team's own threads, meetings, and signature blocks, and it can use optional Context data for company brand details and LinkedIn identity lookups.
  • It runs in a sandbox with bash, grep, glob, a /workspace, and deny-all egress.

Who uses it and how

  • A team can deploy the agent separately so it books its own follow-ups and research on a schedule.
  • A human reviews weak evidence as suggestions and settles facts before they become records.
  • An agent can call schedule_recheck with a reason, and that reason is shown to the rep.
  • An operator can start with internal evidence only, then configure Context during onboarding or later in Settings → General.

Getting started

The README names quick start, configuration, and deploying sections, with the agent deployed separately and an optional Context key configured through onboarding or Settings → General.

When to use it — and when not to

Use it when you want an agent that keeps working after the browser closes and when evidence discipline matters more than instant answers. It is less suitable for teams that expect a conventional form-driven CRM or that cannot operate the agent, queue, sandbox, and optional Context key. The provided repository facts list zero contributors, 34 open issues, and a zero-year age, so it appears early-stage.

project readme (upstream, from github) — read inline

stars

CRM

Comp AI CRM is an open source, CRM designed for AI agents.
Agentic-first CRM.

The agent · Stack · Quick start · Configuration · Deploying · Contributing

MIT licence Built with eve Built with Bun Postgres


What this is

Most CRMs are a database with a form in front of it. The AI ones bolt a chat box onto the side of that form. Both leave the actual work — finding out what is true, and writing it down — to a human who has better things to do.

This is built the other way round. The agent is not a feature of the CRM; the CRM is where the agent keeps its notes. It runs on its own deployment, on its own schedule, against its own work queue. It decides what to look at next, books its own follow-ups, spends a research budget, and stops when the budget runs out. Nothing about it is request-response: close the browser and it keeps going.

The rule the agent itself never breaks: nothing about a person is guessed. No tool accepts a confidence score, because a model asked to grade its own certainty will, and it will be wrong in the direction that makes it look useful. Tools report what they observedcrm.signature-block, github.account-identity — and a ledger prices the evidence. Strong evidence writes to the record. Weak evidence becomes a suggestion a human settles. A confidently wrong fact about a customer is worse than a blank field, because nobody can tell it is wrong.

Screenshots

The agent

apps/agent is its own deployment, built on eve — Vercel's filesystem-first framework for durable agents. A tool is a file, a skill is a markdown file, a schedule is a file, and the runtime handles the durable part: sessions that survive a redeploy, work that resumes where it stopped.

18 authored tools read_crm_history, search_crm, identify_contact, research_person, enrich_company, record_fact, schedule_recheck
4 skills evidence.md, identity-matching.md, data-boundaries.md, writing-a-brief.md — prose the agent reads, versioned like code
1 schedule dispatch.ts, which decides nothing. It leases what is due and starts a session per row.
A sandbox bash, grep, glob and a /workspace, with deny-all egress

It runs itself. lib/tasks.ts is the work queue: claimDue leases rows with FOR UPDATE SKIP LOCKED, so two dispatchers take disjoint work and a run that dies frees its row when the lease expires. Anything that looks like "every N minutes, the oldest ten contacts" belongs in a task's dueAt, not in a cron expression. When the agent wants another look at somebody it calls schedule_recheck and says why — and the reason is shown to the rep, because an agent that cannot say why it will be back in fourteen days does not have a reason, it has a default.

Every outside source is optional, and it is designed to run with none of them. With no API keys at all it still works: read_crm_history reads your own threads, meetings and signature blocks, which is free and is the best evidence there is — no data vendor can sell you a reply from the person's own address. Each key opens one more place to look. It is told at the start of every session which ones this install has, so it plans around what it actually has rather than discovering the gaps one failed call at a time, and it prints the list at startup:

[agent] off  Web research (PERPLEXITY_API_KEY)
[agent] on   Company brand data (Settings → General)
[agent] on   LinkedIn (Settings → General)

Company brand data and LinkedIn are both Context, and both come from the same key. The first is the logo, the colours, the industry and the real name behind a domain, which is the difference between an account that arrives as itself and one that arrives as a grey square with its initials in it. The second reads a person back from a LinkedIn URL already on their record — their real name, current title, employer and every earlier role — which is what settles who an address belongs to. It is the one key that is asked for rather than configured: it lives in a row, the onboarding asks for it, and Settings → General changes it afterwards, because a self-hoster's admin cannot redeploy to set an environment variable.

The sandbox has no network and no database. Turning it on is what gives the model a shell — the difference between a tool-caller and something that can keep a dossier, diff this month's profile against last month's, and grep a thread for a signature block. deny-all egress costs nothing, because web_fetch runs in the app runtime and web_search at the model provider. What it removes is the only path by which a customer's email body could leave through a shell command. The other half of that rule is an absence: the sandbox is never given DATABASE_URL. A shell with credentials and egress is exfiltration-shaped even in an internal tool; a shell with neither is a text processor.

You can talk to it, and watch it work. Every contact, company and deal has an Agent tab — the steps as it takes them, the leads it throws away and why, and its questions answered in place when it cannot decide between two people. Conversations are durable and survive a reload; the record travels in a signed token rather than being bolted onto the front of your message. Set AGENT_BRIDGE_SECRET to the same value in both processes to turn it on. Without it the tab reports that it is not configured, and the agent carries on running its own schedule.

docs/agent.md is the full write-up.

The stack

A Turborepo monorepo on Bun, deployed on Vercel.

Agent eve — durable sessions, tools, skills, schedules, sandboxes
Model Vercel AI Gateway — no provider SDK, and OIDC on Vercel means no key to manage
Sandbox Vercel Sandbox in production, Docker or microsandbox locally
Front end Next.js App Router · shadcn/ui · nuqs for URL state
API NestJS with nestjs-trpc — HTTP, auth, tRPC, mailbox sync
Data Prisma · Postgres (Neon) · optional Redis (Upstash)
Auth Better Auth — Google, Microsoft, or your own IdP; one allow-list
Files Vercel Blob — mirrors profile pictures so they survive the source going away
Tooling Biome · TypeScript everywhere

The app talks to the API over tRPC, and the router type is generated from the NestJS routers — so the front end is type-safe from the Prisma row to the table cell. List state (filters, sort, page) lives in the URL, so copying the address bar reproduces the view.

Layout

Path
apps/agent The research agent — tools, skills, schedules, sandbox
apps/app Next.js front end · :3000
apps/api NestJS API — HTTP,

readme truncated — read the full docs on github

Frequently asked questions

Is crm free to use?

crm is open source under the MIT licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does crm do?

Comp AI CRM is an open source, CRM designed for AI agents. Agentic-first CRM.

What is crm written in?

crm is primarily written in TypeScript. Its source is publicly available at https://github.com/trycompai/crm, and it has 10,577 GitHub stars.