其他
需要自托管 Markdown AI 知识库并集成代理…
适用于想以 Markdown 文件为存储、自托管并运行 AI agents、cron 任务、嵌入式 HTML 应用和 Git 历史的 AI 知识库或创业 OS。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 35/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 55/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 38/100 ×0.15
适用场景
需要自托管 Markdown AI 知识特定
解决思路
- 准备环境:使用 Node.js 20+。
- 准备环境:安装 Claude Code CLI:npm install -g @anthropic-ai/claude-code。
- 准备环境:使用 macOS 或 Linux;Windows 通过 WSL。
- 快速开始:运行 npx create-cabinet@latest。
- 快速开始:运行 cd cabinet。
- 快速开始:运行 npm run dev:all。
- 快速开始:打开 http://localhost:3000,通过 onboarding wizard 用 5 个问题构建 AI 团队。
- 手动克隆:运行 git clone https://github.com/hilash/cabinet.git。
- 手动克隆:运行 cd cabinet。
- 手动克隆:运行 npm install。
- 手动克隆:运行 cp .env.example .env.local。
- 手动克隆:运行 npm run dev:all。
- 环境配置:在 .env.local 设置 KB_PASSWORD=your_optional_password,留空表示无认证。
- 环境配置:设置 DOMAIN=localhost 或自定义域名。
- 命令:npm run dev 启动 Next.js dev server,端口 3000。
- 命令:npm run dev:daemon 启动 WebSocket + job scheduler,端口 3001。
- 命令:npm run dev:all 同时启动两个服务器,开发时使用。
- 命令:npm run build 生产构建。
- 命令:npm run start 以生产模式同时启动 Next.js 和 daemon。
- 了解架构:src/app/api/ 是 Next.js API routes。
- 了解架构:src/components/ 是 React components,包括 sidebar、editor、agents、jobs、terminal。
- 了解架构:src/stores/ 是 Zustand state management。
- 了解架构:src/lib/ 包含 storage、markdown、git、agents、jobs。
- 了解架构:server/cabinet-daemon.ts 是 WebSocket + job scheduler + agent executor。
- 了解架构:data/.agents/.library/ 有 20 个预置 agent templates。
- 了解架构:data/getting-started/ 是默认 KB pages。
- 技术栈:Next.js 16、TypeScript、Tailwind CSS、shadcn/ui、Tiptap、Zustand、xterm.js、node-cron。
- 数据存储:把内容作为 markdown files 放在 data/ 下。
- 数据存储:在 data/my-project/index.html 放置嵌入式 HTML app,会自动渲染为 iframe。
- 数据存储:agent 定义在 data/.agents/active/<agent-name>/index.md,memory.md 由 daemon 自动更新。
- 定义 Agent:使用 markdown 文件加 YAML frontmatter。
- 定义 Agent:frontmatter 设置 name、role、schedule、skills、goals。
- 定义 Agent:正文写角色提示,并把 ## Memory 区域留给 daemon 自动追加。
- 用 UI 创建自定义 Agent:进入 sidebar 的 Agents panel。
- 用 UI 创建自定义 Agent:点击 New Agent,选择 template 或 blank。
- 用 UI 创建自定义 Agent:填写 role、goals、schedule。
- 用 UI 创建自定义 Agent:Cabinet 创建 data/.agents/active/<agent-name>/index.md。
- 编程创建 Agent:导入 fs from 'fs/promises' 和 path from 'path'。
- 编程创建 Agent:设置 agentDir = path.join(process.cwd(), 'data', '.agents', 'active', 'my-agent')。
- 编程创建 Agent:await fs.mkdir(agentDir, { recursive: true })。
- 编程创建 Agent:await fs.writeFile(path.join(agentDir, 'index.md'), 带 frontmatter 的 markdown)。
- 定时任务:在 frontmatter 的 schedule 字段使用标准 cron 语法。
- 定时模式:0 */6 * * * 每 6 小时。
- 定时模式:0 9 * * 1 每周一上午 9 点。
- 定时模式:0 8 * * * 每天上午 8 点。
- 定时模式:*/30 * * * * 每 30 分钟。
- 定时模式:0 0 * * 0 每周日午夜。
- 定时任务:daemon 读取 agent files 并通过 node-cron 注册 jobs。
- 定时任务:Jobs 通过 Claude Code 运行 agent prompts,并把结果写回 agent 的 memory file。
- 嵌入式 HTML Apps:在 data/ 下任意文件夹放入 index.html。
- 嵌入式 HTML Apps:Cabinet 自动渲染为嵌入式 iframe,并提供 full-screen toggle。
- 嵌入式 HTML Apps:可在同目录放 data.json、style.css 等文件。
- 嵌入式 HTML Apps:无需 build step。
- 嵌入式 HTML Apps:通过 git 自动版本控制。
- Git 历史:每次保存自动 commit。
- Git 历史:git 操作封装在 src/lib/git.ts。
- Git 历史 UI:打开任意 page,点击 toolbar 的 history icon,浏览 diffs 并恢复任意版本。
- Git 历史 CLI:cd data。
- Git 历史 CLI:git log --oneline。
- Git 历史 CLI:git diff HEAD~1 HEAD -- my-project/research.md。
- Git 历史 CLI:git checkout HEAD~5 -- my-project/research.md 恢复旧版本。
- Markdown 页面:使用标准 markdown,可选 frontmatter。
- Markdown 页面:frontmatter 可设置 title、tags、created、agent。
- Markdown 页面:让 agent 更新追加到 ## Last Updated by Agent 区域。
- API:GET /api/pages?path=my-project/research 读取页面。
- API:POST /api/pages 保存页面,Body 包含 path 和 content。
- API:GET /api/files?dir=my-project 列出目录。
- API:POST /api/agents/run 手动运行 agent,Body 包含 agentId。
- API:GET /api/agents/status?id=research-scout 获取 agent 状态。
- API:GET /api/search?q=competitor+analysis 搜索所有页面。
- TypeScript 调用:用 fetch('/api/pages?path=my-project/research') 读取并解构 { content, path }。
- TypeScript 调用:用 fetch('/api/pages', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ path, content }) }) 保存页面。
- TypeScript 调用:用 fetch('/api/agents/run', { method: 'POST', headers: { 'Content-Type': 'application/json' }, body: JSON.stringify({ agentId: 'research-scout' }) }) 触发 agent。
- Zustand:在组件中使用 usePageStore 获取 currentPage、savePage、pages。
- Zustand:调用 await savePage({ path: currentPage.path, content }) 保存页面。
- Zustand:使用 useAgentStore 获取 agents、runAgent、agentStatus。
- Zustand:用 runAgent(agent.id) 运行 agent。
- 预置 Agent Templates:位于 data/.agents/.library/。
- 预置角色:Leadership 有 CEO、COO、CFO、CTO。
- 预置角色:Product 有 Product Manager、UX Designer。
- 预置角色:Marketing 有 Content Marketer、SEO Specialist、Social Media、Growth Marketer、Copywriter。
- 预置角色:Engineering 有 Editor、QA Agent、DevOps Engineer。
- 预置角色:Sales & Support 有 Sales Agent、Customer Success。
- 预置角色:Analytics 有 Data Analyst。
- 预置角色:Operations 有 People Ops、Legal Advisor、Researcher。
- 激活模板:cp data/.agents/.library/researcher.md data/.agents/active/my-researcher/index.md。
- 激活模板:编辑复制文件中的 goals 和 schedule。
- 添加新模板:在 data/.agents/.library/custom-scout.md 创建 markdown。
- 添加新模板:frontmatter 设置 name、role、schedule、skills、goals。
- 添加新模板:正文写 instructions,例如搜索过去 24 小时新闻、选 5 条、每条 2-3 句摘要、追加到 data/research/daily-digest.md 并带日期标题。
- 添加新模板:保留 ## Memory 区域供自动填充。
- Pattern 1:用 data/company/overview.md 人工维护公司概览。
- Pattern 1:用 data/company/competitors/analysis.md 由 agent 每周更新。
- Pattern 1:用 data/company/competitors/index.html 自动生成 dashboard。
- Pattern 1:用 data/agents/competitor-scout/index.md 每周一运行,memory.md 记录上周发现。
- Pattern 2:让 Researcher agent 每 6 小时 scout Reddit/HN,写入 data/inbox/。
- Pattern 2:让 Analyst agent 每日汇总 inbox,写入 data/research/weekly.md。
- Pattern 2:让 CEO agent 每周一读取 weekly.md,写战略笔记。
- Web 终端:按 Ctrl+反引号 或点击 sidebar 的 terminal icon。
- Web 终端:直接运行 Claude Code,例如 claude "analyze the data in research/competitors.md"。
- Web 终端:使用 full shell 编辑文件、运行脚本、提交 git。
- 故障排查 daemon 未启动:检查 lsof -i :3001。
- 故障排查 daemon 未启动:必要时 kill -9 $(lsof -t -i:3001)。
- 故障排查 daemon 未启动:重启 npm run dev:all。
- 故障排查 Claude Code not found:npm install -g @anthropic-ai/claude-code。
- 故障排查 Claude Code not found:claude --version 验证。
- 故障排查 Agent jobs 未运行:npm run dev:daemon 查看 daemon logs。
- 故障排查 Agent jobs 未运行:用 https://crontab.guru 验证 cron 语法。
- 故障排查 Agent jobs 未运行:检查 agent frontmatter 有有效 schedule 字段。
- 故障排查 Git history 不工作:cd data。
- 故障排查 Git history 不工作:git status。
- 故障排查 Git history 不工作:如果未初始化,git init。
- 故障排查 Git history 不工作:git add .。
- 故障排查 Git history 不工作:git commit -m "initial"。
- 故障排查端口冲突:Next.js 用 3000,daemon 用 3001。
- 故障排查端口冲突:在 package.json scripts 覆盖端口或设置 PORT env var。
- 故障排查端口冲突:例如 PORT=3002 npm run dev。
- 故障排查 Embedded HTML app 不渲染:文件必须恰好命名为 index.html。
- 故障排查 Embedded HTML app 不渲染:必须位于 data/ 下的文件夹内。
- 故障排查 Embedded HTML app 不渲染:检查 browser console 的 CSP/iframe 错误。
- 故障排查 Embedded HTML app 不渲染:尝试直接访问 http://localhost:3000/apps/my-folder。
- 生产自托管:npm run build。
- 生产自托管:npm run start 同时运行 Next.js 和 daemon。
- 生产自托管:用 PM2 运行 pm2 start npm --name "cabinet" -- run start。
- 生产自托管:pm2 save。
- 生产自托管:pm2 startup。
- Nginx 反向代理:server 监听 80,server_name yourdomain.com。
- Nginx 反向代理:location / 使用 proxy_pass http://localhost:3000,设置 proxy_http_version 1.1、Upgrade、Connection upgrade、Host headers。
- Nginx 反向代理:location /ws 使用 proxy_pass http://localhost:3001,设置 proxy_http_version 1.1、Upgrade、Connection upgrade。
- 资源:参考 runcabinet.com、discord.gg/rxd8BYnN、runcabinet.com/waitlist、github.com/hilash/cabinet、@HilaShmuel 和 CHANGELOG.md。
适用边界 · 注意事项
- 不适用:不想安装 Node.js 20+、Claude Code CLI 或承担自托管维护。
- 不适用:需要开箱即用的云托管、数据库驱动或完全不依赖本地文件的方案。
- 不适用:只在非 WSL 的 Windows 环境运行。