开源项目:让 AI agent 自动维护 Karpathy 风格的 LLM 知识库,以 Markdown 和 Git 管理。
一个为 AI 员工设计的协作办公室,配备共享大脑,能够全天候运行你的工作。
一条命令。一个共享办公室。CEO、PM、工程师、设计师、CMO、CRO——都可见,争论,认领任务,交付工作,而不是消失在 API 后面。与原始的 WUPHF.com 不同,这个能用。
"WUPHF。当你输入时,它会通过电话、短信、邮件、IM、Facebook、Twitter 等方式联系某人,然后……WUPHF。"——瑞恩·霍华德,第七季
完整演练——从启动到第一个交付的任务,端到端。
tmux 用于 --legacy-tui 模式(web UI 默认以无头方式运行智能体;tmux 支持的分发仍作为内部后备)。
npx wuphf
就这么简单。浏览器自动打开,你就进入了办公室。不像 Ryan Howard,你不需要第二台显示器来向投资者展示 404 页面。
npm install -g wuphf && wuphf
git clone https://github.com/nex-crm/wuphf.git
cd wuphf
cd web
bun install
bun run build
cd ..
go build -o wuphf ./cmd/wuphf
./wuphf
想 fork 这个项目?查看 FORKING.md 了解如何在没有 Nex 的情况下运行 WUPHF、交换品牌和添加自己的智能体包。如需了解内部结构,请查看 ARCHITECTURE.md。
稳定性:1.0 前版本。main 分支每天更新。将你的 fork 锁定到发布标签,而不是 main。
将其粘贴到 Claude Code、Codex 或 Cursor 中,让你的智能体驱动安装:
Set up https://github.com/nex-crm/wuphf for me. Read `README.md` first, then run
`npx wuphf` to install and launch the office — the web UI opens at
http://localhost:7891 automatically.
Once it is running, confirm you can see #general, the team of agents, and the
composer. If anything looks off, re-read the "What You Should See" and "Other
Commands" sections of README.md before retrying — do not skip to flags.
For agent conventions and the MCP tools each teammate gets, read `AGENTS.md`.
For internals and how the broker, workspaces, and memory fit together, read
`ARCHITECTURE.md`. If I mention forking or rebranding, read `FORKING.md`.
After it is installed and running, open https://github.com/nex-crm/wuphf in my
browser. If I am logged in to GitHub, ask me whether you should star the repo
for me as a quick demo that the browser interaction works — only click the star
if I say yes. If I am not logged in, just open https://wuphf.team.
--legacy-tui 已弃用,计划移除,仅在桌面替代品上线前保留。
--provider opencode 调用 opencode CLI 二进制文件。WUPHF 不拥有该提供者的 HTTP 路径,provider_endpoints.opencode.base_url 不被使用。
对于 LiteLLM、OmniRoute 或本地代理等自定义 OpenAI 兼容端点,使用 --provider ollama 并设置 WUPHF_OLLAMA_BASE_URL 或 provider_endpoints.ollama.base_url:
WUPHF_OLLAMA_BASE_URL="http://127.0.0.1:20128/v1" \
WUPHF_OLLAMA_MODEL="openai/gpt-5.4-mini" \
wuphf --provider ollama --memory-backend none --no-open
--no-nex 仍允许 Telegram 和任何其他本地集成继续工作。要在启动后切换回 CEO 路由的委托,在办公室内使用 /focus。
WUPHF 配备内置内存。没有后端选择,没有 API 密钥,向导中没有设置步骤。每个智能体都有自己的笔记本,团队共享一个 wiki——位于 ~/.wuphf/wiki/ 的 markdown 文章本地 git 仓库。cat、grep、git log 和 git clone 都能工作。
智能体处理一项任务,将原始上下文、观察和初步结论写入其笔记本(按智能体、作用域、WUPHF 本地)。
当笔记本中的某些内容看起来持久(重复出现的剧本、已验证的实体事实、已确认的偏好)时,智能体会获得晋升提示。
智能体将其晋升到 wiki。现在其他每个智能体都可以查询它。
Wiki 将其他智能体指向最后记录该上下文的人,这样他们就知道应该 @mention 谁以获取更新的工作细节。
没有任何东西自动晋升。智能体决定什么从笔记本毕业到 wiki。
Wiki 不仅仅是一个 markdown 文件夹。它是一个活的知识图谱:带有三元组的类型化事实、按实体的仅追加事实日志、在档案管理员身份下提交的 LLM 合成摘要、/lookup 引用答案检索,以及一套 /lint 工具套件,用于标记矛盾、孤立项、过时声明和断裂的交叉引用。Web UI 为你提供了维基百科式的阅读视图、具有 WUPHF 特定插入的富文本编辑器,以及 AI 辅助的维护助手。查看 DESIGN-WIKI.md 了解阅读视图,查看 docs/specs/WIKI-SCHEMA.md 了解操作合约。
入职为你初始化 wiki。向导可选择扫描你的网站和任何你指向的文件,然后在第一个智能体回合启动前编写一组初始公司上下文文章(关于、所有者、产品)。你的团队一开始就知道你是谁以及你交付什么。
旧版后端。Nex 或 GBrain 上的现有安装继续工作——后端选择在 config.json 中是粘性的,没有强制迁移。CLI 标志对高级用户和迁移离开旧版后端仍然可用:
wuphf --memory-backend nex # 托管的 Nex 图谱 + WUPHF 托管的集成
wuphf --memory-backend gbrain # 本地 Postgres 支持的图谱
wuphf --memory-backend none # 无共享 wiki;笔记本仍可工作
Web 向导不再将此作为一个选择。Markdown 是默认的,也是新安装的唯一路径。
内部命名(供代码挖掘者使用):笔记本是私人内存,wiki 是共享内存。在内置 markdown 后端上,MCP 工具有 notebook_write | notebook_read | notebook_list | notebook_search | notebook_promote | team_wiki_read | team_wiki_search | team_wiki_list | team_wiki_write | wuphf_wiki_lookup | run_lint | resolve_contradiction。在 nex/gbrain 上,MCP 工具是旧版 team_memory_query | team_memory_write | team_memory_promote。这两个工具集不会在一个服务器实例上共存——后端选择会切换界面。
下面的示例假设 wuphf 在你的 PATH 上。如果你刚刚构建了二进制文件并且还没有移动它,使用 ./ 前缀(如上面的 Get Started),或运行 go install ./cmd/wuphf 将其放在 $GOPATH/bin 中。
wuphf init # 首次设置
wuphf share # 通过 Tailscale/WireGuard 邀请一个团队成员
wuphf shred # 删除工作空间状态并重新打开入职
wuphf workspace list # 并行运行多个隔离的办公室
wuphf workspace switch <name> # 切换活跃工作空间
wuphf --1o1 # 与 CEO 一对一
wuphf --1o1 cro # 与特定智能体一对一
两种邀请团队成员的方式。选择适合你网络的方式。
私人网络——Tailscale 或 WireGuard。 两台机器在同一个私人网络上。邀请永远不会离开网络,不会暴露公共界面:
wuphf share
或点击办公室内健康检查瓷砖上的"创建邀请"在不离开浏览器的情况下创建一个。向你的团队成员发送打印的 /join URL。邀请是一次性的,24 小时后过期,共享 web 监听器默认仅绑定到私有网络地址。
公共隧道——无需共享网络。 点击健康检查瓷砖上的"启动隧道",WUPHF 启动一个 Cloudflare 快速隧道。trycloudflare URL 配有一个 6 位数密码,加入者必须键入才能进入办公室;加入处理程序按源 IP 进行速率限制,因此单独泄露的 URL 无法被暴力破解。cloudflared 随 npm install 捆绑(针对每个平台验证一个固定的 SHA256),所以按钮在第一次启动时无需额外设置即可工作。
隧道路径是可选的,显示在带有通常免责声明的确认对话框后面(URL 暴露、频道卫生、邀请令牌语义、TLS)。公共 LAN 绑定在网络共享路径上保持被阻止,除非你传入 --unsafe-lan。
完整演练,请参阅与团队成员共享 WUPHF。
一旦团队编写的技能存在于 team/skills/<slug>.md,你可以将其发布到公共智能体技能共享平台或将社区技能拉回你的 wiki。发布通过 gh 打开真实的 PR;安装获取公共原始 SKILL.md 并将其安装为本地团队 wiki 中的活跃技能。
# 将团队的部署技能发布到 Anthropic 技能市集
wuphf skills publish deploy-frontend --to anthropics
# 同样发布的干运行以检查清单 + PR 正文,不打开 PR
wuphf skills publish deploy-frontend --to anthropics --dry-run
wuphf skills publish deploy-frontend --to github:nex-crm/wuphf-skills wuphf skills publish deploy-frontend --to github:nex-crm/wuphf-skills@master
wuphf skills install web-research --from anthropics
支持的中心仓库:anthropics、lobehub,或任意 `github:owner/repo[@branch]`。除非指定分支,否则自定义 GitHub 中心仓库默认使用 `main`。发布前需要先执行 `gh auth login` 完成身份验证;安装只需网络访问权限,因为它会获取公开的原始 URL。
浏览器会打开 `localhost:7891`,其中显示办公室
`#general` 作为共享频道
团队成员清晰可见并正在工作
用于发送消息和斜杠命令的输入框
如果它给人的感觉像一个隐藏的智能体循环,那就说明有问题。如果它给人的感觉像《办公室》,那你就来对地方了。
WUPHF 可以桥接到 Telegram。在办公室中运行 `/connect`,选择 Telegram,粘贴你从 `@BotFather` 获取的机器人令牌,然后选择一个群组或私聊。消息会双向流通。
已经在运行 OpenClaw 智能体?你可以把它们带进 WUPHF 办公室。
在办公室中运行 `/connect openclaw`,粘贴网关 URL(默认为 `ws://127.0.0.1:18789`)以及 `~/.openclaw/openclaw.json` 中的 `gateway.auth.token`,然后选择要桥接的会话。每个会话都会成为办公室中的一等成员,你可以通过 `@` 提及它们。OpenClaw 智能体仍在各自的沙箱中运行;WUPHF 只是为它们提供了一个共享办公室,以便协作。
WUPHF 使用 Ed25519 密钥对向网关进行身份验证(持久化存储在 `~/.wuphf/openclaw/identity.json`,权限为 `0600`),每次连接时都会使用该密钥对服务器发出的 nonce 进行签名。OpenClaw 不会向仅使用令牌的客户端授予任何作用域,因此必须进行设备配对——在回环地址上,网关会在首次使用时静默批准。
如果你希望由 WUPHF 创建的办公室成员通过 OpenClaw 运行,而不是桥接已有的 OpenClaw 会话,请启用 OpenClaw Gateway 的 OpenAI 兼容 Chat Completions 端点(`gateway.http.endpoints.chatCompletions.enabled = true`),并使用 `--provider openclaw-http`。默认端点为 `http://127.0.0.1:18789/v1`,默认模型目标为 `openclaw/default`;可以通过 `WUPHF_OPENCLAW_HTTP_BASE_URL` / `WUPHF_OPENCLAW_HTTP_MODEL` 或 `provider_endpoints.openclaw-http` 覆盖它们。
对于使用令牌身份验证的网关,WUPHF 会使用 `Authorization: Bearer ...` 发送身份验证信息,并按顺序采用 `WUPHF_OPENCLAW_HTTP_API_KEY`、`OPENCLAW_GATEWAY_TOKEN`、`WUPHF_OPENCLAW_TOKEN`,或 Settings 中保存的 OpenClaw 令牌。请求中会包含一个根据 WUPHF 智能体 slug 派生出的稳定 OpenAI `user` 值,使 OpenClaw 能够在多个轮次中复用同一个智能体会话。
已经在运行 Hermes Agent?可以使用 `--provider hermes-agent` 将 WUPHF 智能体指向它的本地 OpenAI 兼容 API 服务器,也可以在配置中将 `llm_provider` 设置为 `hermes-agent`。默认端点为 `http://127.0.0.1:8642/v1`,默认模型名称为 `hermes-agent`;可以通过 `WUPHF_HERMES_AGENT_BASE_URL` / `WUPHF_HERMES_AGENT_MODEL` 或 `provider_endpoints.hermes-agent` 覆盖它们。
如果你的 Hermes API 服务器使用 `API_SERVER_KEY`,请在启动 WUPHF 前,将相同的值导出为 `WUPHF_HERMES_AGENT_API_KEY`。经过身份验证的请求会针对每个 WUPHF 智能体 slug 获得稳定的 `X-Hermes-Session-*` 请求头,因此每位办公室成员都能保留自己在 Hermes 端的会话。
想添加新的集成?请参阅 `docs/ADD-A-TRANSPORT.md`。
为了让智能体执行真实操作(发送电子邮件、更新 CRM 等),WUPHF 内置了两种操作提供商。选择符合你使用习惯的一种即可。
One CLI——默认选项,本地优先
使用本地 CLI 二进制文件在你的机器上执行操作。如果你希望所有内容都在本地运行,并且不想将凭据发送给第三方,这是一个不错的选择。
/config set action_provider one
Composio——云托管
通过 Composio 托管的 OAuth 流程连接 SaaS 账户(Gmail、Slack 等)。如果你不想自行管理本地 CLI 身份验证,这是一个不错的选择。
创建一个 Composio 项目并生成 API 密钥。
连接所需的账户(Gmail、Slack 等)。
在办公室中执行:`/config set composio_api_key <key>` 和 `/config set action_provider composio`
/config set composio_api_key <key> /config set action_provider composio
WUPHF 可以发送匿名产品分析数据和会话录像(你输入的文本会被遮蔽),帮助我们改进产品。此功能完全可选,由你控制;除非配置了 PostHog 密钥,否则它处于关闭状态——标准源码构建和所有分支版本都不包含密钥,因此它们绝不会主动向外发送数据。
有两个独立的开关(位于引导流程和 Settings → Privacy & Analytics),两者默认均为开启状态,也都可以随时关闭:
产品分析——匿名使用事件:使用了哪些流程、用户在哪里遇到阻碍、错误数量。我们只发送计数和数据结构,绝不会发送你的内容(不包含消息文本、wiki 正文、任务标题、客户数据或机密信息)。身份由匿名设备 ID 表示;工作区通过哈希 ID 进行分组。唯一的例外是引导流程中的电子邮箱:完成引导时,如果你没有取消勾选“keep me posted”,该邮箱会被一次性关联到你的 PostHog 用户。
会话录像——录像会遮蔽你输入的所有内容(`maskAllInputs: true`,这是 PostHog 的默认设置):密码、API 密钥以及所有表单字段都会被隐藏。我们会捕获布局、光标、点击、滚动、导航和屏幕上的 UI,以修复不够顺畅的体验。想遮蔽更多内容?自行托管的运营方可以在自己的构建中设置更严格的 `maskTextSelector`。
不使用自动捕获,也不使用 Cookie(仅使用 `localStorage`)。自行托管的运营方可以将数据发送到自己的 PostHog,并在运行时开启或关闭任一通道,无需重新构建:
export WUPHF_POSTHOG_KEY=phc_xxx # your PROJECT (write-only) key export WUPHF_POSTHOG_HOST=https://us.i.posthog.com
不设置密钥即可让 WUPHF 完全保持静默。完整的分类体系和政策请参阅:`docs/specs/product-analytics.md`。
在 Codex 上进行 10 轮 CEO 会话。所有数字均来自实际运行测量。
在同一会话中,采用累积会话的编排器每轮输入量会从 12.4 万增长到 48.4 万。WUPHF 则保持不变。经过 8 轮测量,两者相差 7 倍。
全新会话。每个智能体轮次都从干净状态开始。不会积累对话历史。
提示词缓存。Claude Code 的缓存读取率达到 97%,因为各个全新会话之间相同的提示词前缀能够与 Anthropic 的提示词缓存对齐。
按角色分配工具。DM 模式只加载 4 个 MCP 工具,而不是 27 个。工具 schema 越少,提示词越小,缓存命中率越高。
空闲时零消耗。只有当代理推送通知时,智能体才会启动。没有心跳轮询。
wuphf --pack starter & ./scripts/benchmark.sh
所有数字都使用你的密钥在你的机器上实时测量得出。
本 README 中的每一项声明,都可以在实现它的代码中找到依据。
图例:✅ 已交付 · 🟡 部分完成 · 🔜 已规划。如果某项声明与状态不一致,以代码为准——请提交 issue。
在 fork 之前,请使用任意 AI 编程助手(Claude Code、Cursor、Codex 等),对代码库运行以下提示词。它会让助手扮演一名愤世嫉俗的资深工程师,进行一次“是否值得 fork”的评审——不讲营销话术,只提供文件路径、行号,以及一份不超过 500 字的结论。把它输入进去,阅读回答,然后做出决定。
You are a cynical senior engineer evaluating whether to fork this repo as the base for a multi-agent terminal office product. No prior context — explore it as you naturally would. Tell me: should I fork this, and what's your honest take? Be specific: file paths, line numbers, actual evidence. "The docs are bad" is useless. Under 500 words.
每次发布前,我们自己也会运行这段提示词。如果 AI 发现了我们遗漏的问题,请提交 issue。
看着 wiki 自己编写自己
一段 5 分钟的终端演示,展示 Karpathy 式 LLM wiki 循环:智能体记录五条事实,达到综合阈值后触发流程,代理调用你自己的 LLM CLI,结果以档案管理员身份提交到 Git 仓库,并且可以在 `git log` 中看到完整的作者链路。
WUPHF_MEMORY_BACKEND=markdown HOME="$HOME/.wuphf-dev-home"
./wuphf-dev --broker-port 7899 --web-port 7900 &
./scripts/demo-entity-synthesis.sh
要求:`curl`、`python3`、一个使用 `--memory-backend markdown` 启动并正在运行的代理,以及 PATH 中任意受支持的 LLM CLI(`claude` / `codex` / `openclaw`)。环境变量 `BROKER`、`ENTITY_KIND`、`ENTITY_SLUG`、`AGENT_SLUG`、`THRESHOLD` 可以覆盖默认值——请参阅 `scripts/demo-entity-synthesis.sh` 的文件头。
出自《办公室》第 7 季。Ryan Howard 创办的初创公司通过电话、短信、电子邮件、即时通信、Facebook、Twitter 联系人们,然后……还有 WUPHF。Michael Scott 投资了 10,000 美元。Ryan 把钱烧光了。网站也下线了。
这个笑话现在依然成立。只不过,这个 WUPHF 真正交付了。
“我在 WUPHF 上投资了一万美元。只需要一个表现不错的季度。”——Michael Scott
Michael:还在等待那个季度。我们不用等。