ClaudeMods
☰
JA
● 0 人がオンライン ・閲覧 0 回
スポンサー作品を投稿
GitHub リポジトリ · 投稿者 neonelemental

board

GitHubプロジェクトボード(Projects v2)をStatus列ごとに1つまたはすべて表示し、gh経由のRESTで読むペインです。

neonelemental@neonelemental

neonelemental/claude-code-board-mods/tree/main/board

翻訳済み

この mod について

Claude Code用のfleetとboardペイン

GitHub Projects(v2)ボードを使い、会話の横にそれぞれペインを表示する2つのClaude Codeプラグインです。

fleet

このセッションのエージェントを、ボード上のエピックとチケットごとにまとめます。

  • エピックはサブ課題を持つissueです。完了状況(全サブ課題のうちクローズされたもの。not-plannedと重複は除外)、エージェントが付いたチケット、まだ誰も触っていないオープンチケットを表示します。
  • チケットにはボードの列とエージェントが表示されます。リードを先に出し、その下にサブエージェントを折りたたんで表示します。完了したチケットは折りたたんだ状態で始まり、エージェント数を表示します。
  • エピック自体を名指ししたエージェントは、誰もリードにせず横並びで表示します。
  • セッションの一覧から消えたエージェントは stopped と表示します。
  • エピックに属さないチケットは「Not in an epic」に、チケットを名指ししないエージェントは「on no ticket」にまとめます。

/fleet でペインを開きます。

board

1つ以上のボードをStatus列ごとに表示します。各カードのidとタイトル、エピックをサブ課題数の多い順に、さらにIn progressとIn reviewの列ではカードが移動してからの時間を表示します。ボードが2つ以上あると、ボードごとのボタン(ホットキー 1..9)と、表示内容を選ぶ All(ホットキー a)が現れます。Allでは複数ボードにあるカードも1回だけ描画します。選択はセッションをまたいで保持されます。

/board でペインを開き、/board <number> で1つのボードを開き、/board all ですべてのボードを開きます。

必要条件

  • 関数フックプラグインを使うClaude Code。2.1.286でビルドとテストを行っています。ペインが表示されない場合はclaude --debugを実行すると、読み込まれなかったプラグインと理由が分かります。関数フックが無効なら、Claude Codeの環境でCLAUDE_CODE_ENABLE_FUNCTION_HOOKS=1を設定して有効にします。
  • read:projectスコープでログイン済みのGitHub CLI gh:gh auth refresh -s read:project。ペインはgh経由のRESTでGitHubを読み、GraphQLは使いません。
  • 1人のユーザーまたは組織が所有するGitHub Projects(v2)ボード。fleetではサブ課題のあるチケットがエピックになります。

インストール

git clone https://github.com/neonelemental/claude-code-board-mods.git
claude --plugin-dir /path/to/claude-code-board-mods/fleet --plugin-dir /path/to/claude-code-board-mods/board

デスクトップアプリはフラグを受け付けないため、~/.claude/settings.json のenvブロックにフォルダーを記入します。プラットフォームのパス区切り文字で分けてください(macOSとLinuxでは:)。

{
  "env": {
    "CLAUDE_CODE_PLUGIN_DIRS": "/path/to/claude-code-board-mods/fleet:/path/to/claude-code-board-mods/board"
  }
}

設定

各設定は/configの行にするか、~/.claude/settings.json のpluginConfigs以下でプラグイン名をキーにします。

{
  "pluginConfigs": {
    "fleet": { "options": { "owner": "acme", "boards": "3,4", "leadPattern": "^run\\b" } },
    "board": { "options": { "owner": "acme", "boards": "3,4" } }
  }
}

両方のプラグイン:

| 設定 | デフォルト | 意味 | | --- | --- | --- | | owner | none | ボードを所有するGitHubユーザーまたは組織。ownerとboardsを設定するまで、ペインに設定方法が表示されます。 | | boards | none | コンマ区切りのプロジェクト番号:3,4。ボードURLにある番号です。 | | statusField | Status | ボードの順番どおりに列の選択肢を持つ単一選択フィールド。 | | ticketPattern | [A-Z][A-Z0-9]*-\d+ | issueタイトル先頭のチケットidにマッチする正規表現:ABC-12 Fix login はABC-12になります。idがないissueは#<number>と名付けます。コンパイルできないパターンはデフォルトに戻り、そのことをペインに表示します。 |

fleetのみ:

| 設定 | デフォルト | 意味 | | --- | --- | --- | | leadPattern | empty | 大文字小文字を無視してエージェントの説明にマッチする正規表現。チケットにいるエージェントがマッチすれば、そのエージェントがリードです。空なら、最初にチケットを名指ししたエージェントがリードになります。 | | tagsFile | .claude/fleet-tags.json | セッションのディレクトリを基準にした手動マッピングファイル。 |

boardのみ:

| 設定 | デフォルト | 意味 | | --- | --- | --- | | folded | Backlog,Done | 最初から折りたたむ列をコンマ区切りで指定します。 | | doneColumn | Done | 最新に閉じたものを先頭に並べ、その中の最新25カードを表示する列。 |

列名の比較では大文字小文字と空白を無視します。In progress、In review、Ready、Todo、Backlog、Doneには専用の記号と色が付き、それ以外の列には通常の点が付きます。

エージェントがチケットに参加する仕組み

エージェントの説明にチケットが書かれていれば、そのチケットに属します。タイトルid(ABC-12)でもissue番号(#12)でもよく、後者はタイトルidを持つissueも見つけます。それがなければ、プロンプトの先頭400文字にある最初のタイトルidを使います。別のエージェントが起動したエージェントは、親のチケットに属します。どのボードにもないidは「Not on a board」と表示される独自のチケットとして残ります。

タグファイルはエージェントの所属を手動で決め、他の規則より優先されます。読み取り専用です。

{ "<agent id>": "ABC-12" }

fleetはプラグイン独自のストアに、見つけたエージェントをセッションディレクトリごとに1レコードで記憶します。そのためエピックが閉じるまで、エージェントはエピックの下に残ります。エピック外で完了した作業は12時間表示されます。プロジェクトには何も書き込みません。

テスト

クローンしたディレクトリから実行します。

claude plugin validate fleet
claude plugin validate board
claude plugin test fleet
claude plugin test board

テストはghを使ってエンジンに対してプラグインを実行し、セッションのエージェントが記憶から回答します。ネットワークには接続しません。

インストール

まず作者の README で marketplace とプラグイン名を確認してください。コマンドはリポジトリの構成によって変わる場合があります。

claude plugin marketplace add neonelemental/claude-code-board-mods
claude plugin install board
原文 / README

Fleet and board panes for Claude Code

Two Claude Code plugins, each a pane beside the conversation, driven by GitHub Projects (v2) boards.

fleet

This session's agents, grouped by the epics and tickets on your boards.

  • An epic is an issue with sub-issues. It shows its completion (closed sub-issues of all, not-planned and duplicates left out), its tickets that have agents, and its open tickets no agent has touched yet.
  • A ticket shows its board column and its agents: the lead, then its sub-agents folded under it. A finished ticket starts folded, with its agent count.
  • Agents that name the epic itself are listed under it side by side, none leading the others.
  • An agent the session no longer lists is marked stopped.
  • Tickets in no epic are listed under "Not in an epic", agents that name no ticket under "on no ticket".

/fleet opens the pane.

board

One or more boards, by Status column: each card's id and title, epics first with their sub-issue count, and in the In progress and In review columns how long ago the card moved. With two or more boards, a button per board (hotkeys 1..9) and All (hotkey a) pick what is shown; on All, a card on several boards is drawn once. The pick is kept between sessions.

/board opens the pane, /board <number> opens it on one board, /board all on every board.

Requirements

  • Claude Code with function-hook plugins. These were built and tested against 2.1.286. If a pane does not show, run claude --debug, which names a plugin that did not load and why; where function hooks are switched off, CLAUDE_CODE_ENABLE_FUNCTION_HOOKS=1 in Claude Code's environment turns them on.
  • The GitHub CLI, gh, signed in with the read:project scope: gh auth refresh -s read:project. The panes read GitHub over REST through gh and never use GraphQL.
  • GitHub Projects (v2) boards owned by one user or organization. For fleet, sub-issues make a ticket an epic.

Install

git clone https://github.com/neonelemental/claude-code-board-mods.git
claude --plugin-dir /path/to/claude-code-board-mods/fleet --plugin-dir /path/to/claude-code-board-mods/board

The desktop app takes no flags; name the folders in the env block of ~/.claude/settings.json instead, separated by the platform's path separator (: on macOS and Linux):

{
  "env": {
    "CLAUDE_CODE_PLUGIN_DIRS": "/path/to/claude-code-board-mods/fleet:/path/to/claude-code-board-mods/board"
  }
}

Settings

Each setting is a row in /config, or goes under pluginConfigs in ~/.claude/settings.json, keyed by the plugin's name:

{
  "pluginConfigs": {
    "fleet": { "options": { "owner": "acme", "boards": "3,4", "leadPattern": "^run\\b" } },
    "board": { "options": { "owner": "acme", "boards": "3,4" } }
  }
}

Both plugins:

| Setting | Default | What it is | | --- | --- | --- | | owner | none | The GitHub user or organization that owns the boards. Until it and boards are set, the pane says how to set them. | | boards | none | Project numbers, comma-separated: 3,4. The number is the one in the board's URL. | | statusField | Status | The single-select field whose options are the columns, in the board's order. | | ticketPattern | [A-Z][A-Z0-9]*-\d+ | A regular expression for a ticket id at the start of an issue title: ABC-12 Fix login is ABC-12. An issue without one is named #<number>. A pattern that does not compile falls back to the default, and the pane says so. |

fleet only:

| Setting | Default | What it is | | --- | --- | --- | | leadPattern | empty | A regular expression matched against agent descriptions, ignoring case: an agent on a ticket that matches it leads the ticket. Empty: the first agent to name the ticket leads it. | | tagsFile | .claude/fleet-tags.json | The hand-mapping file, relative to the session's directory. |

board only:

| Setting | Default | What it is | | --- | --- | --- | | folded | Backlog,Done | Columns that start folded, comma-separated. | | doneColumn | Done | The column listed newest-closed first, its latest 25 cards. |

Column names are compared ignoring case and spaces. In progress, In review, Ready, Todo, Backlog and Done get their own marks and colours; any other column gets a plain dot.

How agents join tickets

An agent belongs to a ticket when its description names it, by title id (ABC-12) or issue number (#12; the number also finds an issue that has a title id). Failing that, the first title id in the first 400 characters of its prompt counts. An agent started by another agent belongs to its parent's ticket. An id on no board stays a ticket of its own, marked "Not on a board".

The tags file settles an agent by hand and wins over the rest. It is read, never written:

{ "<agent id>": "ABC-12" }

fleet remembers the agents it has seen in the plugin's own store, one record per session directory, so an agent stays under its epic until the epic is closed. Finished work outside an epic stays listed for 12 hours. Nothing is written into your project.

Tests

From the clone:

claude plugin validate fleet
claude plugin validate board
claude plugin test fleet
claude plugin test board

The tests run the plugins against the engine with gh and the session's agents answered from memory; they reach no network.

関連作品