本文へスキップ

スラッシュコマンド、スキル & MCP

組み込みスラッシュコマンド、権限ゲート付き置換を備えたカスタムコマンド、段階的開示を行うスキル、そしてMCPサーバー統合。

stepperの機能は3つのメカニズムで拡張できます。インプロセスで実行される組み込みおよびカスタムのスラッシュコマンド、コンテキストを軽量に保つためにオンデマンドでロードされるスキル、そしてサンドボックス化されたツールアクセスを提供するMCPサーバーです。すべてのカスタムコンテンツはfail-closedセマンティクスで権限ゲートされ、機密性の高い操作には明示的なallowルールが必要です。

組み込みスラッシュコマンド

以下のコマンドはインプロセスで処理され、エージェントターンを実行しません:

  • /help — 利用可能なすべてのコマンドを一覧表示
  • /clear — 会話/セッションをリセット
  • /model [provider/model-id] — アクティブなモデルを表示するか、新しいモデルに切り替える(すべてのレイヤーに適用する前に検証される)
  • /context — アクティブなモデルのコンテキストウィンドウを表示
  • /rename <name> — 現在のセッション名を変更(セッションファイルに永続化)
  • /export [path] — セッションの会話を Markdown トランスクリプトに保存(既定は .stepper/exports/<id>.md)
  • /rewind [code|conversation] — 以前のスナップショットを復元; ファイルツリー/会話に範囲を絞るか、引数なしで両方を復元

カスタムスラッシュコマンド

カスタムコマンドは .stepper/commands/<name>.md ファイルに配置します。各ファイルはYAML frontmatter(メタデータ)と、それに続く置換をサポートするテンプレート本文で構成されます。

ファイル形式と呼び出し

TUIでは / を入力するとパレットが開き、項目を選択し、↑↓で移動し、Tabで補完し、Enterで実行できます。/name args の形式で呼び出します。組み込みコマンドは同名のカスタムコマンドファイルより優先されます。

置換構文

コマンドテンプレートは以下の置換をサポートします:

  • !shell — インラインシェルコードブロック
  • $1, $2, … — コマンド呼び出しからの位置引数
  • {file:path} または @include path — 指定したパスのファイルを読み込む
  • {env:VAR} — 環境変数を展開

権限ゲーティング(fail-closed)

すべての置換はfail-closedセマンティクスで権限ゲートされます。これにより、仕込まれたコマンドファイルが検証されていないシェル、ファイル、シークレットへのアクセスをプロンプトに紛れ込ませることを防ぎます。
  • !shell ブロックは明示的な allow ルールが一致した場合にのみ実行されます(例: "allow": ["Bash(git diff)"])
  • {file:…} および @include の読み込みは Read ルールでゲートされます
  • シークレットパターン(*_API_KEY, *_TOKEN, AWS_*, …)に一致する環境変数は {env:…} で展開されることは決してありません
  • .stepper/ 配下への書き込みは accept-edits モードであっても常に明示的な承認が必要です — このディレクトリがエージェント自身のセキュリティを制御するためです

スキル

スキルはClaude-Code方式の段階的開示パターンに従います。システムプロンプトはスキルの名前と説明のみを提示し、モデルは必要に応じてその全文をロードします。これによりベースのコンテキストウィンドウを軽量に保ちます。

ファイル形式

スキルは .stepper/skills/<name>/SKILL.md に保存され、namedescription キーを含むYAML frontmatterと、それに続くスキル本文で構成されます。

スキルの宣言と使用

レイヤーは自身のfrontmatter skills: リストで、使用できるスキルを宣言します。モデルがスキルを必要とするとき、{"name":"<skill>"} を指定して skill ツールを呼び出し、全文をロードします。skillツールはレイヤーごとにスコープされ、そのレイヤーが宣言したスキルのみを提供します。スキルはファンアウトワーカーでも利用できます。

MCP(Model Context Protocol)サーバー

MCPサーバーはstepperのレイヤーにツールとリソースを提供します。setting.jsonmcpServers 配下でグローバルに構成され、stdioまたはHTTPサーバーとして実行できます。

構成

.stepper/setting.json でMCPサーバーを定義します:

jsonc
"mcpServers": {
  "context7": {
    "type": "stdio",
    "command": "npx",
    "args": ["-y", "@upstash/context7-mcp", "--api-key", "{env:CONTEXT7_KEY}"],
    "alwaysLoad": true                  // visible to every layer regardless of mcp.allow
  },
  "my-http": {
    "type": "http",
    "url": "https://example/mcp",
    "headers": { "Authorization": "Bearer {env:MY_TOKEN}" }
  }
}

ツールの名前空間とスコープ

  • MCPサーバーのツールは mcp__<server>__<tool> という形式で名前空間が付与されます
  • すべてのMCPツールの使用は権限ルールでゲートされます
  • レイヤーごとのスコープ: レイヤーは自身のレイヤー構成にある mcp.allow リストを通じて、使用できるMCPサーバーを宣言します
  • alwaysLoad: true — レイヤーごとのスコープをバイパスし、mcp.allow に関係なくすべてのレイヤーからサーバーを見えるようにします

HTTPサーバーヘッダー

HTTPサーバーは headers オブジェクトをサポートします。Authorization ヘッダーは特別にルーティングされ、その他のヘッダーはサーバーへのリクエストに含まれます。