Hook・進行表・waitの出力
エージェントに返されるJSONの形式をまとめます。各機能の仕組みはエージェント連携で説明しています。タスクとエピックの項目は共有ファイルにあります。
進行表
agboard progress --jsonとHookは、同じ表を返します。
{
"fetchedAt": "2026-10-17T00:48:47Z",
"project": { "id": "ef18518d…", "name": "agent-board", "createdAt": "2026-10-10T22:59:43Z" },
"version": "781ad752…",
"cursor": "f1:ef18518d…:781ad752…",
"epics": [
{
"id": "SPEC-MIGRATION",
"name": "Move the specifications into the repository",
"documentPath": "…/epics/SPEC-MIGRATION/EPIC.md",
"priorityError": false,
"tasks": [
{
"id": 98,
"title": "Clean up after the merge",
"assignee": "ai",
"taskStatus": "todo",
"agentStatus": "idle",
"isDraft": false,
"acceptance": { "done": 0, "total": 3 },
"acceptanceError": false,
"taskPath": "…/tasks/98/TASK.md"
}
]
}
],
"unassigned": []
}progressとhookに--include-pendingと--include-done COUNTを付けると、表にpending配列とdone配列が加わります。pendingは判断待ちのTodo・Doingのタスクを ID順に並べ、それぞれに200文字までのquestionが付きます。doneは直近に完了したタスクを新しい順にCOUNT件並べ、対象は未着手または進行中のタスクがまだあるエピックに限ります。オプションがなければどちらのフィールドもありません。- 既定では、Pending以外のTodoとDoingのタスクだけが載ります。タスクはエピックごとに
priorityの順で並び、エピックのないタスクはunassignedに入ります。 - 本文も履歴もありません。エージェントは、必要な
documentPathとtaskPathのファイルを読みます。 cursorはwait --afterに渡す値です。- パスはローカルのCLIとHookの出力にだけ現れ、リモート向けのJSONには出ません。
- 以前の
planPathは出力されなくなりました。データとバックアップのEPIC.mdへの移行の節を参照してください。
Hookの出力
agboard hook --agent claude|codexは、エージェント向けにJSONを出力します。
{ "hookSpecificOutput": { "hookEventName": "PostToolUse", "additionalContext": "AGBOARD_PROGRESS\n{…}" } }additionalContextには、成功時はAGBOARD_PROGRESSと進行表のJSONが入ります。失敗時はAGBOARD_ERRORに続き、codeと理由、ボードに依存する変更を止めるよう促す注意文が入ります。AGBOARD_ERRORのコード:folder_unbound・bound_project_missing・project_not_found・board_unavailable・context_too_large。- 上限: 入力は64 KiB、表は256 KiB、一回の実行は10秒。超えると
context_too_largeを報告し、切り詰めて成功とすることはありません。
スナップショットとwait
agboard snapshot --jsonとagboard wait --after <cursor> --jsonは、プロジェクトのスナップショットを返します。fetchedAt・project・version・cursor・epics・tasks(それぞれ全履歴を持つ)・nextTaskId・problemsです。次のwaitには、新しいcursorを使います。
waitは、プロジェクトのversionがcursorと違うまで待ちます。wait_timeout・board_unavailable・cursor_invalid・project_not_foundのときは、スナップショットではなくエラーで終わります。どれも「回答された」という意味ではありません。エラーコードを参照してください。
wait --until task --idle-timeout <seconds> --jsonは、待機を始める前から存在するタスクも含め、AI担当でTodoまたはDoing、かつIdleの対象タスクを一件選びます。順序は進行表と同じです。結果にはタスクと、そのTASK.md、およびエピックがあればdocumentPath(EPIC.mdのパス)が含まれます。取得はタスクを占有したり編集したりしません。
taskの項目を省略した例です。
{"kind":"task","projectId":"<id>","cursor":"<cursor>","task":{"id":1},"taskPath":"…/tasks/1/TASK.md","documentPath":"…/epics/DESIGN/EPIC.md"}指定時間に対象タスクが現れない場合は、成功結果(終了コード0)を返します。
{"kind":"idle_timeout","projectId":"<id>","idleTimeoutSeconds":300}待機秒数は必須で、1〜86,400秒です。接続・プロジェクト・データ・引数のエラーは、idle_timeoutにはなりません。エラーコードを参照してください。
判断依頼
agboard state <id> pending --request-json <json>は、次の形を受け取ります。
{
"question": "Should existing records be deleted or kept?",
"choices": [
{ "id": "delete", "label": "Delete them and start clean" },
{ "id": "keep", "label": "Keep them and migrate" }
],
"wait": {}
}question: 1〜2,000文字。choices: 2〜10件。各idは[A-Za-z0-9_-]の1〜64文字で依頼内で一意、各labelは1〜200文字。waitを省略しても既定で回答まで待ちます。wait: {}も互換の明示形式です。wait: nullとtimeoutSeconds: nullは期限なしです。整数のtimeoutSeconds(1〜86400)はコマンドの待機だけを制限し、質問はPendingのままです。--no-waitは保存と通知の後に待機せず終了します。- 待機したコマンドは、更新されたタスクと回答を別々に返します。
{ "task": { "…": "…" }, "answer": { "actor": "human", "choiceId": "keep", "choiceLabel": "Keep them and migrate", "text": null } }初回案内のサンプルカード
進行表、hook の出力、wait --until task は、onboardingSample の識別があるカードを、レーンや状態に関係なく除外します。エージェント連携を参照してください。

