humanlayer/skills

Claude Code skills from HumanLayer — 5 plugins, one marketplace

1 — 概要

humanlayer/skills は HumanLayer が公開する Claude Code スキルのマーケットプレイスです。ルートの .claude-plugin/marketplace.json が 5 つのプラグインを列挙し、各プラグインが plugins/<名前>/skills/<名前>/SKILL.md に 1 本のスキルを持ちます。スキル本文は短く保ち、長いテンプレートは同じディレクトリの references/ に置く構成です。

5plugins / skills
3エージェント自動化系
4対応コーディングエージェント
MITライセンス

スキルは 2 系統に分かれます。コード・設定に直接手を入れるもの(improve-claude-md、narrow-react-prop-types、show-me)と、定期実行のエージェント自動化を組み立てるもの(build-iterated-agentic-loop、design-control-loop)です。後者は GitHub Actions ワークフロー・リポジトリローカルスキル・エージェントメモリファイルの 3 点セットを生成します。

インストール

npx skills add humanlayer/skills --skill improve-claude-md

導入後はプロジェクト内でスキル名のスラッシュコマンドを呼び出します(例: /improve-claude-md、/show-me)。

2 — 収録スキル一覧
スキルやること主な生成物・変更対象version
improve-claude-md CLAUDE.md を条件付きブロックで書き直し、指示追従率を上げる CLAUDE.md 本体 1.0.0
narrow-react-prop-types React コンポーネントの props 型を実コードパスに合わせて狭める props 型定義、子コンポーネント、ストーリー・テスト 1.0.0
build-iterated-agentic-loop 反復タスクをリポジトリローカルスキル+定期実行ワークフローにする .claude/skills/、.github/workflows/、.github/agent-memory/ 1.0.0
design-control-loop インタビューでセンサー・コントローラー・アクチュエーターを設計してから実装する センサー/コントローラーのスクリプト、アクチュエータースキル、ワークフロー、メモリ 1.0.0
show-me いま話している対象を図・コード形状スケッチ・HTML で見せる 会話内の図、単発 HTML ファイル 1.0.1
スキル名とディレクトリの一致: 自動化系スキルは生成するスキルについて「SKILL.md の frontmatter の name はディレクトリのスラグと一致していなければならない」と明示します。fix-eslint-issues という名前なら .claude/skills/fix-eslint-issues/SKILL.md(またはリポジトリの慣習に応じて .agents/skills/...)に置きます。
3 — CLAUDE.md の条件付き提示(improve-claude-md)

Claude Code は CLAUDE.md を読み込むとき、「この文脈は関係あるかもしれないし、ないかもしれない。強く関係する場合を除いて反応しないこと」というシステムリマインダーを添えます。スキルはここを問題視します。無関係な記述が多いほど、モデルは CLAUDE.md 全体を無視しやすくなり、本当に守らせたい部分まで一緒に落ちる、という指摘です。

対策として、条件付きで関係する節を <important if="condition"> という XML タグで包みます。Claude Code 自身のシステムプロンプトが使う XML タグのパターンに乗ることで、「関係あるかどうか不明」という前提を越えた明示的な関連シグナルをモデルに与える狙いです。

bare(素のまま)プロジェクトの正体、ディレクトリマップ、技術スタック。ほぼすべてのタスクに関係する土台の文脈は先頭に素で置く。目安は「90% 以上のタスクに関係するか」。
wrapped(条件付き)テストの書き方、API 規約、状態管理、i18n など特定の作業でしか効かないドメイン知識。個別の条件を付けて包む。

条件は狭く、ルールごとに分ける

すべてに当てはまる広い条件は避けます。下は同じ 3 行を、広い条件と狭い条件で書いた対比です。

<!-- BAD: 何にでもマッチする条件 -->
<important if="you are writing or modifying any code">
- Use absolute imports
- Use functional components
- Use camelCase filenames
</important>

<!-- GOOD: ルールごとに狭いトリガー -->
<important if="you are adding or modifying imports">
- Use `@/` absolute imports (see tsconfig.json for path aliases)
</important>

<important if="you are creating new components">
- Use functional components with explicit prop interfaces
</important>

<important if="you are creating new files or directories">
- Use camelCase for file and directory names
</important>

削る対象と残す対象

扱い対象理由
削るリンター・フォーマッター・pre-commit フックで強制できる規約ツールの担当。指示に載せる価値が低い
削る既存コードから推測できるパターンLLM は文脈内学習をするため、数回の検索で追従する
削るコード片古くなりファイルを膨らませる。ファイルパス参照に置き換える
削る「X エージェントを活用する」「ベストプラクティスに従う」のような曖昧な指示具体的な行動に落ちない
残すコマンド表(すべて)土台のリファレンス。使用頻度が低いものも消さない
残すプロジェクトマップあらゆるタスクに関係する土台の文脈
ファイル分割は控える: エージェントがツール呼び出しをして初めて見つかる別ファイルへの分割は、追加の文脈が極端に冗長・複雑な場合を除いて行いません。条件付きブロックの利点は「全部インラインにあるが、重み付けが条件で変わる」ことにあります。
4 — React props 型の絞り込み(narrow-react-prop-types)

Storybook・テスト・モック・デモのために広げられた props 型が、実アプリでは起こらない状態まで表現できてしまっている、という状況を対象にします。方針は一貫しています。実コードパス(live code paths)を props 契約の正とし、ストーリーやテストの側を契約に合わせる。逆方向、つまりテストを楽にするために契約を緩めることは禁じます。

呼び出し元の分類

live code pathsアプリのルート、配線済みコンポーネント、プロバイダー、フック、本番パッケージの export、およびそれらが使う共有コンポーネント。
support codeStorybook のストーリー、テストファイル、フィクスチャ、モック、デモハーネス、見た目確認用の例。

props の判定

判定条件
Requiredsupport code 以外のすべての呼び出し元が渡している
Optionalsupport code 以外に省略する呼び出し元があり、その省略が意味のある実行時状態である
Removedsupport code 以外のどこからも使われていない

optional と nullable は別物として扱います。実コードが常に渡すが値が空になり得る場合は、focusedItem?: FocusedItem | null ではなく focusedItem: FocusedItem | null のように required かつ nullable にします。

手順

STEP 1-2対象の特定と全使用箇所の洗い出しoptional が多い props、onSelect?.(...) のような optional 呼び出し、items ?? [] のフォールバック、常に描画されるのにハンドラが optional な UI を手がかりにする。ストーリーやテスト単独を根拠に対象を選ばない。
STEP 3-4実コードパスから型を導き、公開型を締めるoptional が 1 つ増えるたびにコンポーネントが扱う分岐が増える。防御的な描画ロジックを必要とする広い型より、不可能な状態を作れない厳しい型を選ぶ。
STEP 5型は書き直さず導出するParameters<typeof fn>[0]、ReturnType<typeof fn>、Extract<Union, Shape>、setter は React.Dispatch<React.SetStateAction<T>>。推論が広がる場面では useState<DialogState>(...) のように明示する。
STEP 6-7子コンポーネントとフォールバックの整理親の広い型のせいで optional になっていた行・メニュー・ボタンの props も締める。onRename?.(id, name) は onRename(id, name) へ。new Set(expandedIds ?? defaultExpandedIds ?? []) は new Set(expandedIds) へ。
STEP 8-9共有バリアントとテストを追従させる同じ型を共有する複数コンポーネントは同時に更新する。ストーリーやテストが壊れたら、現実的なハンドラと状態を与えて直す。冗長なら support code 側にヘルパーやフィクスチャを作る。
STEP 10-11検証と応答整形変更したパッケージと、それを使う実アプリ・パッケージの両方で型チェックを走らせる。CI エージェントとして動く場合は references/response-template.md の形式で最終応答を出し、それが PR 本文になる。
アンチパターン: ストーリーで省略できるようにコールバックを optional にする/常に描画されるメニュー項目が onAction?.(...) を呼ぶ/Storybook のために default* props を足す/?? [] や ?? 0 で欠けた実状態を隠す/実コードが 1 形だけなのに複数の API 形を受け入れる。
5 — 反復エージェントループの構築(build-iterated-agentic-loop)

繰り返し可能なエージェントタスクを、スケジュール実行・手動実行・その両方で回る仕組みに変えます。構成要素は 4 つです。エージェントの判断を定義する焦点の狭いスキル、リポジトリ固有のプロンプトでコーディングエージェントを起動するワークフロー、実行をまたいで残るエージェントメモリファイル、そしてループごとに開いている PR を 1 本に保つラベル。参照実装として narrow-react-prop-types が挙げられています。

生成されるファイル

パス役割
.claude/skills/<skill-name>/SKILL.mdリポジトリローカルのエージェント挙動
.github/workflows/agent-<task-name>.yml定期実行のコーディングエージェント自動化
.github/agent-memory/<task-name>.md安定した feedback とスコープ制約
.claude/skills/<skill-name>/references/テンプレート・例・長い補助資料(必要な場合のみ)

設計の 3 問

What are we finding?対象の見つけ方。問題を報告する CLI(eslint --format json など)、検索パターン、diff や changelog、旧パターン、過去の CI から分かる不安定なテスト。
What are we changing?各対象への変換。Fix(その場で解消)、Migrate(別パターンへ)、Generate(既存ソースから生成)、Refactor(挙動を変えない再構成)。
How do we validate?正しさの根拠。ビルド/型チェック、テスト(一部でも可)、問題を見つけたツール自身が解消を報告する、lint・format の通過。

完了条件は「ジョブを 1 文で言える」ことです。例として Find 5 react-doctor violations, fix them, and verify typecheck and quality pass. が挙げられています。

スキルは空欄のフォームを出さず、リポジトリの調査結果から既定値を推奨してから 9 項目を確認します。コーディングエージェント、実行頻度、タスク、変更を許すスコープ、コミット前に通す検証コマンド、PR の上限、PR メタデータ(ラベル・タイトル接頭辞・ブランチ接頭辞)、最終応答の書式、/iterate コメントの扱い。

エージェント必要なシークレット導入方法
Claude CodeANTHROPIC_API_KEYnpm install -g @anthropic-ai/claude-code
Codex CLIOPENAI_API_KEYnpm install -g @openai/codex + codex login --with-api-key
OpenCodeプロバイダー依存(多くは ANTHROPIC_API_KEY か OPENAI_API_KEY)--model と env のシークレットを揃えて変更する
CodeLayerAnthropic 経由なら ANTHROPIC_API_KEYbunx @humanlayer/cli@latest codelayer

開いている PR を 1 本に保つ

推奨既定値は「ループごとに開いている PR は 1 本」です。上限を設けないと、日次のエージェントが 1 週間で 5 本以上のレビュー待ち PR を作り、レビュー疲れとコンフリクトを生みます。ワークフローはループごとのラベルで自分の PR を識別し、スケジュール実行のときだけ上限を確認して何もせず終了します。手動の workflow_dispatch は上限チェックを迂回します。

# ワークフロー冒頭のゲート(テンプレートより)
EXISTING_PR=$(gh pr list --repo "$GITHUB_REPOSITORY" --state open \
  --label "$AGENT_LABEL" --json number,url --limit 1)

# 実行後:ラベルを用意して PR を作り、ラベルを付ける
gh label create "$AGENT_LABEL" --description "Recurring agent PR" --color "0E8A16" || true
PR_URL=$(gh pr create --title "[$(date +%m/%d)] <Task Title>" --body-file /tmp/pr-body.md)
gh pr edit "$PR_URL" --add-label "$AGENT_LABEL"

PR タイトルの推奨形は [MM/DD][Agent: <Agent Name>]: <Concise Description>。エージェントの最終応答は出力形式が異なる(JSON、stream-json、プレーンテキスト)ため、エージェント別の抽出処理で /tmp/pr-body.md に落としてから PR 本文に使います。

書く恒久的なスコープ除外。既知の false positive 領域。今後のエージェントの対象選択を変えるべきレビュー指摘。
書かない単発のタスク指示。1 回の実行の検証出力。すでにスキル側に書いてあるルール。

完了条件は「このファイルを削除すると、単なる履歴ではなく今後の実行に役立つ文脈が失われる」状態です。

初回起動の手順: GitHub Actions のワークフローは一度も実行されるまで workflow_dispatch で手動起動できません。現在のブランチ向けの push トリガーを一時的に追加してファイル一式を push し、Actions タブで成功を確認したあとにトリガーを外します。以降は Actions UI か gh workflow run から起動できます。
6 — 制御ループとしての設計(design-control-loop)

コードベースのある性質を、小さく低リスクでレビュー可能な変更を定期的に積んで目標状態へ寄せたい、という要求に対して、制御理論の語彙で設計します。コードベースは同僚のコミット・依存関係の更新・生成コードによって常に変化する動的な系であり、それらを外乱として扱います。

Set point目標状態。不変条件(「この境界を越えて import しない」)、閾値(「このパッケージのカバレッジ 80% 以上」)、方向(「毎回の実行で件数を減らす」)のいずれか。あわせてスコープ(変更を許すディレクトリ/読むだけのディレクトリ)も固定する。
Sensor現状と目標の差を測る手段。静的解析や lint、構造検索・AST 検索、型チェッカー、テストスイート、テレメトリやエラー検索、自作スクリプト、あるいはコードを読むエージェント自身。測定の安定性・実行コスト・黙って無効化できてしまうかをトレードオフとして話し合う。
Controller測定値から「今回やること」を決める部分。対象の優先順位、1 増分の大きさ、「1 つのレビュー可能な単位」の定義を扱う。完全に決定的なスクリプトから完全にエージェント的な判断まで幅がある。ループの出力を見ながら継続的に調整する部分なので、単純に始める。
Actuator変更を適用する側。CLI コーディングエージェント+リポジトリローカルスキルで、CI 上で走って PR を開く。自動化の前に「良い変更の見本」を既存コードから見つけ、スキルに書き込む。

センサーとコントローラー、あるいはコントローラーとアクチュエーターは融合することがあります。問題を報告しつつ影響度で並べるツールは両方の仕事をしており、対象選定と変更を 1 つのプロンプトで行うエージェントも同じです。スキルは「設計に存在しない分離を作り出さない」と明記します。

flowchart TD
  SP["Set point
目標状態"] --> CMP{{"Compare
差分をとる"}} MEA["Measured output
件数・スコア"] --> CMP CMP -->|"measured error"| CTL["Controller
今回の対象を選ぶ"] CTL -->|"1 reviewable unit"| ACT["Actuator
エージェント + スキル"] ACT -->|"PR"| SYS["Repository"] DIS["Disturbance
同僚のコミット・依存更新"] --> SYS SYS --> SEN["Sensor
lint / 型 / 検索"] SEN --> MEA MEM["Memory + /iterate
人が舵を取る"] --> CTL
先にローカルで動かす: センサーを単体で走らせて出力を読み、その出力に対してコントローラーを走らせ、選ばれた対象に対してアクチュエーターをヘッドレス CLI で走らせる。ここまで手で通してから CI に載せます。ワークフローは「すでに手で動くもの」を並べる薄いオーケストレーターに留め、デバッグ可能な状態を保ちます。
PHASE A系を理解する質問の前に既存 CI、パッケージマネージャー、検証スクリプト、既存スキル、既存のエージェントループ、静的解析・codegen・テストの道具立てを読む。完了条件はインストールコマンドと CI プラットフォーム、含まれるパッケージ/サービスを言えること。
PHASE Bユーザーと一緒に設計するset point から順に、Phase A の証拠に基づく選択肢とトレードオフを出して合意する。外乱を名指しし、必要ならダンパー(基準値と比較して悪化を検出する PR チェック)を提案する。成果は短い設計メモ。
PHASE Cアクチュエータースキルを書く判断をリポジトリローカルスキルに落とす。確認可能な完了条件付きの手順を SKILL.md に、長いテンプレートは兄弟の参照ファイルに。ルールの正は 1 か所に置き、スキル・プロンプト・メモリで重複させない。
PHASE D各部品をローカルで動かすCI を作る前に、センサーとコントローラーをバージョン管理されたコマンド/スクリプトとして着地させ、ループ全体を手で確認する。
PHASE ECI に配線するsensor → controller → actuator の個別ステップとして走らせ、コミットしてエージェントの最終メッセージを本文に PR を開く。融合している部品は 1 ステップにまとめる。頻度はリスクとレビュー負荷から決める。
PHASE F人をループに乗せるメモリファイル(コントローラーの後に決定的に読み込む)と PR 上の /iterate の 2 経路。どちらも今回の PR だけでなく将来の挙動を変えるものとして扱う。これがコントローラーとスキルの調整手段になる。
PHASE G流量を制御するレビューできる速度を超えて PR を作らないよう、既定でループごとに開いている PR を 1 本に制限する。スケジュール実行は上限到達時に何もしない。
PHASE H検証・試走・加速YAML をパースし、参照される全パスの存在を確認する。push トリガーで試走してから外す。出力が安定したら頻度を上げる、1 回の実行で N 件選ぶ、1 実行内で sense→control→actuate を N 回回す、といった加速に進む。
7 — 視覚化の型(show-me)

会話中の話題を視覚的に理解させるスキルです。前置きを飛ばし、散文を短く保ち、要点が伝わる最小の表現を選びます。用意されている型は次のとおりです。

見せたいもの表現
ロジック・アルゴリズム疑似コード
実行時の制御フロー呼び出しツリー
UI の構造(状態とモジュール境界を含む)コンポーネントツリー
ファイルの責務・広範なリファクタ浅いファイルツリー
コンポーネント間の相互作用・制御フロー・データフローMermaid
周囲の形は既にあり、変わる箇所が要点diff(話題に合わせて diff の形も変える)
大半が新規、省略すると所有者や順序が隠れる、コピーできる目標形が要るブロック全体
Mermaid では密度が高すぎる UI・レイアウト・状態比較・概念単発の HTML ファイル(図・インフォグラフィック・短いスライド)

HTML を書く場合は、対象プロダクトの色・書体・余白・コンポーネントに合わせ、実際のラベルとデータを使い、デスクトップとモバイルの両方に対応させ、最後に開いて見せます。

Bash(open path/to/show-me-{description}.html)
使いすぎない: 各図はそれを支える短い文の隣に置き、いまの質問または議論中の選択肢に答えるために必要な呼び出し・ファイル・props・状態・境界だけを残します。複数使うことはあっても、全部を使うことはまずありません。