# config.json 限制值

`config.json` 可調高的 runtime 限制，以及無法由它改變的套件層預設值。

缺少的 `reply_lang`、`output_dir` 與 `model_tag` 會以預設值補齊並於啟動時寫回。v1.1.2 起缺少的限制欄位不再補寫，且限制值只能調高：實際值為 `max(設定值, 預設值)`，小於預設的值會被忽略。

| 鍵 | 預設 | 說明 |
|---|---:|---|
| `limits.max_tool_iterations` | `256` | 單次執行的 tool 迭代上限（v1.1.2 前為 `128`） |
| `limits.agent_send_timeout_seconds` | `600` | 模型請求 timeout |
| `limits.max_history_messages` | `16` | 保留的近期歷史訊息數（v1.1.2 前為 `24`） |
| `limits.max_history_bytes` | `4194304` | 歷史大小上限。v1.0.12 由 `5242880` 改為 `MAX_DOCUMENT_BYTES * 4`，即單一文件 1 MiB 上限的四倍 |

**不從** `config.json` 讀取的套件層預設值（v1.1.2 起全部集中於 `configs/configs.go`）：

| 常數 | 預設 | 說明 |
|---|---:|---|
| `MAX_SESSION_TASKS` | `max(NumCPU / 2, 3)` | 每個 session 的並行任務數；超出者排隊而非失敗（v1.1.2 至 v1.2.3 為 `3`，v1.1.2 前為 `NumCPU × 4`） |
| `MAX_CONCURRENT_SUBAGENTS` | `max(NumCPU / 2, 3)` | 同時執行的 subagent leg 數；其餘排隊（v1.3.0 前為 `3`） |
| `MAX_SUBAGENT_TIMEOUT_MIN` | `30` | Subagent timeout（分鐘） |
| `MAX_RESUME_WAIT_MIN` | `60` | 待處理續跑等待回答的時間上限 |
| `MAX_CONCURRENT_TOOLS` | `max(NumCPU / 2, 3)` | 單一模型回合內同時執行的 tool call 數；其餘排隊（v1.0.20；v1.3.0 前為 `5`） |
| `MAX_BACKGROUND_TASKS` | `max(NumCPU / 2, 3)` | v1.3.0 新增。單一 session 同時執行的背景指令與背景 subagent leg 數；超出者直接拒絕（`run_websocket` 串流移除於 v1.3.2） |
| `MAX_BACKGROUND_TIMEOUT_MIN` | `60` | v1.3.0 新增。`background_command` 的 `timeout_min` 上限與預設值（`run_command_background` 與 `run_websocket` 移除於 v1.3.2） |
| `BACKGROUND_THRESHOLD_MIN` | `5` | 預期執行超過此分鐘數、且輸出不影響下一步的工作改用 `background_command` 而非 `run_command` |
| `WATCH_SETTLE_SEC` / `WATCH_SETTLE_MAX_SEC` | `2` / `10` | `background_command` 輸出命中錯誤關鍵字後，watcher 等輸出靜止 2 秒（最多 10 秒）才回報 |
| `WATCH_REPORT_COOLDOWN_SEC` | `30` | 每個指令每 30 秒最多回報一次 |
| `WATCH_BUFFER_MAX_BYTES` / `WATCH_LINE_MAX_BYTES` / `WATCH_REPORT_MAX_BYTES` | `32 KiB` / `8 KiB` / `8 KiB` | Watch 緩衝區、單行上限，以及單次回報附帶的最新輸出上限 |

Daemon port **不可設定**：`17989` 為套件常數，`limits.port` 條目會被忽略。

Runtime 限制**沒有環境變數**——env 覆寫已移除，`config.json` 是唯一調整點。
