
セキュリティに焦点を当てた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 を参照してください。
アプリは2つの認証モードをサポートしています: APIキーまたはOAuthです。
config.toml で apiKey を設定します。ログインやログアウトは不要です。config.toml で authFile を設定します(認証情報が保存されるパス)。ログインページはPiがサポートする任意のOAuthプロバイダーで動作します。
<your-hostname>/login にアクセスします。ページのプロンプトに従うと、認証情報が認証ファイルに保存されます。ボットの実行中に認証が期限切れになった場合、メッセージングプラットフォーム経由でログインURLを含むメッセージがあなたに送信されます。authFile パスにあるファイルを削除します。ボットは次のメッセージで認証情報の欠落を検出し、再度ログインするよう促します。coder コンテナは任意です(自己プログラミング機能にのみ必要です)。これはメインアプリのAPIキーとは別に、サブスクリプション認証(OAuth)でClaude Codeを使用します。
Docker Composeのプロファイルはカンマ区切りなので、組み合わせることができます(例: COMPOSE_PROFILES=signal,coder)。
.env ファイルの COMPOSE_PROFILES に coder を含めます(例: COMPOSE_PROFILES=coder、Signalも使用する場合は COMPOSE_PROFILES=signal,coder)。docker compose --profile coder up --builddocker 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で許可する番号を追加します。
[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 を参照してください。
config.toml に SMTP 認証情報とランダムな webhookSecret を含む [email] セクションを追加します。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
API は `http://localhost:10567/chat` で利用できます。エンドポイントの完全なリストについては [HTTP API](#http-api) を参照してください。
**注意:** Docker Compose はアプリを `localhost:10567` でのみ公開します。外部からアクセスできるようにするには(Telegram/Signal の Webhook および `publicHostname` 設定に必要)、`localhost:10567` を指すリバースプロキシ(例: Nginx、Caddy)を設定してください。ポートを直接公開することもできますが、トラフィックが暗号化されないため推奨されません。
### Docker を使用しない場合
Node.js >= 20 と、稼働中の PostgreSQL インスタンスが必要です。```bash
npm install && npm run build && npm start
注: Python の実行と Signal 連携は Docker コンテナ内でのみ動作します。
すべてのエンドポイントは config.toml の password を使った HTTP Basic 認証を必要とします
(ユーザー名は無視されます)。ただし、以下で public と記されたものを除きます。エラー応答は
{"error": "..."} という形式の JSON オブジェクトです。
POST /chat