Melso Docs

環境変数

セルフホスト Melso でよく使うサーバー、ストレージ、連携、ランタイムの設定。

Melso はプロセス起動時に環境変数を読み込みます。変更後は、該当する API・Web・デーモンのプロセスを再起動してください。Docker Compose の docker compose restart.env を再読み込みしません。up -d でコンテナを再作成して初めて反映されます。

このページにはデプロイ運用者向けの設定のみを載せています。テスト用変数や内部タスク用の変数は扱いません。グループ別のリファレンスとして使い、完全なデプロイ手順はセルフホストクイックスタートを参照してください。

プロダクションの最小構成

DATABASE_URL=postgres://user:password@postgres:5432/multica?sslmode=require
JWT_SECRET=<long-random-secret>
APP_ENV=production
FRONTEND_ORIGIN=https://multica.example.com
MULTICA_APP_URL=https://multica.example.com
MULTICA_PUBLIC_URL=https://api.multica.example.com

さらにメールサービスを 1 つ選ぶ必要があります。選ばない場合、認証コードと招待はサーバーログに書き込まれるだけです。

プロダクションでデフォルトの JWT_SECRET を使わないでください。MULTICA_DEV_VERIFICATION_CODE も設定しないでください。

API とデータベース

変数デフォルト説明
DATABASE_URLローカルの multica データベースPostgreSQL 接続文字列
DATABASE_MAX_CONNS25API プロセスあたりの最大データベース接続数
DATABASE_MIN_CONNS5API プロセスが保持する最小接続数
PORT8080API のリッスンポート
JWT_SECRET開発用の固定値ログイン JWT と一部の署名フローに使うシークレット
APP_ENVプロダクションでは production を設定
AUTH_TOKEN_TTL720h(30 日)ブラウザ JWT と cookie の有効期間。Go duration または正の整数秒を受け付けます
LOG_LEVELアプリのデフォルトログレベル
MULTICA_SHUTDOWN_HOLD_DURATION0終了シグナル受信後、グレースフルシャットダウンを開始するまでの待機時間

Kubernetes で shutdown hold を設定する場合、terminationGracePeriodSeconds は hold と実際のシャットダウンにかかる時間の合計より大きくしてください。

公開アドレスとブラウザアクセス

変数デフォルト説明
FRONTEND_ORIGINユーザーがアクセスするフロントエンドの origin。CORS、cookie、招待リンクに使われます
MULTICA_APP_URLFRONTEND_ORIGIN にフォールバックユーザーが到達できる Web アドレス。CLI ログインとアカウント連携リンクが使います
MULTICA_PUBLIC_URL公開 API アドレス。webhook URL とランタイム接続案内に使われます
CORS_ALLOWED_ORIGINS追加で許可する HTTP origin。カンマ区切り
ALLOWED_ORIGINSCORS / フロントエンド設定にフォールバックWebSocket origin の許可リスト。カンマ区切り
COOKIE_DOMAINフロントエンドと API の host が異なり、ブラウザが API ドメインへ直接アクセスする場合は必須。単一ドメイン構成では空のまま

フロントエンドと API が異なる host を使い、ブラウザが API ドメインへ直接アクセスする構成では、COOKIE_DOMAIN の設定が必須です。設定しないとブラウザが CSRF cookie を読めず、すべての書き込みリクエストが 403 CSRF validation failed を返す一方、読み取りは正常に動きます。値には、両方の host を同時にカバーできる最も狭い親ドメインを使ってください(.example.com より .agent.example.com)。この設定はログインセッション cookie をそのドメイン配下のすべての host に広げるため、それらの host がすべて同一の信頼できる運用主体のものである場合にのみ使えます。変更後は両方の host で古い cookie を削除し、再ログインしてください。セルフホストクイックスタートの同一オリジン構成(ブラウザは app ドメインのみアクセス)に従う場合は、空のままで構いません。IP アドレスは指定しないでください。ブラウザは Domain が IP の cookie を無視します。

セルフホストのデプロイでは FRONTEND_ORIGIN の設定が必須です。設定しないと、招待リンク、cookie のセキュリティ属性、WebSocket の origin 検証が実際のドメインと食い違うおそれがあります。

メールとログイン

Resend

変数デフォルト説明
RESEND_API_KEY設定すると Resend が有効になります
RESEND_FROM_EMAILnoreply@melso.ai送信元アドレス。検証済みドメインに属している必要があります

SMTP

SMTP_HOST が空でない限り、SMTP が Resend より優先されます。

変数デフォルト説明
SMTP_HOSTSMTP ホスト。設定すると SMTP が有効になります
SMTP_PORT25よく使う値: 25、587、465
SMTP_USERNAMEユーザー名。匿名 relay では空のまま
SMTP_PASSWORDパスワード
SMTP_FROM_EMAILRESEND_FROM_EMAIL にフォールバックEnvelope From とメールの From
SMTP_TLSstarttlsimplicitsmtpsssl は暗黙的 TLS を意味します。465 では自動的に有効
SMTP_TLS_INSECUREfalse証明書検証をスキップ。信頼できる内部ネットワーク専用
SMTP_EHLO_NAMEホスト名厳格な relay が要求する EHLO/FQDN

Google OAuth

変数デフォルト説明
GOOGLE_CLIENT_IDGoogle OAuth client ID
GOOGLE_CLIENT_SECRETGoogle OAuth client secret
GOOGLE_REDIRECT_URIhttp://localhost:3000/auth/callbackGoogle Console のコールバックアドレスと完全に一致している必要があります

サインアップ範囲

変数デフォルト説明
ALLOW_SIGNUPtrueallowlist が一つも設定されていない場合に新規登録を許可するか
ALLOWED_EMAILS登録を許可する完全なメールアドレス。カンマ区切り
ALLOWED_EMAIL_DOMAINS登録を許可するメールドメイン。カンマ区切り
DISABLE_WORKSPACE_CREATIONfalseすべてのユーザーのワークスペース新規作成を禁止。owner/admin の例外はありません
MULTICA_DEV_VERIFICATION_CODE非 production 環境で使う固定 6 桁のテスト認証コード

allowlist の正確な判定順序はログインとサインアップを参照してください。

添付ファイルストレージ

S3_BUCKET が未設定の場合、Melso はローカルディスクを使います。

S3 または互換ストレージ

変数デフォルト説明
S3_BUCKETバケット名。完全な hostname は指定しないでください
S3_REGIONus-west-2バケットのあるリージョン
AWS_ACCESS_KEY_IDSDK デフォルトの資格情報チェーン静的な access key
AWS_SECRET_ACCESS_KEYSDK デフォルトの資格情報チェーン静的な secret key
AWS_ENDPOINT_URLMinIO などの S3 互換 endpoint
S3_USE_PATH_STYLEカスタム endpoint 時は truepath-style アドレスを使うか
ATTACHMENT_DOWNLOAD_MODEautoautocloudfrontpresignproxy
ATTACHMENT_DOWNLOAD_URL_TTL30m署名付きダウンロード URL の有効期間

内部ネットワークの MinIO など、ブラウザから endpoint に直接到達できない場合は ATTACHMENT_DOWNLOAD_MODE=proxy を使ってください。

ローカルディスク

変数デフォルト説明
LOCAL_UPLOAD_DIR./data/uploadsファイルと metadata の保存ディレクトリ。永続ボリュームが必要です
LOCAL_UPLOAD_BASE_URL任意の公開 base URL。空の場合はアプリ内の相対アドレスを返します

CloudFront

変数説明
CLOUDFRONT_DOMAINCDN ドメイン
CLOUDFRONT_KEY_PAIR_IDCloudFront key pair ID
CLOUDFRONT_PRIVATE_KEY完全な秘密鍵
CLOUDFRONT_PRIVATE_KEY_SECRETSecrets Manager から秘密鍵を読み込む場合に使用

Redis とレート制限

変数デフォルト説明
REDIS_URL共有レート制限、リアルタイムイベント、token cache に使用。未設定の場合、リアルタイムイベントと招待制限はプロセス内メモリにフォールバックし、認証レート制限は無効になります
REDIS_DISABLE_CLIENT_NAMEfalseマネージド Redis が CLIENT SETNAME を禁止している場合に true を設定
RATE_LIMIT_AUTH5認証コード送信または Google ログイン開始の、IP あたり毎分の回数
RATE_LIMIT_AUTH_VERIFY20認証コード検証の、IP あたり毎分の回数
RATE_LIMIT_INVITATION_ACTOR_10M10招待者ごとの 10 分間スライディングウィンドウ内のワークスペース招待数。0 でこの制限を無効化
RATE_LIMIT_INVITATION_WORKSPACE_24H50ワークスペース内の全管理者による 24 時間スライディングウィンドウ内の招待総数。0 でこの制限を無効化
RATE_LIMIT_INVITATION_RECIPIENT_24H6正規化された同一受信メールアドレスがワークスペースをまたいで 24 時間スライディングウィンドウ内に受け取れる招待数。0 でこの制限を無効化
RATE_LIMIT_TRUSTED_PROXIESX-Forwarded-For の提供を許可するプロキシ CIDR。カンマ区切り
MULTICA_TRUSTED_PROXIESオートパイロット webhook とリアルタイム接続が使う信頼済みプロキシ CIDR

リバースプロキシ配下のデプロイでは、実際のプロキシのネットワーク範囲を設定してください。すべての送信元を無条件に信頼してはいけません。クライアントが転送元 IP を偽装できてしまいます。

認証レート制限には REDIS_URL が必要です。未設定の場合、起動ログに認証レート制限が無効であることが表示されます。招待制限は Redis なしでもプロセス内メモリで動作し、Redis を設定すると複数レプリカで割り当てを共有します。設定済みの Redis が一時的に利用できない場合、認証レート制限はフェイルオープンしますが、招待作成は保護なしでメールを送らず、再試行可能な 503 を返します。

外部連携

連携変数説明
GitHubGITHUB_APP_SLUGGitHub App の slug
GitHubGITHUB_WEBHOOK_SECRETWebhook HMAC と接続 state の署名シークレット
GitHubGITHUB_APP_IDPR カードの CI ステータス・マージ可否と「GitHub から選択」リポジトリに必要です
GitHubGITHUB_APP_PRIVATE_KEYApp ID と対になる完全な PEM 秘密鍵。用途は同上
LarkMULTICA_LARK_SECRET_KEYbase64 エンコードされた 32 バイトの資格情報暗号化キー
SlackMULTICA_SLACK_SECRET_KEYbase64 エンコードされた 32 バイトの token 暗号化キー
ComposioCOMPOSIO_API_KEYComposio ツール接続を有効化
ComposioCOMPOSIO_CALLBACK_BASE_URLコールバック API アドレス。MULTICA_PUBLIC_URL にフォールバック可能
ComposioCOMPOSIO_STATE_SECRETOAuth state の署名シークレット。JWT_SECRET から派生可能
セルフホスト GitMULTICA_VCS_INTEGRATION_ENABLEDForgejo/Gitea/GitLab 連携のスイッチ。compose ではデフォルトで有効
セルフホスト GitMULTICA_VCS_SECRET_KEYbase64 エンコードされた 32 バイトの暗号化キー(openssl rand -base64 32)。未設定の場合、この機能全体が利用できません

GITHUB_APP_ID と秘密鍵を設定しなくても、PR の関連付け・ミラー・マージによる done への遷移は通常どおり動きますが、カードに CI とマージ可否のステータスが表示されず、「GitHub から選択」のリポジトリ入口も無効になります。

設定手順は GitHub 連携Lark BotSlack Botを参照してください。

サーバーサイド LLM

このグループは、会話タイトルなどサーバー側の補助生成機能の設定です。エージェントがタスクを実行するときに使う AI コーディングツールの資格情報ではありません。

変数デフォルト説明
MULTICA_LLM_API_KEYOpenAI 互換の API key
MULTICA_LLM_BASE_URLOpenAI 互換の endpoint
MULTICA_LLM_DEFAULT_MODELgpt-5.6-lunaリクエストがモデルを指定しない場合に使用

API key と base URL の両方が空の場合、サーバーサイド LLM 生成は無効になり、呼び出し側はローカルのフォールバックロジックを使います。

デーモン設定

以下の変数は、エージェントを実行するコンピューター上で読み込まれます。API コンテナ内ではありません。

変数デフォルト説明
MULTICA_SERVER_URLws://localhost:8080/wsMelso API / WebSocket アドレス。http(s) も受け付けます
MULTICA_DAEMON_DEVICE_NAMEホスト名ランタイム一覧に表示されるデバイス名
MULTICA_AGENT_RUNTIME_NAMELocal Agentランタイムの表示名
MULTICA_DAEMON_POLL_INTERVAL30sウェイクイベントがないときのタスクポーリング間隔
MULTICA_DAEMON_HEARTBEAT_INTERVAL15sハートビート間隔
MULTICA_DAEMON_MAX_CONCURRENT_TASKS20デーモン 1 つあたりの同時実行タスク上限
MULTICA_AGENT_TIMEOUT01 回の実行の絶対時間上限。0 は上限なし
MULTICA_AGENT_IDLE_WATCHDOG30m出力もツール実行もない状態の静穏上限
MULTICA_AGENT_TOOL_WATCHDOG2h単一のツール呼び出しが静穏なままでいられる上限
MULTICA_OPENCODE_IDLE_WATCHDOG10mOpenCode 専用の静穏しきい値
MULTICA_CODEX_SEMANTIC_INACTIVITY_TIMEOUT10mCodex のセマンティック静穏しきい値
MULTICA_CODEX_FIRST_TURN_TIMEOUT0Codex 初回ターンの無進捗上限を明示的に上書き;0 はデフォルトを維持。実効の初回ターン待機は依然として MULTICA_CODEX_SEMANTIC_INACTIVITY_TIMEOUT と全体の実行タイムアウトに制限される——MULTICA_CODEX_SEMANTIC_INACTIVITY_TIMEOUT をこの値より厳密に大きく(余裕を持たせて)設定すること。さもないと待機はその値で打ち切られ、モデルカタログの起動リトライがスキップされる。同値では不十分:セマンティックタイマーが先に起動するため、同値の場合でもリトライが失われることがある
MULTICA_CODEX_HANDSHAKE_TIMEOUT30sCodex app-server 起動ハンドシェイクの上限
MULTICA_DAEMON_AUTO_UPDATECloud は true、セルフホストは falseCLI の更新を自動でチェックして適用するか
MULTICA_DAEMON_AUTO_UPDATE_INTERVAL6h更新チェックの間隔
MULTICA_DAEMON_AUTO_RELOADtrue帯域外で置き換えられた multica バイナリ(brew upgrade、再ダウンロード、ローカルビルド)へ再起動して追従するかどうか。MULTICA_DAEMON_AUTO_UPDATE とは独立
MULTICA_WORKSPACES_ROOT~/multica_workspacesタスク作業ディレクトリのルート
MULTICA_AGENT_TEMP_BASE/tmp(Linux/macOS)Linux/macOS 専用。作業ごとのプライベート一時ディレクトリの親ディレクトリ。既存かつ書き込み可能な絶対パスである必要があり、無効な値の場合は /tmp にフォールバックせず作業の開始に失敗します。短いパスを選んでください。子ツールがその配下に AF_UNIX ソケットを作成する場合があり、sun_path の上限は Linux で 108 バイト、macOS で 104 バイトです
MULTICA_KEEP_ENV_AFTER_TASKfalseデバッグ用にタスクディレクトリを保持

各 AI コーディングツールは MULTICA_<PROVIDER>_PATHMULTICA_<PROVIDER>_MODEL でコマンドパスとデフォルトモデルを上書きできます。QwenPaw だけは例外で、Melso がモデルを渡さないため MULTICA_QWENPAW_MODEL はありません。詳しくは AI コーディングツール比較 を参照してください。DeepSeek Harness は MULTICA_DSH_PATHMULTICA_DSH_MODEL に対応しています(値は dsh のモデルカタログにあるモデル ID、例: deepseek-official/deepseek-chat)。マシン全体のデフォルト引数 MULTICA_<PROVIDER>_ARGS は、現在 Claude Code、Codex、CodeBuddy、Qwen Code、QwenPaw の 5 ツールに対応しています。対応する変数は MULTICA_CLAUDE_ARGSMULTICA_CODEX_ARGSMULTICA_CODEBUDDY_ARGSMULTICA_QWEN_ARGSMULTICA_QWENPAW_ARGS です。例:

MULTICA_CLAUDE_PATH=/opt/bin/claude
MULTICA_CLAUDE_ARGS=--max-turns 40

優先順位はコマンドラインフラグ → 環境変数 → ~/.multica/config.json → 組み込みデフォルトです。watchdog の動作はデーモンとランタイムを参照してください。

デーモン設定の永続化

デーモン側のよく使う設定は、シェルの環境変数に頼らず ~/.multica/config.json に書き込むこともできます。名前付きプロファイルの設定ファイルは ~/.multica/profiles/<name>/config.json にあります:

melso config set poll_interval 10s
melso config show

サポートされるキー:

キーデフォルト説明
server_urlws://localhost:8080/wsMelso API / WebSocket アドレス
app_urlブラウザログインに使う Web アドレス
workspace_idデフォルトのワークスペース
device_nameホスト名ランタイム一覧に表示されるデバイス名
runtime_nameLocal Agentランタイムの表示名
workspaces_root~ 配下のプロファイル別パスタスク作業ディレクトリのルート
max_concurrent_tasks20同時実行タスク上限。0 または空は未設定を意味します
poll_interval30sタスクのポーリング間隔
heartbeat_interval15sハートビート間隔
agent_timeout無制限1 回の実行の絶対時間上限
codex_semantic_inactivity_timeout10mCodex のセマンティック静穏しきい値
codex_handshake_timeout30sCodex app-server ハンドシェイクの上限
disable_auto_update環境に従うtrue で自動更新を無効化。false はローカルの上書きをクリアし、環境変数またはデフォルトに戻します
auto_update_check_interval6h更新チェックの間隔
disable_auto_reload環境に従うtrue でディスク上の置き換えへの追従を停止。false はローカルの上書きをクリア。disable_auto_update とは別に解決されます

値のルール:

  • duration 系のキーは正の Go duration(10s2h など)を受け付け、0s と負の値は拒否されます。唯一の例外は agent_timeout で、0s は有効な値として実行時間上限を明示的に無効化します。
  • 空文字列を渡すと永続化された値がクリアされ、環境変数または組み込みデフォルトに戻ります。例: melso config set poll_interval ""
  • max_concurrent_tasks には非負の整数が必要です。
  • 相対パスの workspaces_root は保存時に絶対パスへ変換されます。

可観測性と分析

変数デフォルト説明
ANALYTICS_DISABLEDfalsetrue で PostHog への送信を無効化
POSTHOG_API_KEY未設定の場合は分析送信が無効。自前の PostHog プロジェクトを使う場合に設定
POSTHOG_HOSThttps://us.i.posthog.comPostHog アドレス
METRICS_ADDRPrometheus metrics のリッスンアドレス。空なら起動しません
REALTIME_METRICS_TOKEN/health/realtime を保護する bearer token

次のステップ