project-view-status
プロジェクトの進捗をステータス別・優先度別・サイズ別に集計してレポートを生成する。完了率と未完了の優先度内訳を表形式で出力する読み取り専用スキル。「進捗を見せて」「プロジェクトレポート」「完了率は?」「ステータス別の件数」などで使用。
By fandhe-ai · 486 installs
npx skills add fandhe-ai/agent-cli-skills --skill project-view-status
Source repository · Upstream listing
project view status
プロジェクトの進捗状況をステータス別・優先度別に集計し、レポートを生成します。
前提条件
対象の GitHub Project が存在すること
gh CLI がインストールされ、認証済みであること( project スコープ付き)
集計は gh の jq (組み込み jq)で行うため、別途 jq のインストールは不要
フロー
Step 1: プロジェクト情報を取得する
プロジェクトのタイトル・説明・URL を取得する。
Step 2: 全アイテムを取得する
limit の固定値(例: 999)は、アイテムが上限を超えるプロジェクトで残りを無視し総件数・内訳・完了率を誤らせる。先に totalCount を取得し、その件数を limit に渡して全件取得する。
Step 4 では ${total} を limit にそのまま渡し、全アイテムを 1 回だけ取得する(取りこぼしの判定は Step 4 の出力で行う)。
Step 3: フィールド定義を取得する
Status, Priority, Size フィールドの定義とオプション値を取得する。
Step 4: ステータス別・優先度別に集計する
gh project item list は Step 2 で確認した ${total} を limit に渡して 1 回だけ 取得し、その同一 JSON から jq の 1 つの式で全集計をまとめて算出する(同一レポート内でスナップショットが混在しないようにするため、複数回に分けて再取得しない)。手で数えない、standalone の jq インストールも不要。例:
取得は 1 回だけなので結果は取得時点の一貫したスナップショットであり、Step 2〜4 の間にアイテムが削除されていても影響しない。問題になるのは Step 2 以降にアイテムが増えて limit "${total}" を超え取りこぼす場合のみで、出力の total ( .totalCount )と n ( .items length )が一致しない( total n )ときは不完全な集計として扱わず、処理を停止してユーザーへ報告する(再実行は報告後の対応とする)。フィールドが Step 3 の field list に存在しない場合、全件で (未設定) になるため、該当フィールドのセクションはスキップする。完了率は done / n から算出する。 open by priority ・ open by size ・ open status x priority は Step 5 の書式(優先度別・サイズ別は未完了のみ)に合わせ、Status が Done 以外(未設定も含む)のアイテムのみを集計する。モデルは算出結果を表に整形し、目立つ偏りがあればコメントする。
Step 5: レポートを生成する
以下の形式でレポートを出力:
注意事項
limit は固定値ではなく totalCount (Step 2 で取得した ${total} )を渡し、ページネーション切り捨てを防ぐ
読み取り専用の操作のため、プロジェクトに変更を加えない
フィールドが存在しない場合は該当セクションをスキップする
アイテムが 0 件の場合はその旨を報告する
ネットワークを要する(読み取りのみ。後述の「sandbox 環境での実行」節を参照)
検証
Step 5 のレポート出力に以下が含まれていれば完了:
総アイテム数・完了率が表示されている
ステータス別・優先度別の件数が集計されている
プロジェクトに変更は加わらない(読み取り専用)。
sandbox 環境での実行
Step 1〜4 の gh project view / gh project item list / gh project field list (Step 4 の集計取得も含む)はいずれも GitHub API への読み取りであり、ネットワークを要する。該当コマンド単位で sandbox 無効にして実行する。本スキルは書き込みを一切行わない(プロジェクトへの変更なし・ワークスペース外への書き込みなし)。Step 5 のレポート整形のみローカル処理であり、ネットワークを要しない。