ClaudeMods
☰
KO
● 0 명 접속 중 · 조회 0 회
후원프로젝트 제출
GitHub 저장소 · 작성자 neonelemental

board

GitHub 프로젝트 보드(Projects v2)를 Status 열별로 하나 또는 모두 표시하고 gh를 통해 REST로 읽는 패널입니다.

neonelemental@neonelemental

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

번역 완료

이 mod 소개

Claude Code용 fleet 및 board 패널

GitHub Projects(v2) 보드로 구동되며, 각각 대화 옆에 패널을 보여 주는 Claude Code 플러그인 2개입니다.

fleet

이 세션의 에이전트를 보드의 에픽과 티켓별로 묶어 보여 줍니다.

  • 에픽은 하위 이슈가 있는 이슈입니다. 완료 상태(모든 하위 이슈 중 닫힌 항목에서 not-planned와 중복 항목 제외), 에이전트가 있는 티켓, 아직 아무 에이전트도 건드리지 않은 열린 티켓을 보여 줍니다.
  • 티켓에는 보드 열과 에이전트가 표시됩니다. 리드를 먼저 보여 주고 하위 에이전트는 그 아래 접습니다. 완료된 티켓은 접힌 상태로 시작하며 에이전트 수를 표시합니다.
  • 에픽 자체를 지정한 에이전트는 서로 리드가 되지 않고 에픽 아래에 나란히 표시됩니다.
  • 세션 목록에서 더 이상 보이지 않는 에이전트는 stopped로 표시됩니다.
  • 어떤 에픽에도 없는 티켓은 “Not in an epic” 아래에, 어떤 티켓도 지정하지 않은 에이전트는 “on no ticket” 아래에 표시됩니다.

/fleet로 패널을 엽니다.

board

Status 열별로 하나 이상의 보드를 표시합니다. 각 카드의 id와 제목을 보여 주며 에픽을 하위 이슈 수 순으로 먼저 표시합니다. In progress와 In review 열에서는 카드가 이동한 지 얼마나 됐는지도 보여 줍니다. 보드가 2개 이상이면 보드별 버튼(단축키 1..9)과 표시할 내용을 고르는 All(단축키 a)이 생깁니다. All에서는 여러 보드에 있는 카드도 한 번만 그립니다. 선택은 세션 사이에 유지됩니다.

/board로 패널을 열고, /board <number>로 한 보드에서 열며, /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은 사용하지 않습니다.
  • 사용자 한 명 또는 조직이 소유한 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+ | 이슈 제목 앞부분의 티켓 id에 매칭하는 정규식입니다. ABC-12 Fix login은 ABC-12가 됩니다. id가 없는 이슈는 #<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) 또는 이슈 번호(#12)를 사용할 수 있으며, 번호는 제목 id가 있는 이슈도 찾습니다. 둘 다 없으면 프롬프트의 처음 400자 안에 있는 첫 제목 id를 사용합니다. 다른 에이전트가 시작한 에이전트는 부모 에이전트의 티켓에 속합니다. 어떤 보드에도 없는 id는 “Not on a board”로 표시되는 자기 티켓으로 남습니다.

태그 파일은 에이전트의 소속을 수동으로 정하며 다른 규칙보다 우선합니다. 읽기만 하고 쓰지 않습니다.

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

fleet는 플러그인 자체 저장소에 본 에이전트를 세션 디렉터리마다 한 레코드씩 기억합니다. 그래서 에픽이 닫힐 때까지 에이전트가 에픽 아래에 남습니다. 에픽 밖에서 완료된 작업은 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.

비슷한 프로젝트