dotfiles/claude/skills/ba2-skill-installer/SKILL.md
ba2-workspace リポジトリ(skills/ 配下)で共有されているスキルを、各自の個人スキルディレクトリ(~/.claude/skills/ ・ ~/.codex/skills/)へ取り込む/更新するスキル。チームで作ったスキルを自分の環境で使えるようにする配布ツール。「スキルをインストール」「リポジトリのスキルを取り込んで」「共有スキルを個人に入れて」「スキルを最新に更新」「新しいスキル使いたい」「ba2-skill-installer」などのリクエストでトリガー。
npx skillsauth add octkp/dotfiles ba2-skill-installerInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
ba2-workspace リポジトリでチーム共有しているスキルを、各メンバーの個人スキルディレクトリへ取り込む(コピーする)ためのスキル。
このリポジトリでは「スキルの配布元」と「実際に使う場所」を分けている:
| 区分 | 場所 | 役割 |
|---|---|---|
| 配布元(repo) | <ba2-workspace>/skills/<名前>/SKILL.md(Claude版)<br><ba2-workspace>/skills/<名前>/.codex/SKILL.md(Codex版・あれば) | チームで共有・バージョン管理するスキルの正本 |
| 利用場所(個人) | ~/.claude/skills/<名前>/SKILL.md<br>~/.codex/skills/<名前>/SKILL.md | Claude Code / Codex CLI が実際に読み込む場所 |
スキルは個人ディレクトリに置かれて初めて発動する。このスキルは配布元 → 個人へのコピーを対話的に行う。
# REPO_ROOT 解決: 環境変数 → ba2-workspace 内で実行されていれば git rev-parse → 既定値(ghq)の順
REPO_ROOT="${BA2_WORKSPACE:-}"
if [ -z "$REPO_ROOT" ]; then
GIT_TOP=$(git rev-parse --show-toplevel 2>/dev/null)
if [ -n "$GIT_TOP" ] && [ "$(basename "$GIT_TOP")" = "ba2-workspace" ]; then
REPO_ROOT="$GIT_TOP"
fi
fi
: "${REPO_ROOT:=$HOME/ghq/github.com/kokopelli-inc/ba2-workspace}"
SKILLS_DIR="$REPO_ROOT/skills"
if [ ! -d "$SKILLS_DIR" ]; then
echo "ERROR: $SKILLS_DIR が見つかりません。ba2-workspace のクローン先を BA2_WORKSPACE 環境変数で指定してください。" >&2
exit 1
fi
cd "$REPO_ROOT"
git pull --ff-only origin main 2>/dev/null || echo "(git pull はスキップ。ローカルの内容でインストールします)"
git pull は best-effort。失敗しても続行する。ghq 以外にクローンしている場合は環境変数 BA2_WORKSPACE で絶対パスを指定する(または上記コード冒頭の既定値を実態に合わせて書き換える)。各スキルディレクトリには Claude版(SKILL.md)と Codex版(.codex/SKILL.md、あれば)が同居している。両方の存在を確認し、個人側に「未インストール / 同一 / 差分あり(更新可能)」のどれかを判定する。
cd "$REPO_ROOT"
[ -d "$SKILLS_DIR" ] || { echo "($SKILLS_DIR が無い)"; exit 0; }
echo "===== skills ====="
for dir in "$SKILLS_DIR"/*/; do
[ -d "$dir" ] || continue
name=$(basename "$dir")
# Claude版(必須想定)
src_claude="$dir/SKILL.md"
dest_claude="$HOME/.claude/skills/$name/SKILL.md"
if [ ! -e "$src_claude" ]; then st_c="(Claude版なし)"
elif [ ! -e "$dest_claude" ]; then st_c="未インストール"
elif diff -q "$src_claude" "$dest_claude" >/dev/null 2>&1; then st_c="同一"
else st_c="差分あり"; fi
# Codex版(任意)
src_codex="$dir/.codex/SKILL.md"
dest_codex="$HOME/.codex/skills/$name/SKILL.md"
if [ ! -e "$src_codex" ]; then st_x="(Codex版なし)"
elif [ ! -e "$dest_codex" ]; then st_x="未インストール"
elif diff -q "$src_codex" "$dest_codex" >/dev/null 2>&1; then st_x="同一"
else st_x="差分あり"; fi
printf " %-28s claude:%-14s codex:%-14s\n" "$name" "$st_c" "$st_x"
done
SKILL.md が無く .codex/SKILL.md だけある ような構成は基本ない(Claude版が正本)。.codex/ が無いスキルもある(Codex対応不要のもの)。その場合は Codex 側のコピーをスキップする。一覧を提示し、ユーザーにどれを取り込むか確認する(AskUserQuestion 等)。
diff -u "$dest_claude" "$src_claude" の内容を見せてから進める。対象スキルごとに、配布元に存在する版(Claude / Codex)をそれぞれの個人ディレクトリへコピーする。
NAME="ba2-ticket-knowledge-reader" # 対象スキル名に置換
src_dir="$SKILLS_DIR/$NAME"
# Claude版
if [ -e "$src_dir/SKILL.md" ]; then
mkdir -p "$HOME/.claude/skills/$NAME"
cp "$src_dir/SKILL.md" "$HOME/.claude/skills/$NAME/SKILL.md"
# SKILL.md 以外の補助ファイル(.codex/ を除く)もコピー
for f in "$src_dir"/*; do
bn=$(basename "$f")
[ "$bn" = "SKILL.md" ] && continue
[ "$bn" = ".codex" ] && continue
cp -r "$f" "$HOME/.claude/skills/$NAME/"
done
echo "installed (Claude): $HOME/.claude/skills/$NAME/"
fi
# Codex版
if [ -e "$src_dir/.codex/SKILL.md" ]; then
mkdir -p "$HOME/.codex/skills/$NAME"
cp "$src_dir/.codex/SKILL.md" "$HOME/.codex/skills/$NAME/SKILL.md"
# .codex/ 配下の他ファイルもコピー
for f in "$src_dir/.codex"/*; do
bn=$(basename "$f")
[ "$bn" = "SKILL.md" ] && continue
cp -r "$f" "$HOME/.codex/skills/$NAME/"
done
echo "installed (Codex): $HOME/.codex/skills/$NAME/"
fi
~/.claude/skills/、~/.codex/skills/)が無ければ mkdir -p で作る。SKILL.md 以外の補助ファイル(参照ドキュメント、設定ファイル等)も同梱されている場合は併せてコピーする。.codex/ 自体はサブディレクトリ構造なのでコピー対象から除外する点に注意。インストール/更新したスキル名と、コピー先(~/.claude/skills/ / ~/.codex/skills/)を報告する。
<ba2-workspace>/skills/<名前>/)を直接編集してコミットする。SKILL.md)と Codex版(.codex/SKILL.md)は内容が異なることがある。それぞれの配布元からそれぞれの個人ディレクトリへコピーする(クロスコピーしない)。git pull は best-effort。ネットワーク不可でもローカルの配布元内容でインストールできる。このスキル自体も配布元に置かれている。まだ個人ディレクトリに無いメンバーは、最初の1回だけ手動でコピーする:
# ghq 以外にクローンしている場合は事前に `export BA2_WORKSPACE=/path/to/ba2-workspace` するか、下の既定値を書き換える
REPO_ROOT="${BA2_WORKSPACE:-$HOME/ghq/github.com/kokopelli-inc/ba2-workspace}"
SRC="$REPO_ROOT/skills/ba2-skill-installer"
mkdir -p "$HOME/.claude/skills/ba2-skill-installer" "$HOME/.codex/skills/ba2-skill-installer"
cp "$SRC/SKILL.md" "$HOME/.claude/skills/ba2-skill-installer/SKILL.md"
cp "$SRC/.codex/SKILL.md" "$HOME/.codex/skills/ba2-skill-installer/SKILL.md" # Codex も使う場合
以降は「スキルをインストールして」と頼めば、このスキルが他のスキルをまとめて取り込む。
ユーザー: 「リポジトリのスキルを個人に入れて」
実行:
git pull(best-effort)ユーザー: 「ba2-ticket-knowledge-reader を最新にして」
実行:
git pull(best-effort)ba2-ticket-knowledge-reader の配布元(SKILL.md と .codex/SKILL.md)を個人ディレクトリへ cp で上書きdocumentation
base リポジトリ(~/base)の主要ディレクトリ(dotfiles / home / local / scripts / docs)の README.md と、リポジトリ直下の README.md を、実際のファイル構成に合わせて更新・新規作成するスキル。各ディレクトリの中身を実際に走査して内容を導出するので、設定追加・ディレクトリ移動のあとに走らせると README が現状と一致する。「READMEを更新して」「READMEを作り直して」「base のドキュメントを整える」「/base-readme」などのリクエストで使用。
development
旧 badev-knowledge-base リポの docs/{苗字}/ 配下を、許可リストの現役メンバー 4 人 (takano / tokita / yukioka / ushiroyama) に絞って ba2-workspace/docs/ に同期するスキル。旧リポを source of truth として、衝突時は新リポ側を旧リポで上書きする。コミット・プッシュは行わず、git add までで停止する。「badev-knowledge-base から同期して」「旧リポのナレッジを取り込んで」「badev-knowledge-sync を走らせて」「旧 docs を同期」などのリクエストでトリガー。
documentation
チケット番号(BAX-XXXX)を伝えるだけで、ba2-ticket-knowledge-logger が記録したナレッジドキュメント(README.md / LOG.md / PLAN.md)を全ユーザー・全カテゴリ横断で自動検索して読み込み、要約して提示するスキル。別セッションで過去の調査・実装内容を読み直したいときに使う。「BAX-10987」「BAX-10325のナレッジ読んで」「前に調べたBAX-XXXXの記録」「BAX-XXXXの続きをやりたい」「BAX-XXXX読み直して」などのリクエストでトリガー。
tools
チケット番号(BAX-XXXX)とカテゴリ(調査/実装/その他)を指定して、会話ログとまとめファイルを記録し、JIRAチケットにもコメントとしてナレッジを投稿するスキル。「BAX-10325の調査を記録」「実装にチケット作成」「会話ログを保存」などのリクエストで使用。