@open-agent-toolkit/cli 0.3.8 → 0.3.10
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 +3 -3
- package/assets/agents/oat-codebase-mapper.md +3 -2
- package/assets/agents/oat-reviewer.md +5 -13
- package/assets/agents/skeptical-evaluator.md +6 -2
- package/assets/bundle-metadata.json +1 -1
- package/assets/config/dispatch-matrix-recommendation.json +6 -6
- package/assets/docs/cli-utilities/backlog-lifecycle.md +3 -2
- package/assets/docs/cli-utilities/bootstrap.md +5 -2
- package/assets/docs/cli-utilities/config-and-local-state.md +13 -6
- package/assets/docs/cli-utilities/configuration.md +22 -17
- package/assets/docs/cli-utilities/tool-packs.md +60 -10
- package/assets/docs/cli-utilities/workflow-gates.md +1 -1
- package/assets/docs/contributing/code.md +9 -5
- package/assets/docs/contributing/updating-model-guidance.md +34 -6
- package/assets/docs/contributing/verifying-cursor-pins.md +38 -9
- package/assets/docs/provider-sync/commands.md +11 -8
- package/assets/docs/provider-sync/instruction-sync.md +241 -39
- package/assets/docs/provider-sync/providers.md +4 -4
- package/assets/docs/provider-sync/scope-and-surface.md +1 -1
- package/assets/docs/reference/cli-reference.md +2 -0
- package/assets/docs/reference/oat-directory-structure.md +12 -11
- package/assets/docs/reference/troubleshooting.md +19 -4
- package/assets/docs/workflows/projects/dispatch-ceiling.md +21 -14
- package/assets/docs/workflows/projects/implementation-execution.md +26 -9
- package/assets/docs/workflows/projects/lifecycle.md +4 -6
- package/assets/public-package-versions.json +4 -4
- package/assets/skills/oat-agent-instructions-analyze/SKILL.md +4 -4
- package/assets/skills/oat-agent-instructions-analyze/references/analysis-artifact-template.md +5 -5
- package/assets/skills/oat-agent-instructions-analyze/references/docs/rules-files.md +14 -11
- package/assets/skills/oat-agent-instructions-analyze/references/quality-checklist.md +2 -2
- package/assets/skills/oat-agent-instructions-analyze/scripts/resolve-instruction-files.sh +4 -3
- package/assets/skills/oat-agent-instructions-apply/SKILL.md +3 -3
- package/assets/skills/oat-agent-instructions-apply/references/docs/rules-files.md +14 -11
- package/assets/skills/oat-dispatch-subagents/SKILL.md +1 -1
- package/assets/skills/oat-dispatch-subagents/references/provider-cursor.md +5 -2
- package/assets/skills/oat-doctor/SKILL.md +17 -13
- package/assets/skills/oat-project-implement/SKILL.md +2 -2
- package/assets/skills/oat-project-implement/references/completion-and-closeout.md +33 -11
- package/assets/skills/oat-project-implement/references/dispatch-and-dry-run.md +1 -1
- package/assets/skills/oat-project-implement/references/phase-execution.md +109 -8
- package/assets/skills/oat-project-lite/SKILL.md +23 -1
- package/assets/skills/oat-project-next/SKILL.md +3 -3
- package/assets/skills/oat-project-plan-writing/SKILL.md +3 -3
- package/assets/skills/oat-project-progress/SKILL.md +2 -2
- 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/docs-app-mkdocs/docs/contributing.md +1 -3
- package/assets/templates/pjm-agents.md +7 -3
- package/assets/templates/state.md +2 -2
- package/dist/commands/backlog/archive.d.ts +10 -2
- package/dist/commands/backlog/archive.d.ts.map +1 -1
- package/dist/commands/backlog/archive.js +22 -6
- package/dist/commands/backlog/index.d.ts.map +1 -1
- package/dist/commands/backlog/index.js +5 -1
- package/dist/commands/backlog/rewrite-references.d.ts +41 -0
- package/dist/commands/backlog/rewrite-references.d.ts.map +1 -0
- package/dist/commands/backlog/rewrite-references.js +516 -0
- package/dist/commands/config/index.d.ts +1 -0
- package/dist/commands/config/index.d.ts.map +1 -1
- package/dist/commands/config/index.js +69 -34
- package/dist/commands/init/index.d.ts +6 -0
- package/dist/commands/init/index.d.ts.map +1 -1
- package/dist/commands/init/index.js +27 -4
- package/dist/commands/init/tools/index.d.ts +18 -1
- package/dist/commands/init/tools/index.d.ts.map +1 -1
- package/dist/commands/init/tools/index.js +84 -17
- package/dist/commands/init/tools/project-guidance.d.ts +19 -4
- package/dist/commands/init/tools/project-guidance.d.ts.map +1 -1
- package/dist/commands/init/tools/project-guidance.js +58 -15
- package/dist/commands/init/tools/workflows/index.d.ts.map +1 -1
- package/dist/commands/init/tools/workflows/index.js +5 -1
- package/dist/commands/instructions/instructions.types.d.ts +105 -4
- package/dist/commands/instructions/instructions.types.d.ts.map +1 -1
- package/dist/commands/instructions/instructions.types.js +4 -5
- package/dist/commands/instructions/instructions.utils.d.ts +161 -6
- package/dist/commands/instructions/instructions.utils.d.ts.map +1 -1
- package/dist/commands/instructions/instructions.utils.js +650 -12
- package/dist/commands/instructions/sync/sync.d.ts.map +1 -1
- package/dist/commands/instructions/sync/sync.js +256 -18
- package/dist/commands/instructions/validate/validate.d.ts.map +1 -1
- package/dist/commands/instructions/validate/validate.js +36 -8
- package/dist/commands/pjm/index.d.ts.map +1 -1
- package/dist/commands/pjm/index.js +19 -4
- package/dist/commands/pjm/init.d.ts +3 -0
- package/dist/commands/pjm/init.d.ts.map +1 -1
- package/dist/commands/pjm/init.js +23 -5
- package/dist/commands/shared/agents-md.d.ts +26 -5
- package/dist/commands/shared/agents-md.d.ts.map +1 -1
- package/dist/commands/shared/agents-md.js +182 -3
- package/dist/commands/tools/guidance/index.d.ts +15 -0
- package/dist/commands/tools/guidance/index.d.ts.map +1 -0
- package/dist/commands/tools/guidance/index.js +81 -0
- package/dist/commands/tools/index.d.ts.map +1 -1
- package/dist/commands/tools/index.js +2 -0
- package/dist/config/oat-config.d.ts +49 -3
- package/dist/config/oat-config.d.ts.map +1 -1
- package/dist/config/oat-config.js +107 -14
- package/dist/config/resolve.d.ts.map +1 -1
- package/dist/config/resolve.js +12 -2
- 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/package.json +2 -2
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Open Agent Toolkit command-line interface for provider sync, docs tooling, workflow utilities, and diagnostics.
|
|
4
4
|
|
|
5
|
-
The CLI also supports project-scoped instruction sync for nested `AGENTS.md`
|
|
5
|
+
The CLI also supports project-scoped instruction sync for nested `AGENTS.md` files. By default it creates no `CLAUDE.md` shims, because Claude Code reads `AGENTS.md` itself, and removes the shims OAT created earlier once no `CLAUDE.md` with its own content remains; pointer, symlink, and hard-copy shim strategies are opt-in through `instructions.claude.shims`, and Claude-only `CLAUDE.md` files are adopted into `AGENTS.md`.
|
|
6
6
|
|
|
7
7
|
## Install
|
|
8
8
|
|
|
@@ -28,8 +28,8 @@ oat config describe
|
|
|
28
28
|
Additional useful entry points:
|
|
29
29
|
|
|
30
30
|
- `oat tools install`
|
|
31
|
-
- `oat instructions validate
|
|
32
|
-
- `oat instructions sync --dry-run
|
|
31
|
+
- `oat instructions validate`
|
|
32
|
+
- `oat instructions sync --dry-run`
|
|
33
33
|
- `oat docs init --app-name my-docs`
|
|
34
34
|
- `oat pjm init` - initialize the project-management repo-reference surface after installing the pack
|
|
35
35
|
- `oat config dump --json`
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-codebase-mapper
|
|
3
|
-
version: 1.0.
|
|
3
|
+
version: 1.0.2
|
|
4
4
|
description: Explores codebase and writes structured analysis documents. Spawned by oat-repo-knowledge-index with a focus area (tech, arch, quality, concerns). Writes documents directly to reduce orchestrator context load.
|
|
5
5
|
tools: Read, Bash, Grep, Glob, Write
|
|
6
6
|
color: cyan
|
|
@@ -243,11 +243,12 @@ Return a brief confirmation. DO NOT include document contents.
|
|
|
243
243
|
|
|
244
244
|
Format:
|
|
245
245
|
|
|
246
|
-
```
|
|
246
|
+
```markdown
|
|
247
247
|
## Mapping Complete
|
|
248
248
|
|
|
249
249
|
**Focus:** {focus}
|
|
250
250
|
**Documents written:**
|
|
251
|
+
|
|
251
252
|
- `.oat/repo/knowledge/{DOC1}.md` ({N} lines)
|
|
252
253
|
- `.oat/repo/knowledge/{DOC2}.md` ({N} lines)
|
|
253
254
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-reviewer
|
|
3
|
-
version: 1.2.
|
|
3
|
+
version: 1.2.10
|
|
4
4
|
description: Unified reviewer for OAT projects - mode-aware verification of requirements/design alignment and code quality. Writes a review artifact to disk by default, or returns structured findings in-memory when dispatched in structured-output mode.
|
|
5
5
|
tools: Read, Bash, Grep, Glob, Write, Task
|
|
6
6
|
color: yellow
|
|
@@ -98,7 +98,7 @@ When delegation is eligible:
|
|
|
98
98
|
Mechanical workers may execute checks and report exact output, but interpretation and policy judgment require stronger classes or stay with the root reviewer.
|
|
99
99
|
|
|
100
100
|
5. The generic dispatch contract owns capability, catalog, model, effort, route, authorization, launch evidence, class-floor selection, and floor-satisfaction evidence. It applies active user and repository instructions, the active-provider reference, the live nested catalog, and the supplied policy/ceiling. Select an explicit target meeting the declared floor; never silently inherit the primary reviewer's model and never hard-code provider model names. Prefer a cheaper/faster worker only when the host reliably exposes that control and the target still satisfies the floor.
|
|
101
|
-
6.
|
|
101
|
+
6. Launch every lane as an ordinary read-only sub-agent through the generic dispatch contract. The `recon` skill's evidence-packet worker and its assignment machinery belong to that skill alone; reviewer lanes never use them. When a lane cannot be launched within these limits, record the attempt as not attempted or failed as appropriate and cover the lane inline.
|
|
102
102
|
7. Give each lane an exact scope and a compact return contract: coverage, checks performed, exact `file:line` evidence, gaps, and explicit uncertainty. Reports are advisory candidate observations, not accepted findings.
|
|
103
103
|
8. Workers must not mutate files, emit final findings, assign severity, make validation decisions, write review artifacts or `StructuredFindings`, or otherwise write either output sink.
|
|
104
104
|
|
|
@@ -499,8 +499,6 @@ Run these to verify the implementation:
|
|
|
499
499
|
Run the `oat-project-review-receive` skill to convert findings into plan tasks.
|
|
500
500
|
````
|
|
501
501
|
|
|
502
|
-
```
|
|
503
|
-
|
|
504
502
|
Gate parsing contract: artifact-mode reviews, including reviews spawned by `oat gate review`, MUST include either the complete `Findings by severity: {N} critical, {N} high, {N} medium, {N} low` count line or the standard `## Findings` sections shown above with every severity subsection present. When more than one count source is present — the frontmatter count fields, the count line, and the sections — the counts must agree; the gate refuses an artifact whose sources contradict each other rather than picking one. How a section is counted is load-bearing: the gate counts only markdown list items (`- `, `* `, `+ `, or `1. `) as findings. A finding written as a bold paragraph, a heading, or any other prose shape counts as zero, so a section of prose findings under a non-zero count line is a contradiction and the gate refuses the artifact — the entire review is rejected, not just the miscounted section.
|
|
505
503
|
|
|
506
504
|
For every artifact-mode code review, `oat_review_head_sha` is required and must be the full 40-character commit SHA at the head of the authoritative review range. Resolve it with `git rev-parse <authoritative-range-head>^{commit}`. An abbreviated SHA, symbolic ref, or range string is invalid. When the review narrowed, `oat_review_range`, `oat_prior_review_artifact`, and `oat_prior_review_head_sha` are also required; the prior head must likewise be a full 40-character SHA. These code-review fields are independent of the gate-only block and do not apply to artifact, analysis, or structured-output reviews.
|
|
@@ -509,7 +507,6 @@ For a narrowed review, do not restate requirements-coverage claims that this pas
|
|
|
509
507
|
|
|
510
508
|
For gate-originated artifacts, all six gate-only fields are required when the prompt supplies gate context. Copy the values exactly. Do not parse the provider command, infer values from the target id, or replace configured values with observed/self-reported identity. Any optional self-report belongs in review prose and is non-authoritative; the gate validates the copied frontmatter against its immutable configured invocation record before applying severity thresholds.
|
|
511
509
|
|
|
512
|
-
|
|
513
510
|
### Step 9: Return Confirmation
|
|
514
511
|
|
|
515
512
|
**Artifact mode only.** In structured-output mode (`oat_output_mode: structured`), return the `StructuredFindings` object instead — see **Structured-Output Mode** below.
|
|
@@ -520,8 +517,8 @@ Return exactly one reconnaissance status line using only `attempted` or
|
|
|
520
517
|
attempted, including an attempted launch that fell back or failed.
|
|
521
518
|
|
|
522
519
|
Format:
|
|
523
|
-
```
|
|
524
520
|
|
|
521
|
+
```markdown
|
|
525
522
|
## Review Complete
|
|
526
523
|
|
|
527
524
|
**Scope:** {scope}
|
|
@@ -530,8 +527,7 @@ Format:
|
|
|
530
527
|
**Reconnaissance:** {attempted | not-attempted}
|
|
531
528
|
|
|
532
529
|
Return to your main session and run the `oat-project-review-receive` skill.
|
|
533
|
-
|
|
534
|
-
````
|
|
530
|
+
```
|
|
535
531
|
|
|
536
532
|
## Structured-Output Mode
|
|
537
533
|
|
|
@@ -556,7 +552,7 @@ interface StructuredFindings {
|
|
|
556
552
|
}>;
|
|
557
553
|
verification_commands: string[]; // commands the caller can run to verify fixes — returned as an array, NOT appended to a file
|
|
558
554
|
}
|
|
559
|
-
|
|
555
|
+
```
|
|
560
556
|
|
|
561
557
|
**Rules for the structured return:**
|
|
562
558
|
|
|
@@ -595,7 +591,3 @@ Default behavior is unaffected: when `oat_output_mode` is absent or set to anyth
|
|
|
595
591
|
- [ ] Findings have actionable fix guidance
|
|
596
592
|
- [ ] Verification commands included
|
|
597
593
|
- [ ] Brief confirmation returned (artifact mode) / `StructuredFindings` object returned (structured-output mode)
|
|
598
|
-
|
|
599
|
-
```
|
|
600
|
-
|
|
601
|
-
```
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: skeptical-evaluator
|
|
3
|
-
version: 1.0.
|
|
3
|
+
version: 1.0.1
|
|
4
4
|
description: Adversarial claim evaluator — receives a context package and gathers evidence to disprove then support a claim. Returns structured findings with citations.
|
|
5
5
|
tools: Read, Bash, Grep, Glob, WebSearch, WebFetch
|
|
6
6
|
color: red
|
|
@@ -78,21 +78,25 @@ Return findings to the orchestrator using the output structure below. Do NOT wri
|
|
|
78
78
|
|
|
79
79
|
Return inline findings to the orchestrator in this structure:
|
|
80
80
|
|
|
81
|
-
```
|
|
81
|
+
```markdown
|
|
82
82
|
## Evidence
|
|
83
83
|
|
|
84
84
|
### Contradicting Evidence
|
|
85
|
+
|
|
85
86
|
{Each piece with specific citation — file:line, URL, version, etc.}
|
|
86
87
|
{Or "None found after searching: [list of sources checked]"}
|
|
87
88
|
|
|
88
89
|
### Supporting Evidence
|
|
90
|
+
|
|
89
91
|
{Each piece with specific citation}
|
|
90
92
|
{Or "None found"}
|
|
91
93
|
|
|
92
94
|
### Evidence Quality Assessment
|
|
95
|
+
|
|
93
96
|
{How reliable the evidence is — direct vs indirect, authoritative vs anecdotal}
|
|
94
97
|
|
|
95
98
|
## Preliminary Assessment
|
|
99
|
+
|
|
96
100
|
{Lean toward one of: holds_up | skepticism_warranted | nuanced | inconclusive}
|
|
97
101
|
{Brief reasoning for the lean}
|
|
98
102
|
{Confidence estimate: X%}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{
|
|
2
|
-
"version": "2026-
|
|
2
|
+
"version": "2026-10-01.1",
|
|
3
3
|
"providers": {
|
|
4
4
|
"codex": {
|
|
5
5
|
"economy": {
|
|
@@ -39,17 +39,17 @@
|
|
|
39
39
|
"candidates": [
|
|
40
40
|
{
|
|
41
41
|
"harness": "codex",
|
|
42
|
-
"model": "gpt-6-sol",
|
|
42
|
+
"model": "gpt-6.1-sol",
|
|
43
43
|
"effort": "low"
|
|
44
44
|
},
|
|
45
45
|
{
|
|
46
46
|
"harness": "codex",
|
|
47
|
-
"model": "gpt-6-sol",
|
|
47
|
+
"model": "gpt-6.1-sol",
|
|
48
48
|
"effort": "medium"
|
|
49
49
|
},
|
|
50
50
|
{
|
|
51
51
|
"harness": "codex",
|
|
52
|
-
"model": "gpt-6-sol",
|
|
52
|
+
"model": "gpt-6.1-sol",
|
|
53
53
|
"effort": "high"
|
|
54
54
|
}
|
|
55
55
|
]
|
|
@@ -58,7 +58,7 @@
|
|
|
58
58
|
"candidates": [
|
|
59
59
|
{
|
|
60
60
|
"harness": "codex",
|
|
61
|
-
"model": "gpt-6-sol",
|
|
61
|
+
"model": "gpt-6.1-sol",
|
|
62
62
|
"effort": "xhigh"
|
|
63
63
|
},
|
|
64
64
|
{
|
|
@@ -80,7 +80,7 @@
|
|
|
80
80
|
"haiku",
|
|
81
81
|
{
|
|
82
82
|
"harness": "claude",
|
|
83
|
-
"model": "claude-sonnet-5",
|
|
83
|
+
"model": "claude-sonnet-5-5",
|
|
84
84
|
"effort": "medium"
|
|
85
85
|
}
|
|
86
86
|
]
|
|
@@ -56,9 +56,10 @@ A single `oat backlog archive` run performs the whole close-out so its parts can
|
|
|
56
56
|
1. Sets the terminal `status` (`closed` by default, `wont_do` with `--wont-do`) and stamps `updated`.
|
|
57
57
|
2. Validates and trims a nonblank `--summary` before mutating a `closed` item, then appends its canonical newest-first `completed.md` entry. `wont_do` items may omit the summary and get an entry only when one is provided.
|
|
58
58
|
3. Moves `items/<id>.md` into `archived/` — with `git mv` inside a work tree, or a plain rename outside git.
|
|
59
|
-
4.
|
|
59
|
+
4. Rewrites inbound references to the moved file across Markdown under `.oat/repo/**` (tracked and untracked files that Git does not ignore; a code span whose whole content is the item's path, such as an external plan's source citation, is rewritten, while other code spans and fenced code are left as written with a warning) — external plans, decision records, and other backlog items — so no link dangles at `items/<id>.md`, and reports each rewritten file. A reference it cannot resolve is left alone with a warning.
|
|
60
|
+
5. Regenerates the managed backlog index.
|
|
60
61
|
|
|
61
|
-
The command is safe to re-run: an item already in `archived/` produces a no-op warning
|
|
62
|
+
The command is safe to re-run: an item already in `archived/` produces a no-op warning and only retries the reference rewrite and index regeneration, so an interrupted close-out finishes on the next run. A missing closed-item summary or an out-of-enum current status (for example a hand-set `done`) is a hard error before mutation and includes recovery guidance. See the [command reference](config-and-local-state.md#oat-backlog-archive) for exit codes and the `--json` payload.
|
|
62
63
|
|
|
63
64
|
## Catching lifecycle drift
|
|
64
65
|
|
|
@@ -47,7 +47,7 @@ After core initialization completes, `oat init` can enter an interactive guided
|
|
|
47
47
|
- choose **Yes** to run the per-pack scope selector for every pack that allows both scopes (`ideas`, `docs`, `workflows`, `utility`, `project-management`, `research`, `brainstorm`)
|
|
48
48
|
- choose **No** to apply additive per-pack defaults without extra scope prompts
|
|
49
49
|
- on a fresh install every pack defaults to **user** scope, so capabilities follow you across repositories; an existing install keeps its current placement
|
|
50
|
-
- after placement is chosen, repository `AGENTS.md` guidance is a separate opt-in. Accepting creates the managed `OAT tools` section
|
|
50
|
+
- after placement is chosen, repository `AGENTS.md` guidance is a separate opt-in. Accepting creates the root file with the managed `OAT tools` section when it is absent, and appends that section to an existing file or contained symlink target that lacks it, with one append-only write. An existing file is never replaced: when the section exists but differs, OAT prints a repository-relative, copy-pasteable managed-block patch instead. Declining leaves `AGENTS.md` unchanged
|
|
51
51
|
- installing `project-management` installs the capability only. Adopting it for this repository is a third, separate choice made with `oat pjm init` — see [Install vs. initialize](tool-packs.md#install-vs-initialize)
|
|
52
52
|
2. **Local paths** — multi-select from default gitignored artifact paths (analysis, PR, reviews, ideas). Pre-existing paths are pre-checked; only new paths are added.
|
|
53
53
|
3. **Documentation** — detect or enter docs metadata for the repo when documentation exists.
|
|
@@ -65,9 +65,12 @@ Hook install note:
|
|
|
65
65
|
# Explicit guided setup on an existing repo
|
|
66
66
|
oat init --setup --scope project
|
|
67
67
|
|
|
68
|
-
# Install capabilities and create or propose repository guidance
|
|
68
|
+
# Install capabilities and create, append, or propose repository guidance
|
|
69
69
|
oat init --setup --project-guidance
|
|
70
70
|
|
|
71
|
+
# Write guidance for the packs already installed, without guided setup
|
|
72
|
+
oat init --project-guidance
|
|
73
|
+
|
|
71
74
|
# Fresh init — guided setup is offered automatically
|
|
72
75
|
oat init --scope project
|
|
73
76
|
```
|
|
@@ -17,7 +17,7 @@ Use the `oat backlog` group when you want direct CLI support for the file-backed
|
|
|
17
17
|
- `oat backlog new <title>` - validate and create a file-backed backlog item from the canonical template, then regenerate the managed index
|
|
18
18
|
- `oat backlog generate-id <title>` - generate a deterministic `BL-YYMMDD-slug` backlog ID from a title
|
|
19
19
|
- `oat backlog generate-id <title> --created-at <timestamp>` - generate a reproducible ID for a known creation timestamp
|
|
20
|
-
- `oat backlog archive <id>` - atomic close-out: set a terminal status, record the completion in `completed.md`, move the item into `archived/`, and regenerate the index in one step
|
|
20
|
+
- `oat backlog archive <id>` - atomic close-out: set a terminal status, record the completion in `completed.md`, move the item into `archived/`, rewrite inbound `.oat/repo` references to the moved file, and regenerate the index in one step
|
|
21
21
|
- `oat backlog regenerate-index` - rebuild the managed backlog index table from item frontmatter
|
|
22
22
|
|
|
23
23
|
Backlog IDs are deterministic date+slug identifiers (`BL-YYMMDD-slug`) derived from the creation date and title, so two machines or worktrees produce the same ID for the same record without scanning the local checkout. The slug is capped at 30 characters at the last whole-word boundary (with trailing stop-words trimmed), so prefer concise, meaningful titles. Index regeneration is deterministic and safe to re-run when resolving an index merge conflict.
|
|
@@ -52,8 +52,9 @@ The command validates all inputs before creating the scaffold or writing an item
|
|
|
52
52
|
- For the default `closed` path, validates and trims a nonblank `--summary` before any file or index mutation. The `wont_do` path may omit the summary and completion-ledger entry.
|
|
53
53
|
- Rewrites only the `status:` and `updated:` frontmatter lines (preserving any inline enum comment), then moves the item from `items/` to `archived/` with `git mv` inside a work tree, falling back to a plain rename (with a warning) outside git or if `git mv` fails.
|
|
54
54
|
- `closed` archives append a canonical newest-first `completed.md` entry (`YYYY-MM-DD — <id> — Title — summary`). `wont_do` archives append an entry only when `--summary` is provided. A missing `completed.md` is scaffolded from the starter template; a missing `## Completed Items` heading is scaffolded with a warning.
|
|
55
|
+
- Rewrites inbound references to the moved file across Markdown under `.oat/repo/**` — tracked and untracked files that Git does not ignore, or every `.md` file outside a Git work tree — (external plans, decision records, other backlog items): relative links, `.oat/repo`-relative and repository-root path strings (including `oat_external_plan_sources` frontmatter) that resolve to `items/<id>.md` now point at `archived/<id>.md`, and the moved item's own relative links (inline links with any title form, and reference-style definitions; never footnotes or prose) are rebased when their target exists, so they keep resolving. An inline code span whose whole content is a path to the item (optionally with an `#anchor`), such as an external plan's `Source artifact or scope` citation, is rewritten; any other code span or fenced code block that mentions `items/<id>.md` is left as written with a warning, so recorded commands keep their meaning. Only references that resolve to the item's former `items/<id>.md` path change, and a link that already resolves to a different existing file is never repointed; URLs are never touched, and symlinked Markdown files are skipped so nothing outside `.oat/repo` is read or written. Each rewritten file is reported; a reference that names `items/<id>.md` but cannot be resolved is left untouched with a warning.
|
|
55
56
|
- Regenerates the managed backlog index after the move.
|
|
56
|
-
- Idempotent: re-running on an item already in `archived/`
|
|
57
|
+
- Idempotent: re-running on an item already in `archived/` returns `noop` with a warning and makes no status, `completed.md`, or move changes; it only retries the idempotent reference rewrite and index regeneration, so a run interrupted during the rewrite (or an item archived by hand or by an older CLI) can be finished by running the command again.
|
|
57
58
|
|
|
58
59
|
**Exit codes:**
|
|
59
60
|
|
|
@@ -73,11 +74,14 @@ On success the payload is the archive result object:
|
|
|
73
74
|
"completedEntry": "written",
|
|
74
75
|
"movedTo": ".oat/repo/pjm/backlog/archived/BL-260705-example.md",
|
|
75
76
|
"indexRegenerated": true,
|
|
77
|
+
"rewrittenReferences": [
|
|
78
|
+
".oat/repo/reference/external-plans/2026-07-05-example-plan.md"
|
|
79
|
+
],
|
|
76
80
|
"warnings": []
|
|
77
81
|
}
|
|
78
82
|
```
|
|
79
83
|
|
|
80
|
-
`result` is `archived` or `noop` (already archived); `completedEntry` is `written`, `scaffolded`, or `skipped` (e.g. a `wont_do` archive without `--summary`); `movedTo` is the destination path or `null
|
|
84
|
+
`result` is `archived` or `noop` (already archived); `completedEntry` is `written`, `scaffolded`, or `skipped` (e.g. a `wont_do` archive without `--summary`); `movedTo` is the destination path or `null`; `rewrittenReferences` lists the repository-relative Markdown files whose references to the moved item were rewritten (on a no-op this lists anything the retried rewrite changed, and the human output prints each file on both paths). On an actionable failure the payload is `{ "result": "error", "id": "<id>", "message": "<why + fix>" }`.
|
|
81
85
|
|
|
82
86
|
For full project-management repo-reference setup, use [`oat pjm init`](tool-packs.md#install-vs-initialize). It scaffolds the two-layer PJM surface (`pjm/current-state.md`, `pjm/roadmap.md`, `reference/decisions/`, and AGENTS guides) and delegates the backlog sub-surface to `oat backlog init`.
|
|
83
87
|
|
|
@@ -258,15 +262,18 @@ Use these reference pages for file ownership and schema details:
|
|
|
258
262
|
|
|
259
263
|
These commands validate and repair project-scoped instruction integrity between `AGENTS.md` and sibling `CLAUDE.md` files.
|
|
260
264
|
|
|
261
|
-
- `oat instructions validate` - read-only integrity check with `--strategy pointer|symlink|copy`
|
|
262
|
-
- `oat instructions sync` - preview or apply pointer, symlink, or hard-copy
|
|
265
|
+
- `oat instructions validate` - read-only integrity check with `--strategy none|pointer|symlink|copy`
|
|
266
|
+
- `oat instructions sync` - preview or apply the effective strategy: remove OAT-managed shims (`none`, the default) or create and repair pointer, symlink, or hard-copy shims
|
|
263
267
|
|
|
264
268
|
Use this command group when instruction files drift after manual edits or generated updates, or when nested project directories contain Claude-only stray files that should be adopted into canonical `AGENTS.md`.
|
|
265
269
|
|
|
266
270
|
Operational notes:
|
|
267
271
|
|
|
268
272
|
- Validation and sync use the same recursive scan model, so `--dry-run` previews the same states that `validate` reports.
|
|
269
|
-
- `
|
|
273
|
+
- `none` is the default strategy: no `CLAUDE.md` shims, because Claude Code reads `AGENTS.md` itself. Persist a shim strategy with `oat config set instructions.claude.shims pointer|symlink|copy`; `--strategy` overrides it for one run.
|
|
274
|
+
- Under `none`, every remaining `CLAUDE.md`, `.claude/CLAUDE.md`, or `CLAUDE.local.md` is reported with a warning, because it makes Claude Code ignore every `AGENTS.md`.
|
|
275
|
+
- Under `none`, shim removal is all or nothing: while any of those files has content of its own, sync removes no shim, exits `1`, and reports one `claude_md_blocks_shim_removal` finding naming the files with content and the shims it kept. See [All or nothing](../provider-sync/instruction-sync.md#all-or-nothing).
|
|
276
|
+
- Under a shim strategy, `symlink` and `copy` make file shape part of correctness.
|
|
270
277
|
- Unreadable canonical `AGENTS.md` files and unreadable Claude-only sources are surfaced as drift, but sync leaves them in manual-repair mode instead of guessing at recovery.
|
|
271
278
|
|
|
272
279
|
For the full state model, repair semantics, and examples, see [Instruction Sync](../provider-sync/instruction-sync.md).
|
|
@@ -19,13 +19,13 @@ For the deep file-by-file reference, see:
|
|
|
19
19
|
|
|
20
20
|
## The five config surfaces
|
|
21
21
|
|
|
22
|
-
| Surface | File | Typical contents
|
|
23
|
-
| ------------------------- | ------------------------- |
|
|
24
|
-
| Shared repo config | `.oat/config.json` | Repo-wide non-sync settings such as `projects.root`, `git.defaultBranch`, `documentation.*`, `archive.*`, `tools.*`, and shared `workflow.*` defaults | `oat config get/set/unset/list/describe`, `oat gate` |
|
|
25
|
-
| Repo-local config | `.oat/config.local.json` | Per-developer state for this checkout, such as `activeProject`, `lastPausedProject`, repo-local `activeIdea`, and local `workflow.*` overrides
|
|
26
|
-
| User config | `~/.oat/config.json` | User-level state such as global `activeIdea` fallback and personal `workflow.*` defaults
|
|
27
|
-
| Project sync config | `.oat/sync/config.json` | Provider enablement, sync strategy, and repo-level known stray settings
|
|
28
|
-
| User provider sync config | `~/.oat/sync/config.json` | User sync strategy and personal known provider strays
|
|
22
|
+
| Surface | File | Typical contents | Primary CLI surface |
|
|
23
|
+
| ------------------------- | ------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------- |
|
|
24
|
+
| Shared repo config | `.oat/config.json` | Repo-wide non-sync settings such as `projects.root`, `git.defaultBranch`, `documentation.*`, `instructions.*`, `archive.*`, `tools.*`, and shared `workflow.*` defaults | `oat config get/set/unset/list/describe`, `oat gate` |
|
|
25
|
+
| Repo-local config | `.oat/config.local.json` | Per-developer state for this checkout, such as `activeProject`, `lastPausedProject`, repo-local `activeIdea`, and local `workflow.*` overrides | `oat config get/set/unset/list/describe`, `oat gate` |
|
|
26
|
+
| User config | `~/.oat/config.json` | User-level state such as global `activeIdea` fallback and personal `workflow.*` defaults | `oat config get/set/unset/describe`, `oat gate` |
|
|
27
|
+
| Project sync config | `.oat/sync/config.json` | Provider enablement, sync strategy, and repo-level known stray settings | `oat providers set`, `oat config describe` |
|
|
28
|
+
| User provider sync config | `~/.oat/sync/config.json` | User sync strategy and personal known provider strays | Provider-sync commands, `oat config describe` |
|
|
29
29
|
|
|
30
30
|
The main split is:
|
|
31
31
|
|
|
@@ -95,8 +95,9 @@ Common keys in `.oat/config.json`:
|
|
|
95
95
|
- `git.defaultBranch` — base branch fallback for PR workflows
|
|
96
96
|
- `documentation.root`, `documentation.tooling`, `documentation.config` — docs-surface ownership
|
|
97
97
|
- `documentation.excludes` — a JSON array of globs, relative to the docs directory, that `oat docs generate-index` leaves out of the generated index. `oat config set` takes the list as one comma-separated value (`"a/**,b.md"`) and stores it as an array; repeated `--exclude` flags extend it, and an empty value clears the key
|
|
98
|
-
- `documentation.instructionPointerExcludes` — a JSON array of repository-relative directories that `oat instructions sync` and `oat instructions validate` must not treat as pointer sites, additive to the documentation content root they already skip by default (see [Instruction Sync](../provider-sync/instruction-sync.md#documentation-trees)). `oat config set` takes the list as one comma-separated value (`"vendor/generated,apps/oat-docs/docs"`) and stores it as an array of repository-relative POSIX paths, trimmed and de-duplicated; an empty value clears the key, and `oat config unset documentation.instructionPointerExcludes` removes it. An entry that could never exclude anything — an absolute path, or one escaping the repository with `..` — is rejected with exit code `1` rather than stored. A structurally malformed value already on disk (a non-array, or an empty or non-string entry) is rejected with exit code `2` and a repair message, and `oat config set` can still replace it. Entries that are well formed but cannot exclude anything — among them absolute paths, paths escaping the repository, paths that match no directory (matching is case-sensitive, and the warning names the on-disk spelling when the path differs only in case), paths that resolve elsewhere through a symlink (the warning names the resolved target instead of blaming case-sensitivity), and the unexcludable `.oat/repo` carve-in root — never abort the command; they are reported as warnings and are not counted as protection. Warnings go to stderr in human mode and to the `exclusionWarnings` field under `--json`
|
|
99
98
|
- `documentation.requireForProjectCompletion` — whether docs sync is a completion gate
|
|
99
|
+
- `instructions.claude.shims` — how `oat instructions sync` keeps a `CLAUDE.md` beside each `AGENTS.md`: `none` (the default: no shims; sync removes the ones OAT created and warns about any other `CLAUDE.md`, all or nothing: it removes none while any `CLAUDE.md`, `.claude/CLAUDE.md`, or `CLAUDE.local.md` has content of its own; see [All or nothing](../provider-sync/instruction-sync.md#all-or-nothing)), `pointer`, `symlink`, or `copy`. The `--strategy` flag overrides it for one run. Set it with `oat config set instructions.claude.shims pointer` when contributors need `CLAUDE.md` (see [Claude Code and AGENTS.md](../provider-sync/instruction-sync.md#claude-code-and-agentsmd)); `oat config unset` returns to `none`. Any other value is rejected with exit code `2` rather than read as unset, and `oat config set` can still replace it
|
|
100
|
+
- `instructions.claude.excludes` — a JSON array of repository-relative directories that `oat instructions sync` and `oat instructions validate` must not treat as pointer sites, additive to the documentation content root they already skip by default (see [Instruction Sync](../provider-sync/instruction-sync.md#documentation-trees)). `oat config set` takes the list as one comma-separated value (`"vendor/generated,apps/oat-docs/docs"`) and stores it as an array of repository-relative POSIX paths, trimmed and de-duplicated; an empty value clears the key, and `oat config unset instructions.claude.excludes` removes it. An entry that could never exclude anything — an absolute path, or one escaping the repository with `..` — is rejected with exit code `1` rather than stored. A structurally malformed value already on disk (a non-array, or an empty or non-string entry) is rejected with exit code `2` and a repair message, and `oat config set` can still replace it. Entries that are well formed but cannot exclude anything — among them absolute paths, paths escaping the repository, paths that match no directory (matching is case-sensitive, and the warning names the on-disk spelling when the path differs only in case), paths that resolve elsewhere through a symlink (the warning names the resolved target instead of blaming case-sensitivity), and the unexcludable `.oat/repo` carve-in root — never abort the command; they are reported as warnings and are not counted as protection. Warnings go to stderr in human mode and to the `exclusionWarnings` field under `--json`
|
|
100
101
|
- `archive.s3Uri` — base S3 archive prefix
|
|
101
102
|
- `archive.s3SyncOnComplete` — upload archived projects to S3 during completion
|
|
102
103
|
- `archive.summaryExportPath` — export `summary.md` into a durable tracked directory during completion
|
|
@@ -496,11 +497,11 @@ The example above is illustrative rather than a copy of the bundled ladder; its
|
|
|
496
497
|
tiers are trimmed for readability.
|
|
497
498
|
|
|
498
499
|
The bundled recommendation covers 11 Codex model/effort combinations: GPT-6
|
|
499
|
-
Luna at `low` through `max`, GPT-6 Sol at `low` through `high` plus `xhigh`,
|
|
500
|
+
Luna at `low` through `max`, GPT-6.1 Sol at `low` through `high` plus `xhigh`,
|
|
500
501
|
and GPT-6 Astra at `high` and `xhigh`.
|
|
501
502
|
Claude covers `haiku`, plus explicit Sonnet, Opus, and Fable
|
|
502
503
|
model/effort pairs. Effort-pinned Claude cells require a recognized versioned
|
|
503
|
-
model ID (`fable-5-1`, `fable-5`, `opus-5-5`, `sonnet-5`,
|
|
504
|
+
model ID (`fable-5-1`, `fable-5`, `opus-5-5`, `sonnet-5-5`, `sonnet-5`,
|
|
504
505
|
`opus-4-7`, `opus-4-6`, or `sonnet-4-6`) or a matching
|
|
505
506
|
`ANTHROPIC_DEFAULT_<FAMILY>_MODEL` pin. A custom provider pin must declare
|
|
506
507
|
matching capability through `<PIN>_SUPPORTED_CAPABILITIES`: `effort` enables
|
|
@@ -512,14 +513,17 @@ Model-only Claude aliases remain compatible through the per-call model argument
|
|
|
512
513
|
and report `effortAxis: not-applicable` because the Agent API exposes no
|
|
513
514
|
per-call effort argument. The recommendation carries 16 Cursor candidates
|
|
514
515
|
across four tiers, drawn from a materialization
|
|
515
|
-
catalogue with
|
|
516
|
-
(Sonnet, Opus 5.5, Fable 5, and Fable 5.1), GPT, and Grok 4.5 and 4.6; the two figures differ because some
|
|
516
|
+
catalogue with 31 catalogued multi-family flat IDs spanning Composer, Claude
|
|
517
|
+
(Sonnet 5, Sonnet 5.5, Opus 5.5, Fable 5, and Fable 5.1), GPT, and Grok 4.5 and 4.6; the two figures differ because some
|
|
517
518
|
approved mappings stay materializable without being recommended. An explicit
|
|
518
|
-
mapping connects each flat ladder ID to
|
|
519
|
-
|
|
519
|
+
mapping connects each flat ladder ID to its verified frontmatter model.
|
|
520
|
+
Existing mappings keep their bracket selectors; Sonnet 5.5 uses per-pin
|
|
521
|
+
verified exact IDs. The 31 mappings produce 62 pinned role variants.
|
|
522
|
+
Configuration and skills never derive selectors or admit arbitrary flat IDs.
|
|
520
523
|
|
|
521
524
|
The corresponding pinned Codex variant catalogue includes
|
|
522
|
-
`gpt-
|
|
525
|
+
`gpt-6-1-sol-high` and `gpt-6-1-sol-max`, alongside compatible older targets
|
|
526
|
+
such as `gpt-5.6-luna-high`, `gpt-5.6-terra-xhigh`, `gpt-5.6-sol-high`, and
|
|
523
527
|
`gpt-5.6-sol-max`. Configuration selects from that materialized catalogue; it
|
|
524
528
|
does not construct an unregistered role during dispatch.
|
|
525
529
|
|
|
@@ -663,7 +667,8 @@ the exact registered role, pinned child, or resolver-returned model argument.
|
|
|
663
667
|
|
|
664
668
|
`oat doctor` compares configured Cursor flat IDs with the current Cursor
|
|
665
669
|
catalogue and reports availability drift. This check is diagnostic: catalogue
|
|
666
|
-
presence does not prove that a
|
|
670
|
+
presence does not prove that a definition pin was honored, whether its
|
|
671
|
+
selector is bracket-form or an approved exact ID.
|
|
667
672
|
|
|
668
673
|
Each shipped mapping has mapping-specific native-launch evidence, but Cursor
|
|
669
674
|
can silently fallback when account, plan, or administration constraints prevent
|
|
@@ -815,7 +820,7 @@ oat config set workflow.dispatchCeiling.providers.codex medium # Advanced: per-
|
|
|
815
820
|
oat config set workflow.autoArtifactReview.analysis false
|
|
816
821
|
```
|
|
817
822
|
|
|
818
|
-
Default (no flag) targets `.oat/config.local.json` for workflow keys. Pass at most one of `--user`, `--shared`, or `--local`. Structural keys (`projects.root`, `worktrees.root`, `git.*`, `documentation.*`, `archive.*`, `tools.*`) are still shared-only regardless of flag.
|
|
823
|
+
Default (no flag) targets `.oat/config.local.json` for workflow keys. Pass at most one of `--user`, `--shared`, or `--local`. Structural keys (`projects.root`, `worktrees.root`, `git.*`, `documentation.*`, `instructions.*`, `archive.*`, `tools.*`) are still shared-only regardless of flag.
|
|
819
824
|
|
|
820
825
|
### Choosing the right surface (personal vs per-repo)
|
|
821
826
|
|
|
@@ -11,7 +11,7 @@ This page covers CLI commands that manage bundled OAT tool packs and installed O
|
|
|
11
11
|
|
|
12
12
|
- What it does: explains how bundled OAT packs are installed, updated, inspected, and removed.
|
|
13
13
|
- When to use it: when you need to add capabilities to a repo, update installed skills, or understand which packs own which tools.
|
|
14
|
-
- Primary commands: `oat tools list`, `oat tools has`, `oat tools install`, `oat tools update`, `oat tools remove`, `oat tools migrate`
|
|
14
|
+
- Primary commands: `oat tools list`, `oat tools has`, `oat tools guidance`, `oat tools install`, `oat tools update`, `oat tools remove`, `oat tools migrate`
|
|
15
15
|
- Coming from an earlier CLI: read [Upgrading from an earlier CLI](#upgrading-from-an-earlier-cli) for the changed install-scope default, PJM adoption gating, sparse `tools` config map, and per-pack `--json` shape
|
|
16
16
|
|
|
17
17
|
## Bundled packs at a glance
|
|
@@ -243,16 +243,31 @@ Tool-pack setup separates three decisions that do not imply one another:
|
|
|
243
243
|
user scope, or both. Placement controls where the capability is available;
|
|
244
244
|
it does not authorize a repository `AGENTS.md` edit.
|
|
245
245
|
2. **Project guidance** is an explicit choice to create an absent root
|
|
246
|
-
`AGENTS.md
|
|
246
|
+
`AGENTS.md`, append an absent managed `OAT tools` section to an existing
|
|
247
|
+
one, or print a manual patch when that section exists but differs. Use
|
|
247
248
|
`--project-guidance` to accept or `--no-project-guidance` to decline on
|
|
248
|
-
`oat init
|
|
249
|
+
`oat init`, `oat init tools`, and `oat tools install`, including every
|
|
250
|
+
per-pack subcommand such as `oat tools install docs --project-guidance`:
|
|
251
|
+
the `OAT tools` block describes every installed pack, so any pack install
|
|
252
|
+
can write it. The `workflows` pack also offers guidance without the flag;
|
|
253
|
+
other pack commands plan it only when the flag is given. `oat init` without
|
|
254
|
+
`--setup` applies an explicit `--project-guidance` for the packs already
|
|
255
|
+
installed, because guided setup is not there to do it; with no pack
|
|
256
|
+
installed it writes nothing, reports `skipped` with a warning, and exits 0. The
|
|
249
257
|
interactive prompt defaults to decline. Non-interactive runs perform no
|
|
250
258
|
guidance write unless `--project-guidance` is present and report the exact
|
|
251
259
|
opt-in command instead. When `AGENTS.md` already exists or is a contained
|
|
252
|
-
symlink
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
|
|
260
|
+
symlink to a file inside the repository, accepted guidance appends an
|
|
261
|
+
absent `OAT tools` section with one append-only write (reported as
|
|
262
|
+
`appended`, exit 0) that never truncates, renames, or rewrites existing
|
|
263
|
+
bytes. A file with more than one hard link is never appended to; it gets
|
|
264
|
+
the manual patch instead, as does a file OAT cannot write (the patch names
|
|
265
|
+
the cause). A matching section is a no-op. A section that is present but
|
|
266
|
+
differs, or a legacy `OAT workflows` block that must be removed, gets zero
|
|
267
|
+
writes and the same repository-relative, copy-pasteable managed block on
|
|
268
|
+
every run, with a non-zero exit. The block describes the complete realized
|
|
269
|
+
project-and-user pack inventory and tells the operator to remove a legacy
|
|
270
|
+
`OAT workflows` block manually when needed.
|
|
256
271
|
3. **PJM adoption** is the repository decision to use project-management state.
|
|
257
272
|
Make it separately with `oat pjm init`; neither installing the
|
|
258
273
|
`project-management` pack nor accepting tool guidance adopts PJM.
|
|
@@ -467,7 +482,7 @@ neither recognized legacy input nor a complete current layout is skipped with
|
|
|
467
482
|
an `oat pjm init` recovery. `--print-prompt` only reads the bundled prompt and
|
|
468
483
|
does not inspect adoption or modify the repository.
|
|
469
484
|
|
|
470
|
-
Decision records still require repository PJM adoption. Run `oat pjm init` first: like every repository-mutating PJM command, `oat decision init` fails closed in an unadopted repository, writes nothing, and returns `oat pjm init` as the recovery. Once the repository is adopted, `oat decision init` scaffolds only the decision surface — the decision directory, generated index, and decision-specific AGENTS guidance — without touching current state, roadmap, or backlog artifacts. It does not require the `project-management` pack. A missing AGENTS file can be created exclusively; an existing file or symlink is left byte-for-byte unchanged and receives a manual decision-guidance patch. If the pack is installed later, project-management guidance remains a separate managed section so the decision instructions stay independently reusable.
|
|
485
|
+
Decision records still require repository PJM adoption. Run `oat pjm init` first: like every repository-mutating PJM command, `oat decision init` fails closed in an unadopted repository, writes nothing, and returns `oat pjm init` as the recovery. Once the repository is adopted, `oat decision init` scaffolds only the decision surface — the decision directory, generated index, and decision-specific AGENTS guidance — without touching current state, roadmap, or backlog artifacts. It does not require the `project-management` pack. A missing AGENTS file can be created exclusively; an existing file or contained symlink target without an `OAT decisions` section gets that section appended with one append-only write that leaves every existing byte in place, and a section that exists but differs is left byte-for-byte unchanged and receives a manual decision-guidance patch. If the pack is installed later, project-management guidance remains a separate managed section so the decision instructions stay independently reusable.
|
|
471
486
|
|
|
472
487
|
`oat pjm init` is idempotent and non-destructive. Existing reference docs are skipped and left unchanged, so curated repo state is not overwritten on repeated runs.
|
|
473
488
|
|
|
@@ -657,6 +672,41 @@ oat tools has brainstorm --scope user
|
|
|
657
672
|
oat --json tools has workflows
|
|
658
673
|
```
|
|
659
674
|
|
|
675
|
+
### `oat tools guidance`
|
|
676
|
+
|
|
677
|
+
Purpose:
|
|
678
|
+
|
|
679
|
+
- Print the managed `OAT tools` `AGENTS.md` block for the packs installed now,
|
|
680
|
+
without installing, upgrading, or writing anything
|
|
681
|
+
|
|
682
|
+
Key behavior:
|
|
683
|
+
|
|
684
|
+
- Reads installed pack placement at project and user scope (user scope only
|
|
685
|
+
outside a Git repository) and renders the same block, markers included,
|
|
686
|
+
that `--project-guidance` would create or append
|
|
687
|
+
- Never touches `AGENTS.md`, pack assets, or config, so it is the safe way to
|
|
688
|
+
obtain the block for a manual edit, such as when an existing `OAT tools`
|
|
689
|
+
section differs and guidance prints a manual patch
|
|
690
|
+
- The block names `.agents/skills/` only when a pack is installed at project
|
|
691
|
+
scope and `~/.agents/skills/` only when a pack is installed at user scope,
|
|
692
|
+
each with its packs, deciding by pack membership rather than by whether the
|
|
693
|
+
directory exists. Project skills that belong to no OAT pack are described
|
|
694
|
+
on a separate line, never as pack skills
|
|
695
|
+
- `--json` returns `status`, `sectionKey` (`tools`), `target` (`AGENTS.md`),
|
|
696
|
+
`packs` (each `pack` with its `scope`), `otherProjectSkills` (names of
|
|
697
|
+
project skills that belong to no pack), and `managedBlock`
|
|
698
|
+
- With no OAT pack installed it prints no block, only a note that there is
|
|
699
|
+
nothing to add (an empty block would be a stale placeholder); `--json`
|
|
700
|
+
returns `status: "no-packs"`, `managedBlock: null`, and a `message`
|
|
701
|
+
- Exits `0` on success and `1` when pack state cannot be read
|
|
702
|
+
|
|
703
|
+
Examples:
|
|
704
|
+
|
|
705
|
+
```bash
|
|
706
|
+
oat tools guidance
|
|
707
|
+
oat --json tools guidance
|
|
708
|
+
```
|
|
709
|
+
|
|
660
710
|
### `oat tools install`
|
|
661
711
|
|
|
662
712
|
Purpose:
|
|
@@ -685,8 +735,8 @@ Key behavior:
|
|
|
685
735
|
JSON output adds `adoptedPacks` only when the list is non-empty. This is pack
|
|
686
736
|
intent reconciliation, not repository PJM adoption
|
|
687
737
|
- A user-only capability install needs no Git repository and performs no repository writes unless `--project-guidance` explicitly requests the separate repository guidance update
|
|
688
|
-
- Offers repository `AGENTS.md` guidance independently of capability scope. Pass `--project-guidance` to create an absent file
|
|
689
|
-
- Repository `AGENTS.md` guidance for project management is owned by adoption, not by pack placement. Installing the `project-management` pack never writes the section. `oat pjm init` creates
|
|
738
|
+
- Offers repository `AGENTS.md` guidance independently of capability scope. Pass `--project-guidance` to create an absent file, append an absent managed `OAT tools` section to an existing file/symlink target, or print a manual patch for a section that exists but differs, or `--no-project-guidance` to decline; the interactive prompt defaults to decline and non-interactive runs write nothing without the explicit opt-in
|
|
739
|
+
- Repository `AGENTS.md` guidance for project management is owned by adoption, not by pack placement. Installing the `project-management` pack never writes the section. `oat pjm init` creates the root file when it is absent and appends the absent `OAT project-management` and `OAT decisions` sections to an existing file (reported as `appended`, exit 0). A section that exists but differs from the managed version, or an `AGENTS.md` OAT will not append to (more than one hard link, or not writable), completes scaffold/adoption with one combined manual patch, printed once, and a non-zero exit, without changing the existing file or symlink; the header names the refusal cause when OAT could not append
|
|
690
740
|
- Interactive runs can prompt to update selected outdated skills
|
|
691
741
|
- Successful installs report the final scope chosen for each pack, including `project + user` when a pack is installed in both, and auto-sync only the scopes actually changed by the install so untouched scopes are never re-synced or pruned
|
|
692
742
|
- Install-triggered auto-sync limits removal planning to the canonical entries from the pack that was just installed, so stale manifest drift in unrelated packs does not delete other provider views
|
|
@@ -241,7 +241,7 @@ line. The reviewer's resolver stamp describes the project reviewer policy, so
|
|
|
241
241
|
gate-originated artifacts label it as the policy view:
|
|
242
242
|
|
|
243
243
|
```markdown
|
|
244
|
-
**Dispatch audit (policy view):** `Dispatch: scope=p01 action=review role=reviewer ... target=oat-reviewer-gpt-6-sol-high`
|
|
244
|
+
**Dispatch audit (policy view):** `Dispatch: scope=p01 action=review role=reviewer ... target=oat-reviewer-gpt-6-1-sol-high`
|
|
245
245
|
```
|
|
246
246
|
|
|
247
247
|
The gate reads reviewer stamps (`action=review role=reviewer`) from audit lines
|
|
@@ -73,12 +73,16 @@ checkout with neither `origin/main` nor `main` skips the whole gate (CI uses
|
|
|
73
73
|
`fetch-depth: 0`). Test files under `packages/cli/src/` count as publishable
|
|
74
74
|
changes for this gate.
|
|
75
75
|
|
|
76
|
-
CI runs neither `pnpm lint` nor `pnpm format`. `pnpm check`
|
|
76
|
+
CI runs neither `pnpm lint` nor `pnpm format`. `pnpm check` covers the
|
|
77
77
|
formatting of `.agents/skills/**`, `apps/oat-docs/docs`, and `tools/smoke`
|
|
78
|
-
through `format:root`,
|
|
79
|
-
|
|
80
|
-
`check
|
|
81
|
-
|
|
78
|
+
through `format:root`, and the `check` script of every package under
|
|
79
|
+
`packages/` (`packages/control-plane` included) runs its `oxlint` passes and
|
|
80
|
+
`oxfmt --check .` (the docs app's `check` covers only its Markdown), but
|
|
81
|
+
`pnpm lint`'s root `oxlint` pass over `tools/smoke` and `.agents/skills` still
|
|
82
|
+
runs in no CI gate — the smoke test that shells out to `pnpm lint` passes as
|
|
83
|
+
long as its own seeded violations are reported, so it cannot catch an existing
|
|
84
|
+
root-oxlint violation. Run `pnpm lint` and `pnpm format` whenever a change
|
|
85
|
+
touches those paths.
|
|
82
86
|
For narrower changes, use package-specific checks when possible, but do not
|
|
83
87
|
merge without passing the relevant workspace gates.
|
|
84
88
|
|