pm-generate

pm-generate

ユーザー定義のツール構成を監査し、個人向けPMスキルと設定を対話的に生成するスキル。

AIスキル大辞典による日本語要約
品質評価97/100評価確度:暫定
人気度(GitHub Star) 0発掘スコア 100
01

このSkillでできること

  • ✓アクティブなMCPサーバーとスキルを監査し、会議・カレンダー・メールなどの能力別に整理する
  • ✓各能力グループのツール名、ノート保存先、プロバイダー、関連スキルを対話的に確認する
  • ✓pm-init、pm-start、pm-status、pm-endのスキルを生成する
  • ✓個人設定、フレームワークライブラリ、ランタイム状態を所定の場所に作成する
02

使い方

01
STEP 1

PMフレームワークを自分のツール構成向けに初期設定したいときに呼び出す

02
STEP 2

対話形式で能力ごとのツール対応、ノートルート、プロバイダー、関連スキルを指定する

03
STEP 3

生成されたPMスキルと個人設定の内容を確認する

04
STEP 4

既存の個人設定がある場合は、上書き確認を明示してから進める

03

Skillのインストール

このGitHubリポジトリにあるSkillを確認し、現在の環境に適した方法でインストールしてください。
インストール後、正常に利用できることを確認し、基本的な使い方も簡潔に説明してください。

Repository:
https://github.com/eimaj/project-manager
手動でインストールする

README / SKILL.mdから機械抽出できたコマンドのみ表示しています。推測したコマンドではありません。

CONFIG_DST="${PM_CONFIG:-$HOME/.config/pm/config.json}"
mkdir -p "$(dirname "$CONFIG_DST")"
if [[ -f "$CONFIG_DST" && "${CONFIRM_CONFIG_OVERWRITE:-no}" != "yes" ]]; then
echo "GUARD: config exists at $CONFIG_DST — confirm overwrite to proceed."
echo "STOP and ask the user. Safe paths: set CONFIRM_CONFIG_OVERWRITE=yes to overwrite,"
echo "or back up first: cp \"$CONFIG_DST\" \"$CONFIG_DST.bak\"."
return 10 2>/dev/null || exit 10
fi
TOOLS_NDJSON="$(mktemp)"
add_tool() {
local name="$1" provider="$2" root="$3"; shift 3
local skills_json='[]'
[[ "$#" -gt 0 ]] && skills_json=$(printf '%s\n' "$@" | jq -R . | jq -s .)
jq -nc \
--arg name "$name" --arg provider "$provider" --arg root "$root" \
--argjson skills "$skills_json" \
'{name:$name, value:({provider:$provider}
+ (if $root=="" then {} else {root:$root} end)
+ {skills:$skills})}' >> "$TOOLS_NDJSON"
}
TOOLS_OBJ=$(jq -s 'reduce .[] as $t ({}; .[$t.name] = $t.value)' "$TOOLS_NDJSON")
jq -n \
--arg fw "$FRAMEWORK_ROOT" --arg notes "$NOTES_ROOT" \
--argjson tools "$TOOLS_OBJ" \
'{version:"2.0", paths:{framework_root:$fw, notes_root:$notes}, tools:$tools}' > "$CONFIG_DST"
rm -f "$TOOLS_NDJSON"
echo "wrote $CONFIG_DST"
mkdir -p "$NOTES_ROOT"
mkdir -p "$FRAMEWORK_ROOT/lib" "$FRAMEWORK_ROOT/sessions"
for f in session.sh with-lock.sh scaffold.sh handoff-write.sh config.sh commit-paths.sh \
session-commit.sh churn-sweep.sh prune-markers.sh active-panes.sh \
herdr-tabs.sh herdr-goto.sh; do
install -m 0755 "$REPO/lib/$f" "$FRAMEWORK_ROOT/lib/$f"
done
[[ -f "$FRAMEWORK_ROOT/registry.jsonl" ]] || : > "$FRAMEWORK_ROOT/registry.jsonl"
echo "installed lib + state under $FRAMEWORK_ROOT"
SKILLS_DIR="$HOME/.claude/skills"
render_skill() {
local skill="$1"
local tdir="$REPO/templates/$skill"
local src="$tdir/SKILL.md"
[[ -f "$tdir/SKILL.local.md" ]] && src="$tdir/SKILL.local.md"
local dst_dir="$SKILLS_DIR/$skill"
local dst="$dst_dir/SKILL.md"
if [[ -e "$dst_dir" ]]; then
if [[ -L "$dst_dir" ]]; then
echo "GUARD: $dst_dir is a symlink (managed by another package). STOP — ask the user before replacing."; return 10
fi
if [[ -f "$dst" ]] && ! grep -q 'Rendered by `/pm-generate`' "$dst"; then
echo "GUARD: $dst exists and was NOT generated by pm-generate. STOP — ask the user before overwriting."; return 10
fi
fi
mkdir -p "$dst_dir"
esc() { printf '%s' "$1" | sed -e 's/[\\&#]/\\&/g'; }
subst() {  # subst <src> <dst> — the 2-placeholder render, shared by SKILL.md + companions
sed \
-e "s#{{framework_root}}#$(esc "${FRAMEWORK_ROOT}")#g" \
-e "s#{{notes_root}}#$(esc "${NOTES_ROOT}")#g" \
"$1" > "$2"
}
subst "$src" "$dst"
echo "rendered $dst"
local f base osrc
for f in "$tdir"/*.md; do
[[ -e "$f" ]] || continue
base="$(basename "$f")"
case "$base" in SKILL.md|*.local.md) continue ;; esac
osrc="$f"
[[ -f "$tdir/${base%.md}.local.md" ]] && osrc="$tdir/${base%.md}.local.md"
subst "$osrc" "$dst_dir/$base"
echo "rendered $dst_dir/$base"
done
}
for s in pm-init pm-start pm-status pm-end; do
render_skill "$s" || { echo "Rendering halted on $s (guard tripped). Resolve with the user
pm/
install.sh                 # idempotent installer (symlink + lib + state + starter config)
lib/                       # tool-agnostic bash, installed into the framework dir
session.sh               #   resolve a stable per-session id (read-only)
with-lock.sh             #   reusable atomic mkdir lock (retry/stale-break/fail-loud)
scaffold.sh              #   scaffold a project's files; upsert the registry
handoff-write.sh         #   atomic per-session LAST-SESSION.md block update
commit-paths.sh          #   frozen-HEAD commit primitive (scratch-index, no checkout)
session-commit.sh        #   per-session pm-end commit branch, via commit-paths.sh
config.sh                #   read the personal config, expose generic tool accessors
templates/pm-{init,start,status,end}/SKILL.md   # placeholder skills, RENDERED by pm-generate
skills/pm-generate/        # the generator skill itself (symlinked by install.sh)
docs/                      # ARCHITECTURE.md, SLOTS.md
config/config.example.json # personal-config template (schema v2, named-tool registry)
tests/run.sh               # pure-bash test suite (bash + jq only)
04

このSkillを使うプロンプト例

Skill名を明示すると、意図したSkillを使わせやすくなります。自動発動型では必須とは限りません。

自分のツール構成に合わせてPMスキルを生成して。利用中のMCPサーバーとスキルを監査し、各ツールの対応を確認したい。
出力例を見る
接続されたツールを能力別に整理し、確認したマッピングに基づいてpm-init、pm-start、pm-status、pm-endと個人設定を生成しました。
05

安全性チェック

自動解析による参考情報です。Skillの安全性を保証するものではありません。

外部API通信検出あり
Shellコマンド実行明確な記述なし
ファイル読み取り明確な記述なし
ファイル書き込み検出あり
ネットワークアクセス検出あり
認証情報明確な記述なし
検出根拠を見る
  • file_write: ONFIG_DST="${PM_CONFIG:-$HOME/.config/pm/config.json}" mkdir -p "$(dirname "$CONFIG_DST")" # GUARD: never silently clobber an existing personal config
  • file_write: OVERWRITE=yes to overwrite," echo "or back up first: cp \"$CONFIG_DST\" \"$CONFIG_DST.bak\"." return 10 2>/dev/null || exit 10 fi TOOLS_NDJSON=
  • network: { "name": "Jane Doe", "role": "Backend", "slack": "https:// .slack.com/team/U0123ABC", "github": "janedoe", "email": "jane.doe@company.com" } ] [
06

関連Skill