Daily Tech Briefing
AI 科技速览
每天 5 分钟内学习 AI。获取最新的人工智能新闻,理解其重要性,并学习如何将其应用于您的工作。
Hacker News · 2026/8/2 06:59:28

CRM: An open-source, agentic-first CRM
AI 中文解读
【CRM: An open-source, agentic-first CRM】CRM
An open-source, agentic-first CRM.
A durable research agent is the product. The database is just where it writes things down.
The agent ·
Stack ·
Quick start ·
Configuration ·
Dep...
CRM
An open-source, agentic-first CRM.
A durable research agent is the product. The database is just where it writes things down.
The agent ·
Stack ·
Quick start ·
Configuration ·
Deploying ·
Contributing
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 API deliberately has no intelligence in it at all. NestJS reports that something
happened — a thread was ingested, a company was created, an attendee is unknown — by
writing a row to a queue. The agent leases that row and decides what it means. A Nest
service that calls an enrichment API is treated as a bug, and
docs/api.md explains the outage that made that a rule.
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
observed — crm.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.
It is single-tenant and internal by design. Sign-in is Google, the allow-list is one
environment variable, and everyone who gets in can see everything. That is the whole
authorisation model — see SECURITY.md before you point it at real
customer data.
Screenshots
Deals — filters, sort and page live in the URL, so a view is a link.
Contacts — most of these were created by the mailbox sync, not typed.
Companies — logo, industry and location arrive on their own.
Overview — yours or the whole team's, toggled in the URL.
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 signa
分享
阅读原文 ↗