agent-sdk/slash-commands.md +0 −594 deleted
File Deleted View Diff
1> ## Documentation Index
2> Fetch the complete documentation index at: https://code.claude.com/docs/llms.txt
3> Use this file to discover all available pages before exploring further.
4
5# SDK のスラッシュコマンド
6
7> SDK を通じて Claude Code セッションを制御するスラッシュコマンドの使用方法を学びます
8
9スラッシュコマンドは、`/` で始まる特別なコマンドを使用して Claude Code セッションを制御する方法を提供します。これらのコマンドは SDK を通じて送信でき、コンテキストのコンパクト化、コンテキスト使用状況の一覧表示、またはカスタムコマンドの呼び出しなどのアクションを実行できます。インタラクティブなターミナルなしで機能するコマンドのみが SDK を通じてディスパッチ可能です。`system/init` メッセージにはセッションで利用可能なコマンドが一覧表示されます。
10
11<h2 id="discovering-available-slash-commands">
12 利用可能なスラッシュコマンドの検出
13</h2>
14
15Claude Agent SDK は、システム初期化メッセージで利用可能なスラッシュコマンドに関する情報を提供します。セッション開始時にこの情報にアクセスします。
16
17<CodeGroup>
18 ```typescript TypeScript theme={null}
19 import { query } from "@anthropic-ai/claude-agent-sdk";
20
21 for await (const message of query({
22 prompt: "Hello Claude",
23 options: { maxTurns: 1 }
24 })) {
25 if (message.type === "system" && message.subtype === "init") {
26 console.log("Available slash commands:", message.slash_commands);
27 // Includes built-in commands plus bundled skills, for example:
28 // ["clear", "compact", "context", "usage", "code-review", "verify", ...]
29 }
30 }
31 ```
32
33 ```python Python theme={null}
34 import asyncio
35 from claude_agent_sdk import query, ClaudeAgentOptions, SystemMessage
36
37
38 async def main():
39 async for message in query(prompt="Hello Claude", options=ClaudeAgentOptions(max_turns=1)):
40 if isinstance(message, SystemMessage) and message.subtype == "init":
41 print("Available slash commands:", message.data["slash_commands"])
42 # Includes built-in commands plus bundled skills, for example:
43 # ["clear", "compact", "context", "usage", "code-review", "verify", ...]
44
45
46 asyncio.run(main())
47 ```
48</CodeGroup>
49
50<h2 id="sending-slash-commands">
51 スラッシュコマンドの送信
52</h2>
53
54スラッシュコマンドをプロンプト文字列に含めて送信します。通常のテキストと同じように使用します。会話履歴に作用するコマンド(`/compact` など)は、動作するために事前のメッセージが必要です。そのため、以下の例では最初に質問を送信してから、同じ会話へのフォローアップとしてコマンドを送信しています。
55
56<CodeGroup>
57 ```typescript TypeScript theme={null}
58 import { query } from "@anthropic-ai/claude-agent-sdk";
59
60 // Build up conversation history first
61 try {
62 for await (const message of query({
63 prompt: "What does the README in this directory cover?",
64 options: { maxTurns: 2 }
65 })) {
66 if (message.type === "result" && message.subtype === "success") {
67 console.log(message.result);
68 }
69 }
70 } catch (error) {
71 // A single-shot query() throws after yielding an error result,
72 // so the follow-up query below still runs.
73 console.error(`Session ended with an error: ${error}`);
74 }
75
76 // Send a slash command as a follow-up to the same conversation
77 for await (const message of query({
78 prompt: "/compact",
79 options: { continue: true, maxTurns: 1 }
80 })) {
81 if (message.type === "result") {
82 console.log("Command executed, result subtype:", message.subtype);
83 // Example output: Command executed, result subtype: success
84 }
85 }
86 ```
87
88 ```python Python theme={null}
89 import asyncio
90 from claude_agent_sdk import query, ClaudeAgentOptions, ResultMessage
91
92
93 async def main():
94 # Build up conversation history first
95 try:
96 async for message in query(
97 prompt="What does the README in this directory cover?",
98 options=ClaudeAgentOptions(max_turns=2),
99 ):
100 if isinstance(message, ResultMessage) and message.subtype == "success":
101 print(message.result)
102 except Exception as error:
103 # A single-shot query() raises after yielding an error result,
104 # so the follow-up query below still runs.
105 print(f"Session ended with an error: {error}")
106
107 # Send a slash command as a follow-up to the same conversation
108 async for message in query(
109 prompt="/compact",
110 options=ClaudeAgentOptions(continue_conversation=True, max_turns=1),
111 ):
112 if isinstance(message, ResultMessage):
113 print("Command executed, result subtype:", message.subtype)
114 # Example output: Command executed, result subtype: success
115
116
117 asyncio.run(main())
118 ```
119</CodeGroup>
120
121<Note>
122 クエリはエラー結果で終了する場合があります。例えば、`maxTurns` / `max_turns` の制限に達してから作業が完了する前に終了する場合です。最終的な結果メッセージは `is_error: true` を持ち、`success` の代わりに `error_max_turns` などのエラーサブタイプを持ちます。
123
124 その最終的な結果メッセージを生成した後、SDK はエラーを発生させます。これは CLI プロセスがゼロ以外のコードで終了するためです。
125
126 コマンドが制限に達する可能性がある場合は、[Single Message Input](/ja/agent-sdk/streaming-vs-single-mode#single-message-input) に示されているように、TypeScript では `try`/`catch` でループをラップするか、Python では `try`/`except` でラップしてください。または、作業が完了するのに十分な高さに `maxTurns` を設定してください。Python では、`Exception` をキャッチしてください。SDK はエラー結果をプレーンな `Exception` として表示します。
127</Note>
128
129<h2 id="common-slash-commands">
130 一般的なスラッシュコマンド
131</h2>
132
133<h3 id="/compact-compact-conversation-history">
134 `/compact` - 会話履歴のコンパクト化
135</h3>
136
137`/compact` コマンドは、古いメッセージを要約しながら重要なコンテキストを保持することで、会話履歴のサイズを削減します。コンパクト化には、要約するための少なくとも 2 つの以前のやり取りがある既存の会話が必要です。この例では、まず会話を行い、その後コンパクト化して、結果を報告する `compact_boundary` システムメッセージを読み取ります。
138
139<CodeGroup>
140 ```typescript TypeScript theme={null}
141 import { query } from "@anthropic-ai/claude-agent-sdk";
142
143 // Compaction needs existing history, so have a conversation first
144 try {
145 for await (const message of query({
146 prompt: "Explain what this project does",
147 options: { maxTurns: 2 }
148 })) {
149 if (message.type === "result" && message.subtype === "success") {
150 console.log(message.result);
151 }
152 }
153 } catch (error) {
154 // A single-shot query() throws after yielding an error result,
155 // so the follow-up query below still runs.
156 console.error(`Session ended with an error: ${error}`);
157 }
158
159 // Compact the same conversation
160 for await (const message of query({
161 prompt: "/compact",
162 options: { continue: true, maxTurns: 1 }
163 })) {
164 if (message.type === "system" && message.subtype === "compact_boundary") {
165 console.log("Compaction completed");
166 console.log("Pre-compaction tokens:", message.compact_metadata.pre_tokens);
167 console.log("Trigger:", message.compact_metadata.trigger);
168 // Example output:
169 // Compaction completed
170 // Pre-compaction tokens: 1842
171 // Trigger: manual
172 }
173 }
174 ```
175
176 ```python Python theme={null}
177 import asyncio
178 from claude_agent_sdk import query, ClaudeAgentOptions, ResultMessage, SystemMessage
179
180
181 async def main():
182 # Compaction needs existing history, so have a conversation first
183 try:
184 async for message in query(
185 prompt="Explain what this project does",
186 options=ClaudeAgentOptions(max_turns=2),
187 ):
188 if isinstance(message, ResultMessage) and message.subtype == "success":
189 print(message.result)
190 except Exception as error:
191 # A single-shot query() raises after yielding an error result,
192 # so the follow-up query below still runs.
193 print(f"Session ended with an error: {error}")
194
195 # Compact the same conversation
196 async for message in query(
197 prompt="/compact",
198 options=ClaudeAgentOptions(continue_conversation=True, max_turns=1),
199 ):
200 if isinstance(message, SystemMessage) and message.subtype == "compact_boundary":
201 print("Compaction completed")
202 print("Pre-compaction tokens:", message.data["compact_metadata"]["pre_tokens"])
203 print("Trigger:", message.data["compact_metadata"]["trigger"])
204 # Example output:
205 # Compaction completed
206 # Pre-compaction tokens: 1842
207 # Trigger: manual
208
209
210 asyncio.run(main())
211 ```
212</CodeGroup>
213
214<Note>
215 `compact_boundary` メッセージは、コンパクト化が実行された場合にのみ到着します。要約するものがない場合、`/compact` は例外を発生させる代わりに理由を報告します。実行は `success` 結果で終了し、`compact_boundary` メッセージは発行されず、結果テキストにメッセージが含まれます。例えば、単一の短いやり取りの後に `Not enough messages to compact.` のようなメッセージが表示されます。新しいワンショット `query()` 呼び出しは空のコンテキストで開始されるため、このパターンは以前のターンがあるセッションで使用してください。例えば、[ストリーミング入力モード](/ja/agent-sdk/streaming-vs-single-mode)またはセッションを再開する場合です。
216</Note>
217
218<h3 id="/clear-reset-conversation-context">
219 `/clear` - 会話コンテキストのリセット
220</h3>
221
222`/clear` コマンドは、会話を空のコンテキストにリセットするため、その後のプロンプトは以前の会話履歴なしで開始されます。前の会話はディスクに保存され、セッション ID を [`resume` オプション](/ja/agent-sdk/sessions#resume-by-id) に渡すことで復帰できます。
223
224これは[ストリーミング入力モード](/ja/agent-sdk/streaming-vs-single-mode)で便利です。ここでは、単一の接続を介して複数のプロンプトを送信します。ワンショット `query()` 呼び出しの場合、各呼び出しは既に空のコンテキストで開始されるため、`/clear` を送信しても実際の効果はありません。代わりに新しい `query()` を開始してください。
225
226<Note>
227 SDK の `/clear` には Claude Code v2.1.117 以降が必要です。以前のバージョンでは `slash_commands` から省略されています。
228</Note>
229
230<h2 id="creating-custom-slash-commands">
231 カスタムスラッシュコマンドの作成
232</h2>
233
234組み込みスラッシュコマンドを使用するだけでなく、SDK を通じて利用可能な独自のカスタムコマンドを作成できます。カスタムコマンドは、サブエージェントの設定方法と同様に、特定のディレクトリ内のマークダウンファイルとして定義されます。
235
236<Note>
237 `.claude/commands/` ディレクトリはレガシー形式です。推奨される形式は `.claude/skills/<name>/SKILL.md` で、同じスラッシュコマンド呼び出し(`/name`)とともに Claude による自律的な呼び出しをサポートします。現在の形式については [Skills](/ja/agent-sdk/skills) を参照してください。CLI は両方の形式をサポートし続けており、以下の例は `.claude/commands/` に対して正確なままです。
238</Note>
239
240<h3 id="file-locations">
241 ファイルの場所
242</h3>
243
244カスタムスラッシュコマンドは、スコープに基づいて指定されたディレクトリに保存されます。
245
246* **プロジェクトコマンド**: `.claude/commands/` - 現在のプロジェクトでのみ利用可能(レガシー;`.claude/skills/` を推奨)
247* **個人用コマンド**: `~/.claude/commands/` - すべてのプロジェクト全体で利用可能(レガシー;`~/.claude/skills/` を推奨)
248
249<h3 id="file-format">
250 ファイル形式
251</h3>
252
253各カスタムコマンドはマークダウンファイルで、以下の特性があります。
254
255* ファイル名(`.md` 拡張子なし)がコマンド名になります
256* ファイルコンテンツはコマンドが何をするかを定義します
257* オプションの YAML frontmatter は設定を提供します
258
259<h4 id="basic-example">
260 基本的な例
261</h4>
262
263プロジェクトに `.claude/commands` ディレクトリが存在しない場合は作成し、その後 `.claude/commands/refactor.md` を作成します。
264
265```markdown theme={null}
266Refactor the selected code to improve readability and maintainability.
267Focus on clean code principles and best practices.
268```
269
270これにより、SDK を通じて使用できる `/refactor` コマンドが作成されます。
271
272<h4 id="with-frontmatter">
273 Frontmatter 付き
274</h4>
275
276`.claude/commands/security-check.md` を作成します。
277
278```markdown theme={null}
279allowed-tools: Read, Grep, Glob
280description: Run security vulnerability scan
281model: claude-opus-4-8
282
283Analyze the codebase for security vulnerabilities including:
284- SQL injection risks
285- XSS vulnerabilities
286- Exposed credentials
287- Insecure configurations
288```
289
290<h3 id="using-custom-commands-in-the-sdk">
291 SDK でカスタムコマンドを使用する
292</h3>
293
294ファイルシステムで定義されたカスタムコマンドは、SDK を通じて自動的に利用可能になります。
295
296<CodeGroup>
297 ```typescript TypeScript theme={null}
298 import { query } from "@anthropic-ai/claude-agent-sdk";
299
300 // Use a custom command
301 try {
302 for await (const message of query({
303 prompt: "/refactor src/auth/login.ts",
304 options: { maxTurns: 3 }
305 })) {
306 if (message.type === "assistant") {
307 console.log("Refactoring suggestions:", message.message);
308 }
309 }
310 } catch (error) {
311 // A single-shot query() throws after yielding an error result,
312 // so the second query below still runs.
313 console.error(`Session ended with an error: ${error}`);
314 }
315
316 // Custom commands appear in the slash_commands list
317 for await (const message of query({
318 prompt: "Hello",
319 options: { maxTurns: 1 }
320 })) {
321 if (message.type === "system" && message.subtype === "init") {
322 console.log("Available commands:", message.slash_commands);
323 // Includes built-in commands plus bundled skills and your custom commands, for example:
324 // ["clear", "compact", "context", "usage", "code-review", "verify", "refactor", "security-check", ...]
325 }
326 }
327 ```
328
329 ```python Python theme={null}
330 import asyncio
331 from claude_agent_sdk import query, ClaudeAgentOptions, AssistantMessage, SystemMessage
332
333
334 async def main():
335 # Use a custom command
336 try:
337 async for message in query(
338 prompt="/refactor src/auth/login.py", options=ClaudeAgentOptions(max_turns=3)
339 ):
340 if isinstance(message, AssistantMessage):
341 for block in message.content:
342 if hasattr(block, "text"):
343 print("Refactoring suggestions:", block.text)
344 except Exception as error:
345 # A single-shot query() raises after yielding an error result,
346 # so the second query below still runs.
347 print(f"Session ended with an error: {error}")
348
349 # Custom commands appear in the slash_commands list
350 async for message in query(prompt="Hello", options=ClaudeAgentOptions(max_turns=1)):
351 if isinstance(message, SystemMessage) and message.subtype == "init":
352 print("Available commands:", message.data["slash_commands"])
353 # Includes built-in commands plus bundled skills and your custom commands, for example:
354 # ["clear", "compact", "context", "usage", "code-review", "verify", "refactor", "security-check", ...]
355
356
357 asyncio.run(main())
358 ```
359</CodeGroup>
360
361<h3 id="advanced-features">
362 高度な機能
363</h3>
364
365<h4 id="arguments-and-placeholders">
366 引数とプレースホルダー
367</h4>
368
369カスタムコマンドはプレースホルダーを使用した動的引数をサポートします。
370
371`.claude/commands/fix-issue.md` を作成します。
372
373```markdown theme={null}
374argument-hint: [issue-number] [priority]
375description: Fix a GitHub issue
376
377Fix issue #$0 with priority $1.
378Check the issue description and implement the necessary changes.
379```
380
381SDK で使用します。
382
383<CodeGroup>
384 ```typescript TypeScript theme={null}
385 import { query } from "@anthropic-ai/claude-agent-sdk";
386
387 // Pass arguments to custom command
388 for await (const message of query({
389 prompt: "/fix-issue 123 high",
390 options: { maxTurns: 5 }
391 })) {
392 // Command will process with $0="123" and $1="high"
393 if (message.type === "result" && message.subtype === "success") {
394 console.log("Issue fixed:", message.result);
395 }
396 }
397 ```
398
399 ```python Python theme={null}
400 import asyncio
401 from claude_agent_sdk import query, ClaudeAgentOptions, ResultMessage
402
403
404 async def main():
405 # Pass arguments to custom command
406 async for message in query(prompt="/fix-issue 123 high", options=ClaudeAgentOptions(max_turns=5)):
407 # Command will process with $0="123" and $1="high"
408 if isinstance(message, ResultMessage):
409 print("Issue fixed:", message.result)
410
411
412 asyncio.run(main())
413 ```
414</CodeGroup>
415
416<h4 id="bash-command-execution">
417 Bash コマンド実行
418</h4>
419
420カスタムコマンドは bash コマンドを実行し、その出力を含めることができます。
421
422`.claude/commands/git-commit.md` を作成します。
423
424```markdown theme={null}
425allowed-tools: Bash(git add *), Bash(git status *), Bash(git commit *)
426description: Create a git commit
427
428## Context
429
430- Current status: !`git status`
431- Current diff: !`git diff HEAD`
432
433## Task
434
435Create a git commit with appropriate message based on the changes.
436```
437
438<h4 id="file-references">
439 ファイル参照
440</h4>
441
442`@` プレフィックスを使用してファイルコンテンツを含めます。
443
444`.claude/commands/review-config.md` を作成します。
445
446```markdown theme={null}
447description: Review configuration files
448
449Review the following configuration files for issues:
450- Package config: @package.json
451- TypeScript config: @tsconfig.json
452- Environment config: @.env
453
454Check for security issues, outdated dependencies, and misconfigurations.
455```
456
457<h3 id="organization-with-namespacing">
458 名前空間を使用した組織化
459</h3>
460
461より良い構造のためにサブディレクトリ内でコマンドを整理します。
462
463```bash theme={null}
464.claude/commands/
465├── frontend/
466│ ├── component.md # Creates /component (project:frontend)
467│ └── style-check.md # Creates /style-check (project:frontend)
468├── backend/
469│ ├── api-test.md # Creates /api-test (project:backend)
470│ └── db-migrate.md # Creates /db-migrate (project:backend)
471└── review.md # Creates /review (project)
472```
473
474サブディレクトリはコマンドの説明に表示されますが、コマンド名自体には影響しません。
475
476<h3 id="practical-examples">
477 実践的な例
478</h3>
479
480<h4 id="pull-request-review-command">
481 プルリクエストレビューコマンド
482</h4>
483
484`.claude/commands/review-pr.md` を作成します。
485
486```markdown theme={null}
487allowed-tools: Read, Grep, Glob, Bash(git diff *)
488description: Comprehensive code review
489
490## Changed Files
491!`git diff --name-only HEAD~1`
492
493## Detailed Changes
494!`git diff HEAD~1`
495
496## Review Checklist
497
498Review the above changes for:
4991. Code quality and readability
5002. Security vulnerabilities
5013. Performance implications
5024. Test coverage
5035. Documentation completeness
504
505Provide specific, actionable feedback organized by priority.
506```
507
508<Note>
509 Claude Code には、バンドルされた `code-review` と `verify` スキルが含まれています。カスタムコマンドをそれらの 1 つの後に名前を付けた場合(例えば `.claude/commands/code-review.md`)、カスタムコマンドはバンドルされたスキルをシャドウし、`slash_commands` はその名前を 1 回だけリストします。
510</Note>
511
512<h4 id="test-runner-command">
513 テストランナーコマンド
514</h4>
515
516`.claude/commands/test.md` を作成します。
517
518```markdown theme={null}
519allowed-tools: Bash, Read, Edit
520argument-hint: [test-pattern]
521description: Run tests with optional pattern
522
523Run tests matching pattern: $ARGUMENTS
524
5251. Detect the test framework (Jest, pytest, etc.)
5262. Run tests with the provided pattern
5273. If tests fail, analyze and fix them
5284. Re-run to verify fixes
529```
530
531SDK を通じてこれらのコマンドを使用します。
532
533<CodeGroup>
534 ```typescript TypeScript theme={null}
535 import { query } from "@anthropic-ai/claude-agent-sdk";
536
537 // Run code review
538 try {
539 for await (const message of query({
540 prompt: "/review-pr",
541 options: { maxTurns: 3 }
542 })) {
543 // Process review feedback
544 }
545 } catch (error) {
546 // A single-shot query() throws after yielding an error result,
547 // so the second query below still runs.
548 console.error(`Session ended with an error: ${error}`);
549 }
550
551 // Run specific tests
552 for await (const message of query({
553 prompt: "/test auth",
554 options: { maxTurns: 5 }
555 })) {
556 // Handle test results
557 }
558 ```
559
560 ```python Python theme={null}
561 import asyncio
562 from claude_agent_sdk import query, ClaudeAgentOptions
563
564
565 async def main():
566 # Run code review
567 try:
568 async for message in query(prompt="/review-pr", options=ClaudeAgentOptions(max_turns=3)):
569 # Process review feedback
570 pass
571 except Exception as error:
572 # A single-shot query() raises after yielding an error result,
573 # so the second query below still runs.
574 print(f"Session ended with an error: {error}")
575
576 # Run specific tests
577 async for message in query(prompt="/test auth", options=ClaudeAgentOptions(max_turns=5)):
578 # Handle test results
579 pass
580
581
582 asyncio.run(main())
583 ```
584</CodeGroup>
585
586<h2 id="see-also">
587 関連項目
588</h2>
589
590* [Slash Commands](/ja/skills) - スラッシュコマンドの完全なドキュメント
591* [SDK のサブエージェント](/ja/agent-sdk/subagents) - サブエージェント用の同様のファイルシステムベースの設定
592* [TypeScript SDK リファレンス](/ja/agent-sdk/typescript) - 完全な API ドキュメント
593* [SDK の概要](/ja/agent-sdk/overview) - 一般的な SDK の概念
594* [CLI リファレンス](/ja/cli-reference) - コマンドラインインターフェース