@open-agent-toolkit/cli 0.3.9 → 0.3.11
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/README.md +2 -1
- package/assets/bundle-metadata.json +1 -1
- package/assets/config/dispatch-matrix-recommendation.json +6 -6
- package/assets/docs/cli-utilities/configuration.md +12 -8
- package/assets/docs/cli-utilities/meta.json +13 -0
- package/assets/docs/cli-utilities/tool-packs.md +8 -2
- package/assets/docs/cli-utilities/workflow-gates.md +14 -1
- package/assets/docs/contributing/code.md +8 -2
- package/assets/docs/contributing/documentation.md +7 -1
- package/assets/docs/contributing/meta.json +15 -0
- package/assets/docs/contributing/updating-model-guidance.md +34 -6
- package/assets/docs/contributing/verifying-cursor-pins.md +38 -9
- package/assets/docs/docs-tooling/add-docs-to-a-repo.md +14 -5
- package/assets/docs/docs-tooling/commands.md +26 -8
- package/assets/docs/docs-tooling/meta.json +4 -0
- package/assets/docs/docs-tooling/workflows.md +2 -2
- package/assets/docs/guide/meta.json +4 -0
- package/assets/docs/meta.json +14 -0
- package/assets/docs/provider-sync/instruction-sync.md +8 -0
- package/assets/docs/provider-sync/meta.json +11 -0
- package/assets/docs/provider-sync/providers.md +4 -4
- package/assets/docs/provider-sync/scope-and-surface.md +3 -4
- package/assets/docs/reference/cli-reference.md +5 -2
- package/assets/docs/reference/docs-index-contract.md +22 -6
- package/assets/docs/reference/file-locations.md +7 -2
- package/assets/docs/reference/index.md +1 -1
- package/assets/docs/reference/meta.json +10 -0
- package/assets/docs/reference/troubleshooting.md +41 -6
- package/assets/docs/workflows/ideas/meta.json +4 -0
- package/assets/docs/workflows/meta.json +4 -0
- package/assets/docs/workflows/projects/cursor-cloud.md +8 -3
- package/assets/docs/workflows/projects/dispatch-ceiling.md +21 -14
- package/assets/docs/workflows/projects/evidence-layers.md +6 -8
- package/assets/docs/workflows/projects/implementation-execution.md +34 -5
- package/assets/docs/workflows/projects/lifecycle.md +7 -1
- package/assets/docs/workflows/projects/meta.json +25 -0
- package/assets/docs/workflows/projects/orchestration-model.md +5 -6
- package/assets/docs/workflows/skills/meta.json +10 -0
- package/assets/docs/workflows/skills/recon.md +28 -3
- package/assets/public-package-versions.json +4 -4
- package/assets/skills/oat-cursor-cloud-projects/SKILL.md +30 -16
- package/assets/skills/oat-dispatch-subagents/SKILL.md +4 -12
- package/assets/skills/oat-dispatch-subagents/references/managed-claude-example.json +1 -1
- package/assets/skills/oat-dispatch-subagents/references/provider-codex.md +51 -0
- package/assets/skills/oat-dispatch-subagents/references/provider-cursor.md +5 -2
- package/assets/skills/oat-dispatch-subagents/references/record-schema.md +8 -7
- package/assets/skills/oat-docs-analyze/SKILL.md +28 -3
- package/assets/skills/oat-docs-apply/SKILL.md +3 -3
- package/assets/skills/oat-docs-authoring/SKILL.md +1 -1
- package/assets/skills/oat-docs-authoring/references/oat-fumadocs-contract.md +5 -2
- package/assets/skills/oat-docs-bootstrap/SKILL.md +4 -3
- package/assets/skills/oat-docs-bootstrap/assets/AGENTS.md.template +3 -3
- package/assets/skills/oat-pjm-decision/SKILL.md +3 -2
- package/assets/skills/oat-project-autonomous/references/gate-inventory.md +4 -4
- package/assets/skills/oat-project-complete/SKILL.md +47 -2
- package/assets/skills/oat-project-design/SKILL.md +10 -6
- package/assets/skills/oat-project-discover/SKILL.md +3 -3
- package/assets/skills/oat-project-dispatch-subagents/SKILL.md +3 -10
- package/assets/skills/oat-project-document/references/docs/autonomy-contract.md +4 -4
- package/assets/skills/oat-project-implement/SKILL.md +1 -1
- package/assets/skills/oat-project-implement/references/completion-and-closeout.md +135 -3
- package/assets/skills/oat-project-implement/references/dispatch-and-dry-run.md +8 -10
- package/assets/skills/oat-project-implement/references/docs/autonomy-contract.md +4 -4
- package/assets/skills/oat-project-implement/references/plan-and-resume.md +1 -1
- package/assets/skills/oat-project-import-plan/SKILL.md +3 -3
- package/assets/skills/oat-project-lite/references/docs/autonomy-contract.md +4 -4
- package/assets/skills/oat-project-new/SKILL.md +3 -3
- package/assets/skills/oat-project-next/SKILL.md +50 -7
- package/assets/skills/oat-project-plan/SKILL.md +4 -4
- package/assets/skills/oat-project-plan-writing/SKILL.md +4 -4
- package/assets/skills/oat-project-pr-final/SKILL.md +11 -1
- package/assets/skills/oat-project-pr-final/references/docs/autonomy-contract.md +4 -4
- package/assets/skills/oat-project-promote-spec-driven/SKILL.md +2 -2
- package/assets/skills/oat-project-quick-start/SKILL.md +12 -8
- package/assets/skills/oat-project-quick-start/references/docs/autonomy-contract.md +4 -4
- package/assets/skills/oat-project-retro/SKILL.md +6 -3
- package/assets/skills/oat-project-review-provide/SKILL.md +2 -2
- package/assets/skills/oat-project-review-provide-remote/SKILL.md +2 -2
- package/assets/skills/oat-project-spec/SKILL.md +3 -3
- package/assets/skills/oat-project-summary/SKILL.md +22 -3
- package/assets/skills/oat-repo-improve/SKILL.md +2 -2
- package/assets/skills/recon/SKILL.md +24 -3
- package/assets/skills/recon/references/packet-contract.md +36 -6
- package/assets/skills/recon/references/profiles.md +3 -0
- package/assets/skills/recon/references/worker-contract.md +16 -3
- package/assets/skills/recon/scripts/create-review-brief.mjs +17 -86
- package/assets/skills/recon/scripts/lib/contracts.mjs +158 -41
- package/assets/skills/recon/scripts/lib/review-binding.mjs +123 -0
- package/assets/skills/recon/scripts/lib/routing.mjs +5 -2
- package/assets/skills/recon/scripts/reconcile-ledger.mjs +18 -7
- package/assets/skills/recon/scripts/render-packet.mjs +93 -1
- package/assets/skills/recon/scripts/validate-packet.mjs +119 -88
- package/assets/skills/subagent-orchestration/SKILL.md +1 -1
- package/assets/skills/subagent-orchestration/references/evidence-and-refresh.md +20 -8
- package/assets/skills/subagent-orchestration/references/provider-claude.md +25 -12
- package/assets/skills/subagent-orchestration/references/provider-codex.md +27 -18
- package/assets/skills/subagent-orchestration/references/provider-cursor.md +40 -10
- package/assets/templates/state.md +1 -0
- package/dist/commands/backlog/new.d.ts +2 -2
- package/dist/commands/backlog/new.d.ts.map +1 -1
- package/dist/commands/backlog/new.js +2 -2
- package/dist/commands/decision/new.d.ts +2 -2
- package/dist/commands/decision/new.d.ts.map +1 -1
- package/dist/commands/decision/new.js +2 -2
- package/dist/commands/docs/nav/contents.d.ts +9 -0
- package/dist/commands/docs/nav/contents.d.ts.map +1 -1
- package/dist/commands/docs/nav/contents.js +7 -2
- package/dist/commands/docs/nav/fumadocs.d.ts +51 -0
- package/dist/commands/docs/nav/fumadocs.d.ts.map +1 -0
- package/dist/commands/docs/nav/fumadocs.js +301 -0
- package/dist/commands/docs/nav/sync.d.ts +31 -1
- package/dist/commands/docs/nav/sync.d.ts.map +1 -1
- package/dist/commands/docs/nav/sync.js +163 -6
- package/dist/commands/index.d.ts.map +1 -1
- package/dist/commands/index.js +2 -0
- package/dist/commands/instructions/instructions.utils.d.ts +19 -0
- package/dist/commands/instructions/instructions.utils.d.ts.map +1 -1
- package/dist/commands/instructions/instructions.utils.js +89 -17
- package/dist/commands/instructions/sync/sync.d.ts.map +1 -1
- package/dist/commands/instructions/sync/sync.js +49 -2
- package/dist/commands/pjm/init.d.ts.map +1 -1
- package/dist/commands/pjm/init.js +2 -2
- package/dist/commands/project/closeout-check/closeout-invariant.d.ts +97 -0
- package/dist/commands/project/closeout-check/closeout-invariant.d.ts.map +1 -0
- package/dist/commands/project/closeout-check/closeout-invariant.js +301 -0
- package/dist/commands/project/closeout-check/index.d.ts +38 -0
- package/dist/commands/project/closeout-check/index.d.ts.map +1 -0
- package/dist/commands/project/closeout-check/index.js +117 -0
- package/dist/commands/project/complete-state/index.d.ts +4 -0
- package/dist/commands/project/complete-state/index.d.ts.map +1 -1
- package/dist/commands/project/complete-state/index.js +11 -13
- package/dist/commands/project/dispatch/index.d.ts.map +1 -1
- package/dist/commands/project/dispatch/index.js +6 -30
- package/dist/commands/project/dispatch/record.d.ts +9 -18
- package/dist/commands/project/dispatch/record.d.ts.map +1 -1
- package/dist/commands/project/dispatch/record.js +15 -212
- package/dist/commands/project/index.d.ts.map +1 -1
- package/dist/commands/project/index.js +2 -0
- package/dist/commands/project/new/scaffold.d.ts +0 -1
- package/dist/commands/project/new/scaffold.d.ts.map +1 -1
- package/dist/commands/project/new/scaffold.js +19 -20
- package/dist/commands/project/promote/promote.d.ts +2 -2
- package/dist/commands/project/promote/promote.d.ts.map +1 -1
- package/dist/commands/project/promote/promote.js +13 -11
- package/dist/commands/shared/frontmatter.d.ts +21 -0
- package/dist/commands/shared/frontmatter.d.ts.map +1 -1
- package/dist/commands/shared/frontmatter.js +70 -4
- package/dist/commands/shared/template-source.d.ts +29 -0
- package/dist/commands/shared/template-source.d.ts.map +1 -0
- package/dist/commands/{pjm → shared}/template-source.js +24 -7
- package/dist/commands/state/generate.js +2 -2
- package/dist/commands/template/index.d.ts +10 -0
- package/dist/commands/template/index.d.ts.map +1 -0
- package/dist/commands/template/index.js +87 -0
- package/dist/commands/template/resolve.d.ts +31 -0
- package/dist/commands/template/resolve.d.ts.map +1 -0
- package/dist/commands/template/resolve.js +86 -0
- package/dist/fs/io.d.ts +0 -41
- package/dist/fs/io.d.ts.map +1 -1
- package/dist/fs/io.js +2 -414
- package/dist/providers/claude/dispatch-envelope.d.ts.map +1 -1
- package/dist/providers/claude/dispatch-envelope.js +1 -0
- package/dist/providers/claude/targets.d.ts +1 -0
- package/dist/providers/claude/targets.d.ts.map +1 -1
- package/dist/providers/claude/targets.js +3 -1
- package/dist/providers/codex/codec/shared.d.ts +3 -0
- package/dist/providers/codex/codec/shared.d.ts.map +1 -1
- package/dist/providers/codex/codec/shared.js +4 -0
- package/dist/providers/cursor/codec/catalog.d.ts +2 -2
- package/dist/providers/cursor/codec/catalog.d.ts.map +1 -1
- package/dist/providers/cursor/codec/catalog.js +45 -0
- package/dist/providers/cursor/codec/mapping-validation.d.ts +4 -0
- package/dist/providers/cursor/codec/mapping-validation.d.ts.map +1 -0
- package/dist/providers/cursor/codec/mapping-validation.js +25 -0
- package/dist/providers/cursor/codec/materialize.d.ts.map +1 -1
- package/dist/providers/cursor/codec/materialize.js +2 -11
- package/dist/providers/cursor/codec/sync-extension.d.ts.map +1 -1
- package/dist/providers/cursor/codec/sync-extension.js +2 -11
- package/dist/providers/identity/absolute-paths.d.ts +4 -13
- package/dist/providers/identity/absolute-paths.d.ts.map +1 -1
- package/dist/providers/identity/absolute-paths.js +4 -17
- package/dist/providers/identity/generic-dispatch-record.d.ts +1 -1
- package/dist/providers/identity/generic-dispatch-record.js +2 -2
- package/dist/providers/identity/oat-dispatch-record.d.ts +4 -357
- package/dist/providers/identity/oat-dispatch-record.d.ts.map +1 -1
- package/dist/providers/identity/oat-dispatch-record.js +4 -236
- package/dist/release/public-package-contract.d.ts.map +1 -1
- package/dist/release/public-package-contract.js +12 -4
- package/dist/validation/skills.d.ts.map +1 -1
- package/dist/validation/skills.js +32 -6
- package/package.json +2 -2
- package/dist/commands/pjm/template-source.d.ts +0 -14
- package/dist/commands/pjm/template-source.d.ts.map +0 -1
|
@@ -5,7 +5,7 @@ disable-model-invocation: false
|
|
|
5
5
|
user-invocable: true
|
|
6
6
|
allowed-tools: Read, Write, Bash, Glob, Grep
|
|
7
7
|
metadata:
|
|
8
|
-
version: 1.1.
|
|
8
|
+
version: 1.1.3
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
# OAT in Cursor Cloud
|
|
@@ -183,7 +183,7 @@ commands from the target repository or pass their supported project path.
|
|
|
183
183
|
|
|
184
184
|
### Step 3: Resolve Assets with User Scope First
|
|
185
185
|
|
|
186
|
-
Apply one source order independently to every
|
|
186
|
+
Apply one source order independently to every skill and script file:
|
|
187
187
|
|
|
188
188
|
1. user scope;
|
|
189
189
|
2. target-repository scope when the user asset is absent;
|
|
@@ -191,18 +191,30 @@ Apply one source order independently to every asset file:
|
|
|
191
191
|
|
|
192
192
|
User locations:
|
|
193
193
|
|
|
194
|
-
| Asset
|
|
195
|
-
|
|
|
196
|
-
| Skill
|
|
197
|
-
|
|
|
198
|
-
| Script | `~/.oat/scripts/<file>` |
|
|
194
|
+
| Asset | User source |
|
|
195
|
+
| ------ | --------------------------- |
|
|
196
|
+
| Skill | `~/.agents/skills/<skill>/` |
|
|
197
|
+
| Script | `~/.oat/scripts/<file>` |
|
|
199
198
|
|
|
200
|
-
Repository locations are `.agents/skills
|
|
201
|
-
|
|
199
|
+
Repository locations are `.agents/skills/` and `.oat/scripts/` within the
|
|
200
|
+
target repository.
|
|
202
201
|
|
|
203
|
-
|
|
204
|
-
canonical execution tier. Repository copies
|
|
205
|
-
|
|
202
|
+
For skills and scripts, the user tier is provisioned from `@latest` at
|
|
203
|
+
environment boot and is the canonical execution tier. Repository copies of
|
|
204
|
+
skills and scripts in this fleet are not customized; a difference indicates
|
|
205
|
+
staleness, not a local override.
|
|
206
|
+
|
|
207
|
+
Templates are the exception. They resolve repository, then user, then bundled,
|
|
208
|
+
the same order every lifecycle skill uses, because a repository template is an
|
|
209
|
+
owner override. Resolve them only through the CLI, run from the target
|
|
210
|
+
repository:
|
|
211
|
+
|
|
212
|
+
```bash
|
|
213
|
+
oat template resolve <name> --json # report the tier
|
|
214
|
+
oat template resolve <name> --output "<destination>" # copy the template
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
Do not read `~/.oat/templates/` directly or choose a template tier by hand.
|
|
206
218
|
|
|
207
219
|
#### Absolute-path loading contract
|
|
208
220
|
|
|
@@ -213,7 +225,6 @@ Therefore, resolve and read the selected user asset by absolute path as the
|
|
|
213
225
|
|
|
214
226
|
```bash
|
|
215
227
|
USER_SKILLS_ROOT="${HOME}/.agents/skills"
|
|
216
|
-
USER_TEMPLATES_ROOT="${HOME}/.oat/templates"
|
|
217
228
|
USER_SCRIPTS_ROOT="${HOME}/.oat/scripts"
|
|
218
229
|
```
|
|
219
230
|
|
|
@@ -238,8 +249,9 @@ It never chooses the source:
|
|
|
238
249
|
- if freshness is safety-critical, refresh and re-verify before continuing;
|
|
239
250
|
stop if the user tier cannot be refreshed safely.
|
|
240
251
|
|
|
241
|
-
Never silently switch to the repo copy. Apply per-file precedence to
|
|
242
|
-
|
|
252
|
+
Never silently switch to the repo copy. Apply per-file precedence to scripts
|
|
253
|
+
without using skill semver as their arbitration mechanism; templates follow
|
|
254
|
+
`oat template resolve`.
|
|
243
255
|
|
|
244
256
|
### Step 4: Load Cursor Dispatch Context When Needed
|
|
245
257
|
|
|
@@ -328,7 +340,9 @@ separate dispatch surface and snapshot its current catalog. See
|
|
|
328
340
|
- ✅ `oat` was verified before project artifact work.
|
|
329
341
|
- ✅ The project home is anchored inside the target repository in both single-
|
|
330
342
|
and multi-repo environments.
|
|
331
|
-
- ✅ Existing user assets won independently for skills
|
|
343
|
+
- ✅ Existing user assets won independently for skills and scripts.
|
|
344
|
+
- ✅ Templates were resolved through `oat template resolve` (repository, user,
|
|
345
|
+
then bundled).
|
|
332
346
|
- ✅ Skill version comparison verified freshness without changing source.
|
|
333
347
|
- ✅ User assets were read by absolute path as the primary mechanism.
|
|
334
348
|
- ✅ Cursor dispatch mechanics remained delegated to the canonical provider
|
|
@@ -5,7 +5,7 @@ disable-model-invocation: true
|
|
|
5
5
|
user-invocable: false
|
|
6
6
|
allowed-tools: Read
|
|
7
7
|
metadata:
|
|
8
|
-
version: 1.2.
|
|
8
|
+
version: 1.2.12
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
# Dispatching OAT Subagents
|
|
@@ -176,17 +176,9 @@ terminal outcome, not a pre-start rejection, and must be recorded through
|
|
|
176
176
|
`provesNoChildStarted: true`, and no fallback is authorized.
|
|
177
177
|
|
|
178
178
|
The calling workflow records each launch in its own run record (request ID,
|
|
179
|
-
`Dispatch:` stamp, launch status, terminal outcome)
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
```bash
|
|
183
|
-
oat project dispatch record \
|
|
184
|
-
--project "$PROJECT_PATH" \
|
|
185
|
-
--event-file - \
|
|
186
|
-
--json
|
|
187
|
-
```
|
|
188
|
-
|
|
189
|
-
The command validates and persists evidence only. It never launches a provider.
|
|
179
|
+
`Dispatch:` stamp, launch status, terminal outcome); that run record is the
|
|
180
|
+
only launch record. `oat project dispatch record --event-file - --json`
|
|
181
|
+
validates a record and event and writes nothing. It never launches a provider.
|
|
190
182
|
|
|
191
183
|
## Capability and Authorization
|
|
192
184
|
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"description": "Managed Claude validation-only inputs for `oat project dispatch record --event-file <file> --json
|
|
2
|
+
"description": "Managed Claude validation-only inputs for `oat project dispatch record --event-file <file> --json`. Each role key is one complete input. claudeLaunch.resolution is `oat project dispatch-ceiling resolve --provider claude --role <role> --json` output verbatim; claudeLaunch.definition is the generated Claude agent file content; claudeLaunch.payload is the exact launch payload; event is `oat project dispatch canonical-role --json` output. Built from fixture agents, so the definition body, role version, and content digest are illustrative. See record-schema.md, Managed Claude Validation Input.",
|
|
3
3
|
"implementer": {
|
|
4
4
|
"claudeLaunch": {
|
|
5
5
|
"resolution": {
|
|
@@ -110,3 +110,54 @@ Add a service tier or reasoning mode only through controls shown by the current
|
|
|
110
110
|
CLI/schema. Honor the caller's authorization boundary. Record every selector
|
|
111
111
|
as configured invocation evidence; do not infer runtime identity from process
|
|
112
112
|
success alone.
|
|
113
|
+
|
|
114
|
+
## Agent-Limit Rejections and v2 Residency
|
|
115
|
+
|
|
116
|
+
A native spawn rejected with `agent thread limit reached`
|
|
117
|
+
(`AgentLimitReached`) before any child is accepted is a pre-start
|
|
118
|
+
provider/dispatch outcome, not a worker failure, and not by itself evidence of
|
|
119
|
+
cumulative or lifetime thread exhaustion. The v2 lifecycle facts below are
|
|
120
|
+
cited from the openai/codex `rust-v0.159.2` tag; re-check them when the
|
|
121
|
+
installed Codex version changes.
|
|
122
|
+
|
|
123
|
+
- Before returning `AgentLimitReached`, v2 admission tries to unload an eligible
|
|
124
|
+
resident. A resident is eligible only when it is completed, errored, or
|
|
125
|
+
interrupted, has no active turn, has no pending mailbox items, and holds no
|
|
126
|
+
residency lock
|
|
127
|
+
([`residency.rs` L99-L120](https://github.com/openai/codex/blob/rust-v0.159.2/codex-rs/core/src/agent/control/residency.rs#L99-L120),
|
|
128
|
+
[eligibility L266-L272](https://github.com/openai/codex/blob/rust-v0.159.2/codex-rs/core/src/agent/control/residency.rs#L266-L272)).
|
|
129
|
+
A visible completed status does not prove eligibility: status does not
|
|
130
|
+
expose mailbox state, active-turn cleanup, or residency locks.
|
|
131
|
+
- The v2 toolset exposes `interrupt_agent`, which interrupts work but does not
|
|
132
|
+
unregister the agent. Older toolsets expose `close_agent`
|
|
133
|
+
([`spec_plan.rs`](https://github.com/openai/codex/blob/rust-v0.159.2/codex-rs/core/src/tools/spec_plan.rs)).
|
|
134
|
+
Never present `interrupt_agent` as a close or release.
|
|
135
|
+
- A queue-only message to a completed v2 agent can pin it by leaving a pending
|
|
136
|
+
mailbox item
|
|
137
|
+
([openai/codex#32353](https://github.com/openai/codex/issues/32353)). Do not
|
|
138
|
+
message completed agents to clean them up.
|
|
139
|
+
- Reports of completed residents blocking replacement are nondeterministic
|
|
140
|
+
([openai/codex#44351](https://github.com/openai/codex/issues/44351)), and
|
|
141
|
+
older open-thread quota behavior
|
|
142
|
+
([openai/codex#22779](https://github.com/openai/codex/issues/22779)) is a
|
|
143
|
+
different mechanism. Do not conflate either with v2 residency eviction.
|
|
144
|
+
|
|
145
|
+
On a pre-acceptance agent-limit rejection:
|
|
146
|
+
|
|
147
|
+
1. Keep every accepted artifact and record the exact rejection as a
|
|
148
|
+
provider/dispatch outcome.
|
|
149
|
+
2. Inspect the available lifecycle tools and statuses. Release only completed
|
|
150
|
+
agents whose output is already retained, and only through a close or release
|
|
151
|
+
tool the live toolset supports; never close the root or an active required
|
|
152
|
+
lane.
|
|
153
|
+
3. Do not archive or delete sessions to free capacity. Archive availability
|
|
154
|
+
does not prove that it releases a v2 residency slot.
|
|
155
|
+
4. Make at most one admission retry, only when the caller's approved dispatch
|
|
156
|
+
envelope allows retries and after the eligibility check above. A wait result
|
|
157
|
+
or a completed status alone does not justify another attempt.
|
|
158
|
+
5. If admission still fails, use an alternate route only when the caller
|
|
159
|
+
already approved it; otherwise stop and return the partial result for a
|
|
160
|
+
concrete continuation amendment.
|
|
161
|
+
|
|
162
|
+
No retry or route changes model, effort, role behavior, data authority, output
|
|
163
|
+
limits, or reviewer blindness. Never rerun an accepted lane to free capacity.
|
|
@@ -46,8 +46,11 @@ prohibited.
|
|
|
46
46
|
|
|
47
47
|
Outer lifecycle implementer and reviewer dispatch uses the exact
|
|
48
48
|
`providers.cursor.dispatchArgs.variant` returned by the lifecycle resolver.
|
|
49
|
-
The resolver maps an opaque flat model ID
|
|
50
|
-
inside the materialized definition
|
|
49
|
+
The resolver maps an opaque flat model ID to the mapping's explicit frontmatter
|
|
50
|
+
pin inside the materialized definition. Existing families keep their verified
|
|
51
|
+
bracket-form pins; Sonnet 5.5 uses verified exact-ID pins. Each exact ID needs
|
|
52
|
+
its own native evidence and approved registry entry: this is not generic
|
|
53
|
+
pass-through of any CLI catalog ID. Skills never parse, normalize, or
|
|
51
54
|
reconstruct either model string.
|
|
52
55
|
|
|
53
56
|
1. Require a non-empty resolver-returned variant for managed dispatch.
|
|
@@ -212,7 +212,7 @@ selection source.
|
|
|
212
212
|
|
|
213
213
|
Before every managed, effort-pinned Claude implementer or reviewer launch,
|
|
214
214
|
`oat-project-implement` runs `oat project dispatch record --event-file <file>
|
|
215
|
-
--json`
|
|
215
|
+
--json` and requires `status: validated-only`. That input
|
|
216
216
|
replaces `record` with three top-level keys:
|
|
217
217
|
|
|
218
218
|
- `claudeLaunch`, an object with three keys of its own:
|
|
@@ -361,10 +361,10 @@ be traded against another:
|
|
|
361
361
|
strings; and
|
|
362
362
|
- at most 16 KiB serialized per field.
|
|
363
363
|
|
|
364
|
-
The whole record is additionally capped at 64 KiB, measured as the **
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
364
|
+
The whole record is additionally capped at 64 KiB, measured as the **serialized**
|
|
365
|
+
document — the pretty-printed JSON plus trailing newline, not compact
|
|
366
|
+
`JSON.stringify` output. The two differ by roughly a tenth on a nested record,
|
|
367
|
+
so size against the serialized form. Per-field
|
|
368
368
|
projection limits above remain compact measurements, because they bound the
|
|
369
369
|
shape of a field rather than the size of a file. A realistically rich record
|
|
370
370
|
measures a few kilobytes, so these limits bind prompt bodies, transcripts, and
|
|
@@ -376,8 +376,9 @@ cannot fully account for is treated as sensitive rather than classified on a
|
|
|
376
376
|
partial token. Store references, identifiers, and digests; never role content, message bodies,
|
|
377
377
|
or credentials.
|
|
378
378
|
|
|
379
|
-
Absolute filesystem paths are handled by field class, because the
|
|
380
|
-
|
|
379
|
+
Absolute filesystem paths are handled by field class, because the validated
|
|
380
|
+
record is printed verbatim and a caller may copy it into a committed artifact,
|
|
381
|
+
where a home path is permanent:
|
|
381
382
|
|
|
382
383
|
- **Identity and control fields reject them.** `caller`, `scope`, every
|
|
383
384
|
selector, `selected_route`, the `guidance_*` fields, `authority`,
|
|
@@ -3,9 +3,9 @@ name: oat-docs-analyze
|
|
|
3
3
|
description: Run when you need to evaluate documentation structure, navigation, and coverage against the OAT docs app contract. Produces a severity-rated analysis artifact for oat-docs-apply.
|
|
4
4
|
disable-model-invocation: true
|
|
5
5
|
user-invocable: true
|
|
6
|
-
allowed-tools: Read, Write, Bash(git:*), Glob, Grep, AskUserQuestion, Task
|
|
6
|
+
allowed-tools: Read, Write, Bash(git:*), Bash(oat docs nav sync --check:*), Glob, Grep, AskUserQuestion, Task
|
|
7
7
|
metadata:
|
|
8
|
-
version: 1.
|
|
8
|
+
version: 1.6.0
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
# Docs Analysis
|
|
@@ -386,6 +386,31 @@ If a generated root index or manifest exists:
|
|
|
386
386
|
files, and representative links for each finding.
|
|
387
387
|
5. Prefer source-of-truth fixes over generated-file edits.
|
|
388
388
|
|
|
389
|
+
If the app is Fumadocs (a `source.config.ts` beside `docs/`), its sidebar comes from
|
|
390
|
+
`docs/**/meta.json` files that `oat docs nav sync` generates from `## Contents`:
|
|
391
|
+
|
|
392
|
+
1. Flag a docs directory with an `index.md` but no `meta.json` as a missing
|
|
393
|
+
generated artifact.
|
|
394
|
+
2. Flag a `meta.json` whose `pages` order or entries differ from that directory's
|
|
395
|
+
`## Contents` (immediate pages and child folders by name, `index` first in the
|
|
396
|
+
docs root and in any `root: true` folder, other targets as `[Title](url)` link
|
|
397
|
+
entries) as stale; the fix is to rerun `oat docs nav sync`.
|
|
398
|
+
3. Flag a `"..."` or `"z...a"` rest entry as a hand edit; nav sync output is strict.
|
|
399
|
+
4. Flag pages that no `## Contents` map lists: under strict `meta.json` they are
|
|
400
|
+
hidden from the sidebar. Recommend listing them, not adding a rest entry.
|
|
401
|
+
5. During analysis, run only the read-only check, with `--check` first and
|
|
402
|
+
`--target-dir` set to the resolved docs app directory (the directory that
|
|
403
|
+
holds `source.config.ts` and `docs/`, such as `apps/oat-docs`, not its `docs/`
|
|
404
|
+
content root):
|
|
405
|
+
|
|
406
|
+
```bash
|
|
407
|
+
oat docs nav sync --check --target-dir <docs-app-dir>
|
|
408
|
+
```
|
|
409
|
+
|
|
410
|
+
It writes nothing, names stale `meta.json` files and unlisted pages, and exits
|
|
411
|
+
1 when either exists. The skill grants only this `--check` form; plain
|
|
412
|
+
`oat docs nav sync` writes files and is not part of analysis.
|
|
413
|
+
|
|
389
414
|
If `mkdocs.yml` exists:
|
|
390
415
|
|
|
391
416
|
1. Compare nav entries with the docs tree.
|
|
@@ -394,7 +419,7 @@ If `mkdocs.yml` exists:
|
|
|
394
419
|
4. Flag directories whose `index.md` `## Contents` section appears inconsistent with nav structure.
|
|
395
420
|
5. Flag docs guidance that claims structure, plugin support, or workflow rules not backed by current repo evidence.
|
|
396
421
|
|
|
397
|
-
If
|
|
422
|
+
If neither `mkdocs.yml` nor a Fumadocs app exists, record whether the repo should be migrated to an OAT docs app.
|
|
398
423
|
|
|
399
424
|
### Step 7: Severity-Rate Findings
|
|
400
425
|
|
|
@@ -5,7 +5,7 @@ disable-model-invocation: true
|
|
|
5
5
|
user-invocable: true
|
|
6
6
|
allowed-tools: Read, Write, Edit, Bash(git:*), Bash(gh:*), Glob, Grep, AskUserQuestion
|
|
7
7
|
metadata:
|
|
8
|
-
version: 1.3.
|
|
8
|
+
version: 1.3.2
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
# Docs Apply
|
|
@@ -34,7 +34,7 @@ Generate or update documentation files from a docs analysis artifact, with expli
|
|
|
34
34
|
**ALLOWED Activities:**
|
|
35
35
|
|
|
36
36
|
- Reading analysis artifacts and the current docs surface.
|
|
37
|
-
- Creating or updating docs files and `mkdocs.yml` when approved.
|
|
37
|
+
- Creating or updating docs files and `mkdocs.yml` when approved. Fumadocs `meta.json` files change only through `oat docs nav sync`.
|
|
38
38
|
- Running `oat docs nav sync` after approved structural changes.
|
|
39
39
|
- Creating branches, commits, and optional PRs.
|
|
40
40
|
|
|
@@ -203,7 +203,7 @@ For each approved recommendation:
|
|
|
203
203
|
When approved actions involve docs app creation or nav updates:
|
|
204
204
|
|
|
205
205
|
- Use `oat docs init` for scaffolding when appropriate.
|
|
206
|
-
- Use `oat docs nav sync` instead of manually editing nav when the CLI helper can generate it.
|
|
206
|
+
- Use `oat docs nav sync` instead of manually editing nav when the CLI helper can generate it. In Fumadocs apps it writes strict `meta.json` files and reports pages no `## Contents` map lists (`unlisted` in `--json`); resolve a reported page through an approved `## Contents` change, never by hand-editing `meta.json`.
|
|
207
207
|
|
|
208
208
|
Negative rules:
|
|
209
209
|
|
|
@@ -60,8 +60,11 @@ authored docs tree. Treat it as generated output.
|
|
|
60
60
|
- Asset-only directories do not need `index.md` unless local guidance says so.
|
|
61
61
|
- Build output, hidden tool directories, and generated artifacts are not content
|
|
62
62
|
directories.
|
|
63
|
-
-
|
|
64
|
-
|
|
63
|
+
- Fumadocs `meta.json` files are generated by `oat docs nav sync` from each
|
|
64
|
+
directory's `## Contents`, not hand-authored. After structural changes, rerun
|
|
65
|
+
nav sync and commit the result; it never adds a `"..."` rest entry, so list a
|
|
66
|
+
page in `## Contents` to show it in the sidebar. Keys nav sync does not own,
|
|
67
|
+
such as `icon` or `defaultOpen`, may be added by hand and are preserved.
|
|
65
68
|
- Preserve local audience routers, ownership notes, and app-shell
|
|
66
69
|
customizations.
|
|
67
70
|
|
|
@@ -6,7 +6,7 @@ disable-model-invocation: true
|
|
|
6
6
|
user-invocable: true
|
|
7
7
|
allowed-tools: Read, Write, Edit, Bash, Glob, Grep, AskUserQuestion
|
|
8
8
|
metadata:
|
|
9
|
-
version: 1.2.
|
|
9
|
+
version: 1.2.2
|
|
10
10
|
---
|
|
11
11
|
|
|
12
12
|
# Docs Bootstrap
|
|
@@ -930,10 +930,11 @@ Narrate:
|
|
|
930
930
|
|
|
931
931
|
- **The authored source** at `<appRoot>/docs/index.md`. This is the file the user edits. It has frontmatter (`title`, `description`) and a `## Contents` section listing direct children of the docs root. It is the top of a fractal: every directory has its own `index.md`, each with its own `## Contents`.
|
|
932
932
|
- **The Fumadocs generated map** at `<appRoot>/index.md`. Regenerated on every `predev` / `prebuild` by the `oat docs generate-index` command. Machine-shaped: inventories Markdown files with titles and descriptions so tools have a single searchable map. **Hand-edits are silently clobbered.**
|
|
933
|
+
- **The Fumadocs sidebar navigation** in `<appRoot>/docs/**/meta.json`. `oat docs nav sync` writes one per docs directory from that directory's `## Contents` order, and the files are committed. Navigation is strict: a page no `## Contents` map lists stays out of the sidebar and the command reports it, so the fix is to list the page, never to edit `meta.json` by hand.
|
|
933
934
|
- **The MkDocs derived nav** in `mkdocs.yml` `nav:`. MkDocs does not use a Fumadocs-style generated app-root manifest; its generated/derived navigation boundary is the YAML nav block.
|
|
934
935
|
- **How to tell them apart when opening a file.** If the file sits inside `docs/`, it's authored. If it sits at `<appRoot>/index.md` (outside `docs/`), it's the Fumadocs generated manifest — and when the CLI wrote the warning correctly, the first line is `<!-- AUTOGENERATED by \`oat docs generate-index\`... -->`.
|
|
935
936
|
|
|
936
|
-
End with: "Always edit `docs/index.md` and the `## Contents` sections. In Fumadocs, never edit the root-level `index.md` — your edits will disappear next build. In MkDocs, treat `mkdocs.yml` `nav:` as derived from authored Contents unless the local workflow says otherwise."
|
|
937
|
+
End with: "Always edit `docs/index.md` and the `## Contents` sections. In Fumadocs, never edit the root-level `index.md` — your edits will disappear next build — and regenerate `meta.json` with `oat docs nav sync` instead of editing it. In MkDocs, treat `mkdocs.yml` `nav:` as derived from authored Contents unless the local workflow says otherwise."
|
|
937
938
|
|
|
938
939
|
#### Section C (both frameworks) — The `## Contents` contract
|
|
939
940
|
|
|
@@ -944,7 +945,7 @@ Narrate:
|
|
|
944
945
|
- **Every directory under `docs/` has an `index.md`.** No exceptions, no `overview.md`, no README-as-index. Missing `index.md`s are the first thing `oat-docs-analyze` flags.
|
|
945
946
|
- **Every `index.md` has a `## Contents` section.** The section is a plain Markdown bulleted list of links to the direct children of that directory — both subdirectory `index.md`s and leaf pages.
|
|
946
947
|
- **Link targets use `.md` extensions.** Leaf pages link as `[Title](page.md)`; subdirectories link as `[Section](subdir/index.md)`. The `@open-agent-toolkit/docs-transforms` remark-links plugin normalizes these at build time for Fumadocs routing (`.md` stripped; `dir/index.md` collapsed to `dir`). `.md`-suffixed authored links render correctly **and** let agents follow each link to the target file without path inference — the best of both worlds.
|
|
947
|
-
- **The `## Contents` section is the machine-readable local map.** For Fumadocs, it
|
|
948
|
+
- **The `## Contents` section is the machine-readable local map.** For Fumadocs, `oat docs nav sync` reads it to write the committed `meta.json` sidebar files, and agents compare it against the generated app-root manifest. For MkDocs, `oat docs nav sync` reads it to update `mkdocs.yml` `nav:`. `oat-docs-analyze` reads the same authored source to find orphaned pages and stale generated artifacts.
|
|
948
949
|
- **Anything not listed in `## Contents` is invisible to the tooling.** Adding a Markdown file is not enough — it must also appear under the parent `index.md`'s `## Contents`.
|
|
949
950
|
|
|
950
951
|
Show the user their own `docs/index.md` `## Contents` as a concrete example (read the file and paste the relevant 5–15 lines). If `patchesApplied` includes an `FP-16` entry with `status: 'applied'`, mention it — the skill rewrote the scaffold's extension-less links to `.md`-suffixed form so agents can follow them. Then note: "That's the pattern. Every directory you create from now on follows the same shape — `.md`-suffixed links, bulleted list, dash-separated summary per entry."
|
|
@@ -12,13 +12,13 @@ This file tells agents how to work inside `{{APP_DIR}}`, the documentation app f
|
|
|
12
12
|
2. Add frontmatter with at minimum `title:` and `description:`. The title drives nav display and page `<title>`; the description drives search previews, social cards, and sibling summaries. Empty descriptions hurt all three.
|
|
13
13
|
3. Update the nearest `index.md`'s `## Contents` section to include a link to the new page. Use `.md`-suffixed relative links: `[Title](page.md)` for leaf pages, `[Section](subdir/index.md)` for subdirectories. The `@open-agent-toolkit/docs-transforms` remark-links plugin normalizes these for Fumadocs routing at build time (strips `.md`, collapses `dir/index.md` → `dir`), so the suffixed form renders correctly **and** lets agents follow links to the target file without path inference. The `## Contents` section is the machine-readable local map — anything not listed there is effectively invisible to the navigation tooling.
|
|
14
14
|
4. If the new page introduces a new subdirectory, create an `index.md` in that subdirectory with its own `## Contents` section. Every content directory must have an `index.md`.
|
|
15
|
-
5. Regenerate the derived navigation
|
|
15
|
+
5. Regenerate the derived navigation artifacts for this framework. For Fumadocs, run `oat docs nav sync` (from the app directory, or with `--target-dir <app-dir>`) so the committed `docs/**/meta.json` sidebar files follow authored `## Contents`, and run the generated-index command (`{{GENERATE_INDEX_CMD}}`) so the app-root `index.md` manifest reflects the current Markdown file tree. Fumadocs nav sync is strict: a page no `## Contents` map lists stays out of the sidebar and is reported, so list the new page rather than editing `meta.json`. For MkDocs, run `oat docs nav sync` or the local equivalent so `mkdocs.yml` `nav:` reflects authored `## Contents`. Derived artifacts never replace the authored `## Contents`; keep authored maps current and compare generated output against them when checking freshness.
|
|
16
16
|
|
|
17
17
|
## When you need to restructure navigation
|
|
18
18
|
|
|
19
19
|
1. Make changes in the authored `## Contents` sections of each affected `index.md`. That is the authoritative local map.
|
|
20
|
-
2. Do **not** hand-edit generated navigation artifacts. The Fumadocs app-root `index.md` manifest, `mkdocs.yml` `nav:` (for MkDocs), and any other derived nav file is rewritten by the local generation workflow.
|
|
21
|
-
3. After editing `## Contents`, run the framework's generation command to refresh derived artifacts.
|
|
20
|
+
2. Do **not** hand-edit generated navigation artifacts. The Fumadocs app-root `index.md` manifest, Fumadocs `meta.json` files, `mkdocs.yml` `nav:` (for MkDocs), and any other derived nav file is rewritten by the local generation workflow.
|
|
21
|
+
3. After editing `## Contents`, run `oat docs nav sync` and the framework's generation command to refresh derived artifacts.
|
|
22
22
|
4. If you're moving pages between directories, update both source and destination `index.md` `## Contents` entries in the same commit so the site isn't broken mid-way through history.
|
|
23
23
|
5. If you're reparenting an entire subtree, consider whether the moved directory's own `index.md` needs a revised "scope" paragraph.
|
|
24
24
|
|
|
@@ -5,7 +5,7 @@ disable-model-invocation: false
|
|
|
5
5
|
user-invocable: true
|
|
6
6
|
allowed-tools: Read, Write, Bash, Glob, Grep, AskUserQuestion
|
|
7
7
|
metadata:
|
|
8
|
-
version: 1.1.
|
|
8
|
+
version: 1.1.2
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
# Record Repo Decision
|
|
@@ -90,7 +90,8 @@ The CLI:
|
|
|
90
90
|
|
|
91
91
|
- Generates a deterministic `DR-YYMMDD-slug` ID from the creation date and title.
|
|
92
92
|
- Writes one record file whose filename stem equals the ID.
|
|
93
|
-
- Strips template frontmatter and seeds the body from
|
|
93
|
+
- Strips template frontmatter and seeds the body from the `decision.md` template, resolved
|
|
94
|
+
repository (`.oat/templates/`), then user (`~/.oat/templates/`), then bundled.
|
|
94
95
|
- Regenerates the managed decision index.
|
|
95
96
|
|
|
96
97
|
The slug is **capped at 30 characters** at the last whole-word boundary, with trailing
|