@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.
- package/CHANGELOG.md +635 -0
- package/LICENSE +202 -0
- package/NOTICE.md +50 -0
- package/README.md +241 -90
- package/THIRD_PARTY_LICENSES.md +942 -0
- package/browser-extension/README.md +32 -0
- package/browser-extension/background.js +612 -0
- package/browser-extension/manifest.json +16 -0
- package/browser-extension/overlay.js +97 -0
- package/browser-extension/popup.css +19 -0
- package/browser-extension/popup.html +30 -0
- package/browser-extension/popup.js +101 -0
- package/browser-extension/site-access.js +63 -0
- package/builtin/skills/plugin-authoring/SKILL.md +53 -0
- package/dist/cli.js +32851 -17155
- package/dist/sdk/accounts/accounts.d.ts +195 -0
- package/dist/sdk/accounts/accounts.js +821 -0
- package/dist/sdk/accounts/choices.d.ts +41 -0
- package/dist/sdk/accounts/choices.js +89 -0
- package/dist/sdk/accounts/env.d.ts +78 -0
- package/dist/sdk/accounts/env.js +294 -0
- package/dist/sdk/accounts/secrets.d.ts +28 -0
- package/dist/sdk/accounts/secrets.js +147 -0
- package/dist/sdk/accounts/store.d.ts +139 -0
- package/dist/sdk/accounts/store.js +255 -0
- package/dist/sdk/agents/builtin.d.ts +2 -0
- package/dist/sdk/agents/builtin.js +50 -0
- package/dist/sdk/agents/narrow.d.ts +13 -0
- package/dist/sdk/agents/narrow.js +29 -0
- package/dist/sdk/agents/planResearch.d.ts +27 -0
- package/dist/sdk/agents/planResearch.js +82 -0
- package/dist/sdk/agents/profiles.d.ts +93 -0
- package/dist/sdk/agents/profiles.js +289 -0
- package/dist/sdk/annotations/bridge.d.ts +44 -0
- package/dist/sdk/annotations/bridge.js +268 -0
- package/dist/sdk/annotations/capture.d.ts +158 -0
- package/dist/sdk/annotations/capture.js +409 -0
- package/dist/sdk/annotations/delivery.d.ts +79 -0
- package/dist/sdk/annotations/delivery.js +163 -0
- package/dist/sdk/annotations/inspect.d.ts +10 -0
- package/dist/sdk/annotations/inspect.js +34 -0
- package/dist/sdk/annotations/isolated.d.ts +6 -0
- package/dist/sdk/annotations/isolated.js +51 -0
- package/dist/sdk/annotations/pageScript.d.ts +28 -0
- package/dist/sdk/annotations/pageScript.js +871 -0
- package/dist/sdk/annotations/part.d.ts +8 -0
- package/dist/sdk/annotations/part.js +126 -0
- package/dist/sdk/annotations/queue.d.ts +4 -0
- package/dist/sdk/annotations/queue.js +45 -0
- package/dist/sdk/annotations/serverMethods.d.ts +3 -0
- package/dist/sdk/annotations/serverMethods.js +66 -0
- package/dist/sdk/annotations/store.d.ts +159 -0
- package/dist/sdk/annotations/store.js +404 -0
- package/dist/sdk/browser/backend.d.ts +16 -0
- package/dist/sdk/browser/backend.js +17 -0
- package/dist/sdk/browser/config.d.ts +19 -0
- package/dist/sdk/browser/config.js +23 -0
- package/dist/sdk/browser/contracts.d.ts +19 -0
- package/dist/sdk/browser/contracts.js +116 -0
- package/dist/sdk/browser/diagnostics.d.ts +4 -0
- package/dist/sdk/browser/diagnostics.js +38 -0
- package/dist/sdk/browser/extension/bridge.d.ts +55 -0
- package/dist/sdk/browser/extension/bridge.js +336 -0
- package/dist/sdk/browser/extension/session.d.ts +50 -0
- package/dist/sdk/browser/extension/session.js +321 -0
- package/dist/sdk/browser/index.d.ts +33 -0
- package/dist/sdk/browser/index.js +105 -0
- package/dist/sdk/browser/network.d.ts +10 -0
- package/dist/sdk/browser/network.js +59 -0
- package/dist/sdk/browser/serverMethods.d.ts +3 -0
- package/dist/sdk/browser/serverMethods.js +10 -0
- package/dist/sdk/browser/session.d.ts +85 -0
- package/dist/sdk/browser/session.js +228 -0
- package/dist/sdk/browser/tools.d.ts +102 -0
- package/dist/sdk/browser/tools.js +257 -0
- package/dist/sdk/capabilities/api.d.ts +22 -0
- package/dist/sdk/capabilities/api.js +54 -0
- package/dist/sdk/capabilities/runSnapshot.d.ts +18 -0
- package/dist/sdk/capabilities/runSnapshot.js +53 -0
- package/dist/sdk/capabilities/types.d.ts +29 -0
- package/dist/sdk/capabilities/types.js +1 -0
- package/dist/sdk/cli.d.ts +2 -0
- package/dist/sdk/cli.js +172 -0
- package/dist/sdk/commands/extensionOwners.d.ts +4 -0
- package/dist/sdk/commands/extensionOwners.js +17 -0
- package/dist/sdk/commands/list.d.ts +3 -0
- package/dist/sdk/commands/list.js +90 -0
- package/dist/sdk/commands/promptLoader.d.ts +5 -0
- package/dist/sdk/commands/promptLoader.js +76 -0
- package/dist/sdk/commands/promptRoutes.d.ts +13 -0
- package/dist/sdk/commands/promptRoutes.js +46 -0
- package/dist/sdk/commands/registry.d.ts +299 -0
- package/dist/sdk/commands/registry.js +54 -0
- package/dist/sdk/commands/routes.d.ts +16 -0
- package/dist/sdk/commands/routes.js +33 -0
- package/dist/sdk/commands/runtimeRouter.d.ts +4 -0
- package/dist/sdk/commands/runtimeRouter.js +48 -0
- package/dist/sdk/computer/boundary.d.ts +40 -0
- package/dist/sdk/computer/boundary.js +79 -0
- package/dist/sdk/computer/contracts.d.ts +127 -0
- package/dist/sdk/computer/contracts.js +13 -0
- package/dist/sdk/computer/control.d.ts +34 -0
- package/dist/sdk/computer/control.js +112 -0
- package/dist/sdk/computer/screenshot.d.ts +32 -0
- package/dist/sdk/computer/screenshot.js +35 -0
- package/dist/sdk/computer/terminalCapture.d.ts +26 -0
- package/dist/sdk/computer/terminalCapture.js +64 -0
- package/dist/sdk/computer/volatileImages.d.ts +9 -0
- package/dist/sdk/computer/volatileImages.js +50 -0
- package/dist/sdk/context/attribution.d.ts +18 -0
- package/dist/sdk/context/attribution.js +295 -0
- package/dist/sdk/context/runDetails.d.ts +16 -0
- package/dist/sdk/context/runDetails.js +22 -0
- package/dist/sdk/context/types.d.ts +94 -0
- package/dist/sdk/context/types.js +10 -0
- package/dist/sdk/core/bus.d.ts +23 -0
- package/dist/sdk/core/bus.js +76 -0
- package/dist/sdk/core/caller.d.ts +22 -0
- package/dist/sdk/core/caller.js +16 -0
- package/dist/sdk/core/changes.d.ts +15 -0
- package/dist/sdk/core/changes.js +15 -0
- package/dist/sdk/core/commandBudget.d.ts +23 -0
- package/dist/sdk/core/commandBudget.js +62 -0
- package/dist/sdk/core/effort.d.ts +2 -0
- package/dist/sdk/core/effort.js +1 -0
- package/dist/sdk/core/env.d.ts +18 -0
- package/dist/sdk/core/env.js +8 -0
- package/dist/sdk/core/errors.d.ts +15 -0
- package/dist/sdk/core/errors.js +24 -0
- package/dist/sdk/core/frontmatter.d.ts +12 -0
- package/dist/sdk/core/frontmatter.js +50 -0
- package/dist/sdk/core/fs.d.ts +18 -0
- package/dist/sdk/core/fs.js +106 -0
- package/dist/sdk/core/index.d.ts +24 -0
- package/dist/sdk/core/index.js +203 -0
- package/dist/sdk/core/interactiveProfile.d.ts +46 -0
- package/dist/sdk/core/interactiveProfile.js +143 -0
- package/dist/sdk/core/links.d.ts +51 -0
- package/dist/sdk/core/links.js +155 -0
- package/dist/sdk/core/path.d.ts +7 -0
- package/dist/sdk/core/path.js +79 -0
- package/dist/sdk/core/projects.d.ts +18 -0
- package/dist/sdk/core/projects.js +67 -0
- package/dist/sdk/core/secrets.d.ts +2 -0
- package/dist/sdk/core/secrets.js +5 -0
- package/dist/sdk/core/shell.d.ts +20 -0
- package/dist/sdk/core/shell.js +73 -0
- package/dist/sdk/core/text.d.ts +7 -0
- package/dist/sdk/core/text.js +40 -0
- package/dist/sdk/core/workspace.d.ts +13 -0
- package/dist/sdk/core/workspace.js +88 -0
- package/dist/sdk/core/workspaceBashTool.d.ts +20 -0
- package/dist/sdk/core/workspaceBashTool.js +50 -0
- package/dist/sdk/core/workspaceSandbox.d.ts +41 -0
- package/dist/sdk/core/workspaceSandbox.js +360 -0
- package/dist/sdk/core/workspaceWriteOperations.d.ts +57 -0
- package/dist/sdk/core/workspaceWriteOperations.js +245 -0
- package/dist/sdk/doctor/checks.d.ts +5 -0
- package/dist/sdk/doctor/checks.js +270 -0
- package/dist/sdk/doctor/probe.d.ts +4 -0
- package/dist/sdk/doctor/probe.js +94 -0
- package/dist/sdk/doctor/serverMethods.d.ts +3 -0
- package/dist/sdk/doctor/serverMethods.js +8 -0
- package/dist/sdk/doctor/service.d.ts +23 -0
- package/dist/sdk/doctor/service.js +144 -0
- package/dist/sdk/doctor/types.d.ts +141 -0
- package/dist/sdk/doctor/types.js +29 -0
- package/dist/sdk/harness.d.ts +172 -0
- package/dist/sdk/harness.js +387 -0
- package/dist/sdk/history/lessonPrompt.d.ts +2 -0
- package/dist/sdk/history/lessonPrompt.js +15 -0
- package/dist/sdk/history/lessons.d.ts +52 -0
- package/dist/sdk/history/lessons.js +173 -0
- package/dist/sdk/history/recall.d.ts +68 -0
- package/dist/sdk/history/recall.js +199 -0
- package/dist/sdk/history/serverMethods.d.ts +3 -0
- package/dist/sdk/history/serverMethods.js +8 -0
- package/dist/sdk/history/trajectory.d.ts +7 -0
- package/dist/sdk/history/trajectory.js +218 -0
- package/dist/sdk/hub/catalog.json +123 -0
- package/dist/sdk/hub/cli.d.ts +7 -0
- package/dist/sdk/hub/cli.js +81 -0
- package/dist/sdk/hub/hub.d.ts +74 -0
- package/dist/sdk/hub/hub.js +476 -0
- package/dist/sdk/hub/schema.d.ts +280 -0
- package/dist/sdk/hub/schema.js +78 -0
- package/dist/sdk/hub/serverMethods.d.ts +3 -0
- package/dist/sdk/hub/serverMethods.js +11 -0
- package/dist/sdk/index.d.ts +80 -0
- package/dist/sdk/index.js +60 -0
- package/dist/sdk/mcp/connections.d.ts +83 -0
- package/dist/sdk/mcp/connections.js +676 -0
- package/dist/sdk/mcp/manager.d.ts +26 -0
- package/dist/sdk/mcp/manager.js +124 -0
- package/dist/sdk/mcp/oauth.d.ts +35 -0
- package/dist/sdk/mcp/oauth.js +171 -0
- package/dist/sdk/mcp/scopeMigration.d.ts +19 -0
- package/dist/sdk/mcp/scopeMigration.js +198 -0
- package/dist/sdk/mcp/serverMethods.d.ts +3 -0
- package/dist/sdk/mcp/serverMethods.js +22 -0
- package/dist/sdk/mcp/service.d.ts +160 -0
- package/dist/sdk/mcp/service.js +510 -0
- package/dist/sdk/mcp/types.d.ts +131 -0
- package/dist/sdk/mcp/types.js +49 -0
- package/dist/sdk/pi/retryPolicy.d.ts +19 -0
- package/dist/sdk/pi/retryPolicy.js +11 -0
- package/dist/sdk/pi/runtime.d.ts +14 -0
- package/dist/sdk/pi/runtime.js +31 -0
- package/dist/sdk/plugins/api.d.ts +66 -0
- package/dist/sdk/plugins/api.js +155 -0
- package/dist/sdk/plugins/attachments.d.ts +46 -0
- package/dist/sdk/plugins/attachments.js +111 -0
- package/dist/sdk/plugins/builtin.d.ts +7 -0
- package/dist/sdk/plugins/builtin.js +182 -0
- package/dist/sdk/plugins/builtinRegistry.d.ts +62 -0
- package/dist/sdk/plugins/builtinRegistry.js +77 -0
- package/dist/sdk/plugins/catalogue.d.ts +29 -0
- package/dist/sdk/plugins/catalogue.js +197 -0
- package/dist/sdk/plugins/cli.d.ts +13 -0
- package/dist/sdk/plugins/cli.js +188 -0
- package/dist/sdk/plugins/commandPrefix.d.ts +8 -0
- package/dist/sdk/plugins/commandPrefix.js +21 -0
- package/dist/sdk/plugins/discover.d.ts +48 -0
- package/dist/sdk/plugins/discover.js +230 -0
- package/dist/sdk/plugins/firstParty.d.ts +50 -0
- package/dist/sdk/plugins/firstParty.js +119 -0
- package/dist/sdk/plugins/hooks.d.ts +94 -0
- package/dist/sdk/plugins/hooks.js +162 -0
- package/dist/sdk/plugins/identity.d.ts +19 -0
- package/dist/sdk/plugins/identity.js +48 -0
- package/dist/sdk/plugins/install.d.ts +24 -0
- package/dist/sdk/plugins/install.js +160 -0
- package/dist/sdk/plugins/inventory.d.ts +22 -0
- package/dist/sdk/plugins/inventory.js +111 -0
- package/dist/sdk/plugins/manifest.d.ts +21 -0
- package/dist/sdk/plugins/manifest.js +94 -0
- package/dist/sdk/plugins/plugins.d.ts +106 -0
- package/dist/sdk/plugins/plugins.js +165 -0
- package/dist/sdk/plugins/proposals.d.ts +17 -0
- package/dist/sdk/plugins/proposals.js +147 -0
- package/dist/sdk/plugins/runtime.d.ts +9 -0
- package/dist/sdk/plugins/runtime.js +95 -0
- package/dist/sdk/plugins/surfaces.d.ts +5 -0
- package/dist/sdk/plugins/surfaces.js +11 -0
- package/dist/sdk/plugins/trust.d.ts +44 -0
- package/dist/sdk/plugins/trust.js +120 -0
- package/dist/sdk/plugins/types.d.ts +174 -0
- package/dist/sdk/plugins/types.js +7 -0
- package/dist/sdk/prompt/compile.d.ts +245 -0
- package/dist/sdk/prompt/compile.js +535 -0
- package/dist/sdk/prompt/reporting.d.ts +2 -0
- package/dist/sdk/prompt/reporting.js +94 -0
- package/dist/sdk/prompt/standard.d.ts +32 -0
- package/dist/sdk/prompt/standard.js +76 -0
- package/dist/sdk/refine/cli.d.ts +4 -0
- package/dist/sdk/refine/cli.js +186 -0
- package/dist/sdk/refine/demo.d.ts +21 -0
- package/dist/sdk/refine/demo.js +114 -0
- package/dist/sdk/refine/evidence.d.ts +55 -0
- package/dist/sdk/refine/evidence.js +330 -0
- package/dist/sdk/refine/host.d.ts +59 -0
- package/dist/sdk/refine/host.js +105 -0
- package/dist/sdk/refine/ledger.d.ts +48 -0
- package/dist/sdk/refine/ledger.js +76 -0
- package/dist/sdk/refine/library.d.ts +55 -0
- package/dist/sdk/refine/library.js +177 -0
- package/dist/sdk/refine/pi.d.ts +72 -0
- package/dist/sdk/refine/pi.js +248 -0
- package/dist/sdk/refine/prompts.d.ts +60 -0
- package/dist/sdk/refine/prompts.js +434 -0
- package/dist/sdk/refine/recursion.d.ts +113 -0
- package/dist/sdk/refine/recursion.js +258 -0
- package/dist/sdk/refine/runner.d.ts +83 -0
- package/dist/sdk/refine/runner.js +151 -0
- package/dist/sdk/refine/selection.d.ts +57 -0
- package/dist/sdk/refine/selection.js +251 -0
- package/dist/sdk/refine/serverMethods.d.ts +3 -0
- package/dist/sdk/refine/serverMethods.js +23 -0
- package/dist/sdk/refine/service.d.ts +115 -0
- package/dist/sdk/refine/service.js +280 -0
- package/dist/sdk/refine/suite.d.ts +67 -0
- package/dist/sdk/refine/suite.js +174 -0
- package/dist/sdk/refine/trajectory.d.ts +9 -0
- package/dist/sdk/refine/trajectory.js +73 -0
- package/dist/sdk/refine/types.d.ts +93 -0
- package/dist/sdk/refine/types.js +10 -0
- package/dist/sdk/remote/addresses.d.ts +19 -0
- package/dist/sdk/remote/addresses.js +52 -0
- package/dist/sdk/remote/pairing.d.ts +59 -0
- package/dist/sdk/remote/pairing.js +160 -0
- package/dist/sdk/remote/seal.d.ts +28 -0
- package/dist/sdk/remote/seal.js +84 -0
- package/dist/sdk/remote/server.d.ts +28 -0
- package/dist/sdk/remote/server.js +158 -0
- package/dist/sdk/remote/service.d.ts +125 -0
- package/dist/sdk/remote/service.js +330 -0
- package/dist/sdk/remote/webClient.d.ts +4 -0
- package/dist/sdk/remote/webClient.js +452 -0
- package/dist/sdk/server/methods.d.ts +3 -0
- package/dist/sdk/server/methods.js +365 -0
- package/dist/sdk/server/params.d.ts +4 -0
- package/dist/sdk/server/params.js +11 -0
- package/dist/sdk/server/remote.d.ts +19 -0
- package/dist/sdk/server/remote.js +109 -0
- package/dist/sdk/server/rpc.d.ts +20 -0
- package/dist/sdk/server/rpc.js +102 -0
- package/dist/sdk/server/serve.d.ts +13 -0
- package/dist/sdk/server/serve.js +25 -0
- package/dist/sdk/server/socket.d.ts +28 -0
- package/dist/sdk/server/socket.js +122 -0
- package/dist/sdk/sessions/approvals.d.ts +47 -0
- package/dist/sdk/sessions/approvals.js +119 -0
- package/dist/sdk/sessions/checkpoint.d.ts +7 -0
- package/dist/sdk/sessions/checkpoint.js +41 -0
- package/dist/sdk/sessions/compactionCheckpoint.d.ts +18 -0
- package/dist/sdk/sessions/compactionCheckpoint.js +79 -0
- package/dist/sdk/sessions/completionCheck.d.ts +51 -0
- package/dist/sdk/sessions/completionCheck.js +161 -0
- package/dist/sdk/sessions/continuation.d.ts +53 -0
- package/dist/sdk/sessions/continuation.js +90 -0
- package/dist/sdk/sessions/contracts.d.ts +991 -0
- package/dist/sdk/sessions/contracts.js +545 -0
- package/dist/sdk/sessions/control.d.ts +72 -0
- package/dist/sdk/sessions/control.js +158 -0
- package/dist/sdk/sessions/extensionUi.d.ts +19 -0
- package/dist/sdk/sessions/extensionUi.js +64 -0
- package/dist/sdk/sessions/goal.d.ts +145 -0
- package/dist/sdk/sessions/goal.js +405 -0
- package/dist/sdk/sessions/goalLoop.d.ts +37 -0
- package/dist/sdk/sessions/goalLoop.js +125 -0
- package/dist/sdk/sessions/goalPrompts.d.ts +4 -0
- package/dist/sdk/sessions/goalPrompts.js +93 -0
- package/dist/sdk/sessions/goalStop.d.ts +27 -0
- package/dist/sdk/sessions/goalStop.js +41 -0
- package/dist/sdk/sessions/history.d.ts +16 -0
- package/dist/sdk/sessions/history.js +68 -0
- package/dist/sdk/sessions/initialBash.d.ts +7 -0
- package/dist/sdk/sessions/initialBash.js +7 -0
- package/dist/sdk/sessions/lineageJoin.d.ts +2 -0
- package/dist/sdk/sessions/lineageJoin.js +61 -0
- package/dist/sdk/sessions/live.d.ts +101 -0
- package/dist/sdk/sessions/live.js +265 -0
- package/dist/sdk/sessions/planMode.d.ts +116 -0
- package/dist/sdk/sessions/planMode.js +281 -0
- package/dist/sdk/sessions/policy.d.ts +43 -0
- package/dist/sdk/sessions/policy.js +1 -0
- package/dist/sdk/sessions/pricing.d.ts +34 -0
- package/dist/sdk/sessions/pricing.js +40 -0
- package/dist/sdk/sessions/reasoningSummaries.d.ts +11 -0
- package/dist/sdk/sessions/reasoningSummaries.js +61 -0
- package/dist/sdk/sessions/registry.d.ts +124 -0
- package/dist/sdk/sessions/registry.js +392 -0
- package/dist/sdk/sessions/runIndex.d.ts +21 -0
- package/dist/sdk/sessions/runIndex.js +65 -0
- package/dist/sdk/sessions/runStore.d.ts +82 -0
- package/dist/sdk/sessions/runStore.js +393 -0
- package/dist/sdk/sessions/runner.d.ts +291 -0
- package/dist/sdk/sessions/runner.js +1040 -0
- package/dist/sdk/sessions/sessionState.d.ts +13 -0
- package/dist/sdk/sessions/sessionState.js +31 -0
- package/dist/sdk/sessions/sessions.d.ts +238 -0
- package/dist/sdk/sessions/sessions.js +923 -0
- package/dist/sdk/sessions/sideQuestionServerMethods.d.ts +3 -0
- package/dist/sdk/sessions/sideQuestionServerMethods.js +19 -0
- package/dist/sdk/sessions/sideQuestions.d.ts +66 -0
- package/dist/sdk/sessions/sideQuestions.js +290 -0
- package/dist/sdk/sessions/stallWatch.d.ts +35 -0
- package/dist/sdk/sessions/stallWatch.js +42 -0
- package/dist/sdk/sessions/subagentServerMethods.d.ts +3 -0
- package/dist/sdk/sessions/subagentServerMethods.js +41 -0
- package/dist/sdk/sessions/subagentService.d.ts +88 -0
- package/dist/sdk/sessions/subagentService.js +546 -0
- package/dist/sdk/sessions/subagents.d.ts +98 -0
- package/dist/sdk/sessions/subagents.js +136 -0
- package/dist/sdk/sessions/workSlice.d.ts +167 -0
- package/dist/sdk/sessions/workSlice.js +266 -0
- package/dist/sdk/sessions/workspaceBoundary.d.ts +15 -0
- package/dist/sdk/sessions/workspaceBoundary.js +46 -0
- package/dist/sdk/terminal/accountsMenu.d.ts +46 -0
- package/dist/sdk/terminal/accountsMenu.js +392 -0
- package/dist/sdk/terminal/browser.d.ts +62 -0
- package/dist/sdk/terminal/browser.js +41 -0
- package/dist/sdk/terminal/browserControl.d.ts +29 -0
- package/dist/sdk/terminal/browserControl.js +187 -0
- package/dist/sdk/terminal/cli.d.ts +20 -0
- package/dist/sdk/terminal/cli.js +121 -0
- package/dist/sdk/terminal/client.d.ts +20 -0
- package/dist/sdk/terminal/client.js +148 -0
- package/dist/sdk/terminal/commandHelp.d.ts +17 -0
- package/dist/sdk/terminal/commandHelp.js +20 -0
- package/dist/sdk/terminal/control.d.ts +4 -0
- package/dist/sdk/terminal/control.js +25 -0
- package/dist/sdk/terminal/controller.d.ts +136 -0
- package/dist/sdk/terminal/controller.js +579 -0
- package/dist/sdk/terminal/credentialStore.d.ts +4 -0
- package/dist/sdk/terminal/credentialStore.js +33 -0
- package/dist/sdk/terminal/daemon.d.ts +44 -0
- package/dist/sdk/terminal/daemon.js +264 -0
- package/dist/sdk/terminal/hubMenu.d.ts +10 -0
- package/dist/sdk/terminal/hubMenu.js +34 -0
- package/dist/sdk/terminal/launch.d.ts +5 -0
- package/dist/sdk/terminal/launch.js +27 -0
- package/dist/sdk/terminal/liveTerminal.d.ts +96 -0
- package/dist/sdk/terminal/liveTerminal.js +436 -0
- package/dist/sdk/terminal/logs.d.ts +14 -0
- package/dist/sdk/terminal/logs.js +59 -0
- package/dist/sdk/terminal/opentui/ansi.d.ts +25 -0
- package/dist/sdk/terminal/opentui/ansi.js +192 -0
- package/dist/sdk/terminal/opentui/model.d.ts +163 -0
- package/dist/sdk/terminal/opentui/model.js +484 -0
- package/dist/sdk/terminal/opentui/subagentsWidget.d.ts +28 -0
- package/dist/sdk/terminal/opentui/subagentsWidget.js +54 -0
- package/dist/sdk/terminal/opentui/theme.d.ts +47 -0
- package/dist/sdk/terminal/opentui/theme.js +93 -0
- package/dist/sdk/terminal/piExtension.d.ts +12 -0
- package/dist/sdk/terminal/piExtension.js +847 -0
- package/dist/sdk/terminal/pluginMenu.d.ts +34 -0
- package/dist/sdk/terminal/pluginMenu.js +101 -0
- package/dist/sdk/terminal/socket.d.ts +73 -0
- package/dist/sdk/terminal/socket.js +287 -0
- package/dist/sdk/terminal/standalone.d.ts +52 -0
- package/dist/sdk/terminal/standalone.js +329 -0
- package/dist/sdk/terminal/subagentMonitor.d.ts +62 -0
- package/dist/sdk/terminal/subagentMonitor.js +176 -0
- package/dist/sdk/terminal/terminals.d.ts +312 -0
- package/dist/sdk/terminal/terminals.js +1782 -0
- package/dist/sdk/terminal/toolName.d.ts +6 -0
- package/dist/sdk/terminal/toolName.js +12 -0
- package/dist/sdk/terminal/trajectory.d.ts +15 -0
- package/dist/sdk/terminal/trajectory.js +38 -0
- package/dist/sdk/terminal/tui/annotateCommand.d.ts +7 -0
- package/dist/sdk/terminal/tui/annotateCommand.js +36 -0
- package/dist/sdk/terminal/tui/annotateSend.d.ts +30 -0
- package/dist/sdk/terminal/tui/annotateSend.js +40 -0
- package/dist/sdk/terminal/tui/chrome.d.ts +68 -0
- package/dist/sdk/terminal/tui/chrome.js +182 -0
- package/dist/sdk/terminal/tui/clipboardFiles.d.ts +11 -0
- package/dist/sdk/terminal/tui/clipboardFiles.js +74 -0
- package/dist/sdk/terminal/tui/commandPages.d.ts +16 -0
- package/dist/sdk/terminal/tui/commandPages.js +136 -0
- package/dist/sdk/terminal/tui/commands.d.ts +71 -0
- package/dist/sdk/terminal/tui/commands.js +496 -0
- package/dist/sdk/terminal/tui/dialogGeometry.d.ts +27 -0
- package/dist/sdk/terminal/tui/dialogGeometry.js +52 -0
- package/dist/sdk/terminal/tui/dialogs.d.ts +81 -0
- package/dist/sdk/terminal/tui/dialogs.js +372 -0
- package/dist/sdk/terminal/tui/goalCommand.d.ts +19 -0
- package/dist/sdk/terminal/tui/goalCommand.js +83 -0
- package/dist/sdk/terminal/tui/harnessRuntime.d.ts +8 -0
- package/dist/sdk/terminal/tui/harnessRuntime.js +771 -0
- package/dist/sdk/terminal/tui/keybindings.d.ts +11 -0
- package/dist/sdk/terminal/tui/keybindings.js +49 -0
- package/dist/sdk/terminal/tui/list.d.ts +86 -0
- package/dist/sdk/terminal/tui/list.js +278 -0
- package/dist/sdk/terminal/tui/markdown.d.ts +16 -0
- package/dist/sdk/terminal/tui/markdown.js +55 -0
- package/dist/sdk/terminal/tui/modeChoices.d.ts +61 -0
- package/dist/sdk/terminal/tui/modeChoices.js +95 -0
- package/dist/sdk/terminal/tui/modelPicker.d.ts +55 -0
- package/dist/sdk/terminal/tui/modelPicker.js +150 -0
- package/dist/sdk/terminal/tui/mouse.d.ts +3 -0
- package/dist/sdk/terminal/tui/mouse.js +3 -0
- package/dist/sdk/terminal/tui/mouseReport.d.ts +30 -0
- package/dist/sdk/terminal/tui/mouseReport.js +80 -0
- package/dist/sdk/terminal/tui/page.d.ts +17 -0
- package/dist/sdk/terminal/tui/page.js +1 -0
- package/dist/sdk/terminal/tui/pageOverlay.d.ts +30 -0
- package/dist/sdk/terminal/tui/pageOverlay.js +183 -0
- package/dist/sdk/terminal/tui/pages/accountsPage.d.ts +76 -0
- package/dist/sdk/terminal/tui/pages/accountsPage.js +409 -0
- package/dist/sdk/terminal/tui/pages/agentsPage.d.ts +74 -0
- package/dist/sdk/terminal/tui/pages/agentsPage.js +193 -0
- package/dist/sdk/terminal/tui/pages/annotatePage.d.ts +148 -0
- package/dist/sdk/terminal/tui/pages/annotatePage.js +576 -0
- package/dist/sdk/terminal/tui/pages/browserPage.d.ts +87 -0
- package/dist/sdk/terminal/tui/pages/browserPage.js +739 -0
- package/dist/sdk/terminal/tui/pages/componentsPage.d.ts +47 -0
- package/dist/sdk/terminal/tui/pages/componentsPage.js +119 -0
- package/dist/sdk/terminal/tui/pages/contextPage.d.ts +91 -0
- package/dist/sdk/terminal/tui/pages/contextPage.js +585 -0
- package/dist/sdk/terminal/tui/pages/doctorPage.d.ts +39 -0
- package/dist/sdk/terminal/tui/pages/doctorPage.js +233 -0
- package/dist/sdk/terminal/tui/pages/followUpQueuePage.d.ts +34 -0
- package/dist/sdk/terminal/tui/pages/followUpQueuePage.js +130 -0
- package/dist/sdk/terminal/tui/pages/hubPage.d.ts +52 -0
- package/dist/sdk/terminal/tui/pages/hubPage.js +292 -0
- package/dist/sdk/terminal/tui/pages/logPage.d.ts +38 -0
- package/dist/sdk/terminal/tui/pages/logPage.js +189 -0
- package/dist/sdk/terminal/tui/pages/permissionsPage.d.ts +44 -0
- package/dist/sdk/terminal/tui/pages/permissionsPage.js +124 -0
- package/dist/sdk/terminal/tui/pages/pluginsPage.d.ts +65 -0
- package/dist/sdk/terminal/tui/pages/pluginsPage.js +519 -0
- package/dist/sdk/terminal/tui/pages/remoteControlPage.d.ts +32 -0
- package/dist/sdk/terminal/tui/pages/remoteControlPage.js +170 -0
- package/dist/sdk/terminal/tui/pages/settingsPage.d.ts +63 -0
- package/dist/sdk/terminal/tui/pages/settingsPage.js +103 -0
- package/dist/sdk/terminal/tui/pages/subagentsPage.d.ts +24 -0
- package/dist/sdk/terminal/tui/pages/subagentsPage.js +155 -0
- package/dist/sdk/terminal/tui/pages/textPage.d.ts +17 -0
- package/dist/sdk/terminal/tui/pages/textPage.js +52 -0
- package/dist/sdk/terminal/tui/pages/trajectoryPage.d.ts +66 -0
- package/dist/sdk/terminal/tui/pages/trajectoryPage.js +490 -0
- package/dist/sdk/terminal/tui/pages/usagePage.d.ts +45 -0
- package/dist/sdk/terminal/tui/pages/usagePage.js +397 -0
- package/dist/sdk/terminal/tui/pages/worktreesPage.d.ts +72 -0
- package/dist/sdk/terminal/tui/pages/worktreesPage.js +203 -0
- package/dist/sdk/terminal/tui/piAdapter.d.ts +17 -0
- package/dist/sdk/terminal/tui/piAdapter.js +46 -0
- package/dist/sdk/terminal/tui/planMode.d.ts +2 -0
- package/dist/sdk/terminal/tui/planMode.js +2 -0
- package/dist/sdk/terminal/tui/pluginCommands.d.ts +16 -0
- package/dist/sdk/terminal/tui/pluginCommands.js +41 -0
- package/dist/sdk/terminal/tui/qr.d.ts +4 -0
- package/dist/sdk/terminal/tui/qr.js +35 -0
- package/dist/sdk/terminal/tui/questionPicker.d.ts +20 -0
- package/dist/sdk/terminal/tui/questionPicker.js +150 -0
- package/dist/sdk/terminal/tui/questions.d.ts +21 -0
- package/dist/sdk/terminal/tui/questions.js +42 -0
- package/dist/sdk/terminal/tui/runtime.d.ts +117 -0
- package/dist/sdk/terminal/tui/runtime.js +544 -0
- package/dist/sdk/terminal/tui/search.d.ts +22 -0
- package/dist/sdk/terminal/tui/search.js +61 -0
- package/dist/sdk/terminal/tui/selection.d.ts +16 -0
- package/dist/sdk/terminal/tui/selection.js +16 -0
- package/dist/sdk/terminal/tui/sessionPicker.d.ts +40 -0
- package/dist/sdk/terminal/tui/sessionPicker.js +141 -0
- package/dist/sdk/terminal/tui/sessionUi.d.ts +3 -0
- package/dist/sdk/terminal/tui/sessionUi.js +30 -0
- package/dist/sdk/terminal/tui/settingsModel.d.ts +14 -0
- package/dist/sdk/terminal/tui/settingsModel.js +195 -0
- package/dist/sdk/terminal/tui/sideQuestion.d.ts +57 -0
- package/dist/sdk/terminal/tui/sideQuestion.js +241 -0
- package/dist/sdk/terminal/tui/skillInvocation.d.ts +28 -0
- package/dist/sdk/terminal/tui/skillInvocation.js +63 -0
- package/dist/sdk/terminal/tui/status.d.ts +18 -0
- package/dist/sdk/terminal/tui/status.js +67 -0
- package/dist/sdk/terminal/tui/theme.d.ts +54 -0
- package/dist/sdk/terminal/tui/theme.js +185 -0
- package/dist/sdk/terminal/tui/thinkingLevels.d.ts +11 -0
- package/dist/sdk/terminal/tui/thinkingLevels.js +31 -0
- package/dist/sdk/terminal/tui/treeModel.d.ts +79 -0
- package/dist/sdk/terminal/tui/treeModel.js +483 -0
- package/dist/sdk/terminal/tui/treePicker.d.ts +49 -0
- package/dist/sdk/terminal/tui/treePicker.js +251 -0
- package/dist/sdk/terminal/tui/ui.d.ts +49 -0
- package/dist/sdk/terminal/tui/ui.js +149 -0
- package/dist/sdk/terminal/tui/variantCommands.d.ts +32 -0
- package/dist/sdk/terminal/tui/variantCommands.js +359 -0
- package/dist/sdk/terminal/tui/workingStatus.d.ts +9 -0
- package/dist/sdk/terminal/tui/workingStatus.js +229 -0
- package/dist/sdk/terminal/variantControl.d.ts +24 -0
- package/dist/sdk/terminal/variantControl.js +145 -0
- package/dist/sdk/tools/askUser.d.ts +6 -0
- package/dist/sdk/tools/askUser.js +92 -0
- package/dist/sdk/tools/defaultSkills.d.ts +23 -0
- package/dist/sdk/tools/defaultSkills.js +46 -0
- package/dist/sdk/tools/definitions.d.ts +32 -0
- package/dist/sdk/tools/definitions.js +133 -0
- package/dist/sdk/tools/dispatch.d.ts +16 -0
- package/dist/sdk/tools/dispatch.js +92 -0
- package/dist/sdk/tools/getCapabilities.d.ts +31 -0
- package/dist/sdk/tools/getCapabilities.js +34 -0
- package/dist/sdk/tools/harnessTools.d.ts +8 -0
- package/dist/sdk/tools/harnessTools.js +20 -0
- package/dist/sdk/tools/sessionName.d.ts +16 -0
- package/dist/sdk/tools/sessionName.js +78 -0
- package/dist/sdk/tools/spawnSubagent.d.ts +4 -0
- package/dist/sdk/tools/spawnSubagent.js +63 -0
- package/dist/sdk/tools/todo.d.ts +15 -0
- package/dist/sdk/tools/todo.js +66 -0
- package/dist/sdk/tools/types.d.ts +48 -0
- package/dist/sdk/tools/types.js +1 -0
- package/dist/sdk/usage/analytics.d.ts +20 -0
- package/dist/sdk/usage/analytics.js +151 -0
- package/dist/sdk/usage/ledger.d.ts +38 -0
- package/dist/sdk/usage/ledger.js +142 -0
- package/dist/sdk/usage/limits/adapters.d.ts +11 -0
- package/dist/sdk/usage/limits/adapters.js +349 -0
- package/dist/sdk/usage/limits/capture.d.ts +8 -0
- package/dist/sdk/usage/limits/capture.js +47 -0
- package/dist/sdk/usage/limits/http.d.ts +12 -0
- package/dist/sdk/usage/limits/http.js +51 -0
- package/dist/sdk/usage/limits/normalize.d.ts +15 -0
- package/dist/sdk/usage/limits/normalize.js +211 -0
- package/dist/sdk/usage/limits/service.d.ts +30 -0
- package/dist/sdk/usage/limits/service.js +176 -0
- package/dist/sdk/usage/limits/types.d.ts +65 -0
- package/dist/sdk/usage/limits/types.js +1 -0
- package/dist/sdk/usage/serverMethods.d.ts +3 -0
- package/dist/sdk/usage/serverMethods.js +22 -0
- package/dist/sdk/usage/service.d.ts +32 -0
- package/dist/sdk/usage/service.js +66 -0
- package/dist/sdk/usage/settings.d.ts +7 -0
- package/dist/sdk/usage/settings.js +28 -0
- package/dist/sdk/usage/types.d.ts +60 -0
- package/dist/sdk/usage/types.js +4 -0
- package/dist/sdk/variant/components.d.ts +34 -0
- package/dist/sdk/variant/components.js +230 -0
- package/dist/sdk/variant/materialise.d.ts +66 -0
- package/dist/sdk/variant/materialise.js +81 -0
- package/dist/sdk/variant/migrate.d.ts +4 -0
- package/dist/sdk/variant/migrate.js +41 -0
- package/dist/sdk/variant/seed.d.ts +20 -0
- package/dist/sdk/variant/seed.js +116 -0
- package/dist/sdk/variant/store.d.ts +114 -0
- package/dist/sdk/variant/store.js +256 -0
- package/dist/sdk/variant/surface.d.ts +56 -0
- package/dist/sdk/variant/surface.js +81 -0
- package/dist/sdk/variant/trust.d.ts +27 -0
- package/dist/sdk/variant/trust.js +64 -0
- package/dist/sdk/variant/variant.d.ts +71 -0
- package/dist/sdk/variant/variant.js +331 -0
- package/dist/sdk/web/markdown.d.ts +10 -0
- package/dist/sdk/web/markdown.js +66 -0
- package/dist/sdk/web/part.d.ts +10 -0
- package/dist/sdk/web/part.js +6 -0
- package/dist/sdk/web/safeRequest.d.ts +34 -0
- package/dist/sdk/web/safeRequest.js +175 -0
- package/dist/sdk/web/search.d.ts +53 -0
- package/dist/sdk/web/search.js +168 -0
- package/dist/sdk/web/serverMethods.d.ts +3 -0
- package/dist/sdk/web/serverMethods.js +7 -0
- package/dist/sdk/web/text.d.ts +2 -0
- package/dist/sdk/web/text.js +7 -0
- package/dist/sdk/web/tools.d.ts +22 -0
- package/dist/sdk/web/tools.js +195 -0
- package/dist/sdk/web/turndown-plugin-gfm.d.ts +4 -0
- package/dist/sdk/wiki/notes.d.ts +68 -0
- package/dist/sdk/wiki/notes.js +297 -0
- package/dist/sdk/wiki/serverMethods.d.ts +3 -0
- package/dist/sdk/wiki/serverMethods.js +26 -0
- package/dist/sdk/worktrees/cli.d.ts +11 -0
- package/dist/sdk/worktrees/cli.js +146 -0
- package/dist/sdk/worktrees/copy.d.ts +9 -0
- package/dist/sdk/worktrees/copy.js +111 -0
- package/dist/sdk/worktrees/git.d.ts +18 -0
- package/dist/sdk/worktrees/git.js +89 -0
- package/dist/sdk/worktrees/serverMethods.d.ts +3 -0
- package/dist/sdk/worktrees/serverMethods.js +30 -0
- package/dist/sdk/worktrees/service.d.ts +73 -0
- package/dist/sdk/worktrees/service.js +483 -0
- package/dist/sdk/worktrees/setup.d.ts +23 -0
- package/dist/sdk/worktrees/setup.js +65 -0
- package/dist/sdk/worktrees/snapshot.d.ts +16 -0
- package/dist/sdk/worktrees/snapshot.js +83 -0
- package/dist/sdk/worktrees/types.d.ts +91 -0
- package/dist/sdk/worktrees/types.js +1 -0
- package/dist/sdk/world/actions.d.ts +23 -0
- package/dist/sdk/world/actions.js +31 -0
- package/dist/sdk/world/cli.d.ts +12 -0
- package/dist/sdk/world/cli.js +166 -0
- package/dist/sdk/world/images.d.ts +20 -0
- package/dist/sdk/world/images.js +48 -0
- package/dist/sdk/world/untrusted.d.ts +12 -0
- package/dist/sdk/world/untrusted.js +20 -0
- package/dist/sdk/world/world.d.ts +75 -0
- package/dist/sdk/world/world.js +117 -0
- package/dist/terminal-opentui.js +30986 -0
- package/dist/terminal-pi.js +3008 -610
- package/docs/README.md +45 -1
- package/docs/architecture/00-overview.md +171 -0
- package/docs/architecture/01-extension-points.md +78 -0
- package/docs/architecture/02-sessions-and-runs.md +505 -0
- package/docs/architecture/03-variants.md +122 -0
- package/docs/architecture/04-prompt.md +277 -0
- package/docs/architecture/05-refinement.md +134 -0
- package/docs/architecture/06-plugins-and-capabilities.md +208 -0
- package/docs/architecture/07-tools-and-gate.md +245 -0
- package/docs/architecture/08-memory-and-history.md +100 -0
- package/docs/architecture/09-accounts-and-connectors.md +153 -0
- package/docs/architecture/10-server-protocol.md +403 -0
- package/docs/architecture/11-terminal.md +555 -0
- package/docs/architecture/12-storage.md +118 -0
- package/docs/architecture/13-world-tools.md +114 -0
- package/docs/architecture/14-surfaces-and-parity.md +151 -0
- package/docs/architecture/15-remote-control.md +120 -0
- package/docs/architecture/README.md +143 -0
- package/docs/architecture/proposals/PROP-0001-reporting-section.md +106 -0
- package/docs/architecture/proposals/PROP-0002-retain-rollout-workspaces.md +104 -0
- package/docs/architecture/proposals/PROP-0003-executor-settings.md +81 -0
- package/docs/architecture/proposals/PROP-0004-flexible-reporting-guidance.md +71 -0
- package/docs/architecture/proposals/PROP-0005-xharness-cli-name.md +78 -0
- package/docs/architecture/proposals/PROP-0006-run-checklist.md +72 -0
- package/docs/architecture/proposals/PROP-0007-run-continuation.md +80 -0
- package/docs/architecture/proposals/PROP-0008-lessons-from-runs.md +80 -0
- package/docs/architecture/proposals/PROP-0009-foundation-and-variants.md +78 -0
- package/docs/architecture/proposals/PROP-0010-session-names.md +73 -0
- package/docs/architecture/proposals/PROP-0011-doctor.md +63 -0
- package/docs/architecture/proposals/PROP-0012-release-baseline.md +56 -0
- package/docs/architecture/proposals/PROP-0013-resource-browser.md +58 -0
- package/docs/architecture/proposals/PROP-0014-fullscreen-browser-tabs.md +58 -0
- package/docs/architecture/proposals/PROP-0015-one-capability-surface.md +88 -0
- package/docs/architecture/proposals/PROP-0016-managed-worktrees.md +156 -0
- package/docs/architecture/proposals/PROP-0017-page-annotations.md +131 -0
- package/docs/architecture/proposals/PROP-0018-annotation-queue-and-app-targets.md +183 -0
- package/docs/architecture/proposals/PROP-0019-contextual-side-questions.md +122 -0
- package/docs/architecture/proposals/PROP-0020-builtin-feature-plugins.md +105 -0
- package/docs/architecture/proposals/PROP-0021-command-namespaces-and-duplicates.md +99 -0
- package/docs/architecture/proposals/PROP-0022-plan-only-questions.md +102 -0
- package/docs/architecture/proposals/PROP-0023-xagent-cli-name.md +61 -0
- package/docs/architecture/proposals/PROP-0024-question-sketch-previews.md +130 -0
- package/docs/architecture/proposals/PROP-0025-contextual-question-wireframes.md +49 -0
- package/docs/architecture/proposals/PROP-0026-connected-sketch-display.md +96 -0
- package/docs/architecture/proposals/PROP-0027-xingular-agent-product-identity.md +60 -0
- package/docs/architecture/proposals/PROP-0028-normalize-question-wireframes.md +55 -0
- package/docs/architecture/proposals/PROP-0029-agent-profiles.md +124 -0
- package/docs/architecture/proposals/PROP-0030-subagent-title.md +86 -0
- package/docs/architecture/proposals/PROP-0031-plugin-command-owner-namespaces.md +54 -0
- package/docs/architecture/proposals/PROP-0032-planning-quality.md +196 -0
- package/docs/architecture/proposals/PROP-0033-compaction-plan-checkpoints.md +75 -0
- package/docs/architecture/proposals/PROP-0034-conversation-fast-mode.md +120 -0
- package/docs/architecture/proposals/PROP-0035-retain-subagent-status.md +47 -0
- package/docs/architecture/proposals/PROP-0036-first-class-harness-commands.md +59 -0
- package/docs/architecture/proposals/PROP-0037-workspace-write-boundary.md +63 -0
- package/docs/architecture/proposals/PROP-0038-annotate-open-shadow-roots.md +73 -0
- package/docs/architecture/proposals/PROP-0039-workspace-boundary-hardening.md +139 -0
- package/docs/architecture/proposals/PROP-0040-one-launch-path.md +87 -0
- package/docs/architecture/proposals/PROP-0041-bounded-work-slices.md +260 -0
- package/docs/architecture/proposals/PROP-0042-usage-and-provider-limits.md +127 -0
- package/docs/architecture/proposals/PROP-0043-read-only-plan-bash.md +74 -0
- package/docs/architecture/proposals/PROP-0044-work-slice-defaults.md +93 -0
- package/docs/architecture/proposals/PROP-0045-rename-checklist-to-todo.md +132 -0
- package/docs/architecture/proposals/PROP-0046-progress-aware-stall-guards.md +82 -0
- package/docs/architecture/proposals/PROP-0047-plugins-hub-separation.md +122 -0
- package/docs/architecture/proposals/PROP-0048-simple-annotate.md +85 -0
- package/docs/architecture/proposals/PROP-0049-context-attribution.md +415 -0
- package/docs/architecture/proposals/PROP-0050-run-stop-codes-and-refusals.md +30 -0
- package/docs/architecture/proposals/PROP-0051-unfinished-run-handoff.md +110 -0
- package/docs/architecture/proposals/PROP-0052-terminal-refine-and-variant-switch.md +111 -0
- package/docs/architecture/proposals/README.md +123 -0
- package/docs/decisions/ADR-0001-owned-terminal.md +10 -3
- package/docs/decisions/ADR-0003-shared-asynchronous-subagents.md +3 -1
- package/docs/decisions/ADR-0004-fullscreen-terminal-layout.md +3 -2
- package/docs/decisions/ADR-0006-opentui-only-terminal.md +47 -0
- package/docs/decisions/ADR-0007-reporting-section.md +33 -0
- package/docs/decisions/ADR-0008-flexible-reporting-guidance.md +41 -0
- package/docs/decisions/ADR-0009-xharness-command.md +39 -0
- package/docs/decisions/ADR-0010-lessons-in-the-wiki.md +31 -0
- package/docs/decisions/ADR-0011-foundation-and-variants.md +28 -0
- package/docs/decisions/ADR-0012-native-session-names.md +34 -0
- package/docs/decisions/ADR-0013-doctor.md +27 -0
- package/docs/decisions/ADR-0014-public-release-baseline.md +22 -0
- package/docs/decisions/ADR-0015-resource-browser.md +28 -0
- package/docs/decisions/ADR-0016-fullscreen-browser-tabs.md +31 -0
- package/docs/decisions/ADR-0017-one-capability-surface.md +34 -0
- package/docs/decisions/ADR-0018-builtin-feature-plugins.md +35 -0
- package/docs/decisions/ADR-0019-managed-git-worktrees.md +31 -0
- package/docs/decisions/ADR-0020-page-annotations.md +37 -0
- package/docs/decisions/ADR-0021-required-command-namespaces.md +40 -0
- package/docs/decisions/ADR-0022-plan-only-question-tools.md +34 -0
- package/docs/decisions/ADR-0023-contextual-side-question-runs.md +35 -0
- package/docs/decisions/ADR-0024-xagent-command.md +40 -0
- package/docs/decisions/ADR-0025-question-choice-sketches.md +49 -0
- package/docs/decisions/ADR-0026-contextual-question-wireframes.md +58 -0
- package/docs/decisions/ADR-0027-connected-sketch-display.md +62 -0
- package/docs/decisions/ADR-0028-xingular-agent-product-identity.md +56 -0
- package/docs/decisions/ADR-0029-normalized-question-wireframe-borders.md +33 -0
- package/docs/decisions/ADR-0030-agent-profiles.md +43 -0
- package/docs/decisions/ADR-0031-plugin-command-owner-namespaces.md +37 -0
- package/docs/decisions/ADR-0032-compaction-run-checkpoints.md +35 -0
- package/docs/decisions/ADR-0033-plan-mode-research-delegation.md +47 -0
- package/docs/decisions/ADR-0034-first-class-harness-terminal-commands.md +25 -0
- package/docs/decisions/ADR-0035-one-launch-path.md +40 -0
- package/docs/decisions/ADR-0036-workspace-write-operation-boundary.md +54 -0
- package/docs/decisions/ADR-0037-usage-ledger-and-provider-limits.md +44 -0
- package/docs/decisions/ADR-0038-plan-bash-os-read-only.md +29 -0
- package/docs/decisions/ADR-0039-progress-aware-stall-guards.md +43 -0
- package/docs/decisions/ADR-0040-architecture-change-workflow.md +31 -0
- package/docs/decisions/ADR-0041-plugins-hub-separation.md +41 -0
- package/docs/decisions/ADR-0042-windows-shell-without-sandbox.md +40 -0
- package/docs/decisions/ADR-0043-parents-continue-stopped-subagents.md +49 -0
- package/docs/decisions/ADR-0044-annotations-pending-or-sent.md +24 -0
- package/docs/decisions/ADR-0045-default-plugin-authoring-skill.md +9 -0
- package/docs/decisions/ADR-0046-hash-bound-plugin-proposals.md +20 -0
- package/docs/decisions/ADR-0047-links-open-with-the-os-handler.md +47 -0
- package/docs/decisions/ADR-0048-required-skills-from-a-message.md +42 -0
- package/docs/decisions/ADR-0050-approved-window-screenshots.md +19 -0
- package/docs/decisions/ADR-0051-terminal-decision-wait.md +10 -0
- package/docs/decisions/ADR-0052-per-profile-subagent-budgets.md +25 -0
- package/docs/decisions/ADR-0053-no-repeated-work-guard.md +45 -0
- package/docs/decisions/ADR-0054-terminal-reply-heartbeat-and-stall.md +52 -0
- package/docs/decisions/ADR-0055-plan-output-repair.md +51 -0
- package/docs/decisions/ADR-0056-remote-control.md +53 -0
- package/docs/decisions/ADR-0057-structured-plan-outcomes.md +39 -0
- package/docs/decisions/ADR-0058-ask-user-only-plan-clarification.md +36 -0
- package/docs/decisions/ADR-0059-run-diagnostic-evidence.md +35 -0
- package/docs/decisions/ADR-0060-approvals-are-controls.md +40 -0
- package/docs/decisions/ADR-0061-strict-plugin-command-namespaces.md +41 -0
- package/docs/decisions/ADR-0062-shared-account-state.md +67 -0
- package/docs/decisions/ADR-0063-unfinished-work-handoffs.md +34 -0
- package/docs/decisions/ADR-0064-account-model-fallback-on-resume.md +79 -0
- package/docs/decisions/ADR-0065-variant-switch-at-turn-boundaries.md +31 -0
- package/docs/decisions/ADR-0066-guided-refinement-from-turn-snapshots.md +37 -0
- package/docs/decisions/ADR-0067-cache-stable-compaction-checkpoint.md +54 -0
- package/docs/decisions/ADR-0068-scope-and-completion-report.md +60 -0
- package/docs/decisions/ADR-0069-stop-gate-and-finish.md +136 -0
- package/docs/decisions/ADR-0070-terminal-slice-continuation.md +49 -0
- package/docs/decisions/ADR-0071-completion-check.md +104 -0
- package/docs/decisions/ADR-0072-codex-prompts-and-goal.md +108 -0
- package/docs/decisions/ADR-0073-large-reporting-prompt.md +89 -0
- package/docs/decisions/ADR-0074-report-content-not-report-blocks.md +90 -0
- package/docs/decisions/ADR-0075-no-todo-gate.md +84 -0
- package/docs/decisions/ADR-0076-codex-final-answer-verbatim.md +98 -0
- package/docs/decisions/ADR-0077-plan-runs-may-conclude-no-plan-needed.md +120 -0
- package/docs/decisions/ADR-0078-child-aware-stall-watch.md +46 -0
- package/docs/decisions/ADR-0079-phase-led-reporting-guidance.md +72 -0
- package/docs/decisions/ADR-0080-fixed-width-question-sketch-canvas.md +50 -0
- package/docs/decisions/ADR-0081-no-work-slice-budget-by-default.md +36 -0
- package/docs/decisions/ADR-0082-connected-brave-browser.md +72 -0
- package/docs/decisions/ADR-0083-one-live-session-runtime.md +256 -0
- package/docs/doctor.md +95 -0
- package/docs/experiments/EXP-0001-terminal-input-latency/plan.md +81 -0
- package/docs/experiments/EXP-0001-terminal-input-latency/results.md +46 -0
- package/docs/experiments/EXP-0002-opentui-typing-latency/plan.md +70 -0
- package/docs/experiments/EXP-0002-opentui-typing-latency/results.md +92 -0
- package/docs/experiments/EXP-0003-performance-audit/data/session-runtime-replication.json +420 -0
- package/docs/experiments/EXP-0003-performance-audit/data/session-runtime.json +420 -0
- package/docs/experiments/EXP-0003-performance-audit/data/terminal-compact.json +376 -0
- package/docs/experiments/EXP-0003-performance-audit/data/terminal-history.json +422 -0
- package/docs/experiments/EXP-0003-performance-audit/data/terminal-question.json +95 -0
- package/docs/experiments/EXP-0003-performance-audit/data/terminal-wide.json +1036 -0
- package/docs/experiments/EXP-0003-performance-audit/plan.md +109 -0
- package/docs/experiments/EXP-0003-performance-audit/results.md +151 -0
- package/docs/features/README.md +46 -0
- package/docs/features/automations/README.md +41 -0
- package/docs/features/cores/README.md +39 -0
- package/docs/features/google-harness2/README.md +52 -0
- package/docs/features/integrations/README.md +40 -0
- package/docs/features/interfaces/README.md +29 -0
- package/docs/features/memory/README.md +28 -0
- package/docs/future-work.md +48 -0
- package/docs/handoff-2026-10-25-app-parity-and-solo-tabs.md +202 -0
- package/docs/parity.md +158 -0
- package/docs/releases/1.0.0.md +40 -0
- package/docs/releases/1.1.1.md +28 -0
- package/docs/releases/1.2.0.md +49 -0
- package/docs/releases/1.3.0.md +21 -0
- package/docs/releases/1.3.1-unstable.1.md +8 -0
- package/docs/releases/1.3.1-unstable.2.md +11 -0
- package/docs/releases/1.3.1-unstable.3.md +54 -0
- package/docs/releases/1.3.1-unstable.4.md +56 -0
- package/docs/releases/1.3.1-unstable.5.md +53 -0
- package/docs/releases/1.3.1-unstable.6.md +31 -0
- package/docs/releases/1.3.1-unstable.7.md +17 -0
- package/docs/releases/1.3.1-unstable.8.md +19 -0
- package/docs/releases/1.3.1-unstable.9.md +54 -0
- package/docs/releases/1.4.0-unstable.md +25 -0
- package/docs/releases/1.5.0-unstable.md +32 -0
- package/docs/releases/1.5.1-unstable.md +24 -0
- package/docs/releases/1.6.0-unstable.md +59 -0
- package/docs/releases/2.0.1-unstable.md +63 -0
- package/docs/releases/4.0.0.md +47 -0
- package/docs/releases/README.md +49 -0
- package/docs/study/00-index.md +112 -0
- package/docs/study/STUDY-0003-long-horizon-runs.md +210 -0
- package/docs/study/STUDY-0004-turn-end-controls.md +130 -0
- package/docs/study/STUDY-0005-skill-installation-guidance.md +146 -0
- package/docs/study/STUDY-0006-reporting-prompts.md +119 -0
- package/docs/study/STUDY-0007-claude-code-prompt.md +162 -0
- package/docs/study/STUDY-0008-browser-control.md +281 -0
- package/docs/study/STUDY-0009-claude-code-reporting.md +205 -0
- package/docs/study/arms/00-matrix.md +20 -0
- package/docs/study/arms/01-system-prompt.md +211 -0
- package/docs/study/arms/02-tools.md +79 -0
- package/docs/study/arms/03-subagents.md +90 -0
- package/docs/study/arms/04-skills.md +81 -0
- package/docs/study/arms/05-context-management.md +90 -0
- package/docs/study/arms/06-memory.md +90 -0
- package/docs/study/arms/07-governance.md +71 -0
- package/docs/study/arms/08-execution.md +69 -0
- package/docs/study/arms/09-observability.md +60 -0
- package/docs/study/arms/10-refinement.md +110 -0
- package/docs/study/autonomous-engineering-sources.md +277 -0
- package/docs/study/autonomy-sources.md +147 -0
- package/docs/study/btw-comparison.md +37 -0
- package/docs/study/feature-gap-review.md +42 -0
- package/docs/study/insights.md +123 -0
- package/docs/study/proactive-autonomy.md +408 -0
- package/docs/study/roadmap.md +72 -0
- package/docs/study/sources/claude-code.md +56 -0
- package/docs/study/sources/deepseek-harness.md +102 -0
- package/docs/study/sources/harness2.md +50 -0
- package/docs/study/sources/kimi-cli.md +42 -0
- package/docs/study/sources/omp.md +93 -0
- package/docs/study/sources/opencode.md +43 -0
- package/docs/study/sources/openhands.md +46 -0
- package/docs/study/sources/smolagents.md +40 -0
- package/docs/study/sources/swe-agent.md +34 -0
- package/docs/study/tui-resource-browser.md +78 -0
- package/docs/system-prompt-design.md +196 -0
- package/docs/terminal-tui.md +887 -109
- package/package.json +46 -13
- package/src/accounts/accounts.test.ts +0 -419
- package/src/accounts/accounts.ts +0 -760
- package/src/accounts/env.test.ts +0 -95
- package/src/accounts/env.ts +0 -338
- package/src/accounts/secrets.ts +0 -50
- package/src/accounts/store.ts +0 -338
- package/src/capabilities/api.ts +0 -75
- package/src/capabilities/runSnapshot.ts +0 -59
- package/src/capabilities/types.ts +0 -34
- package/src/cli.ts +0 -118
- package/src/core/bus.test.ts +0 -22
- package/src/core/bus.ts +0 -49
- package/src/core/changes.ts +0 -33
- package/src/core/env.ts +0 -27
- package/src/core/errors.ts +0 -32
- package/src/core/frontmatter.ts +0 -47
- package/src/core/fs.test.ts +0 -38
- package/src/core/fs.ts +0 -92
- package/src/core/index.ts +0 -193
- package/src/core/path.test.ts +0 -14
- package/src/core/path.ts +0 -79
- package/src/core/projects.ts +0 -90
- package/src/core/text.ts +0 -39
- package/src/harness.ts +0 -322
- package/src/hub/catalog.json +0 -123
- package/src/hub/cli.ts +0 -59
- package/src/hub/hub.test.ts +0 -205
- package/src/hub/hub.ts +0 -256
- package/src/hub/schema.ts +0 -81
- package/src/index.ts +0 -80
- package/src/mcp/connections.ts +0 -641
- package/src/mcp/manager.ts +0 -130
- package/src/mcp/oauth.ts +0 -195
- package/src/mcp/scopeMigration.test.ts +0 -79
- package/src/mcp/scopeMigration.ts +0 -204
- package/src/mcp/service.test.ts +0 -422
- package/src/mcp/service.ts +0 -560
- package/src/mcp/types.ts +0 -118
- package/src/memory/api.test.ts +0 -82
- package/src/memory/api.ts +0 -303
- package/src/memory/blocks.test.ts +0 -78
- package/src/memory/blocks.ts +0 -408
- package/src/memory/caller.ts +0 -69
- package/src/memory/curation.test.ts +0 -206
- package/src/memory/curation.ts +0 -64
- package/src/memory/dispatch.ts +0 -64
- package/src/memory/facts.test.ts +0 -41
- package/src/memory/facts.ts +0 -248
- package/src/memory/graph.ts +0 -103
- package/src/memory/health.test.ts +0 -130
- package/src/memory/health.ts +0 -74
- package/src/memory/maintainer.ts +0 -272
- package/src/memory/maintenance.test.ts +0 -192
- package/src/memory/maintenance.ts +0 -679
- package/src/memory/migrate.ts +0 -79
- package/src/memory/operations.ts +0 -150
- package/src/memory/proposals.test.ts +0 -168
- package/src/memory/proposals.ts +0 -584
- package/src/memory/recall.test.ts +0 -115
- package/src/memory/recall.ts +0 -279
- package/src/memory/references.ts +0 -77
- package/src/memory/runContext.ts +0 -93
- package/src/memory/secrets.ts +0 -6
- package/src/memory/store.test.ts +0 -66
- package/src/memory/store.ts +0 -385
- package/src/memory/trajectory.test.ts +0 -178
- package/src/memory/trajectory.ts +0 -220
- package/src/memory/wiki.test.ts +0 -47
- package/src/memory/wiki.ts +0 -423
- package/src/memory/wikiIndex.test.ts +0 -88
- package/src/memory/wikiIndex.ts +0 -117
- package/src/plugins/api.ts +0 -181
- package/src/plugins/attachments.test.ts +0 -84
- package/src/plugins/attachments.ts +0 -141
- package/src/plugins/builtin.ts +0 -84
- package/src/plugins/catalogue.test.ts +0 -254
- package/src/plugins/catalogue.ts +0 -251
- package/src/plugins/cli.ts +0 -184
- package/src/plugins/discover.ts +0 -151
- package/src/plugins/firstParty.test.ts +0 -143
- package/src/plugins/firstParty.ts +0 -129
- package/src/plugins/hooks.test.ts +0 -250
- package/src/plugins/hooks.ts +0 -239
- package/src/plugins/identity.ts +0 -37
- package/src/plugins/install.test.ts +0 -107
- package/src/plugins/install.ts +0 -106
- package/src/plugins/inventory.ts +0 -123
- package/src/plugins/manifest.ts +0 -76
- package/src/plugins/plugins.test.ts +0 -205
- package/src/plugins/plugins.ts +0 -189
- package/src/plugins/proposal.ts +0 -121
- package/src/plugins/runtime.test.ts +0 -40
- package/src/plugins/runtime.ts +0 -82
- package/src/plugins/trust.ts +0 -142
- package/src/plugins/types.ts +0 -149
- package/src/prompt/compile.test.ts +0 -261
- package/src/prompt/compile.ts +0 -732
- package/src/server/methods.ts +0 -355
- package/src/server/remote.ts +0 -77
- package/src/server/rpc.ts +0 -116
- package/src/server/serve.ts +0 -28
- package/src/server/server.test.ts +0 -193
- package/src/sessions/approvals.test.ts +0 -49
- package/src/sessions/approvals.ts +0 -140
- package/src/sessions/contracts.ts +0 -336
- package/src/sessions/conversation.test.ts +0 -233
- package/src/sessions/extensionSession.test.ts +0 -74
- package/src/sessions/extensionUi.test.ts +0 -65
- package/src/sessions/extensionUi.ts +0 -102
- package/src/sessions/history.ts +0 -51
- package/src/sessions/lineageJoin.ts +0 -75
- package/src/sessions/policy.ts +0 -36
- package/src/sessions/pricing.ts +0 -60
- package/src/sessions/questionBatches.test.ts +0 -110
- package/src/sessions/reasoningSummaries.ts +0 -59
- package/src/sessions/registry.ts +0 -412
- package/src/sessions/runIndex.ts +0 -99
- package/src/sessions/runStore.test.ts +0 -152
- package/src/sessions/runStore.ts +0 -346
- package/src/sessions/runner.ts +0 -610
- package/src/sessions/runtimeResources.test.ts +0 -61
- package/src/sessions/sessions.test.ts +0 -588
- package/src/sessions/sessions.ts +0 -331
- package/src/sessions/subagentService.test.ts +0 -159
- package/src/sessions/subagentService.ts +0 -236
- package/src/sessions/subagents.ts +0 -97
- package/src/skills/registry.test.ts +0 -104
- package/src/skills/registry.ts +0 -413
- package/src/terminal/accountsMenu.test.ts +0 -225
- package/src/terminal/accountsMenu.ts +0 -382
- package/src/terminal/cli.ts +0 -149
- package/src/terminal/client.ts +0 -74
- package/src/terminal/control.test.ts +0 -23
- package/src/terminal/control.ts +0 -23
- package/src/terminal/controller.ts +0 -354
- package/src/terminal/hubMenu.ts +0 -24
- package/src/terminal/launch.test.ts +0 -25
- package/src/terminal/launch.ts +0 -48
- package/src/terminal/piExtension.lifecycle.test.ts +0 -55
- package/src/terminal/piExtension.ts +0 -295
- package/src/terminal/pluginControl.test.ts +0 -146
- package/src/terminal/pluginMenu.ts +0 -112
- package/src/terminal/socket.test.ts +0 -94
- package/src/terminal/socket.ts +0 -256
- package/src/terminal/standalone.test.ts +0 -167
- package/src/terminal/standalone.ts +0 -165
- package/src/terminal/terminal.test.ts +0 -534
- package/src/terminal/terminals.ts +0 -661
- package/src/terminal/trajectory.test.ts +0 -66
- package/src/terminal/trajectory.ts +0 -44
- package/src/terminal/tui/application.test.ts +0 -290
- package/src/terminal/tui/application.ts +0 -653
- package/src/terminal/tui/commands.test.ts +0 -278
- package/src/terminal/tui/commands.ts +0 -443
- package/src/terminal/tui/dialogs.ts +0 -301
- package/src/terminal/tui/editor.test.ts +0 -113
- package/src/terminal/tui/editor.ts +0 -109
- package/src/terminal/tui/keybindings.test.ts +0 -30
- package/src/terminal/tui/keybindings.ts +0 -59
- package/src/terminal/tui/piAdapter.ts +0 -62
- package/src/terminal/tui/planMode.test.ts +0 -10
- package/src/terminal/tui/planMode.ts +0 -12
- package/src/terminal/tui/presentation.test.ts +0 -79
- package/src/terminal/tui/questions.test.ts +0 -41
- package/src/terminal/tui/questions.ts +0 -47
- package/src/terminal/tui/runtime.socket.test.ts +0 -178
- package/src/terminal/tui/runtime.test.ts +0 -225
- package/src/terminal/tui/runtime.ts +0 -403
- package/src/terminal/tui/screen.test.ts +0 -143
- package/src/terminal/tui/screen.ts +0 -121
- package/src/terminal/tui/sessionUi.ts +0 -24
- package/src/terminal/tui/settings.test.ts +0 -150
- package/src/terminal/tui/settings.ts +0 -188
- package/src/terminal/tui/skillInvocation.test.ts +0 -71
- package/src/terminal/tui/skillInvocation.ts +0 -51
- package/src/terminal/tui/status.test.ts +0 -48
- package/src/terminal/tui/status.ts +0 -82
- package/src/terminal/tui/theme.ts +0 -185
- package/src/terminal/tui/tools.test.ts +0 -145
- package/src/terminal/tui/tools.ts +0 -142
- package/src/terminal/tui/trajectoryPanel.test.ts +0 -99
- package/src/terminal/tui/trajectoryPanel.ts +0 -226
- package/src/terminal/tui/transcript.test.ts +0 -39
- package/src/terminal/tui/transcript.ts +0 -135
- package/src/terminal/tui/ui.test.ts +0 -313
- package/src/terminal/tui/ui.ts +0 -166
- package/src/terminal/tui/welcome.ts +0 -102
- package/src/terminal/tui/workingStatus.test.ts +0 -44
- package/src/terminal/tui/workingStatus.ts +0 -238
- package/src/tools/askUser.test.ts +0 -69
- package/src/tools/askUser.ts +0 -59
- package/src/tools/definitions.ts +0 -228
- package/src/tools/maintenance.ts +0 -29
- package/src/tools/memoryTools.ts +0 -22
- package/src/tools/pluginPropose.ts +0 -41
- package/src/tools/registryWrite.test.ts +0 -101
- package/src/tools/registryWrite.ts +0 -182
- package/src/tools/spawnSubagent.ts +0 -47
- package/src/tools/types.ts +0 -41
- package/src/web/safeRequest.ts +0 -171
- package/src/web/text.ts +0 -53
- package/src/web/tools.ts +0 -134
- 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.
|