なぜ SSH なのか
あらゆる モダンな プラットフォームは、あなたのエージェントに同じ 3 つの統合オプションを提供します。登録する MCP サーバー、保存して更新する API キー、あるいはエージェントに最初の 2 つの方法を教えるスキルファイルです。設定 するもの。漏洩 するもの。陳腐化 するもの。
Oberik はあなたのエージェントに ssh アクセス を提供します。
あなた自身にではありません。この文脈ではあなたはプロキシとして機能しています。実際にはあなたの エージェント に SSH アクセスを提供します。
1 ssh ssh.oberik.com
SSH は、コーディングエージェントが Oberik とやり取りする必要があるときに使用するインターフェースです(例: ワークスペースの立ち上げ、能力上限の設定、トークンの発行、ホスト側のエージェントとのチャットなど)。設定ファイルも、環境変数のトークンも、インストールも不要です。あなたのマシンにはすでにクライアントがあり、関連する 1 つの認証情報を保持する方法もすでに知っています。
なぜ MCP ではないのか
簡単に言うと、出力の問題です。
MCP は実際の問題を解決したため、業界標準になりました。ツールを一度作成すれば、すべてのエージェントが同じ方法で呼び出せます。私たちは MCP に反対しているわけではありません。Oberik はあなた自身の MCP サーバーを、テナントごとにホスト側のエージェントに直接ロードします。これはエージェントがツールに アクセスする ための良い方法です。ここで話しているのは別の方向性です。つまり、何かが 最初にアカウントを 設定する 方法についてです。
使いやすい反面、MCP には根本的な欠陥があります。ツールが実行されると、出力全体がモデルのコンテキストにプッシュされます。モデルはそのすべてを読まなければなりません。「3 番目のフィールドだけが必要だった」と判断することはできません。テキストが到着した時点で、フィルタリングはすでに失敗しているからです。
MCP は原則としてフィルタリングとページネーションをサポートしています。実際には、誰かがすべてのツールにそれを組み込む必要があり、バイブコーディング のおかげで欠落していることがよくあります。その場合、モデルは生のペイロードをそのまま 飲み込み、トークンとアテンションで代償を払うことになります。
SSH では、エージェントはツールが渡すビューを受け入れる代わりに、自分自身のビューを構成します。
1$ ssh ssh.oberik.com 'documents --json' | jq -r '.data[].name'2$ ssh ssh.oberik.com 'audit --limit 20 --json' | jq -r '.data[] | "\(.at) \(.command)"'
フィルターはマシン上のパイプで実行されます。瞬時で、無料で、エージェントが望んだ通りに狭い範囲に絞られます。モデルは 10 ページではなく、1 行を読むだけです。
これを機能させる要素が 2 つあります。まず、すべてのレスポンスは {"ok":…, "command":…, "message":…, "data":…} のような 1 行形式を使用します。これにより、jq は回避策ではなく、出力を読むための意図された方法になります。
JSON モードは、インタラクションがストリームを中断するのを防ぎます。コマンドに必須フィールドがない場合は、フォームを開く代わりに何が欠けているかを伝えます。コマンドが破壊的である可能性がある場合は、確認を求めて停止する代わりに、--yes を付けて再実行するように指示します。
複数のコマンドがある行の場合は、先頭に format json; を置きます。これで形式が一度設定されるため、フラグを繰り返す必要はありません。
知っておくべき詳細が 1 つあります。フラグは引用符の内側に置く必要があります。ssh ssh.oberik.com --json 'documents' は機能しません。ssh は宛先以降のオプションを自身のオプションとして扱うからです。フラグは無視され、クライアントは自身の使用法出力で応答します。その出力には Oberik もフラグも記載されていないため、ホストが壊れているように見える可能性があります。
ここで言いたいのは、私たちはこれらのモデルに コンピューター を使うように訓練したのだから、コンピューター を使わせましょう、ということです。

なぜ API ではないのか
簡単に言うと、認証情報の問題です。
誤解しないでください。Oberik には API があり、それは優れています。それはあなたのプロダクトが本番環境で呼び出すものであり、SSH ゲートウェイ自体が内部的に呼び出すものでもあります。
しかし、呼び出し元に何を要求するかを見てみましょう。
- トークンを取得する
- 保存する
- 更新する
- ログとモデルのコンテキストから遠ざける
これらのステップのすべてがエージェントの責任になり、エージェントのコンテキストは秘密を保存するのに安全な場所ではありません。モデルが自身の環境変数をエコーするのを見たことがある人なら誰でもこれを知っています。つまり、注意を払っていれば、あなたのお気に入りのコーディングエージェントは、プロンプト内の機密キーを感知すると、デフォルトで 見て見ぬふり をするように動作することに気づくでしょう。しかし、エージェントに貼り付けられたキーはシェル履歴に残るだけでなく、モデルプロバイダー、ログ、ハーネスが保持するあらゆるトランスクリプトにも送られます。
API は存在しますが、エージェントが 自分自身をセットアップする ために設計された主要なパスではありません。SSH 経由では、エージェントはあなたのオペレーティングシステムがすでに保護するように構築された 1 つの認証情報タイプ、SSH キー を保持し、秘密鍵は決して送信されません。Oberik への認証はモデルのコンテキストに秘密を何も入れません。なぜなら、そこに入れるものがないからです。
なぜ CLI ではないのか
簡単に言うと、陳腐化の問題です。
CLI をインストールすることは、すべてのインテグレーターのハーネスに求めるコミットメントであり、私たちはまだ第一歩を踏み出したばかりなので、そこまで 大胆 になりたくなかったのです。正直なところ、CLI は基本的にプロダクトの凍結コピーなので、私たちは CLI をまったく望んでいませんでした。Oberik のコントロールプレーンは、より多くのフィードバックを得るにつれて機能が増えていきます。つまり、CLI を採用していたら、常に新しいリリースをプッシュし、ユーザーに更新を依頼することになっていたでしょう。
私たちは基本的に、SSH サーフェスが生成され、記述されていないことでこれを解決しました。コントロールプレーンのすべてのルートは、その説明とともに登録され、その説明が SSH コマンドになります。ダッシュボードに追加されたルートは、SSH 経由ですぐに表示されるため、ゲートウェイの変更を心配する必要はありません。
何もインストールされていないので、更新するものは何もありません。
なぜスキルではないのか
簡単に言うと、指示の問題です。
エージェント向けのプロダクトを出荷する際のトレンドのアプローチは スキル です。エージェントがインストールする、プロダクトの呼び出し方法を指示する手順書です。スキルは確かに有用ですが、基本的には凝った README ファイルです。スキルはドキュメンテーションであり、機能ではありません。エージェントに行動する方法を与えるものではなく、何かをするためには依然として MCP や API が必要であり、その問題も引き継ぐことになります。
さらに、スキルは動くプロダクトの使い方の凍結コピーです。CLI と同じ陳腐化の問題があります。エージェントが何もする前にコンテキストに配置され、サーフェスが求められたときに印刷できる指示に、アテンションとトークンを費やします。
「エージェントは Oberik が何ができるかをどうやって知るのか」という問いに対する私たちの答えは、インストールするファイルではありません。それはエージェントのための発見呼び出しです。
1$ ssh ssh.oberik.com 'discover' # すべてのコマンド、そのパラメータと型2$ ssh ssh.oberik.com 'docs' # すべてのページとその内容3$ ssh ssh.oberik.com 'docs search capability' # 何かに言及している行
サーフェスは、接続時に、ライブプロダクトから自身を説明します。そして docs はドキュメントサイトと同じテキストなので、何かが他の何かの要約になることはありません。指示が陳腐化することは決してありません。なぜなら それらはプロダクトそのもの だからです。
なぜ SSH なのか
簡単に言うと、5 つの問題すべてを一度に解決するからです。
- キーはエージェントが実際に保持できる認証情報です。 SSH キー認証は数十年の歴史があり、何十億回も実戦で証明されており、プロトコルは指紋を確認する前に署名を検証します。ここで車輪の再発明をする必要は感じませんでした。モデルに秘密の管理を任せるのをやめ、マシンに本来の仕事をさせただけです。
- パスワードを共有せずに、あなたはループ内に留まります。 エージェントがまだキーを持っていない場合(Oberik への最初の接続時など)、デバイスログインフローを開始します。エージェントは login link を実行し、すぐに URL とコードを返して両方を表示します。あなたは自分のブラウザで URL を開きます。ページは添付される正確なキーの指紋を識別し、承認または拒否のオプションを提供し、エージェントが表示したコードと比較できるコードを表示します。その間、エージェントは login wait を実行し、あなたの決定を待ちます。これらは設計上、別々のコマンドです。1 つのコマンドがリンクを生成して待機する場合、エージェントはリクエストが期限切れになった後にのみリンクを表示することになります。承認すると、キーが登録され、将来のすべての接続は自動的にサインインされます。別のリンクは必要ありません。このプロセスでは秘密が使用されないため、エージェントのチャット履歴に秘密が書き込まれることはありません。
- 出力はパイプ用に設計されています。 コマンドに --json を付けて JSON をリクエストするか、行の先頭に一度 format json; を使用すると、すべてのレスポンスが 1 行のエンベロープで返されます。これにより、jq '.data[0].name' は回避策ではなく、出力を読むための意図された方法になります。フィルターはマシン上で実行されるため、モデルはフィルタリング後に残ったものだけを見ます。エラーは同じエンベロープを使用し、基になる HTTP ステータスを含みます。これにより、再試行は 429 と 400 を区別できます。パイプは双方向でも機能します。ゲートウェイはあなたのディスクを読み取れないため、ファイルを受け入れるコマンドはファイル名を引数として受け取り、接続からファイルの内容を読み取ります。たとえば、ssh ssh.oberik.com 'document upload handbook.pdf' < handbook.pdf はファイルをアップロードします。
- ゼロインストール。 登録するもの、保存するもの、コンテキストに保持するものは何もありません。エージェントの設定に MCP サーバーも、環境変数にトークンも、PATH に CLI も、スキルファイルもありません。私たちは開発者向けプロダクトを構築しているので、すでに存在し、すべてのエージェントが使い方を知っているツール、SSH を使用しました。
- 自己記述的で、設計上注意深い。 discover は完全なコマンドカタログを出力します。すべてのコマンド、そのパラメータと型、および確認要件を含みます。カタログはプロダクトからライブで生成されます。また、どのフィールドが文字列ではなくファイルバイトを期待するかをクライアントに伝えるため、アップロードが誤って推測されることはありません。許可されていないのは、行番号で行をターゲットにすることです。破壊的なコマンドは名前を必要とし、サーバーはその名前を接続によって選択されたプロジェクトと照合します。Staging がリクエストされたのに Support Bot が選択されている場合、サーバーは 400 を返し、ワークスペースには触れません。
教えるものは何もありません。なぜなら、サーフェスが自分自身を教えるからです。
Oberik のログインフローは次のようになります。

Oberik ログインフロー
プロダクトへの SSH ドアはリスクではないのか
それは当然の質問ですが、現実はほぼ逆です。
ゲートウェイには独自の状態や権限はありません。すべてのコマンドは、React アプリと同様に、HTTP コントロールプレーンセッションを通じて実行されます。したがって、SSH クライアントはブラウザで同じアカウントができること以上はできません。サインアウトしたり、キーを失効させたり、アカウントを削除したりすると、変更は即座に有効になります。なぜなら、他に失効させるものがないからです。
このターミナルはパブリックインターネットに公開されているため、誰でも匿名で接続できます。すべてのコマンドは、接続 ID、IP アドレス、キー、結果を含めてログに記録されます。認証情報は決して保存されません。login で入力されたパスワード、または --values を通じて渡されたプロバイダーキーは、レコードが書き込まれる前に <redacted> に置き換えられます。システムは元のコマンドのハッシュも保存するため、繰り返されるコマンドを関連付けることができ、認証情報を復元可能にすることはありません。レコードは 30 日間、または 100,000 コマンドのうち早い方まで保持されます。
ログイン失敗が繰り返されると、ロックアウトをトリガーする代わりに、徐々に遅くなります。使用したパスワードを忘れた人は、あまり摩擦なく試行を続けることができますが、間違ったパスワードを使用する自動再試行ループは徐々に役に立たなくなります。これが意図されたトレードオフです。
TLDR
他の誰もがあなたのエージェントに API、MCP サーバー、またはスキルファイルを提供します。私たちはターミナルを与えました。それがエージェントが望んでいたものだったことがわかりました。





