232 lines
12 KiB
Markdown
232 lines
12 KiB
Markdown
[English](configuration.md) | 日本語
|
||
|
||
# Configuration Reference
|
||
|
||
MAESTRO は単一の `config.yaml`(`config.yaml.example` をコピーして作成)で設定する。
|
||
|
||
- **YAML キーは snake_case**(`max_concurrency`)、コード内は camelCase。`src/config.ts` の `transformKeys` が変換する。
|
||
- 一部は**環境変数で上書き**できる([末尾参照](#environment-variable-overrides))。
|
||
- `config_version: 2` が現行スキーマ。
|
||
|
||
> 値の一次ソースは `config.yaml.example`(コメント付き)と `src/config.ts`。本リファレンスは各項目の意味をまとめたもの。
|
||
|
||
---
|
||
|
||
## `llm` — ジョブ実行時の LLM 接続
|
||
|
||
| キー | 既定 | 意味 |
|
||
|------|------|------|
|
||
| `timeout_minutes` | 10 | 1 リクエスト全体の上限(分)。 |
|
||
| `retry.max_attempts` | 3 | 429/5xx/一時接続失敗時の再試行回数。 |
|
||
| `retry.backoff_ms` | [2000,5000,15000] | 各再試行の待機(ms)。 |
|
||
| `retry.retryable_status` | [429,500,502,503,504] | 再試行対象の HTTP ステータス。 |
|
||
|
||
### `llm.workers[]` — ジョブ実行に使う接続先(必須)
|
||
|
||
| キー | 意味 |
|
||
|------|------|
|
||
| `id` | ワーカー識別子。 |
|
||
| `connection_type` | `direct`(Ollama/vLLM 等の OpenAI 互換 backend に直結)/ `aao_gateway`(別 Gateway 経由、Gateway Key 必須)。 |
|
||
| `endpoint` | OpenAI 互換 API のベース URL(例 `http://localhost:11434/v1`)。 |
|
||
| `model` | 使用モデル名(ワーカーごとに明示。`default_model` は廃止)。 |
|
||
| `api_key` | `aao_gateway` 時の virtual key 等(任意)。 |
|
||
| `roles` | 用途フィルタ: `auto`/`fast`/`quality`/`title`/`reflection` 等。`[title]` のみ=タイトル生成専用。 |
|
||
| `max_concurrency` | このワーカーの並列度。 |
|
||
| `vlm` | `true` で画像入力対応(ReadImage は VLM ワーカーを優先)。 |
|
||
| `enabled` | 有効/無効。 |
|
||
|
||
### `llm.metrics` — Prometheus exporter(worker 側)
|
||
|
||
| キー | 既定 | 意味 |
|
||
|------|------|------|
|
||
| `enabled` | true | `/metrics`(bridge HTTP, 既定 `PORT=9876`)に mount。 |
|
||
| `prefix` | `aao_worker` | メトリクス名 prefix。 |
|
||
| `bearer_token` | — | 設定すると Bearer 認証必須(`env:NAME` 形式可)。 |
|
||
| `allowed_hosts` | localhost のみ | 許可元 IP。本番は bearer か allowlist を必ず設定。 |
|
||
|
||
---
|
||
|
||
## `gateway` — LLM Gateway サーバー(任意)
|
||
|
||
MAESTRO 自身を OpenAI 互換の LLM Gateway として公開する(仮想キー・予算・メトリクス付き、複数 GPU/チーム共有向け)。**env 変数や接続種別が `AAO_*` / `aao_gateway` という歴史的な接頭辞を使う点に注意(AAO = この Gateway 機能の旧称)。** 詳細は [aao-gateway-overview.md](aao-gateway-overview.md)。
|
||
|
||
| キー | 既定 | 意味 |
|
||
|------|------|------|
|
||
| `enabled` | false | true で同 process gateway が起動(hot reload 対応)。 |
|
||
| `listen_port` | 4000 | separate-deploy 時のみ。 |
|
||
| `request_timeout_sec` | 600 | 1 リクエスト全体(streaming 込み)。 |
|
||
| `upstream_timeout_sec` | 30 | 各 upstream の TTFB 上限。 |
|
||
| `shutdown_graceful_sec` | 30 | SIGTERM 後の SSE drain 上限。 |
|
||
| `backends[]` | — | `id`/`endpoint`/`model`/`max_slots`/`api_key`。model 厳密一致で routing。 |
|
||
| `virtual_keys[]` | — | bootstrap/backup 用(`key`/`team`/`allowed_models`/`tokens_budget`/`rate_limit_rpm`)。新規発行は admin API 推奨。 |
|
||
| `metrics` | enabled | `prefix: aao_gateway`、team/key_prefix/backend ラベル。auth 必須運用。 |
|
||
|
||
Virtual Key の発行・rotation は admin REST API(`POST /api/admin/gateway/keys`)または UI(Settings → LLM → Gateway Server)で行う。
|
||
|
||
---
|
||
|
||
## `storage` — パス・容量
|
||
|
||
| キー | 既定 | 意味 |
|
||
|------|------|------|
|
||
| `worktree_dir` | ./data/workspaces | ジョブ作業ディレクトリのベース。 |
|
||
| `custom_pieces_dir` | — | リポジトリ内 `pieces/` に加えて読む Piece dir(任意)。 |
|
||
| `user_folder_root` | ./data/users | `{root}/{userId}/` に AGENTS.md/scripts/notes 等を保存。 |
|
||
| `task_upload_max_size_mb` | 50 | タスク/コメント body 上限(base64 込み。範囲 1–1000)。 |
|
||
| `trash_retention_days` | 30 | `trash/` の自動 sweep。0 で都度全削除。 |
|
||
|
||
---
|
||
|
||
## Execution — 並列度・上限・再試行
|
||
|
||
| キー | 既定 | 意味 |
|
||
|------|------|------|
|
||
| `concurrency` | 4 | 全ワーカー合算の最大並列ジョブ数(env `CONCURRENCY`)。 |
|
||
| `max_movements` | 200 | 1 ジョブ内の最大 movement 数(loop 防止)。 |
|
||
| `retry.max_attempts` | 3 | ジョブ失敗時の最大再試行。 |
|
||
| `retry.backoff_seconds` | [60,300,900] | 各 attempt 間の待機秒。 |
|
||
| `ask.max_per_job` | 2 | 1 ジョブの ASK(ユーザー質問)上限。 |
|
||
| `subtasks.max_depth` | 2 | SpawnSubTask のネスト最大深度。 |
|
||
| `subtasks.max_per_parent` | 10 | 1 ジョブが生成できるサブタスク最大数。 |
|
||
|
||
---
|
||
|
||
## `context` — LLM コンテキスト管理
|
||
|
||
| キー | 既定 | 意味 |
|
||
|------|------|------|
|
||
| `limit_tokens` | 自動取得→128000 | コンテキスト上限。省略時はプロバイダ API から自動取得。 |
|
||
| `thresholds[]` | 0.7=warn / 0.85=prompt / 0.95=force_transition | 使用率閾値ごとの動作。 |
|
||
|
||
---
|
||
|
||
## `safety` — 暴走防止・Bash サンドボックス
|
||
|
||
| キー | 既定 | 意味 |
|
||
|------|------|------|
|
||
| `max_iterations` | 200 | 1 movement 内の最大イテレーション。 |
|
||
| `max_revisits` | 3 | 同一 movement の最大再訪問。超過で ABORT。 |
|
||
| `prompt_guard_ratio` | 0.8 | プロンプトがコンテキスト上限の何%まで許容するか(0.5–0.95)。 |
|
||
| `history_summarization.enabled` | true | 古い turn を構造化要約に置換して粘る。 |
|
||
| `history_summarization.tail_turns` | 2 | 末尾何 turn を保護するか。 |
|
||
| `history_summarization.preserve_recent_budget` | 8000 | 末尾保護の最大トークン。 |
|
||
| `bash_unrestricted` | false | true で Bash のコマンド許可リストを撤廃(**サンドボックス機構は別途 `bash_sandbox` が制御**)。 |
|
||
| `bash_sandbox` | auto | Bash 隔離機構: `auto`(bwrap あれば使用、無ければ hardened-whitelist)/ `always`(bwrap 強制・不在なら起動失敗、本番推奨)/ `off`(bwrap 不使用、env スクラブは維持)。詳細 [operations/bash-sandbox-provisioning.md](operations/bash-sandbox-provisioning.md)。 |
|
||
|
||
---
|
||
|
||
## `search_filter` — WebSearch の機密情報漏洩防止
|
||
|
||
| キー | 既定 | 意味 |
|
||
|------|------|------|
|
||
| `blocked_patterns[]` | — | 完全一致で検索クエリから除去するパターン。 |
|
||
| `auto_block.private_ip` | true | 10/172.16-31/192.168/127.* を自動ブロック。 |
|
||
| `auto_block.internal_domain` | true | `.local`/`.internal`/`.lan`/`.intranet`/`.corp`/`.home`。 |
|
||
| `auto_block.email` / `phone` | true | メール/電話番号。 |
|
||
|
||
---
|
||
|
||
## `browser` — BrowseWeb ランタイム
|
||
|
||
| キー | 既定 | 意味 |
|
||
|------|------|------|
|
||
| `page_timeout` | 60000 | ページ遷移 timeout(ms)。 |
|
||
| `action_timeout` | 30000 | アクション timeout(ms)。 |
|
||
| `captcha_solve` | skip | `skip` / `novnc`(人手 CAPTCHA 解決)。 |
|
||
| `max_captcha_pages` | 5 | CAPTCHA ページ上限。 |
|
||
| `channel` | chromium | `chromium`/`chrome`/`msedge`。 |
|
||
| `executable_path` | — | ブラウザ実行ファイル(channel と排他)。 |
|
||
|
||
---
|
||
|
||
## `tools` — ツール設定
|
||
|
||
UI 上は Web & Search / Browser / Media & Documents / External Services / Legacy Knowledge に分かれるが YAML は `tools` 1 ブロック。主な項目:
|
||
|
||
**Web & Search**: `searxng_url`(WebSearch フォールバック先), `webfetch_timeout`(sec), `websearch_timeout`, `webfetch_allowed_hosts[]`(SSRF 例外: private IP/.local を許可する場合)。
|
||
|
||
**Media & Documents**: `vision_model`/`vision_base_url`/`vision_timeout`/`vision_max_tokens`(ReadImage 用 VLM), `ocr_model`, `office_{excel,docx,pdf}_max_size_mb`(既定 10), `office_pptx_max_size_mb`(50), `office_pptx_max_uncompressed_mb`(200, zip-bomb 検知), `speech_server_url`/`speech_timeout`/`speech_language`。
|
||
|
||
**External Services**: `x_*`(Twitter/X CLI 連携: `x_cli_command`/`x_auth_token`/`x_ct0`/`x_proxy`/`x_download_*` 等), `google_maps_api_key`/`maps_timeout`(未設定で Nominatim/OSRM), `amazon_affiliate_tag`/`keepa_api_key`。
|
||
|
||
**User scripts**: `user_scripts_enabled`(RunUserScript。plain runtime は Node `--permission` で sandbox 化), `user_scripts_allow_userids[]`。
|
||
|
||
**Legacy Knowledge**: `knowledge_service_url`(未設定で knowledge ツール無効), `knowledge_namespaces`(namespace ごとの api_key)。新規 namespace は MCP 経由を推奨。
|
||
|
||
---
|
||
|
||
## `notes` — Shared Knowledge Notes 注入
|
||
|
||
`data/users/{userId}/notes/` のノートをシステムプロンプトに注入。`inject.per_note_max_kb`(日本語は 4 推奨), `inject.total_max_kb`, `inject.over_budget_strategy`(`truncate_last`/`skip_remaining`/`degrade_to_search`)。
|
||
|
||
---
|
||
|
||
## `auth` — 認証(任意)
|
||
|
||
未設定なら認証なしで動作。
|
||
|
||
| キー | 意味 |
|
||
|------|------|
|
||
| `session_secret` | セッション署名鍵(ランダム文字列)。 |
|
||
| `session_max_age` | セッション有効期間(ms, 既定 86400000=24h)。 |
|
||
| `secure_cookie` | HTTPS 環境では true。 |
|
||
| `admin_emails[]` | admin ロールにするメール。 |
|
||
| `primary_provider` | `google` / `gitea`(両方有効時に明示)。 |
|
||
| `providers.google` | `client_id`/`client_secret`/`callback_url`。 |
|
||
| `providers.gitea` | `client_id`/`client_secret`/`base_url`/`callback_url`。ログイン時に Gitea org を取得し可視性に利用。 |
|
||
|
||
---
|
||
|
||
## `branding`(任意)
|
||
|
||
`app_name`/`primary_color`/`login_page_title`/`logo_url`/`favicon_url`/`footer_text`。Settings → System → Branding(admin)で GUI 編集可。`config.yaml`・`data/branding/` は gitignore 済み。
|
||
|
||
---
|
||
|
||
## `secrets`
|
||
|
||
`master_key_path`(既定 `./data/secrets/master.key`, 32 byte, 初回起動で自動生成・mode 0600)。SSH 鍵・MCP トークン等の暗号化に使う。
|
||
|
||
---
|
||
|
||
## `reflection` — 学習(既定 OFF)
|
||
|
||
ON で毎ジョブ完了後にユーザーメモリを LLM が自動更新(snapshot は revert 可)。`enabled`, `max_memory_changes_per_job`(3), `piece_edit_cooldown_hours`(24), `snapshot_retention_days`(90), `per_user_daily_budget_tokens`(200000)。
|
||
|
||
---
|
||
|
||
## `mcp` — Model Context Protocol
|
||
|
||
サーバーは admin UI(global)/各ユーザー(self-hosted)で管理。**`MCP_ENCRYPTION_KEY` env(64 hex)が必須。** `call_timeout_seconds`(60), `max_binary_size_mb`(20), `max_output_files_per_job`(10), `max_output_size_mb_per_job`(200), `tool_cache_ttl_seconds`(600), `oauth_pending_ttl_minutes`(10), `allow_private_addresses`(private 網の MCP server 用、既定 false)。
|
||
|
||
---
|
||
|
||
## `ssh` — SSH ツール(既定 OFF)
|
||
|
||
`enabled`, `allow_private_addresses`(global 既定、admin は per-connection grant 可), `call_timeout_seconds`(30), `max_output_bytes`(32768), `max_{upload,download}_size_mb`(100), `audit_retention_days`(90), `admin_bypasses_grants`(true), abuse 検知(`abuse_window_minutes`/`abuse_failure_threshold`/`abuse_lock_minutes`)。
|
||
|
||
**Interactive Console**(`ssh.console`): `enabled`, `idle_timeout_seconds`(1800), `max_session_duration_seconds`(14400), `scrollback_bytes`(524288), `max_sessions_per_connection`(3) ほか。手順は [ssh.md](ssh.md)。
|
||
|
||
---
|
||
|
||
## `notifications.push` — Web Push(V2, 任意)
|
||
|
||
HTTPS ホスティング必須(iOS は PWA インストール)。`enabled`, `vapid_subject`(RFC 8292), `vapid_current_path`(自動生成・mode 0600), `vapid_history_dir`, `payload_max_bytes`(3072, 上限 4096), `queue_concurrency`(8), `per_send_timeout_ms`(10000)。鍵ローテーション: `npm run vapid-rotate`。
|
||
|
||
---
|
||
|
||
## Environment variable overrides
|
||
|
||
一部設定は環境変数で上書きできる:
|
||
|
||
| 環境変数 | 上書き対象 |
|
||
|----------|------------|
|
||
| `OLLAMA_BASE_URL` | LLM エンドポイント |
|
||
| `OLLAMA_MODEL` | モデル名 |
|
||
| `WORKTREE_DIR` | `storage.worktree_dir` |
|
||
| `CONCURRENCY` | `concurrency` |
|
||
| `DB_PATH` | SQLite DB パス |
|
||
| `PORT` | bridge HTTP ポート(既定 9876) |
|
||
| `LOG_LEVEL` | `debug`/`info`/`warn`/`error`(既定 info) |
|
||
| `MCP_ENCRYPTION_KEY` | MCP/SSH 秘密の暗号化鍵(MCP 利用時必須) |
|