Starts a background runner that works through ready batches of tasks from Plans.md one cycle at a time via Breezing, with status and stop controls.

MITAuto-check: notesAgent Workflows

SKILL.md written in Japanese; this summary is our English description.

Install Harness Loop

skills CLI
$ npx skills add Chachamaru127/claude-code-harness --skill harness-loop -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install Chachamaru127/claude-code-harness harness-loop --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/Chachamaru127/claude-code-harness.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skills-codex/harness-loop .claude/skills/harness-loop && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
harness-loop
GitHub stars
3.2k
Token cost
~2.2k tokens
SKILL.md length
660 words
Files
1
Skills in repo
25
Repo updated
First seen
Licence
MIT

At a glance

Starts a background runner that works through ready batches of tasks from Plans.md one cycle at a time via Breezing, with status and stop controls.

  • Works in 9 steps: project root の .claude/state/codex-loop/… → 受け取った selection を Plans.md から正規化する → Plans.md から Depends が満たされた cc:TODO /… → …
  • Running many independent plan tasks unattended over a long session
  • SKILL.md covers ひとことで, たとえると, Quick Reference and 実行コマンド, plus 9 more sections
  • Calls codex and bash

What it does

The skill launches a real background process rather than a simulated loop. Each cycle picks one ready batch, meaning tasks marked cc:TODO or cc:WIP whose dependencies are met, hands it to Breezing, checks the result and moves to the next batch. Run state is written under .claude/state/codex-loop/ in the project root.

You start it with $harness-loop all or limit it to a range of task IDs from Plans.md, and tune it with options for maximum cycles, maximum workers per cycle, a named plan, pacing and an executor that falls back to one task per local worker. harness codex-loop status shows progress and stop asks it to halt. Before starting, the agent checks the plan's goal, definition of done and approvals, and it does not treat a successful launch as proof the work is finished. The SKILL.md is written in Japanese.

When your agent uses it

  • Running many independent plan tasks unattended over a long session
  • Limiting an autonomous run to a range of Plans.md task IDs
  • Checking the progress of a running background loop
  • Stopping a loop that is partway through its batches

Example prompts

  • “$harness-loop all --max-cycles 3”
  • “Run the loop on tasks 41.1-41.4 only, with at most four workers.”
  • “Show me the status of the running harness loop.”
  • “Stop the background loop once the current job finishes.”

Requirements

  • The harness command-line tool
  • A Plans.md file listing tasks and their dependencies
  • Pre-approved tools (allowed-tools): Read, Bash

Workflow steps

9 steps, taken from the first numbered list in SKILL.md.

  1. project root の .claude/state/codex-loop/ に Harness loop の実行状態を書き出す
  2. 受け取った selection を Plans.md から正規化する
  3. Plans.md から Depends が満たされた cc:TODO / cc:WIP を集め、ready batch を作る
  4. max-workers で ready batch の同時実行数を制限する
  5. 既定では Breezing executor が ready batch を Lead / Worker / Reviewer 分離で実行する
  6. executor task の時だけ、互換用 local worker が 1 task per cycle で codex exec を起動する(CODEX_LOOP_TASK_DRIVER=companion の時だけ bash…
  7. 高リスク task / 2 回目失敗 / plateau 直前では advisor consult を挟む
  8. ready batch 完了後に review / checkpoint / plateau 判定を行う
  9. まだ対象タスクが残っていれば、待機後に次サイクルへ進む

What it can do on your machine

Read from SKILL.md and the folder at commit 2b2b748. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves these tools, so the agent can use them without asking each time:

    • Read
    • Bash

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • codex
    • bash

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Harness Loop loads about 2.2k tokens when it runs. Until then it costs about 77 tokens; SKILL.md has 660 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~77
When it runs · the whole SKILL.md, loaded when a task matches
~2.2k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check: notes

The automated check noted patterns worth knowing about, such as sudo or a known installer.

  • NotePre-approves every shell command (allowed-tools: Bash)SKILL.md
    allowed-tools: Read, Bash

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from Chachamaru127/claude-code-harness at commit 2b2b748, republished under its MIT licence (© Chachamaru127). 660 words, ~2,168 tokens.

Download SKILL.mdSave it as .claude/skills/harness-loop/SKILL.md (or your agent's skills folder).
name
harness-loop
description
HAR: Codex-native long-running loop runner. Uses a real background runner that executes one ready batch per cycle through Breezing by default, with status/stop controls. Trigger: long-running, loop, autonomous, background, Codex. Do NOT load for: one-shot implementation, normal review, release.
allowed-tools
Read, Bash
description-en
HAR: Codex-native long-running loop runner. Uses a real background runner that executes one ready batch per cycle through Breezing by default, with…
description-ja
HAR: Codex 専用の長時間ループ実行。実際のバックグラウンドランナーが ready batch を Breezing で進め、status / stop で監視できる。長時間、loop、ループ、autonomous、background、Codex で起動。
kind
workflow
purpose
Run long-lived Codex ready-batch execution loops
trigger
long-running, loop, autonomous, background, Codex
shape
delegate
role
orchestrator
base
harness-work
pair
harness-sync
owner
harness-core

Harness Loop

Codex 版の harness-loop は、説明だけの擬似ループではなく、 実際にバックグラウンドで回るランナーを起動する。

ひとことで

$harness-loop は、1 回だけの実装依頼ではなく、 「今すぐ実行できる未完了タスクのまとまりを、Breezing で自動実行し続ける当番」を起動する入口。

ここでいう ready batch は、Depends が満たされていて、今すぐ並列実行できる cc:TODO / cc:WIP のまとまり。 1 cycle は 1 task ではなく、原則として 1 ready batch を処理する。

たとえると

人が横でずっと見張る代わりに、 「同時に進められる作業をまとめて見つける → Breezing に任せる → 結果を確認する → 次のまとまりへ進む」 を繰り返す監督係を、裏で常駐させるイメージ。

Quick Reference

入力動作
$harness-loop all未完了タスク全体を長時間ループで開始
$harness-loop 41.1-41.4範囲を絞って開始
$harness-loop JLB3R-02..JLB3R-08Plans.md の task ID 順で範囲を絞って開始
$harness-loop all --max-cycles 3最大 3 サイクルで停止
$harness-loop all --max-workers 41 cycle の ready batch を最大 4 worker までに制限
$harness-loop all --max-workers maxready batch 内で実行可能なタスク数を上限として並列化
$harness-loop all --plan roadmapnamed Plans の roadmap を対象にループ実行
$harness-loop all --executor task旧来の 1 task per cycle local worker 実行へ逃がす
$harness-loop all --pacing nightサイクル間の待機を長めにする
$harness-loop status現在の実行状況を確認
$harness-loop stop進行中ジョブを止めてループ停止要求を出す

実行コマンド

開始
bash
harness codex-loop start all

範囲指定:

bash
harness codex-loop start 41.1-41.4 --max-cycles 5 --pacing worker
harness codex-loop start JLB3R-02..JLB3R-08 --max-cycles 5 --pacing worker
harness codex-loop start all --max-workers max --pacing worker
harness codex-loop start all --plan roadmap --max-cycles 5
harness codex-loop start all --executor task --max-cycles 5

START..END は、Plans.md に並んでいる task ID をそのまま使う範囲指定。 英字やハイフンを含む task ID は .. を優先する。 41.1-41.4 のような従来の数値レンジも引き続き使える。

--max-workers は、Breezing が 1 cycle で同時に動かす worker 数の上限。 max は、選択範囲内で Depends が満たされた ready task の数をそのまま上限にする。 --executor task は、Breezing ではなく local worker に 1 task だけ渡す互換用の逃げ道。 問題切り分けや、並列実行したくない危険な作業で使う。 複数 Plans.md がある repo では、長時間 run の起動時に --plan NAME を明示する。 runner は開始時に解決した Plans file を cycle 間で保持するため、途中で active plan を切り替えない。

起動前に、選択済み plan の目的、担当範囲、DoD、spec、検証証拠、原依頼と承認の参照を確認する。状態確認だけの依頼で start を呼ばない。 再開時は最新の run state と選択済み plan を読み、決定と理由、失敗履歴、残る判断、直前の advisor response を回収する。助言で元の契約や承認境界を置き換えない。 不足は読み取りで補い、軽微な仮定を明示する。承認済み可逆作業は再確認せず進め、保護操作や STOP は既定の停止条件を守る。 起動成功は作業完了の証拠ではない。status、job の実結果、DoD と review の証拠を照合して報告する。必須チェック後の追加検証は新しい変更、失敗、未解決の懸念がある場合に限る。

状態確認
bash
harness codex-loop status
harness codex-loop status --json
停止
bash
harness codex-loop stop

どう動くか

  1. project root の .claude/state/codex-loop/ に Harness loop の実行状態を書き出す
  2. 受け取った selection を Plans.md から正規化する
  3. Plans.md から Depends が満たされた cc:TODO / cc:WIP を集め、ready batch を作る
  4. --max-workers で ready batch の同時実行数を制限する
  5. 既定では Breezing executor が ready batch を Lead / Worker / Reviewer 分離で実行する
  6. --executor task の時だけ、互換用 local worker が 1 task per cycle で codex exec を起動する(CODEX_LOOP_TASK_DRIVER=companion の時だけ bash "${HARNESS_PLUGIN_ROOT}/scripts/codex-companion.sh" task --background --write ... を使う)
  7. 高リスク task / 2 回目失敗 / plateau 直前では advisor consult を挟む
  8. ready batch 完了後に review / checkpoint / plateau 判定を行う
  9. まだ対象タスクが残っていれば、待機後に次サイクルへ進む

Realtime Handoff / Silence Policy

Codex 0.123.0 以降の background agent は realtime handoff で transcript delta を受け取れる。 この delta は「状況把握用の追記」であり、毎回ユーザーへ返答する合図ではない。

ひとことで: background agent は、必要な時だけ報告し、何も判断が変わらない時は明示的に沈黙する。

たとえると、見張り役が廊下でずっと実況するのではなく、異常・完了・判断待ちだけを知らせる形。

報告してよいタイミング:

  • loop 開始、停止、already running、stop 受理など、ユーザー操作に関わる lifecycle 境界
  • 1 ready batch cycle の最終結果、commit、RESULT: APPROVED / RESULT: BLOCKED
  • Breezing Lead が task 完了を progress feed としてまとめて出す時
  • task が blocked、validation failure、review REQUEST_CHANGES、plateau、advisor STOP で止まる時
  • user が status を実行した時、または明示的に途中状況を聞いた時
  • advisor / reviewer drift、contract readiness failure など、放置すると品質判定がずれる時

沈黙するタイミング:

  • transcript delta を受け取っただけで、task / review / advisor の状態が変わっていない時
  • runner.log / jobs/*.log に既に残る細かな stdout だけが増えた時
  • pacing 待機中で、次 cycle まで新しい判断材料がない時

途中報告の頻度:

  • default は「1 ready batch cycle につき最終報告 1 回」。
  • Breezing の task-level progress feed は、batch 内の完了数が動いた時だけ出す。
  • 長い cycle でも、material state change がない限り heartbeat は出さない。
  • 詳細な流れは harness codex-loop status --json と project root の .claude/state/codex-loop/runner.log に寄せ、会話側には要点だけ出す。

Advisor / Reviewer drift との関係:

  • silence policy は drift 検知を弱めるためのものではない。
  • advisor-request.v1 に response がない、review-result.v1 が返らない、contract が未承認などの異常は必ず state / log に残し、必要ならユーザーへ報告する。
  • Advisor は PLAN / CORRECTION / STOP の相談役、Reviewer は最終品質判定役のまま分離する。
Show full SKILL.md (233 more words)Show less

pacing

値用途待機秒数
worker通常の開発ループ270
ci短めに確認したい時270
plateau行き詰まり気味の再試行1200
night長めの放置実行3600

State Path Policy

Codex 版 harness-loop は、Codex native の会話・実行キャッシュと、Harness が共有する project state を分けて扱う。

  • Harness 共通 state: project root の .claude/state/ 配下に置く。Claude 側の advisor / review / checkpoint と共有するため、harness codex-loop status もここを読む。
  • Codex loop runner state: project root の .claude/state/codex-loop/ 配下に置く。これは「Codex 全体の正本」ではなく、Harness loop runner の job / cycle / log 用 state。
  • Codex native state: ${CODEX_HOME:-~/.codex} 配下に残る Codex 自身の thread / transcript / cache。Harness loop の task status、advisor history、review result の正本にはしない。
  • 禁止: .Codex/ や ~/.Codex を正本 path として案内しない。大文字 Codex ディレクトリは historical drift と見なす。

つまり、.claude/state/codex-loop/ は「この project の Harness loop state」であり、Codex native state 全体の固定保存先ではない。

状態ファイル

以下はすべて project root 基準。

  • .claude/state/codex-loop/run.json
  • .claude/state/codex-loop/cycles.jsonl
  • .claude/state/codex-loop/runner.log
  • .claude/state/codex-loop/current-job.json
  • .claude/state/codex-loop/jobs/*.json
  • .claude/state/codex-loop/jobs/*.log
  • .claude/state/codex-loop/jobs/*.out
  • .claude/state/advisor/history.jsonl
  • .claude/state/advisor/last-request.json
  • .claude/state/advisor/last-response.json
  • .claude/state/locks/codex-loop.lock.d

Advisor Consult

Advisor は「代わりに実装する役」ではなく、「次の一手だけ返す相談役」。 loop では次の 3 箇所でだけ呼ぶ。

タイミングreason_code何をするか
高リスク task の初回実行前high-risk-preflight先に固める観点を聞く
同じ原因の 2 回目失敗後retry-threshold方針変更か局所修正かを聞く
plateau による停止直前plateau-pre-escalation本当に止めるべきかを聞く

decision は 3 種だけ。

decisionloop の扱い
PLANadvice を次の executor prompt 先頭に足して再実行
CORRECTION局所修正の指示として再実行
STOPloop を停止し、理由を state と runner.log に残す

同じ trigger は trigger_hash = task_id + reason_code + normalized_error_signature で 1 回だけ相談する。 相談回数は task ごとに最大 3 回で、それ以上はユーザー判断に上げる。

注意点

  • これは 本当に裏で動く。説明だけ返して終わるスキルではない。
  • 同時に 2 本は起動できない。既に走っている場合は already running で止まる。
  • 既定 executor は Breezing。旧来の 1 task per cycle 挙動が必要な時だけ --executor task を使う。
  • 失敗したタスクを無理に飛ばして次へ進めるのではなく、基本はその場で止まって理由を残す。
  • status と runner.log を見れば、今どこで止まっているか追いやすい。

具体例

「Phase 41 の残タスクを、今日の間は自動で回したい」なら:

bash
harness codex-loop start 41.1-41.4 --max-cycles 8 --max-workers max --pacing worker

途中で様子を見る:

bash
harness codex-loop status

夜になって止めたい:

bash
harness codex-loop stop

なぜこの形か

Codex では Claude の /loop と同じ wake-up 機構をそのまま使えない。 その代わり、Codex loop runner を土台にして、 Harness 側で状態管理と再入制御を持ち、実作業は Breezing の batch 実行に寄せる。 そうすると、長時間タスクでも「止める」「再開する」「今の状態を見る」が素直になり、 依存関係を満たした作業だけを安全にまとめて進められる。

© Chachamaru127, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in skills-codex/harness-loop of Chachamaru127/claude-code-harness.

Open the folder on GitHubat commit 2b2b748

Compare with similar skills

Harness Loop next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Harness Loop compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Harness Loop this skillChachamaru127/claude-code-harness3.2k—~2.2kAutomated safety check: NotesMIT
agtx One-Shot Project Runnerfynnfluegge/agtx1.7k—~3.8kAutomated safety check: PassApache-2.0
Cursor Orchestratecursor/plugins10k—~1.1kAutomated safety check: PassNone
GSD Quick Batchopen-gsd/gsd-core10k—~1.4kAutomated safety check: NotesMIT
AutopilotYeachan-Heo/oh-my-claudecode40k1 repos~4.4kAutomated safety check: PassMIT
MemPalace Task HandoffMemPalace/mempalace59k—~1.9kAutomated safety check: PassMIT

Similar skills

  • Runs a whole project unattended on an agtx kanban board, decomposing the goal, starting tasks, unblocking workers and merging each result.

    1.7k GitHub stars~3.8k tokensUpdated 5 days ago
    Agent WorkflowsAuto-check passed
  • Cursor Orchestrate

    cursor/plugins

    Official

    Splits a large goal into a tree of parallel Cursor cloud agents, with planners, workers and verifiers coordinated by a script and reporting through structured handoffs.

    10k GitHub stars~1.1k tokensUpdated today
    Agent WorkflowsAuto-check passed
  • GSD Quick Batch

    open-gsd/gsd-core

    Runs several small /gsd-quick tasks as one batch, with a single coordinator that plans them, dispatches workers per item and owns all shared writes and worktree merges.

    10k GitHub stars~1.4k tokensUpdated yesterday
    Agent WorkflowsAuto-check: notes
  • Autopilot

    Yeachan-Heo/oh-my-claudecode

    Takes a short product idea through requirements, design, planning, parallel implementation, QA cycles and multi-reviewer validation to produce working code.

    40k GitHub starsUsed in 1 repo~4.4k tokens
    Agent WorkflowsAuto-check passed
  • MemPalace Task Handoff

    MemPalace/mempalace

    Creates, hands off, claims, executes and closes agent tasks through the MemPalace logstream, with approval of the exact task before it is recorded.

    59k GitHub stars~1.9k tokensUpdated today
    Agent WorkflowsAuto-check passed
  • Zeroshot

    the-open-engine/zeroshot

    Use Zeroshot to prepare, run, observe, or troubleshoot explicit multi-agent software work locally or on Zeroshot Cloud.

    1.9k GitHub stars~2k tokensUpdated today
    Agent WorkflowsAuto-check passed

More from Chachamaru127/claude-code-harness

All 25 skills in this repo
  • CI Failure Triage and Repair

    Chachamaru127/claude-code-harness

    Diagnoses failing CI pipelines and tests, deciding first whether the test or the implementation is at fault, and hands hard cases to a dedicated fixer subagent.

    3.2k GitHub starsUsed in 1 repo~1.1k tokens
    Auto-check: notes
  • Cursor Composer Task Delegate

    Chachamaru127/claude-code-harness

    Hands one implementation task to Cursor Composer in an isolated git worktree, then reviews its diff and cherry-picks the result into the main branch.

    3.2k GitHub stars~4.4k tokensUpdated 3 days ago
    Auto-check: notes
  • Acceptance Demo Generator

    Chachamaru127/claude-code-harness

    Renders a single HTML page showing each acceptance criterion as verified or not, with a ship, wait, or reject recommendation for non-engineers.

    3.2k GitHub stars~3.4k tokensUpdated 3 days ago
    Auto-check: notes
  • Harness Long-Running Task Loop

    Chachamaru127/claude-code-harness

    Repeats a long task as a series of scheduled wake-ups, each re-entering with fresh context and calling harness-work for one task per cycle.

    3.2k GitHub stars~2.3k tokensUpdated 3 days ago
    Auto-check: notes
  • Harness Plan

    Chachamaru127/claude-code-harness

    Creates and maintains Plans.md task plans with a spec delta, updates task markers and syncs plan progress with the implementation.

    3.2k GitHub stars~3.7k tokensUpdated 3 days ago
    Auto-check: notes
  • Harness Release

    Chachamaru127/claude-code-harness

    Runs a release for any project that keeps a Keep a Changelog file on GitHub, from version bump to merge, tag and GitHub Release after a single approval.

    3.2k GitHub stars~4.4k tokensUpdated 3 days ago
    Auto-check: notes

Questions about Harness Loop

What does Harness Loop do?

Starts a background runner that works through ready batches of tasks from Plans.md one cycle at a time via Breezing, with status and stop controls. The skill launches a real background process rather than a simulated loop. Each cycle picks one ready batch, meaning tasks marked cc:TODO or cc:WIP whose dependencies are met, hands it to Breezing, checks the result and moves to the next batch.

When should I use Harness Loop?

Harness Loop fits situations like: running many independent plan tasks unattended over a long session; limiting an autonomous run to a range of Plans.md task IDs; checking the progress of a running background loop; stopping a loop that is partway through its batches.

How do I install Harness Loop in Claude Code?

Run `npx skills add Chachamaru127/claude-code-harness --skill harness-loop -a claude-code`. Or copy the skill folder (skills-codex/harness-loop in Chachamaru127/claude-code-harness) into .claude/skills/harness-loop in your project. Claude Code loads it when a task matches its description.

How do I install Harness Loop in Codex?

Run `npx skills add Chachamaru127/claude-code-harness --skill harness-loop -a codex`. Or copy the skill folder (skills-codex/harness-loop in Chachamaru127/claude-code-harness) into .agents/skills/harness-loop in your project. Codex loads it when a task matches its description.

Can I use Harness Loop in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add Chachamaru127/claude-code-harness --skill harness-loop -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/harness-loop, .gemini/skills/harness-loop, .github/skills/harness-loop and .opencode/skills/harness-loop in your project.

What does Harness Loop need to run?

Going by SKILL.md and its folder, Harness Loop needs the command-line tools its instructions call (codex and bash). Our summary lists: The harness command-line tool; A Plans.md file listing tasks and their dependencies. Its frontmatter pre-approves these tools: Read, Bash.

Does Harness Loop access the network?

SKILL.md contains no URLs. Any network use would come from the scripts or tools the agent runs. This is read from the text; nothing was executed.

Is Harness Loop safe to install?

Our automated static check of SKILL.md found notes only (pre-approves every shell command (allowed-tools: bash)), nothing it rates as a warning. It is not a guarantee. Review the folder before installing.

What licence does Harness Loop use?

Harness Loop is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Harness Loop use?

About 2.2k tokens (SKILL.md is roughly 8.7k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Harness Loop?

Skills that share tags, products or a category with Harness Loop: agtx One-Shot Project Runner (fynnfluegge/agtx, 1.7k stars), Cursor Orchestrate (cursor/plugins, 10k stars), GSD Quick Batch (open-gsd/gsd-core, 10k stars) and Autopilot (Yeachan-Heo/oh-my-claudecode, 40k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Harness Loop?

Chachamaru127 (a GitHub user) maintains it in Chachamaru127/claude-code-harness, which has 3,154 GitHub stars. The repository holds 25 skills in this directory. The repository was last updated on October 5, 2026.

Source: Chachamaru127/claude-code-harness on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.