@xingular/harness 2.0.0 → 2.0.1-unstable

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 (1095) hide show
  1. package/CHANGELOG.md +635 -0
  2. package/LICENSE +202 -0
  3. package/NOTICE.md +50 -0
  4. package/README.md +241 -90
  5. package/THIRD_PARTY_LICENSES.md +942 -0
  6. package/browser-extension/README.md +32 -0
  7. package/browser-extension/background.js +612 -0
  8. package/browser-extension/manifest.json +16 -0
  9. package/browser-extension/overlay.js +97 -0
  10. package/browser-extension/popup.css +19 -0
  11. package/browser-extension/popup.html +30 -0
  12. package/browser-extension/popup.js +101 -0
  13. package/browser-extension/site-access.js +63 -0
  14. package/builtin/skills/plugin-authoring/SKILL.md +53 -0
  15. package/dist/cli.js +32851 -17155
  16. package/dist/sdk/accounts/accounts.d.ts +195 -0
  17. package/dist/sdk/accounts/accounts.js +821 -0
  18. package/dist/sdk/accounts/choices.d.ts +41 -0
  19. package/dist/sdk/accounts/choices.js +89 -0
  20. package/dist/sdk/accounts/env.d.ts +78 -0
  21. package/dist/sdk/accounts/env.js +294 -0
  22. package/dist/sdk/accounts/secrets.d.ts +28 -0
  23. package/dist/sdk/accounts/secrets.js +147 -0
  24. package/dist/sdk/accounts/store.d.ts +139 -0
  25. package/dist/sdk/accounts/store.js +255 -0
  26. package/dist/sdk/agents/builtin.d.ts +2 -0
  27. package/dist/sdk/agents/builtin.js +50 -0
  28. package/dist/sdk/agents/narrow.d.ts +13 -0
  29. package/dist/sdk/agents/narrow.js +29 -0
  30. package/dist/sdk/agents/planResearch.d.ts +27 -0
  31. package/dist/sdk/agents/planResearch.js +82 -0
  32. package/dist/sdk/agents/profiles.d.ts +93 -0
  33. package/dist/sdk/agents/profiles.js +289 -0
  34. package/dist/sdk/annotations/bridge.d.ts +44 -0
  35. package/dist/sdk/annotations/bridge.js +268 -0
  36. package/dist/sdk/annotations/capture.d.ts +158 -0
  37. package/dist/sdk/annotations/capture.js +409 -0
  38. package/dist/sdk/annotations/delivery.d.ts +79 -0
  39. package/dist/sdk/annotations/delivery.js +163 -0
  40. package/dist/sdk/annotations/inspect.d.ts +10 -0
  41. package/dist/sdk/annotations/inspect.js +34 -0
  42. package/dist/sdk/annotations/isolated.d.ts +6 -0
  43. package/dist/sdk/annotations/isolated.js +51 -0
  44. package/dist/sdk/annotations/pageScript.d.ts +28 -0
  45. package/dist/sdk/annotations/pageScript.js +871 -0
  46. package/dist/sdk/annotations/part.d.ts +8 -0
  47. package/dist/sdk/annotations/part.js +126 -0
  48. package/dist/sdk/annotations/queue.d.ts +4 -0
  49. package/dist/sdk/annotations/queue.js +45 -0
  50. package/dist/sdk/annotations/serverMethods.d.ts +3 -0
  51. package/dist/sdk/annotations/serverMethods.js +66 -0
  52. package/dist/sdk/annotations/store.d.ts +159 -0
  53. package/dist/sdk/annotations/store.js +404 -0
  54. package/dist/sdk/browser/backend.d.ts +16 -0
  55. package/dist/sdk/browser/backend.js +17 -0
  56. package/dist/sdk/browser/config.d.ts +19 -0
  57. package/dist/sdk/browser/config.js +23 -0
  58. package/dist/sdk/browser/contracts.d.ts +19 -0
  59. package/dist/sdk/browser/contracts.js +116 -0
  60. package/dist/sdk/browser/diagnostics.d.ts +4 -0
  61. package/dist/sdk/browser/diagnostics.js +38 -0
  62. package/dist/sdk/browser/extension/bridge.d.ts +55 -0
  63. package/dist/sdk/browser/extension/bridge.js +336 -0
  64. package/dist/sdk/browser/extension/session.d.ts +50 -0
  65. package/dist/sdk/browser/extension/session.js +321 -0
  66. package/dist/sdk/browser/index.d.ts +33 -0
  67. package/dist/sdk/browser/index.js +105 -0
  68. package/dist/sdk/browser/network.d.ts +10 -0
  69. package/dist/sdk/browser/network.js +59 -0
  70. package/dist/sdk/browser/serverMethods.d.ts +3 -0
  71. package/dist/sdk/browser/serverMethods.js +10 -0
  72. package/dist/sdk/browser/session.d.ts +85 -0
  73. package/dist/sdk/browser/session.js +228 -0
  74. package/dist/sdk/browser/tools.d.ts +102 -0
  75. package/dist/sdk/browser/tools.js +257 -0
  76. package/dist/sdk/capabilities/api.d.ts +22 -0
  77. package/dist/sdk/capabilities/api.js +54 -0
  78. package/dist/sdk/capabilities/runSnapshot.d.ts +18 -0
  79. package/dist/sdk/capabilities/runSnapshot.js +53 -0
  80. package/dist/sdk/capabilities/types.d.ts +29 -0
  81. package/dist/sdk/capabilities/types.js +1 -0
  82. package/dist/sdk/cli.d.ts +2 -0
  83. package/dist/sdk/cli.js +172 -0
  84. package/dist/sdk/commands/extensionOwners.d.ts +4 -0
  85. package/dist/sdk/commands/extensionOwners.js +17 -0
  86. package/dist/sdk/commands/list.d.ts +3 -0
  87. package/dist/sdk/commands/list.js +90 -0
  88. package/dist/sdk/commands/promptLoader.d.ts +5 -0
  89. package/dist/sdk/commands/promptLoader.js +76 -0
  90. package/dist/sdk/commands/promptRoutes.d.ts +13 -0
  91. package/dist/sdk/commands/promptRoutes.js +46 -0
  92. package/dist/sdk/commands/registry.d.ts +299 -0
  93. package/dist/sdk/commands/registry.js +54 -0
  94. package/dist/sdk/commands/routes.d.ts +16 -0
  95. package/dist/sdk/commands/routes.js +33 -0
  96. package/dist/sdk/commands/runtimeRouter.d.ts +4 -0
  97. package/dist/sdk/commands/runtimeRouter.js +48 -0
  98. package/dist/sdk/computer/boundary.d.ts +40 -0
  99. package/dist/sdk/computer/boundary.js +79 -0
  100. package/dist/sdk/computer/contracts.d.ts +127 -0
  101. package/dist/sdk/computer/contracts.js +13 -0
  102. package/dist/sdk/computer/control.d.ts +34 -0
  103. package/dist/sdk/computer/control.js +112 -0
  104. package/dist/sdk/computer/screenshot.d.ts +32 -0
  105. package/dist/sdk/computer/screenshot.js +35 -0
  106. package/dist/sdk/computer/terminalCapture.d.ts +26 -0
  107. package/dist/sdk/computer/terminalCapture.js +64 -0
  108. package/dist/sdk/computer/volatileImages.d.ts +9 -0
  109. package/dist/sdk/computer/volatileImages.js +50 -0
  110. package/dist/sdk/context/attribution.d.ts +18 -0
  111. package/dist/sdk/context/attribution.js +295 -0
  112. package/dist/sdk/context/runDetails.d.ts +16 -0
  113. package/dist/sdk/context/runDetails.js +22 -0
  114. package/dist/sdk/context/types.d.ts +94 -0
  115. package/dist/sdk/context/types.js +10 -0
  116. package/dist/sdk/core/bus.d.ts +23 -0
  117. package/dist/sdk/core/bus.js +76 -0
  118. package/dist/sdk/core/caller.d.ts +22 -0
  119. package/dist/sdk/core/caller.js +16 -0
  120. package/dist/sdk/core/changes.d.ts +15 -0
  121. package/dist/sdk/core/changes.js +15 -0
  122. package/dist/sdk/core/commandBudget.d.ts +23 -0
  123. package/dist/sdk/core/commandBudget.js +62 -0
  124. package/dist/sdk/core/effort.d.ts +2 -0
  125. package/dist/sdk/core/effort.js +1 -0
  126. package/dist/sdk/core/env.d.ts +18 -0
  127. package/dist/sdk/core/env.js +8 -0
  128. package/dist/sdk/core/errors.d.ts +15 -0
  129. package/dist/sdk/core/errors.js +24 -0
  130. package/dist/sdk/core/frontmatter.d.ts +12 -0
  131. package/dist/sdk/core/frontmatter.js +50 -0
  132. package/dist/sdk/core/fs.d.ts +18 -0
  133. package/dist/sdk/core/fs.js +106 -0
  134. package/dist/sdk/core/index.d.ts +24 -0
  135. package/dist/sdk/core/index.js +203 -0
  136. package/dist/sdk/core/interactiveProfile.d.ts +46 -0
  137. package/dist/sdk/core/interactiveProfile.js +143 -0
  138. package/dist/sdk/core/links.d.ts +51 -0
  139. package/dist/sdk/core/links.js +155 -0
  140. package/dist/sdk/core/path.d.ts +7 -0
  141. package/dist/sdk/core/path.js +79 -0
  142. package/dist/sdk/core/projects.d.ts +18 -0
  143. package/dist/sdk/core/projects.js +67 -0
  144. package/dist/sdk/core/secrets.d.ts +2 -0
  145. package/dist/sdk/core/secrets.js +5 -0
  146. package/dist/sdk/core/shell.d.ts +20 -0
  147. package/dist/sdk/core/shell.js +73 -0
  148. package/dist/sdk/core/text.d.ts +7 -0
  149. package/dist/sdk/core/text.js +40 -0
  150. package/dist/sdk/core/workspace.d.ts +13 -0
  151. package/dist/sdk/core/workspace.js +88 -0
  152. package/dist/sdk/core/workspaceBashTool.d.ts +20 -0
  153. package/dist/sdk/core/workspaceBashTool.js +50 -0
  154. package/dist/sdk/core/workspaceSandbox.d.ts +41 -0
  155. package/dist/sdk/core/workspaceSandbox.js +360 -0
  156. package/dist/sdk/core/workspaceWriteOperations.d.ts +57 -0
  157. package/dist/sdk/core/workspaceWriteOperations.js +245 -0
  158. package/dist/sdk/doctor/checks.d.ts +5 -0
  159. package/dist/sdk/doctor/checks.js +270 -0
  160. package/dist/sdk/doctor/probe.d.ts +4 -0
  161. package/dist/sdk/doctor/probe.js +94 -0
  162. package/dist/sdk/doctor/serverMethods.d.ts +3 -0
  163. package/dist/sdk/doctor/serverMethods.js +8 -0
  164. package/dist/sdk/doctor/service.d.ts +23 -0
  165. package/dist/sdk/doctor/service.js +144 -0
  166. package/dist/sdk/doctor/types.d.ts +141 -0
  167. package/dist/sdk/doctor/types.js +29 -0
  168. package/dist/sdk/harness.d.ts +172 -0
  169. package/dist/sdk/harness.js +387 -0
  170. package/dist/sdk/history/lessonPrompt.d.ts +2 -0
  171. package/dist/sdk/history/lessonPrompt.js +15 -0
  172. package/dist/sdk/history/lessons.d.ts +52 -0
  173. package/dist/sdk/history/lessons.js +173 -0
  174. package/dist/sdk/history/recall.d.ts +68 -0
  175. package/dist/sdk/history/recall.js +199 -0
  176. package/dist/sdk/history/serverMethods.d.ts +3 -0
  177. package/dist/sdk/history/serverMethods.js +8 -0
  178. package/dist/sdk/history/trajectory.d.ts +7 -0
  179. package/dist/sdk/history/trajectory.js +218 -0
  180. package/dist/sdk/hub/catalog.json +123 -0
  181. package/dist/sdk/hub/cli.d.ts +7 -0
  182. package/dist/sdk/hub/cli.js +81 -0
  183. package/dist/sdk/hub/hub.d.ts +74 -0
  184. package/dist/sdk/hub/hub.js +476 -0
  185. package/dist/sdk/hub/schema.d.ts +280 -0
  186. package/dist/sdk/hub/schema.js +78 -0
  187. package/dist/sdk/hub/serverMethods.d.ts +3 -0
  188. package/dist/sdk/hub/serverMethods.js +11 -0
  189. package/dist/sdk/index.d.ts +80 -0
  190. package/dist/sdk/index.js +60 -0
  191. package/dist/sdk/mcp/connections.d.ts +83 -0
  192. package/dist/sdk/mcp/connections.js +676 -0
  193. package/dist/sdk/mcp/manager.d.ts +26 -0
  194. package/dist/sdk/mcp/manager.js +124 -0
  195. package/dist/sdk/mcp/oauth.d.ts +35 -0
  196. package/dist/sdk/mcp/oauth.js +171 -0
  197. package/dist/sdk/mcp/scopeMigration.d.ts +19 -0
  198. package/dist/sdk/mcp/scopeMigration.js +198 -0
  199. package/dist/sdk/mcp/serverMethods.d.ts +3 -0
  200. package/dist/sdk/mcp/serverMethods.js +22 -0
  201. package/dist/sdk/mcp/service.d.ts +160 -0
  202. package/dist/sdk/mcp/service.js +510 -0
  203. package/dist/sdk/mcp/types.d.ts +131 -0
  204. package/dist/sdk/mcp/types.js +49 -0
  205. package/dist/sdk/pi/retryPolicy.d.ts +19 -0
  206. package/dist/sdk/pi/retryPolicy.js +11 -0
  207. package/dist/sdk/pi/runtime.d.ts +14 -0
  208. package/dist/sdk/pi/runtime.js +31 -0
  209. package/dist/sdk/plugins/api.d.ts +66 -0
  210. package/dist/sdk/plugins/api.js +155 -0
  211. package/dist/sdk/plugins/attachments.d.ts +46 -0
  212. package/dist/sdk/plugins/attachments.js +111 -0
  213. package/dist/sdk/plugins/builtin.d.ts +7 -0
  214. package/dist/sdk/plugins/builtin.js +182 -0
  215. package/dist/sdk/plugins/builtinRegistry.d.ts +62 -0
  216. package/dist/sdk/plugins/builtinRegistry.js +77 -0
  217. package/dist/sdk/plugins/catalogue.d.ts +29 -0
  218. package/dist/sdk/plugins/catalogue.js +197 -0
  219. package/dist/sdk/plugins/cli.d.ts +13 -0
  220. package/dist/sdk/plugins/cli.js +188 -0
  221. package/dist/sdk/plugins/commandPrefix.d.ts +8 -0
  222. package/dist/sdk/plugins/commandPrefix.js +21 -0
  223. package/dist/sdk/plugins/discover.d.ts +48 -0
  224. package/dist/sdk/plugins/discover.js +230 -0
  225. package/dist/sdk/plugins/firstParty.d.ts +50 -0
  226. package/dist/sdk/plugins/firstParty.js +119 -0
  227. package/dist/sdk/plugins/hooks.d.ts +94 -0
  228. package/dist/sdk/plugins/hooks.js +162 -0
  229. package/dist/sdk/plugins/identity.d.ts +19 -0
  230. package/dist/sdk/plugins/identity.js +48 -0
  231. package/dist/sdk/plugins/install.d.ts +24 -0
  232. package/dist/sdk/plugins/install.js +160 -0
  233. package/dist/sdk/plugins/inventory.d.ts +22 -0
  234. package/dist/sdk/plugins/inventory.js +111 -0
  235. package/dist/sdk/plugins/manifest.d.ts +21 -0
  236. package/dist/sdk/plugins/manifest.js +94 -0
  237. package/dist/sdk/plugins/plugins.d.ts +106 -0
  238. package/dist/sdk/plugins/plugins.js +165 -0
  239. package/dist/sdk/plugins/proposals.d.ts +17 -0
  240. package/dist/sdk/plugins/proposals.js +147 -0
  241. package/dist/sdk/plugins/runtime.d.ts +9 -0
  242. package/dist/sdk/plugins/runtime.js +95 -0
  243. package/dist/sdk/plugins/surfaces.d.ts +5 -0
  244. package/dist/sdk/plugins/surfaces.js +11 -0
  245. package/dist/sdk/plugins/trust.d.ts +44 -0
  246. package/dist/sdk/plugins/trust.js +120 -0
  247. package/dist/sdk/plugins/types.d.ts +174 -0
  248. package/dist/sdk/plugins/types.js +7 -0
  249. package/dist/sdk/prompt/compile.d.ts +245 -0
  250. package/dist/sdk/prompt/compile.js +535 -0
  251. package/dist/sdk/prompt/reporting.d.ts +2 -0
  252. package/dist/sdk/prompt/reporting.js +94 -0
  253. package/dist/sdk/prompt/standard.d.ts +32 -0
  254. package/dist/sdk/prompt/standard.js +76 -0
  255. package/dist/sdk/refine/cli.d.ts +4 -0
  256. package/dist/sdk/refine/cli.js +186 -0
  257. package/dist/sdk/refine/demo.d.ts +21 -0
  258. package/dist/sdk/refine/demo.js +114 -0
  259. package/dist/sdk/refine/evidence.d.ts +55 -0
  260. package/dist/sdk/refine/evidence.js +330 -0
  261. package/dist/sdk/refine/host.d.ts +59 -0
  262. package/dist/sdk/refine/host.js +105 -0
  263. package/dist/sdk/refine/ledger.d.ts +48 -0
  264. package/dist/sdk/refine/ledger.js +76 -0
  265. package/dist/sdk/refine/library.d.ts +55 -0
  266. package/dist/sdk/refine/library.js +177 -0
  267. package/dist/sdk/refine/pi.d.ts +72 -0
  268. package/dist/sdk/refine/pi.js +248 -0
  269. package/dist/sdk/refine/prompts.d.ts +60 -0
  270. package/dist/sdk/refine/prompts.js +434 -0
  271. package/dist/sdk/refine/recursion.d.ts +113 -0
  272. package/dist/sdk/refine/recursion.js +258 -0
  273. package/dist/sdk/refine/runner.d.ts +83 -0
  274. package/dist/sdk/refine/runner.js +151 -0
  275. package/dist/sdk/refine/selection.d.ts +57 -0
  276. package/dist/sdk/refine/selection.js +251 -0
  277. package/dist/sdk/refine/serverMethods.d.ts +3 -0
  278. package/dist/sdk/refine/serverMethods.js +23 -0
  279. package/dist/sdk/refine/service.d.ts +115 -0
  280. package/dist/sdk/refine/service.js +280 -0
  281. package/dist/sdk/refine/suite.d.ts +67 -0
  282. package/dist/sdk/refine/suite.js +174 -0
  283. package/dist/sdk/refine/trajectory.d.ts +9 -0
  284. package/dist/sdk/refine/trajectory.js +73 -0
  285. package/dist/sdk/refine/types.d.ts +93 -0
  286. package/dist/sdk/refine/types.js +10 -0
  287. package/dist/sdk/remote/addresses.d.ts +19 -0
  288. package/dist/sdk/remote/addresses.js +52 -0
  289. package/dist/sdk/remote/pairing.d.ts +59 -0
  290. package/dist/sdk/remote/pairing.js +160 -0
  291. package/dist/sdk/remote/seal.d.ts +28 -0
  292. package/dist/sdk/remote/seal.js +84 -0
  293. package/dist/sdk/remote/server.d.ts +28 -0
  294. package/dist/sdk/remote/server.js +158 -0
  295. package/dist/sdk/remote/service.d.ts +125 -0
  296. package/dist/sdk/remote/service.js +330 -0
  297. package/dist/sdk/remote/webClient.d.ts +4 -0
  298. package/dist/sdk/remote/webClient.js +452 -0
  299. package/dist/sdk/server/methods.d.ts +3 -0
  300. package/dist/sdk/server/methods.js +365 -0
  301. package/dist/sdk/server/params.d.ts +4 -0
  302. package/dist/sdk/server/params.js +11 -0
  303. package/dist/sdk/server/remote.d.ts +19 -0
  304. package/dist/sdk/server/remote.js +109 -0
  305. package/dist/sdk/server/rpc.d.ts +20 -0
  306. package/dist/sdk/server/rpc.js +102 -0
  307. package/dist/sdk/server/serve.d.ts +13 -0
  308. package/dist/sdk/server/serve.js +25 -0
  309. package/dist/sdk/server/socket.d.ts +28 -0
  310. package/dist/sdk/server/socket.js +122 -0
  311. package/dist/sdk/sessions/approvals.d.ts +47 -0
  312. package/dist/sdk/sessions/approvals.js +119 -0
  313. package/dist/sdk/sessions/checkpoint.d.ts +7 -0
  314. package/dist/sdk/sessions/checkpoint.js +41 -0
  315. package/dist/sdk/sessions/compactionCheckpoint.d.ts +18 -0
  316. package/dist/sdk/sessions/compactionCheckpoint.js +79 -0
  317. package/dist/sdk/sessions/completionCheck.d.ts +51 -0
  318. package/dist/sdk/sessions/completionCheck.js +161 -0
  319. package/dist/sdk/sessions/continuation.d.ts +53 -0
  320. package/dist/sdk/sessions/continuation.js +90 -0
  321. package/dist/sdk/sessions/contracts.d.ts +991 -0
  322. package/dist/sdk/sessions/contracts.js +545 -0
  323. package/dist/sdk/sessions/control.d.ts +72 -0
  324. package/dist/sdk/sessions/control.js +158 -0
  325. package/dist/sdk/sessions/extensionUi.d.ts +19 -0
  326. package/dist/sdk/sessions/extensionUi.js +64 -0
  327. package/dist/sdk/sessions/goal.d.ts +145 -0
  328. package/dist/sdk/sessions/goal.js +405 -0
  329. package/dist/sdk/sessions/goalLoop.d.ts +37 -0
  330. package/dist/sdk/sessions/goalLoop.js +125 -0
  331. package/dist/sdk/sessions/goalPrompts.d.ts +4 -0
  332. package/dist/sdk/sessions/goalPrompts.js +93 -0
  333. package/dist/sdk/sessions/goalStop.d.ts +27 -0
  334. package/dist/sdk/sessions/goalStop.js +41 -0
  335. package/dist/sdk/sessions/history.d.ts +16 -0
  336. package/dist/sdk/sessions/history.js +68 -0
  337. package/dist/sdk/sessions/initialBash.d.ts +7 -0
  338. package/dist/sdk/sessions/initialBash.js +7 -0
  339. package/dist/sdk/sessions/lineageJoin.d.ts +2 -0
  340. package/dist/sdk/sessions/lineageJoin.js +61 -0
  341. package/dist/sdk/sessions/live.d.ts +101 -0
  342. package/dist/sdk/sessions/live.js +265 -0
  343. package/dist/sdk/sessions/planMode.d.ts +116 -0
  344. package/dist/sdk/sessions/planMode.js +281 -0
  345. package/dist/sdk/sessions/policy.d.ts +43 -0
  346. package/dist/sdk/sessions/policy.js +1 -0
  347. package/dist/sdk/sessions/pricing.d.ts +34 -0
  348. package/dist/sdk/sessions/pricing.js +40 -0
  349. package/dist/sdk/sessions/reasoningSummaries.d.ts +11 -0
  350. package/dist/sdk/sessions/reasoningSummaries.js +61 -0
  351. package/dist/sdk/sessions/registry.d.ts +124 -0
  352. package/dist/sdk/sessions/registry.js +392 -0
  353. package/dist/sdk/sessions/runIndex.d.ts +21 -0
  354. package/dist/sdk/sessions/runIndex.js +65 -0
  355. package/dist/sdk/sessions/runStore.d.ts +82 -0
  356. package/dist/sdk/sessions/runStore.js +393 -0
  357. package/dist/sdk/sessions/runner.d.ts +291 -0
  358. package/dist/sdk/sessions/runner.js +1040 -0
  359. package/dist/sdk/sessions/sessionState.d.ts +13 -0
  360. package/dist/sdk/sessions/sessionState.js +31 -0
  361. package/dist/sdk/sessions/sessions.d.ts +238 -0
  362. package/dist/sdk/sessions/sessions.js +923 -0
  363. package/dist/sdk/sessions/sideQuestionServerMethods.d.ts +3 -0
  364. package/dist/sdk/sessions/sideQuestionServerMethods.js +19 -0
  365. package/dist/sdk/sessions/sideQuestions.d.ts +66 -0
  366. package/dist/sdk/sessions/sideQuestions.js +290 -0
  367. package/dist/sdk/sessions/stallWatch.d.ts +35 -0
  368. package/dist/sdk/sessions/stallWatch.js +42 -0
  369. package/dist/sdk/sessions/subagentServerMethods.d.ts +3 -0
  370. package/dist/sdk/sessions/subagentServerMethods.js +41 -0
  371. package/dist/sdk/sessions/subagentService.d.ts +88 -0
  372. package/dist/sdk/sessions/subagentService.js +546 -0
  373. package/dist/sdk/sessions/subagents.d.ts +98 -0
  374. package/dist/sdk/sessions/subagents.js +136 -0
  375. package/dist/sdk/sessions/workSlice.d.ts +167 -0
  376. package/dist/sdk/sessions/workSlice.js +266 -0
  377. package/dist/sdk/sessions/workspaceBoundary.d.ts +15 -0
  378. package/dist/sdk/sessions/workspaceBoundary.js +46 -0
  379. package/dist/sdk/terminal/accountsMenu.d.ts +46 -0
  380. package/dist/sdk/terminal/accountsMenu.js +392 -0
  381. package/dist/sdk/terminal/browser.d.ts +62 -0
  382. package/dist/sdk/terminal/browser.js +41 -0
  383. package/dist/sdk/terminal/browserControl.d.ts +29 -0
  384. package/dist/sdk/terminal/browserControl.js +187 -0
  385. package/dist/sdk/terminal/cli.d.ts +20 -0
  386. package/dist/sdk/terminal/cli.js +121 -0
  387. package/dist/sdk/terminal/client.d.ts +20 -0
  388. package/dist/sdk/terminal/client.js +148 -0
  389. package/dist/sdk/terminal/commandHelp.d.ts +17 -0
  390. package/dist/sdk/terminal/commandHelp.js +20 -0
  391. package/dist/sdk/terminal/control.d.ts +4 -0
  392. package/dist/sdk/terminal/control.js +25 -0
  393. package/dist/sdk/terminal/controller.d.ts +136 -0
  394. package/dist/sdk/terminal/controller.js +579 -0
  395. package/dist/sdk/terminal/credentialStore.d.ts +4 -0
  396. package/dist/sdk/terminal/credentialStore.js +33 -0
  397. package/dist/sdk/terminal/daemon.d.ts +44 -0
  398. package/dist/sdk/terminal/daemon.js +264 -0
  399. package/dist/sdk/terminal/hubMenu.d.ts +10 -0
  400. package/dist/sdk/terminal/hubMenu.js +34 -0
  401. package/dist/sdk/terminal/launch.d.ts +5 -0
  402. package/dist/sdk/terminal/launch.js +27 -0
  403. package/dist/sdk/terminal/liveTerminal.d.ts +96 -0
  404. package/dist/sdk/terminal/liveTerminal.js +436 -0
  405. package/dist/sdk/terminal/logs.d.ts +14 -0
  406. package/dist/sdk/terminal/logs.js +59 -0
  407. package/dist/sdk/terminal/opentui/ansi.d.ts +25 -0
  408. package/dist/sdk/terminal/opentui/ansi.js +192 -0
  409. package/dist/sdk/terminal/opentui/model.d.ts +163 -0
  410. package/dist/sdk/terminal/opentui/model.js +484 -0
  411. package/dist/sdk/terminal/opentui/subagentsWidget.d.ts +28 -0
  412. package/dist/sdk/terminal/opentui/subagentsWidget.js +54 -0
  413. package/dist/sdk/terminal/opentui/theme.d.ts +47 -0
  414. package/dist/sdk/terminal/opentui/theme.js +93 -0
  415. package/dist/sdk/terminal/piExtension.d.ts +12 -0
  416. package/dist/sdk/terminal/piExtension.js +847 -0
  417. package/dist/sdk/terminal/pluginMenu.d.ts +34 -0
  418. package/dist/sdk/terminal/pluginMenu.js +101 -0
  419. package/dist/sdk/terminal/socket.d.ts +73 -0
  420. package/dist/sdk/terminal/socket.js +287 -0
  421. package/dist/sdk/terminal/standalone.d.ts +52 -0
  422. package/dist/sdk/terminal/standalone.js +329 -0
  423. package/dist/sdk/terminal/subagentMonitor.d.ts +62 -0
  424. package/dist/sdk/terminal/subagentMonitor.js +176 -0
  425. package/dist/sdk/terminal/terminals.d.ts +312 -0
  426. package/dist/sdk/terminal/terminals.js +1782 -0
  427. package/dist/sdk/terminal/toolName.d.ts +6 -0
  428. package/dist/sdk/terminal/toolName.js +12 -0
  429. package/dist/sdk/terminal/trajectory.d.ts +15 -0
  430. package/dist/sdk/terminal/trajectory.js +38 -0
  431. package/dist/sdk/terminal/tui/annotateCommand.d.ts +7 -0
  432. package/dist/sdk/terminal/tui/annotateCommand.js +36 -0
  433. package/dist/sdk/terminal/tui/annotateSend.d.ts +30 -0
  434. package/dist/sdk/terminal/tui/annotateSend.js +40 -0
  435. package/dist/sdk/terminal/tui/chrome.d.ts +68 -0
  436. package/dist/sdk/terminal/tui/chrome.js +182 -0
  437. package/dist/sdk/terminal/tui/clipboardFiles.d.ts +11 -0
  438. package/dist/sdk/terminal/tui/clipboardFiles.js +74 -0
  439. package/dist/sdk/terminal/tui/commandPages.d.ts +16 -0
  440. package/dist/sdk/terminal/tui/commandPages.js +136 -0
  441. package/dist/sdk/terminal/tui/commands.d.ts +71 -0
  442. package/dist/sdk/terminal/tui/commands.js +496 -0
  443. package/dist/sdk/terminal/tui/dialogGeometry.d.ts +27 -0
  444. package/dist/sdk/terminal/tui/dialogGeometry.js +52 -0
  445. package/dist/sdk/terminal/tui/dialogs.d.ts +81 -0
  446. package/dist/sdk/terminal/tui/dialogs.js +372 -0
  447. package/dist/sdk/terminal/tui/goalCommand.d.ts +19 -0
  448. package/dist/sdk/terminal/tui/goalCommand.js +83 -0
  449. package/dist/sdk/terminal/tui/harnessRuntime.d.ts +8 -0
  450. package/dist/sdk/terminal/tui/harnessRuntime.js +771 -0
  451. package/dist/sdk/terminal/tui/keybindings.d.ts +11 -0
  452. package/dist/sdk/terminal/tui/keybindings.js +49 -0
  453. package/dist/sdk/terminal/tui/list.d.ts +86 -0
  454. package/dist/sdk/terminal/tui/list.js +278 -0
  455. package/dist/sdk/terminal/tui/markdown.d.ts +16 -0
  456. package/dist/sdk/terminal/tui/markdown.js +55 -0
  457. package/dist/sdk/terminal/tui/modeChoices.d.ts +61 -0
  458. package/dist/sdk/terminal/tui/modeChoices.js +95 -0
  459. package/dist/sdk/terminal/tui/modelPicker.d.ts +55 -0
  460. package/dist/sdk/terminal/tui/modelPicker.js +150 -0
  461. package/dist/sdk/terminal/tui/mouse.d.ts +3 -0
  462. package/dist/sdk/terminal/tui/mouse.js +3 -0
  463. package/dist/sdk/terminal/tui/mouseReport.d.ts +30 -0
  464. package/dist/sdk/terminal/tui/mouseReport.js +80 -0
  465. package/dist/sdk/terminal/tui/page.d.ts +17 -0
  466. package/dist/sdk/terminal/tui/page.js +1 -0
  467. package/dist/sdk/terminal/tui/pageOverlay.d.ts +30 -0
  468. package/dist/sdk/terminal/tui/pageOverlay.js +183 -0
  469. package/dist/sdk/terminal/tui/pages/accountsPage.d.ts +76 -0
  470. package/dist/sdk/terminal/tui/pages/accountsPage.js +409 -0
  471. package/dist/sdk/terminal/tui/pages/agentsPage.d.ts +74 -0
  472. package/dist/sdk/terminal/tui/pages/agentsPage.js +193 -0
  473. package/dist/sdk/terminal/tui/pages/annotatePage.d.ts +148 -0
  474. package/dist/sdk/terminal/tui/pages/annotatePage.js +576 -0
  475. package/dist/sdk/terminal/tui/pages/browserPage.d.ts +87 -0
  476. package/dist/sdk/terminal/tui/pages/browserPage.js +739 -0
  477. package/dist/sdk/terminal/tui/pages/componentsPage.d.ts +47 -0
  478. package/dist/sdk/terminal/tui/pages/componentsPage.js +119 -0
  479. package/dist/sdk/terminal/tui/pages/contextPage.d.ts +91 -0
  480. package/dist/sdk/terminal/tui/pages/contextPage.js +585 -0
  481. package/dist/sdk/terminal/tui/pages/doctorPage.d.ts +39 -0
  482. package/dist/sdk/terminal/tui/pages/doctorPage.js +233 -0
  483. package/dist/sdk/terminal/tui/pages/followUpQueuePage.d.ts +34 -0
  484. package/dist/sdk/terminal/tui/pages/followUpQueuePage.js +130 -0
  485. package/dist/sdk/terminal/tui/pages/hubPage.d.ts +52 -0
  486. package/dist/sdk/terminal/tui/pages/hubPage.js +292 -0
  487. package/dist/sdk/terminal/tui/pages/logPage.d.ts +38 -0
  488. package/dist/sdk/terminal/tui/pages/logPage.js +189 -0
  489. package/dist/sdk/terminal/tui/pages/permissionsPage.d.ts +44 -0
  490. package/dist/sdk/terminal/tui/pages/permissionsPage.js +124 -0
  491. package/dist/sdk/terminal/tui/pages/pluginsPage.d.ts +65 -0
  492. package/dist/sdk/terminal/tui/pages/pluginsPage.js +519 -0
  493. package/dist/sdk/terminal/tui/pages/remoteControlPage.d.ts +32 -0
  494. package/dist/sdk/terminal/tui/pages/remoteControlPage.js +170 -0
  495. package/dist/sdk/terminal/tui/pages/settingsPage.d.ts +63 -0
  496. package/dist/sdk/terminal/tui/pages/settingsPage.js +103 -0
  497. package/dist/sdk/terminal/tui/pages/subagentsPage.d.ts +24 -0
  498. package/dist/sdk/terminal/tui/pages/subagentsPage.js +155 -0
  499. package/dist/sdk/terminal/tui/pages/textPage.d.ts +17 -0
  500. package/dist/sdk/terminal/tui/pages/textPage.js +52 -0
  501. package/dist/sdk/terminal/tui/pages/trajectoryPage.d.ts +66 -0
  502. package/dist/sdk/terminal/tui/pages/trajectoryPage.js +490 -0
  503. package/dist/sdk/terminal/tui/pages/usagePage.d.ts +45 -0
  504. package/dist/sdk/terminal/tui/pages/usagePage.js +397 -0
  505. package/dist/sdk/terminal/tui/pages/worktreesPage.d.ts +72 -0
  506. package/dist/sdk/terminal/tui/pages/worktreesPage.js +203 -0
  507. package/dist/sdk/terminal/tui/piAdapter.d.ts +17 -0
  508. package/dist/sdk/terminal/tui/piAdapter.js +46 -0
  509. package/dist/sdk/terminal/tui/planMode.d.ts +2 -0
  510. package/dist/sdk/terminal/tui/planMode.js +2 -0
  511. package/dist/sdk/terminal/tui/pluginCommands.d.ts +16 -0
  512. package/dist/sdk/terminal/tui/pluginCommands.js +41 -0
  513. package/dist/sdk/terminal/tui/qr.d.ts +4 -0
  514. package/dist/sdk/terminal/tui/qr.js +35 -0
  515. package/dist/sdk/terminal/tui/questionPicker.d.ts +20 -0
  516. package/dist/sdk/terminal/tui/questionPicker.js +150 -0
  517. package/dist/sdk/terminal/tui/questions.d.ts +21 -0
  518. package/dist/sdk/terminal/tui/questions.js +42 -0
  519. package/dist/sdk/terminal/tui/runtime.d.ts +117 -0
  520. package/dist/sdk/terminal/tui/runtime.js +544 -0
  521. package/dist/sdk/terminal/tui/search.d.ts +22 -0
  522. package/dist/sdk/terminal/tui/search.js +61 -0
  523. package/dist/sdk/terminal/tui/selection.d.ts +16 -0
  524. package/dist/sdk/terminal/tui/selection.js +16 -0
  525. package/dist/sdk/terminal/tui/sessionPicker.d.ts +40 -0
  526. package/dist/sdk/terminal/tui/sessionPicker.js +141 -0
  527. package/dist/sdk/terminal/tui/sessionUi.d.ts +3 -0
  528. package/dist/sdk/terminal/tui/sessionUi.js +30 -0
  529. package/dist/sdk/terminal/tui/settingsModel.d.ts +14 -0
  530. package/dist/sdk/terminal/tui/settingsModel.js +195 -0
  531. package/dist/sdk/terminal/tui/sideQuestion.d.ts +57 -0
  532. package/dist/sdk/terminal/tui/sideQuestion.js +241 -0
  533. package/dist/sdk/terminal/tui/skillInvocation.d.ts +28 -0
  534. package/dist/sdk/terminal/tui/skillInvocation.js +63 -0
  535. package/dist/sdk/terminal/tui/status.d.ts +18 -0
  536. package/dist/sdk/terminal/tui/status.js +67 -0
  537. package/dist/sdk/terminal/tui/theme.d.ts +54 -0
  538. package/dist/sdk/terminal/tui/theme.js +185 -0
  539. package/dist/sdk/terminal/tui/thinkingLevels.d.ts +11 -0
  540. package/dist/sdk/terminal/tui/thinkingLevels.js +31 -0
  541. package/dist/sdk/terminal/tui/treeModel.d.ts +79 -0
  542. package/dist/sdk/terminal/tui/treeModel.js +483 -0
  543. package/dist/sdk/terminal/tui/treePicker.d.ts +49 -0
  544. package/dist/sdk/terminal/tui/treePicker.js +251 -0
  545. package/dist/sdk/terminal/tui/ui.d.ts +49 -0
  546. package/dist/sdk/terminal/tui/ui.js +149 -0
  547. package/dist/sdk/terminal/tui/variantCommands.d.ts +32 -0
  548. package/dist/sdk/terminal/tui/variantCommands.js +359 -0
  549. package/dist/sdk/terminal/tui/workingStatus.d.ts +9 -0
  550. package/dist/sdk/terminal/tui/workingStatus.js +229 -0
  551. package/dist/sdk/terminal/variantControl.d.ts +24 -0
  552. package/dist/sdk/terminal/variantControl.js +145 -0
  553. package/dist/sdk/tools/askUser.d.ts +6 -0
  554. package/dist/sdk/tools/askUser.js +92 -0
  555. package/dist/sdk/tools/defaultSkills.d.ts +23 -0
  556. package/dist/sdk/tools/defaultSkills.js +46 -0
  557. package/dist/sdk/tools/definitions.d.ts +32 -0
  558. package/dist/sdk/tools/definitions.js +133 -0
  559. package/dist/sdk/tools/dispatch.d.ts +16 -0
  560. package/dist/sdk/tools/dispatch.js +92 -0
  561. package/dist/sdk/tools/getCapabilities.d.ts +31 -0
  562. package/dist/sdk/tools/getCapabilities.js +34 -0
  563. package/dist/sdk/tools/harnessTools.d.ts +8 -0
  564. package/dist/sdk/tools/harnessTools.js +20 -0
  565. package/dist/sdk/tools/sessionName.d.ts +16 -0
  566. package/dist/sdk/tools/sessionName.js +78 -0
  567. package/dist/sdk/tools/spawnSubagent.d.ts +4 -0
  568. package/dist/sdk/tools/spawnSubagent.js +63 -0
  569. package/dist/sdk/tools/todo.d.ts +15 -0
  570. package/dist/sdk/tools/todo.js +66 -0
  571. package/dist/sdk/tools/types.d.ts +48 -0
  572. package/dist/sdk/tools/types.js +1 -0
  573. package/dist/sdk/usage/analytics.d.ts +20 -0
  574. package/dist/sdk/usage/analytics.js +151 -0
  575. package/dist/sdk/usage/ledger.d.ts +38 -0
  576. package/dist/sdk/usage/ledger.js +142 -0
  577. package/dist/sdk/usage/limits/adapters.d.ts +11 -0
  578. package/dist/sdk/usage/limits/adapters.js +349 -0
  579. package/dist/sdk/usage/limits/capture.d.ts +8 -0
  580. package/dist/sdk/usage/limits/capture.js +47 -0
  581. package/dist/sdk/usage/limits/http.d.ts +12 -0
  582. package/dist/sdk/usage/limits/http.js +51 -0
  583. package/dist/sdk/usage/limits/normalize.d.ts +15 -0
  584. package/dist/sdk/usage/limits/normalize.js +211 -0
  585. package/dist/sdk/usage/limits/service.d.ts +30 -0
  586. package/dist/sdk/usage/limits/service.js +176 -0
  587. package/dist/sdk/usage/limits/types.d.ts +65 -0
  588. package/dist/sdk/usage/limits/types.js +1 -0
  589. package/dist/sdk/usage/serverMethods.d.ts +3 -0
  590. package/dist/sdk/usage/serverMethods.js +22 -0
  591. package/dist/sdk/usage/service.d.ts +32 -0
  592. package/dist/sdk/usage/service.js +66 -0
  593. package/dist/sdk/usage/settings.d.ts +7 -0
  594. package/dist/sdk/usage/settings.js +28 -0
  595. package/dist/sdk/usage/types.d.ts +60 -0
  596. package/dist/sdk/usage/types.js +4 -0
  597. package/dist/sdk/variant/components.d.ts +34 -0
  598. package/dist/sdk/variant/components.js +230 -0
  599. package/dist/sdk/variant/materialise.d.ts +66 -0
  600. package/dist/sdk/variant/materialise.js +81 -0
  601. package/dist/sdk/variant/migrate.d.ts +4 -0
  602. package/dist/sdk/variant/migrate.js +41 -0
  603. package/dist/sdk/variant/seed.d.ts +20 -0
  604. package/dist/sdk/variant/seed.js +116 -0
  605. package/dist/sdk/variant/store.d.ts +114 -0
  606. package/dist/sdk/variant/store.js +256 -0
  607. package/dist/sdk/variant/surface.d.ts +56 -0
  608. package/dist/sdk/variant/surface.js +81 -0
  609. package/dist/sdk/variant/trust.d.ts +27 -0
  610. package/dist/sdk/variant/trust.js +64 -0
  611. package/dist/sdk/variant/variant.d.ts +71 -0
  612. package/dist/sdk/variant/variant.js +331 -0
  613. package/dist/sdk/web/markdown.d.ts +10 -0
  614. package/dist/sdk/web/markdown.js +66 -0
  615. package/dist/sdk/web/part.d.ts +10 -0
  616. package/dist/sdk/web/part.js +6 -0
  617. package/dist/sdk/web/safeRequest.d.ts +34 -0
  618. package/dist/sdk/web/safeRequest.js +175 -0
  619. package/dist/sdk/web/search.d.ts +53 -0
  620. package/dist/sdk/web/search.js +168 -0
  621. package/dist/sdk/web/serverMethods.d.ts +3 -0
  622. package/dist/sdk/web/serverMethods.js +7 -0
  623. package/dist/sdk/web/text.d.ts +2 -0
  624. package/dist/sdk/web/text.js +7 -0
  625. package/dist/sdk/web/tools.d.ts +22 -0
  626. package/dist/sdk/web/tools.js +195 -0
  627. package/dist/sdk/web/turndown-plugin-gfm.d.ts +4 -0
  628. package/dist/sdk/wiki/notes.d.ts +68 -0
  629. package/dist/sdk/wiki/notes.js +297 -0
  630. package/dist/sdk/wiki/serverMethods.d.ts +3 -0
  631. package/dist/sdk/wiki/serverMethods.js +26 -0
  632. package/dist/sdk/worktrees/cli.d.ts +11 -0
  633. package/dist/sdk/worktrees/cli.js +146 -0
  634. package/dist/sdk/worktrees/copy.d.ts +9 -0
  635. package/dist/sdk/worktrees/copy.js +111 -0
  636. package/dist/sdk/worktrees/git.d.ts +18 -0
  637. package/dist/sdk/worktrees/git.js +89 -0
  638. package/dist/sdk/worktrees/serverMethods.d.ts +3 -0
  639. package/dist/sdk/worktrees/serverMethods.js +30 -0
  640. package/dist/sdk/worktrees/service.d.ts +73 -0
  641. package/dist/sdk/worktrees/service.js +483 -0
  642. package/dist/sdk/worktrees/setup.d.ts +23 -0
  643. package/dist/sdk/worktrees/setup.js +65 -0
  644. package/dist/sdk/worktrees/snapshot.d.ts +16 -0
  645. package/dist/sdk/worktrees/snapshot.js +83 -0
  646. package/dist/sdk/worktrees/types.d.ts +91 -0
  647. package/dist/sdk/worktrees/types.js +1 -0
  648. package/dist/sdk/world/actions.d.ts +23 -0
  649. package/dist/sdk/world/actions.js +31 -0
  650. package/dist/sdk/world/cli.d.ts +12 -0
  651. package/dist/sdk/world/cli.js +166 -0
  652. package/dist/sdk/world/images.d.ts +20 -0
  653. package/dist/sdk/world/images.js +48 -0
  654. package/dist/sdk/world/untrusted.d.ts +12 -0
  655. package/dist/sdk/world/untrusted.js +20 -0
  656. package/dist/sdk/world/world.d.ts +75 -0
  657. package/dist/sdk/world/world.js +117 -0
  658. package/dist/terminal-opentui.js +30986 -0
  659. package/dist/terminal-pi.js +3008 -610
  660. package/docs/README.md +45 -1
  661. package/docs/architecture/00-overview.md +171 -0
  662. package/docs/architecture/01-extension-points.md +78 -0
  663. package/docs/architecture/02-sessions-and-runs.md +505 -0
  664. package/docs/architecture/03-variants.md +122 -0
  665. package/docs/architecture/04-prompt.md +277 -0
  666. package/docs/architecture/05-refinement.md +134 -0
  667. package/docs/architecture/06-plugins-and-capabilities.md +208 -0
  668. package/docs/architecture/07-tools-and-gate.md +245 -0
  669. package/docs/architecture/08-memory-and-history.md +100 -0
  670. package/docs/architecture/09-accounts-and-connectors.md +153 -0
  671. package/docs/architecture/10-server-protocol.md +403 -0
  672. package/docs/architecture/11-terminal.md +555 -0
  673. package/docs/architecture/12-storage.md +118 -0
  674. package/docs/architecture/13-world-tools.md +114 -0
  675. package/docs/architecture/14-surfaces-and-parity.md +151 -0
  676. package/docs/architecture/15-remote-control.md +120 -0
  677. package/docs/architecture/README.md +143 -0
  678. package/docs/architecture/proposals/PROP-0001-reporting-section.md +106 -0
  679. package/docs/architecture/proposals/PROP-0002-retain-rollout-workspaces.md +104 -0
  680. package/docs/architecture/proposals/PROP-0003-executor-settings.md +81 -0
  681. package/docs/architecture/proposals/PROP-0004-flexible-reporting-guidance.md +71 -0
  682. package/docs/architecture/proposals/PROP-0005-xharness-cli-name.md +78 -0
  683. package/docs/architecture/proposals/PROP-0006-run-checklist.md +72 -0
  684. package/docs/architecture/proposals/PROP-0007-run-continuation.md +80 -0
  685. package/docs/architecture/proposals/PROP-0008-lessons-from-runs.md +80 -0
  686. package/docs/architecture/proposals/PROP-0009-foundation-and-variants.md +78 -0
  687. package/docs/architecture/proposals/PROP-0010-session-names.md +73 -0
  688. package/docs/architecture/proposals/PROP-0011-doctor.md +63 -0
  689. package/docs/architecture/proposals/PROP-0012-release-baseline.md +56 -0
  690. package/docs/architecture/proposals/PROP-0013-resource-browser.md +58 -0
  691. package/docs/architecture/proposals/PROP-0014-fullscreen-browser-tabs.md +58 -0
  692. package/docs/architecture/proposals/PROP-0015-one-capability-surface.md +88 -0
  693. package/docs/architecture/proposals/PROP-0016-managed-worktrees.md +156 -0
  694. package/docs/architecture/proposals/PROP-0017-page-annotations.md +131 -0
  695. package/docs/architecture/proposals/PROP-0018-annotation-queue-and-app-targets.md +183 -0
  696. package/docs/architecture/proposals/PROP-0019-contextual-side-questions.md +122 -0
  697. package/docs/architecture/proposals/PROP-0020-builtin-feature-plugins.md +105 -0
  698. package/docs/architecture/proposals/PROP-0021-command-namespaces-and-duplicates.md +99 -0
  699. package/docs/architecture/proposals/PROP-0022-plan-only-questions.md +102 -0
  700. package/docs/architecture/proposals/PROP-0023-xagent-cli-name.md +61 -0
  701. package/docs/architecture/proposals/PROP-0024-question-sketch-previews.md +130 -0
  702. package/docs/architecture/proposals/PROP-0025-contextual-question-wireframes.md +49 -0
  703. package/docs/architecture/proposals/PROP-0026-connected-sketch-display.md +96 -0
  704. package/docs/architecture/proposals/PROP-0027-xingular-agent-product-identity.md +60 -0
  705. package/docs/architecture/proposals/PROP-0028-normalize-question-wireframes.md +55 -0
  706. package/docs/architecture/proposals/PROP-0029-agent-profiles.md +124 -0
  707. package/docs/architecture/proposals/PROP-0030-subagent-title.md +86 -0
  708. package/docs/architecture/proposals/PROP-0031-plugin-command-owner-namespaces.md +54 -0
  709. package/docs/architecture/proposals/PROP-0032-planning-quality.md +196 -0
  710. package/docs/architecture/proposals/PROP-0033-compaction-plan-checkpoints.md +75 -0
  711. package/docs/architecture/proposals/PROP-0034-conversation-fast-mode.md +120 -0
  712. package/docs/architecture/proposals/PROP-0035-retain-subagent-status.md +47 -0
  713. package/docs/architecture/proposals/PROP-0036-first-class-harness-commands.md +59 -0
  714. package/docs/architecture/proposals/PROP-0037-workspace-write-boundary.md +63 -0
  715. package/docs/architecture/proposals/PROP-0038-annotate-open-shadow-roots.md +73 -0
  716. package/docs/architecture/proposals/PROP-0039-workspace-boundary-hardening.md +139 -0
  717. package/docs/architecture/proposals/PROP-0040-one-launch-path.md +87 -0
  718. package/docs/architecture/proposals/PROP-0041-bounded-work-slices.md +260 -0
  719. package/docs/architecture/proposals/PROP-0042-usage-and-provider-limits.md +127 -0
  720. package/docs/architecture/proposals/PROP-0043-read-only-plan-bash.md +74 -0
  721. package/docs/architecture/proposals/PROP-0044-work-slice-defaults.md +93 -0
  722. package/docs/architecture/proposals/PROP-0045-rename-checklist-to-todo.md +132 -0
  723. package/docs/architecture/proposals/PROP-0046-progress-aware-stall-guards.md +82 -0
  724. package/docs/architecture/proposals/PROP-0047-plugins-hub-separation.md +122 -0
  725. package/docs/architecture/proposals/PROP-0048-simple-annotate.md +85 -0
  726. package/docs/architecture/proposals/PROP-0049-context-attribution.md +415 -0
  727. package/docs/architecture/proposals/PROP-0050-run-stop-codes-and-refusals.md +30 -0
  728. package/docs/architecture/proposals/PROP-0051-unfinished-run-handoff.md +110 -0
  729. package/docs/architecture/proposals/PROP-0052-terminal-refine-and-variant-switch.md +111 -0
  730. package/docs/architecture/proposals/README.md +123 -0
  731. package/docs/decisions/ADR-0001-owned-terminal.md +10 -3
  732. package/docs/decisions/ADR-0003-shared-asynchronous-subagents.md +3 -1
  733. package/docs/decisions/ADR-0004-fullscreen-terminal-layout.md +3 -2
  734. package/docs/decisions/ADR-0006-opentui-only-terminal.md +47 -0
  735. package/docs/decisions/ADR-0007-reporting-section.md +33 -0
  736. package/docs/decisions/ADR-0008-flexible-reporting-guidance.md +41 -0
  737. package/docs/decisions/ADR-0009-xharness-command.md +39 -0
  738. package/docs/decisions/ADR-0010-lessons-in-the-wiki.md +31 -0
  739. package/docs/decisions/ADR-0011-foundation-and-variants.md +28 -0
  740. package/docs/decisions/ADR-0012-native-session-names.md +34 -0
  741. package/docs/decisions/ADR-0013-doctor.md +27 -0
  742. package/docs/decisions/ADR-0014-public-release-baseline.md +22 -0
  743. package/docs/decisions/ADR-0015-resource-browser.md +28 -0
  744. package/docs/decisions/ADR-0016-fullscreen-browser-tabs.md +31 -0
  745. package/docs/decisions/ADR-0017-one-capability-surface.md +34 -0
  746. package/docs/decisions/ADR-0018-builtin-feature-plugins.md +35 -0
  747. package/docs/decisions/ADR-0019-managed-git-worktrees.md +31 -0
  748. package/docs/decisions/ADR-0020-page-annotations.md +37 -0
  749. package/docs/decisions/ADR-0021-required-command-namespaces.md +40 -0
  750. package/docs/decisions/ADR-0022-plan-only-question-tools.md +34 -0
  751. package/docs/decisions/ADR-0023-contextual-side-question-runs.md +35 -0
  752. package/docs/decisions/ADR-0024-xagent-command.md +40 -0
  753. package/docs/decisions/ADR-0025-question-choice-sketches.md +49 -0
  754. package/docs/decisions/ADR-0026-contextual-question-wireframes.md +58 -0
  755. package/docs/decisions/ADR-0027-connected-sketch-display.md +62 -0
  756. package/docs/decisions/ADR-0028-xingular-agent-product-identity.md +56 -0
  757. package/docs/decisions/ADR-0029-normalized-question-wireframe-borders.md +33 -0
  758. package/docs/decisions/ADR-0030-agent-profiles.md +43 -0
  759. package/docs/decisions/ADR-0031-plugin-command-owner-namespaces.md +37 -0
  760. package/docs/decisions/ADR-0032-compaction-run-checkpoints.md +35 -0
  761. package/docs/decisions/ADR-0033-plan-mode-research-delegation.md +47 -0
  762. package/docs/decisions/ADR-0034-first-class-harness-terminal-commands.md +25 -0
  763. package/docs/decisions/ADR-0035-one-launch-path.md +40 -0
  764. package/docs/decisions/ADR-0036-workspace-write-operation-boundary.md +54 -0
  765. package/docs/decisions/ADR-0037-usage-ledger-and-provider-limits.md +44 -0
  766. package/docs/decisions/ADR-0038-plan-bash-os-read-only.md +29 -0
  767. package/docs/decisions/ADR-0039-progress-aware-stall-guards.md +43 -0
  768. package/docs/decisions/ADR-0040-architecture-change-workflow.md +31 -0
  769. package/docs/decisions/ADR-0041-plugins-hub-separation.md +41 -0
  770. package/docs/decisions/ADR-0042-windows-shell-without-sandbox.md +40 -0
  771. package/docs/decisions/ADR-0043-parents-continue-stopped-subagents.md +49 -0
  772. package/docs/decisions/ADR-0044-annotations-pending-or-sent.md +24 -0
  773. package/docs/decisions/ADR-0045-default-plugin-authoring-skill.md +9 -0
  774. package/docs/decisions/ADR-0046-hash-bound-plugin-proposals.md +20 -0
  775. package/docs/decisions/ADR-0047-links-open-with-the-os-handler.md +47 -0
  776. package/docs/decisions/ADR-0048-required-skills-from-a-message.md +42 -0
  777. package/docs/decisions/ADR-0050-approved-window-screenshots.md +19 -0
  778. package/docs/decisions/ADR-0051-terminal-decision-wait.md +10 -0
  779. package/docs/decisions/ADR-0052-per-profile-subagent-budgets.md +25 -0
  780. package/docs/decisions/ADR-0053-no-repeated-work-guard.md +45 -0
  781. package/docs/decisions/ADR-0054-terminal-reply-heartbeat-and-stall.md +52 -0
  782. package/docs/decisions/ADR-0055-plan-output-repair.md +51 -0
  783. package/docs/decisions/ADR-0056-remote-control.md +53 -0
  784. package/docs/decisions/ADR-0057-structured-plan-outcomes.md +39 -0
  785. package/docs/decisions/ADR-0058-ask-user-only-plan-clarification.md +36 -0
  786. package/docs/decisions/ADR-0059-run-diagnostic-evidence.md +35 -0
  787. package/docs/decisions/ADR-0060-approvals-are-controls.md +40 -0
  788. package/docs/decisions/ADR-0061-strict-plugin-command-namespaces.md +41 -0
  789. package/docs/decisions/ADR-0062-shared-account-state.md +67 -0
  790. package/docs/decisions/ADR-0063-unfinished-work-handoffs.md +34 -0
  791. package/docs/decisions/ADR-0064-account-model-fallback-on-resume.md +79 -0
  792. package/docs/decisions/ADR-0065-variant-switch-at-turn-boundaries.md +31 -0
  793. package/docs/decisions/ADR-0066-guided-refinement-from-turn-snapshots.md +37 -0
  794. package/docs/decisions/ADR-0067-cache-stable-compaction-checkpoint.md +54 -0
  795. package/docs/decisions/ADR-0068-scope-and-completion-report.md +60 -0
  796. package/docs/decisions/ADR-0069-stop-gate-and-finish.md +136 -0
  797. package/docs/decisions/ADR-0070-terminal-slice-continuation.md +49 -0
  798. package/docs/decisions/ADR-0071-completion-check.md +104 -0
  799. package/docs/decisions/ADR-0072-codex-prompts-and-goal.md +108 -0
  800. package/docs/decisions/ADR-0073-large-reporting-prompt.md +89 -0
  801. package/docs/decisions/ADR-0074-report-content-not-report-blocks.md +90 -0
  802. package/docs/decisions/ADR-0075-no-todo-gate.md +84 -0
  803. package/docs/decisions/ADR-0076-codex-final-answer-verbatim.md +98 -0
  804. package/docs/decisions/ADR-0077-plan-runs-may-conclude-no-plan-needed.md +120 -0
  805. package/docs/decisions/ADR-0078-child-aware-stall-watch.md +46 -0
  806. package/docs/decisions/ADR-0079-phase-led-reporting-guidance.md +72 -0
  807. package/docs/decisions/ADR-0080-fixed-width-question-sketch-canvas.md +50 -0
  808. package/docs/decisions/ADR-0081-no-work-slice-budget-by-default.md +36 -0
  809. package/docs/decisions/ADR-0082-connected-brave-browser.md +72 -0
  810. package/docs/decisions/ADR-0083-one-live-session-runtime.md +256 -0
  811. package/docs/doctor.md +95 -0
  812. package/docs/experiments/EXP-0001-terminal-input-latency/plan.md +81 -0
  813. package/docs/experiments/EXP-0001-terminal-input-latency/results.md +46 -0
  814. package/docs/experiments/EXP-0002-opentui-typing-latency/plan.md +70 -0
  815. package/docs/experiments/EXP-0002-opentui-typing-latency/results.md +92 -0
  816. package/docs/experiments/EXP-0003-performance-audit/data/session-runtime-replication.json +420 -0
  817. package/docs/experiments/EXP-0003-performance-audit/data/session-runtime.json +420 -0
  818. package/docs/experiments/EXP-0003-performance-audit/data/terminal-compact.json +376 -0
  819. package/docs/experiments/EXP-0003-performance-audit/data/terminal-history.json +422 -0
  820. package/docs/experiments/EXP-0003-performance-audit/data/terminal-question.json +95 -0
  821. package/docs/experiments/EXP-0003-performance-audit/data/terminal-wide.json +1036 -0
  822. package/docs/experiments/EXP-0003-performance-audit/plan.md +109 -0
  823. package/docs/experiments/EXP-0003-performance-audit/results.md +151 -0
  824. package/docs/features/README.md +46 -0
  825. package/docs/features/automations/README.md +41 -0
  826. package/docs/features/cores/README.md +39 -0
  827. package/docs/features/google-harness2/README.md +52 -0
  828. package/docs/features/integrations/README.md +40 -0
  829. package/docs/features/interfaces/README.md +29 -0
  830. package/docs/features/memory/README.md +28 -0
  831. package/docs/future-work.md +48 -0
  832. package/docs/handoff-2026-10-25-app-parity-and-solo-tabs.md +202 -0
  833. package/docs/parity.md +158 -0
  834. package/docs/releases/1.0.0.md +40 -0
  835. package/docs/releases/1.1.1.md +28 -0
  836. package/docs/releases/1.2.0.md +49 -0
  837. package/docs/releases/1.3.0.md +21 -0
  838. package/docs/releases/1.3.1-unstable.1.md +8 -0
  839. package/docs/releases/1.3.1-unstable.2.md +11 -0
  840. package/docs/releases/1.3.1-unstable.3.md +54 -0
  841. package/docs/releases/1.3.1-unstable.4.md +56 -0
  842. package/docs/releases/1.3.1-unstable.5.md +53 -0
  843. package/docs/releases/1.3.1-unstable.6.md +31 -0
  844. package/docs/releases/1.3.1-unstable.7.md +17 -0
  845. package/docs/releases/1.3.1-unstable.8.md +19 -0
  846. package/docs/releases/1.3.1-unstable.9.md +54 -0
  847. package/docs/releases/1.4.0-unstable.md +25 -0
  848. package/docs/releases/1.5.0-unstable.md +32 -0
  849. package/docs/releases/1.5.1-unstable.md +24 -0
  850. package/docs/releases/1.6.0-unstable.md +59 -0
  851. package/docs/releases/2.0.1-unstable.md +63 -0
  852. package/docs/releases/4.0.0.md +47 -0
  853. package/docs/releases/README.md +49 -0
  854. package/docs/study/00-index.md +112 -0
  855. package/docs/study/STUDY-0003-long-horizon-runs.md +210 -0
  856. package/docs/study/STUDY-0004-turn-end-controls.md +130 -0
  857. package/docs/study/STUDY-0005-skill-installation-guidance.md +146 -0
  858. package/docs/study/STUDY-0006-reporting-prompts.md +119 -0
  859. package/docs/study/STUDY-0007-claude-code-prompt.md +162 -0
  860. package/docs/study/STUDY-0008-browser-control.md +281 -0
  861. package/docs/study/STUDY-0009-claude-code-reporting.md +205 -0
  862. package/docs/study/arms/00-matrix.md +20 -0
  863. package/docs/study/arms/01-system-prompt.md +211 -0
  864. package/docs/study/arms/02-tools.md +79 -0
  865. package/docs/study/arms/03-subagents.md +90 -0
  866. package/docs/study/arms/04-skills.md +81 -0
  867. package/docs/study/arms/05-context-management.md +90 -0
  868. package/docs/study/arms/06-memory.md +90 -0
  869. package/docs/study/arms/07-governance.md +71 -0
  870. package/docs/study/arms/08-execution.md +69 -0
  871. package/docs/study/arms/09-observability.md +60 -0
  872. package/docs/study/arms/10-refinement.md +110 -0
  873. package/docs/study/autonomous-engineering-sources.md +277 -0
  874. package/docs/study/autonomy-sources.md +147 -0
  875. package/docs/study/btw-comparison.md +37 -0
  876. package/docs/study/feature-gap-review.md +42 -0
  877. package/docs/study/insights.md +123 -0
  878. package/docs/study/proactive-autonomy.md +408 -0
  879. package/docs/study/roadmap.md +72 -0
  880. package/docs/study/sources/claude-code.md +56 -0
  881. package/docs/study/sources/deepseek-harness.md +102 -0
  882. package/docs/study/sources/harness2.md +50 -0
  883. package/docs/study/sources/kimi-cli.md +42 -0
  884. package/docs/study/sources/omp.md +93 -0
  885. package/docs/study/sources/opencode.md +43 -0
  886. package/docs/study/sources/openhands.md +46 -0
  887. package/docs/study/sources/smolagents.md +40 -0
  888. package/docs/study/sources/swe-agent.md +34 -0
  889. package/docs/study/tui-resource-browser.md +78 -0
  890. package/docs/system-prompt-design.md +196 -0
  891. package/docs/terminal-tui.md +887 -109
  892. package/package.json +46 -13
  893. package/src/accounts/accounts.test.ts +0 -419
  894. package/src/accounts/accounts.ts +0 -760
  895. package/src/accounts/env.test.ts +0 -95
  896. package/src/accounts/env.ts +0 -338
  897. package/src/accounts/secrets.ts +0 -50
  898. package/src/accounts/store.ts +0 -338
  899. package/src/capabilities/api.ts +0 -75
  900. package/src/capabilities/runSnapshot.ts +0 -59
  901. package/src/capabilities/types.ts +0 -34
  902. package/src/cli.ts +0 -118
  903. package/src/core/bus.test.ts +0 -22
  904. package/src/core/bus.ts +0 -49
  905. package/src/core/changes.ts +0 -33
  906. package/src/core/env.ts +0 -27
  907. package/src/core/errors.ts +0 -32
  908. package/src/core/frontmatter.ts +0 -47
  909. package/src/core/fs.test.ts +0 -38
  910. package/src/core/fs.ts +0 -92
  911. package/src/core/index.ts +0 -193
  912. package/src/core/path.test.ts +0 -14
  913. package/src/core/path.ts +0 -79
  914. package/src/core/projects.ts +0 -90
  915. package/src/core/text.ts +0 -39
  916. package/src/harness.ts +0 -322
  917. package/src/hub/catalog.json +0 -123
  918. package/src/hub/cli.ts +0 -59
  919. package/src/hub/hub.test.ts +0 -205
  920. package/src/hub/hub.ts +0 -256
  921. package/src/hub/schema.ts +0 -81
  922. package/src/index.ts +0 -80
  923. package/src/mcp/connections.ts +0 -641
  924. package/src/mcp/manager.ts +0 -130
  925. package/src/mcp/oauth.ts +0 -195
  926. package/src/mcp/scopeMigration.test.ts +0 -79
  927. package/src/mcp/scopeMigration.ts +0 -204
  928. package/src/mcp/service.test.ts +0 -422
  929. package/src/mcp/service.ts +0 -560
  930. package/src/mcp/types.ts +0 -118
  931. package/src/memory/api.test.ts +0 -82
  932. package/src/memory/api.ts +0 -303
  933. package/src/memory/blocks.test.ts +0 -78
  934. package/src/memory/blocks.ts +0 -408
  935. package/src/memory/caller.ts +0 -69
  936. package/src/memory/curation.test.ts +0 -206
  937. package/src/memory/curation.ts +0 -64
  938. package/src/memory/dispatch.ts +0 -64
  939. package/src/memory/facts.test.ts +0 -41
  940. package/src/memory/facts.ts +0 -248
  941. package/src/memory/graph.ts +0 -103
  942. package/src/memory/health.test.ts +0 -130
  943. package/src/memory/health.ts +0 -74
  944. package/src/memory/maintainer.ts +0 -272
  945. package/src/memory/maintenance.test.ts +0 -192
  946. package/src/memory/maintenance.ts +0 -679
  947. package/src/memory/migrate.ts +0 -79
  948. package/src/memory/operations.ts +0 -150
  949. package/src/memory/proposals.test.ts +0 -168
  950. package/src/memory/proposals.ts +0 -584
  951. package/src/memory/recall.test.ts +0 -115
  952. package/src/memory/recall.ts +0 -279
  953. package/src/memory/references.ts +0 -77
  954. package/src/memory/runContext.ts +0 -93
  955. package/src/memory/secrets.ts +0 -6
  956. package/src/memory/store.test.ts +0 -66
  957. package/src/memory/store.ts +0 -385
  958. package/src/memory/trajectory.test.ts +0 -178
  959. package/src/memory/trajectory.ts +0 -220
  960. package/src/memory/wiki.test.ts +0 -47
  961. package/src/memory/wiki.ts +0 -423
  962. package/src/memory/wikiIndex.test.ts +0 -88
  963. package/src/memory/wikiIndex.ts +0 -117
  964. package/src/plugins/api.ts +0 -181
  965. package/src/plugins/attachments.test.ts +0 -84
  966. package/src/plugins/attachments.ts +0 -141
  967. package/src/plugins/builtin.ts +0 -84
  968. package/src/plugins/catalogue.test.ts +0 -254
  969. package/src/plugins/catalogue.ts +0 -251
  970. package/src/plugins/cli.ts +0 -184
  971. package/src/plugins/discover.ts +0 -151
  972. package/src/plugins/firstParty.test.ts +0 -143
  973. package/src/plugins/firstParty.ts +0 -129
  974. package/src/plugins/hooks.test.ts +0 -250
  975. package/src/plugins/hooks.ts +0 -239
  976. package/src/plugins/identity.ts +0 -37
  977. package/src/plugins/install.test.ts +0 -107
  978. package/src/plugins/install.ts +0 -106
  979. package/src/plugins/inventory.ts +0 -123
  980. package/src/plugins/manifest.ts +0 -76
  981. package/src/plugins/plugins.test.ts +0 -205
  982. package/src/plugins/plugins.ts +0 -189
  983. package/src/plugins/proposal.ts +0 -121
  984. package/src/plugins/runtime.test.ts +0 -40
  985. package/src/plugins/runtime.ts +0 -82
  986. package/src/plugins/trust.ts +0 -142
  987. package/src/plugins/types.ts +0 -149
  988. package/src/prompt/compile.test.ts +0 -261
  989. package/src/prompt/compile.ts +0 -732
  990. package/src/server/methods.ts +0 -355
  991. package/src/server/remote.ts +0 -77
  992. package/src/server/rpc.ts +0 -116
  993. package/src/server/serve.ts +0 -28
  994. package/src/server/server.test.ts +0 -193
  995. package/src/sessions/approvals.test.ts +0 -49
  996. package/src/sessions/approvals.ts +0 -140
  997. package/src/sessions/contracts.ts +0 -336
  998. package/src/sessions/conversation.test.ts +0 -233
  999. package/src/sessions/extensionSession.test.ts +0 -74
  1000. package/src/sessions/extensionUi.test.ts +0 -65
  1001. package/src/sessions/extensionUi.ts +0 -102
  1002. package/src/sessions/history.ts +0 -51
  1003. package/src/sessions/lineageJoin.ts +0 -75
  1004. package/src/sessions/policy.ts +0 -36
  1005. package/src/sessions/pricing.ts +0 -60
  1006. package/src/sessions/questionBatches.test.ts +0 -110
  1007. package/src/sessions/reasoningSummaries.ts +0 -59
  1008. package/src/sessions/registry.ts +0 -412
  1009. package/src/sessions/runIndex.ts +0 -99
  1010. package/src/sessions/runStore.test.ts +0 -152
  1011. package/src/sessions/runStore.ts +0 -346
  1012. package/src/sessions/runner.ts +0 -610
  1013. package/src/sessions/runtimeResources.test.ts +0 -61
  1014. package/src/sessions/sessions.test.ts +0 -588
  1015. package/src/sessions/sessions.ts +0 -331
  1016. package/src/sessions/subagentService.test.ts +0 -159
  1017. package/src/sessions/subagentService.ts +0 -236
  1018. package/src/sessions/subagents.ts +0 -97
  1019. package/src/skills/registry.test.ts +0 -104
  1020. package/src/skills/registry.ts +0 -413
  1021. package/src/terminal/accountsMenu.test.ts +0 -225
  1022. package/src/terminal/accountsMenu.ts +0 -382
  1023. package/src/terminal/cli.ts +0 -149
  1024. package/src/terminal/client.ts +0 -74
  1025. package/src/terminal/control.test.ts +0 -23
  1026. package/src/terminal/control.ts +0 -23
  1027. package/src/terminal/controller.ts +0 -354
  1028. package/src/terminal/hubMenu.ts +0 -24
  1029. package/src/terminal/launch.test.ts +0 -25
  1030. package/src/terminal/launch.ts +0 -48
  1031. package/src/terminal/piExtension.lifecycle.test.ts +0 -55
  1032. package/src/terminal/piExtension.ts +0 -295
  1033. package/src/terminal/pluginControl.test.ts +0 -146
  1034. package/src/terminal/pluginMenu.ts +0 -112
  1035. package/src/terminal/socket.test.ts +0 -94
  1036. package/src/terminal/socket.ts +0 -256
  1037. package/src/terminal/standalone.test.ts +0 -167
  1038. package/src/terminal/standalone.ts +0 -165
  1039. package/src/terminal/terminal.test.ts +0 -534
  1040. package/src/terminal/terminals.ts +0 -661
  1041. package/src/terminal/trajectory.test.ts +0 -66
  1042. package/src/terminal/trajectory.ts +0 -44
  1043. package/src/terminal/tui/application.test.ts +0 -290
  1044. package/src/terminal/tui/application.ts +0 -653
  1045. package/src/terminal/tui/commands.test.ts +0 -278
  1046. package/src/terminal/tui/commands.ts +0 -443
  1047. package/src/terminal/tui/dialogs.ts +0 -301
  1048. package/src/terminal/tui/editor.test.ts +0 -113
  1049. package/src/terminal/tui/editor.ts +0 -109
  1050. package/src/terminal/tui/keybindings.test.ts +0 -30
  1051. package/src/terminal/tui/keybindings.ts +0 -59
  1052. package/src/terminal/tui/piAdapter.ts +0 -62
  1053. package/src/terminal/tui/planMode.test.ts +0 -10
  1054. package/src/terminal/tui/planMode.ts +0 -12
  1055. package/src/terminal/tui/presentation.test.ts +0 -79
  1056. package/src/terminal/tui/questions.test.ts +0 -41
  1057. package/src/terminal/tui/questions.ts +0 -47
  1058. package/src/terminal/tui/runtime.socket.test.ts +0 -178
  1059. package/src/terminal/tui/runtime.test.ts +0 -225
  1060. package/src/terminal/tui/runtime.ts +0 -403
  1061. package/src/terminal/tui/screen.test.ts +0 -143
  1062. package/src/terminal/tui/screen.ts +0 -121
  1063. package/src/terminal/tui/sessionUi.ts +0 -24
  1064. package/src/terminal/tui/settings.test.ts +0 -150
  1065. package/src/terminal/tui/settings.ts +0 -188
  1066. package/src/terminal/tui/skillInvocation.test.ts +0 -71
  1067. package/src/terminal/tui/skillInvocation.ts +0 -51
  1068. package/src/terminal/tui/status.test.ts +0 -48
  1069. package/src/terminal/tui/status.ts +0 -82
  1070. package/src/terminal/tui/theme.ts +0 -185
  1071. package/src/terminal/tui/tools.test.ts +0 -145
  1072. package/src/terminal/tui/tools.ts +0 -142
  1073. package/src/terminal/tui/trajectoryPanel.test.ts +0 -99
  1074. package/src/terminal/tui/trajectoryPanel.ts +0 -226
  1075. package/src/terminal/tui/transcript.test.ts +0 -39
  1076. package/src/terminal/tui/transcript.ts +0 -135
  1077. package/src/terminal/tui/ui.test.ts +0 -313
  1078. package/src/terminal/tui/ui.ts +0 -166
  1079. package/src/terminal/tui/welcome.ts +0 -102
  1080. package/src/terminal/tui/workingStatus.test.ts +0 -44
  1081. package/src/terminal/tui/workingStatus.ts +0 -238
  1082. package/src/tools/askUser.test.ts +0 -69
  1083. package/src/tools/askUser.ts +0 -59
  1084. package/src/tools/definitions.ts +0 -228
  1085. package/src/tools/maintenance.ts +0 -29
  1086. package/src/tools/memoryTools.ts +0 -22
  1087. package/src/tools/pluginPropose.ts +0 -41
  1088. package/src/tools/registryWrite.test.ts +0 -101
  1089. package/src/tools/registryWrite.ts +0 -182
  1090. package/src/tools/spawnSubagent.ts +0 -47
  1091. package/src/tools/types.ts +0 -41
  1092. package/src/web/safeRequest.ts +0 -171
  1093. package/src/web/text.ts +0 -53
  1094. package/src/web/tools.ts +0 -134
  1095. package/src/web/web.test.ts +0 -141
@@ -0,0 +1,112 @@
1
+ # Harness arm study — index
2
+
3
+ An audit of agent-harness designs, arm by arm: where each studied harness puts its
4
+ prompt assembly, tools, memory, subagents, skills, context management, refinement,
5
+ governance, execution and observability, and what to adopt into this harness.
6
+
7
+ Positioning: this is analysis, not checked source behavior. Living contract docs and
8
+ decisions stay in `docs/`; when a study produces an actual change here, an ADR is
9
+ written and the claim moves to checked behavior. Cite material as
10
+ `external/<name>/<path>:<line>` — never second-hand summaries.
11
+
12
+ ## Focused notes
13
+
14
+ - [Proactive autonomy and three feature directions](proactive-autonomy.md) — scheduled initiative,
15
+ a human-readable agenda, UI repair, cleanup and product experiments; fresh
16
+ [proactive-system evidence](autonomy-sources.md) and
17
+ [autonomous-engineering evidence](autonomous-engineering-sources.md). Research hypotheses,
18
+ not an accepted architecture change.
19
+ - [`/btw` side-question comparison](btw-comparison.md) — this terminal, the App-owned
20
+ side question, and checked-out external implementations.
21
+ - [Harness feature-gap review](feature-gap-review.md) — task/goal management, long-running work,
22
+ memory, execution isolation, verification, and observability gaps against the studied peers.
23
+ - [Why a long run takes hours](STUDY-0003-long-horizon-runs.md) — measured diagnosis of two 70–97
24
+ minute replies (447 and 266 tool calls, 5 and 2 compactions, zero assistant text), what other
25
+ harnesses do about it, and the fixes proposed in [PROP-0041](../architecture/proposals/PROP-0041-bounded-work-slices.md).
26
+ - [How other harnesses control the end of a turn](STUDY-0004-turn-end-controls.md) — stop hooks,
27
+ completion tools, follow-up loops and lint-driven re-prompts across ten harnesses, with sources;
28
+ why a self-ended reply settles `completed` here, and the one deterministic layer to add.
29
+ - [How peers shape the final report](STUDY-0006-reporting-prompts.md) — the final-answer rules of
30
+ Claude Code, Codex and Kimi; what this harness's 3,400-character reporting section lacked; and the
31
+ large content-block prompt in [ADR-0073](../decisions/ADR-0073-large-reporting-prompt.md).
32
+ - [Claude Code's prompt against this harness's, in 20 areas](STUDY-0007-claude-code-prompt.md) — the
33
+ leaked v2.1.88 prompt measured against the pack a real session was given: 12.9k characters against
34
+ 23.4k, the 9.2k reporting section with no Claude Code counterpart, and the rules Claude Code has
35
+ that the harness does not (parallel calls, read-before-edit, minimal diffs).
36
+ - [How Codex and Claude Code use the person's browser](STUDY-0008-browser-control.md) — Claude Code drives
37
+ the person's own Chrome as a built-in MCP server with refs, console, network and JavaScript; Codex has
38
+ no browser in the CLI and reaches the person's browser only through Computer Use and its extension,
39
+ keeping a separate-profile built-in browser of its own; this harness now offers isolated Chromium,
40
+ App WebKit, and an explicitly paired Brave extension through shared browser tools. The Brave bridge
41
+ is implemented with live disposable-profile acceptance still pending; see [ADR-0082](../decisions/ADR-0082-connected-brave-browser.md).
42
+ - [Claude Code's report structure against this harness's, phase by phase](STUDY-0009-claude-code-reporting.md)
43
+ — the leaked v2.1.88 external and internal prompts plus the published Concise style against the
44
+ original 3,696-character reporting section: audience, pre-tool text, in-flight updates, first
45
+ sentence, change content, evidence, next steps, headers, tables, length, references and examples.
46
+ Neither Claude Code build requires headers; ADR-0079 records the Harness's choice to encourage
47
+ content-named `#` / `##` headings in substantial reports.
48
+ - [Does the harness tell an agent how to install a skill](STUDY-0005-skill-installation-guidance.md)
49
+ — the global and project routes this harness already loads, checked with its own resolver; why a
50
+ session model is told none of them; and how Codex, Gemini, Claude Code, Kimi and others put that
51
+ knowledge in a bundled skill instead of the prompt.
52
+
53
+ ## Sources
54
+
55
+ Clones live in `external/` (this repo). Field notes in `sources/`.
56
+
57
+ | Source | Origin | Note | Stage |
58
+ |---|---|---|---|
59
+ | opencode | [sst/opencode](https://github.com/sst/opencode) — TypeScript, the tool this harness family runs sessions in | [opencode.md](sources/opencode.md) | arm-01 audited |
60
+ | pi / omp | [can1357/oh-my-pi](https://github.com/can1357/oh-my-pi) — tuned fork of [pi-mono](https://github.com/badlogic/pi-mono), the session runtime underneath this harness | [omp.md](sources/omp.md) | arm-01 audited |
61
+ | deepseek-harness (`dsh`) | [deepseek-ai/deepseek-harness](https://github.com/deepseek-ai/deepseek-harness) — MIT, Cordis, "everything is a plugin" | [deepseek-harness.md](sources/deepseek-harness.md) | arm-01 audited |
62
+ | harness2 | [google-research/harness2](https://github.com/google-research/harness2) + paper *Harness²: Recursive Agent Harnessing for an Open World* (arXiv:2610.14224, PDF in the clone) | [harness2.md](sources/harness2.md) | arm-01 audited |
63
+ | swe-agent | [SWE-agent/SWE-agent](https://github.com/SWE-agent/SWE-agent) | [swe-agent.md](sources/swe-agent.md) | inventory |
64
+ | openhands | [All-Hands-AI/OpenHands](https://github.com/All-Hands-AI/OpenHands) (UI) + [OpenHands/software-agent-sdk](https://github.com/OpenHands/software-agent-sdk) (agent server runtime) | [openhands.md](sources/openhands.md) | inventory |
65
+ | kimi-cli | [MoonshotAI/Kimi-CLI](https://github.com/MoonshotAI/Kimi-CLI) | [kimi-cli.md](sources/kimi-cli.md) | inventory |
66
+ | smolagents | [huggingface/smolagents](https://github.com/huggingface/smolagents) — CodeAct | [smolagents.md](sources/smolagents.md) | inventory |
67
+ | claude-code | [Anthropic Claude Code](https://www.anthropic.com/claude-code) — not open source; the leaked v2.1.88 source map gives a full read | [claude-code.md](sources/claude-code.md) | v2.1.88 source in `external/claude-code-src`, prompt audited |
68
+
69
+ ## Arms
70
+
71
+ One doc per arm: *design space → per-source comparison → trade-offs → adoption
72
+ candidates*. Adoption candidates feed a two-tier roadmap: Tier 1 = patterns already
73
+ battle-tested in open harnesses (OpenCode / pi / dsh); Tier 2 = research-backed ideas
74
+ (harness² and the literature) attempted after Tier 1.
75
+
76
+ | # | Arm | Doc | Stage |
77
+ |---|---|---|---|
78
+ | 1 | System prompt / context assembly | [arms/01-system-prompt.md](arms/01-system-prompt.md) | core four audited (opencode, omp, dsh, harness²); 5 sources pending |
79
+ | 2 | Tools | [arms/02-tools.md](arms/02-tools.md) | core four audited (opencode, omp, dsh + harness²/swe-agent/smolagents in person); partial |
80
+ | 4 | Subagents | [arms/03-subagents.md](arms/03-subagents.md) | core four audited; openhands/claude-code pending |
81
+ | 5 | Skills & loading | [arms/04-skills.md](arms/04-skills.md) | three sources audited (dsh, opencode, harness²) + our tree; omp partial |
82
+ | 6 | Context management | [arms/05-context-management.md](arms/05-context-management.md) | core three audited; ours needs inventory |
83
+ | 3 | Memory | [arms/06-memory.md](arms/06-memory.md) | core four audited + our Wiki |
84
+ | 8 | Governance | [arms/07-governance.md](arms/07-governance.md) | core three audited; claude-code/openhands pending |
85
+ | 9 | Execution | [arms/08-execution.md](arms/08-execution.md) | core three audited; hands pending |
86
+ | 10 | Observability | [arms/09-observability.md](arms/09-observability.md) | core three audited; hands pending |
87
+ | 7 | Refinement / self-improvement | [arms/10-refinement.md](arms/10-refinement.md) | **done in person — port confirmed**; judge delta + drift sync open |
88
+
89
+ Wide comparison: [arms/00-matrix.md](arms/00-matrix.md). Standing conclusions:
90
+ [insights.md](insights.md). Roadmap: [roadmap.md](roadmap.md).
91
+
92
+ ## Work order
93
+
94
+ 1. `sources/` inventories (all nine), then arms 01–02 (prompt, tools)
95
+ 2. Arms 03–06 (subagents, skills, context management, memory)
96
+ 3. Arms 07–09 (governance, execution, observability)
97
+ 4. Arm 10 (refinement ⭐ — the merge study against harness²) + `roadmap.md`
98
+ 5. `arms/00-matrix.md` last, from the finished arm docs
99
+
100
+ ## Method rules
101
+
102
+ - **Ground truth first.** Read the code before forming a position; every claim in an
103
+ arm doc needs at least one `path:line` citation per source, or an explicit
104
+ "unverified".
105
+ - **Describe, then judge.** The comparison table states what each harness does; the
106
+ trade-off section says why; only `adoption candidates` mentions this harness.
107
+ - **Respect the boundary.** Nothing here changes `src/`; study docs name no product
108
+ concept that the harness would learn. Adoption goes through the extension-point
109
+ flow later.
110
+ - **The anchor arms are the seven surfaces.** Prompt sections, tool providers,
111
+ `ToolPolicy`, `SecretStore`, `Directory`, plugin descriptions, `RefineHost` — map
112
+ foreign mechanisms onto these without inventing application concepts.
@@ -0,0 +1,210 @@
1
+ ---
2
+ id: STUDY-0003
3
+ title: Why a long run takes hours — measured diagnosis of two long sessions
4
+ status: measured-diagnosis; fix proposed in PROP-0041
5
+ created: 2026-10-26
6
+ updated: 2026-10-26
7
+ related:
8
+ - PROP-0033
9
+ - PROP-0041
10
+ ---
11
+
12
+ # Why a long run takes hours
13
+
14
+ **Answer.** Neither session was looping on a single action — both kept changing files and running checks. But both ran as **one unbroken reply**: 448 and 274 tool calls, 5 and 2 context compactions, and a single assistant message at the very end, or none at all. The 75-minute session produced one final report and said **"release is still blocked"**. The other was **still running at 114 minutes when measured, with 448 tool calls and not one word to the person**. 41 of those minutes were three Playwright runs, 25 of them on two timeouts, and 55 minutes were 307 model requests averaging 10.7 s each over a ~140k-token context.
15
+
16
+ The loop is in the **shape of the reply**, not in the goal. The fix is not a better prompt; it is a bounded reply, a durable checkpoint, and a loop guard. [PROP-0041](../architecture/proposals/PROP-0041-bounded-work-slices.md)
17
+ proposes them.
18
+
19
+ ## What was measured
20
+
21
+ Both sessions are ordinary records under the dev data root
22
+ (`~/.xingular-harness-dev/data/runs/<id>/`), read together with their native Pi session. Nothing was
23
+ re-run; every number below comes from `events.jsonl`, `run.json` and the native `*.jsonl`.
24
+
25
+ | | A — "Finish App Harness parity integration" | B — "Complete secure Harness release candidate" |
26
+ |---|---|---|
27
+ | Run | `64cdd5f0` | `2d62eaec` |
28
+ | User text that started it | "continue where you left of" | "continue where left of" |
29
+ | Started / last event | 17:50:43Z / 19:44:57Z at the cut, still active | 18:27:46Z / 19:42:40Z |
30
+ | Wall clock | **114.3 min at the cut, still running** | **74.9 min** |
31
+ | How it ended | no end: the same reply was still going | one final report, `completed` |
32
+ | Recorded state afterwards | `running` | `completed` |
33
+ | Model requests | 307 | 197 |
34
+ | Model time | 3299 s (55.0 min), mean 10.7 s, p90 20.0 s | 2924 s (48.7 min), mean 14.8 s, p90 30.4 s |
35
+ | Tool calls | 448 | 274 |
36
+ | Tool time | 3491 s (58.2 min), 51 % of the run | ~1420 s (23.7 min), 32 % |
37
+ | Reads | 163 over 96 paths (`host.rs` 11×) | 101 over 56 paths (`verify-terminal.py` 6×) |
38
+ | Edits | 61 over 35 files (`app.test.ts` 10×) | 78 over 30 files (`07-tools-and-gate.md` 9×) |
39
+ | Identical repeated calls | 42 instances, 20 signatures | 10 instances, 5 signatures |
40
+ | Billed tokens | 18.85 M input + 25.01 M cache read | 16.70 M input + 12.94 M cache read |
41
+ | Output tokens | 221 k, of which 175 k reasoning (79 %) | 205 k, of which 173 k reasoning (84 %) |
42
+ | Cost recorded by the harness | $2.23 | $1.66 |
43
+ | Compactions inside the run | **5**, at 255 852–269 591 tokens | **2** (7 across the 5-hour thread) |
44
+ | Cold re-sends (no cache read, >20 k input) | 9 requests, 1.58 M uncached tokens | 9 requests, 1.51 M uncached tokens |
45
+ | Assistant text inside the run | **0 characters** | **0 characters until 74.9 min**, then one 2 028-character report |
46
+ | Approvals | 49, all remembered, 0.0 s wait | 2, both remembered |
47
+
48
+ Run A was still producing events while this was written (314 model requests at 19:48Z); every number
49
+ for it is frozen at 19:44:57Z, 114.3 minutes in. Run B had already settled.
50
+
51
+ ### Where run A's 114 minutes went
52
+
53
+ | Bucket | Time | Share |
54
+ |---|---|---|
55
+ | Model requests (307) | 55.0 min | 48 % |
56
+ | Bash (129 calls) | 57.6 min | 50 % |
57
+ | — three Playwright runs: 600 s timeout, 900 s timeout, 986 s success | 41.4 min | 36 % |
58
+ | Reads, edits, searches, subagent waits | ~0.5 min | 1 % |
59
+ | Unaccounted idle | ~1.2 min | 1 % |
60
+
61
+ The harness was busy for 98.5 % of the wall clock. Nothing was hung; the reply was simply too long,
62
+ and every step paid full-context latency. The same browser suite ran three times because it timed out
63
+ twice without narrowing itself, and each retry cost the full command budget.
64
+
65
+ That 986-second command is also why a heartbeat matters: from request 306 at 19:27:56 to request 307
66
+ at 19:44:29 there is **no event for 16.6 minutes**. A busy run and a wedged one look identical on the
67
+ record.
68
+
69
+ ### Was it progressing?
70
+
71
+ Yes, measurably:
72
+
73
+ - 57 `file.changed` events in A at a steady rate (13, 6, 9, 6, 4, 9, 10 per ten minutes), longest gap
74
+ between changes 23.6 min; 74 in B, longest gap 17.5 min.
75
+ - 57 successful test/typecheck commands in A; 28 of 129 Bash calls failed and were retried.
76
+ - The checklist moved (B: 3 of 7 items completed across 9 checklist writes, and items were added as
77
+ gaps were found).
78
+ - B's last message is a real report: what changed, which checks passed (1 255 Harness tests, 586 App
79
+ tests, 185 Rust tests), and what remains blocked. That is genuine incremental work with an honest
80
+ ending — after 75 minutes and 274 tool calls.
81
+
82
+ But the same data shows the waste:
83
+
84
+ - 42 calls in A were byte-identical repeats of an earlier call; 20 distinct signatures were repeated.
85
+ - `host.rs` was read 11 times; `07-tools-and-gate.md` was edited 9 times as the checklist reworded
86
+ what "done" meant.
87
+ - Run B read its own trajectory 63 times and searched it 8 times — recovering, inside the run, state
88
+ that earlier compactions had dropped.
89
+ - Neither session produced a commit. The worktree is still dirty: B's own report counts 119 tracked
90
+ changes and 267 untracked files, which failed release preflight's clean-tree check. So "continue
91
+ where you left off" had no unambiguous answer — the work is real, but it is not a deliverable.
92
+ - A's checklist was rewritten 7 times (B's 9) and its items were reworded each time
93
+ ("Complete Harness launch…" → "Complete App commands…" → "Complete App shared-profile…" →
94
+ "Close profile-root migration…" → "Finish App shared-profile…"). That is scope drift, not a
95
+ maintained plan.
96
+
97
+ So: **incremental work, at roughly half efficiency, with no visible progress and no way to stop
98
+ cleanly.** A person watching saw tool rows for 75–114 minutes, then either a single report or nothing
99
+ at all.
100
+
101
+ ## The mechanisms that are missing
102
+
103
+ Measured against the code (all verified in this tree):
104
+
105
+ | Mechanism | State in this tree | Consequence |
106
+ |---|---|---|
107
+ | Reply budget | Only the opt-in `budget-guard` plugin (`src/plugins/firstParty.ts:31,105-140`), **off by default** and a blunt stop: it refuses tools and terminates the reply with no checkpoint | One reply ran 114 min and 448 calls |
108
+ | Checkpoint | PROP-0033's checkpoint exists (`src/sessions/compactionCheckpoint.ts`), but it restores only *goal + checklist + plan*, and `renderCompactionCheckpoint` returns `null` when there is no checklist (`src/prompt/compile.ts:196`) | No files, no failing commands, no decisions; A wrote no assistant text at all |
109
+ | Compaction discipline | Pi compacts at ~94 % of the window; the harness only observes it (`src/sessions/runner.ts:470-478`) | 5 compactions in one reply, each a cold re-send; state rebuilt by re-reading files |
110
+ | Command ceiling | Bash `timeout` is optional, "no default timeout" (`src/core/workspaceBashTool.ts:23`) | 41 minutes in three Playwright runs; 36 % of run A |
111
+ | Loop / stall detection | None (`rg loop|stuck|repeat` finds nothing in `src/sessions`) | 42 duplicate calls; 9 edits to one document |
112
+ | Liveness | Reconciliation runs only at startup and is keyed on the owner pid (`src/sessions/runStore.ts:228`); `owner.json` holds a bare pid | A run that stops producing events while its process lives is never settled, and a recycled pid can make a dead owner look alive. A long command already writes nothing for 16.6 minutes |
113
+ | Progress visibility | No mid-reply text requirement; `REPORTING_GUIDANCE` shapes only the final reply | 0 characters in 114 minutes and counting for A; one message at 74.9 minutes for B |
114
+
115
+ The layer boundary matters for the fix: task and goal lifecycle belong to the application
116
+ (`docs/study/feature-gap-review.md:7,35`). Everything above is **run execution**, which the harness
117
+ owns. PROP-0041 keeps it there.
118
+
119
+ ## What other harnesses do about this
120
+
121
+ Fetched 2026-10-26; URLs are the primary sources.
122
+
123
+ | Mechanism | Who | Trigger | What it prevents |
124
+ |---|---|---|---|
125
+ | Stop hook that blocks the turn from ending until a check passes, with a cap on consecutive blocks | [Claude Code](https://code.claude.com/docs/en/best-practices) | Turn end | "Looks done" endings and endless turns |
126
+ | Auto-compaction thrash guard: after a few refills, stop compacting and report the offending oversized result | [Claude Code troubleshooting](https://code.claude.com/docs/en/troubleshooting) | Repeated compaction in one turn | Summarise–refill loops |
127
+ | Post-compaction re-injection of the plan file and up to five recently touched files (path only above 5k tokens) | [Claude Code context window](https://code.claude.com/docs/en/context-window) | Compaction | State lost to the summarizer |
128
+ | Tool-result clearing before summarisation | [Anthropic context engineering](https://www.anthropic.com/engineering/effective-context-engineering-for-ai-agents) | Context pressure | Unbounded context growth |
129
+ | Subagents with a 1–2k-token return contract | [Claude Code sub-agents](https://code.claude.com/docs/en/sub-agents) | Model decision | Exploration flooding the main context |
130
+ | `todo.md` recitation at the end of context; restorable compression (drop content, keep URL/path); keep failed actions | [Manus](https://manus.im/blog/Context-Engineering-for-AI-Agents-Lessons-from-Building-Manus) | Every step / compression | Goal drift, repeated mistakes |
131
+ | Loop detection by hashing `toolName + args`, cycle length 1–5 repeated 5×, plus an LLM judge after 30 turns | [Gemini CLI loopDetectionService.ts](https://github.com/google-gemini/gemini-cli/blob/main/packages/core/src/services/loopDetectionService.ts) | Every streamed tool call | Oscillation and repeated failing commands |
132
+ | Stop hook with `loop_count` and `MAX_ITERATIONS = 5` | [Cursor](https://cursor.com/blog/agent-best-practices) | Turn end | Unbounded single turn |
133
+ | `max_requeries = 3` on malformed or blocked actions | [SWE-agent config](https://swe-agent.com/latest/reference/agent_config/) | Action error | Infinite retry |
134
+ | Repo map under a 1k-token budget (PageRank over the dependency graph) | [Aider repomap](https://aider.chat/docs/repomap.html) | Every request | Re-reading files to re-orient |
135
+ | Auto-commit, lint and test after each edit | [Aider git](https://aider.chat/docs/git.html) | Each edit | Long stretches with no checkpoint |
136
+ | Event-count condenser that keeps the first events | [OpenHands context condenser](https://docs.openhands.dev/sdk/guides/context-condenser) | History size | Cost and latency growth |
137
+ | Pre/post-turn compaction phases and pre/post-compact hooks | [Codex compact.rs](https://raw.githubusercontent.com/openai/codex/main/codex-rs/core/src/compact.rs) | Turn boundaries | Unpredictable compaction |
138
+ | Truncate-then-summarise plan saved to memory because the window will truncate | [Anthropic multi-agent research](https://www.anthropic.com/engineering/multi-agent-research-system) | Context limit | Losing the plan |
139
+
140
+ Two reference scales are worth stating plainly: Manus reports **~50 tool calls per task**, and
141
+ Claude Code's published loop cap is **5 iterations**. Both runs here exceeded those by 5–9× inside a
142
+ single reply that addressed the person once, at the end, or not at all.
143
+
144
+ Context rot compounds it: performance degrades as input grows and is worst for content in the middle
145
+ of a long context ([Chroma](https://www.trychroma.com/research/context-rot),
146
+ [Lost in the middle](https://arxiv.org/abs/2307.03172)). A 250k-token context is therefore both slow
147
+ and less reliable — the re-reads and reworded checklists are what that looks like.
148
+
149
+ ## What to adopt, in order
150
+
151
+ 1. **P0, configuration only, today.** Switch on `output-trim` (20 000 chars) and `budget-guard`
152
+ (120 requests) in the plugin attachments of the affected account/project. That alone caps the
153
+ reply and shrinks tool results. No architecture change, reversible per account and per project.
154
+ 2. **P0b, small foundation fixes.** A default Bash timeout that returns partial output, and a stall
155
+ watchdog keyed on heartbeat age rather than only the owner pid. Both are narrow and independent of
156
+ the slice design below.
157
+ 3. **P1, bounded work slices (PROP-0041).** A reply budget of 160 tool calls / 40 min / 320k new
158
+ tokens, a validated checkpoint at the boundary, and a continuation that starts from that
159
+ checkpoint. This is the structural fix.
160
+ 4. **P2, the checkpoint as state, not prose.** Bounded, evidence-linked (files, failing checks,
161
+ decisions, next step) and injected at every slice start and after compaction, so the model never
162
+ re-derives state by archaeology.
163
+ 5. **P3, deterministic loop guard.** Identical `tool + args` three times, the same command failing
164
+ twice, or 25 steps with no file change and no passing check: nudge once with the evidence, then
165
+ end the slice as `blocked`.
166
+ 6. **P4, command budget.** Hard ceiling, and long suites (Playwright, full CI) as background work
167
+ rather than 16 blocking minutes.
168
+ 7. **P5, compaction pipeline.** Clear old tool results first; summarise with restorable references
169
+ (path + line range); stop after three compactions in one reply and hand off instead.
170
+ 8. **P6, visible progress.** Record narration as `progress` events and a heartbeat with steps,
171
+ elapsed time, slice and compactions; show "next checkpoint in N steps" in both surfaces.
172
+
173
+ ## How to judge whether it worked
174
+
175
+ Baseline from these two runs, to compare after PROP-0041:
176
+
177
+ | Metric | Baseline |
178
+ |---|---|
179
+ | Time to first user-visible text | never (A) / 74.9 min (B) |
180
+ | Tool calls per user-visible text | ∞ (A) / 274 (B) |
181
+ | Longest reply | 114 min and counting / 448 calls |
182
+ | Compactions per reply | 2–5 |
183
+ | Repeated identical calls | 42 per 448 (9 %) |
184
+ | Reads per distinct file | 1.7 (163/96), worst 11 |
185
+ | Time in three Playwright runs | 36 % of run A |
186
+ | Runs left `running` after owner death | 1 of 2 |
187
+
188
+ A working slice policy should keep the longest reply under ~45 minutes, put text in front of the
189
+ person at every boundary, hold compactions to at most one per slice, and never leave a run
190
+ `running` after its owner is gone.
191
+
192
+ ## What this does not fix
193
+
194
+ Model latency per token, the correctness of the work itself, or a task whose acceptance criteria
195
+ were never written down. A slice boundary cannot invent a definition of done; it can only make the
196
+ absence of one visible early.
197
+
198
+ ## Appendix: how to reproduce
199
+
200
+ Read-only, from the dev data root:
201
+
202
+ ```sh
203
+ R=~/.xingular-harness-dev/data/runs/64cdd5f0-da45-43a1-9130-89c54f298f21
204
+ jq -r 'select(.type=="usage.updated") | .payload.request.durationMs' "$R/events.jsonl" | awk '{s+=$1/1000; n++} END {print n" requests, "s" s"}'
205
+ jq -r 'select(.type=="tool.completed") | .payload.name' "$R/events.jsonl" | sort | uniq -c | sort -rn
206
+ jq -r 'select(.type=="message.completed") | .payload.role' "$R/events.jsonl"
207
+ ```
208
+
209
+ The assistant's own text lives in the native session named by `run.json`
210
+ (`nativeSessionId`), as `message` entries whose `content` blocks have `type: "text"`.
@@ -0,0 +1,130 @@
1
+ ---
2
+ id: STUDY-0004
3
+ title: How other harnesses stop a turn early — and what to adopt
4
+ status: adopted-with-changes
5
+ created: 2026-10-30
6
+ updated: 2026-10-31
7
+ related:
8
+ - STUDY-0003
9
+ ---
10
+ # How other harnesses control the end of a turn
11
+
12
+ > **Update (2026-11-01, [ADR-0075](../decisions/ADR-0075-no-todo-gate.md)):** the todo gate is
13
+ > removed. A peer check found that omp ships the same three-reminder gate on by default
14
+ > (`todo.remindersMax` 3), while Claude Code only reminds the model to use TodoWrite
15
+ > (`ccVersion` 2.1.139), Codex's `update_plan` is opt-in (0.152) and Kimi CLI has no nudge. A reply
16
+ > the model ends now settles `completed`; the goal loop and the work-slice guard keep their stop
17
+ > codes and checkpoints.
18
+
19
+ > **Update (2026-11-01, [ADR-0072](../decisions/ADR-0072-codex-prompts-and-goal.md)):** OpenAI Codex is open source. It has no completion check on ordinary turns and keeps its model-called `update_goal` behind an opt-in `/goal`. The harness followed: ordinary replies rely on Codex's prompt wording and the todo gate, and the judge now checks a `/goal` completion claim only.
20
+
21
+ > **Update (2026-10-31, [ADR-0071](../decisions/ADR-0071-completion-check.md)):** the model-judged evaluator rejected above was adopted after all, as an automatic completion check on the run's own model, because a live A/B showed a closed todo list hiding unfinished work and `finish(needs_decision)` used as an early exit; `finish` is removed.
22
+
23
+ > **Outcome (2026-10-31):** adopted with changes in [ADR-0069](../decisions/ADR-0069-stop-gate-and-finish.md).
24
+ > - **Gate placement.** The continuation is a stop gate at Pi's `agent_before_settle` boundary
25
+ > inside the same run, not a widened `continueSlice`. That covers the terminal and avoids
26
+ > reopening a `completed` run.
27
+ > - **Cap.** Three nudges per reply, plus a no-progress rule.
28
+ > - **`finish` tool.** Added as the explicit way to stop for the person.
29
+ > - **`checkpoint_write` removed.** Run `62c7fc6c` used it as a sign-off and stopped with work open.
30
+
31
+ **Recommendation:** keep the prompt rules that landed today (scope of the work, the end rule, two
32
+ completion headings) as the cheap layer, and add **one** deterministic layer: let the existing
33
+ work-slice policy continue a reply that ended by itself while the run's todo list still holds an
34
+ open, unblocked item — the same machinery that already continues a budget-ended slice, with a cap
35
+ and the same guards. Do not adopt a model-judged evaluator, and do not adopt unconditional
36
+ "keep going" loops.
37
+
38
+ This note is analysis. It changes no contract; the prompt change it refers to is recorded in
39
+ [ADR-0068](../decisions/ADR-0068-scope-and-completion-report.md) and
40
+ [04-prompt.md](../architecture/04-prompt.md#when-a-reply-may-end).
41
+
42
+ ## Why this note exists
43
+
44
+ 207 of 822 runs in the week to 2026-10-30 ended with work left, at a median of 17 tool calls, and 191
45
+ of those wrote no checkpoint. The clearest case, `d73804c8`, ended at 63 of 320 tool calls with
46
+ B3–B10 of a handoff untouched and no approval, question, refusal or compaction in the record
47
+ (`outputs/diagnoses/2026-10-30-d73804c8.md`). The prompt was the first lever; this note asks what
48
+ harnesses with more users do about the same failure.
49
+
50
+ ## What Xingular does today (verified in this repository)
51
+
52
+ | Mechanism | Where | What it can do |
53
+ |---|---|---|
54
+ | Work-slice guard | `src/sessions/workSlice.ts:40` (320 calls / 60 min / 8 slices), refusal path and derived checkpoint in `src/sessions/runner.ts:710` | Ends a reply at the budget and records `interrupted{slice_complete}` |
55
+ | Slice continuation | `src/sessions/sessions.ts:410` `continueSlice` | Starts the next slice as a new run — but only when `terminalReason === 'slice_complete'`, the slice progressed, no checkpoint is `blocked`, and it is not automatic, plan, command or a worktree run |
56
+ | Continuation by request | `src/sessions/continuation.ts:60`, `continueFrom`, `runs.continuation`; `CONTINUE_TEXT` = "Continue from where you stopped." (`src/sessions/sessions.ts:157`) | The host or a subagent's parent can reopen a stopped run with its pinned account, variant and capability set |
57
+ | Plan repair | `src/sessions/runner.ts:702` (`PLAN_REPAIR_INSTRUCTIONS`, `triggerTurn: true`) | Re-asks once for a missing plan block |
58
+ | Human affordance | App `src/app/AppState.tsx:353` (notice only for `interruptedRuns`), `Continue` on a paused reply | The person resumes; the app never continues by itself |
59
+
60
+ The gap is exact: a reply the model ends by itself settles `run.finish('completed')`
61
+ (`src/sessions/runner.ts:718`) and `continueSlice` returns at its first check
62
+ (`terminalReason !== 'slice_complete'`). So the layer that already exists never fires for the
63
+ failure mode that dominates the record. `INV-RUN-4` allows this: continuing is always a new run with
64
+ `continueFrom`, asked by the application **or the work-slice policy** (`INV-RUN-13`).
65
+
66
+ ## What other harnesses do (live documentation, read 2026-10-30)
67
+
68
+ | Harness | Mechanism (exact name) | Trigger | What it can force | Source |
69
+ |---|---|---|---|---|
70
+ | Claude Code | `Stop` / `SubagentStop` hook returning `decision: "block"` with a required `reason`; `hookSpecificOutput.additionalContext` | "Runs when the main Claude Code agent has finished responding" | Keeps the model working; the `reason` is fed back | <https://code.claude.com/docs/en/hooks> |
71
+ | Claude Code | `/goal` — a separate small-model evaluator | Each reply end | Judges whether the goal is met; stops when there is no tool use "for several turns in a row" | <https://code.claude.com/docs/en/goal> |
72
+ | OpenAI Codex CLI | `Stop` hook, `{"decision":"block","reason":…}` or exit code 2 | Turn stop; input carries `stop_hook_active`, `last_assistant_message` | "tells Codex to continue and automatically creates a new continuation prompt" | <https://learn.chatgpt.com/docs/hooks> |
73
+ | Cursor | `stop` hook output `followup_message`; input `loop_count`; `loop_limit` (default 5, `null` = uncapped) | "Called when the agent loop ends" | Submits the message as the next user turn | <https://cursor.com/docs/hooks> |
74
+ | Amp | Plugin hook `agent.end` returning `{ action: 'continue', userMessage }` | End of a turn | Starts another turn | <https://ampcode.com/docs/plugin-api> |
75
+ | Cline | Completion tool `submit_and_exit`; plugin hooks can only end a run | Model calls the tool | Nothing — a text-only reply ends the turn | <https://docs.cline.bot/tools-reference/all-cline-tools.md> |
76
+ | OpenHands | `finish` tool (`FinishAction`) | Model calls `finish` | Nothing; its description permits finishing when "you cannot proceed further due to technical limitations" | <https://github.com/OpenHands/software-agent-sdk/blob/main/openhands-sdk/openhands/sdk/tool/builtins/finish.py> |
77
+ | Gemini CLI | `complete_task` tool (`CompleteTaskTool`) | Model calls it | Nothing, but the strictest completion wording found: "This is the ONLY way to finish" | <https://github.com/google-gemini/gemini-cli/blob/main/packages/core/src/tools/complete-task.ts> |
78
+ | Aider | `--auto-lint` / `--auto-test` / `/test` | Non-zero exit of the lint/test command after an edit | Re-prompts until the command passes — failure-driven, not confession-driven | <https://aider.chat/docs/usage/lint-test.html> |
79
+ | Goose | unconfirmed — `final_output` not located in two fetches | — | — | — |
80
+ | OpenCode | No stop hook; `session.idle` is an observational event | — | Nothing | <https://opencode.ai/docs/plugins/> |
81
+
82
+ ## Failure modes these documents themselves record
83
+
84
+ - **Runaway refusal.** Claude Code "overrides a Stop hook after it blocks eight times in a row with no
85
+ tool call"; a hook must check `stop_hook_active` or it "block[s] on a condition that will never
86
+ resolve". <https://code.claude.com/docs/en/hooks-guide>
87
+ - **Per-reply cost.** "`Stop` hooks fire whenever Claude finishes responding, not only at task
88
+ completion" — a verification hook runs on every reply, trivial ones included.
89
+ <https://code.claude.com/docs/en/hooks-guide>
90
+ - **A judge cannot act.** `/goal`'s evaluator "does not call tools, so it can only judge what Claude
91
+ has already surfaced".
92
+ - **Uncapped loops are a switch, not an accident.** Cursor exposes `loop_limit: null`.
93
+ - **Conflicting controls.** Codex: "If any matching `Stop` hook returns `continue: false`, that takes
94
+ precedence over continuation decisions."
95
+ - **Completion tools do not check the world.** OpenHands `finish` and Gemini `complete_task` validate
96
+ only that the final message is non-empty; a model that declares done is believed. (Inference from
97
+ both sources — no harness documents a done-ness check at the tool boundary.)
98
+
99
+ ## What to adopt, in order
100
+
101
+ 1. **Scope + headings (landed today).** `ROLE` now names the job the request implies and its bounds;
102
+ `REPORTING_GUIDANCE` requires `## Beyond what you asked` and `## What would make this complete`.
103
+ Zero runtime risk, no new state, one cached-prefix invalidation
104
+ ([ADR-0068](../decisions/ADR-0068-scope-and-completion-report.md)).
105
+ 2. **Policy continuation on an unfinished reply (recommended next).** Widen `continueSlice`'s first
106
+ check from `terminalReason === 'slice_complete'` to also accept `completed` when the run's own
107
+ `todo_write` list holds an open item, no `checkpoint` is `blocked`, no question or approval is
108
+ pending, and the reply is not answer-only (no tool call in the run). Reuse everything else: the
109
+ `continueFrom` pin, `CONTINUE_TEXT` naming the open items, `maxSlices`, and the `progressed` test
110
+ so a fruitless slice does not loop. This is the stop-hook mechanism the table shows, expressed in
111
+ our own vocabulary instead of a new hook surface.
112
+ 3. **A cap and a person's escape.** Continue at most N times in a row (3, like Cursor's default of 5
113
+ but tighter), and never when the last reply asked the person something. Record the continuation as
114
+ its own run so the transcript shows the handoff; `runs.continuation` already reports it.
115
+ 4. **Do not adopt** a model-judged goal evaluator: it adds a second model call per reply and can only
116
+ judge what the transcript shows, which is exactly the information the doer already has.
117
+
118
+ What to measure after 2: the share of `completed` runs with an open todo at the end (baseline 81 of
119
+ 207 `model_behaviour` runs), and the count of continuation runs per session (should be small — more
120
+ than 3 in a row means the acceptance test is wrong, not that the model is lazy).
121
+
122
+ ## Evidence grade and gaps
123
+
124
+ - The Xingular rows are first-party: file and line in this repository, today's checkouts.
125
+ - External rows were read from live documentation on 2026-10-30 by a research pass with URLs cited;
126
+ they are **not** pinned to commits, so a later docs edit can invalidate a row. Where the wording is
127
+ quoted, it is verbatim from that page.
128
+ - Not covered: Goose's completion tool, Cline's verbatim `attempt_completion` text, OpenCode step
129
+ limits, and the outer-loop literature (Ralph-style re-prompt loops, LangGraph recursion limits,
130
+ budget-forcing token loops). Treat any use of those as unverified.
@@ -0,0 +1,146 @@
1
+ # STUDY-0005 — Does this harness know how to install a skill, globally and per project?
2
+
3
+ Status: **checked source and published docs**, no contract change. Extends
4
+ [arms/04-skills.md](arms/04-skills.md), which covers skill format, loading and validation but not
5
+ installation.
6
+
7
+ ## The question, in two parts
8
+
9
+ "Install a skill" means two different things here, and they have different answers:
10
+
11
+ 1. **What the model in a session is told** about where skills live and how one gets installed.
12
+ 2. **What the product does** — which file locations and commands a person can use to put a skill in
13
+ a global scope or one project.
14
+
15
+ The short answer: the product knows both scopes and they work. The session model is told neither.
16
+ No prompt text, tool description or shipped skill names a skill location, a global-versus-project
17
+ choice, or a way to install one. The model can only infer the folder convention from the absolute
18
+ `location` of skills Pi already listed for it.
19
+
20
+ ## Part 1 — Everything a session model is told about skills
21
+
22
+ | Text | File | What it says |
23
+ |---|---|---|
24
+ | Pi's skill list | `dist/core/skills.js` (`formatSkillsForPrompt`), installed at `/opt/homebrew/lib/node_modules/@xingular/harness/node_modules/@earendil-works/pi-coding-agent` | name, description, absolute `location` per skill, and "load a skill's file when the task matches its description" |
25
+ | Harness tool guidance | [src/prompt/compile.ts:293](../../src/prompt/compile.ts) | "`skill_load` loads one of your skills by name." |
26
+ | `skill_load` description | [src/tools/definitions.ts:131](../../src/tools/definitions.ts) | "Load the steps of one of your skills by name … Without a name, lists your skills." |
27
+ | `plugin_propose` description | [src/tools/definitions.ts:141](../../src/tools/definitions.ts) | authoring only: "This does not install, enable, or trust it." Files are given as a map, `skills/<name>/SKILL.md` (validated in `plugins/proposals.ts`) |
28
+ | Shipped `plugin-authoring` skill | [builtin/skills/plugin-authoring/SKILL.md](../../builtin/skills/plugin-authoring/SKILL.md) | step 3: "Put shared resources under the package's `skills`, `extensions`, `prompts` or `themes`" — packaging a plugin, not placing a skill in a scope |
29
+ | Improver prompt (refinement only) | [src/refine/prompts.ts:141](../../src/refine/prompts.ts) | the exact c6 layout `skills/<name>/SKILL.md`, frontmatter rules, and that the name must appear in always-on text |
30
+
31
+ So the only place a model is told the on-disk layout is the **improver** prompt — the model that
32
+ edits the agent's own variant — and it describes the variant's folder, never `~/.agents/skills` or
33
+ `<repo>/.agents/skills`. That rule came from harness², and its machine check lives in
34
+ [src/variant/variant.ts:246](../../src/variant/variant.ts) ("a skill is never named in the always-on
35
+ text"), whose hint text also reaches only the person or improver fixing a validation error.
36
+
37
+ A session model that is asked "install this skill for the project" therefore has to rediscover the
38
+ routes from the repository, which is what happened in the session that produced this study: about
39
+ ten searches across `src/plugins`, `src/variant` and `docs/architecture` before the answer was
40
+ secure. The `location` field in Pi's list is the only hint available in-band, and it carries the
41
+ project case only (a variant skill's path is inside the state directory, so it teaches the wrong
42
+ lesson).
43
+
44
+ ## Part 2 — What the product actually supports
45
+
46
+ Verified with the harness's own resolver (`plugins/discover.ts`, the same call `Plugins.loading`
47
+ makes before a terminal starts) against this repository, with the real home folder:
48
+
49
+ | Scope | Path | Reaches a run as | Verified |
50
+ |---|---|---|---|
51
+ | Project (interop) | `<repo>/.agents/skills/<n>/SKILL.md` | plugin `skillPaths` → `--skill` for a terminal, `additionalSkillPaths` for a structured session | resolver reports `origin: 'project'`, `enabled: true` for `fix-strategy` and `terminal-testing` here |
52
+ | Project (Pi native) | `<repo>/.pi/skills/<n>/SKILL.md` | same | Pi's own docs: `@earendil-works/pi-coding-agent/docs/skills.md`, `…/docs/settings.md#resources` |
53
+ | Global, per OS user | `~/.agents/skills/<n>/SKILL.md` | same, as the "Home folder skills" plugin | resolver reports `origin: 'home'` for the 12 Cloudflare skills installed there |
54
+ | Global, per harness state | `<state>/accounts/_shared/pi/skills` (linked into every account's `home/pi`) | Pi's user-level skills for an account | `ls ~/.xingular-harness/state/accounts/_shared/pi/skills` (exists, empty today) |
55
+ | Variant (c6) | `skills/<n>/SKILL.md` in a versioned variant | Pi skill path, pinned per run | [docs/architecture/03-variants.md](../architecture/03-variants.md) |
56
+ | Library → variant | `<data root>/registry/skills/<n>/SKILL.md` | `/components` commits a new variant version | [docs/terminal-tui.md](../terminal-tui.md) |
57
+ | Package | `skills/<n>/SKILL.md` inside a plugin package | installed package, switched on per project/agent/global | [docs/architecture/06-plugins-and-capabilities.md](../architecture/06-plugins-and-capabilities.md) |
58
+
59
+ Person-facing commands exist for every one of these (`/plugins`, `/components`, `/skills`, Hub
60
+ install, local skill import through the resource browser). Model-facing commands exist for none of
61
+ them, deliberately: installing grants no trust (`INV-PLG-3`) and a variant change is a version a
62
+ person commits.
63
+
64
+ ## Part 3 — How peers handle it
65
+
66
+ | Harness | Global | Project | Is the model told how to install? |
67
+ |---|---|---|---|
68
+ | **Codex CLI** | `$HOME/.agents/skills` (+ `/etc/codex/skills` admin) | `.agents/skills` from CWD up to repo root | **Yes, strongest.** Bundled `$skill-creator` and `$skill-installer <name>`; the docs frame those as the normal path |
69
+ | **Gemini CLI** | `~/.gemini/skills` or `~/.agents/skills` | `.gemini/skills` or `.agents/skills` | **Yes.** Bundled `skill-creator` scaffolds into workspace scope; `gemini skills install <git-url> --scope user\|workspace` (defaults to `user`) |
70
+ | **Claude Code** | `~/.claude/skills` (personal), enterprise dir | `.claude/skills`, nested, `--add-dir` | **Partly.** Bundled `/run-skill-generator` commits `.claude/skills/run-<name>/`, `/verify` writes `.claude/skills/verify/SKILL.md`; `skill-creator` is a marketplace plugin, not bundled. Personal outranks project |
71
+ | **Kimi CLI** | `~/.kimi/skills` (+ `~/.agents/skills`) | `.kimi/skills`, `.agents/skills` | **Scope, yes; path, no.** System prompt groups skills `Project/User/Extra/Built-in` and states the override order; ships a `skill-creator` skill |
72
+ | **Amp** | `~/.config/agents/skills`, `~/.agents/skills` | `.agents/skills` | **Yes.** Bundled `building-skills`; `amp skill add <source> --global` |
73
+ | **Cursor** | `~/.cursor/skills`, `~/.agents/skills` | `.cursor/skills`, `.agents/skills` | **Yes.** Built-in `/create-skill`, `/migrate-to-skills` |
74
+ | **Cline** | `~/.cline/skills` | `.cline/skills` | GUI only: "New skill…" creates the directory |
75
+ | **OpenCode** | `~/.config/opencode/skills`, `~/.claude/skills`, `~/.agents/skills` | `.opencode/skills`, `.claude/skills`, `.agents/skills`, walk up to the git worktree | **No.** Model gets names and descriptions |
76
+ | **omp** | `~/.omp/agent/skills`, foreign `.agents`/`.claude` roots | `.omp/skills` | **No.** Prompt is usage-only (`skill://<name>`); `omp skill install` exists for people |
77
+ | **deepseek-harness** | `<dshHome>/skills` | `<root>/.dsh/skills`, `.agents/skills` | **No.** Catalog plus a load tool |
78
+ | **OpenHands SDK** | `~/.openhands/skills` | `.agents/skills` | Programmatic: `install_skill`, marketplace API |
79
+ | **harness²** | — | `skills/<name>/SKILL.md` in the editable harness | **For the improver, yes.** Its prompt names the surface paths and the trigger-line rule |
80
+ | **this harness** | `~/.agents/skills`, `_shared/pi/skills` | `.agents/skills`, `.pi/skills` | **No**, except the improver's variant layout |
81
+
82
+ Two observations worth keeping:
83
+
84
+ - The [Agent Skills specification](https://agentskills.io/specification) defines the directory and
85
+ frontmatter, not locations. Global-versus-project is vendor invention in every harness, and the
86
+ collision rules disagree (Claude Code: personal beats project; Gemini: workspace beats user;
87
+ Cline: global beats project; Codex: no resolution at all). There is no canonical rule to copy.
88
+ - Every peer that tells the model how installs work does it with a **bundled skill or command**,
89
+ not always-on prompt prose. Codex, Gemini, Cursor, Amp and Kimi all ship one; none spends stable
90
+ prefix tokens on it.
91
+
92
+ Sources fetched for this study: [Claude Code skills](https://code.claude.com/docs/en/skills),
93
+ [Gemini CLI skills](https://raw.githubusercontent.com/google-gemini/gemini-cli/main/docs/cli/skills.md),
94
+ [Codex build skills](https://learn.chatgpt.com/docs/build-skills),
95
+ [Agent Skills spec](https://agentskills.io/specification). Peers marked only in the table rows for
96
+ Amp, Cursor and Cline come from [ampcode.com/docs/customize/skills](https://ampcode.com/docs/customize/skills),
97
+ [cursor.com/docs/skills](https://cursor.com/docs/skills) and
98
+ [docs.cline.bot/customization/skills](https://docs.cline.bot/customization/skills) via the research
99
+ pass recorded in this session, and were not re-fetched. Clone-based claims cite
100
+ `external/<name>/<path>` as usual: `external/kimi-cli/src/kimi_cli/agents/default/system.md:140`,
101
+ `external/kimi-cli/src/kimi_cli/skills/skill-creator/SKILL.md:1`,
102
+ `external/opencode/packages/web/src/content/docs/skills.mdx:16`,
103
+ `external/omp/docs/skills.md:92`, `external/harness2/harness2/core/prompts.py:141`.
104
+
105
+ ## Findings
106
+
107
+ - **F1.** Both scopes exist and work; the gap is in the model's instructions, not the mechanism.
108
+ - **F2.** A session model is told how to *use* skills and how to *propose a plugin*, never where a
109
+ skill is installed. The improver is the only model told a layout, and only for c6.
110
+ - **F3.** The fix cannot be an install tool. Installing grants no trust (`INV-PLG-3`), variant
111
+ changes are committed versions, and Hub installs carry provenance receipts — all person acts.
112
+ Only the text-file routes are safe for a model to write, and it is not told what they are.
113
+ - **F4.** The cheapest known shape is a bundled skill or command; the peers' evidence argues
114
+ against putting location rules in the always-on prompt.
115
+
116
+ ## Candidate changes, not implemented
117
+
118
+ | # | Change | Lands in | Cost |
119
+ |---|---|---|---|
120
+ | S1 | Give the shipped `plugin-authoring` skill a short "where a skill is installed" section: the three text routes (project `.agents/skills`, home `~/.agents/skills`, state-shared `_shared/pi/skills`) and that variant, library and package installs are person-committed | [builtin/skills/plugin-authoring/SKILL.md](../../builtin/skills/plugin-authoring/SKILL.md), plus the one contract sentence in [page 06](../architecture/06-plugins-and-capabilities.md) | no prompt tokens, no cache-prefix risk; the skill loads on demand |
121
+ | S2 | Add the same routes to a project's `AGENTS.md` where a repository wants its agents to install skills itself | this repo's guide, other repos' | zero runtime cost, helps only the repos that carry it |
122
+ | S3 | One added sentence in the tool-guidance section ("A skill is a folder … install to …") | [src/prompt/compile.ts](../../src/prompt/compile.ts) | stable-prefix change; measure with the App's cache probe before adopting |
123
+
124
+ ## Implementation
125
+
126
+ S1 shipped: [builtin/skills/plugin-authoring/SKILL.md](../../builtin/skills/plugin-authoring/SKILL.md)
127
+ now has an "Installing an existing skill or plugin" section with the text routes, the whole-folder
128
+ rule, the URL workflow and the person-committed paths, and its description names installing. Two
129
+ install-correctness fixes shipped with it:
130
+
131
+ - `normalizeSource` refuses a GitHub or GitLab `tree`/`blob` page address and names the repository
132
+ address and the skill routes, instead of passing the page to Pi's `git clone`.
133
+ - A package's foreign plugin manifest (`plugin.json`, `.claude-plugin/plugin.json`,
134
+ `.codex-plugin/plugin.json`) may declare `skills`; those folders load as package skill
135
+ contributions, under the package's own switch and settings filter.
136
+
137
+ S3 was not taken: no always-on prompt line, so the stable prefix and its cache are unchanged.
138
+ Tests: `src/plugins/manifestSkills.test.ts`, `src/plugins/install.test.ts`,
139
+ `src/tools/defaultSkills.test.ts`. The contract text is in
140
+ [page 06](../architecture/06-plugins-and-capabilities.md).
141
+
142
+ ## Drift noticed while reading
143
+
144
+ [arms/04-skills.md](arms/04-skills.md) still describes `src/tree/` (`tree.ts`, `src/tree/trust.ts`)
145
+ and the word "tree"; those modules are `src/variant/` now. Study text, not contract, so it is left
146
+ as written for a separate pass.