@open-agent-toolkit/cli 0.2.52 → 0.2.54
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/assets/agents/recon-worker.md +105 -0
- package/assets/bundle-metadata.json +1 -1
- package/assets/docs/cli-utilities/tool-packs.md +62 -8
- package/assets/docs/contributing/skills.md +26 -0
- package/assets/docs/workflows/skills/index.md +3 -0
- package/assets/docs/workflows/skills/recon.md +194 -0
- package/assets/public-package-versions.json +4 -4
- package/assets/skills/oat-dispatch-subagents/SKILL.md +105 -4
- package/assets/skills/oat-dispatch-subagents/references/record-schema.md +226 -0
- package/assets/skills/oat-project-autonomous/references/gate-inventory.md +2 -2
- package/assets/skills/oat-project-document/references/docs/autonomy-contract.md +2 -2
- package/assets/skills/oat-project-implement/references/docs/autonomy-contract.md +2 -2
- package/assets/skills/oat-project-pr-final/references/docs/autonomy-contract.md +2 -2
- package/assets/skills/oat-project-quick-start/references/docs/autonomy-contract.md +2 -2
- package/assets/skills/recon/SKILL.md +260 -0
- package/assets/skills/recon/references/packet-contract.md +307 -0
- package/assets/skills/recon/references/profiles.md +58 -0
- package/assets/skills/recon/references/worker-contract.md +71 -0
- package/assets/skills/recon/scripts/create-review-brief.mjs +452 -0
- package/assets/skills/recon/scripts/lib/canonical-json.mjs +55 -0
- package/assets/skills/recon/scripts/lib/contracts.mjs +2462 -0
- package/assets/skills/recon/scripts/lib/safe-path.mjs +120 -0
- package/assets/skills/recon/scripts/lib/validated-run.mjs +86 -0
- package/assets/skills/recon/scripts/reconcile-ledger.mjs +360 -0
- package/assets/skills/recon/scripts/render-packet.mjs +392 -0
- package/assets/skills/recon/scripts/validate-artifact.mjs +96 -0
- package/assets/skills/recon/scripts/validate-packet.mjs +2359 -0
- package/dist/commands/doctor/index.js +5 -5
- package/dist/commands/init/index.d.ts.map +1 -1
- package/dist/commands/init/index.js +7 -8
- package/dist/commands/status/index.d.ts +2 -2
- package/dist/commands/status/index.d.ts.map +1 -1
- package/dist/commands/status/index.js +8 -8
- package/dist/commands/sync/index.d.ts.map +1 -1
- package/dist/commands/sync/index.js +25 -9
- package/dist/commands/sync/sync.types.d.ts +2 -2
- package/dist/commands/sync/sync.types.d.ts.map +1 -1
- package/dist/commands/tools/migrate/index.d.ts.map +1 -1
- package/dist/commands/tools/migrate/index.js +25 -1
- package/dist/commands/tools/migrate/migrate-pack.d.ts +5 -0
- package/dist/commands/tools/migrate/migrate-pack.d.ts.map +1 -1
- package/dist/commands/tools/migrate/migrate-pack.js +66 -7
- package/dist/commands/tools/remove/index.js +1 -1
- package/dist/commands/tools/remove/remove-tools.d.ts +5 -1
- package/dist/commands/tools/remove/remove-tools.d.ts.map +1 -1
- package/dist/commands/tools/remove/remove-tools.js +81 -1
- package/dist/commands/tools/shared/apply-pack-reconcile.d.ts +3 -0
- package/dist/commands/tools/shared/apply-pack-reconcile.d.ts.map +1 -1
- package/dist/commands/tools/shared/apply-pack-reconcile.js +40 -9
- package/dist/commands/tools/shared/format-pack-inventory.d.ts.map +1 -1
- package/dist/commands/tools/shared/format-pack-inventory.js +3 -0
- package/dist/commands/tools/shared/install-sync-context.d.ts +2 -1
- package/dist/commands/tools/shared/install-sync-context.d.ts.map +1 -1
- package/dist/commands/tools/shared/install-sync-context.js +14 -3
- package/dist/commands/tools/shared/pack-dependencies.d.ts +14 -0
- package/dist/commands/tools/shared/pack-dependencies.d.ts.map +1 -0
- package/dist/commands/tools/shared/pack-dependencies.js +54 -0
- package/dist/commands/tools/shared/pack-inventory.d.ts.map +1 -1
- package/dist/commands/tools/shared/pack-inventory.js +9 -9
- package/dist/commands/tools/shared/pack-lifecycle.d.ts +9 -1
- package/dist/commands/tools/shared/pack-lifecycle.d.ts.map +1 -1
- package/dist/commands/tools/shared/pack-lifecycle.js +102 -9
- package/dist/commands/tools/shared/pack-manifest.d.ts +2 -2
- package/dist/commands/tools/shared/pack-manifest.d.ts.map +1 -1
- package/dist/commands/tools/shared/pack-manifest.js +91 -2
- package/dist/commands/tools/shared/pack-reconcile.d.ts +15 -1
- package/dist/commands/tools/shared/pack-reconcile.d.ts.map +1 -1
- package/dist/commands/tools/shared/pack-reconcile.js +75 -13
- package/dist/commands/tools/shared/scoped-pack-intent.d.ts +8 -0
- package/dist/commands/tools/shared/scoped-pack-intent.d.ts.map +1 -1
- package/dist/commands/tools/shared/scoped-pack-intent.js +61 -15
- package/dist/commands/tools/shared/types.d.ts +7 -0
- package/dist/commands/tools/shared/types.d.ts.map +1 -1
- package/dist/commands/tools/update/update-tools.d.ts.map +1 -1
- package/dist/commands/tools/update/update-tools.js +7 -1
- package/dist/config/oat-config.d.ts +5 -1
- package/dist/config/oat-config.d.ts.map +1 -1
- package/dist/config/oat-config.js +19 -0
- package/dist/engine/index.d.ts +2 -2
- package/dist/engine/index.d.ts.map +1 -1
- package/dist/engine/index.js +1 -1
- package/dist/engine/scanner.d.ts +16 -1
- package/dist/engine/scanner.d.ts.map +1 -1
- package/dist/engine/scanner.js +98 -4
- package/dist/providers/codex/codec/sync-extension.d.ts +1 -1
- package/dist/providers/codex/codec/sync-extension.d.ts.map +1 -1
- package/dist/providers/codex/codec/sync-extension.js +7 -7
- package/dist/providers/cursor/codec/sync-extension.d.ts +1 -1
- package/dist/providers/cursor/codec/sync-extension.d.ts.map +1 -1
- package/dist/providers/cursor/codec/sync-extension.js +11 -13
- package/dist/shared/types.d.ts +1 -0
- package/dist/shared/types.d.ts.map +1 -1
- package/dist/shared/types.js +3 -0
- package/package.json +2 -2
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: recon-worker
|
|
3
|
+
version: 1.0.0
|
|
4
|
+
description: Executes one bounded recon packet assignment as a non-interactive leaf worker and writes exactly one declared artifact.
|
|
5
|
+
tools: Read, Bash, Grep, Glob, Write, WebSearch, WebFetch
|
|
6
|
+
color: cyan
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Role
|
|
10
|
+
|
|
11
|
+
You are a non-interactive recon leaf worker. Execute exactly one assignment in
|
|
12
|
+
one declared mode: `map`, `gather`, `compile`, `verify`, `adversary`, `coverage`,
|
|
13
|
+
or `reconcile`. No other mode is valid.
|
|
14
|
+
|
|
15
|
+
## Assignment Gate
|
|
16
|
+
|
|
17
|
+
Before work, require a complete envelope containing run, wave, and lane IDs;
|
|
18
|
+
mode; bounded objective; included and excluded scope; allowed inputs; excluded
|
|
19
|
+
inputs; source-read authority and read-only tools; sole write path; artifact
|
|
20
|
+
kind and schema version; output schema; enforcement level; and deadline.
|
|
21
|
+
|
|
22
|
+
Reject the assignment if inputs overlap exclusions, source authority is
|
|
23
|
+
missing, the write path is not unique and packet-contained, the schema is
|
|
24
|
+
unknown, or the mode is undeclared. Never infer missing authority.
|
|
25
|
+
|
|
26
|
+
## Universal Invariants
|
|
27
|
+
|
|
28
|
+
- Read only the declared allowed inputs under the stated source-read authority.
|
|
29
|
+
- Write only the assigned artifact at the sole `writePath`.
|
|
30
|
+
- Never modify investigated sources, shared manifests, canonical ledgers, or
|
|
31
|
+
another lane's artifact.
|
|
32
|
+
- Never interact with the user.
|
|
33
|
+
- Never dispatch children, helpers, reviewers, or replacement workers.
|
|
34
|
+
- Never request credentials or broaden permissions.
|
|
35
|
+
- Preserve exact typed locators and minimal display excerpts.
|
|
36
|
+
- Report uncertainty, contradictions, missing evidence, and unavailable inputs
|
|
37
|
+
explicitly; never emit numeric confidence.
|
|
38
|
+
- Redact detected secret spans before persistence and never persist a sensitive
|
|
39
|
+
value or its digest.
|
|
40
|
+
|
|
41
|
+
## Mode Behavior
|
|
42
|
+
|
|
43
|
+
### `map`
|
|
44
|
+
|
|
45
|
+
Inventory only the assigned source partition. Emit candidate evidence areas,
|
|
46
|
+
source identities, unavailable inputs, and coverage gaps. Do not form canonical
|
|
47
|
+
claims.
|
|
48
|
+
|
|
49
|
+
### `gather`
|
|
50
|
+
|
|
51
|
+
Inspect assigned sources and emit findings with typed locators, minimal display
|
|
52
|
+
excerpts, observations, uncertainty, contradictions, and gaps. Do not assign a
|
|
53
|
+
canonical claim status.
|
|
54
|
+
|
|
55
|
+
### `compile`
|
|
56
|
+
|
|
57
|
+
Consume only the designated dossiers. Deduplicate their findings into a
|
|
58
|
+
provisional claim-ledger candidate and cite direct input artifacts. Do not
|
|
59
|
+
reopen excluded sources or invent evidence.
|
|
60
|
+
|
|
61
|
+
### `verify`
|
|
62
|
+
|
|
63
|
+
Consume only an immutable verification brief. Reopen the declared sources,
|
|
64
|
+
test the provided locators and claim semantics, and emit claim-level
|
|
65
|
+
dispositions plus newly observed evidence. Do not read dossiers, compiler
|
|
66
|
+
reasoning, synthesis prose, or prior reviews.
|
|
67
|
+
|
|
68
|
+
### `adversary`
|
|
69
|
+
|
|
70
|
+
Consume only declared scope, questions, and provisional statements. Search for
|
|
71
|
+
counterevidence, unsupported inference, incompatible interpretations, and
|
|
72
|
+
missing alternatives. Do not read gathering or prior-review conclusions.
|
|
73
|
+
|
|
74
|
+
### `coverage`
|
|
75
|
+
|
|
76
|
+
Compare the declared scope and questions with the permitted ledger projection.
|
|
77
|
+
Emit covered items, missing areas, and material gaps. Do not read gatherer
|
|
78
|
+
reasoning.
|
|
79
|
+
|
|
80
|
+
### `reconcile`
|
|
81
|
+
|
|
82
|
+
Apply permitted review dispositions and contradiction outcomes to a new ledger
|
|
83
|
+
candidate. Preserve the prior revision, legal state transitions, evidence
|
|
84
|
+
links, qualifications, and unresolved issues. Never invent evidence or update
|
|
85
|
+
the existing ledger in place.
|
|
86
|
+
|
|
87
|
+
## Output
|
|
88
|
+
|
|
89
|
+
Write one JSON artifact matching the supplied schema. Include kind, schema
|
|
90
|
+
version, identities, mode, outcome, honored inputs and exclusions, findings or
|
|
91
|
+
dispositions, uncertainty, contradictions, gaps, safe diagnostics, and direct
|
|
92
|
+
input references where applicable.
|
|
93
|
+
|
|
94
|
+
Return only the artifact path and compact outcome. Do not return source bodies,
|
|
95
|
+
worker reasoning, or dossier contents to the controller.
|
|
96
|
+
|
|
97
|
+
## Critical Rules
|
|
98
|
+
|
|
99
|
+
**ONE MODE. ONE ARTIFACT.** Perform only the assigned mode and write only its
|
|
100
|
+
assigned artifact.
|
|
101
|
+
|
|
102
|
+
**LEAF ONLY.** Never interact with the user and never dispatch any child.
|
|
103
|
+
|
|
104
|
+
**HONEST EVIDENCE.** Surface uncertainty and contradiction; do not manufacture
|
|
105
|
+
coverage or assurance.
|
|
@@ -24,7 +24,7 @@ This page covers CLI commands that manage bundled OAT tool packs and installed O
|
|
|
24
24
|
| `ideas` | Lightweight ideation and promotion flows plus idea templates | project, user | user |
|
|
25
25
|
| `utility` | Review and repo-maintenance helpers plus portable subagent-selection guidance and the provider-neutral dispatch engine | project, user | user |
|
|
26
26
|
| `project-management` | File-backed backlog/reference skills plus backlog, roadmap, current-state, file-per-record decision, and AGENTS-guide templates | project, user | user |
|
|
27
|
-
| `research` |
|
|
27
|
+
| `research` | Recon evidence packets, research, analysis, comparison, and synthesis skills plus the recon-worker and skeptical-evaluator agents | project, user | user |
|
|
28
28
|
| `brainstorm` | Always-on brainstorming entry point with visual companion | project, user | user |
|
|
29
29
|
|
|
30
30
|
Every reusable pack is a complete user-scope capability. On a **fresh** install
|
|
@@ -116,6 +116,46 @@ present without the utility contracts, it fails closed and reports the missing
|
|
|
116
116
|
dependency instead of inventing a fallback route. Non-project analytical
|
|
117
117
|
skills can use the utility guidance and dispatch layers directly.
|
|
118
118
|
|
|
119
|
+
### Research-pack dispatch dependencies
|
|
120
|
+
|
|
121
|
+
The research pack owns `recon` and `recon-worker`, but the utility pack retains
|
|
122
|
+
exclusive ownership of the two reusable dispatch skills that recon needs:
|
|
123
|
+
|
|
124
|
+
- `oat-dispatch-subagents`; and
|
|
125
|
+
- `subagent-orchestration`.
|
|
126
|
+
|
|
127
|
+
Installing research acquires those two utility assets at the same scope. OAT
|
|
128
|
+
records the research request as direct intent (`tools.research: true`) and a
|
|
129
|
+
transitive lease under `tools.requiredBy.utility`, which includes `research`.
|
|
130
|
+
The lease makes the selected utility assets available without pretending that
|
|
131
|
+
research owns them or that the entire utility pack was directly installed.
|
|
132
|
+
|
|
133
|
+
Direct utility intent and transitive leases are independent. If
|
|
134
|
+
`tools.utility: true` already exists, removing research releases only the
|
|
135
|
+
research lease and keeps the direct utility installation. When several packs
|
|
136
|
+
require utility, each name remains in the sorted, deduplicated `requiredBy`
|
|
137
|
+
list; dependency assets are removed only after no direct intent and no other
|
|
138
|
+
lease retains them.
|
|
139
|
+
|
|
140
|
+
Dependency lifecycle follows the root pack:
|
|
141
|
+
|
|
142
|
+
- install and update reconcile the declared dependency assets idempotently at
|
|
143
|
+
the root pack's scope;
|
|
144
|
+
- migration acquires and verifies destination leases before releasing source
|
|
145
|
+
leases, then removes the source only after the destination is complete; and
|
|
146
|
+
- removal releases the root pack's lease, removes only dependency assets with
|
|
147
|
+
no remaining owner, and prunes provider views only for canonical assets that
|
|
148
|
+
were actually removed.
|
|
149
|
+
|
|
150
|
+
Use explicit scopes when installing or updating recon's pack:
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
oat tools install research --scope user
|
|
154
|
+
oat tools update --pack research --scope user
|
|
155
|
+
oat tools install research --scope project
|
|
156
|
+
oat tools update --pack research --scope project
|
|
157
|
+
```
|
|
158
|
+
|
|
119
159
|
### Cross-pack explainer dependency
|
|
120
160
|
|
|
121
161
|
The public explainer family also spans two packs:
|
|
@@ -151,10 +191,12 @@ the usage and lifecycle contract.
|
|
|
151
191
|
|
|
152
192
|
Two independent facts describe a pack:
|
|
153
193
|
|
|
154
|
-
- **Intent** is
|
|
155
|
-
`tools.<pack>: true
|
|
156
|
-
|
|
157
|
-
|
|
194
|
+
- **Intent** is why a pack is present. Direct intent is stored per scope as
|
|
195
|
+
`tools.<pack>: true`; transitive dependency intent is stored as a sorted,
|
|
196
|
+
deduplicated `tools.requiredBy.<pack>` list. Both live in that scope's config
|
|
197
|
+
file (`.oat/config.json` for project scope, `~/.oat/config.json` for user
|
|
198
|
+
scope). Direct intent remains _true-or-absent_: removing a direct pack deletes
|
|
199
|
+
its key rather than writing `false`.
|
|
158
200
|
- **Inventory** is what is actually on disk right now: every managed asset the
|
|
159
201
|
release manifest declares for that pack and scope, its presence, and its
|
|
160
202
|
version or content digest.
|
|
@@ -575,6 +617,8 @@ Key behavior:
|
|
|
575
617
|
- Compares installed versions and canonical content against bundled assets and
|
|
576
618
|
copies updates; equal version metadata does not hide content drift
|
|
577
619
|
- For `--pack <pack>` and `--all`, an already-installed pack is reconciled to the **current** release membership in the scopes where it is installed, adding newly bundled skills, agents, templates, and scripts
|
|
620
|
+
- Pack dependencies are reconciled at the same scope without converting a
|
|
621
|
+
transitive-only dependency into direct pack intent
|
|
578
622
|
- A pack whose managed assets are all missing but whose intent is still declared is repaired from intent rather than skipped
|
|
579
623
|
- Managed template and script companions are refreshed at **user** scope. A project-scope repository template is an owner override and is left alone
|
|
580
624
|
- Non-versioned assets are compared by content digest, so an identical refresh is a no-op instead of a rewrite
|
|
@@ -608,6 +652,9 @@ Key behavior:
|
|
|
608
652
|
intent was eligible to be cleared; `removed: false` is a no-op and preserves
|
|
609
653
|
intent.
|
|
610
654
|
- Removal-triggered sync prunes exactly the canonical provider views for the removed paths in that scope, leaving other scopes and packs untouched
|
|
655
|
+
- Removing a root pack releases its `requiredBy` leases. A dependency asset is
|
|
656
|
+
retained while its owning pack has direct intent or another pack still
|
|
657
|
+
requires that asset
|
|
611
658
|
- Dry-run mode with `--dry-run`; auto-sync after mutations by default
|
|
612
659
|
- Use `--no-sync` to skip auto-sync
|
|
613
660
|
|
|
@@ -629,6 +676,8 @@ Key behavior:
|
|
|
629
676
|
- **Destination first, source second.** The destination is installed and
|
|
630
677
|
re-inventoried, and destination intent is written only after the pack is
|
|
631
678
|
verified complete there. Only then is source removal offered
|
|
679
|
+
- Dependency leases follow the same order: acquire and verify destination
|
|
680
|
+
leases before releasing source leases, so a failed move remains retryable
|
|
632
681
|
- Source removal requires an interactive confirmation. Declining leaves the
|
|
633
682
|
pack installed at **both** scopes with the destination verified — a safe,
|
|
634
683
|
recoverable state, not a failure. Non-interactive runs stop at the same point
|
|
@@ -650,7 +699,7 @@ To roll a migration back, run it in the opposite direction. Because the
|
|
|
650
699
|
destination is always verified before the source is touched, a rollback is the
|
|
651
700
|
same safe two-phase operation.
|
|
652
701
|
|
|
653
|
-
## Pack intent: `tools.<pack>`
|
|
702
|
+
## Pack intent: `tools.<pack>` and `tools.requiredBy`
|
|
654
703
|
|
|
655
704
|
Pack intent is recorded per scope, in that scope's own config file:
|
|
656
705
|
|
|
@@ -661,10 +710,14 @@ Pack intent is recorded per scope, in that scope's own config file:
|
|
|
661
710
|
|
|
662
711
|
- Intent is **true-or-absent**. Installing writes `true` for the scope you
|
|
663
712
|
installed into; removing deletes the key. OAT never writes `false`.
|
|
713
|
+
- `tools.requiredBy.<pack>` is a sorted list of packs that currently lease
|
|
714
|
+
selected assets from that pack at the same scope. It is transitive intent,
|
|
715
|
+
not a substitute for `tools.<pack>: true`.
|
|
664
716
|
- A user-scope install never writes repository config, and a project-scope
|
|
665
717
|
install never writes user config.
|
|
666
718
|
- Intent for one pack is never derived from another pack's key, and no
|
|
667
|
-
command writes the full eight-pack map.
|
|
719
|
+
command writes the full eight-pack map. Dependency operations update only
|
|
720
|
+
the owning pack's `requiredBy` entry.
|
|
668
721
|
- `.oat/config.local.json` is not an intent surface; per-developer state stays
|
|
669
722
|
out of pack intent.
|
|
670
723
|
- A manual `oat config set tools.<pack> true` is an override that the next
|
|
@@ -876,7 +929,8 @@ Installing the `project-management` pack does not adopt a repository. Run
|
|
|
876
929
|
|
|
877
930
|
### The `tools` config map is now sparse
|
|
878
931
|
|
|
879
|
-
Pack intent is written as
|
|
932
|
+
Pack intent is written as
|
|
933
|
+
[true-or-absent](#pack-intent-toolspack-and-toolsrequiredby). Earlier
|
|
880
934
|
releases wrote all eight pack keys as explicit `true`/`false` on reconcile;
|
|
881
935
|
current releases write `true` for installed packs and delete the key otherwise.
|
|
882
936
|
|
|
@@ -140,6 +140,32 @@ Codex, so a canonical fix must survive bundling and Codex sync as well. No test
|
|
|
140
140
|
yet gates the generated `.claude` or `.cursor` agent views, so regenerate and
|
|
141
141
|
spot-check those by hand.
|
|
142
142
|
|
|
143
|
+
### Declare cross-pack dependencies in the pack manifest
|
|
144
|
+
|
|
145
|
+
When a shipped skill depends on assets owned by another pack, declare exact
|
|
146
|
+
asset IDs in `PACK_MANIFEST` instead of duplicating those assets or relying on
|
|
147
|
+
ambient installation. Pack dependencies are same-scope: installation and
|
|
148
|
+
update acquire a `tools.requiredBy.<owner-pack>` lease, while a direct install
|
|
149
|
+
of the owner remains represented separately by `tools.<owner-pack>: true`.
|
|
150
|
+
|
|
151
|
+
The owner pack keeps asset ownership. Removal releases only the caller's lease
|
|
152
|
+
and may delete a dependency asset only when neither direct owner intent nor
|
|
153
|
+
another pack lease retains it. Migration acquires and verifies destination
|
|
154
|
+
leases before releasing the source leases. Keep dependency graphs acyclic,
|
|
155
|
+
deduplicate edges, and make every dependency asset support the caller's scope.
|
|
156
|
+
|
|
157
|
+
### Mark user-materializable pack agents explicitly
|
|
158
|
+
|
|
159
|
+
Set `userMaterializable: true` only on a managed agent that supports user
|
|
160
|
+
scope and has a bundled canonical source. User sync derives eligible agents
|
|
161
|
+
from installed pack inventory, validates the installed and bundled definitions,
|
|
162
|
+
and projects only those declared agents through active provider adapters.
|
|
163
|
+
|
|
164
|
+
Do not use this marker to expose arbitrary user Markdown or to transfer role
|
|
165
|
+
ownership to a provider view. Canonical/provider destination collisions fail
|
|
166
|
+
closed, and removal keeps the projection while another installed pack or
|
|
167
|
+
direct managed-role intent still retains the canonical agent.
|
|
168
|
+
|
|
143
169
|
## Contract components
|
|
144
170
|
|
|
145
171
|
- Mode assertion (purpose, blocked/allowed activities)
|
|
@@ -14,6 +14,7 @@ Use this section when you want to choose the right OAT skill for a task. If you
|
|
|
14
14
|
- [Explainer Kit](explainer-kit.md) - Core and OAT adapter usage, recipes and expansion profiles, the two authoring paths, warnings and QA severity, themes, lifecycle policy, durability, and publishing.
|
|
15
15
|
- [Explainer Provider Integration](explainer-kit-providers.md) - Provider-neutral planner, author, trusted browser-session, and visual-critic contracts.
|
|
16
16
|
- [Repo Improve](repo-improve.md) - Source modes, external-plan boundaries, optional tracking, and OAT import handoff.
|
|
17
|
+
- [Recon Evidence Packets](recon.md) - Approved worker profiles, validated claim states, packet layout, partial outcomes, and directory-only handoff.
|
|
17
18
|
|
|
18
19
|
## Key Skills by Use Case
|
|
19
20
|
|
|
@@ -37,6 +38,7 @@ Use this section when you want to choose the right OAT skill for a task. If you
|
|
|
37
38
|
- Generate a shipping digest or scheduled recap: `oat-wrap-up`
|
|
38
39
|
- Run a wave program over a corpus of external plans: `oat-wave-program` (durable program artifact: new/refresh/wave-close) and `oat-wave-execute` (one wave as a wrapper project) — see [Wave Workflows](../wave-workflows.md)
|
|
39
40
|
- Research a topic in depth: `deep-research`
|
|
41
|
+
- Acquire and validate bounded evidence for another workflow: `recon`
|
|
40
42
|
- Analyze an artifact, codebase, or document: `analyze`
|
|
41
43
|
- Compare options with domain-aware dimensions: `compare`
|
|
42
44
|
- Verify a claim adversarially: `skeptic`
|
|
@@ -123,6 +125,7 @@ Use this section when you want to choose the right OAT skill for a task. If you
|
|
|
123
125
|
|
|
124
126
|
=== "Research"
|
|
125
127
|
|
|
128
|
+
- `recon`
|
|
126
129
|
- `deep-research`
|
|
127
130
|
- `analyze`
|
|
128
131
|
- `compare`
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Recon Evidence Packets
|
|
3
|
+
description: 'Use recon to gather and validate bounded evidence through approved worker waves, then hand off one durable packet directory.'
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# Recon Evidence Packets
|
|
7
|
+
|
|
8
|
+
`recon` turns a bounded investigation into a durable evidence-packet directory.
|
|
9
|
+
It gathers source-grounded findings through approved worker waves, validates
|
|
10
|
+
their locators and assurance state, and gives the next consumer one compact
|
|
11
|
+
entry point instead of every worker transcript.
|
|
12
|
+
|
|
13
|
+
The first release is standalone. It does not automatically run from project
|
|
14
|
+
discovery, quick start, `analyze`, or `deep-research`. Those workflows can
|
|
15
|
+
consume an explicitly supplied packet path without changing their own
|
|
16
|
+
invocation behavior.
|
|
17
|
+
|
|
18
|
+
## Choose the Right Research Skill
|
|
19
|
+
|
|
20
|
+
| Need | Use |
|
|
21
|
+
| ------------------------------------------------------------------ | --------------- |
|
|
22
|
+
| Acquire and validate bounded evidence for another workflow | `recon` |
|
|
23
|
+
| Interpret a concrete artifact, codebase, document, system, or idea | `analyze` |
|
|
24
|
+
| Research a broader external topic and produce a narrative artifact | `deep-research` |
|
|
25
|
+
|
|
26
|
+
Use `recon` when the evidence, exact source locators, contradictions, and gaps
|
|
27
|
+
are the deliverable. It does not make the final product, architecture,
|
|
28
|
+
security, or release decision, and it does not modify the investigated system.
|
|
29
|
+
|
|
30
|
+
## Install or Update the Research Pack
|
|
31
|
+
|
|
32
|
+
Install at user scope when you want `recon` available across repositories:
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
oat tools install research --scope user
|
|
36
|
+
oat tools update --pack research --scope user
|
|
37
|
+
```
|
|
38
|
+
|
|
39
|
+
Install at project scope when the repository should own the capability:
|
|
40
|
+
|
|
41
|
+
```bash
|
|
42
|
+
oat tools install research --scope project
|
|
43
|
+
oat tools update --pack research --scope project
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
The research pack acquires its two dispatch dependencies from the utility pack
|
|
47
|
+
at the same scope. You do not need to select a named model during installation.
|
|
48
|
+
At run time, OAT resolves a currently available target that meets the planned
|
|
49
|
+
work's task-class floor and asks you to approve the exact provider, model,
|
|
50
|
+
effort, role, topology, authority, and execution limits before any worker
|
|
51
|
+
launches.
|
|
52
|
+
|
|
53
|
+
## Run a Recon
|
|
54
|
+
|
|
55
|
+
Provide a bounded question or target, then optionally choose a profile, scope,
|
|
56
|
+
context source, output directory, or strict authority:
|
|
57
|
+
|
|
58
|
+
```text
|
|
59
|
+
/recon "How is provider sync materialized?" --profile standard --scope packages/cli/src/providers
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
The default profile is `standard`. Every run uses one approved model and effort
|
|
63
|
+
for every pass. Profiles change pass topology, redundancy, lane caps, and
|
|
64
|
+
maximum concurrency; they do not silently choose a different model tier.
|
|
65
|
+
|
|
66
|
+
| Profile | Use it for | Required assurance work | Claim ceiling |
|
|
67
|
+
| ---------- | ------------------------------------------- | ---------------------------------------------------------------------------------------- | ------------- |
|
|
68
|
+
| `quick` | Bounded orientation | Mapping, gathering, compilation, schema validation, and locator validation | `supported` |
|
|
69
|
+
| `standard` | Load-bearing evidence | Quick work plus blind semantic verification, adversarial review, coverage, and reconcile | `verified` |
|
|
70
|
+
| `thorough` | Expensive failure or correlated blind spots | Standard work plus redundant gathering and verification and contradiction resolution | `verified` |
|
|
71
|
+
|
|
72
|
+
The approval manifest shows the exact adaptive lane count, concurrency, pass
|
|
73
|
+
topology, conditional lane caps, deadlines, retries, and source/write authority.
|
|
74
|
+
Declining approval launches nothing. A material change to a provider, model,
|
|
75
|
+
effort, route, role, service tier, or execution cap requires renewed approval;
|
|
76
|
+
there is no silent substitution after approval.
|
|
77
|
+
|
|
78
|
+
## Destination Precedence
|
|
79
|
+
|
|
80
|
+
`recon` always creates a new topic-and-run directory. It never overwrites an
|
|
81
|
+
existing run. The packet parent is selected in this order:
|
|
82
|
+
|
|
83
|
+
1. an explicit `--output` override;
|
|
84
|
+
2. the active project's `references/evidence/` directory when a caller supplies
|
|
85
|
+
that project context;
|
|
86
|
+
3. the repository's `.oat/repo/reference/evidence/` directory;
|
|
87
|
+
4. a fallback destination that the caller approves.
|
|
88
|
+
|
|
89
|
+
An OAT project is optional. Standalone recon remains available when no project
|
|
90
|
+
or repository evidence directory exists.
|
|
91
|
+
|
|
92
|
+
## Packet Layout and Consumption
|
|
93
|
+
|
|
94
|
+
Every structurally publishable run uses this top-level layout; a
|
|
95
|
+
non-publishable candidate generation withdraws any existing `packet.md`:
|
|
96
|
+
|
|
97
|
+
```text
|
|
98
|
+
<topic>-<run-id>/
|
|
99
|
+
├── packet.md
|
|
100
|
+
├── manifest.json
|
|
101
|
+
├── claims.json
|
|
102
|
+
├── reviews/
|
|
103
|
+
└── raw/
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
- `packet.md` is the compact consumer view and is published last.
|
|
107
|
+
- `claims.json` is the canonical claim ledger.
|
|
108
|
+
- `manifest.json` records request, source, dispatch, topology, stage, and gap
|
|
109
|
+
provenance.
|
|
110
|
+
- `reviews/` contains compact locator, semantic, adversarial, coverage, and
|
|
111
|
+
reconciliation evidence.
|
|
112
|
+
- `raw/` contains worker dossiers, dispatch receipts, candidate artifacts, and
|
|
113
|
+
safe failure diagnostics. It is not normal consumer input.
|
|
114
|
+
|
|
115
|
+
The ledger compiler and packet validator enforce categorical referential
|
|
116
|
+
integrity on `synthesis.keyClaimIds` and `synthesis.unresolvedQuestionIds`. Any
|
|
117
|
+
reference to an unknown claim or question ID fails validation with
|
|
118
|
+
`SYNTHESIS_REFERENCE_MISSING`.
|
|
119
|
+
|
|
120
|
+
The normal handoff is the packet directory path plus a compact status summary.
|
|
121
|
+
Open `packet.md` first and follow machine-readable or review links only when you
|
|
122
|
+
need an audit trail. Do not copy `raw/` dossiers or worker reasoning into the
|
|
123
|
+
next model's context by default.
|
|
124
|
+
|
|
125
|
+
## Claim States
|
|
126
|
+
|
|
127
|
+
Claims use categorical evidence states rather than generated confidence
|
|
128
|
+
percentages:
|
|
129
|
+
|
|
130
|
+
- `provisional`: compiled but not mechanically validated;
|
|
131
|
+
- `supported`: cited evidence and locators validate, without completed
|
|
132
|
+
independent semantic verification;
|
|
133
|
+
- `verified`: required independent review reopened and affirmed the sources,
|
|
134
|
+
with no unresolved material challenge;
|
|
135
|
+
- `contested`: credible counterevidence or incompatible interpretations remain;
|
|
136
|
+
- `unresolved`: available evidence cannot settle the claim; and
|
|
137
|
+
- `unsupported`: valid supporting evidence is absent or verification failed.
|
|
138
|
+
|
|
139
|
+
A quick packet never promotes a claim to `verified`. Stronger profiles can do
|
|
140
|
+
so only when their required review artifacts and receipts validate.
|
|
141
|
+
|
|
142
|
+
When an independent semantic review rejects a proposed claim, the reconciler
|
|
143
|
+
transitions it to `unsupported` rather than deleting it. This preserves the
|
|
144
|
+
claim statement, cited evidence, and transition history in `claims.json`, and
|
|
145
|
+
renders the finding under Contradictions and Qualifications.
|
|
146
|
+
|
|
147
|
+
An adversarial challenge transitions a claim to `contested`. A run with
|
|
148
|
+
contested claims may publish as `complete` when all declared questions and
|
|
149
|
+
claims are resolved or characterized; contested claims are rendered under
|
|
150
|
+
Contradictions and Qualifications. If an unresolved challenge represents an
|
|
151
|
+
unanswered question or missing source evidence that leaves investigation
|
|
152
|
+
incomplete, it is recorded as a material gap in `manifest.gaps` and the run
|
|
153
|
+
publishes as `partial`.
|
|
154
|
+
|
|
155
|
+
## Selective Blindness and Authority
|
|
156
|
+
|
|
157
|
+
Gatherers write separate dossiers. Verifiers receive only claim statements,
|
|
158
|
+
display excerpts, typed locators, and the source descriptors required to reopen
|
|
159
|
+
them. Adversarial reviewers receive the declared scope, questions, and
|
|
160
|
+
provisional statements. Neither pass receives gatherer reasoning, synthesis
|
|
161
|
+
prose, dossier paths, or earlier review conclusions.
|
|
162
|
+
|
|
163
|
+
Each lane receives one explicit authority envelope and one unique output path.
|
|
164
|
+
Its enforcement is recorded as:
|
|
165
|
+
|
|
166
|
+
- `provider-enforced`: the host or tool technically restricts reads and writes;
|
|
167
|
+
- `contract-enforced`: an audited leaf-worker contract restricts local reads
|
|
168
|
+
and the sole packet write path; or
|
|
169
|
+
- `unavailable`: a safe read-only boundary cannot be established.
|
|
170
|
+
|
|
171
|
+
By default, local repository and file work may use contract enforcement. Pass
|
|
172
|
+
`--strict` to require provider enforcement for every lane. Mutation-capable
|
|
173
|
+
source tools are unavailable unless their interface enforces a read-only
|
|
174
|
+
operation.
|
|
175
|
+
|
|
176
|
+
## Partial and Failed Runs
|
|
177
|
+
|
|
178
|
+
A structurally valid run can publish an honest `partial` packet. The manifest
|
|
179
|
+
and `packet.md` then identify the requested and achieved profiles, failed or
|
|
180
|
+
omitted passes, material gaps, affected claims, and required assurance
|
|
181
|
+
downgrades. A run may be partial even when it achieved the requested profile if
|
|
182
|
+
a material evidence gap remains.
|
|
183
|
+
|
|
184
|
+
Before assurance or publication, candidate runs are normalized into a deeply
|
|
185
|
+
immutable `ValidatedRun`. To prevent premature or invalid promotion,
|
|
186
|
+
`ValidatedRun` is only constructed and exposed when a candidate generation is
|
|
187
|
+
structurally valid and publishable (`complete` or `partial`). Non-publishable
|
|
188
|
+
runs (`failed`, `running`, `preparing`, `awaiting-approval`) withdraw any
|
|
189
|
+
existing `packet.md` under the unchanged-root guard, leave no `ValidatedRun`,
|
|
190
|
+
and cause the exported renderer to fail closed with `PACKET_NOT_PUBLISHABLE`.
|
|
191
|
+
|
|
192
|
+
If the manifest, ledger, topology, receipts, source identities, or publication
|
|
193
|
+
boundary cannot be validated, the run is `failed`. It may retain safe raw
|
|
194
|
+
diagnostics, but it does not publish a misleading `packet.md`.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-dispatch-subagents
|
|
3
|
-
version: 1.2.
|
|
3
|
+
version: 1.2.5
|
|
4
4
|
description: Use when an OAT skill or workflow needs provider-neutral selection, launch, recovery, or evidence for bounded subagent work without project lifecycle policy.
|
|
5
5
|
disable-model-invocation: true
|
|
6
6
|
user-invocable: false
|
|
@@ -129,6 +129,11 @@ decomposition.
|
|
|
129
129
|
The optional policy and ceiling are already-resolved inputs. Do not infer where
|
|
130
130
|
they came from or resolve project state to obtain them.
|
|
131
131
|
|
|
132
|
+
The optional `operation` is `prepare`, `execute`, or `dispatch`. `prepare` and
|
|
133
|
+
`execute` form the approval-bound two-step path below. When `operation` is
|
|
134
|
+
omitted, treat it as `operation: dispatch` and preserve the existing one-step
|
|
135
|
+
selection-and-launch path for backwards compatibility.
|
|
136
|
+
|
|
132
137
|
## Native Dispatch Lineage
|
|
133
138
|
|
|
134
139
|
For a project-aware dispatch, the calling workflow records native dispatch
|
|
@@ -370,9 +375,99 @@ Before explicit selection:
|
|
|
370
375
|
Do not launch a diagnostic child solely to obtain a catalog the provider
|
|
371
376
|
cannot expose before selection. Record the visibility timing instead.
|
|
372
377
|
|
|
378
|
+
## Approval-Bound Preparation and Execution
|
|
379
|
+
|
|
380
|
+
Use this path when a caller must show the exact selection and execution
|
|
381
|
+
envelope for approval before any child starts. The caller still owns the user
|
|
382
|
+
interaction; this skill produces and validates the approval evidence.
|
|
383
|
+
|
|
384
|
+
### `operation: prepare`
|
|
385
|
+
|
|
386
|
+
Preparation is selection-only. It must observe the live catalog in the exact
|
|
387
|
+
dispatch context and return a complete prepared dispatch record without
|
|
388
|
+
launching, reserving capacity, or obtaining a child handle.
|
|
389
|
+
|
|
390
|
+
Before selecting a target:
|
|
391
|
+
|
|
392
|
+
1. Classify all planned and conditional waves before selection. Record every
|
|
393
|
+
wave's `task_class` and `model_class_floor`.
|
|
394
|
+
2. Compute the run-wide maximum model-class floor using the durable task-class
|
|
395
|
+
order. Conditional waves count even when the caller may later skip them.
|
|
396
|
+
3. Select one exact target at or above that maximum floor and pin it across all
|
|
397
|
+
prepared waves. The pin includes provider, dispatch context, route, role,
|
|
398
|
+
model and selector granularity, effort, reasoning mode, and service tier.
|
|
399
|
+
Do not weaken a wave floor, split the target, or silently substitute a
|
|
400
|
+
cheaper target. If one target cannot satisfy every wave, return a blocked
|
|
401
|
+
preparation.
|
|
402
|
+
4. Materialize each wave's exact authority, deadline, retry limit,
|
|
403
|
+
concurrency, lane cap, scopes, lane IDs, context controls, fallback, and
|
|
404
|
+
canonical redacted payload digest. Record the catalog observation identity
|
|
405
|
+
and the fingerprint of the relevant selectable facts.
|
|
406
|
+
5. Construct the canonical approval projection defined in
|
|
407
|
+
`references/record-schema.md`, return `dispatch_state: prepared`, and stop.
|
|
408
|
+
|
|
409
|
+
The calling workflow may combine prepared wave records into a run manifest,
|
|
410
|
+
but it must preserve the run ID, maximum floor, pinned target, per-wave axes,
|
|
411
|
+
canonical approval fingerprint, and prepared timestamp byte-for-byte.
|
|
412
|
+
|
|
413
|
+
### Approval
|
|
414
|
+
|
|
415
|
+
The caller presents the complete approval projection and records explicit
|
|
416
|
+
approval by changing only `dispatch_state`, `approved_at`, and the approval
|
|
417
|
+
evidence fields allowed by the schema. Approval is valid only for the exact
|
|
418
|
+
canonical fingerprint. Editing any bound axis creates a new preparation; it
|
|
419
|
+
does not update an already approved record in place.
|
|
420
|
+
|
|
421
|
+
### `operation: execute`
|
|
422
|
+
|
|
423
|
+
Execution accepts one approved prepared record. Before invoking the launcher:
|
|
424
|
+
|
|
425
|
+
1. Validate the prepared-record version, legal state, approval timestamp, and
|
|
426
|
+
approval fingerprint against the unchanged canonical projection.
|
|
427
|
+
2. Re-observe the live catalog in the same dispatch context and compare the
|
|
428
|
+
current relevant selectable facts with the prepared observation. A new
|
|
429
|
+
unrelated candidate alone is not relevant drift; removal, renaming,
|
|
430
|
+
semantic change, or loss of selectability for an approved control is.
|
|
431
|
+
3. Re-resolve the actual launch controls without choosing alternatives and
|
|
432
|
+
compare every approval-bound axis exactly. Provider-native opaque values
|
|
433
|
+
stay byte-for-byte exact.
|
|
434
|
+
4. Refuse launch and mark the record `stale` when any comparison differs. The
|
|
435
|
+
caller must run `prepare` again and obtain reapproval.
|
|
436
|
+
5. Launch the approved payload once. Record `accepted` only from positive
|
|
437
|
+
launcher acceptance; otherwise record `not-accepted`.
|
|
438
|
+
|
|
439
|
+
A model change is model drift. An effort change is effort drift. A provider
|
|
440
|
+
change is provider drift. A route change is route drift. A role change is role
|
|
441
|
+
drift. A service tier change is service tier drift. An authority change is
|
|
442
|
+
authority drift. A deadline change is deadline drift. A concurrency change is
|
|
443
|
+
concurrency drift. A lane cap change is lane cap drift. A relevant catalog
|
|
444
|
+
change is catalog drift. The same fail-closed rule covers reasoning mode,
|
|
445
|
+
selector granularity, retry limit, writable roots, context controls, fallback,
|
|
446
|
+
wave topology, scope, lane identity, payload digest, floor, or pinned-target
|
|
447
|
+
drift. Never adjust one of these controls to make execution fit the current
|
|
448
|
+
surface.
|
|
449
|
+
|
|
450
|
+
Launch acceptance remains terminal for replacement eligibility. After a
|
|
451
|
+
prepared launch is accepted, no alternate route, replacement, or target
|
|
452
|
+
substitution is allowed. Only continuation through the already accepted handle
|
|
453
|
+
is permitted. A linked fresh same-target launch is forbidden, regardless of
|
|
454
|
+
the generic caller lifecycle recovery exception. If that accepted handle is
|
|
455
|
+
lost or cannot resume, record the terminal outcome and stop; the approval-bound
|
|
456
|
+
record never authorizes a second child.
|
|
457
|
+
|
|
458
|
+
### One-Step Backwards Compatibility
|
|
459
|
+
|
|
460
|
+
Existing callers may omit `operation` or provide `operation: dispatch`. This
|
|
461
|
+
retains exactly the current one-step selection-and-launch flow in
|
|
462
|
+
Full-Information Selection: observe, select, record, and launch once in the
|
|
463
|
+
same operation. Do not require those callers to invent a prepared record,
|
|
464
|
+
approval timestamp, or approval fingerprint. New approval-bound callers must
|
|
465
|
+
use `prepare` and `execute`; they may not collapse that path into `dispatch`.
|
|
466
|
+
|
|
373
467
|
## Full-Information Selection
|
|
374
468
|
|
|
375
|
-
For every dispatch
|
|
469
|
+
For every legacy one-step dispatch and for the selection portion of
|
|
470
|
+
`operation: prepare`:
|
|
376
471
|
|
|
377
472
|
1. Validate the caller request and capability state.
|
|
378
473
|
2. Resolve provider, context, role class, optional task class and model-class
|
|
@@ -387,8 +482,14 @@ For every dispatch:
|
|
|
387
482
|
7. Record route, selection source, selection reason, candidates, catalog
|
|
388
483
|
source, model, effort, reasoning mode, service tier, guidance version,
|
|
389
484
|
authority, and deadline.
|
|
390
|
-
8.
|
|
391
|
-
|
|
485
|
+
8. For `operation: prepare`, construct the prepared record and return without
|
|
486
|
+
launch. Do not continue into the legacy launch steps.
|
|
487
|
+
9. For a legacy one-step dispatch only, launch once.
|
|
488
|
+
10. Record launch acceptance separately from child outcome and runtime identity.
|
|
489
|
+
|
|
490
|
+
The following diagram is the legacy one-step flow. Approval-bound preparation
|
|
491
|
+
stops after selection and record construction; its later `execute` operation
|
|
492
|
+
performs the separately approved launch.
|
|
392
493
|
|
|
393
494
|
```mermaid
|
|
394
495
|
flowchart TD
|