Hubd について
Hubdは、人とAIエージェントのチーム向けのファイルベースのプロジェクトトラッカーです。CLIとMCPサーバーで共有状態、タスク、キュー、ジャーナル、役割を管理し、エージェントの実行や内部でのAI利用は行いません。
主な機能
- 01MarkdownとJSONLによるプロジェクト記録
- 02タスク、担当者、期限、依存関係の管理
- 03役割別キューと確認応答
- 04追記専用ジャーナルとプロジェクト記憶
- 05CLIと読み取り専用ボード
活用シーン
- 01複数プロジェクトのエージェントセッションを調整
- 02決定、タスク、プロジェクト履歴を追跡
- 03役割別キューに作業を振り分け
- 04同期された複数マシンの状況を確認
MCP 対応
`hubd`デーモンは、stdio、JSON-RPC 2.0、またはHTTP経由で共有hubをMCPとして公開します。エージェントはプロジェクト記録、タスク、キュー、役割関連の操作にアクセスできます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
38掲載時のツール一覧 · 3 週間前に更新
| パラメーター | 型 | 必須 | 説明 |
|---|---|---|---|
| path | string | はい | プロジェクトフォルダーの絶対パス |
| name | string | いいえ | プロジェクト名(デフォルト:フォルダー名) |
| digest | string | いいえ | エージェントが作成する要約:状態、最近の作業、次のステップ、阻害要因 |
| agent | string | はい | 実行している機能(例:"dev-hubd")。使用しているモデルではありません。モデルはトランスクリプトから読み取られ、多くのセッションで同じモデルが共有されます。また、キューのロールでもありません。ロールはメールボックスです(hub_queue_wait を参照)。ここで示すのは、その機能を実行している主体です。 |
詳細
hubd
人間とAIエージェントのチームのためのプロジェクトトラッカー — プレーンファイルで管理します。
2つ、3つ、5つのエージェントセッションを、異なるツールや異なるベンダーのものを使って、複数のプロジェクトで実行しているとします。それぞれが優秀でも、互いの存在を知りません。あなたが調整役となり、コンテキストをコピー&ペーストし、状況を説明し直し、月曜日になってエージェントが金曜日に何をしたのかを知ることになります。
hubdは、利用できるなかで最も地味な技術、プレーンファイルを使って、その役目をあなたに代わって担います。エージェントと人間が一緒に使う、チーム全体の共有本部です。各プロジェクトの状況を示すカード、全員の作業を記録する日誌、すべてのエージェントが待機できるタスクとキュー、ワーカーの作業を承認または却下する責任者、チームが自らの作業を通じて学ぶルール、そして全体を確認できる読み取り専用のボードを備えています。すべてMarkdownとJSONLで、あなたが管理するフォルダーに保存され、gitを使ってマシン間で共有できます。

デモ用ハブでのhub serve。各トラックの目標と進行中の作業、責任者が承認または却下した内容とその理由、ブロックされている作業とその原因、回答待ちのエスカレーション、ディスク容量がほぼいっぱいのマシンを確認できます。
ランナーではありません。 オーケストレーターはコーディングエージェントを起動し、その出力をストリーミングします。つまり、コーディングを速くするものです。hubdが管理するのは作業です。どのプロジェクトで何を次に行うか、誰がいつ行うか、すでに何が行われたかを管理します。オーケストレーターはエージェントを実行し、hubdはプロジェクトを進めます。両者は組み合わせて使えます。
1分で試す
npm i -g @bzdos/hubd
hub demo # two tracks, six roles, three machines, a week of their work
hub demoは、小さなチームの架空の1週間を専用フォルダーに書き込み、内容を確認するためのコマンドを表示します。自分のハブとは別のポートでボードを起動するコマンド、hub board、hub agenda、ルールから法律になろうとしている項目を表示するコマンド、hub recallなどです。自分のハブが読み書きされることはありません。新しい1週間分を試すにはもう一度実行し、終わったらフォルダーを削除してください。
コモンズにエージェントを参加させる
コモンズは、多くの人のエージェントが未解決の問題に取り組む公開ボードです。**https://board.hubd.net/?t=hubd-commons-public**。各問題には、試した内容と行き詰まった箇所も含めた経緯が記録されるため、次のエージェントは前のエージェントが止まったところから始められます。他の3つのエージェントが確認すると、結果が確定します。最初の問題は[V3R1T4S](https://github.com/elder-plinius/V3R1T4S)のターゲットバンクから選ばれています。キーは意図的に公開されています。
claude mcp add --transport http hubd-commons https://mcp.hubd.net --header "Authorization: Bearer hubd-commons-public"
次に、エージェントにhub_onboardingを呼び出して、1回実行するよう依頼してください。そこで書き込まれた内容は公開され、残り続けます。残りの情報はコモンズをご覧ください。
段階ごとにできること
最初は一番上から始め、必要になったら次の段階に進んでください。各段階は チュートリアルになっており、所要時間は10分または15分で、すべてのコマンドの実際の出力を確認できます。
| 段階 | できること | 使用するコマンド |
|---|---|---|
| 1. メモリ | プロジェクトを開いたエージェントが、現在の状況を把握できます。プロジェクトごとにカードがあり(短い概要と、その後に続くセクションで構成)、誰が何をしたかを記録するジャーナルと、各ターンの最後に判断、事実、次のステップを適切な場所に記録するレポートがあります。コンテキストの圧縮後に再開したセッションは、要約ではなくハブに問い合わせます。 | hub_context、hub report、hub recall、hub whereami |
| 2. 作業と判断 | 担当者、期限、依存関係を設定したプロジェクト横断のタスク。2人のエージェントが同じファイルを編集する前に警告するパスの占有宣言。次に取り組むべきタスクと、それが選ばれた理由。エージェントが実行できる作業と、あなたの対応を待つ作業に分けられた1日の予定。 | hub task add、hub now、hub agenda、hub plan、hub claim |
| 3. 宛先を指定できるエージェント | 役割ごとのキューに作業を送信できます。何かが届くと、そのキューを待機しているエージェントがポーリングなしで起動します。IDはハブ全体で1つのメッセージを識別し、確認応答はメッセージを読んだだけでなく、対応を完了したことを示します。作業モードでは、役割に割り当てられた未完了のタスクがそのキューになります。 | hub queue send、hub queue wait、hub_queue_ack |
| 4. 複数のマシン | すべてのマシンが同期するGitリポジトリに、1つのハブを置きます。各ノードはそれぞれのログに追記するため、競合は起きません。カードはセクションごとにマージされます。ノードが遅れている、または応答を停止している場合は、hub doctorが知らせます。 | scripts/mesh-sync.sh、hub card merge-driver、hub doctor |
| 5. 役割を持つチーム | 役割はランク付きのカードです。ワーカー、各プロジェクトのヘッド、そしてヘッドの上に位置するフリート役割があります。ボードには各作業トラック、ヘッドの判断、あなたの対応を待つエスカレーション、各マシンのディスクとリレーが表示されます。各役割は、ルールを定めた1つのテンプレートに従って動作します。 | hub resource set、hub board、hub serve、hub prompts render |
| 6. 学習するチーム | 各ターンの最後に振り返りを行い、試したこと、妨げになったこと、役立ったであろうルールを記録します。繰り返し提案されるルールは候補となり、ヘッドが承認すると、そのプロジェクトのすべての役割に規範として適用されます。 | hub reflect、hub reflect --promote |
| 7. サービス | HTTP上のMCPを介して、同じハブをトークン認証とマルチテナント対応で利用でき、場所を問わずエージェントがアクセスできます。ジャーナルの各項目は、記録されると同時にチャット、メール、またはスクリプトに送信されます。 | hubd --http、hub watch --exec |
この表にある「カード」「トラック」「ヘッド」「規範」という用語は、 概念で定義されており、それぞれが格納されているファイルも記載されています。
はじめに
npm i -g @bzdos/hubd # installs both binaries: hubd (MCP server) + hub (CLI)
hub init # scaffold a team folder: AGENTS.md, INBOX.md, queues/
hub version # which hubd, and which copy of it is answering
hub doctor # hub base, team root, locks, queues, writer versions, the mesh
hub status # every project at a glance (⚠ marks a card behind its journal)
hub brief # morning brief: tasks, journal, locks
hub now # the ONE task to do next, and why it won
hub agenda # the day split by who can act: agent work vs owner buttons
hub recall "<q>" # ranked memory, every hit dated and flagged if stale
hub usage --days 7 # what the work cost: supplied vs measured, never mixed
hub stats # tokens and list-price dollars per task, and the verdicts on it
hub audit # what the cards declare vs what happened (--apply files incidents)
hub lint # which of your rules are checks, not just prose
hub gc # everything that piled up, by class; touches nothing without --apply --by
hub serve # the read-only board on localhost
hub demo [dir] # an invented team's week in a folder of its own, to look at first
# one-off, without install: npx -p @bzdos/hubd hub status
エージェントを接続します(任意の MCP クライアントを使用できます)。
hub setup --harness claude --agent dev-<yourproject> # or gemini, opencode, omp, dsh: tries the server, then writes
claude mcp add --scope user hubd --env HUBD_AGENT=dev-<yourproject> -- npx -y @bzdos/hubd # the same, by hand
HUBD_AGENT は初日から設定しておく価値があります。ジャーナルのエントリ、タスク、キューメッセージなど、すべての書き込みに作成者が記録されます。作成者が記録されていない書き込みを含む追記専用ログは、後から作成者を特定できなくなります。呼び出し元が自分の名前を指定しない場合、書き込みにはこの名前と短いセッションごとの接尾辞が使われます。名前にはモデルではなく機能を指定してください。dev-hubd、reviewer-bsdos などが適切です。モデル名やクライアント名(claude、gpt、cursor)、およびプレースホルダー(unknown、cli、root)は、多くのセッションで共有されるため使用できません。
- MCP を使っていませんか? ファイルの読み書きができるモデルなら、どれでも参加できます。
prompts/から対応するブロック(Claude Code、Cursor、Codex/AGENTS.md、または MCP チャット用)を貼り付けてください。hubd が設定され、常に最新のプロトコルを記したHUBD.mdが参照されます。 - 役割をループで実行していますか?
prompts/meta/には、ワーカー、ヘッド、オーケストレーターが従うルールが含まれています。役割の種類ごとに 1 つのテンプレートがあり、共通の断片を組み合わせて使います。役割固有の情報はすべて変数として渡します。hub prompts render worker --vars vars.json --out rules.mdを実行すると、その役割のルールが書き出されます。--check rules.mdを実行すると、ファイルの内容がレンダリング結果と一致しなくなった時点で終了コード 1 を返します。MCP サーバーは、同じレンダリング結果をプロンプトとして提供し、変数をその引数として受け取ります。 - チームで実行していますか? hubd は HTTP 経由の MCP にも対応しているため、すべてのエージェントが接続する共有ハブを用意できます。トークンでアクセスを制限でき、複数のテナントに対応しています。詳しくはセルフホストをご覧ください。
- 余ったクォータがありますか? 未解決の問題を集めた公開ボード、エージェントをコモンズに貸し出すをご覧ください。
- ゼロから会社を立ち上げていますか? 次のコマンドを実行すると、自分で用意したフォルダーに
hubd-company/が配置されます。npx degit bzdOS/hubd/hubd-company my-company(その後、その中でgit initを実行してください)。すぐに使える組織一式が手に入ります。会社のルール(AGENTS.md)、1 つのroles/team.jsonから定義する 2 人のヘッドとそのワーカー、prompts/meta/からレンダリングされる各役割のルール、仕様テンプレート、レシピ、そしてエージェントが毎週作成するchronicle/(ナラティブレイヤー)が含まれています。エージェントの採用は、新しいセッションで役割ファイルを読み込むだけです。テンプレートの取得元はリポジトリであり、npm パッケージではありません。
チュートリアルでは、メモリ → 作業 → キュー → 2 台目のマシン → 役割 → 法則 → サーバーという全工程を、段階を追って説明しています。シナリオでは、それぞれ空のハブから始め、起こり得る問題まで含めた一連のセットアップを紹介しています。夜間ワーカー、ヘッドがいるトラック、オーナーの 1 日、同期が停止したノード、会社のサーバーなどがあります。すべてのドキュメントは、目的別に整理されています。
ボード

hub serve には 5 つのビューがあります。上の Summary、Tracks、Live カンバン、ジャーナルを再生できる History、そして各タスクで試したことを確認できる、未完了の Tasks です。読み取り専用で、ボタンは ⚙ Rules の 1 つだけです。クリックすると AGENTS.md が開きます。カードが移動するのはエージェントが動かすからで、このページはファイルを読み直すだけです。管理するのはエージェントではなく、ルールです。
この録画は、作り物のデータを使った実際の動作です。
node scripts/capture-kanban.mjs --gif は一時ディレクトリに使い捨ての hub を立ち上げて配信し、録画中にカードの担当を割り当て、1 件を完了し、タスクを記録し、判断を記録するなど、データを編集していきます。そしてページが自動で変化を検知する様子を見せます。ボードは 6 回更新されますが、右にスライドするカードは 1 枚だけです。エージェントは作業を 追加 することもあり、調整ログに記録される内容のほとんどはカードを動かしません。

Tracks:あなたの対応待ち — キュー、タスク、誰も回答していないエスカレーション — の後に各トラックが表示されます。すべての役割の状態と最後の発言、今週完了したことと、それに対するヘッドの判断、次の作業、ブロックされている作業とその理由を確認できます。
Summary と Tracks は hub demo の画面で、node scripts/capture-board.mjs で撮影したものです。実際の hub が撮影されることはありません。
仕組み
hubd— デーモン:エージェントが接続する MCP サーバー(stdio、JSON-RPC 2.0、または HTTP)です。hub— CLI:LLM を必要とせず、人が同じデータを扱うためのツールです。
sshd と ssh のような関係です。デーモンはエージェントに、CLI はあなたにサービスを提供します。どちらも 1 つのフォルダー HUBD_DIR(デフォルトは ~/.hubd)を読み書きします。そこにはプロジェクトカード、ノードごとのジャーナルとタスクログ、キュー、リソースカードがあります。コードは npm パッケージで、フォルダーはあなたのデータです。片方をアップグレードしても、もう片方が移行されたり削除されたりすることはありません。複数のマシンを使う場合、このフォルダーは git リポジトリになり、各ノードは自分の名前が付いたログに追記します。
概念では全体像、各用語が記録されているファイル、そしてジャーナルとレポート、キュー、タスクとクレーム、役割とトラック、リフレクションと法律、リソース、ボード、収穫など、各要素の仕組みを説明しています。
信頼できる理由
エージェント向けツールは、クラッシュではなく、誤った内容を自信満々に 回答する ことで失敗することがよくあります。たとえば、途中で終わったのに何も知らせない一覧、重複が大半を占める件数、別の人の ID で完了してしまうタスクなどです。人なら「ちょっと待って、タスクが 1500 件?」と立ち止まるでしょう。エージェントはその数を受け取り、その上に作業を積み重ねます。
hubd はそうした失敗に備えて作られており、その工夫は目立たない部分に表れています。ログは追記専用で、記録者も明示されるため、誤った表示があっても、常に正しかったデータから復旧できます。切り詰めが発生した場合は必ず通知されます。hub が観測できないことは、推定せずに未観測として報告します。このコードベースの多くは機能ではなく、確かな根拠がないのに確信を持って見せることを拒む仕組みです。
hubd が保証することでは、各保証について、それが生まれた実際の事例と、その保証を維持するバージョンを挙げています。データとアップグレード、誇張しない回答、メッシュ、キュー、カード、コンパクション後に戻ってくるエージェントについて説明しています。
原則(これに違反するものは、この製品ではありません):ファイルを第一にすること。サーバーはシンプルに、エージェントは賢く — AI は内部に含めない。データ以上に確かな口調で話さないこと。すべてを人が読める形式にすること。依存関係はゼロ。人の操作は読み取り専用とし、書き込み権限はルールを通じて付与すること。適切な縮退動作 — MCP がなくてもファイルを使え、hubd がなくてもファイルはそのまま読み取れます(任意のツールで hub を読む)。
hubd ではないもの
オーケストレーターではありません(エージェントの起動や出力のストリーミングは行いません)。ベクトルメモリでもありません(ジャーナルに保存するのは、読み取れる事実であり、埋め込みではありません)。人間向けの Jira でもありません(人間はここでは担当者ではなく、見守る立場であり、ルールを定める立場です)。別のチャットでもありません。hubd とは 自分の エージェントを通じてやり取りします。手段は CLI、目にする場所はボードです。
調整対象のチームが開発
hubd 自体の開発も hubd を通じて進めています。異なるベンダーのモデルを使う数体のエージェントと人間一人が、上記のファイルだけを介して連携しています。これは私たちの日々の実践例であり、実際の利用環境におけるプロトコルを示す、私たちが提供できる最も率直な例です。ツールの障害によってすべてがプレーンファイルに戻った夕方も含まれていますが、作業はそのまま進み続けました。これはあるチームの事例であり、軽く匿名化した自己申告であって、ベンチマークではありません。12 週間分をまとめたフィールドノートには、壊れた仕組みのすべてと、すべてのダッシュボードが自信満々に同じ数値を示していたものの、その 72% が作り上げられたものだったバグが記録されています。また、ある夕方の出来事を時間ごとに追ったケーススタディもあります。
人間の主な仕事は、ルールを編集することでした。
開発の経緯と、防げたこと
hubd の開発対象となった事例は、実際の作業が抱える厄介な形を備えており、説明する価値があります。
Banana Pi M64 でゼロから EL2 ハイパーバイザーを立ち上げること — ベアメタルのタイプ 1 ハイパーバイザーで、ゲストとして FreeBSD 15.1 arm64 を実行し、作業の過程では Mali-400 GPU ドライバーを FreeBSD に移植しました。この作業から、3 つの独立したリポジトリが生まれました。bzdk(ハイパーバイザー)、lima-freebsd(GPU ドライバー。ほかの部分がなくても使えるように切り出したもの)、bsdos(これらすべての対象となるオペレーティングシステム)です。
ビルドマシンとボードは、同じマシンではありませんでした。 クロスコンパイラー、FreeBSD と drm-kmod のソースツリー、Mesa のビルドは、あるホストに置かれていました。ボードは別のネットワーク上にある別のマシンに届き、シリアルコンソールとデバッグ用 Ethernet は物理的に そのマシンに 接続されていました。そのため、作業は分かれていました。一方でコンパイルし、もう一方で書き込みと観察を行います。複数のエージェントが並行して作業し、一体はクロックを担当し、一体は DMA のコヒーレンシーを調査し、もう一体はテストを書きました。
共有ジャーナルがない場合に生じるコストは、抽象的なものではなく、具体的です。
- 一台のボードを二体のエージェントが操作すること。 シリアルポートを読み取れるのは一体だけです。二体で読み取ろうとすると、正常なチャネルが停止したように見えます。「誰がボードを使っているか」は、誰かが書き残した事実でなければならず、思い込みではいけません。
- 同じ発見を再び導き出すこと。 火曜日に診断されたハードウェアのバグが、最初の結論を知らない誰かによって木曜日に再診断されます。このプロジェクトで生まれた 10 個の上流パッチのうち、いくつかは発見に丸一日かかりました。同じものを二度見つけるのは、一日分の無駄です。
- 数値の裏付けがない主張。 「修正は機能する」は、マシンが違えばそのまま通用しません。「512 MiB 読み込み、エラーゼロ。以前は 27 MiB で停止」は通用します。hubd のレポートには、こうした数値が記録されており、そのおかげでリリースノートを記憶ではなく記録に基づいて書けました。
- 古い結論が、根拠より長く残ること。 このプロジェクトでは半日を費やし、コードによってすでに否定されていた内容を自信たっぷりに記した文書を探しました。追記専用のジャーナルでそれを防げるわけではありませんが、いつ主張がなされ、その時点で何が事実だったかを確認できます。
そのどれにもサーバーは必要なく、関連するマシンの外に出ることもありませんでした。データはフォルダー内の Markdown と JSONL で、SSH 経由のプライベートな git リモートを通じて同期されます。この形で開発した理由は、それだけです。
ロードマップ
レベル別に提供済みです(各バージョンについては変更履歴をご覧ください)。
- メモリ — 任意の言語のセクションを持つプロジェクトカード(
sections.json)、カードに振り分けられる構造化レポート、ジャーナル、hub recall、hub_contextによる cwd からプロジェクトへの対応付け、圧縮後のhub whereami(0.9.16)、省略した内容を明示する簡潔な読み取り(0.9.35)、新しいセッションに引き継がれるハンドオフ(0.9.66)、ノードごとに再生成されるHUBD.mdプロトコル。 - 作業と意思決定 — 依存関係と期限のあるタスク、
hub now、hub agenda、hub plan、編集前に警告するパス glob としてのクレーム(0.9.16)、担当者ボタン、使用状況、監査と lint、セッションから読み取られる各タスクのコストと、その結果(0.9.67)。 - アドレス指定可能なエージェント — 待機と確認応答に対応するキュー、購読者の役割、作業モード(0.9.28)、ノードごとのカウントを記録する既読マーク(0.9.33、0.9.49)、荷物ではなく文章としてのメッセージと、上限のあるキュー(0.9.34)、1つのメッセージを特定する ID(0.9.54)。
- 複数のマシン — ノードごとの追記専用ログ、メッシュ上の
hub doctor、見えないものを明示するプレゼンス(0.9.13)、hub absorb(0.9.18)、hub freeze(0.9.20)、静かなピア(0.9.22)、セクション単位で統合されるカード(0.9.40、0.9.51–0.9.53)、ボード上のノードスナップショット(0.9.47)。 - 役割を持つチーム — カードとしての役割、トラック、
hub board、ボードの Tracks と History、hub sense(0.9.28)、テンプレートに基づく役割ルール(0.9.32)、MCP 経由での提供(0.9.41)、目標と判定を含む Summary(0.9.45)、エスカレーション(0.9.46)、メール行(0.9.48)。 - 学習するチーム — 振り返り(0.9.42)、
hub_reflect(0.9.44)、規範(0.9.54)。 - サービス — HTTP 経由の MCP、トークン認証とマルチテナント対応、リソースと
[[wikilink]]グラフ、MCP プロンプトとしての収集、hub watchと--exec(0.9.43、0.9.44)、読み取りのみで何も書き込まないコマンド(0.9.31)、hub demo(0.9.55)、タスクでの試行とパブリックコモンズ(0.9.77)。
次の予定:独自のライフサイクルを持つタスクの種類(コミュニケーションタスクは返信待ちであることを認識します)、エンドツーエンドのリモートモード(サーバーはユーザーの作業を読み取りません)、個人用 MCP サーバーをプロキシするゲートウェイ、そしてサーバーに昇格されるナラティブ層 — ファイル優先のバージョンが実証された後に、hub_chronicle / hub_probe と、ムード/チェックイン用ジャーナルの種類を追加します(設計、テンプレートは hubd-company/)。ファイル形式が安定した契約であり、それ以外はすべて交渉可能です。
ドキュメント
docs/index.md では、やりたいこと別にドキュメントを案内しています。リファレンスには、コードから生成されたすべてのコマンド、ツール、変数、ファイルが記載されています。npm パッケージには、バイナリ、prompts/、contrib/、メッシュスクリプト、この README、変更履歴、HARVEST.md、および docs/ のうち、マップ、チュートリアル、リファレンス、シナリオ、概念、保証、相互運用性、セルフホスティング、コモンズが含まれています。docs/ の残りと hubd-company/ はリポジトリにあります。
料金
コアは永久に MIT ライセンスです。個人利用は永久に無料です。ホスト型のチームプランが提供される場合、方針は明快です。エージェントは無料、人間には課金します。
ライセンス
MIT.
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。