--- name: bounding-subagent-runtime description: "Cap and diagnose runaway or hung omp subagents: task.maxRuntimeMs, softRequestBudget, maxConcurrency, maxRecursionDepth (the 0-trap), per-provider in-flight ceilings." --- ## When Subagent runs long, fan out too wide, or you must (re)declare the fleet's subagent limit policy. Also when asked "what limits can subagents have". ## Read first - Repo KB page `omp-docs/pi/subagent-limits.md` — the live policy of record (values + rationale + deliberately-not-set list). Do not re-derive; read it. - `cfg://task` and `cfg://providers/maxInFlightRequests` — effective values, not the stock defaults. ## The knobs (cfg:// writes; `/save` suffix persists) | Knob | Effect | Gotcha | |---|---|---| | `task.maxConcurrency` | session semaphore; excess queues | stock default 32 — "2" is not a default | | `task.maxRecursionDepth` | nesting cap | predicate is `depth < n`; **1 = children cannot spawn (correct for "no nesting"); 0 disables spawning for the MAIN session too — never reach for 0**; negative = unlimited | | `task.maxRuntimeMs` | hard wall clock, overrun = `aborted` | default 0 = off | | `task.softRequestBudget` | wrap-up notice at N, force-yield at 1.5N | scout/sonic may impose lower built-ins | | `task.agentIdleTtlMs` | park idle finished agents | `<= 0` disables parking | | `providers.maxInFlightRequests` | concurrent LLM requests per provider id | keys are the quoted block labels from `agent/models.yml` (e.g. `"llamacpp (dankclaw-3090)"`), flat map lookup; absent/≤0 = unlimited; scope = this machine's config root only — other workstations and non-omp clients are NOT counted; excess queues | | `tools.maxTimeout` | ceiling on any agent-requested tool timeout | kills `timeout: 0` runaways | | `task.isolation.enabled` | makes per-spawn `isolated` flag available | opt-in per spawn, not a blanket sandbox; needs git repo; off in plan mode | | `task.completionProbe` | periodic completeness side-requests | token sink on shared endpoints | ## Verify semantics from the bundle, not the label Setting descriptions lie by omission. `~/.bun/install/global/node_modules/@oh-my-pi/pi-coding-agent/dist/cli.js`: - depth gate: `grep -o '.\{130\}xC\b.\{130\}'` finds `U_(n,s)`; `grep -o 'function U_(e,t){.\{0,60\}'` → `e<0||t