mcpField
N
no_human

no_human

本地服务
getnohuman.com开发工具3303 周前更新

关于 no_human

no_human 是在本机运行的 AI 编码任务系统,面向希望从工单推进到已审查 PR 的团队。它在交付前加入独立模型审查、测试防篡改检查和修复复现验证。

主要功能

  1. 01工单转编码任务
  2. 02先规划再编写代码
  3. 03独立模型审查并列出行号
  4. 04检测测试删除与弱化
  5. 05验证修复测试在新旧代码上的结果
  6. 06本地或 CI 运行测试

适用场景

  1. 01从 Jira 或 Linear 工单创建开发任务
  2. 02检查 PR 是否削弱或删除测试
  3. 03验证缺陷修复测试能否复现旧问题
  4. 04在审查通过后批准并合并 PR

MCP 相关

提供 stdio MCP 服务,暴露 task_add 和 task_status 工具,供 MCP 客户端创建任务并查询状态。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"no-human-ai-no-human": {
"command": "uvx",
"args": [
"no-human"
]
}
}
}
启动命令uvx no-human

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypino-human0.2.3

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

README 配图

no_human

从工单到经过审核的拉取请求。
免费开源,运行在你的机器上。

English · 简体中文 · 日本語 · 한국어 · Español · Français · Deutsch · Português (Brasil)

latest release CI python 3.12+ license MIT downloads Discord

getnohuman.com · 快速入门 · 文档 · 观看它完成一个冲刺 · Discord

Download for macOS Download for Windows Download for Linux

no_human 看板:一个任务在“需要答复”中等待问题的答案,四个任务并行处理中,一个拉取请求已准备好接受审核。

▶ 观看整个流程 — 输入一个工单,输出一个经过审核的拉取请求;57 秒看完整个流程。

你可以信任的 AI 编码工厂:

  • 先制定计划,再编写任何代码,依据工单和它在你的代码仓库中发现的内容。 计划制定失败时,会告知编码器它正在无计划的情况下工作;如果判断更改很简单,则会按设计跳过计划而不告知编码器——跳过这一事实仍会记录在运行事件流中。
  • 对抗式审核。 由另一个模型在从未看过编码器对话记录的会话中进行,并被要求反驳“已完成”的说法。你会得到一份通过/未通过清单,其中引用文件和行号——绝不会给出数字自评分。
  • 防篡改保护。 删除测试、新增跳过项、把断言改成恒真式——审核关卡运行前会通过机械方式统计这些情况,然后根据你的验收标准说明理由,否则就停止尝试。
  • 修复确实解决了 Bug 的证明。 作为证据提交的测试必须在合并基点上失败,并在新代码树上通过——复现关卡会在两者上都运行测试。开箱即用时,这会约束 Python Bug 修复;repro_gate.mode: required 则会约束所有类型和所有更改。
  • 运行你的测试,在本地运行,也可选择通过你的 CI 运行——如果 PR 没有找到测试命令,就会明确标示为 NOT RUN。
  • 如实停止。 无法完成时,它会停止并说明原因——如果你的回答能让它继续,就提出具体问题;如果只是预算耗尽,就给出结构化记录——绝不会编造一个看似合理的差异。

关卡拦截了什么

no_human 用 no_human 构建 no_human。在它自己的看板上运行 65 天以上,以下情况无一进入拉取请求:

  • 编码器称已完成的 1,709 次尝试中,有 505 次 被第二个模型退回,每次都附有引用文件和行号的通过/失败检查清单。
  • 有 44 次尝试 在审查开始前就被拦截,因为它们删除或削弱了测试。
  • 有 46 份错误修复证明 被拒绝,因为作为证据提供的测试在旧代码上也能通过。

这些数据的统计方式

安装

一行命令(CLI + 看板)
uv tool install no-human   # or: pipx install no-human — the wheel ships the board
nh init && nh doctor       # token, config, first repo; then prove the install is real
桌面应用

下载 macOS 版 下载 Windows 版 下载 Linux 版

每个版本都会随附与构建产物一同发布的 SHA-256 校验值。平台说明和 首次运行指南:docs/quickstart.md。

从源码构建
git clone https://github.com/no-human-ai/no_human.git && cd no_human
uv sync                 # installs the `nh` entry point into .venv
(cd web && npm install && npm run build)   # builds the board (cold first install can take minutes)
uv run nh init          # token, config, first repo (about 2 minutes)
uv run nh doctor        # verify the install is real before relying on it

如果需要看板,web 构建并非可选项:源码检出版本不包含 web/dist,因此不执行该构建时,nh start 只会提供 API,不会渲染 UI。 需要 Python 3.12+、uv、git,以及用于构建看板的 Node 和 npm。

产品亮点

编写代码前先制定计划

根据任务单和你的代码仓库撰写可检查的验收标准。

任务计划:我们将任务理解为三项验收标准、需要修改的两个文件、实现方法、测试计划、不在范围内的内容,以及验证命令。
独立审查者

另一个模型从未见过编码者的会话,并被要求反驳“已完成”的结论。给出通过或失败结果;每条阻塞性问题都会注明文件和行号。

审查者的结论:PASSED,每项验收标准都已勾选,并标出满足条件的文件和行号;还有一条非阻塞性小问题,注明对应的差异。
测试结果直接显示在 PR 上

可在本地运行,也可通过 CI 运行。找不到测试命令时会显示 NOT RUN,绝不会留空。

任务的测试结果面板:CLEAN,5 项测试全部通过,下方显示 pytest 输出。
防篡改保护

审查前会统计被删除的测试、新增的跳过项和同义反复断言。若没有正当理由,尝试就会停止。

一次已停止的尝试:红色的 TAMPER DETECTED 横幅、审查者结论 FAILED,以及一条阻塞性问题,指出在没有验收标准作为依据的情况下删除了三个测试。
证明修复确实修好了缺陷

作为证据提交的测试必须在旧代码上失败、在新代码上通过。门禁会分别运行两者,事件日志会显示结论。

任务的事件日志:测试通过,状态为 reviewing,审查者的防篡改检查结果为 none,复现门禁结果为 pass、状态为 required,随后执行 lint、提交并创建拉取请求。
坦诚地暂停

需要你提供信息时,它会停下来并提出一个具体问题,而不是猜测。

看板的 Needs answer 列:一项任务暂停等待答复,并显示问题“按用户去重,还是按摘要 ID 去重?”,以及一个 Answer question 按钮;旁边是 Working 和 Review PR 列。
跟踪工具中的任务单,显示在你的看板上

从待办列表中选择 Jira 或 Linear 任务单(会轮询 monday.com 看板)。每项任务都会先与你一起明确范围,再开始执行。

从 Jira 同步的待办列表:选中了四个匹配的任务单,并显示一个 Start 4 tasks 按钮。

截图:演示工作负载中的真实看板。

运行一个任务

不带参数运行 nh 即可打开 shell:查看你的任务列、实时事件流,以及一个可用通俗语言描述任务的输入区。以下每条命令仍然有效。

nh                                   # the shell
nh start                             # board + worker on 127.0.0.1:8420
nh task add https://github.com/org/repo/issues/42 --repo ~/git/repo
nh status                            # needs-you / working / waiting / done
nh review <id>                       # the reviewer's evidence checklist
nh diff <id>                         # the diff it wants to ship
nh approve <id>                      # your approval squash-lands the PR (git.approve_identity)
nh reject <id> --reason "..."        # send it back with feedback

集成

将 no_human 指向你已在使用的跟踪器,它就会将工单拉取到你的看板 — 跟踪器的筛选条件保存在你的配置中,绝不会写在任务自身的文本里;传输错误会被记录,并在下一次轮询时重试,而不是导致任务池崩溃。

跟踪器工单的获取方式你配置的筛选条件
Jira Cloud通过 REST search/jql 轮询(HTTP Basic email:token)integrations.jira.jql
Linear通过 GraphQL API 轮询integrations.linear.team_key + state_types + label
monday.com通过 GraphQL v2 轮询integrations.monday.board_id + status_column + todo_labels

启用写回(write_back,默认关闭)后,工单会随任务一同流转 — 根据状态类别、类型或你指定的标签匹配,绝不使用硬编码的 transition id — 并附上 PR 链接;需要人工处理的任务会收到评论,绝不会被流转。GitHub 和 GitLab 的 issue 会按 URL 导入为任务,PR 或 MR 会在你自己的主机上创建;任务需要你处理时,Slack 和 Teams 会收到消息;Jenkins 和 CircleCI 可以运行你的测试层并为工作流设置门禁。各项配置说明: docs/adapters.md。

查看 Jira 工作流的完整过程 — 从 Jira 看板同步工单、确定范围、完成实现,到交付通过评审的拉取请求(点击观看包含每个步骤的完整视频):

Jira flow demo

▶️  播放完整演示 — 1:33,从 Jira 看板到通过评审的 PR

GitHub Action

将同一套对抗式审查器和篡改防护作为拉取请求检查运行 — 单次运行,无守护进程,无 ~/.no_human 数据库,也不走会将任务排入队列的 nh review CLI 路径。它只评估差异:与本地运行不同,它不会收集 lint、接线或类型证据,也不会探索代码仓库。它会发布一条包含 file:line 引用的通过/失败清单评论;评论通过自身标记查找,并在每次运行时原位更新,而不是每次都新建一条。该评论会用 @ 提及拉取请求的作者(作者信息来自事件载荷,绝不从差异或 PR 自身的标题/正文中获取)— GitHub 会在首次运行创建评论时发送通知,但在后续原位编辑评论时不会发送;评论会明确说明本次运行属于哪种情况。

# .github/workflows/review-gate.yml
name: no_human review gate
on:
  pull_request:

permissions:
  contents: read
  pull-requests: write

jobs:
  review:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
        with:
          fetch-depth: 0
          ref: ${{ github.event.pull_request.head.sha }}
      - uses: no-human-ai/[email protected] # a release tag; a reviewed SHA is stronger — see below
        with:
          credential: ${{ secrets.ANTHROPIC_API_KEY }}
          github_token: ${{ github.token }}

permissions.contents: read 允许 actions/checkout 读取此代码仓库;pull-requests: write 则用于允许 Action 发布/更新自己的评论。两者都不会授予更广泛的权限。检出步骤中显式设置 ref: ${{ github.event.pull_request.head.sha }} 也很重要:对于 pull_request 事件,actions/checkout 默认检出的是临时合并提交,而不是 PR 的实际头部提交;Action 会根据磁盘上的代码树审查并引用行号 — 如果检出的不是正确代码树,它会拒绝运行,而不是审查错误的版本。因此,省略此处的 ref: 会导致红色且可采取行动的退出码 2,而不是悄无声息地错误审查。

此 Action 目前还没有 v1 标签。v0.2.4 是首个包含 action.yml 的发布标签,因此 no-human-ai/[email protected] 可以解析,也是上方示例固定使用的版本 — 但发布标签不是会自动更新的主版本,而 @main 指向最近合入的内容。你已审查过的提交 SHA(no-human-ai/no_human@<sha>)则更加可靠:分支按定义会移动,标签也可以被移动,因此只有 SHA 能确保此代码仓库之后的更改不会改变你的工作流实际运行的内容 — 而此 Action 运行时会使用你的凭据。 credential 接受两种形式的 Anthropic 凭据:ANTHROPIC_API_KEY(sk-ant-api...)或通过 claude setup-token 生成的 Claude 订阅 OAuth 令牌(sk-ant-oat...)。Action 会根据前缀自动检测,也可以通过 credential_mode: oauth / credential_mode: api_key 显式指定。无论传入哪种形式,审核器运行前,另一条凭据路径都会从作业环境中清除;凭据值一经读取,便会立即在日志中屏蔽。

必须提供凭据,不会静默回退。 如果 secrets.ANTHROPIC_API_KEY(或你接入 credential 的其他密钥)为空、未设置,或即使在 auto 模式下也无法识别其形式,运行会以退出代码 2 明确失败,并指出 credential 输入项和所需密钥;此时审核器和任何 GitHub API 调用都尚未运行。审核器本身出错或模型调用遭拒时,同样会采用失败关闭规则,退出代码也为 2。凭据或审核器出错时,Action 绝不会发布 PASS,也绝不会以 0 退出——但绿色勾选并不总是表示该门禁审核了代码:来自 fork 的拉取请求会以退出代码 0 跳过,且不会调用审核器(见下文);没有差异(无内容可审查)的拉取请求则会发布模拟 PASS,且不会调用审核器或防篡改检查。如果将此项设为必需检查,必须将这两种情况都视为“未审核”,而不是批准。差异超过审核器单轮处理上限时,会以退出代码 2 拒绝,而不会只审核被截断的前缀;因此这种情况绝不会显示绿色勾选:请降低 max_files 或拆分拉取请求。

来自 fork 的拉取请求会被跳过,而非审核。 如果拉取请求的 head 不属于此仓库——包括已删除 fork 发起的拉取请求——就不会交给审核器或模型处理;Action 会以退出代码 0 结束,并说明跳过原因且不发表评论,而不会在能够访问密钥的作业中针对未经审查的 head 运行审核代码。pull_request_target 会被直接拒绝(退出代码 2),即使凭据有效也不例外,因为这种触发器可能将 fork 的 head 带入可访问密钥的作业。

workflow_run 也是受支持的触发器。它会通过 GitHub REST API 还原拉取请求编号、head 提交和变更文件,而不是从 pull_request 载荷中读取。由于此模式下没有已检出的仓库工作树,因此不会运行防篡改检查;发布的评论会明确说明这一点,而不会让人误以为已通过防篡改检查。

Dependabot 发起的拉取请求会以退出代码 2 失败关闭,这是 GitHub 的限制,而非此 Action 的限制。 Dependabot 发起的拉取请求与其 head 属于同一仓库——它不是 fork,因此不会被上述检查跳过——但 GitHub 本身会在 pull_request 事件触发的工作流运行中屏蔽仓库密钥(并将 GITHUB_TOKEN 降级为只读),这是平台层面的一项防护措施,用于防止锁文件更新将恶意安装脚本带入可访问密钥的作业。因此,这些运行中的 credential 会为空;此 Action 自身的失败关闭规则(见上文)会使其以可采取措施的退出代码 2 标红,并指出缺少哪个密钥,而不会静默跳过或错误地显示 PASS。如果你要求此项检查通过,并希望 Dependabot 的拉取请求显示绿色勾选,可以在分支保护规则中将其豁免,或者接受它们需要维护者像处理其他需要密钥、但 GitHub 不会提供给机器人触发作业的检查一样,手动重新运行或批准。 成本取决于文件数,而非令牌数或时间。 max_files(默认值为 15)限制发送给审查器的变更文件数量,按路径排序后取前 N 个;评论会报告实际审查的文件数占总数的多少。审查器以 single_turn 运行,因此通过时只需一次模型调用来处理数量受限的差异;未通过时可能再进行一次有界的反驳审查。粗略来说,根据差异大小,这会消耗你自己的 Anthropic 用量,费用从几美分到几十美分不等,与运行一次本地 nh review 的成本相近。这与运行器每次构建 Docker 镜像的一次性成本是分开的;除非你的工作流缓存了镜像,否则每次运行都会花费几十秒的 GitHub 托管运行器计算时间,而非模型费用。降低 max_files(或拆分大型拉取请求)可以减少花费。

该 Action 除了发布一条自己的评论外,绝不会合并、推送、批准或编辑拉取请求中的任何内容——这由代码强制执行,而非仅凭约定:每次 GitHub API 调用发出前,都会检查它是否属于仅包含两个端点的允许列表(列出/创建/更新那一条评论)。将 fail_on_findings: false 设为不因检查失败而保留评论,或将 dry_run: true 设为仅在作业日志/摘要中输出结论,完全不调用 GitHub API。

已知限制:防篡改保护关于“完整测试树”的说法仅适用于 ASCII 测试文件名,不适用于非 ASCII 文件名。 防篡改检查会通过未加引号的 git ls-tree 遍历仓库中的每个测试文件(而不只是发送给审查器的、受 max_files 限制的子集),因此,名称包含非 ASCII 字节的测试文件会以 Git 的 C 引号字符串形式列出(例如 "r\303\251gression_test.py"),而非其真实路径,因而会被静默排除在前后对比之外——目前无法检测此类文件是否被删除或弱化。该 Action 自身的差异/审查文件列表不受同类问题影响(它会明确地重新引用并重新验证交给审查器的每个路径),但底层防篡改检查模块不在此 Action 的修改范围内。如果你的测试套件包含非 ASCII 测试文件名,在上游修复此问题前,请将防篡改保护对这些特定文件视为尽力而为。

已知限制:两个运行同时进行,或拉取请求已有 1,000 条以上其他评论时,可能会产生重复评论。 该 Action 会列出拉取请求的评论(最多 10 页,每页 100 条),并选取带有其标记的最低 ID 评论,以查找自己先前发布的评论;如果两个运行几乎同时启动,都可能在任一运行创建评论之前完成列表操作,随后各自创建一条评论。之后任一运行都会恢复一致——再次列出评论,找到最低 ID 的带标记评论并更新它——但不会删除多出的评论。“先列出,再操作”的间隙还意味着,如果带标记的评论只会出现在第 11 页或更后(即拉取请求已有 1,000 条以上其他评论),它会被视为不存在,于是会新建评论而非更新已有评论。这两种情况都是已接受并记录在案的限制,而非静默失败:如果你的工作流可能针对同一次提交触发两次运行,请添加一个以拉取请求为键的 concurrency: 分组,将两次运行串行化。

MCP 服务 — 将工作交给你当前 Agent 中的助手

no_human 提供 MCP(Model Context Protocol)服务:这是一个基于官方 Python MCP SDK 构建的 stdio 桥接程序,可让 Claude Code、Cursor 或任何 MCP 客户端向本地 no_human 提交工作并查看进度。

nh mcp-serve        # the MCP server, over stdio

只有两个工具,不多不少:

工具功能
task_add(title, description, repo_path)提交一项任务。随后,no_human 会规划任务、编写更改、运行测试、让第二个模型进行审核,并创建拉取请求。
task_status(task_id_or_external_id)返回该任务的当前状态——状态、尝试次数,以及创建拉取请求后的链接。

它只与您自己的 no_human 通信,地址为 http://127.0.0.1:8420:无需身份验证,因为该地址是 localhost,且中间没有我们的任何服务。对于 Claude Code,同一服务也以插件形式提供——此仓库本身就是它的插件市场,因此完成以下操作后,这两个工具就会出现在您的会话中:

/plugin marketplace add no-human-ai/no_human
/plugin install no-human@no-human-ai

其他 MCP 客户端使用常见的 stdio 入口:

// .mcp.json
{ "mcpServers": { "no_human": { "command": "nh", "args": ["mcp-serve"] } } }

该插件还提供 review-this-branch 技能,无需 MCP 服务或 ~/.no_human:它会运行 nh gate 这个一次性 CLI 命令,使用您自己的 Claude 凭据,直接在当前分支或 GitHub 拉取请求上启动新会话对抗式审查器和防篡改守卫,然后退出并输出通过/失败的 Markdown 检查清单;除了 nh CLI 本身,不会安装或运行任何其他内容。

nh gate                        # current branch vs. its merge base with origin's default branch
nh gate --pr <github-pr-url>   # a GitHub pull request's head vs. its merge base

文档

quickstart.md各平台从零开始到提交第一个任务
configuration.md所有设置和默认值
verification.md关卡、有限循环及其限制
security.md身份验证边界、绝不合并规则及守卫
blockers.md升级处理、唤醒监视器、nh reply
adapters.md接收、上下文、VCS 和 CI 后端
eval.md黄金集、回放评分、影子模式
CHANGELOG.md各版本的变更内容

开发

uv sync
uv run pytest -q
uv run nh --help

欢迎提交问题和拉取请求;提交前请运行 uv run pytest -q。

如果 no_human 帮您省下了一轮审核,点个星标可以帮助更多人发现它: GitHub 星标

社区

如有问题、Bug 报告或值得展示的运行记录,请加入 Discord, 在 r/no_human 发帖,或提交 GitHub 问题。

许可证

MIT — 请参阅 LICENSE。该许可适用于代码,不适用于名称: TRADEMARK.md 说明了使用“no_human”和徽标的政策。 打包二进制文件需承担源代码树无需承担的义务,详见 THIRD-PARTY-NOTICES.md。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。