humanlayer/skills
Claude Code skills from HumanLayer — 5 plugins, one marketplace
humanlayer/skills は HumanLayer が公開する Claude Code スキルのマーケットプレイスです。ルートの .claude-plugin/marketplace.json が 5 つのプラグインを列挙し、各プラグインが plugins/<名前>/skills/<名前>/SKILL.md に 1 本のスキルを持ちます。スキル本文は短く保ち、長いテンプレートは同じディレクトリの references/ に置く構成です。
スキルは 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)。
| スキル | やること | 主な生成物・変更対象 | 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/...)に置きます。
Claude Code は CLAUDE.md を読み込むとき、「この文脈は関係あるかもしれないし、ないかもしれない。強く関係する場合を除いて反応しないこと」というシステムリマインダーを添えます。スキルはここを問題視します。無関係な記述が多いほど、モデルは CLAUDE.md 全体を無視しやすくなり、本当に守らせたい部分まで一緒に落ちる、という指摘です。
対策として、条件付きで関係する節を <important if="condition"> という XML タグで包みます。Claude Code 自身のシステムプロンプトが使う XML タグのパターンに乗ることで、「関係あるかどうか不明」という前提を越えた明示的な関連シグナルをモデルに与える狙いです。
条件は狭く、ルールごとに分ける
すべてに当てはまる広い条件は避けます。下は同じ 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 エージェントを活用する」「ベストプラクティスに従う」のような曖昧な指示 | 具体的な行動に落ちない |
| 残す | コマンド表(すべて) | 土台のリファレンス。使用頻度が低いものも消さない |
| 残す | プロジェクトマップ | あらゆるタスクに関係する土台の文脈 |
Storybook・テスト・モック・デモのために広げられた props 型が、実アプリでは起こらない状態まで表現できてしまっている、という状況を対象にします。方針は一貫しています。実コードパス(live code paths)を props 契約の正とし、ストーリーやテストの側を契約に合わせる。逆方向、つまりテストを楽にするために契約を緩めることは禁じます。
呼び出し元の分類
props の判定
| 判定 | 条件 |
|---|---|
| Required | support code 以外のすべての呼び出し元が渡している |
| Optional | support code 以外に省略する呼び出し元があり、その省略が意味のある実行時状態である |
| Removed | support code 以外のどこからも使われていない |
optional と nullable は別物として扱います。実コードが常に渡すが値が空になり得る場合は、focusedItem?: FocusedItem | null ではなく focusedItem: FocusedItem | null のように required かつ nullable にします。
手順
onSelect?.(...) のような optional 呼び出し、items ?? [] のフォールバック、常に描画されるのにハンドラが optional な UI を手がかりにする。ストーリーやテスト単独を根拠に対象を選ばない。Parameters<typeof fn>[0]、ReturnType<typeof fn>、Extract<Union, Shape>、setter は React.Dispatch<React.SetStateAction<T>>。推論が広がる場面では useState<DialogState>(...) のように明示する。onRename?.(id, name) は onRename(id, name) へ。new Set(expandedIds ?? defaultExpandedIds ?? []) は new Set(expandedIds) へ。references/response-template.md の形式で最終応答を出し、それが PR 本文になる。onAction?.(...) を呼ぶ/Storybook のために default* props を足す/?? [] や ?? 0 で欠けた実状態を隠す/実コードが 1 形だけなのに複数の API 形を受け入れる。
繰り返し可能なエージェントタスクを、スケジュール実行・手動実行・その両方で回る仕組みに変えます。構成要素は 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 問
eslint --format json など)、検索パターン、diff や changelog、旧パターン、過去の CI から分かる不安定なテスト。完了条件は「ジョブを 1 文で言える」ことです。例として Find 5 react-doctor violations, fix them, and verify typecheck and quality pass.
が挙げられています。
スキルは空欄のフォームを出さず、リポジトリの調査結果から既定値を推奨してから 9 項目を確認します。コーディングエージェント、実行頻度、タスク、変更を許すスコープ、コミット前に通す検証コマンド、PR の上限、PR メタデータ(ラベル・タイトル接頭辞・ブランチ接頭辞)、最終応答の書式、/iterate コメントの扱い。
| エージェント | 必要なシークレット | 導入方法 |
|---|---|---|
| Claude Code | ANTHROPIC_API_KEY | npm install -g @anthropic-ai/claude-code |
| Codex CLI | OPENAI_API_KEY | npm install -g @openai/codex + codex login --with-api-key |
| OpenCode | プロバイダー依存(多くは ANTHROPIC_API_KEY か OPENAI_API_KEY) | --model と env のシークレットを揃えて変更する |
| CodeLayer | Anthropic 経由なら ANTHROPIC_API_KEY | bunx @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 本文に使います。
完了条件は「このファイルを削除すると、単なる履歴ではなく今後の実行に役立つ文脈が失われる」状態です。
workflow_dispatch で手動起動できません。現在のブランチ向けの push トリガーを一時的に追加してファイル一式を push し、Actions タブで成功を確認したあとにトリガーを外します。以降は Actions UI か gh workflow run から起動できます。
コードベースのある性質を、小さく低リスクでレビュー可能な変更を定期的に積んで目標状態へ寄せたい、という要求に対して、制御理論の語彙で設計します。コードベースは同僚のコミット・依存関係の更新・生成コードによって常に変化する動的な系であり、それらを外乱として扱います。
センサーとコントローラー、あるいはコントローラーとアクチュエーターは融合することがあります。問題を報告しつつ影響度で並べるツールは両方の仕事をしており、対象選定と変更を 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
SKILL.md に、長いテンプレートは兄弟の参照ファイルに。ルールの正は 1 か所に置き、スキル・プロンプト・メモリで重複させない。/iterate の 2 経路。どちらも今回の PR だけでなく将来の挙動を変えるものとして扱う。これがコントローラーとスキルの調整手段になる。push トリガーで試走してから外す。出力が安定したら頻度を上げる、1 回の実行で N 件選ぶ、1 実行内で sense→control→actuate を N 回回す、といった加速に進む。会話中の話題を視覚的に理解させるスキルです。前置きを飛ばし、散文を短く保ち、要点が伝わる最小の表現を選びます。用意されている型は次のとおりです。
| 見せたいもの | 表現 |
|---|---|
| ロジック・アルゴリズム | 疑似コード |
| 実行時の制御フロー | 呼び出しツリー |
| UI の構造(状態とモジュール境界を含む) | コンポーネントツリー |
| ファイルの責務・広範なリファクタ | 浅いファイルツリー |
| コンポーネント間の相互作用・制御フロー・データフロー | Mermaid |
| 周囲の形は既にあり、変わる箇所が要点 | diff(話題に合わせて diff の形も変える) |
| 大半が新規、省略すると所有者や順序が隠れる、コピーできる目標形が要る | ブロック全体 |
| Mermaid では密度が高すぎる UI・レイアウト・状態比較・概念 | 単発の HTML ファイル(図・インフォグラフィック・短いスライド) |
HTML を書く場合は、対象プロダクトの色・書体・余白・コンポーネントに合わせ、実際のラベルとデータを使い、デスクトップとモバイルの両方に対応させ、最後に開いて見せます。
Bash(open path/to/show-me-{description}.html)
- GitHub: humanlayer/skills — 本リポジトリ(MIT)
- HumanLayer — 公開元。CodeLayer は同社の軽量エージェントハーネス
- Agent Skills Specification — 生成スキルが参照する仕様
- Claude Code ドキュメント — CLAUDE.md とスキルの前提
- GitHub Actions: ワークフローのトリガー —
schedule/workflow_dispatch/issue_comment