@miller-tech/uap 2.21.3 → 2.36.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (328) hide show
  1. package/README.md +22 -10
  2. package/config/model-profiles/qwen38-coder390.json +46 -0
  3. package/config/model-profiles/qwen38.json +3 -2
  4. package/config/model-registry.json +110 -0
  5. package/dist/.tsbuildinfo +1 -1
  6. package/dist/benchmarks/paired/types.d.ts +2 -2
  7. package/dist/bin/cli.js +315 -20
  8. package/dist/bin/cli.js.map +1 -1
  9. package/dist/cli/attention.d.ts +6 -0
  10. package/dist/cli/attention.d.ts.map +1 -0
  11. package/dist/cli/attention.js +115 -0
  12. package/dist/cli/attention.js.map +1 -0
  13. package/dist/cli/bench-report.d.ts +82 -0
  14. package/dist/cli/bench-report.d.ts.map +1 -0
  15. package/dist/cli/bench-report.js +237 -0
  16. package/dist/cli/bench-report.js.map +1 -0
  17. package/dist/cli/clients.d.ts +6 -0
  18. package/dist/cli/clients.d.ts.map +1 -0
  19. package/dist/cli/clients.js +142 -0
  20. package/dist/cli/clients.js.map +1 -0
  21. package/dist/cli/dashboard-grants.d.ts +26 -0
  22. package/dist/cli/dashboard-grants.d.ts.map +1 -0
  23. package/dist/cli/dashboard-grants.js +69 -0
  24. package/dist/cli/dashboard-grants.js.map +1 -0
  25. package/dist/cli/dashboard-pace.d.ts +31 -0
  26. package/dist/cli/dashboard-pace.d.ts.map +1 -0
  27. package/dist/cli/dashboard-pace.js +42 -0
  28. package/dist/cli/dashboard-pace.js.map +1 -0
  29. package/dist/cli/dashboard-session.d.ts +25 -0
  30. package/dist/cli/dashboard-session.d.ts.map +1 -0
  31. package/dist/cli/dashboard-session.js +814 -0
  32. package/dist/cli/dashboard-session.js.map +1 -0
  33. package/dist/cli/dashboard-types.d.ts +18 -0
  34. package/dist/cli/dashboard-types.d.ts.map +1 -0
  35. package/dist/cli/dashboard-types.js +9 -0
  36. package/dist/cli/dashboard-types.js.map +1 -0
  37. package/dist/cli/dashboard.d.ts +2 -18
  38. package/dist/cli/dashboard.d.ts.map +1 -1
  39. package/dist/cli/dashboard.js +43 -793
  40. package/dist/cli/dashboard.js.map +1 -1
  41. package/dist/cli/deliver.d.ts +35 -0
  42. package/dist/cli/deliver.d.ts.map +1 -1
  43. package/dist/cli/deliver.js +93 -9
  44. package/dist/cli/deliver.js.map +1 -1
  45. package/dist/cli/diff.d.ts +85 -0
  46. package/dist/cli/diff.d.ts.map +1 -0
  47. package/dist/cli/diff.js +293 -0
  48. package/dist/cli/diff.js.map +1 -0
  49. package/dist/cli/eta.d.ts +35 -0
  50. package/dist/cli/eta.d.ts.map +1 -0
  51. package/dist/cli/eta.js +101 -0
  52. package/dist/cli/eta.js.map +1 -0
  53. package/dist/cli/handsfree.d.ts +7 -0
  54. package/dist/cli/handsfree.d.ts.map +1 -1
  55. package/dist/cli/handsfree.js +27 -0
  56. package/dist/cli/handsfree.js.map +1 -1
  57. package/dist/cli/hooks.d.ts.map +1 -1
  58. package/dist/cli/hooks.js +126 -5
  59. package/dist/cli/hooks.js.map +1 -1
  60. package/dist/cli/loops.d.ts +24 -5
  61. package/dist/cli/loops.d.ts.map +1 -1
  62. package/dist/cli/loops.js +92 -12
  63. package/dist/cli/loops.js.map +1 -1
  64. package/dist/cli/models.d.ts +62 -0
  65. package/dist/cli/models.d.ts.map +1 -0
  66. package/dist/cli/models.js +567 -0
  67. package/dist/cli/models.js.map +1 -0
  68. package/dist/cli/plan.d.ts +9 -0
  69. package/dist/cli/plan.d.ts.map +1 -1
  70. package/dist/cli/plan.js +57 -4
  71. package/dist/cli/plan.js.map +1 -1
  72. package/dist/cli/proxy-relay.d.ts +55 -0
  73. package/dist/cli/proxy-relay.d.ts.map +1 -0
  74. package/dist/cli/proxy-relay.js +116 -0
  75. package/dist/cli/proxy-relay.js.map +1 -0
  76. package/dist/cli/proxy.d.ts +4 -0
  77. package/dist/cli/proxy.d.ts.map +1 -1
  78. package/dist/cli/proxy.js +26 -1
  79. package/dist/cli/proxy.js.map +1 -1
  80. package/dist/cli/sandbox.d.ts +101 -4
  81. package/dist/cli/sandbox.d.ts.map +1 -1
  82. package/dist/cli/sandbox.js +393 -44
  83. package/dist/cli/sandbox.js.map +1 -1
  84. package/dist/cli/self.d.ts +13 -0
  85. package/dist/cli/self.d.ts.map +1 -0
  86. package/dist/cli/self.js +94 -0
  87. package/dist/cli/self.js.map +1 -0
  88. package/dist/cli/systemd-services.d.ts +2 -8
  89. package/dist/cli/systemd-services.d.ts.map +1 -1
  90. package/dist/cli/systemd-services.js +5 -20
  91. package/dist/cli/systemd-services.js.map +1 -1
  92. package/dist/cli/task.js +1 -1
  93. package/dist/cli/task.js.map +1 -1
  94. package/dist/cli/wizard-config.d.ts.map +1 -1
  95. package/dist/cli/wizard-config.js +31 -2
  96. package/dist/cli/wizard-config.js.map +1 -1
  97. package/dist/config/settings-registry.d.ts +1 -1
  98. package/dist/config/settings-registry.d.ts.map +1 -1
  99. package/dist/config/settings-registry.js +108 -0
  100. package/dist/config/settings-registry.js.map +1 -1
  101. package/dist/coordination/capability-router.js +2 -2
  102. package/dist/coordination/capability-router.js.map +1 -1
  103. package/dist/coordination/database.d.ts +13 -0
  104. package/dist/coordination/database.d.ts.map +1 -1
  105. package/dist/coordination/database.js +63 -7
  106. package/dist/coordination/database.js.map +1 -1
  107. package/dist/coordination/eta-inject.d.ts +32 -0
  108. package/dist/coordination/eta-inject.d.ts.map +1 -0
  109. package/dist/coordination/eta-inject.js +64 -0
  110. package/dist/coordination/eta-inject.js.map +1 -0
  111. package/dist/coordination/reactor.d.ts.map +1 -1
  112. package/dist/coordination/reactor.js +14 -0
  113. package/dist/coordination/reactor.js.map +1 -1
  114. package/dist/coordination/service.d.ts +18 -8
  115. package/dist/coordination/service.d.ts.map +1 -1
  116. package/dist/coordination/service.js +38 -28
  117. package/dist/coordination/service.js.map +1 -1
  118. package/dist/dashboard/client-registry.d.ts +163 -0
  119. package/dist/dashboard/client-registry.d.ts.map +1 -0
  120. package/dist/dashboard/client-registry.js +549 -0
  121. package/dist/dashboard/client-registry.js.map +1 -0
  122. package/dist/dashboard/controls.d.ts.map +1 -1
  123. package/dist/dashboard/controls.js +33 -4
  124. package/dist/dashboard/controls.js.map +1 -1
  125. package/dist/dashboard/data-seeder.d.ts +10 -7
  126. package/dist/dashboard/data-seeder.d.ts.map +1 -1
  127. package/dist/dashboard/data-seeder.js +31 -75
  128. package/dist/dashboard/data-seeder.js.map +1 -1
  129. package/dist/dashboard/data-service.d.ts +9 -0
  130. package/dist/dashboard/data-service.d.ts.map +1 -1
  131. package/dist/dashboard/data-service.js +32 -3
  132. package/dist/dashboard/data-service.js.map +1 -1
  133. package/dist/dashboard/placement-routes.d.ts +119 -0
  134. package/dist/dashboard/placement-routes.d.ts.map +1 -0
  135. package/dist/dashboard/placement-routes.js +331 -0
  136. package/dist/dashboard/placement-routes.js.map +1 -0
  137. package/dist/dashboard/server.d.ts.map +1 -1
  138. package/dist/dashboard/server.js +408 -2
  139. package/dist/dashboard/server.js.map +1 -1
  140. package/dist/delivery/attention.d.ts +130 -0
  141. package/dist/delivery/attention.d.ts.map +1 -0
  142. package/dist/delivery/attention.js +341 -0
  143. package/dist/delivery/attention.js.map +1 -0
  144. package/dist/delivery/decompose.d.ts +18 -0
  145. package/dist/delivery/decompose.d.ts.map +1 -1
  146. package/dist/delivery/decompose.js +22 -1
  147. package/dist/delivery/decompose.js.map +1 -1
  148. package/dist/delivery/eta-estimate.d.ts +111 -0
  149. package/dist/delivery/eta-estimate.d.ts.map +1 -0
  150. package/dist/delivery/eta-estimate.js +171 -0
  151. package/dist/delivery/eta-estimate.js.map +1 -0
  152. package/dist/delivery/eta.d.ts +23 -0
  153. package/dist/delivery/eta.d.ts.map +1 -0
  154. package/dist/delivery/eta.js +59 -0
  155. package/dist/delivery/eta.js.map +1 -0
  156. package/dist/delivery/orchestrated-mission.d.ts +10 -0
  157. package/dist/delivery/orchestrated-mission.d.ts.map +1 -1
  158. package/dist/delivery/orchestrated-mission.js +15 -1
  159. package/dist/delivery/orchestrated-mission.js.map +1 -1
  160. package/dist/delivery/plan-check.d.ts +7 -1
  161. package/dist/delivery/plan-check.d.ts.map +1 -1
  162. package/dist/delivery/plan-check.js +23 -2
  163. package/dist/delivery/plan-check.js.map +1 -1
  164. package/dist/delivery/run-state.d.ts +1 -1
  165. package/dist/delivery/run-state.d.ts.map +1 -1
  166. package/dist/delivery/run-state.js +8 -1
  167. package/dist/delivery/run-state.js.map +1 -1
  168. package/dist/delivery/task-orchestrator.d.ts +8 -3
  169. package/dist/delivery/task-orchestrator.d.ts.map +1 -1
  170. package/dist/delivery/task-orchestrator.js +75 -43
  171. package/dist/delivery/task-orchestrator.js.map +1 -1
  172. package/dist/delivery/task-sync.d.ts +21 -0
  173. package/dist/delivery/task-sync.d.ts.map +1 -1
  174. package/dist/delivery/task-sync.js +44 -8
  175. package/dist/delivery/task-sync.js.map +1 -1
  176. package/dist/delivery/task-workspace.d.ts +3 -3
  177. package/dist/delivery/task-workspace.js +3 -3
  178. package/dist/generators/self-card.d.ts +65 -0
  179. package/dist/generators/self-card.d.ts.map +1 -0
  180. package/dist/generators/self-card.js +256 -0
  181. package/dist/generators/self-card.js.map +1 -0
  182. package/dist/inference/probe.js +1 -1
  183. package/dist/inference/probe.js.map +1 -1
  184. package/dist/memory/prepopulate.d.ts.map +1 -1
  185. package/dist/memory/prepopulate.js +2 -0
  186. package/dist/memory/prepopulate.js.map +1 -1
  187. package/dist/models/analytics.d.ts +32 -0
  188. package/dist/models/analytics.d.ts.map +1 -1
  189. package/dist/models/analytics.js +68 -5
  190. package/dist/models/analytics.js.map +1 -1
  191. package/dist/models/plan-readability.d.ts +55 -0
  192. package/dist/models/plan-readability.d.ts.map +1 -0
  193. package/dist/models/plan-readability.js +339 -0
  194. package/dist/models/plan-readability.js.map +1 -0
  195. package/dist/placement/admission.d.ts +59 -0
  196. package/dist/placement/admission.d.ts.map +1 -0
  197. package/dist/placement/admission.js +197 -0
  198. package/dist/placement/admission.js.map +1 -0
  199. package/dist/placement/auto.d.ts +44 -0
  200. package/dist/placement/auto.d.ts.map +1 -0
  201. package/dist/placement/auto.js +212 -0
  202. package/dist/placement/auto.js.map +1 -0
  203. package/dist/placement/enforce.d.ts +128 -0
  204. package/dist/placement/enforce.d.ts.map +1 -0
  205. package/dist/placement/enforce.js +655 -0
  206. package/dist/placement/enforce.js.map +1 -0
  207. package/dist/placement/idle.d.ts +50 -0
  208. package/dist/placement/idle.d.ts.map +1 -0
  209. package/dist/placement/idle.js +213 -0
  210. package/dist/placement/idle.js.map +1 -0
  211. package/dist/placement/ledger.d.ts +323 -0
  212. package/dist/placement/ledger.d.ts.map +1 -0
  213. package/dist/placement/ledger.js +263 -0
  214. package/dist/placement/ledger.js.map +1 -0
  215. package/dist/placement/preview.d.ts +51 -0
  216. package/dist/placement/preview.d.ts.map +1 -0
  217. package/dist/placement/preview.js +61 -0
  218. package/dist/placement/preview.js.map +1 -0
  219. package/dist/placement/probes.d.ts +47 -0
  220. package/dist/placement/probes.d.ts.map +1 -0
  221. package/dist/placement/probes.js +207 -0
  222. package/dist/placement/probes.js.map +1 -0
  223. package/dist/placement/proxy-env.d.ts +21 -0
  224. package/dist/placement/proxy-env.d.ts.map +1 -0
  225. package/dist/placement/proxy-env.js +42 -0
  226. package/dist/placement/proxy-env.js.map +1 -0
  227. package/dist/placement/registry.d.ts +1038 -0
  228. package/dist/placement/registry.d.ts.map +1 -0
  229. package/dist/placement/registry.js +274 -0
  230. package/dist/placement/registry.js.map +1 -0
  231. package/dist/policies/liveness.d.ts +6 -8
  232. package/dist/policies/liveness.d.ts.map +1 -1
  233. package/dist/policies/liveness.js +6 -25
  234. package/dist/policies/liveness.js.map +1 -1
  235. package/dist/policies/sandbox-anchor.d.ts +91 -0
  236. package/dist/policies/sandbox-anchor.d.ts.map +1 -0
  237. package/dist/policies/sandbox-anchor.js +187 -0
  238. package/dist/policies/sandbox-anchor.js.map +1 -0
  239. package/dist/policies/sandbox-grants.d.ts +131 -0
  240. package/dist/policies/sandbox-grants.d.ts.map +1 -0
  241. package/dist/policies/sandbox-grants.js +562 -0
  242. package/dist/policies/sandbox-grants.js.map +1 -0
  243. package/dist/state/manifest.d.ts +4 -2
  244. package/dist/state/manifest.d.ts.map +1 -1
  245. package/dist/state/manifest.js +32 -16
  246. package/dist/state/manifest.js.map +1 -1
  247. package/dist/utils/checkout-root.d.ts +2 -0
  248. package/dist/utils/checkout-root.d.ts.map +1 -0
  249. package/dist/utils/checkout-root.js +43 -0
  250. package/dist/utils/checkout-root.js.map +1 -0
  251. package/dist/utils/resolve-uap-bin.d.ts +5 -0
  252. package/dist/utils/resolve-uap-bin.d.ts.map +1 -0
  253. package/dist/utils/resolve-uap-bin.js +33 -0
  254. package/dist/utils/resolve-uap-bin.js.map +1 -0
  255. package/dist/utils/terminal-safe.d.ts +12 -0
  256. package/dist/utils/terminal-safe.d.ts.map +1 -0
  257. package/dist/utils/terminal-safe.js +53 -0
  258. package/dist/utils/terminal-safe.js.map +1 -0
  259. package/docs/ATTRIBUTION.md +1 -0
  260. package/docs/DASHBOARD_UPLIFT_SPEC.md +8 -8
  261. package/docs/INDEX.md +6 -5
  262. package/docs/architecture/OVERVIEW.md +15 -3
  263. package/docs/architecture/PROTOCOL.md +7 -1
  264. package/docs/architecture/adr/0006-operator-directed-model-placement.md +86 -0
  265. package/docs/architecture/adr/0007-auto-displacement-allowlist-as-standing-consent.md +79 -0
  266. package/docs/architecture/adr/0008-fleet-clients-link-out.md +92 -0
  267. package/docs/architecture/adr/0009-completion-triggered-dispatch-and-per-leaf-model-dials.md +71 -0
  268. package/docs/architecture/adr/0010-attention-queue-and-afk-auto-decider.md +159 -0
  269. package/docs/architecture/adr/0011-sandbox-grants-and-network-egress-boundary.md +219 -0
  270. package/docs/architecture/adr/0012-operator-legibility-surfaces.md +175 -0
  271. package/docs/getting-started/INSTALLATION.md +1 -1
  272. package/docs/guides/AUTOMATIC_FEATURES.md +8 -0
  273. package/docs/guides/LOCAL_MODELS.md +1 -1
  274. package/docs/guides/PROXY.md +2 -1
  275. package/docs/guides/SANDBOX.md +91 -4
  276. package/docs/integrations/MCP_ROUTER.md +1 -1
  277. package/docs/plans/model-performance-proof-options.md +176 -0
  278. package/docs/reference/API.md +1 -1
  279. package/docs/reference/CLI.md +169 -4
  280. package/docs/reference/COMPARISON.md +1 -1
  281. package/docs/reference/CONFIGURATION.md +12 -3
  282. package/docs/reference/CONFIGURATION_REFERENCE.md +269 -14
  283. package/docs/reference/DATABASE_SCHEMA.md +1 -1
  284. package/docs/reference/FEATURES.md +15 -3
  285. package/docs/reference/PATTERNS.md +1 -1
  286. package/docs/reference/PLATFORMS.md +14 -1
  287. package/docs/specs/operator-model-placement.md +1314 -0
  288. package/docs/specs/operator-model-placement.review.md +339 -0
  289. package/package.json +2 -2
  290. package/scripts/maintenance/publish-npm.sh +23 -11
  291. package/scripts/version-bump.sh +6 -51
  292. package/src/policies/enforcers/__pycache__/_common.cpython-311.pyc +0 -0
  293. package/src/policies/enforcers/__pycache__/expert_review_required.cpython-311.pyc +0 -0
  294. package/src/policies/enforcers/__pycache__/quality_metrics_gate.cpython-311.pyc +0 -0
  295. package/src/policies/schemas/policies/mandatory-testing-deployment.md +2 -5
  296. package/templates/hooks/__pycache__/deliver_autoroute.cpython-311.pyc +0 -0
  297. package/templates/hooks/session-start.sh +44 -0
  298. package/tools/agents/UAP/cli.py +14 -3
  299. package/tools/agents/UAP/paths.py +50 -0
  300. package/tools/agents/scripts/__pycache__/toolcall_path_normalizer.cpython-311.pyc +0 -0
  301. package/tools/agents/scripts/anthropic_proxy.py +1386 -99
  302. package/tools/agents/scripts/toolcall_path_normalizer.py +46 -1
  303. package/tools/agents/tests/test_anthropic_proxy_streaming.py +29 -6
  304. package/tools/agents/tests/test_doubling_break.py +64 -5
  305. package/tools/agents/tests/test_error_loop_break.py +10 -4
  306. package/tools/agents/tests/test_error_loop_ignores_correctives.py +13 -2
  307. package/tools/agents/tests/test_lockstep_escalation.py +280 -9
  308. package/tools/agents/tests/test_path_containment.py +94 -0
  309. package/tools/agents/tests/test_proxy_unix_socket.py +162 -0
  310. package/tools/agents/tests/test_signature_quality.py +349 -0
  311. package/tools/agents/tests/test_uap_compliance.py +11 -1
  312. package/web/dash/core.js +1 -0
  313. package/web/dash/tab-clients.js +196 -0
  314. package/web/dash/tab-models.js +387 -8
  315. package/web/dash/tab-policies.js +87 -4
  316. package/web/dash/tabs.js +77 -73
  317. package/web/dashboard.html +6 -0
  318. package/src/policies/enforcers/__pycache__/_common.cpython-312.pyc +0 -0
  319. package/src/policies/enforcers/__pycache__/expert_review_required.cpython-312.pyc +0 -0
  320. package/src/policies/enforcers/__pycache__/quality_metrics_gate.cpython-312.pyc +0 -0
  321. package/templates/hooks/__pycache__/deliver_autoroute.cpython-312.pyc +0 -0
  322. package/tools/agents/scripts/__pycache__/toolcall_path_normalizer.cpython-312.pyc +0 -0
  323. package/web/dash/tab-agents.js +0 -21
  324. package/web/dash/tab-deliver.js +0 -12
  325. package/web/dash/tab-memory.js +0 -12
  326. package/web/dash/tab-orchestration.js +0 -21
  327. package/web/dash/tab-overview.js +0 -21
  328. package/web/dash/tab-tasks.js +0 -21
@@ -1,7 +1,7 @@
1
1
  # UAP CLI Reference
2
2
 
3
3
  > Complete command reference for the Universal Agent Protocol command-line interface (`uap`).
4
- > Version v1.224.0.
4
+ > Version v2.31.0.
5
5
 
6
6
  > **🏭 Where this fits:** Every station — this is the control panel for the whole
7
7
  > line. **What it delivers:** one binary that drives each stage of your
@@ -43,6 +43,8 @@ runs, keeping `--help` fast.
43
43
  | [`deliver`](#deliver) | Convergence loop: iterate a model against gates until delivery |
44
44
  | [`harness`](#harness) | HALO harness optimization over execution traces |
45
45
  | [`bench`](#bench) | Controlled paired (UAP-on vs UAP-off) benchmark with CIs |
46
+ | [`eta`](#eta) | Measured pace: the EWMA ETA from this project's own recorded attempts |
47
+ | [`diff`](#diff) | Local diff view: uncommitted + untracked + unpushed at a glance |
46
48
  | [`self-harness`](#self-harness) | Self-improving harness: mine failures → propose → validate → commit |
47
49
  | [`tune`](#tune) | LLM self-tuning: raise a small model toward Opus by tuning UAP flags |
48
50
  | [`verify`](#verify) | Runtime verification gate: prove changed code actually runs |
@@ -72,7 +74,9 @@ runs, keeping `--help` fast.
72
74
  | [`schema-diff`](#schema-diff) | Detect breaking schema changes between branches |
73
75
  | [`policy`](#policy) | UAP policy management |
74
76
  | [`quality`](#quality) | Quality-metrics gate: complexity, coverage, CRAP, mutation, duplication, any-types |
75
- | `plan` | Validate + record plan validation (validate-plan-on-change gate): `uap plan validate [file]` reviews the plan, then stamps |
77
+ | `plan` | Validate + record plan validation (validate-plan-on-change gate): `uap plan validate [file]` runs the deterministic readability scan + model review, then stamps |
78
+ | `self` | Self-knowledge card: build the version-pinned digest of UAP's own command/feature surface (`uap self card`), and answer "how do I X" offline (`uap self query "<question>"`) |
79
+ | `attention` | Operator attention queue: decisions waiting on you (`list`), answer them (`decide`), and the AFK auto-decider that adopts recorded safe defaults (`sweep`) |
76
80
  | `principles` | Engineering principles: show them, and answer the backward-compatibility stance (`status \| ask \| compat \| maturity \| show`) |
77
81
  | `fidelity` | Inspect or set the maximum-fidelity verification mode (raised gates + always-on visual/vision review) |
78
82
  | `interaction` | Interaction gate: derive probes from the requirements and play the artifact through them |
@@ -82,6 +86,7 @@ runs, keeping `--help` fast.
82
86
  | `self-harness mine-prod` | Mine weaknesses from production traces (HALO + proxy log) and enqueue proposals for gated validation (never applies) |
83
87
  | `self-harness pending` | List queued proposals awaiting validation + gate (from mine-prod) |
84
88
  | `bench paired` | Run the paired A/B over a real-gate suite; reports accuracy + efficiency deltas with CIs |
89
+ | `bench report` | Read the newest paired run (deltas with CI/verdict/discrimination); `--compare` for run-to-run drift |
85
90
  | `self-harness prune` | Ablation-prune: drop stale / no-longer-paying-off transfer + pending entries |
86
91
  | `self-harness run` | Autonomous loop: mine → propose → validate (real paired bench per Mod) → decide → (with `--apply`) commit + versioned snapshot |
87
92
  | `self-harness transfer` | List the cross-model transfer store (accepted/rejected Mods keyed by failure signature) |
@@ -489,16 +494,72 @@ with confidence intervals, a McNemar gate-value 2×2, and a cost–accuracy Pare
489
494
  | Subcommand | Key flags | Purpose |
490
495
  |------------|-----------|---------|
491
496
  | `paired` | `--suite`, `--adapter <mock\|opencode\|claude\|mini\|raw\|deliver>`, `--model`, `--epochs`, `--concurrency`, `--ablation`, `--lazy`, `--seed`, `--iterations`, `--rope-margin`, `--out`, `--json` | Run the UAP-on vs UAP-off A/B; writes `records.jsonl` + Markdown/JSON reports |
497
+ | `report` | `--dir`, `--compare`, `--full`, `--json` | Read the newest paired report (or `--dir`); `--compare` shows run-to-run delta drift. Deltas always carry their CI, verdict, and discrimination status |
492
498
 
493
499
  ```bash
494
500
  uap bench paired --adapter opencode --model qwen36-a3b --epochs 5
495
501
  uap bench paired --ablation # leave-one-out per UAP component
502
+ uap bench report # what did the latest run measure
503
+ uap bench report --compare # did the delta hold since the last run
496
504
  ```
497
505
 
498
506
  See [Paired Harness](../benchmarks/PAIRED_HARNESS.md) for the methodology.
499
507
 
500
508
  ---
501
509
 
510
+ ## `eta`
511
+
512
+ Measured pace: the EWMA ETA for a (model, taskType,
513
+ complexity) key, built **only** from this project's own recorded attempts
514
+ (the ETA sample stream in the model-analytics store). Recent attempts weigh
515
+ more (half-life in samples, default 10); the sample count, the spread, and
516
+ the failure rate always travel with the number — a pace without provenance
517
+ is exactly the confident guess this replaces. Fewer than 3 successful
518
+ attempts is **not an estimate**: the command says so instead of guessing.
519
+ 3–5 samples is `thin` (shown with the caveat); 6+ is `solid`. `--all` lists
520
+ every key with history and **names the keys that are still too thin**
521
+ instead of silently omitting them.
522
+
523
+ | Flag | Purpose |
524
+ |------|---------|
525
+ | `--model <id>` | Model id (default: the active/executor model) |
526
+ | `--taskType <t>` / `--complexity <c>` | Sample key (default `orchestrated`/`medium`) |
527
+ | `--all` | Every key with history: estimates + too-thin keys by name (capped at the 50 most-active keys, truncation named); `--json` with `--all` emits `{keys, estimates, truncated}` |
528
+ | `--limit <n>` / `--half-life <n>` | Sample window (default 50) / EWMA half-life in samples (default 10) — garbage input is refused loudly, never folded |
529
+ | `--db <path>` | Pin the analytics DB path (odd layouts; the default is the project store) |
530
+ | `--json` | Machine-readable: `{key, estimate}` for one key, `{keys, estimates, truncated}` for `--all` |
531
+
532
+ ```bash
533
+ uap eta # the active model's pace for orchestrated/medium
534
+ uap eta --all # every key; too-thin keys named, not hidden
535
+ ```
536
+
537
+ ---
538
+
539
+ ## `diff`
540
+
541
+ Local diff view: what the agent changed around here, in one
542
+ honest render — uncommitted rows (staged + unstaged vs HEAD) with per-file
543
+ +N/-N and git status glyphs, untracked paths, honest totals, and unpushed
544
+ commits vs the base with ahead/behind and aggregate deltas. Binary files
545
+ render `±` (unknown), never `0`. Safe-git only: execFileSync argument
546
+ arrays, a 5s timeout, and the stateful caches (fsmonitor, untrackedCache)
547
+ defeated. Outside a repository it prints an explicit `git:` error line —
548
+ never a stack trace, never silence.
549
+
550
+ | Flag | Purpose |
551
+ |------|---------|
552
+ | `--base <ref>` | Base ref for the unpushed view (default `master`) |
553
+ | `--max <n>` | Per-section file cap (default 40) |
554
+ | `--json` | The raw facts as JSON |
555
+
556
+ ```bash
557
+ uap diff # the working-tree + unpushed picture
558
+ uap diff --base origin/master # against a different base
559
+ ```
560
+
561
+ ---
562
+
502
563
  ## `self-harness`
503
564
 
504
565
  Self-improving harness: mine model-specific failures from traces, propose a
@@ -640,6 +701,9 @@ Ports/hosts: `UAP_DASH_PORT` (3847), `UAP_DASH_HOST` (localhost),
640
701
  | `--client <id>` | Client/session id (defaults to the session env or parent pid) |
641
702
  | `--client-pid <n>` | Long-lived agent pid for liveness (hooks pass `$PPID`) |
642
703
  | `--port <n>` | Proxy port (default 4000 / `$PROXY_PORT`) |
704
+ | `--socket <path>` | `connect`: proxy AF_UNIX socket (default `$UAP_PROXY_SOCKET`) |
705
+ | `--ready-file <path>` | `connect`: touch this file (with the bound port) once listening |
706
+ | `--allow-anyone` | `connect`: REQUIRED consent — see the warning below |
643
707
  | `--if-enabled` | No-op unless `.uap.json` `proxy.autostart` is true (hook-safe) |
644
708
  | `--no-dashboard` | Don't start the ride-along dashboard on this `ensure`/`start` |
645
709
  | `--quiet` / `--json` | Suppress output (hooks) / machine-readable status |
@@ -648,8 +712,23 @@ Ports/hosts: `UAP_DASH_PORT` (3847), `UAP_DASH_HOST` (localhost),
648
712
  uap proxy status --json # includes a `dashboard` block (port, url, healthy, owner)
649
713
  uap proxy restart # e.g. after changing PROXY_* in .uap/proxy.env
650
714
  uap proxy dashboard off # opt out of the ride-along dashboard
715
+ uap proxy connect --socket ~/.uap/proxy.sock --port 4000 --allow-anyone
651
716
  ```
652
717
 
718
+ `connect` is the companion to the proxy's optional AF_UNIX surface
719
+ (`PROXY_SOCKET`, served 0600): a small relay that accepts on a local TCP port
720
+ and pipes every byte to the socket, for clients that cannot speak AF_UNIX. It
721
+ is fail-closed (an upstream failure destroys the client connection instead of
722
+ hanging it) and touches a `--ready-file` once listening, so wrappers can wait
723
+ out the boot race.
724
+
725
+ **Why `--allow-anyone` is required:** the 0600 socket exists so only the
726
+ owning USER can reach the model path; the relay re-serves it on loopback
727
+ TCP, and while it runs EVERY local user can reach the model path through
728
+ it — the gate, inverted. The command refuses to start without the explicit
729
+ flag, says so on stderr while it runs, and should be stopped when the work
730
+ is done.
731
+
653
732
  The proxy binds `127.0.0.1` by default; see the proxy `PROXY_*` settings in the
654
733
  [Configuration Reference](CONFIGURATION_REFERENCE.md) and [Local Models](../guides/LOCAL_MODELS.md).
655
734
 
@@ -707,10 +786,37 @@ current dir + scratch are writable, so writes outside fail at the kernel — the
707
786
  boundary `--dangerously-skip-permissions` cannot bypass.
708
787
 
709
788
  ```bash
710
- uap sandbox -- <command> [args...]
789
+ uap sandbox [--session <id>] [--net shared|off] -- <command> [args...]
790
+ ```
791
+
792
+ The `--` separator before the command is REQUIRED: without it, the sandbox's
793
+ own flags (`--session`, `--net`, `--ttl`, `--reason`, `--json`) are parsed as
794
+ sandbox options rather than passed through to the session command. The grant
795
+ verbs are only intercepted when there is no `--` — `uap sandbox -- revoke …`
796
+ runs a binary named `revoke`, not the ledger verb.
797
+
798
+ Bridge P4 authorities on top of the floor:
799
+
800
+ - `--net off` — the kernel egress boundary: own network namespace with nothing
801
+ up (no TCP, no DNS, not even loopback). For untrusted code, evals, and
802
+ data-only work; a harness that needs the model fails loudly by design.
803
+ - per-session writable holes from the consent ledger (reason REQUIRED, TTL
804
+ default 8h / cap 7d, audit-logged):
805
+
806
+ ```bash
807
+ uap sandbox grant <path...> --session <id> --reason "..." [--ttl <secs>]
808
+ uap sandbox grants [--session <id>] [--json]
809
+ uap sandbox revoke <grantId>
711
810
  ```
712
811
 
713
- See [Sandbox](../guides/SANDBOX.md).
812
+ The grants listing states the ledger's tamper-evidence verdict (ADR 0011):
813
+ a ledger that fails its out-of-checkout anchor check is stamped INTEGRITY
814
+ MISMATCH — rows are still listed but marked unverified, new grants are
815
+ refused, and a sandbox session opens ZERO grant-derived holes. With
816
+ `--json` the alarm rides stderr so the data stays pure.
817
+
818
+ See [Sandbox](../guides/SANDBOX.md) and
819
+ [ADR 0011](../architecture/adr/0011-sandbox-grants-and-network-egress-boundary.md).
714
820
 
715
821
  ---
716
822
 
@@ -1115,6 +1221,62 @@ a deliberate act — do it only with reviewer sign-off.
1115
1221
 
1116
1222
  ---
1117
1223
 
1224
+ ## `self`
1225
+
1226
+ The self-knowledge card (S2): a small, version-pinned digest of UAP's own
1227
+ command surface and feature catalog, generated offline from the docs that ship
1228
+ inside the installed package (`docs/reference/CLI.md` +
1229
+ `docs/reference/FEATURES.md`). An agent that must search online to learn its
1230
+ own features wastes turns and self-describes from stale sources; the card is
1231
+ the fix. Cached in the project's `.uap/self-card.md` and regenerated
1232
+ automatically when the installed version or the source docs change
1233
+ (fingerprint-pinned). The session-start hook keeps it fresh and surfaces a
1234
+ pointer block.
1235
+
1236
+ | Subcommand | Key flags | Purpose |
1237
+ |------------|-----------|---------|
1238
+ | `card` | `--refresh`, `--json` | Ensure/build the card; `--refresh` forces a rebuild even when the pin matches |
1239
+ | `query <question>` | `--limit <n>`, `--json` | Ranked offline search over the card (commands + features, alias-aware) |
1240
+
1241
+ ```bash
1242
+ uap self card # ensure the card is fresh and print the pointer block
1243
+ uap self card --refresh --json # force a rebuild, machine-readable stats
1244
+ uap self query "how do I run a controlled benchmark"
1245
+ ```
1246
+
1247
+ ---
1248
+
1249
+ ## `attention`
1250
+
1251
+ The operator attention queue: the ask-instead-of-stop rail. When a
1252
+ decision is genuinely yours — a placement parked and waiting for a swap
1253
+ approval, a grant request, a blocking question — the agent records it here
1254
+ with its context and a SAFE DEFAULT, and keeps working. The session-start hook
1255
+ shows what is waiting (plus what was auto-decided while you were away); `sweep`
1256
+ is the AFK auto-decider: anything whose grace window elapsed without an answer
1257
+ adopts its recorded safe default (logged, never silent), and anything without
1258
+ one ESCALATES instead of silently expiring. The decider only records its own
1259
+ adoption — the underlying system keeps its own lifecycle. One queue per
1260
+ checkout: the MAIN checkout's `.uap/attention.json` (the dashboard, the CLI,
1261
+ and session hooks in any worktree share it; `UAP_ATTENTION_QUEUE` pins it
1262
+ elsewhere). Fail-open, atomic, re-sanitized on load; `UAP_ATTENTION_OFF=1`
1263
+ silences the rail end-to-end.
1264
+
1265
+ | Subcommand | Key flags | Purpose |
1266
+ |------------|-----------|---------|
1267
+ | `list` | `--status <s>`, `--json` | What is waiting — OPEN items by default (pending + acknowledged + escalated); `--status` filters to one status (pending, acknowledged, decided, auto-decided, escalated; unknown values error) |
1268
+ | `ack <id>` | | Mark seen — the grace clock keeps running (seen ≠ answered) |
1269
+ | `decide <id> <decision>` | | Answer the ask (yours beats the decider) |
1270
+ | `sweep` | `--json` | Adopt recorded safe defaults for grace-elapsed items; escalate the rest |
1271
+
1272
+ ```bash
1273
+ uap attention list # what is waiting on you
1274
+ uap attention decide att-9f2a1b "apply option 2"
1275
+ uap attention sweep # AFK decider: adopt safe defaults, escalate the rest
1276
+ ```
1277
+
1278
+ ---
1279
+
1118
1280
  ## `uap-omp`
1119
1281
 
1120
1282
  UAP integration commands for oh-my-pi (omp) users. Thin wrappers over the
@@ -1140,3 +1302,6 @@ installed omp scripts and SQLite memory store.
1140
1302
  | `UAP_ESCALATE_MODEL` | `deliver` | Stronger model preset for escalation |
1141
1303
  | `UAP_HALO_TRACE_PATH` | `harness` | Default HALO trace JSONL path |
1142
1304
  | `UAP_EMBEDDING_ENDPOINT` | memory/embeddings | Embedding service endpoint |
1305
+ | `UAP_PLAN_READABILITY` | `plan` | `0` disables the deterministic readability scan in `uap plan validate` |
1306
+ | `UAP_PLAN_READABILITY_STRICT` | `plan` | `1` makes error-severity readability findings block the validation stamp |
1307
+ | `UAP_ETA_OFF` | `deliver` | `1` disables per-attempt wall-clock telemetry to the model-analytics store |
@@ -1,6 +1,6 @@
1
1
  # UAP vs Other Agent Harnesses and Tooling
2
2
 
3
- > Applies to UAP v1.224.0. Competitor profiles reflect public sources as of
3
+ > Applies to UAP v2.29.0. Competitor profiles reflect public sources as of
4
4
  > September 2026; vendor-reported numbers are flagged as such, and claims we
5
5
  > could not verify are marked or omitted. UAP's own claims in this document
6
6
  > were verified against the code.
@@ -1,6 +1,6 @@
1
1
  # Configuration Reference
2
2
 
3
- > Universal Agent Protocol (UAP) v1.224.0
3
+ > Universal Agent Protocol (UAP) v2.30.0
4
4
 
5
5
  > **🏭 Where this fits:** Cross-cutting — the settings that tune every station.
6
6
  > **What it delivers:** the dials that decide how your [delivery pipeline](../guides/DELIVERY_PIPELINE.md)
@@ -28,7 +28,7 @@ source. Only options that exist in code are documented here.
28
28
  ### `.uap.json` schema (`src/types/config.ts`)
29
29
 
30
30
  Top level: `version`, `project`, `memory`, `worktree`, `costOptimization`,
31
- `timeOptimization`, plus droids/commands/template sections.
31
+ `timeOptimization`, `attention`, plus droids/commands/template sections.
32
32
 
33
33
  ```jsonc
34
34
  {
@@ -104,7 +104,7 @@ Top level: `version`, `project`, `memory`, `worktree`, `costOptimization`,
104
104
  |---|---|---|
105
105
  | `deliver.orchestrate` | Blackboard orchestration for decomposed missions (`"on"`/`"off"`) | `"on"` (preflight seeds it) |
106
106
  | `deliver.epics` | Epic controller outer loop (`"on"`/`"off"`) | `"on"` (preflight seeds it) |
107
- | `deliver.parallelTasks` | Worktree-isolated parallel dispatch: independent READY orchestrator tasks run concurrently, each convergence loop + its gates in a detached git worktree seeded with the mission's current state; deltas merge back serially, and a merge conflict fails the task into the minimal-repair retry. Clamped to 1–8. **Parallel is the default** — an unset key resolves to 4, capped per wave at the number of independent READY tasks. Parallelism is conditional on worktree isolation: outside a git repo (or with an unborn HEAD) the run stays sequential and logs why. Set `1` (or `UAP_DELIVER_PARALLEL_TASKS=1`) to force sequential execution. | `4` (parallel, worktree-isolated) |
107
+ | `deliver.parallelTasks` | Worktree-isolated parallel dispatch: independent READY orchestrator tasks run concurrently, each convergence loop + its gates in a detached git worktree seeded with the mission's current state; deltas merge back serially, and a merge conflict fails the task into the minimal-repair retry. Completion-triggered scheduling: a finished task's slot refills the moment it settles (no wave barrier — a fast sibling never idles behind a slow one), and a task whose dependencies all succeeded starts as soon as its slowest sibling-dependency settles. Settlement stays strictly sequential (one task at a time); which task settles next is timing-dependent. Clamped to 1–8. **Parallel is the default** — an unset key resolves to 4. Parallelism is conditional on worktree isolation: outside a git repo (or with an unborn HEAD) the run stays sequential and logs why. Set `1` (or `UAP_DELIVER_PARALLEL_TASKS=1`) to force sequential execution. | `4` (parallel, worktree-isolated) |
108
108
  | `deliver.adversarialGate` | Adversarial red-team gate before a converged run is accepted (`false`/`0`/`"off"` disables; a positive integer retunes the round budget, cap 4). Overridden by `UAP_DELIVER_ADVERSARIAL_GATE`. | on (≤2 rounds) |
109
109
  | `deliver.criteriaLint` | Plan-time lint of planner/split-emitted acceptance criteria; behavioral criteria gain an executable-evidence clause. Overridden by `UAP_DELIVER_CRITERIA_LINT`. | on |
110
110
  | `deliver.evidenceGate` | Anti-vacuous delivery gate + over-claim metric stream (`.uap/delivery-evidence.jsonl`). Overridden by `UAP_DELIVER_EVIDENCE_GATE`. | on |
@@ -114,6 +114,9 @@ Top level: `version`, `project`, `memory`, `worktree`, `costOptimization`,
114
114
  | `UAP_SNAPSHOT_DIR` | Base dir for `--keep-best` snapshots (absolute path) | `~/.cache/uap/snapshots` |
115
115
  | `UAP_SNAPSHOT_MAX_MB` | Skip the `--keep-best` snapshot (rollback disabled) when the tree exceeds this size | `4096` |
116
116
  | `UAP_DASH_REFRESH_MS` | Dashboard live snapshot push/poll interval in ms (`--refresh` flag wins; min 250) | `2000` |
117
+ | `UAP_ATTENTION_GRACE_SECS` | Runtime override for `attention.graceSecs` (the AFK decider's grace window). Positive integer seconds, cap 86400; set-but-invalid (including a cleared/empty value) fails safe to the config value. | unset (config wins) |
118
+ | `UAP_ATTENTION_OFF` | `1` is the kill switch for the attention rail: nothing new is enqueued from surfaces (e.g. a parked placement), nothing is auto-decided, `uap attention list` shows nothing, and the session-start hint prints nothing. The queue file itself is left alone. | unset |
119
+ | `UAP_ATTENTION_QUEUE` | Pins the attention queue to an explicit FILE (default: the MAIN checkout's `.uap/attention.json`, so the dashboard, the CLI, and session hooks in any worktree share ONE queue). Tests and odd layouts only. | unset |
117
120
  | `HERMES_HOME` | Hermes home dir | `~/.hermes` |
118
121
  | `FACTORY_PROJECT_DIR` | Project dir in Factory hook commands | — |
119
122
  | `FORGE_UAP_PROJECT` | Project dir in ForgeCode hook scripts | `.` |
@@ -122,6 +125,12 @@ Top level: `version`, `project`, `memory`, `worktree`, `costOptimization`,
122
125
  | `HOME` | `~/.uap/omp`, droids dir resolution | — |
123
126
  | `APPDATA` / `USERPROFILE` | Windows MCP config path expansion | — |
124
127
 
128
+ ### `.uap.json` `attention` section (top level)
129
+
130
+ | Key | What it does | Default |
131
+ |---|---|---|
132
+ | `attention.graceSecs` | Operator attention queue: how long a pending ask waits for your answer before the AFK auto-decider may act (`uap attention sweep`, also swept at session start and on a 60s timer by the dashboard server). A grace-elapsed item with a recorded safe default ADOPTS it (logged, never silent); an item without one ESCALATES instead of silently expiring. The decider records its adoption only — the underlying system keeps its own lifecycle. Positive integer seconds, cap 86400 (24h); `0` adopts immediately. NOTE: an asking surface may pin an item's deadline to the ask's own expiry (a placement park's deadline is the pending entry's TTL) — the grace window is the fallback for asks without one. Overridden by `UAP_ATTENTION_GRACE_SECS`. The queue file is the MAIN checkout's `.uap/attention.json` (not per-worktree), overridable via `UAP_ATTENTION_QUEUE`. | `300` (5 min) |
133
+
125
134
  Per-model API key env var names are configurable via the model config field
126
135
  `apiKeyEnvVar` (`src/types/config.ts`), resolved indirectly in
127
136
  `src/models/openai-compat-client.ts`.
@@ -29,6 +29,7 @@ uap config wizard # interactive expert configurator (also: uap set
29
29
  - [Engineering principles](#principles) — How code should be written, and the backward-compatibility stance.
30
30
  - [Worktree workflow](#worktree) — Branch-per-feature isolation and auto-cleanup.
31
31
  - [Inference proxy tuning](#proxy) — Guardrails and context limits for a local model behind the proxy.
32
+ - [Sandbox & session authority](#sandbox) — Kernel-enforced agent boundaries: the bubblewrap floor, per-session grants, and the network egress boundary.
32
33
  - [Dashboard](#dashboard) — The live analytics server and its mutation token.
33
34
  - [Token & time optimization](#optimization) — Context budgets, caching, batching, and parallelism.
34
35
  - [General](#general) — Project metadata and CLI behavior.
@@ -133,6 +134,18 @@ When set to 1 for a single command, exempts that one sanctioned manual edit from
133
134
 
134
135
  **Recommendation:** Use inline (`UAP_DELIVER_BYPASS=1 <cmd>`) for a one-off edit; never export it.
135
136
 
137
+ ### `delivery.protectIac`
138
+
139
+ | | |
140
+ |---|---|
141
+ | **Where** | `.uap.json` |
142
+ | **Type** | boolean |
143
+ | **Default** | `false` |
144
+
145
+ Refuse model writes to deploy/IaC files (Dockerfile, docker-compose, *.tf, *.tfvars, pulumi, serverless) during `uap deliver`. Permissive by default (false) so the model can edit IaC freely; set true to block IaC writes and snapshot/restore them against run_bash tampering. The `--protect-iac` CLI flag overrides this per-run.
146
+
147
+ **Recommendation:** Leave false (permissive) for most projects — IaC edits are legitimate deliverable work. Set true only when the deploy topology is a fixed trust anchor the mission must not alter.
148
+
136
149
  ## Verification gates
137
150
 
138
151
  <a id="verification"></a>Proving generated code actually builds and runs before "done".
@@ -257,6 +270,102 @@ Model id sent to the vision endpoint for aesthetic review (e.g. qwen3.8-27b).
257
270
 
258
271
  **Recommendation:** Set by `uap setup` to your local vision model. Required for blocking vision review under `max` fidelity.
259
272
 
273
+ ### `plan.readability.enabled`
274
+
275
+ | | |
276
+ |---|---|
277
+ | **Where** | `.uap.json` |
278
+ | **Type** | boolean |
279
+ | **Default** | `true` |
280
+
281
+ The plan-comprehension scan in `uap plan validate` (B1): deterministic readability rules over the plan artifact — executive summary first, detail progressing downward, section word budgets, jargon density, diagram required at a task-count threshold. Findings are advisory hints the judge-model review adjudicates.
282
+
283
+ **Recommendation:** Leave on: the scan is local, instant, and advisory by default.
284
+
285
+ ### `plan.readability.strict`
286
+
287
+ | | |
288
+ |---|---|
289
+ | **Where** | `.uap.json` |
290
+ | **Type** | boolean |
291
+ | **Default** | `false` |
292
+
293
+ Give the readability scan deterministic teeth: error-severity findings (no opening summary, detail before the high level, missing diagram) fail `uap plan validate` outright instead of being adjudicated hints. `--force` / `UAP_PLAN_REVIEW_FORCE=1` remains the escape hatch.
294
+
295
+ **Recommendation:** Enable once your plan templates reliably pass — it enforces plans a human can skim. Keep off while calibrating.
296
+
297
+ ### `plan.readability.minSummaryWords`
298
+
299
+ | | |
300
+ |---|---|
301
+ | **Where** | `.uap.json` |
302
+ | **Type** | number |
303
+ | **Default** | `20` |
304
+
305
+ Minimum prose words between the plan title and the first section — the executive-summary gate.
306
+
307
+ **Recommendation:** 20 words is a two-sentence what-and-why. Lower for terse internal plans; 0 effectively disables the rule.
308
+
309
+ ### `plan.readability.maxWordsPerSection`
310
+
311
+ | | |
312
+ |---|---|
313
+ | **Where** | `.uap.json` |
314
+ | **Type** | number |
315
+ | **Default** | `300` |
316
+
317
+ Soft word budget per section before a readability warning fires.
318
+
319
+ **Recommendation:** 300 keeps a section to one point. 0 disables the budget check.
320
+
321
+ ### `plan.readability.jargonDensityThreshold`
322
+
323
+ | | |
324
+ |---|---|
325
+ | **Where** | `.uap.json` |
326
+ | **Type** | number |
327
+ | **Default** | `0.35` |
328
+
329
+ Jargon tokens per prose word above which the plan earns a readability warning (camelCase/snake_case/acronyms in prose).
330
+
331
+ **Recommendation:** 0.35 tolerates normal technical writing while catching identifier soup. Raise for deeply technical audiences.
332
+
333
+ ### `plan.readability.requireDiagramAtTasks`
334
+
335
+ | | |
336
+ |---|---|
337
+ | **Where** | `.uap.json` |
338
+ | **Type** | number |
339
+ | **Default** | `5` |
340
+
341
+ Task items (checklist + ordered steps) at which a data-flow diagram (mermaid or image) is required in the plan.
342
+
343
+ **Recommendation:** 5 keeps small plans diagram-free while forcing one once the moving parts multiply. 0 disables the rule.
344
+
345
+ ### `UAP_PLAN_READABILITY`
346
+
347
+ | | |
348
+ |---|---|
349
+ | **Where** | shell env |
350
+ | **Type** | boolean |
351
+ | **Default** | `true` |
352
+
353
+ Runtime kill switch for the plan readability scan: `0` skips it entirely in `uap plan validate`.
354
+
355
+ **Recommendation:** Leave unset. Use inline `UAP_PLAN_READABILITY=0 uap plan validate` only when diagnosing a scan misfire.
356
+
357
+ ### `UAP_PLAN_READABILITY_STRICT`
358
+
359
+ | | |
360
+ |---|---|
361
+ | **Where** | shell env |
362
+ | **Type** | boolean |
363
+ | **Default** | `false` |
364
+
365
+ Runtime strict override for the plan readability scan: `1` makes error-severity findings block the validation stamp (same as `plan.readability.strict`).
366
+
367
+ **Recommendation:** Use inline for CI enforcement without changing the project config; never export globally — a hard gate in every shell surprises interactive agents.
368
+
260
369
  ## Model routing
261
370
 
262
371
  <a id="routing"></a>Which model handles planning, execution, and review.
@@ -571,6 +680,54 @@ Batches git/deploy actions across agents to avoid conflicting concurrent pushes.
571
680
 
572
681
  <a id="orchestration"></a>Long-task autonomy: decompose, resume, and loop-to-100%.
573
682
 
683
+ ### `attention.graceSecs`
684
+
685
+ | | |
686
+ |---|---|
687
+ | **Where** | `.uap.json` |
688
+ | **Type** | number |
689
+ | **Default** | `300` |
690
+
691
+ Grace window before the AFK auto-decider may adopt an attention item's recorded safe default (`uap attention sweep`, also swept at session start). Items without a safe default escalate instead.
692
+
693
+ **Recommendation:** 300s (five minutes) is long enough for a present operator to intercede and short enough that an unattended run never stalls on an ask. Raise for high-stakes decisions, 0 adopts immediately.
694
+
695
+ ### `UAP_ATTENTION_GRACE_SECS`
696
+
697
+ | | |
698
+ |---|---|
699
+ | **Where** | shell env |
700
+ | **Type** | number |
701
+ | **Default** | `300` |
702
+
703
+ Runtime override for the attention grace window; caps at 86,400 (24h).
704
+
705
+ **Recommendation:** Use inline for a one-off long mission; set the project config key instead for a standing value.
706
+
707
+ ### `UAP_ATTENTION_OFF`
708
+
709
+ | | |
710
+ |---|---|
711
+ | **Where** | shell env |
712
+ | **Type** | boolean |
713
+ | **Default** | `false` |
714
+
715
+ Kill switch for the attention rail: `1` disables enqueue, sweep, AND list end-to-end (the queue file stays; nothing new is asked, nothing is auto-decided, no hint prints).
716
+
717
+ **Recommendation:** Leave unset. Use inline when the queue is misbehaving; the rail is fail-open everywhere so a broken store never blocks work.
718
+
719
+ ### `UAP_ATTENTION_QUEUE`
720
+
721
+ | | |
722
+ |---|---|
723
+ | **Where** | shell env |
724
+ | **Type** | string |
725
+ | **Default** | `` |
726
+
727
+ Pins the attention queue to an explicit FILE. Default: the MAIN checkout's `.uap/attention.json`, so the dashboard, the CLI, and session hooks in any worktree share ONE queue.
728
+
729
+ **Recommendation:** Tests and non-standard layouts only; unset means the default shared-per-checkout root.
730
+
574
731
  ### `handsfree.enabled`
575
732
 
576
733
  | | |
@@ -795,20 +952,6 @@ When the model self-reports "stuck" but keeps repeating the same failing tool, r
795
952
 
796
953
  **Recommendation:** Keep on for local models; harmless for cloud models (rarely triggers).
797
954
 
798
- ### `PROXY_LOCKSTEP_BREAK`
799
-
800
- | | |
801
- |---|---|
802
- | **Where** | `.uap/proxy.env` |
803
- | **Type** | boolean (+ `PROXY_LOCKSTEP_PIVOT_AT` / `PROXY_LOCKSTEP_HARD_AT` numbers) |
804
- | **Default** | `true` (pivot at streak 2, hard stop at streak 4) |
805
-
806
- When the *identical* tool call fails with the *identical* error, escalates decisively: pivot directive → final warning → hard-fail the session with a 400, recording each tier to the loop-incident ledger (`UAP_LOOP_INCIDENTS`, default `~/.config/uap/loop-incidents.jsonl`). Both directives are always given before the stop, so the stop lands at `max(HARD_AT, PIVOT_AT + 2)` — never earlier. `uap loops` lists the ledger and prints a ready `uap ideate`/`uap deliver` handoff for the broken loop. A fresh human user turn re-arms the guard.
807
-
808
- **Dependency:** the streaks lockstep reads are fed by the ERROR-LOOP and DOUBLING-DOWN trackers — `PROXY_ERROR_LOOP=off` or `PROXY_DOUBLING_BREAK=off` silently disarms lockstep too. `PIVOT_AT=0` disables the guard; `HARD_AT=0` disables only the hard stop.
809
-
810
- **Recommendation:** Keep on — this is the guard that ends deterministic-failure loops in minutes instead of tens of wasted full-context turns.
811
-
812
955
  ### `PROXY_RECON_CONVERGENCE_THRESHOLD`
813
956
 
814
957
  | | |
@@ -857,6 +1000,118 @@ Proxy side of real-time adaptation: whether the serving proxy honors a fresh ada
857
1000
 
858
1001
  **Recommendation:** Leave on. Set `false` only to make the proxy ignore adaptation signals even when the reactor emits them.
859
1002
 
1003
+ ## Sandbox & session authority
1004
+
1005
+ <a id="sandbox"></a>Kernel-enforced agent boundaries: the bubblewrap floor, per-session grants, and the network egress boundary.
1006
+
1007
+ ### `PROXY_SOCKET`
1008
+
1009
+ | | |
1010
+ |---|---|
1011
+ | **Where** | `.uap/proxy.env` |
1012
+ | **Type** | string |
1013
+ | **Default** | `` |
1014
+
1015
+ AF_UNIX socket the inference proxy serves IN ADDITION to its TCP port — a permission-gated (0600) model-path choke point for sandboxed and multi-user setups (unset = off).
1016
+
1017
+ **Recommendation:** Set in .uap/proxy.env to the checkout's `.uap/proxy.sock` on shared boxes; leave unset for single-user loopback setups.
1018
+
1019
+ ### `UAP_PROXY_SOCKET`
1020
+
1021
+ | | |
1022
+ |---|---|
1023
+ | **Where** | shell env |
1024
+ | **Type** | string |
1025
+ | **Default** | `` |
1026
+
1027
+ Where `uap proxy connect` looks for the proxy socket when re-serving it on local TCP (default: the checkout's `.uap/proxy.sock`).
1028
+
1029
+ **Recommendation:** Leave unset (the default covers the standard layout); set only when the proxy socket lives elsewhere.
1030
+
1031
+ ### `UAP_SANDBOX_NET`
1032
+
1033
+ | | |
1034
+ |---|---|
1035
+ | **Where** | shell env |
1036
+ | **Type** | enum (shared \| off) |
1037
+ | **Default** | `shared` |
1038
+
1039
+ Default network mode for `uap sandbox`: shared (normal network) or off (own network namespace with nothing up — the kernel egress boundary; model access impossible by design). Strictly `shared` or `off`: any other value fails loud (exit 2), never a silent downgrade to shared.
1040
+
1041
+ **Recommendation:** Leave shared; use `--net off` per-run for untrusted code, evals, and data-only work.
1042
+
1043
+ ### `UAP_SANDBOX_GRANTS`
1044
+
1045
+ | | |
1046
+ |---|---|
1047
+ | **Where** | shell env |
1048
+ | **Type** | string |
1049
+ | **Default** | `` |
1050
+
1051
+ Pins the per-session sandbox grant ledger to an explicit FILE. Default: the MAIN checkout's `.uap/sandbox-grants.json`, so every surface shares ONE consent ledger.
1052
+
1053
+ **Recommendation:** Tests and non-standard layouts only; unset means the default shared-per-checkout ledger.
1054
+
1055
+ ### `UAP_SANDBOX_GRANTS_OFF`
1056
+
1057
+ | | |
1058
+ |---|---|
1059
+ | **Where** | shell env |
1060
+ | **Type** | boolean |
1061
+ | **Default** | `false` |
1062
+
1063
+ Kill switch for the grant ledger: `1` resolves zero grants (no extra writable holes). The sandbox itself and its kernel boundary are unaffected.
1064
+
1065
+ **Recommendation:** Leave unset. Inline use only, when the ledger is misbehaving — the safe direction is always least authority.
1066
+
1067
+ ### `UAP_SANDBOX_WORKDIR`
1068
+
1069
+ | | |
1070
+ |---|---|
1071
+ | **Where** | shell env |
1072
+ | **Type** | string |
1073
+ | **Default** | `` |
1074
+
1075
+ Workdir `uap sandbox` makes writable (default: cwd). Refused when over-broad ($HOME, /, /home).
1076
+
1077
+ **Recommendation:** Leave unset in hooks (cwd is right); set when the sandboxed command must run from elsewhere.
1078
+
1079
+ ### `UAP_SANDBOX_ALLOW`
1080
+
1081
+ | | |
1082
+ |---|---|
1083
+ | **Where** | shell env |
1084
+ | **Type** | string |
1085
+ | **Default** | `` |
1086
+
1087
+ Extra writable paths, colon-separated — UNRECORDED authority, honored for compatibility. Every use is named in the audit trail and the launch banner, and entries get the same plan-time realpath re-check recorded grants get: an entry resolving to `/`, `/home`, or `$HOME` is refused loudly, and a symlink entry binds its resolved target, not the link.
1088
+
1089
+ **Recommendation:** Prefer `uap sandbox grant <path> --session <id> --reason "..."` (recorded, TTL-bounded, revocable); use this only in throwaway scripts.
1090
+
1091
+ ### `UAP_SANDBOX_AUDIT`
1092
+
1093
+ | | |
1094
+ |---|---|
1095
+ | **Where** | shell env |
1096
+ | **Type** | string |
1097
+ | **Default** | `` |
1098
+
1099
+ Pins the sandbox audit trail (JSONL, one line per grant/revoke/sandbox-run) to an explicit FILE. Default: `.uap/sandbox-audit.jsonl` at the main checkout root.
1100
+
1101
+ **Recommendation:** Leave unset; ship the default trail to your audit tooling.
1102
+
1103
+ ### `UAP_SANDBOX_ANCHOR_DIR`
1104
+
1105
+ | | |
1106
+ |---|---|
1107
+ | **Where** | shell env |
1108
+ | **Type** | string |
1109
+ | **Default** | `` |
1110
+
1111
+ Pins the DIRECTORY holding the consent-ledger trust anchors (one 0600 JSON per checkout, the tamper-evidence hash of the sanitized ledger). Default: `$XDG_STATE_HOME/uap/sandbox-anchors` (or `~/.local/state/uap/sandbox-anchors`) — OUTSIDE the checkout's write reach by design.
1112
+
1113
+ **Recommendation:** Tests and non-standard layouts only; leave unset so the anchor stays outside the tree it vouches for.
1114
+
860
1115
  ## Dashboard
861
1116
 
862
1117
  <a id="dashboard"></a>The live analytics server and its mutation token.
@@ -1,6 +1,6 @@
1
1
  # Database Schema Reference
2
2
 
3
- > Universal Agent Protocol (UAP) v1.224.0
3
+ > Universal Agent Protocol (UAP) v2.30.0
4
4
 
5
5
  > **🏭 Where this fits:** Cross-cutting — the shop's records and shift log.
6
6
  > **What it delivers:** the durable memory of your [delivery pipeline](../guides/DELIVERY_PIPELINE.md)