
セキュリティに焦点を当てたAIパーソナルアシスタント

Stavrobotは「AIアシスタントに必要なアクセス権はすべて、それ以上は与えない」という原則に基づいて構築されたパーソナルAIアシスタントです。
AIアシスタントの便利な機能をすべて備えつつ、サンドボックス化、分離、最小権限に重点を置いています。軽量で、docker compose up だけでデプロイできます。
uv を介したpip依存関係を伴う任意のPythonを、ホスト環境から分離して実行できます。AI支援インストール: コーディングAI(Claude Code、Cursor、Windsurfなど)に https://stavrobot.stavros.io/INSTALL.md を取得して従うよう指示してください。セットアップ全体を対話的に案内します。
手動インストール:
Telegramで @BotFather にメッセージを送ってボットを作成し、トークンをコピーします。@userinfobot にメッセージを送ってTelegramユーザーIDを取得します(これがチャットIDとして使用されます)。
env.example を .env にコピーし、POSTGRES_PASSWORD を安全なものに、TZ をあなたのタイムゾーンに変更します。
config.example.toml を data/main/config.toml にコピーし、必須フィールドを入力します: apiKey、password、publicHostname、[owner].name、[owner].telegram(あなたのチャットID)、[telegram].botToken。ファイル内のそれ以外はすべて任意です。
docker compose up --build
以上です。Telegramでボットにメッセージを送ると応答します。Signal、WhatsApp、メール、その他のオプションについては、以下の詳細なセットアップセクションを参照してください。
config.example.toml を data/main/config.toml にコピーします。authFile(または apiKey)と publicHostname を設定します。それ以外はすべて任意です。env.example を .env にコピーし、タイムゾーン(TZ)を設定します。Postgresの認証情報やその他の環境設定もそこで上書きできます。POSTGRES_PASSWORD は必ず安全なものに設定してください — デフォルトは弱いプレースホルダーであり、本番環境で使用すべきではありません。アプリの起動後、/settings/config を開くとブラウザで config.toml を編集できます。この
ページはHTTP Basic認証で保護されており、含まれるシークレットを含む生の設定を表示します。有効な保存は単一の <CONFIG_PATH>.bak バックアップを作成し、新しい内容を保存して、アプリを再起動します。これは進行中のエージェントのターンを中断します。
plugin-runner、coder、signal-bridge、python-runner は起動時にのみ config.toml を読み込みます。パスワードなど、これらに影響する変更は、それらのコンテナを手動で再起動する必要があります。
Stavrobotは、config.toml で baseUrl を設定することにより、任意のOpenAI互換エンドポイント(Ollama、LiteLLM、vLLMなど)やカスタムのAnthropic互換プロキシを指定できます。必須フィールドと設定例については config.example.toml を参照してください。reasoning = true は、思考をサポートするモデルにのみ設定してください。これがカスタムエンドポイントで thinkingLevel を適用させるものだからです。
アプリは2つの認証モードをサポートしています: APIキーまたはOAuth。
config.toml で apiKey を設定します。ログインやログアウトは不要です。config.toml で authFile を設定します(認証情報が保存されるパス)。ログインページはPiがサポートする任意のOAuthプロバイダーで動作します。
<your-hostname>/login にアクセスします。ページのプロンプトに従うと、認証情報が認証ファイルに保存されます。Stavrobotはプロバイダーのヘッドレスログイン方式を選択するため、到達不能な localhost コールバックにリダイレクトされることはありません。Anthropicの場合、Authorizeを選択した後にAnthropicがコードを表示するので、それをコピーしてStavrobotのログインページに貼り付けます。デバイスコードフローを持つプロバイダーは、代わりにStavrobotのページにコードを表示し、あなたはプロバイダーのサイトでそれを入力します。ボットの実行中に認証が期限切れになった場合、メッセージングプラットフォームを介してログインURLを含むメッセージをあなたに送信します。authFile パスにあるファイルを削除します。ボットは次のメッセージで認証情報の欠落を検出し、再度ログインするよう促します。coder コンテナは任意です(自己プログラミング機能にのみ必要)。デフォルトでは、メインアプリのAPIキーとは別に、サブスクリプション認証(OAuth)でClaude Codeを使用します。代わりにAnthropic互換のAPIエンドポイントを使用するには、config.toml で [coder].apiKey と [coder].baseUrl の両方を設定します。するとClaude Codeはそれらを ANTHROPIC_API_KEY と ANTHROPIC_BASE_URL として使用します。トップレベルの apiKey/baseUrl はメインアプリのモデルのみを設定し、coderには決して影響しません。2つの [coder] キーのうち片方だけを設定すると起動エラーになります。
Docker Composeのプロファイルはカンマ区切りなので、組み合わせることができます(例: COMPOSE_PROFILES=signal,coder)。
.env ファイルで COMPOSE_PROFILES に coder を含めるよう設定します(例: COMPOSE_PROFILES=coder、またはSignalも使用する場合は COMPOSE_PROFILES=signal,coder)。docker compose --profile coder up --build[coder].apiKey/[coder].baseUrl を設定した場合は、この手順と次の手順をスキップしてください): docker compose exec -u coder coder claude(まだログインしていない場合はログインを促されます)。[coder].model をClaude Codeのモデルエイリアス(sonnet、opus、または haiku)に設定します。Signalには別の電話番号が必要です — あなたの個人用のものではありません。プリペイドSIMやVoIP番号で動作します。
.env ファイルで COMPOSE_PROFILES=signal のコメントを解除して、signal-bridgeコンテナを有効にします。docker compose --profile signal builddocker compose --profile signal run --rm --entrypoint bash signal-bridge -c 'signal-cli link -n "Stavrobot" | tee >(xargs -L 1 qrencode -t utf8)' — スマートフォンでQRコードをスキャンします(Signal > 設定 > リンクされたデバイス)。docker compose --profile signal run --rm --entrypoint bash signal-bridge -c 'signal-cli -u +YOUR_NUMBER register'、その後 docker compose --profile signal run --rm --entrypoint bash signal-bridge -c 'signal-cli -u +YOUR_NUMBER verify CODE' で確認します。[signal].account を設定します。docker compose up --build/settings Web UIを介して許可する番号を追加します。docker compose exec app node -e "fetch('http://localhost:3001/chat',{method:'POST',headers:{'Content-Type':'application/json'},body:JSON.stringify({message:'Send the message \"Hello from Stavrobot\" to my Signal number.'})}).then(r=>r.text()).then(console.log)"
[telegram].botToken を設定します。[owner].telegram にチャット ID(携帯電話番号ではありません)を設定します。/settings Web UI から許可するチャット ID を追加します。WhatsApp には別の電話番号が必要です。そうでなければ自分自身にメッセージを送ることになり、実際にはうまく機能しません。
WhatsApp は Baileys を使用します。これは非公式の WhatsApp Web ライブラリで、コンパニオンデバイス(WhatsApp Web のように)としてリンクします。別の電話番号は不要です — 既存の WhatsApp アカウントにリンクします。
リスク: Baileys は非公式 API を使用しています。WhatsApp はこれを使用するアカウントを BAN する可能性があります。自己責任で使用してください。
config.toml に [whatsapp] セクションを追加します(形式については config.example.toml を参照)。docker compose up --builddocker compose logs -f app)。./data/whatsapp に保存され、再起動後も維持されます。/settings Web UI から許可する電話番号を追加します。メールは受信配信に Cloudflare Email Worker を、送信に SMTP を使用します。完全な worker コードと詳細なセットアップ手順については
config.example.toml を参照してください。
webhookSecret を含む [email] セクションを config.toml に追加します。config.example.toml 内)をデプロイし、worker に WEBHOOK_URL と WEBHOOK_SECRET 環境変数を設定します。/settings Web UI から許可する送信者アドレスを追加します。Pebble Index を設定して、Stavrobot の設定済みパスワードを使用した HTTP
Basic 認証で POST /pebble-index/webhook にリング Webhook を送信するようにします。マルチパートリクエストには
recordedAt(エポックミリ秒)と client を含める必要があり、transcription と
audio/mp4 の audio ファイルを含めることができます。音声録音は .m4a
添付ファイルとしてエージェントのキューに追加されます。
docker compose up --build