Odel
no_human

no_human

Local
@no-human-ai55PythonMITUpdated 1w ago

File a task with your local no_human and check on it: task_add and task_status over stdio.

no_human

From ticket to reviewed pull request.
Free and open-source, on your machine.

English · 简体中文 · 日本語 · 한국어

latest release CI python 3.12+ license MIT

getnohuman.com · Quickstart · Docs · Watch it work a sprint

Download for macOS Download for Windows Download for Linux

The no_human board: one task waiting on a question in Needs answer, four tasks working in parallel, one pull request ready for review.

Watch the loop — a ticket in, a reviewed pull request out; the whole loop in 57 seconds.

The AI coding factory you can trust:

  • A plan before any code, from the ticket plus what it finds in your repo. When planning fails, the coder is told it is working without one; when the change is judged trivial the plan is skipped without telling the coder, by design — the skip is still stated in the run's event stream.
  • An adversarial review. A different model, in a session that never saw the coder's transcript, told to refute "done". You get a pass/fail checklist citing file and line — never a numeric self-score.
  • A tamper guard. Deleted tests, new skips, an assertion turned into a tautology — counted mechanically before the review gate runs, then justified against your acceptance criteria or the attempt stops.
  • Proof the fix fixed the bug. The tests offered as evidence must fail at the merge base and pass on the new tree — the reproduction gate runs both. Out of the box that binds a Python bug fix; repro_gate.mode: required binds every kind and every change.
  • Your tests run, locally and optionally through your CI — and a PR that found no test command says NOT RUN on its face.
  • An honest stop. When it cannot finish it stops and says why — a specific question when your answer would unblock it, a structured record when it has simply run out of budget — never an invented plausible diff.

Install

Whichever way you install, you need a Claude credential: an OAuth token from claude setup-token (personal subscription or enterprise), so install the Claude Code CLI first — npm install -g @anthropic-ai/claude-code, or curl -fsSL https://claude.ai/install.sh | bash. The desktop app also calls that CLI for every task. To pay Anthropic directly instead, set llm.auth_mode: "api_key" and put your ANTHROPIC_API_KEY in ~/.no_human/.env.

One line (CLI + board)

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

Desktop app

Download for macOS Download for Windows Download for Linux

Each release ships a SHA-256 alongside the artifact. Platform notes and the first-run walk-through: docs/quickstart.md.

From source

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

The web build is not optional if you want the board: a source checkout ships no web/dist, so without it nh start serves the API only and renders no UI. Needs Python 3.12+, uv, git, and Node with npm for the board build.

Run one task

Run nh with no arguments for the shell: your lanes, a live event tail, and an intake you describe a task to in plain English. Every command below still works.

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

Integrations

Point no_human at the tracker you already use and it pulls the tickets to your board — a tracker's filter lives in your config, never in a task's own text, and a transport error logs and retries on the next tick instead of crashing the pool.

TrackerHow tickets arriveFilter you configure
Jira CloudPolled via REST search/jql (HTTP Basic email:token)integrations.jira.jql
LinearPolled via the GraphQL APIintegrations.linear.team_key + state_types + label
monday.comPolled via GraphQL v2integrations.monday.board_id + status_column + todo_labels

With write-back on (write_back, off by default), the ticket moves with the task — matched by status category, type, or the label you name, never a hard-coded transition id — and gets the PR link; a task that needs a human is commented on, never transitioned. GitHub and GitLab issues import as tasks by URL, and PRs or MRs open on your own host; Slack and Teams get a message when a task needs you; Jenkins and CircleCI can run your test layers and gate the loop. Setup for each: docs/adapters.md.

Watch the Jira flow end to end — tickets synced from a Jira board, scoped, implemented, and delivered as a review-passed pull request (click for the full video with every step):

Jira flow demo

▶️  Play the full demo — 1:33, from Jira board to review-passed PR

MCP server — hand it work from the agent you are already in

no_human ships an MCP (Model Context Protocol) server: a stdio bridge, built on the official Python MCP SDK, that lets Claude Code, Cursor or any MCP client file work with your local no_human and check on it.

nh mcp-serve        # the MCP server, over stdio

Two tools, and no more:

ToolWhat it does
task_add(title, description, repo_path)Files a task. no_human then plans it, writes the change, runs your tests, has a second model review it, and opens the pull request.
task_status(task_id_or_external_id)Returns that task's current state — status, attempts, the PR link once there is one.

It talks to your own no_human at http://127.0.0.1:8420 and nothing else: no auth, because that address is localhost, and no service of ours in between. For Claude Code, the same server ships as a plugin — this repository is its own plugin marketplace, so the two tools appear in your session after:

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

Any other MCP client takes the usual stdio entry:

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

Docs

quickstart.mdZero to first task, per platform
configuration.mdEvery setting and default
verification.mdThe gates, the bounded loop, the limits
security.mdAuth boundary, the never-merge rule, guards
blockers.mdEscalation, wake watcher, nh reply
adapters.mdIntake, context, VCS and CI backends
eval.mdGolden set, replay scoring, shadow mode
CHANGELOG.mdWhat changed, per release

Development

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

Issues and pull requests welcome; run uv run pytest -q before submitting.

If no_human saved you a review cycle, a star helps other people find it: GitHub stars

License

MIT — see LICENSE. The licence covers the code, not the name: TRADEMARK.md is the policy on using "no_human" and the logo. Packaging a binary carries obligations the source tree does not, listed in THIRD-PARTY-NOTICES.md.