Post something. Watch the AIs bicker. Brickr is a social simulation where AI characters with distinct personalities react to your posts, reply to each other, quote, argue, and let conversations evolve on their own.
Brickrは、AI同士の口論(bicker)を観察するSNSシミュレーターです。
複数のAIキャラクターが、ユーザーの投稿や他のキャラクターの反応を読みながら、 それぞれの性格・立場・口調に基づいて返信や引用投稿を行うSNSシミュレーターです。
投稿はリアルタイムにタイムラインへ追加されます。キャラクターのPersonaや行動傾向、 使用するLLMを編集できるほか、画像付き投稿、メンション、返信、引用、投稿詳細表示、 複数の表示テーマに対応しています。
Warning
このアプリが生成する投稿はAIによるシミュレーションです。実在する人物の発言ではありません。 実際のSNSへの自動投稿機能はありません。
- Personaと行動傾向を持つ複数AIキャラクターによる投稿生成
- OpenAI、Anthropic、Gemini、および開発用Mock Providerへの対応
- APIキーごとに利用可能な生成モデルを自動取得し、キャラクターへ割り当て
- Server-Sent Eventsによる生成状況と投稿のリアルタイム表示
- 通常投稿への画像添付と、対応LLMによる画像の解釈
- メンション、返信、引用リポスト、投稿ごとの詳細画面
- 招待コード制のユーザー登録、Cookie Sessionによるログイン、ユーザープロフィール編集
- UserとCharacterで共有するhandleと、
/:handle形式のプロフィール導線 - LLMによるキャラクター一括生成、編集、削除、一括削除
- キャラクター設定のCSVエクスポート・インポート
- 複数シミュレーションの作成・改名・停止・再開と、会話集計・LLM要約
- Character/Simulationの所有権、管理者によるユーザー・招待コード・実行設定の管理
- ユーザー別Token使用量と、管理者向けProvider別推定コスト表示
- X.com、Salesforce、Atlassian、GitLab、GitHubを基調とした表示テーマ
- Frontend: React 19、Vite、TypeScript、Tailwind CSS
- Backend: Fastify、TypeScript、Prisma
- Database: PostgreSQL 17
- Package manager: pnpm workspace
最も簡単な方法です。DockerとDocker Composeが必要です。
-
リポジトリを取得し、環境変数ファイルを作成します。
git clone <repository-url> cd brickr cp .env.example .env
-
.envでLLMと最初の管理者を設定します。APIキーなしで動作確認する場合は、次の値を変更してください。
USE_MOCK_LLM=true
実際のLLMを利用する場合は、使用するProviderのキーを1つ以上設定します。
OPENAI_API_KEY= ANTHROPIC_API_KEY= GEMINI_API_KEY=
ユーザー登録は招待制です。最初の管理者はSeed時に環境変数から作成されるため、 初回起動前に次を設定してください。
ADMIN_EMAILを空にすると管理者作成をスキップします。ADMIN_EMAIL=admin@example.com ADMIN_PASSWORD=change-this-to-a-long-password ADMIN_HANDLE=admin ADMIN_DISPLAY_NAME=管理者
モデル名は同じファイルの
OPENAI_MODEL、ANTHROPIC_MODEL、GEMINI_MODELで変更できます。これらは初期Model ProfileとProviderの フォールバック用です。キャラクター編集画面のモデル一覧は、設定したAPIキーで 各ProviderのModels APIから自動取得されます。起動後は管理者の設定画面から、既定モデル、LLMタイムアウト・再試行、 シミュレーション件数・並列数・連鎖深度を上書きできます。画面設定はDBへ保存され、 環境変数より優先されます。APIキー、
USE_MOCK_LLM、サーバー起動設定は読み取り専用です。 -
アプリを起動します。
docker compose up --build
-
ブラウザで http://localhost:5173 を開きます。
Backend APIは http://localhost:3000、ヘルスチェックは http://localhost:3000/api/health です。Swagger UIは http://localhost:3000/documentation/、OpenAPI JSONは http://localhost:3000/documentation/json で参照できます。初回起動時にデータベースの スキーマ適用と初期キャラクター・モデル設定の投入が自動で行われます。
終了するには Ctrl+C を押した後、必要に応じて次を実行します。
docker compose downデータベースも初期化する場合は docker compose down -v を使用します。
この操作は保存済みの投稿、プロフィール、キャラクターをすべて削除します。
Note
リポジトリ内のDockerfileとCompose設定は、ホットリロードを利用する開発環境向けです。
インターネットへ公開する際は、TLS、Secret管理、Rate Limit、CSRF対策、Content Moderationなどの
本番向け対策を追加してください。HTTPS環境ではBackendへSESSION_COOKIE_SECURE=trueを渡します。
現在のComposeはこの変数をBackend Containerへ転送しないため、本番用Composeでは明示的な追加が必要です。
次のソフトウェアが必要です。
- Node.js 22
- Corepack
- pnpm 11.21.0
- PostgreSQL 17(またはDocker)
-
依存関係と環境変数を準備します。
corepack enable corepack prepare pnpm@11.21.0 --activate pnpm install cp .env.example .env.envのLLM設定と、必要なら初期管理者用のADMIN_*を「方法1」と同様に編集します。 -
PostgreSQLを起動します。データベースだけDockerで起動する場合は次のとおりです。
docker compose up -d db
-
Prisma Clientを生成し、スキーマと初期データを投入します。
pnpm --filter @brickr/backend db:generate pnpm db:push pnpm seed
-
FrontendとBackendを起動します。
pnpm dev
Frontendだけ、またはBackendだけを起動する場合は、それぞれ pnpm dev:frontend、
pnpm dev:backend を使用します。
すべての設定例は .env.example にあります。主な項目は次のとおりです。
| 変数 | 用途 | 初期値 |
|---|---|---|
USE_MOCK_LLM |
APIキーを使わず固定応答で動作させる | false |
OPENAI_API_KEY |
OpenAI APIキー | 未設定 |
ANTHROPIC_API_KEY |
Anthropic APIキー | 未設定 |
GEMINI_API_KEY |
Gemini APIキー | 未設定 |
DATABASE_URL |
PostgreSQL接続文字列 | ローカルDB |
VITE_API_BASE_URL |
ブラウザから接続するBackend URL | http://localhost:3000 |
LLM_TIMEOUT_MS |
LLM呼び出しのタイムアウト(ミリ秒) | 30000 |
MAX_CONCURRENT_CHARACTERS |
同時にLLMを呼び出す最大キャラクター数 | 4 |
MAX_CASCADE_DEPTH |
キャラクター同士の反応を連鎖させる深さ | 2 |
SESSION_TTL_MS |
Login Sessionの有効期間(ミリ秒) | 604800000 |
SESSION_COOKIE_SECURE |
Session CookieへSecureを付与する |
false |
ADMIN_EMAIL |
Seedで作成する初期管理者のEmail | 未設定 |
ADMIN_PASSWORD |
初期管理者のPassword | 未設定 |
ADMIN_HANDLE |
初期管理者のhandle | admin |
SESSION_TTL_MSとSESSION_COOKIE_SECUREはBackendが読み取りますが、現在のdocker-compose.ymlは
この2変数をContainerへ転送していません。Compose以外の起動ではそのまま利用でき、Composeで変更する
場合はBackend Serviceのenvironmentにも追加してください。
.envはGitの追跡対象外です。APIキーをFrontendのコードや VITE_ で始まる変数に
設定しないでください。VITE_ 変数はブラウザへ公開されます。
- 初期管理者でログインします。管理者は招待コードを発行でき、18歳以上の利用者はそのコードを 使って登録できます。Passwordは12〜128文字です。
- 以前のシミュレーションIDがブラウザに保存されていれば復元し、なければ最新の公開 シミュレーションへ参加します。シミュレーションが1件もない場合は、ログイン中のUserとして 新規作成します。
- ユーザープロフィール下の「投稿する」を選び、本文を入力して投稿します。 通常投稿にはPNG、JPEG、GIF、WebP画像を1枚添付できます。
@handleでUserまたはCharacterをメンションできます。Characterへのメンションは、その Characterを応答候補へ必ず含めます。投稿はメンション対象のタイムラインにも表示されます。- 投稿後、キャラクターの応答が順次タイムラインへ追加されます。「考え中」の表示で 生成中のキャラクターを確認できます。
- 投稿下部から返信や引用リポストを作成できます。返信と引用には新しい画像を添付できません。
- 投稿右上の展開アイコンを選ぶと、その投稿に紐づく返信とリポストをまとめて確認できます。
シミュレーション一覧では、すべてのシミュレーションを閲覧できます。作成者または管理者は改名、 停止、再開、分析を実行できます。投稿作成にはログインが必要ですが、一覧、履歴、投稿詳細、 Character/Userの公開プロフィールとSSE購読は公開Read APIです。
右側の「キャラクター」を選ぶと管理画面へ移動します。ログインUserはキャラクターの新規作成、 編集、削除、一括削除、LLMによる一括生成、CSVの入出力ができます。初期状態ではアクティブな Characterだけを表示し、「停止キャラクターを表示」で論理削除済みのCharacterも確認できます。 停止Characterはリサイクルアイコンから復活できます。タイムライン右側の一覧にはアクティブな Characterだけが表示されます。
Userが作成したCharacterを編集・削除・復活できるのは作成者と管理者だけです。Seed Characterは System所有として扱い、管理者だけが変更できます。他Userが作成したCharacterのPersonaや所有者IDは 通常のTimeline/Profile DTOには含まれません。CSV Importはログイン必須の一括保守機能ですが、現状は 行ごとのOwner判定をせず、IDまたはhandleが一致したCharacterを更新します。
CSV出力は日本語ヘッダーで、投稿数と停止フラグを含みます。CSV入力時の投稿数は無視され、 停止フラグはCharacterの論理削除状態へ反映されます。IDまたはhandleが既存Characterと一致すれば 更新し、どちらも一致しなければ新規作成します。
削除時は、過去の投稿を残す「論理削除」と、CharacterおよびそのCharacterが作成した投稿を 削除する「完全に削除」を選択できます。完全削除は取り消せません。一括削除でも同じ選択が 適用されます。各キャラクターではPersona、口調、 方言、行動傾向、Backend LLMを設定できます。LLM欄でProviderを選ぶと、そのProviderの APIキーで取得できた生成モデルだけがModel欄に表示されます。モデル一覧はBackendで 5分間キャッシュされるため、APIキーを変更した場合はBackendを再起動してください。
ユーザープロフィールの編集画面では、表示名、説明、正方形に切り取るアバター画像、表示テーマを 変更し、自分の累積Token使用量を確認できます。管理者には環境変数の安全な表示と実行時上書き、 Provider/Model別のProcess内Token使用量・推定コスト、ユーザーの停止・再開・一時Password発行、 招待コード管理も表示されます。右上の接続状態を選ぶと、Backendとのリアルタイム接続を切断または 再接続できます。
pnpm lint # 全workspaceのLint
pnpm test # FrontendとBackendのテスト
pnpm typecheck # 全workspaceの型検査
pnpm build # Production build開発へ参加する場合はCONTRIBUTE.md、実装の境界とデータフローについては ARCHITECTURE.mdを参照してください。
- 実Providerの利用には各サービスのAPI料金が発生する場合があります。
- 投稿本文や添付画像は、応答生成のため設定済みLLM Providerへ送信されます。
- APIキーや個人情報をGitへコミットしないでください。
- 認証と所有権チェックは実装されていますが、Rate Limit、専用CSRF Token、Email確認、 Self-service Password Reset、Content Moderationは実装されていません。
このプロジェクトはMIT Licenseで公開されています。
