Agent・Command・Skillの使い分け
3つの拡張機構を正しく選択する
3つの拡張機構の比較表
Hermes AgentにはAgent・Command・Skillという3つの拡張機構があります。 それぞれ似ているように見えますが、設計思想と動作が異なります。 まずは全体像を比較表で把握しましょう。
| 特性 | Agent | Command | Skill |
|---|---|---|---|
| 配置場所 | .claude/agents/ | .claude/commands/ | .claude/skills/ |
| コンテキスト | 分離(別プロセス) | インライン(メイン共有) | インライン(fork可能) |
| /メニュー表示 | なし | 常に表示 | デフォルト表示(非表示可能) |
| 自動呼び出し | あり(description経由) | なし | あり(description経由) |
| 引数 | promptパラメータ | $ARGUMENTS, $0, $1 | $ARGUMENTS, $0, $1 |
| 動的コンテキスト | なし | !`command` | !`command` |
| ツール制限 | tools / disallowedTools | allowed-tools | allowed-tools |
| メモリ | memoryフィールド | なし | なし |
| Skillプリロード | skillsフィールド | なし | なし |
| MCPサーバー | mcpServersフィールド | なし | なし |
いつAgentを使うか
Agentは独立したコンテキストウィンドウで動作する自律的なエージェントです。 メインの会話とは完全に分離されて動くため、以下のような場面で力を発揮します。
- 自律的なマルチステップタスク: 「コードベースを調査して、問題を特定し、修正案を提示する」 のように、複数のステップを自分で判断しながら進める必要がある場合
- コンテキスト分離が必要: メインの会話を汚したくない重い処理。 大量のファイルを探索したり、長時間の分析を行う場合
- 永続メモリが必要:
memoryフィールドで セッション間で情報を引き継ぎたい場合 - バックグラウンド実行:
background: trueで メインの作業と並行して処理を進めたい場合 - Worktree分離:
isolation: worktreeで Git worktreeを使った完全分離実行が必要な場合
# .claude/agents/code-reviewer.md
---
name: code-reviewer
description: Use this agent PROACTIVELY when reviewing pull requests
tools: Read, Glob, Grep
model: sonnet
maxTurns: 10
memory: project
skills:
- review-guidelines
---
# コードレビュー手順
1. 変更されたファイルを全て読む
2. コーディング規約との整合性を確認
3. パフォーマンスやセキュリティの問題を検出
4. レビューコメントを構造化して返すいつCommandを使うか
Commandはユーザーが意図的に起動するエントリーポイントです。 以下のような場面に向いています。
- 明示起動のエントリーポイント: ユーザーが自分のタイミングで起動したい定型作業。
/メニューに常に表示されるため、チームメンバーが使いやすい - 他のAgent・Skillのオーケストレーション: 複数のAgent・Skillを 順番に呼び出すワークフローの指揮者として機能させたい場合
- コンテキストを軽量に保ちたい: Commandは起動されるまで コンテキストに読み込まれないため、普段の会話を圧迫しない
# .claude/commands/deploy-check.md
---
description: デプロイ前の最終チェックを実行
model: haiku
---
# デプロイ前チェック
1. Agent tool で code-reviewer を呼び出し、
直近の変更をレビュー
2. テストを実行して全パスを確認
3. Skill tool で changelog-generator を呼び出し、
変更履歴を生成
4. 結果をサマリーとして報告いつSkillを使うか
SkillはClaudeが自動的に適用する再利用可能な手順です。 以下のような場面で選択します。
- Claudeに自動呼び出しさせたい: ユーザーがいちいちコマンドを叩かなくても、 会話の文脈に応じてClaudeが自分で判断して適用してほしい場合
- 複数箇所から再利用する手順: 同じ手順をCommand・Agent・Claudeの通常会話など、 複数の場所から呼び出したい場合
- Agentへのドメイン知識プリロード:
user-invocable: falseに設定し、 Agentのskills:フィールドで指定してドメイン知識を注入したい場合
# .claude/skills/test-writer/SKILL.md
---
name: test-writer
description: TypeScriptのテストファイルを作成・更新するとき
allowed-tools: Read, Edit, Bash
---
# テスト作成ガイドライン
- テストフレームワーク: Vitest
- ファイル命名: *.test.ts
- カバレッジ目標: 80%以上
## Gotchas
- モック化する際は vi.mock() を使用
- 非同期テストは必ず await を付ける自動呼び出しの優先順位と制御
Claudeが自動的に拡張機構を呼び出す場合、以下の優先順位で判断します。
優先順位
- 1. Skill(最優先): インラインで実行され、コンテキストのオーバーヘッドが最小。 Claudeはまずマッチするスキルがないかを確認します
- 2. Agent: 分離コンテキストで自律実行。 Skillでは対応できない複雑なタスクの場合に呼び出されます
- 3. Command(自動呼び出しなし): Claudeが自動で呼び出すことはありません。 常にユーザーの明示起動が必要です
自動呼び出しの制御方法
意図しない自動呼び出しを防ぐための制御手段があります。
- Skillの自動呼び出しを防止:
disable-model-invocation: trueを フロントマターに設定すると、Claudeがそのスキルを自動的に呼び出さなくなります。 ユーザーの明示呼び出しのみに制限されます - Agentの自動呼び出しを抑制:
descriptionの文言を弱めるか削除します。PROACTIVELYのような積極的な表現を避け、具体的なトリガー条件を曖昧にすることで、 Claudeが自動的に呼び出す頻度を下げられます
# Skillの自動呼び出しを防止する例
---
name: dangerous-migration
description: データベースマイグレーションを実行
disable-model-invocation: true
---
# 注意: このスキルは必ずユーザーの明示的な
# 指示のもとで実行してください判断フローチャート
最後に、どの拡張機構を選ぶべきかの判断フローを示します。 迷ったときはこのフローに沿って考えてみてください。
ステップ1: 自動で呼ばれてほしいか?
Claudeが会話の流れから自動的に判断して呼び出してほしいなら → Skillを選びます。descriptionにトリガー条件を明確に書き、Claudeが適切なタイミングで適用できるようにします。
ステップ2: 分離コンテキストが必要か?
メインの会話とは別のコンテキストで、自律的に複数ステップの処理を行わせたいなら → Agentを選びます。 永続メモリやバックグラウンド実行が必要な場合もAgentが適切です。
ステップ3: ユーザーが明示的に起動するか?
自分のタイミングで起動し、結果をメインの会話で確認したいなら → Commandを選びます。/メニューに表示されるため、チームでの共有にも適しています。
判断のまとめ:自動呼び出しが必要 → Skill / コンテキスト分離・自律実行が必要 → Agent / ユーザー起動のエントリーポイント → Command。 迷った場合はまずCommandとして作り、自動化したくなったらSkillに昇格させるのが実践的なアプローチです。
まとめ
Agent・Command・Skillの3つの拡張機構は、それぞれ異なる役割を持っています。 Agentは自律的なマルチステップ処理、Commandはユーザー起動のエントリーポイント、 Skillは再利用可能な手順と自動呼び出しの仕組みです。 自動呼び出しの優先順位を理解し、disable-model-invocationやdescriptionの調整で 呼び出し制御を適切に行うことで、安全かつ効率的なワークフローを設計できます。