README.md
lemonPCRM
lemonAI 出品。一个 Local-First 的 AI 驱动个人人脉管理系统(Personal CRM),以人为中心、以对话为链接,将微信、LinkedIn、X 等平台的社交关系统一管理,并通过知识图谱将每个人节点与其社媒动态、会议纪要、文件、照片全面关联。
AI 对话层由本地 Claude CLI 进程驱动(ACP 协议),无需云端 API,数据完全本地化。
产品定位
| 维度 | 说明 |
|---|---|
| 数据主权 | 全部数据存储在本地,不依赖任何云服务 |
| 关系图谱 | Palantir 式本体论设计:Person / Organization / Project / Event / Asset 节点互联 |
| AI 驱动 | 通过自然语言对话驱动图谱更新、实体提取、路径分析 |
| 多源整合 | 微信聊天记录、X/LinkedIn 动态、会议纪要(Whisper 转写)、本地照片 |
架构
前端 (HTML/Graph Canvas)
↕ SSE / WebSocket
server/
routes/ HTTP API — /api/master (SSE 对话)、/api/config
src/core/ 编排引擎 — Orchestrator、MasterSession、AgentManager、SessionPool
src/engine/ 进程层 — CommandQueue、ProcessGuard、RunRegistry
src/tools/ Master 工具 — call-agent、tool-registry
services/ 会话日志、文件解析(docx/pdf)、Agent 记忆
packages/
acp-core/ ACP 协议层 — Protocol / Transport / Launcher 抽象
agent-core/ Agent 运行时 — 目录驱动的 Agent、AgentBus、Registry
快速启动
npm run setup # 首次:cp .env.example .env + npm install
npm run dev # 开发模式(热重载,端口 3010)
npm start # 生产模式
API
| 端点 | 方法 | 说明 |
|---|---|---|
/api/master/chat |
POST | Master Agent 多轮对话(SSE 流式) |
/api/master/upload |
POST | 文件上传(注入对话上下文,支持 .docx / .pdf) |
/api/master/sessions |
GET | 列出活跃 session |
/api/master/sessions/:id |
DELETE | 关闭 session |
/api/config/items/:key |
GET / PUT | 读写配置文件 |
/api/health |
GET | 健康检查 |
对话示例
# 写入 payload 文件再发送(避免 shell JSON 转义问题)
cat > /tmp/payload.json <<'EOF'
{"message": "分析张三和李四之间的关系链路", "sessionId": "crm-session"}
EOF
curl -X POST http://localhost:3010/api/master/chat \
-H "Content-Type: application/json" \
-d @/tmp/payload.json \
--no-buffer
SSE 事件类型:session | progress | agent_output | tool_call | result | error
配置
server/config/backends.json — ACP Launcher 定义:
{
"launchers": {
"claude-local": {
"command": "claude",
"args": ["--dangerously-skip-permissions"],
"protocol": "claude-cli"
}
}
}
server/config/agents.json(可选)— 静态 Agent 定义:
{
"crm-analyst": {
"type": "executor",
"client": "claude-local",
"description": "分析人脉关系、提取实体、更新图谱"
}
}
.env — 端口与 CORS:
PORT=3010
CORS_ORIGINS=http://localhost:5173
编程调用
const { runMasterSession, runOrchestration, runSingleAgent } = require('./server/src/standalone-entry');
// 单次 Master 会话(对话驱动图谱更新)
const result = await runMasterSession('把今天和张三的会议纪要导入,关联到他的人脉节点');
// 多 Agent 编排
const result = await runOrchestration('分析本月新增联系人并生成关系报告', { workDir: '/my/project' });
// 单个 Agent
const result = await runSingleAgent('crm-analyst', '提取以下文本中的人名和组织');
License
MIT · lemonAI