$ は凍結されたオブジェクトで、どのフックにも同じものが渡されます。$.plugin.name(plugin.json の名前)と $.plugin.root(plugin.json があるディレクトリの絶対パス)も参照できます。プラグインは engine.create で独自の名前空間を追加することもできます(後述)。
$.ui — 表示
| メソッド | 説明 |
|---|---|
toast(text, { timeoutMs? }) | 画面右上に小さな通知を数秒間表示する(既定は 4000 ms)。transcript にもモデルにも残らない。holdToasts を指定した Pane の表示中は、表示が保留される。 |
status(text | undefined) | 入力欄の下に、このプラグインのステータス行を1行表示し続ける。undefined を渡すと消える。 |
log(text, { to? }) | transcript に薄い色の行を1行追加する(モデルには送信されない)。{ to: "debug" } を指定するとデバッグログだけに出力する。 |
notice(tool_use_id, text) | 表示中の許可ダイアログの下に1行を追加する。許可ダイアログ自体は Claude Code 本体しか描画できない。 |
ask(question, options) | Claude Code 本体の AskUserQuestion ダイアログで質問し、選ばれたラベル(または「Other」に入力されたテキスト)を返す。ダイアログが閉じられた場合は reject される。-p では使えない。 |
open({ id, title?, focus?, | Pane を開き、{ isPlaced, reason? } を返す。ユーザーの操作をきっかけに開いた場合は端末の幅にかかわらず配置される。ユーザーの操作なしに開いた場合は、端末の幅が 144 桁以上(一度開いたことがある Pane は 110 桁以上)のときだけ配置される。 |
close({ id }) | Pane を閉じる。ui.close イベントが発生し、origin は plugin / person / unload のいずれかになる。 |
panes() | このプラグインが開いている Pane の一覧(id、タイトル、表示中か、キーボード入力を受け付けているか、配置済みか)を返す。リロード後も取得できる。 |
invalidate(event) | キャッシュされた結果を破棄し、イベントを再実行させる。ui.render を指定すると再描画される(毎秒10回まで。ターミナルで表示中の Pane などは毎秒30回まで)。ほかに prompt.section prompt.context prompt.attachment tool.describe command.describe config.describe を指定できる。 |
resolve(e) | 表示環境の要素表(Box、Text など)を返す。分割代入して JSX のタグとして使う。 |
blit({ requestId, key, | 描画済みの Raster のセルや Image の画像を、再描画せずに差し替える(毎秒120回まで受け付ける)。 |
scroll({ to, in?, block? }) | 指定した要素が見える位置までスクロールする。DOM の scrollIntoView に相当する。 |
focus({ requestId, key }) | 自分の描画箇所の中で、指定した要素にフォーカスを移す。 |
copy({ text, surface? }) | テキストをクリップボードにコピーし、{ isCopied } を返す。ターミナルでは /copy と同じ方法でコピーする。 |
selection() | フルスクリーン表示のターミナルでマウスで選択したテキストと、それを含む transcript の行の id を返す。選択がなければ undefined を返す。 |
$.model — モデル呼び出し
| メソッド | 説明 |
|---|---|
complete(request, { signal? }) | セッションの API クライアントと認証情報を使い、会話履歴とツールなしで補完を1回実行する。request には model(haiku などのエイリアスも可)、prompt、system?、maxTokens?、effort?、timeoutMs? を指定する。結果は必ず { isAnswered: true, text, usage } か { isAnswered: false, reason }(reason は api-error / empty-reply / aborted)のいずれかで返る。reject されるのは、Claude Code 本体がリクエストの送信を拒否した場合だけである。 |
fork({ prompt }) | メインスレッドが最後に送信したリクエスト(モデル、システムプロンプト、会話履歴)に質問を1つ追加して送信する。共通部分がプロンプトキャッシュから読まれるため、コストを抑えられる。ツールはすべて拒否される。reason には nothing-to-fork も加わる。 |
classify(text, labels, | テキストを、指定したラベルのいずれかに分類させる。どのラベルにも当てはまらない場合は undefined を返す。既定では小型で高速なモデルを使う。 |
prompt と system には、文字列か { text, cache? } ブロックの配列を指定します。cache: true を付けたブロックまでがプロンプトキャッシュの対象になります。usage には API と同じ4種類のトークン数(cache_creation_input_tokens と cache_read_input_tokens を含む)が入ります。
$.session / $.turn — セッションとターン
| メソッド | 説明 |
|---|---|
session.messages( | これまでの会話を返す。既定では { role, text, toolUses } 形式の行を最新 4096 件まで返す。{ as: "api" } を指定すると Messages API の形式で、{ agentId } を指定するとサブエージェントの会話を返す。 |
id() cwd() root()model() turns() | それぞれ、セッション id(transcript のファイル名)、作業ディレクトリ、プロジェクトのルート、メインスレッドのモデル、ユーザーが送信したプロンプトの数を返す。 |
repo() | git リポジトリの情報を返す。リポジトリの外では null を返す。 |
surfaces() | このセッションの表示環境の一覧を返す(terminal が先頭で、リモートの表示環境が続く)。surface() は非推奨。 |
usage({ breakdown?, columns? }) | 開始時刻、コンテキストの使用率、レート制限、コストを返す。breakdown: "full" を指定すると、/context と同等の内訳も返す。 |
version() | { version, base, builtAt } を返す。 |
compact({ instructions? }) | /compact と同じ方法で会話を圧縮する。ターンの実行中は reject される。フックが中止した場合は { skip } を返す。 |
send({ to, text }) | 他のエージェントやセッションにテキストメッセージを送る。to には名前、{ sessionId }、{ agentId } のいずれかを指定する。 |
append({ message, agentId? }) | 会話に行を追加する。type: "user"(ユーザーには表示されず、モデルが読む)か type: "system"(通知として表示され、モデルは読まない)を指定する。現在はテキストブロックだけを追加できる。 |
authorize() | Anthropic の認証情報をホスト側に保持したまま、その認証情報を参照するハンドルを返す。ハンドルは $.http.fetch(url, { auth }) に渡して使う(Anthropic 自身のホストに対してのみ有効)。 |
turn.abort({ turnId }) | 実行中のターンを、中断の表示を出さずに停止する。turnId には turn.start で受け取った id を指定する。 |
$.prompt — プロンプトと入力欄
| メソッド | 説明 |
|---|---|
submit({ text }) | プロンプトを送信する。セッションが待機状態になってから、独立したターンとして実行される(実行中のターンには加わらない)。ターンが始まった時点で結果を返す。 |
read() | 入力欄の現在の下書きとカーソル位置 { text, cursor } を返す。 |
fill({ text, mode? }) | 入力欄に下書きを入れる(mode は replace(既定)/ append / insert)。ダイアログの表示中やヘッドレス実行では isFilled: false を返す。 |
suggest({ text }) | 入力欄に薄い色の候補を表示する(Tab で確定)。 |
compose(facts?) | システムプロンプトのセクション一覧を組み立てて返す。リクエストは送信しない。 |
$.tool / $.command — ツールとスラッシュコマンド
| メソッド | 説明 |
|---|---|
tool.list() | モデルが現在使えるツールの一覧を返す(組み込みツールと MCP のツールの両方)。 |
tool.call({ tool, ...input }) | ツールを呼び出す。許可の確認とダイアログを経てから実行される。 |
tool.check({ tool, input }) | 許可の判定結果だけを取得する。ツールは実行されない。 |
tool.register({ name, | モデルが呼び出せるツールを登録する。ツール名は mcp__<plugin>__<name> になり、tool.call のフックで結果を返す。既定ではスキーマが ToolSearch 経由で読み込まれる。isDeferred: false を指定すると最初からプロンプトに含まれる。session.start より前に呼ぶと reject される。 |
command.list() | 現在使えるスラッシュコマンドの一覧を返す。 |
command.run({ command, args? }) | ユーザーが入力した場合と同じようにコマンドを実行する(セッションが待機状態になってから実行される)。 |
command.register({ name, | /<name> を登録する。command.run のフックで { text } を返して応答する。組み込みコマンドと同じ名前は登録できない。immediate を指定すると、ターンの実行中でもすぐに実行される。 |
on('session.start', async ($, e, next) => {
await $.tool.register({
name: 'weather', description: '天気を返す', isDeferred: false,
inputSchema: { type: 'object', properties: { city: { type: 'string' } } },
})
await $.command.register({ name: 'hello', description: '挨拶する' })
return next(e)
})
on('tool.call', { tool: 'mcp__my-mod__weather' }, async ($, e) => ({ result: '晴れ' }))
on('command.run', { command: 'hello' }, () => ({ text: 'こんにちは' }))
$.agent — サブエージェント
| メソッド | 説明 |
|---|---|
spawn({ prompt, subagentType?, | サブエージェントをバックグラウンドで起動し、{ model, agentId } か { deny } を返す。サブエージェントの回答は、その agentId の turn.complete で受け取る。 |
list() | このセッションのエージェント(サブエージェント、チームメイト)の一覧を返す。 |
register({ name, description, | エージェントの種類 <plugin>:<name> を定義する。エージェント定義ファイルのすべてのフィールドが使える。プラグインの agents/*.md でも定義できる。 |
$.config / $.settings / $.env — 設定と環境変数
| メソッド | 説明 |
|---|---|
config.list() | /config の全項目(値、種類、所有者、ロックの有無)を返す。各プラグインの userConfig も項目として含まれる。 |
config.set({ key, value }) | メニューから変更した場合と同じように、項目を1つ変更する。{ value } か { deny } を返す。 |
settings.read({ source? }) | すべての settings.json をマージした結果を返す(読み取り専用)。source を指定すると、その設定元の内容だけを返す。~/.claude.json と OAuth の情報は読めない。 |
env.get(name) /env.set(name, value) | このプロセスの環境変数を読み書きする。変更は、その後に起動する Bash、MCP サーバー、$.process.run に引き継がれる。変数名は文字列リテラルで書く必要がある(validate が変数名を一覧にし、ソースに書かれていない名前は拒否される)。 |
$.fs / $.http / $.process — ファイル・ネットワーク・プロセス
| メソッド | 説明 |
|---|---|
fs.read(path, { as? }) | ファイルをテキストとして読む。{ as: "bytes" } を指定すると { base64 } を返す。4 MiB を超えるファイルは reject される。プラグインに同梱したファイルは $.plugin.root の下にある。 |
fs.write(path, text) | ファイル全体を書き込む。必要なディレクトリも作成する。 |
fs.list(path?) | ディレクトリの内容を { name, kind, size, mtimeMs, isLink } の配列で返す。 |
fs.exists(path) | パスが存在するかどうかを返す。 |
fs.stat(path, { resolve? }) | { kind, size, mtimeMs, isLink } を返す。resolve: true を指定すると realPath も返す。パスを制限するガードは、realPath に対する許可リストで書くと確実である。 |
fs.ancestors({ names, of?, | CLAUDE.md と同じ方法で、上位のディレクトリから指定した名前のファイル(AGENTS.md など)を集める。 |
http.fetch(url, { method?, | ホストを経由して HTTP(S) リクエストを送り、{ status, ok, headers, text } を返す。組織の web-fetch ポリシーが適用される。socketPath を指定すると Unix ソケット経由で通信する。 |
process.run(argv, { cwd?, | シェルを介さずにコマンドを実行し、終了後に { exitCode, stdout, stderr } を返す。タイムアウトは既定で 30 秒、最大 10 分。CLI でのみ使える。 |
process.spawn({ argv, cwd?, | コマンドを起動し、出力をチャンクごとにストリームで返す。for await のループが続く間だけ子プロセスが生存し、ループを抜けると子プロセスは終了させられる。 |
$.store / $.state / $.clock — 保存と時刻
| メソッド | 説明 |
|---|---|
store.get / set / delete / keys | プラグイン専用のキーバリューストア。値はセッションやリロードの後も保持される。値は JSON で、合計 4 MiB まで保存できる。 |
state.get(ref) | { value, version } を返す。描画中に読み取ると、その描画箇所が値の変更を購読する。 |
state.set(ref, value, | 値を書き込み、{ isSet, version } を返す。書き込めるのは自分のプラグインの値だけで、描画中の書き込みは拒否される。 |
clock.now() | エポックからのミリ秒を返す。 |
clock.sleep(ms, { signal? }) | 指定した時間だけ待機する。$ の呼び出しの中で唯一、待ち時間がフックの制限時間から差し引かれる。next.signal を渡しておくこと。 |
clock.after(ms, fn) /clock.every(ms, fn) | タイマーを設定する。cancel() で停止でき、リロード時には破棄される。dispatch の終了後も続ける処理は、session.start からこのタイマーで実行する。 |
その他の名前空間
| メソッド | 説明 |
|---|---|
audio.play(clip, { shouldLoop?, | 音声を再生する。clip には { asset: "sounds/done.wav" }(同梱ファイル)、URL、base64 データを指定する。macOS では afplay で再生される。複数の再生は順番待ちせず、同時に再生される。 |
audio.speak(text, { voice? }) | OS の音声合成で読み上げる(macOS では say)。複数の読み上げは順番に実行される。 |
mcp.call(server, tool, args?) | 接続済みの MCP サーバーのツールを、Claude Code 本体の接続と認証情報を使って呼び出す。許可の確認は表示されない。 |
mcp.connect(server) | このプラグインの manifest に記載された MCP サーバーに接続する。 |
telemetry.log / mark | 分析用のデータを記録する。Anthropic 向けの記録は、組み込みプラグインと Claude Code 本体だけが送信できる。 |
独自の名前空間の追加: engine.create のフックで const built = await next(e); return { ...built, topo: { … } } のように返します。型は types/index.d.ts に declare module 'claude-code' { interface EngineInterface { topo: Topo } } と書き、plugin.json の "types" で指定します。この名前空間を使うプラグインは、自分の plugin.json の dependencies に提供元のプラグインを書くと、型定義が自動で配置されます。
絞り込みの条件に一致する行がありません。