neonelemental/claude-code-board-mods/tree/main/fleet
fleet
두 개의 Claude Code 플러그인(fleet와 board)이 대화 옆에 패널을 추가하며 GitHub Projects (v2) 보드를 사용합니다. fleet는 세션 에이전트를 epic과 ticket별로 묶고 board는 하나 이상의 보드를 Status 열별 카드로 보여 줍니다.
이 mod 소개
fleet와 board는 GitHub Projects (v2) 보드로 구동되는 Claude Code 패널 플러그인입니다. 로그인된 gh CLI(read:project 스코프)를 통해 REST로 데이터를 읽습니다. fleet는 현재 세션의 에이전트를 보드의 epic과 ticket별로 묶어 보여 줍니다. epic은 sub-issue가 있는 issue이며 완료도, 에이전트가 연결된 ticket, 아직 손대지 않은 open ticket을 표시합니다. ticket에는 보드 열과 에이전트가 표시되고 lead가 먼저 나오며 sub-agent는 그 아래에 접힙니다. 완료된 ticket은 에이전트 수와 함께 처음부터 접힌 상태입니다. 에이전트는 설명의 제목 ID(ABC-12)나 issue 번호(#12)로 ticket에 연결됩니다. 찾지 못하면 prompt의 처음 400자 안에 있는 첫 제목 ID를 쓰거나 부모 에이전트의 ticket을 따릅니다. 직접 작성한 태그 파일(.claude/fleet-tags.json)이 모든 규칙을 덮어씁니다. board는 Status 열별로 하나 이상의 보드를 보여 주며 카드 ID, 제목, epic sub-issue 수, 카드가 In progress와 In review 열로 이동한 뒤의 시간을 표시합니다. 여러 보드가 있으면 버튼과 1..9 단축키(a는 All)로 표시할 보드를 고르고, 선택은 세션 사이에 유지됩니다. --plugin-dir 또는 CLAUDE_CODE_PLUGIN_DIRS 환경 설정으로 설치하고 /config 또는 pluginConfigs에서 owner, boards, statusField, ticketPattern, leadPattern, tagsFile, folded, doneColumn을 설정합니다. function hooks가 있는 Claude Code(2.1.286에서 테스트됨)와 gh auth refresh -s read:project가 필요하며 프로젝트에는 아무것도 쓰지 않습니다.
설치
먼저 작성자의 README에서 marketplace와 플러그인 이름을 확인하세요. 저장소 구조에 따라 명령어가 달라질 수 있습니다.
claude plugin marketplace add neonelemental/claude-code-board-mods claude plugin install fleet
원문 / 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=1in Claude Code's environment turns them on. - The GitHub CLI,
gh, signed in with theread:projectscope:gh auth refresh -s read:project. The panes read GitHub over REST throughghand 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.