このページは、Kanbalone の JSON API をブラウザで参照できるようにした公開解説です。

Kanbalone AI API ガイド

この API は、ローカル環境で動作する単一ユーザー向けの Kanbalone API です。 ベース URL は通常 http://127.0.0.1:3000 です。

Codex Skill

Kanbalone には、API だけで Kanban を操作するための Codex skill を skills/kanbalone-api に同梱しています。

repository checkout からインストールする場合:

mkdir -p "${CODEX_HOME:-$HOME/.codex}/skills"
cp -R skills/kanbalone-api "${CODEX_HOME:-$HOME/.codex}/skills/"

Docker image だけを使う場合は、GitHub release tag から skill を取得して Codex が動くホスト側へコピーします。

tmpdir=$(mktemp -d)
curl -L https://github.com/wamukat/kanbalone/archive/refs/tags/v0.9.34.tar.gz \
  | tar -xz -C "$tmpdir" kanbalone-0.9.34/skills/kanbalone-api
mkdir -p "${CODEX_HOME:-$HOME/.codex}/skills"
cp -R "$tmpdir"/kanbalone-0.9.34/skills/kanbalone-api "${CODEX_HOME:-$HOME/.codex}/skills/"
rm -rf "$tmpdir"

Codex は Kanbalone container の外側で動くため、skill はホスト側にインストールします。そのうえで、起動中の Kanbalone API に HTTP で接続します。

推奨ワークフロー

  1. まずボード一覧を取得する。 GET /api/boards
  2. 操作対象ボードの shell を取る。 GET /api/boards/:boardId
  3. チケット操作前に、必要なら軽量チケット一覧または単票を取得する。 GET /api/boards/:boardId/tickets GET /api/tickets/:ticketId
  4. コメントや relation を個別取得したい場合は専用 endpoint を使う。 GET /api/tickets/:ticketId/comments GET /api/tickets/:ticketId/activity GET /api/tickets/:ticketId/relations
  5. 更新は最小差分で PATCH /api/tickets/:ticketId を使う。 lane 名ベース遷移は PATCH /api/tickets/:ticketId/transition を使う。 複数チケットをまとめて扱うときは board 単位の bulk endpoint を使う。
  6. Kanban 画面の自動更新が必要なら GET /api/boards/:boardId/events を購読する。

重要な意味論

1. laneIdisResolved は独立

2. Blocker は「このチケットが依存している相手」

3. 親子関係は 1 階層だけ

4. タグは board 単位

5. コメントは一覧取得・追記・編集・削除ができる

6. Archive はResolved 状態と独立

7. 正規参照が返る

8. Remote tracked ticket では title と body の意味が分かれる

9. External references は tracking しない provenance

10. /api/meta で remote provider の利用可否を返す

11. /api/remote-diagnostics で remote credential を診断する

よくある操作パターン

ボード内のチケットを検索したい

GET /api/boards/:boardId/tickets に query を付けます。

チケットをレーン移動したい

ID ベース:

名前ベース:

複数チケットや順序込みの移動:

複数チケットをまとめて Resolved / Unresolved にしたい:

複数チケットを lane 名でまとめて遷移したい:

Relation を取得したい

Activity を取得したい

チケットを Resolved にしたい

必要なら laneId も同時に更新します。

外部 API 更新を UI に反映したい

大量データを board ごと投入したい

エラーハンドリング

エラー時は基本的に次の形式です。

{ "error": "message" }

典型例: