# エージェントにワークスペースを安全に使わせる (/ja/docs/tutorials/agents-safely)

Echolotは、ワークスペース用のMCPサーバです。Claude CodeなどのAIエージェントは、リクエストの一覧、送信、レスポンスの読み取りができます。
確認なしで許可する操作、確認が必要な操作、決して許可しない操作は、あなたが決めます。シークレットの値がエージェントに届くことはありません。
このチュートリアルでは、Claude CodeをAlpenglowに接続し、その送信を承認したり拒否したりし、環境を保護し、最後にEcholot内蔵のアシスタントで同じことを行います。

- <strong>所要時間：</strong>20分。
- **必要なもの：**[Alpenglowワークスペース](/docs/tutorials#the-alpenglow-workspace)と、MCPクライアント。Claude Code（ターミナルの`claude`）、Claude Desktop、Cursor、VS Code、Codexのいずれかです。最後のパートには、モデルプロバイダのAPIキー、またはOllamaのローカルモデルが必要です。
- <strong>学べること：</strong>設定 › エージェント、承認、ワークスペースのエージェントルール、保護された環境、シークレットの代わりにエージェントに見えるもの。

## 1. エージェントをオンにする [#1-turn-agents-on]

1. **Echolot › 設定…**（<kbd>⌘</kbd><kbd>,</kbd>）を選んで、**エージェント**を開きます。
2. **アクセス**で、**開いているワークスペースの使用をエージェントに許可**をオンにします。
3. **エージェント用のツール**で、**リクエスト**と**フロー**はオンのままにします。**リクエスト**はエージェントによるリクエストの一覧、読み取り、作成、送信を許可し、**フロー**はエージェントに提供したフローを実行します。
   それ以外（**ワークスペース**、**環境**、**仕様**、**モック**、**MCPサーバ**、**履歴**、**フローの編集**）は、オンにするまでオフです。

何をオンにしても、提供されないツールがあります。ポリシー自体、プロキシ、証明書、認証設定、スクリプト、そして提供していないフローの開始です。

## 2. Claude Codeを接続する [#2-connect-claude-code]

1. Alpenglowのウインドウで、ページ上部の**エージェント**を選びます。
2. **クライアントを接続**で**Claude Code**を見つけて、**コマンドをコピー**を選びます。コマンドは次のようになります。

   ```sh
   claude mcp add --scope user echolot-alpenglow -- /Applications/Echolot.app/Contents/Helpers/echolot mcp serve /Users/you/Projects/Alpenglow.echolot
   ```

3. ターミナルにペーストして実行します。

ほかのクライアントにはそれぞれのボタンがあります。**Cursorに追加**と**VS Codeに追加**はインストール用リンクを開き、**config.tomlのエントリをコピー**はCodex用、**JSONをコピー**はその他のクライアント向けの`mcpServers`ブロックを渡します。Claude Desktopの**Claudeに追加**は拡張機能をインストールします。
どのクライアントも`echolot mcp serve`を実行し、その呼び出しは開いているウインドウに渡されます。そのため、あなたの承認とウインドウの環境が適用されます。

<Edition only="appstore">
  App Store版には、コマンドラインツールもClaude Desktop拡張機能も含まれていません。先に[コマンドラインツール](/docs/cli)を単体でインストールしてください。コピーするコマンドとスニペットは、それを指します。
</Edition>

<Shot id="tutorials-agents-connect" alt="Alpenglowのウインドウのエージェントのポップオーバー。Claude Desktop、Claude Code、Cursor、VS Code、Codex用のクライアントを接続するボタンが並んでいる" />

## 3. 読み取りと送信を許可する [#3-let-it-read-and-send]

1. ターミナルで`claude`を起動して、次のように頼みます。

   > Using echolot-alpenglow, list the requests in the Catalog folder, send List products, and tell me the most
   > expensive tent in stock.

2. エージェントはリクエストを一覧し、確認なしで**List products**を送信します。デフォルトでは、エージェントはワークスペースの読み取りと安全な送信（`GET`、GraphQLクエリ、MCPの読み取り）ができます。
3. Echolotでは、**エージェント**ボタンが**エージェント · 1**に変わります。ポップオーバーの**最近の呼び出し**にクライアントが一覧され、**許可済み**のスイッチで遮断できます。

エージェントの送信は、送信者とともに履歴に記録されます（<kbd>⌘</kbd><kbd>Y</kbd>）。

## 4. データを変更する送信を承認する [#4-approve-a-send-that-changes-data]

1. 次のように頼みます。

   > Place an order for one TNT-MH-2P with Create order.

2. Echolotがシートを表示します。**Claude Codeがデータを変更する可能性のあるリクエストを送信しようとしています**と、リクエストと送信内容のプレビューが表示されます。`Authorization`ヘッダーは`Bearer ••••••`と表示されます。
3. 次のいずれかを選びます。
   - **1回だけ許可**（<kbd>↩</kbd>）：この送信だけ。
   - **このセッションでは許可**：ウインドウを閉じるまで、これと同じ送信を許可。
   - **拒否**（<kbd>Esc</kbd>）：エージェントに拒否したことが伝えられます。
4. **1回だけ許可**を選びます。ショップは`201 Created`で応答し、エージェントが新しい注文を報告します。

<Shot id="tutorials-agents-approval" alt="承認シート：Claude Codeがデータを変更する可能性のあるリクエストを送信しようとしている。拒否、このセッションでは許可、1回だけ許可のボタンがある" />

## 5. シークレットを手の届かない場所に置く [#5-keep-secrets-out-of-reach]

エージェントに次のように尋ねます。

> What is the value of the token variable?

エージェントは答えられません。シークレット変数の値は、エージェントには決して届きません。リクエスト、レスポンス、エラーのどこに現れる場合でも、エージェントには`••••••`と見えます。書かれたままの値も、JSON、パーセントエンコード、Base64の形式の値も対象です。
レスポンスボディの検索でも、シークレットに一致する件数や位置が明らかになることはありません。

## 6. ワークスペースのルールを設定する [#6-set-the-workspaces-rules]

デフォルトは出発点です。ワークスペースごとに独自のルールを設定でき、ルールは`workspace.toml`に保存されるので、Gitでワークスペースとともに移動します。

1. サイドバー下部のワークスペースのメニューを開いて<strong>ワークスペース設定…</strong>を選び、<strong>エージェント</strong>タブを開きます。
2. **エージェントにこのワークスペースの使用を許可**は、このワークスペースだけエージェントをオフにします。
3. **エージェントに許可する操作**で、操作の種類ごとに**許可**、**確認**、**拒否**（または**デフォルト**）を設定します。
   **リクエストと環境の読み取り**、**安全な送信（GET、GraphQLクエリ、MCPの読み取り）**、**その他の送信**、**保護された環境への送信**、**新しいホストへの送信**、**ワークスペースへの変更**、**削除**です。**その他の送信**を**拒否**にします。
4. **ホストと制限**で、**許可するホスト**を一覧し、**1セッションあたりの送信数**または**1分あたりの送信数**を設定します。
5. **完了**を選んで、エージェントにもう一度注文を頼みます。シートは表示されずに拒否されます。

デフォルトより厳しいルールは、すぐに適用されます。確認なしで何かを許可するルール（たとえばGitからプルしたワークスペースのもの）は、あなたが信頼するまで有効になりません。**エージェント**ポップオーバーに許可される内容が表示され、ルールを信頼するまでエージェントは確認を求め続けます。**これらのルールを信頼**を選ぶと、このMacでそれらが受け入れられます。

**保護された環境への送信**と**新しいホストへの送信**には、**確認**と**拒否**しかありません。確認なしでエージェントにそこへ送信させるルールはありません。エージェントの送信がリダイレクトされても、ワークスペースが知らないホストにシークレットのヘッダーが送られることはありません。

## 7. 環境を保護する [#7-protect-an-environment]

1. ページヘッダーの環境メニューで、**Production**を選びます。保護されているため、赤い錠前のマークが付きます。
2. エージェントに**List products**をもう一度送信させます。シートに**Claude Codeが保護された環境に送信しようとしています**と表示されます。このシートでは<kbd>↩</kbd>を押しても何も起きません。必ず選ぶ必要があります。**拒否**を選びます。（AlpenglowのProductionは架空のアドレスなので、送信はどのみち失敗します。）
3. 自分で<strong>List products</strong>を送信します。ボタンは<strong>Productionに送信…</strong>になり、アラートに<strong>Productionに送信しますか？</strong>と表示されます。<strong>キャンセル</strong>がデフォルトです。<strong>環境を切り替えるまで確認しない</strong>を選ぶと、別の環境を選ぶまで確認が出なくなります。<strong>キャンセル</strong>を選びます。
4. **環境なし**に戻します。

環境を保護するには、環境のページの**保護**スイッチを使います。[保護された環境](/docs/workspaces/protected-environments)を参照してください。

## 8. アプリなしの場合：ポリシー [#8-without-the-app-policies]

`echolot mcp serve`は単独でも動作します。サーバ上やCIのエージェントなど、誰も承認できない場面です。そこではポリシーが決め、確認が必要な操作は拒否されます。

```sh
echolot mcp serve Alpenglow.echolot --policy readonly
```

| ポリシー | 実行されるもの | 確認が必要なもの（誰にも確認できない場合は拒否） |
| --- | --- | --- |
| `standard`（デフォルト） | 読み取りと安全な送信 | その他の送信と変更 |
| `readonly` | 読み取り | 送信。変更と削除は拒否 |
| `permissive` | 送信と変更 | 削除、保護された環境、新しいホスト |

アプリなしの場合、起動時にワークスペースにあったスクリプトだけが実行されます。詳しくは[エージェント](/docs/ai/agents)と[`echolot mcp`](/docs/cli/mcp)を参照してください。

## 9. 内蔵のアシスタント [#9-the-built-in-assistant]

Echolot自身のアシスタントは、同じツールと同じ承認を通じて、すべてのページの横にあるパネルで動作します。

1. **Echolot › 設定…** › **アシスタント**を選びます。**プロバイダを追加**で**プロバイダ**（Anthropic、OpenAI、Google Gemini、またはOllamaなどのOpenAI互換サーバ）を選び、**APIキー**または**アドレス**を入力して、**追加**を選びます。キーはキーチェーンに保存されます。
2. Alpenglowのウインドウで<kbd>⌘</kbd><kbd>J</kbd>を押します（またはページヘッダーの端にある魔法の杖を選びます）。
3. <strong>アシスタントに質問…</strong>に、`Send every request in Catalog and tell me which checks fail.`と入力します。
4. ワークスペースの内容が初めてプロバイダに送られる前に、Echolotは**Anthropicに送信しますか？**（または選んだプロバイダ）と尋ねます。**キャンセル**がデフォルトです。**許可**を選びます。確認はプロバイダごとに1回で、**設定 › アシスタント**で取り消せます。Mac上のモデルやローカルサーバのモデルでは、確認されません。
5. アシスタントの送信も同じシートを通り、シートには**エージェントが…しようとしています**と表示されます。

パネルのヘッダーの**モデルに見える内容**には、モデルに送られた内容がそのまま表示されます。[アシスタント](/docs/ai/assistant)を参照してください。

<Edition only="direct">
  直接ダウンロード版では、アシスタントはMac上のコマンドラインのエージェントも使えます（**CLIエージェント（ACP）**：Claude Code、Codex、Gemini CLI）。
</Edition>

## 次のステップ [#next-steps]

- [エージェント](/docs/ai/agents)：すべての設定、ツールセット、その他のクライアント。
- [フローで自動化する](/docs/tutorials/automate-with-flows)：フローを1つのツールとしてエージェントに提供します。人に確認する承認ブロックを使います。
- [プライバシーとセキュリティ](/docs/privacy-and-security)：Macから外に出る内容とその時期。
