@open-agent-toolkit/cli 0.2.40 → 0.2.45
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/agents/oat-codebase-mapper.md +15 -3
- package/assets/agents/oat-phase-implementer.md +34 -9
- package/assets/agents/oat-reviewer.md +2 -2
- package/assets/bundle-metadata.json +1 -1
- package/assets/docs/cli-utilities/configuration.md +11 -1
- package/assets/docs/cli-utilities/tool-packs.md +8 -0
- package/assets/docs/contributing/skills.md +67 -14
- package/assets/docs/quickstart.md +9 -0
- package/assets/docs/reference/cli-reference.md +56 -1
- package/assets/docs/reference/file-locations.md +18 -1
- package/assets/docs/reference/oat-directory-structure.md +20 -4
- package/assets/docs/workflows/projects/artifacts.md +27 -1
- package/assets/docs/workflows/projects/implementation-execution.md +22 -0
- package/assets/docs/workflows/projects/index.md +6 -0
- package/assets/docs/workflows/projects/lifecycle.md +19 -5
- package/assets/docs/workflows/projects/picking-up-projects.md +75 -0
- package/assets/docs/workflows/projects/pr-flow.md +22 -1
- package/assets/docs/workflows/projects/reviewing-oat-prs.md +60 -0
- package/assets/public-package-versions.json +4 -4
- package/assets/skills/analyze/SKILL.md +13 -5
- package/assets/skills/compare/SKILL.md +11 -2
- package/assets/skills/oat-brainstorm/SKILL.md +135 -32
- package/assets/skills/oat-brainstorm/references/destinations.md +9 -6
- package/assets/skills/oat-cursor-cloud-projects/SKILL.md +11 -1
- package/assets/skills/oat-dispatch-subagents/SKILL.md +19 -6
- package/assets/skills/oat-doctor/SKILL.md +8 -1
- package/assets/skills/oat-project-autonomous/SKILL.md +45 -1
- package/assets/skills/oat-project-autonomous/references/gate-inventory.md +8 -8
- package/assets/skills/oat-project-capture/SKILL.md +29 -9
- package/assets/skills/oat-project-complete/SKILL.md +610 -38
- package/assets/skills/oat-project-complete/scripts/parse-completion-retry-fields.mjs +265 -0
- package/assets/skills/oat-project-complete/scripts/recover-completion-receipts.mjs +764 -0
- package/assets/skills/oat-project-complete/scripts/resolve-completion-retry.mjs +134 -0
- package/assets/skills/oat-project-complete/scripts/validate-nonarchive-lifecycle-receipt.mjs +160 -0
- package/assets/skills/oat-project-design/SKILL.md +33 -9
- package/assets/skills/oat-project-discover/SKILL.md +16 -3
- package/assets/skills/oat-project-document/SKILL.md +10 -4
- package/assets/skills/oat-project-document/references/docs/autonomy-contract.md +8 -8
- package/assets/skills/oat-project-implement/SKILL.md +14 -3
- package/assets/skills/oat-project-implement/references/completion-and-closeout.md +18 -6
- package/assets/skills/oat-project-implement/references/docs/autonomy-contract.md +8 -8
- package/assets/skills/oat-project-implement/references/phase-execution.md +9 -3
- package/assets/skills/oat-project-implement/references/plan-and-resume.md +3 -0
- package/assets/skills/oat-project-import-plan/SKILL.md +15 -9
- package/assets/skills/oat-project-new/SKILL.md +7 -5
- package/assets/skills/oat-project-next/SKILL.md +32 -10
- package/assets/skills/oat-project-plan/SKILL.md +18 -3
- package/assets/skills/oat-project-pr-final/SKILL.md +23 -2
- package/assets/skills/oat-project-pr-final/references/docs/autonomy-contract.md +8 -8
- package/assets/skills/oat-project-pr-progress/SKILL.md +23 -2
- package/assets/skills/oat-project-progress/SKILL.md +23 -9
- package/assets/skills/oat-project-promote-spec-driven/SKILL.md +20 -2
- package/assets/skills/oat-project-quick-start/SKILL.md +48 -18
- package/assets/skills/oat-project-quick-start/references/docs/autonomy-contract.md +8 -8
- package/assets/skills/oat-project-reconcile/SKILL.md +14 -10
- package/assets/skills/oat-project-retro/SKILL.md +3 -3
- package/assets/skills/oat-project-retro/references/apply-procedure.md +102 -6
- package/assets/skills/oat-project-retro-file/SKILL.md +57 -6
- package/assets/skills/oat-project-review-provide/SKILL.md +56 -6
- package/assets/skills/oat-project-review-receive/SKILL.md +16 -7
- package/assets/skills/oat-project-review-receive-remote/SKILL.md +9 -3
- package/assets/skills/oat-project-revise/SKILL.md +12 -3
- package/assets/skills/oat-project-spec/SKILL.md +16 -3
- package/assets/skills/oat-project-summary/SKILL.md +113 -13
- package/assets/skills/oat-repo-improve/SKILL.md +18 -7
- package/assets/skills/oat-review-provide-remote/SKILL.md +11 -2
- package/assets/skills/oat-wave-execute/SKILL.md +34 -2
- package/assets/skills/oat-worktree-bootstrap/SKILL.md +13 -1
- package/assets/skills/oat-worktree-bootstrap-auto/SKILL.md +13 -1
- 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 +30 -2
- package/dist/commands/doctor/index.d.ts +2 -0
- package/dist/commands/doctor/index.d.ts.map +1 -1
- package/dist/commands/doctor/index.js +27 -3
- package/dist/commands/doctor/synced-projects.d.ts +12 -0
- package/dist/commands/doctor/synced-projects.d.ts.map +1 -0
- package/dist/commands/doctor/synced-projects.js +208 -0
- package/dist/commands/init/gitattributes.d.ts +4 -0
- package/dist/commands/init/gitattributes.d.ts.map +1 -0
- package/dist/commands/init/gitattributes.js +12 -0
- package/dist/commands/init/gitignore.d.ts +8 -1
- package/dist/commands/init/gitignore.d.ts.map +1 -1
- package/dist/commands/init/gitignore.js +146 -41
- package/dist/commands/init/index.d.ts +2 -0
- package/dist/commands/init/index.d.ts.map +1 -1
- package/dist/commands/init/index.js +3 -0
- package/dist/commands/init/managed-block.d.ts +10 -0
- package/dist/commands/init/managed-block.d.ts.map +1 -0
- package/dist/commands/init/managed-block.js +40 -0
- package/dist/commands/init/tools/workflows/install-workflows.js +1 -1
- package/dist/commands/local/index.d.ts.map +1 -1
- package/dist/commands/local/index.js +5 -1
- package/dist/commands/local/sync.d.ts +4 -0
- package/dist/commands/local/sync.d.ts.map +1 -1
- package/dist/commands/local/sync.js +123 -2
- package/dist/commands/pjm/adoption.d.ts +2 -0
- package/dist/commands/pjm/adoption.d.ts.map +1 -1
- package/dist/commands/pjm/adoption.js +1 -1
- package/dist/commands/project/archive/archive-utils.d.ts +24 -0
- package/dist/commands/project/archive/archive-utils.d.ts.map +1 -1
- package/dist/commands/project/archive/archive-utils.js +349 -22
- package/dist/commands/project/archive/index.d.ts.map +1 -1
- package/dist/commands/project/archive/index.js +1 -0
- package/dist/commands/project/archive/push-runner.d.ts +5 -1
- package/dist/commands/project/archive/push-runner.d.ts.map +1 -1
- package/dist/commands/project/archive/push-runner.js +33 -4
- package/dist/commands/project/complete-state/index.d.ts.map +1 -1
- package/dist/commands/project/complete-state/index.js +3 -1
- package/dist/commands/project/index.d.ts.map +1 -1
- package/dist/commands/project/index.js +12 -0
- package/dist/commands/project/links/compute.d.ts +9 -0
- package/dist/commands/project/links/compute.d.ts.map +1 -0
- package/dist/commands/project/links/compute.js +27 -0
- package/dist/commands/project/links/index.d.ts +17 -0
- package/dist/commands/project/links/index.d.ts.map +1 -0
- package/dist/commands/project/links/index.js +72 -0
- package/dist/commands/project/links/refresh.d.ts +26 -0
- package/dist/commands/project/links/refresh.d.ts.map +1 -0
- package/dist/commands/project/links/refresh.js +92 -0
- package/dist/commands/project/links/render.d.ts +24 -0
- package/dist/commands/project/links/render.d.ts.map +1 -0
- package/dist/commands/project/links/render.js +68 -0
- package/dist/commands/project/list.d.ts +5 -0
- package/dist/commands/project/list.d.ts.map +1 -1
- package/dist/commands/project/list.js +182 -9
- package/dist/commands/project/migrate/index.d.ts +22 -0
- package/dist/commands/project/migrate/index.d.ts.map +1 -0
- package/dist/commands/project/migrate/index.js +79 -0
- package/dist/commands/project/new/index.d.ts +2 -0
- package/dist/commands/project/new/index.d.ts.map +1 -1
- package/dist/commands/project/new/index.js +14 -2
- package/dist/commands/project/new/scaffold.d.ts +22 -1
- package/dist/commands/project/new/scaffold.d.ts.map +1 -1
- package/dist/commands/project/new/scaffold.js +287 -69
- package/dist/commands/project/open/index.d.ts +16 -0
- package/dist/commands/project/open/index.d.ts.map +1 -1
- package/dist/commands/project/open/index.js +151 -19
- package/dist/commands/project/pause/index.d.ts +8 -0
- package/dist/commands/project/pause/index.d.ts.map +1 -1
- package/dist/commands/project/pause/index.js +129 -19
- package/dist/commands/project/prune/index.d.ts +21 -0
- package/dist/commands/project/prune/index.d.ts.map +1 -0
- package/dist/commands/project/prune/index.js +95 -0
- package/dist/commands/project/pull/index.d.ts +28 -0
- package/dist/commands/project/pull/index.d.ts.map +1 -0
- package/dist/commands/project/pull/index.js +157 -0
- package/dist/commands/project/push/index.d.ts +22 -0
- package/dist/commands/project/push/index.d.ts.map +1 -0
- package/dist/commands/project/push/index.js +100 -0
- package/dist/commands/project/scope/index.d.ts +17 -0
- package/dist/commands/project/scope/index.d.ts.map +1 -0
- package/dist/commands/project/scope/index.js +107 -0
- package/dist/commands/project/split/run.d.ts +4 -0
- package/dist/commands/project/split/run.d.ts.map +1 -1
- package/dist/commands/project/split/run.js +48 -10
- package/dist/commands/project/sync/git.d.ts +18 -0
- package/dist/commands/project/sync/git.d.ts.map +1 -0
- package/dist/commands/project/sync/git.js +60 -0
- package/dist/commands/project/sync/record.d.ts +22 -0
- package/dist/commands/project/sync/record.d.ts.map +1 -0
- package/dist/commands/project/sync/record.js +133 -0
- package/dist/commands/project/sync/ref-sync.d.ts +120 -0
- package/dist/commands/project/sync/ref-sync.d.ts.map +1 -0
- package/dist/commands/project/sync/ref-sync.js +962 -0
- package/dist/commands/project/sync/resolve-target.d.ts +27 -0
- package/dist/commands/project/sync/resolve-target.d.ts.map +1 -0
- package/dist/commands/project/sync/resolve-target.js +159 -0
- package/dist/commands/shared/oat-paths.d.ts +4 -1
- package/dist/commands/shared/oat-paths.d.ts.map +1 -1
- package/dist/commands/shared/oat-paths.js +2 -2
- package/dist/commands/shared/project-scope.d.ts +23 -0
- package/dist/commands/shared/project-scope.d.ts.map +1 -0
- package/dist/commands/shared/project-scope.js +106 -0
- package/dist/commands/tools/migrate/index.js +1 -1
- package/dist/commands/tools/shared/pack-inventory.d.ts.map +1 -1
- package/dist/commands/tools/shared/pack-inventory.js +11 -0
- package/dist/commands/tools/shared/pack-lifecycle.js +1 -1
- package/dist/commands/tools/shared/pack-reconcile.d.ts.map +1 -1
- package/dist/commands/tools/shared/pack-reconcile.js +4 -1
- package/dist/commands/tools/update/index.d.ts.map +1 -1
- package/dist/commands/tools/update/index.js +20 -10
- package/dist/commands/tools/update/update-tools.d.ts +2 -0
- package/dist/commands/tools/update/update-tools.d.ts.map +1 -1
- package/dist/config/oat-config.d.ts +6 -3
- package/dist/config/oat-config.d.ts.map +1 -1
- package/dist/config/oat-config.js +41 -7
- package/dist/config/resolve.d.ts.map +1 -1
- package/dist/config/resolve.js +2 -1
- package/dist/fs/io.d.ts +2 -1
- package/dist/fs/io.d.ts.map +1 -1
- package/dist/fs/io.js +5 -2
- package/dist/projects/split/finalize.d.ts.map +1 -1
- package/dist/projects/split/finalize.js +55 -2
- package/dist/projects/split/resume.d.ts +3 -0
- package/dist/projects/split/resume.d.ts.map +1 -1
- package/dist/projects/split/resume.js +34 -7
- package/dist/projects/split/seed-children.d.ts.map +1 -1
- package/dist/projects/split/seed-children.js +6 -0
- package/dist/projects/split/write-parent.d.ts +7 -0
- package/dist/projects/split/write-parent.d.ts.map +1 -1
- package/dist/projects/split/write-parent.js +7 -4
- package/dist/release/public-package-contract.d.ts.map +1 -1
- package/dist/release/public-package-contract.js +1 -0
- package/dist/validation/skills.d.ts.map +1 -1
- package/dist/validation/skills.js +434 -0
- package/package.json +4 -4
- package/dist/__tests__/skills/split-flow-fixtures.d.ts +0 -50
- package/dist/__tests__/skills/split-flow-fixtures.d.ts.map +0 -1
- package/dist/__tests__/skills/split-flow-fixtures.js +0 -161
- package/dist/commands/__tests__/helpers.d.ts +0 -12
- package/dist/commands/__tests__/helpers.d.ts.map +0 -1
- package/dist/commands/__tests__/helpers.js +0 -36
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-codebase-mapper
|
|
3
|
-
version: 1.0.
|
|
3
|
+
version: 1.0.1
|
|
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
|
|
@@ -221,7 +221,19 @@ oat_warning: 'GENERATED FILE - Do not edit manually. Regenerate with oat-repo-kn
|
|
|
221
221
|
3. If something is not found, use "Not detected" or "Not applicable"
|
|
222
222
|
4. Always include file paths with backticks
|
|
223
223
|
|
|
224
|
-
|
|
224
|
+
This agent is materialized into provider-specific views, so no portable
|
|
225
|
+
loaded-agent root exists. Resolve the template owner from installed scope
|
|
226
|
+
instead: independently probe each required `<name>/SKILL.md` in order,
|
|
227
|
+
`${HOME}/.agents/skills` then `<repo-root>/.agents/skills`. Bind the first
|
|
228
|
+
match for `oat-repo-knowledge-index` to its own
|
|
229
|
+
`${KNOWLEDGE_INDEX_SKILLS_ROOT}`; never ambient discovery. On a miss, name the
|
|
230
|
+
skill, stop before writing any document instead of inventing a format, and give
|
|
231
|
+
its intended-scope recovery command:
|
|
232
|
+
`oat tools install workflows --scope <user|project>` or
|
|
233
|
+
`oat tools update --pack workflows --scope <user|project>`.
|
|
234
|
+
|
|
235
|
+
Use templates from
|
|
236
|
+
`${KNOWLEDGE_INDEX_SKILLS_ROOT}/oat-repo-knowledge-index/references/templates/`.
|
|
225
237
|
|
|
226
238
|
Use the Write tool to create each document.
|
|
227
239
|
|
|
@@ -254,7 +266,7 @@ Ready for orchestrator summary.
|
|
|
254
266
|
|
|
255
267
|
**NO RECOMMENDATIONS.** No “recommended setup” or “consider using X” in knowledge docs. Capture gaps as current-state issues in `concerns.md` only.
|
|
256
268
|
|
|
257
|
-
**USE THE TEMPLATES.** Fill in the template structure from
|
|
269
|
+
**USE THE TEMPLATES.** Fill in the template structure from `${KNOWLEDGE_INDEX_SKILLS_ROOT}/oat-repo-knowledge-index/references/templates/`. Don't invent your own format.
|
|
258
270
|
|
|
259
271
|
**INCLUDE FRONTMATTER.** Every generated document must have frontmatter with oat_generated: true and both SHA fields.
|
|
260
272
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-phase-implementer
|
|
3
|
-
version: 1.
|
|
3
|
+
version: 1.1.1
|
|
4
4
|
description: Implements one plan phase end-to-end, commits each task separately, self-checks between tasks, and handles bounded review fixes when resumed by oat-project-implement.
|
|
5
5
|
tools: Read, Write, Edit, Bash, Grep, Glob, Task
|
|
6
6
|
color: cyan
|
|
@@ -70,16 +70,31 @@ task.
|
|
|
70
70
|
|
|
71
71
|
Nested dispatch is optional and justified only by a clear benefit such as
|
|
72
72
|
read-only reconnaissance, independent analysis lanes, safely isolated fanout,
|
|
73
|
-
or genuinely specialized implementation.
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
73
|
+
or genuinely specialized implementation.
|
|
74
|
+
|
|
75
|
+
This agent is materialized into provider-specific views, so no portable
|
|
76
|
+
loaded-agent root exists. Resolve every required sibling skill from installed
|
|
77
|
+
scope instead: independently probe each required `<name>/SKILL.md` in order,
|
|
78
|
+
`${HOME}/.agents/skills` then `<repo-root>/.agents/skills`. Bind each first
|
|
79
|
+
match to its own root: `${PROJECT_DISPATCH_SKILLS_ROOT}` for
|
|
80
|
+
`oat-project-dispatch-subagents`, `${DISPATCH_SKILLS_ROOT}` for
|
|
81
|
+
`oat-dispatch-subagents`, and `${ORCHESTRATION_SKILLS_ROOT}` for
|
|
82
|
+
`subagent-orchestration`; never ambient discovery. On a miss, name the skill,
|
|
83
|
+
stop the optional launch and implement the task directly, and give its
|
|
84
|
+
intended-scope recovery command:
|
|
85
|
+
|
|
86
|
+
- `oat-project-dispatch-subagents`: `oat tools install workflows --scope <user|project>` or `oat tools update --pack workflows --scope <user|project>`.
|
|
87
|
+
- `oat-dispatch-subagents` or `subagent-orchestration`: `oat tools install utility --scope <user|project>` or `oat tools update --pack utility --scope <user|project>`.
|
|
88
|
+
|
|
89
|
+
Before any optional child launch, read and follow:
|
|
90
|
+
|
|
91
|
+
1. `${PROJECT_DISPATCH_SKILLS_ROOT}/oat-project-dispatch-subagents/SKILL.md`;
|
|
92
|
+
2. `${DISPATCH_SKILLS_ROOT}/oat-dispatch-subagents/SKILL.md`; and
|
|
93
|
+
3. `${ORCHESTRATION_SKILLS_ROOT}/subagent-orchestration/references/model-selection-principles.md`;
|
|
79
94
|
4. read exactly one active-provider selection reference from
|
|
80
|
-
|
|
95
|
+
`${ORCHESTRATION_SKILLS_ROOT}/subagent-orchestration/references/`; and
|
|
81
96
|
5. read the matching mechanics reference from
|
|
82
|
-
|
|
97
|
+
`${DISPATCH_SKILLS_ROOT}/oat-dispatch-subagents/references/`.
|
|
83
98
|
|
|
84
99
|
Every optional launch must have a bounded objective, explicit read/write
|
|
85
100
|
authority, exact target at or below the phase ceiling, verification/output
|
|
@@ -116,6 +131,16 @@ After formatting, run the repository's applicable gate set over the produced
|
|
|
116
131
|
diff, explicitly including artifact writes. This supplements rather than
|
|
117
132
|
replaces every task and phase verification command below.
|
|
118
133
|
|
|
134
|
+
## Synced-Scope Bookkeeping
|
|
135
|
+
|
|
136
|
+
Artifact and recovery-ledger bookkeeping commits must first resolve scope with
|
|
137
|
+
`oat project scope "$PROJECT_PATH" --format value`. A `synced` project uses
|
|
138
|
+
`oat project push` with the original bookkeeping message; other scopes keep the
|
|
139
|
+
existing scoped `git add` and `git commit` commands. Scope resolution fails
|
|
140
|
+
closed. A nonzero project-push exit stops bookkeeping until the reported
|
|
141
|
+
recovery is resolved and the push is retried. Planned code task commits such as
|
|
142
|
+
`feat(pNN-tNN)` are unchanged.
|
|
143
|
+
|
|
119
144
|
## Prevention and Post-Commit Recovery
|
|
120
145
|
|
|
121
146
|
Prevention is the first recovery control. Before every planned task commit:
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-reviewer
|
|
3
|
-
version: 1.2.
|
|
3
|
+
version: 1.2.1
|
|
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
|
|
@@ -81,7 +81,7 @@ The primary reviewer must establish the authoritative scope before considering d
|
|
|
81
81
|
When delegation is eligible:
|
|
82
82
|
|
|
83
83
|
1. Use one bounded, read-only, non-recursive reconnaissance round with disjoint lane scopes. This is a one-level fan-out limit: lane workers must not spawn additional workers.
|
|
84
|
-
2. Before launching any lane,
|
|
84
|
+
2. Before launching any lane, resolve the required sibling skills from installed scope: this agent is materialized into provider-specific views, so no portable loaded-agent root exists. Independently probe each required `<name>/SKILL.md` in order, `${HOME}/.agents/skills` then `<repo-root>/.agents/skills`, and bind each first match to its own root: `${DISPATCH_SKILLS_ROOT}` for `oat-dispatch-subagents` and `${ORCHESTRATION_SKILLS_ROOT}` for `subagent-orchestration`; never ambient discovery. On a miss, name the skill, stop the reconnaissance launch and review inline, and give its intended-scope recovery command: `oat tools install utility --scope <user|project>` or `oat tools update --pack utility --scope <user|project>`. Then read `${DISPATCH_SKILLS_ROOT}/oat-dispatch-subagents/SKILL.md` and `${ORCHESTRATION_SKILLS_ROOT}/subagent-orchestration/references/model-selection-principles.md`. Resolve the active provider, then read exactly one matching selection reference under `${ORCHESTRATION_SKILLS_ROOT}/subagent-orchestration/references/` and one matching mechanics reference under `${DISPATCH_SKILLS_ROOT}/oat-dispatch-subagents/references/`. Reviewer-local reconnaissance must not read or load the `oat-project-dispatch-subagents` adapter; that adapter is reserved for project lifecycle phase/task policy.
|
|
85
85
|
3. Map every lane worker to the shared `recon` role class (`role.class: recon`); role authority stays read-only and advisory. Assign the independent `task_class`, `classification_source: caller`, and non-empty `classification_reason` fields after understanding the artifacts and diff. These task-class fields are required for reviewer-local reconnaissance even though the generic dispatch contract keeps them optional for other callers.
|
|
86
86
|
4. Classify each lane as `mechanical-recon`, `intelligent-recon`, `default-implementation`, `hard-reasoning`, or `consequential`. Use the stronger floor when uncertain. Classification proceeds from deterministic verification to silent-miss risk, then dispersed context, ambiguity, and consequence; file count alone never justifies escalation.
|
|
87
87
|
- `mechanical-recon`: deterministic inventories, parity checks, and test/lint/format/build execution whose misses are visible and cheaply checked.
|
|
@@ -76,7 +76,17 @@ Earlier CLI versions returned `config.json` / `config.local.json` / `env` / `def
|
|
|
76
76
|
|
|
77
77
|
Common keys in `.oat/config.json`:
|
|
78
78
|
|
|
79
|
-
- `projects.root` —
|
|
79
|
+
- `projects.root` — shared-scope project root. Relative values resolve from the
|
|
80
|
+
repository root; absolute values remain absolute. OAT derives the `local`
|
|
81
|
+
and `synced` roots as sibling directories named `local` and `synced` under
|
|
82
|
+
this root's parent, so a custom value relocates all three scope roots as one
|
|
83
|
+
layout. Synced project creation requires the derived `synced` root to resolve
|
|
84
|
+
inside the repository; an external absolute root remains usable for `shared`
|
|
85
|
+
and `local` projects but is rejected before any synced checkout, ref, record,
|
|
86
|
+
active pointer, or Git index mutation.
|
|
87
|
+
- `projects.defaultScope` — scope used by project creation when `--scope` is
|
|
88
|
+
omitted (`synced` by default). `OAT_PROJECTS_DEFAULT_SCOPE` overrides the
|
|
89
|
+
configured value for the current process.
|
|
80
90
|
- `worktrees.root` — where OAT-managed worktrees live
|
|
81
91
|
- `git.defaultBranch` — base branch fallback for PR workflows
|
|
82
92
|
- `documentation.root`, `documentation.tooling`, `documentation.config` — docs-surface ownership
|
|
@@ -84,6 +84,14 @@ Lifecycle skills resolve each required sibling independently from the loaded
|
|
|
84
84
|
scope, then user scope, then project scope. This makes mixed-scope placement a
|
|
85
85
|
supported execution path rather than relying on one frozen skills root.
|
|
86
86
|
|
|
87
|
+
Materialized **agents** from any pack that ships them (`workflows` here,
|
|
88
|
+
`research` elsewhere) use a two-step order instead — user scope, then project
|
|
89
|
+
scope — because no provider exposes a stable loaded-agent source directory to
|
|
90
|
+
derive a loaded scope from. They still bind each dependency independently and
|
|
91
|
+
still fail closed with the owning pack's install or update command. See
|
|
92
|
+
[Writing Skills → Portable sibling reads](../contributing/skills.md#portable-sibling-reads-skills-and-agents)
|
|
93
|
+
for the full contract.
|
|
94
|
+
|
|
87
95
|
The packs remain independently installable. If the workflows adapter is
|
|
88
96
|
present without the utility contracts, it fails closed and reports the missing
|
|
89
97
|
dependency instead of inventing a fallback route. Non-project analytical
|
|
@@ -24,32 +24,85 @@ Skill behavior is defined by frontmatter plus the process contract in each `SKIL
|
|
|
24
24
|
- Define a pre-work capability and authorization gate for skills that delegate to subagents, workers, or reviewers.
|
|
25
25
|
- Keep output obligations explicit so downstream skills and users know what changed.
|
|
26
26
|
|
|
27
|
-
## Portable sibling
|
|
27
|
+
## Portable sibling reads (skills and agents)
|
|
28
28
|
|
|
29
|
-
Executable instructions must not assume the
|
|
30
|
-
checkout.
|
|
31
|
-
|
|
29
|
+
Executable instructions must not assume the asset is running from a repository
|
|
30
|
+
checkout. The rule is not skill-specific: it applies to every Markdown asset
|
|
31
|
+
shipped by a pack whose `defaultScope` is `user`, which today means both
|
|
32
|
+
canonical skills under `.agents/skills` and canonical agents under
|
|
33
|
+
`.agents/agents`. The scanned surface is derived from `PACK_MANIFEST` rather
|
|
34
|
+
than a hand-maintained list, so adding a skill or agent to a user-default pack
|
|
35
|
+
puts it under the contract automatically.
|
|
36
|
+
|
|
37
|
+
The contract covers a cross-asset read of a sibling `SKILL.md` and of any file
|
|
38
|
+
or directory at or below a sibling's `references/`.
|
|
39
|
+
|
|
40
|
+
### Loaded skills resolve in three steps
|
|
41
|
+
|
|
42
|
+
Before a skill or one of its operational reference files reads a sibling,
|
|
43
|
+
resolve a `${SKILLS_ROOT}` in this order:
|
|
32
44
|
|
|
33
45
|
1. Derive `${SKILL_DIR}/..` from the directory containing the currently loaded
|
|
34
46
|
`SKILL.md`, when the provider exposes that path.
|
|
35
47
|
2. Try the user-scope root at `${HOME}/.agents/skills`.
|
|
36
48
|
3. Fall back to the project-scope root at `<repo-root>/.agents/skills`.
|
|
37
49
|
|
|
38
|
-
Probe each candidate for
|
|
50
|
+
Probe each candidate for the exact target and use the first match. If none
|
|
39
51
|
exists, name the missing sibling, give an actionable install or update command,
|
|
40
52
|
and stop that workflow branch instead of improvising the sibling's process.
|
|
41
53
|
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
54
|
+
### Materialized agents resolve in two steps
|
|
55
|
+
|
|
56
|
+
Canonical agents are materialized into provider-specific views — Codex receives
|
|
57
|
+
agent content as developer instructions, while Claude and Cursor use distinct
|
|
58
|
+
provider directories. No stable loaded-agent source path exists across those
|
|
59
|
+
providers, so an agent must not invent a `${SKILL_DIR}`-style loaded-agent
|
|
60
|
+
candidate. Agents resolve installed scope only:
|
|
61
|
+
|
|
62
|
+
1. Try the user-scope root at `${HOME}/.agents/skills`.
|
|
63
|
+
2. Fall back to the project-scope root at `<repo-root>/.agents/skills`.
|
|
64
|
+
|
|
65
|
+
User scope comes first because the packs that own these dependencies default
|
|
66
|
+
there; project scope remains a real fallback for project installations.
|
|
67
|
+
|
|
68
|
+
### Bind every dependency independently
|
|
69
|
+
|
|
70
|
+
When a caller needs multiple siblings, resolve and bind each one to its own
|
|
71
|
+
root variable. Do not freeze a single `${SKILLS_ROOT}` and assume every
|
|
72
|
+
dependency is installed there: a workflows adapter may be at project scope
|
|
73
|
+
while its utility contracts are at user scope. Validate the exact target file
|
|
74
|
+
before acting on it, and never substitute ambient discovery for a bound root.
|
|
75
|
+
|
|
76
|
+
Follow-on reads inside an already-bound sibling root — for example a second
|
|
77
|
+
reference file under a root that an earlier read established and validated —
|
|
78
|
+
are local reads rather than new cross-asset reads. They are only acceptable
|
|
79
|
+
when the anchoring read comes first.
|
|
80
|
+
|
|
81
|
+
### Fail closed with pack-specific recovery
|
|
82
|
+
|
|
83
|
+
A missing-sibling recovery must name the missing target, its owning pack, and
|
|
84
|
+
the intended scope, using `oat tools install <pack> --scope <user|project>` or
|
|
85
|
+
`oat tools update --pack <pack> --scope <user|project>` as appropriate. Do not
|
|
86
|
+
degrade to a partially guided path, and do not continue past the missing
|
|
87
|
+
dependency.
|
|
88
|
+
|
|
89
|
+
### The ratchet allows only exact historical baselines
|
|
48
90
|
|
|
49
91
|
Do not use a bare `.agents/skills/<sibling>/SKILL.md`, `./.agents/...`, or
|
|
50
|
-
`../.agents/...` path for an executable read
|
|
51
|
-
|
|
52
|
-
|
|
92
|
+
`../.agents/...` path for an executable read in any user-default skill or
|
|
93
|
+
agent. The bundled-docs contract test enforces this over the whole
|
|
94
|
+
manifest-derived surface and reports each violation as exact
|
|
95
|
+
`source -> target` evidence.
|
|
96
|
+
|
|
97
|
+
The only exemption is a pinned historical baseline: non-executable evidence
|
|
98
|
+
such as a dogfood transcript or a fixture README, recorded by exact source
|
|
99
|
+
file, target skill, and target path. There is no wildcard, directory-wide, or
|
|
100
|
+
skill-wide allowance, and no temporary migration allowlist — executable debt is
|
|
101
|
+
fixed at the caller instead of being exempted. The same assertions run against
|
|
102
|
+
the bundled CLI copies of both skills and agents, and the sync contract test
|
|
103
|
+
re-checks the roles it materializes for Codex, so a canonical fix must survive
|
|
104
|
+
bundling and Codex sync as well. No test yet gates the generated `.claude` or
|
|
105
|
+
`.cursor` agent views, so regenerate and spot-check those by hand.
|
|
53
106
|
|
|
54
107
|
## Contract components
|
|
55
108
|
|
|
@@ -9,6 +9,15 @@ Use this page to choose the OAT path that matches what you are actually trying t
|
|
|
9
9
|
|
|
10
10
|
This page is intentionally lightweight. It is not the full command manual. Once you choose a path, continue into the owning section for the deeper operational detail.
|
|
11
11
|
|
|
12
|
+
## Prerequisites
|
|
13
|
+
|
|
14
|
+
- Node.js 22.17 or newer
|
|
15
|
+
- Git 2.31 or newer
|
|
16
|
+
|
|
17
|
+
OAT does not run an up-front Git version check. Git compatibility is evaluated
|
|
18
|
+
best-effort by each command, and a missing or unsupported Git operation exits as
|
|
19
|
+
a system error.
|
|
20
|
+
|
|
12
21
|
## Choose a Path
|
|
13
22
|
|
|
14
23
|
### Provider Sync
|
|
@@ -56,6 +56,61 @@ The first practical expansion path is to keep improving the existing owners: [Do
|
|
|
56
56
|
|
|
57
57
|
Notable commands introduced in the current CLI surface:
|
|
58
58
|
|
|
59
|
+
- `oat project new <slug> --scope shared|local|synced [--force]` - create a
|
|
60
|
+
project in an explicit scope. Without `--scope`, creation uses
|
|
61
|
+
`projects.defaultScope`, which defaults to `synced`. Project slugs are
|
|
62
|
+
unique across all scopes by default, including recorded or remotely
|
|
63
|
+
published synced projects. `--force` deliberately permits a duplicate; use
|
|
64
|
+
an explicit project path with `project open` or `project pause` whenever a
|
|
65
|
+
slug is ambiguous across scopes.
|
|
66
|
+
- `oat project scope [project] --format value|json` - resolve a project's
|
|
67
|
+
storage scope without inspecting its path manually.
|
|
68
|
+
- `oat project push [project] [--message <message>]` - commit pending synced
|
|
69
|
+
artifacts, reconcile with the exact project ref on `origin`, publish it, and
|
|
70
|
+
refresh an open PR's artifact-links block. Use `--no-refresh-pr` to skip the
|
|
71
|
+
PR edit. With `--json`, success returns `status` (`pushed` or `up-to-date`),
|
|
72
|
+
the full project-ref `sha`, the retained `ref`, and optional `prRefresh`;
|
|
73
|
+
conflict and rejected outcomes return their corresponding `status` and exit
|
|
74
|
+
nonzero.
|
|
75
|
+
- `oat project pull [project] [--no-commit]` - fetch and materialize or update a synced
|
|
76
|
+
checkout. Resolve a rebase conflict and run `pull --continue`, or use
|
|
77
|
+
`pull --abort` to return to the pre-pull state. Coordination children are
|
|
78
|
+
pulled by default; `--no-children` limits the operation to the selected
|
|
79
|
+
project. When pull adopts a remote project with no local discovery record,
|
|
80
|
+
`--no-commit` leaves the new record uncommitted for the caller to persist.
|
|
81
|
+
With `--json`, the receipt includes `status`, `sha`, and `ref`, plus
|
|
82
|
+
`conflicts` when applicable and per-child results when coordination children
|
|
83
|
+
were requested.
|
|
84
|
+
- `oat project links [project] --format markdown|json` - render SHA-pinned
|
|
85
|
+
links for the linkable artifacts on the project ref. On GitHub origins the
|
|
86
|
+
artifacts become full-SHA blob links; other hosts degrade to the retained ref
|
|
87
|
+
and short SHA without guessing a web URL. `--durable-summary <path>` accepts
|
|
88
|
+
only a path contained in the repository, normalizes it repository-relative,
|
|
89
|
+
and renders it as a code span rather than a guessed remote link.
|
|
90
|
+
- `oat project pause [project]` - persist the pause state and clear the active
|
|
91
|
+
project pointer. If synced publication is declined or fails after the pause
|
|
92
|
+
commit is created, that clean commit is retained; address the publication
|
|
93
|
+
failure and rerun `pause` to publish it.
|
|
94
|
+
- `oat project prune [project] [--force] [--no-commit]` - remove every
|
|
95
|
+
checkout, the local and remote project refs, and the tracked record. When the
|
|
96
|
+
project is omitted, the active project is used. This is the explicit
|
|
97
|
+
destructive operation; `--force` may discard dirty or unpushed artifacts,
|
|
98
|
+
while `--no-commit` leaves the parent-record deletion for a library caller to
|
|
99
|
+
commit. If remote deletion succeeds but local checkout removal fails, the
|
|
100
|
+
local ref, record, and checkouts are retained. Resolve the reported local
|
|
101
|
+
obstruction and retry `prune --force`; do not run `project push`, which would
|
|
102
|
+
republish the deleted remote ref.
|
|
103
|
+
- `oat project migrate <path> --to synced [--no-commit]` - migrate an existing
|
|
104
|
+
shared project to synced storage while preserving its artifacts and
|
|
105
|
+
retargeting the active project pointer. `--no-commit` leaves the parent
|
|
106
|
+
record and source-tree transition uncommitted for a library caller.
|
|
107
|
+
- `oat project list --scope shared|local|synced` - filter tracked projects by
|
|
108
|
+
scope. Add `--remote` to discover project refs that do not yet have a local
|
|
109
|
+
record or checkout, and `--include-coordination` to include coordination
|
|
110
|
+
parents. A malformed discovery record with no materialized checkout appears
|
|
111
|
+
as a `recorded-invalid` row. When the checkout is materialized, its existing
|
|
112
|
+
row instead carries the restore hint and `recordError` parse diagnostic in
|
|
113
|
+
`--json` output.
|
|
59
114
|
- `oat tools migrate --pack <pack> --from <scope> --to <scope>` - move one installed pack between project and user scope. Always previews first, installs and re-inventories the destination before touching the source, and offers source removal only after the destination is verified complete. Declining or running non-interactively leaves the pack installed at both scopes rather than failing. `--dry-run` stops after the preview; there is no force flag. See [Tool Packs](../cli-utilities/tool-packs.md#oat-tools-migrate).
|
|
60
115
|
- `oat pjm doctor --json` - read-only repository PJM diagnostics whose result carries an additive `adoption` object (`state` of `declared` | `inferred-legacy` | `partial-initialization` | `none`, `repoRoot`, and `recovery`). This, not `oat tools has project-management`, is the check that answers whether _this repository_ adopted PJM.
|
|
61
116
|
- `oat config dump --json` - merged config with source attribution
|
|
@@ -66,7 +121,7 @@ Notable commands introduced in the current CLI surface:
|
|
|
66
121
|
- `oat review latest --json` - find the newest review artifact by `oat_generated_at`, scanning the active or specified project's `reviews/` and `reviews/archived/` directories plus ad-hoc review locations. Same-time candidates use target priority, then lifecycle recency (`final` > higher phase/task > lower phase/task). The JSON contract returns `path`, `scope`, `generatedAt`, `kind` (`project` or `adhoc`), `archived`, and `actionable`, with `null` values when no review exists. Archived project reviews remain discoverable as history but return `actionable: false`.
|
|
67
122
|
- `oat project list --json` - summary state for tracked projects under the configured projects root
|
|
68
123
|
- `oat project complete-state <project-path>` - apply the canonical completed-state mutation to a project's `state.md`; used by `oat-project-complete` during lifecycle closeout
|
|
69
|
-
- `oat project archive [project-path] [--project-recap-run <project-relative-path>]` - archive a tracked project through the same local move, summary export, and optional S3 upload path used by completion. When omitted, the project path falls back to the active project. The optional recap path must identify a `project-recap` run inside the project's `explainers/` directory. Archive stages the selected complete package into `.oat/repo/reference/project-recaps/<YYYYMMDD-project-slug>/`, verifies every manifest-declared immutable file byte, then atomically installs the export before deleting the active project. Existing destinations, incomplete legacy hash coverage, stale bytes, path escapes, and recipe mismatches fail without removing the active project.
|
|
124
|
+
- `oat project archive [project-path] [--project-recap-run <project-relative-path>] [--no-commit]` - archive a tracked project through the same local move, summary export, and optional S3 upload path used by completion. When omitted, the project path falls back to the active project. The optional recap path must identify a `project-recap` run inside the project's `explainers/` directory. Archive stages the selected complete package into `.oat/repo/reference/project-recaps/<YYYYMMDD-project-slug>/`, verifies every manifest-declared immutable file byte, then atomically installs the export before deleting the active project. Existing destinations, incomplete legacy hash coverage, stale bytes, path escapes, and recipe mismatches fail without removing the active project. `--no-commit` is a manual/library-only option: for a synced project it still removes the checkout but deliberately omits the lifecycle commit receipt. Never pass it through `oat-project-complete`, which requires that receipt.
|
|
70
125
|
- `oat repo archive sync [project-name]` - hydrate archived project snapshots from the configured repo-scoped S3 archive into `.oat/projects/archived/`. The old `oat project archive sync` path remains as a deprecated shim.
|
|
71
126
|
- `oat project validate-plan --project-path <path>` - validates `oat_plan_parallel_groups` metadata in `plan.md`; exits non-zero on invalid. See [Implementation Execution](../workflows/projects/implementation-execution.md#parallel-phase-groups).
|
|
72
127
|
- `oat project log append|check|synthesize|rollup` - manage the optional append-only project observation log: append validated judgment or structural entries, inspect grammar and synthesis status, complete end-of-run synthesis, and roll observations into `summary.md` plus the configured repository ledger. See [Project Log](../cli-utilities/project-log.md).
|
|
@@ -52,6 +52,8 @@ Pack intent is stored per scope:
|
|
|
52
52
|
- Local runtime config (per-developer state): `.oat/config.local.json`
|
|
53
53
|
- Active idea: `activeIdea` in `.oat/config.local.json` (repo) or `~/.oat/config.json` (user)
|
|
54
54
|
- Projects root config: `projects.root` in `.oat/config.json` (read via `oat config get projects.root`)
|
|
55
|
+
- Default project scope: `projects.defaultScope` in `.oat/config.json`
|
|
56
|
+
(`synced` by default; override with `OAT_PROJECTS_DEFAULT_SCOPE`)
|
|
55
57
|
- Archive config: `archive.s3Uri`, `archive.s3SyncOnComplete`, `archive.summaryExportPath`, `archive.wrapUpExportPath`, `archive.awsProfile`, and `archive.awsRegion` in `.oat/config.json`
|
|
56
58
|
- Workflow gate config: `workflow.gates.skills` and `workflow.gates.execTargets` in `.oat/config.json`, `.oat/config.local.json`, or `~/.oat/config.json` (manage via `oat gate`)
|
|
57
59
|
- Project sync manifest/config: `.oat/sync/`
|
|
@@ -87,16 +89,31 @@ Config ownership note:
|
|
|
87
89
|
## Project artifact trees
|
|
88
90
|
|
|
89
91
|
- Shared: `.oat/projects/shared/<project>/`
|
|
92
|
+
- Synced checkout: `.oat/projects/synced/<project>/` (gitignored nested
|
|
93
|
+
worktree)
|
|
94
|
+
- Synced record: `.oat/projects/synced/<project>.json` (tracked on the parent
|
|
95
|
+
branch)
|
|
96
|
+
- Synced ref: `refs/oat/projects/<project>` on `origin`
|
|
90
97
|
- Local: `.oat/projects/local/<project>/`
|
|
91
98
|
- Archived: `.oat/projects/archived/<project>/`
|
|
92
99
|
|
|
100
|
+
The OAT-managed block in the repository root `.gitattributes` marks shared
|
|
101
|
+
project artifacts as generated for repository hosting UIs. `oat init` and
|
|
102
|
+
`oat tools update` own that block; preserve non-OAT entries outside its markers
|
|
103
|
+
and do not hand-edit the managed entry.
|
|
104
|
+
|
|
93
105
|
Archive sync surfaces:
|
|
94
106
|
|
|
95
107
|
- Local archive root: `.oat/projects/archived/`
|
|
96
108
|
- Remote archive base: `archive.s3Uri` in `.oat/config.json`
|
|
97
109
|
- Archive sync command: `oat repo archive sync` or `oat repo archive sync <project-name>`
|
|
98
110
|
- Remote archive snapshot shape: `<archive.s3Uri>/<repo-slug>/projects/YYYYMMDD-<project-name>/`
|
|
99
|
-
- Summary export target:
|
|
111
|
+
- Summary export target:
|
|
112
|
+
`<repo>/<archive.summaryExportPath>/YYYYMMDD-<project-name>.md` when
|
|
113
|
+
configured. The archive report returns this absolute filesystem path, while
|
|
114
|
+
`oat project links --durable-summary` normalizes a contained path to a
|
|
115
|
+
repository-relative code span. It does not invent a GitHub-style URL for
|
|
116
|
+
non-GitHub remotes.
|
|
100
117
|
- Wrap-up export target: `<repo>/<archive.wrapUpExportPath>/YYYY-MM-DD-wrap-up-<label>.md` when configured; otherwise `oat-wrap-up` falls back to `<repo>/.oat/repo/reference/wrap-ups/`
|
|
101
118
|
|
|
102
119
|
## Ideas — project level (gitignored)
|
|
@@ -24,6 +24,9 @@ Project scope is used for project workflows and repo-local sync state. User scop
|
|
|
24
24
|
config.local.json
|
|
25
25
|
projects/
|
|
26
26
|
shared/
|
|
27
|
+
synced/
|
|
28
|
+
<project>.json
|
|
29
|
+
<project>/
|
|
27
30
|
local/
|
|
28
31
|
archived/
|
|
29
32
|
ideas/
|
|
@@ -47,7 +50,7 @@ Project scope is used for project workflows and repo-local sync state. User scop
|
|
|
47
50
|
| `.oat/config.json` | Shared repo runtime config for non-sync settings | Includes `worktrees.root`, `projects.root`, `git.defaultBranch`, `archive.*`, and `documentation.*` |
|
|
48
51
|
| `.oat/config.local.json` | Local per-developer runtime state | Gitignored; includes `activeProject`, `lastPausedProject`, `activeIdea` |
|
|
49
52
|
| `.oat/state.md` | Generated repo state dashboard | Gitignored; rebuilt with `oat state refresh` from config, project artifacts, and knowledge metadata |
|
|
50
|
-
| `.oat/projects/` | OAT project artifacts | `shared`, `local`, `archived`
|
|
53
|
+
| `.oat/projects/` | OAT project artifacts | `shared`, `synced`, `local`, and lifecycle `archived` locations |
|
|
51
54
|
| `.oat/ideas/` | Project-level ideas store | Often gitignored |
|
|
52
55
|
| `.oat/sync/` | Interop sync state/config | See details below |
|
|
53
56
|
| `.oat/templates/` | Artifact templates used by OAT skills | Source for scaffolding. Includes `docs-app-fuma/` (Fumadocs) and `docs-app-mkdocs/` (MkDocs) templates. |
|
|
@@ -105,6 +108,7 @@ Current schema keys:
|
|
|
105
108
|
| `version` | `number` | `1` | Schema version |
|
|
106
109
|
| `worktrees.root` | `string` | `".worktrees"` | Root directory for git worktrees (repo-relative or absolute) |
|
|
107
110
|
| `projects.root` | `string` | `".oat/projects/shared"` | Default root directory for OAT projects |
|
|
111
|
+
| `projects.defaultScope` | `string` | `"synced"` | Scope used by project creation when `--scope` is omitted: `shared`, `local`, or `synced`. Environment override: `OAT_PROJECTS_DEFAULT_SCOPE`. |
|
|
108
112
|
| `localPaths` | `string[]` | - | Gitignored directories to sync between main repo and worktrees. Supports glob patterns. Managed via `oat local add/remove`. |
|
|
109
113
|
| `documentation.root` | `string` | - | Root directory containing documentation source files (e.g., `apps/docs/docs`) |
|
|
110
114
|
| `documentation.tooling` | `string` | - | Documentation framework identifier (`mkdocs` or `fumadocs`) |
|
|
@@ -139,7 +143,8 @@ Example:
|
|
|
139
143
|
{
|
|
140
144
|
"version": 1,
|
|
141
145
|
"projects": {
|
|
142
|
-
"root": ".oat/projects/shared"
|
|
146
|
+
"root": ".oat/projects/shared",
|
|
147
|
+
"defaultScope": "synced"
|
|
143
148
|
},
|
|
144
149
|
"worktrees": {
|
|
145
150
|
"root": ".worktrees"
|
|
@@ -173,12 +178,23 @@ For repo-relative values (levels 3-4), paths are resolved from the repository ro
|
|
|
173
178
|
Each OAT project lives under:
|
|
174
179
|
|
|
175
180
|
- `.oat/projects/shared/<project>/`
|
|
181
|
+
- `.oat/projects/synced/<project>/` for a gitignored nested worktree whose
|
|
182
|
+
history is published to `refs/oat/projects/<project>`
|
|
183
|
+
- `.oat/projects/synced/<project>.json` for the tracked discovery record that
|
|
184
|
+
identifies the ref, remote, and active or complete status
|
|
176
185
|
- `.oat/projects/local/<project>/`
|
|
177
186
|
- `.oat/projects/archived/<project>/`
|
|
178
187
|
|
|
179
|
-
|
|
188
|
+
Completion and archive sync behavior:
|
|
180
189
|
|
|
181
|
-
- `oat-project-complete`
|
|
190
|
+
- When archiving is selected, `oat-project-complete` archives locally into
|
|
191
|
+
`.oat/projects/archived/<project>/`. For a synced project, the snapshot omits
|
|
192
|
+
the nested checkout's `.git` pointer and `reviews/`, then completion marks
|
|
193
|
+
the tracked record complete, removes the nested worktree, and retains the
|
|
194
|
+
project ref so pinned links keep resolving.
|
|
195
|
+
- When archiving is disabled or declined, completion leaves the synced
|
|
196
|
+
checkout and ref in place, pushes the finalized artifacts, and exact-path
|
|
197
|
+
commits the tracked record as complete.
|
|
182
198
|
- If `archive.s3SyncOnComplete=true` and `archive.s3Uri` is configured, completion also uploads a dated snapshot such as `<archive.s3Uri>/<repo-slug>/projects/20260401-<project>/`.
|
|
183
199
|
- `oat repo archive sync` syncs all repo archived projects down from S3 into `.oat/projects/archived/`.
|
|
184
200
|
- `oat repo archive sync <project-name>` syncs the latest dated remote snapshot for a single project into `.oat/projects/archived/<project-name>/`.
|
|
@@ -5,7 +5,33 @@ description: 'Project artifact contracts: state.md, spec.md, design.md, plan.md,
|
|
|
5
5
|
|
|
6
6
|
# Project Artifacts
|
|
7
7
|
|
|
8
|
-
Project artifacts
|
|
8
|
+
Project artifacts use one of three active scopes:
|
|
9
|
+
|
|
10
|
+
- `shared` artifacts live directly on the feature branch under
|
|
11
|
+
`.oat/projects/shared/<project>/`.
|
|
12
|
+
- `synced` artifacts live in a gitignored nested worktree at
|
|
13
|
+
`.oat/projects/synced/<project>/`, backed by
|
|
14
|
+
`refs/oat/projects/<project>` on `origin`. The feature branch tracks only
|
|
15
|
+
`.oat/projects/synced/<project>.json`.
|
|
16
|
+
- `local` artifacts stay untracked on the current machine under
|
|
17
|
+
`.oat/projects/local/<project>/`.
|
|
18
|
+
|
|
19
|
+
`projects.defaultScope` controls creation when a command does not pass
|
|
20
|
+
`--scope`; its default is `synced`.
|
|
21
|
+
|
|
22
|
+
## Synced artifact bookkeeping
|
|
23
|
+
|
|
24
|
+
Lifecycle skills write the same project files in every scope. After a synced
|
|
25
|
+
write, they use `oat project push` instead of staging the artifact path on the
|
|
26
|
+
parent branch. The command makes an artifact commit in the nested checkout,
|
|
27
|
+
rebases it on the fetched project ref, and pushes only that ref. Arrival skills
|
|
28
|
+
run `oat project pull` before reading artifacts so a record or remote ref can
|
|
29
|
+
materialize the checkout first.
|
|
30
|
+
|
|
31
|
+
The tracked JSON record is routing metadata, not a copy of the project. It
|
|
32
|
+
identifies the slug, `origin`, ref, status, and archive snapshot when present.
|
|
33
|
+
The project ref remains the source of truth for active artifact content and
|
|
34
|
+
history.
|
|
9
35
|
|
|
10
36
|
## Core artifacts
|
|
11
37
|
|
|
@@ -406,6 +406,28 @@ For a plan-declared parallel group, the root:
|
|
|
406
406
|
Containment, ownership, base, or fixture-readiness failure in smoke mode aborts
|
|
407
407
|
the run. It never authorizes replacement or sequential degradation.
|
|
408
408
|
|
|
409
|
+
## Synced projects in worktrees
|
|
410
|
+
|
|
411
|
+
A tracked `.oat/projects/synced/<project>.json` record lets every repository
|
|
412
|
+
worktree discover the same synced project without putting its artifacts on the
|
|
413
|
+
feature branch. On arrival, project skills run `oat project pull` before they
|
|
414
|
+
read state. Pull fetches the exact `refs/oat/projects/<project>` ref and, when
|
|
415
|
+
needed, materializes a fresh nested checkout at
|
|
416
|
+
`.oat/projects/synced/<project>/`.
|
|
417
|
+
|
|
418
|
+
Each parent worktree gets an independent detached nested checkout. Those
|
|
419
|
+
checkouts do not share an index or working tree; they reconcile artifact
|
|
420
|
+
history through the project ref on `origin`. If a pull or push encounters an
|
|
421
|
+
overlapping change, resolve the files in the nested checkout and run
|
|
422
|
+
`oat project pull --continue`. Use `oat project pull --abort` to restore the
|
|
423
|
+
pre-pull state instead.
|
|
424
|
+
|
|
425
|
+
`oat local sync` skips these nested repositories, so local-path hydration does
|
|
426
|
+
not copy or overwrite synced artifact checkouts. Removing a parent worktree
|
|
427
|
+
also needs no special nested-checkout cleanup: the ignored nested worktree does
|
|
428
|
+
not prevent parent removal, and the next `oat project pull` prunes stale Git
|
|
429
|
+
worktree registrations before materializing or updating the current checkout.
|
|
430
|
+
|
|
409
431
|
## Codex Depth
|
|
410
432
|
|
|
411
433
|
Default execution needs the root-to-phase-agent depth. `agents.max_depth >= 2`
|
|
@@ -24,6 +24,8 @@ Projects are where the workflow layer becomes concrete: lifecycle phases, `state
|
|
|
24
24
|
- [Programmatic Execution](programmatic-execution.md) - Per-harness headless/CLI execution surfaces and where OAT uses them.
|
|
25
25
|
- [Project Artifacts](artifacts.md) - What lives in `state.md`, `discovery.md`, `plan.md`, `implementation.md`, and related files.
|
|
26
26
|
- [Implementation Execution](implementation-execution.md) - Phase dispatch, runtime selection, review/fix loop, and dry-run behavior.
|
|
27
|
+
- [Reviewing OAT PRs](reviewing-oat-prs.md) - Read synced-project records and SHA-pinned reviewer links in a PR.
|
|
28
|
+
- [Picking Up Projects](picking-up-projects.md) - Continue a synced project on another machine or from another user.
|
|
27
29
|
- [Project Splitting](splitting.md) - How broad discoveries or brainstorms become coordination parents and child projects.
|
|
28
30
|
- [State Machine](state-machine.md) - Lifecycle and review status transitions across a project.
|
|
29
31
|
- [Reviews](reviews.md) - How review request/receive loops work inside OAT projects.
|
|
@@ -50,6 +52,8 @@ This sub-section is the deep technical surface for how tracked OAT projects exec
|
|
|
50
52
|
- Split broad scopes into coordination parents and focused children in [Project Splitting](splitting.md).
|
|
51
53
|
- Understand lifecycle and review transitions in [State Machine](state-machine.md).
|
|
52
54
|
- Learn review and PR expectations in [Reviews](reviews.md) and [PR Flow](pr-flow.md).
|
|
55
|
+
- Review a synced project's durable context in [Reviewing OAT PRs](reviewing-oat-prs.md).
|
|
56
|
+
- Continue remote project work with [Picking Up Projects](picking-up-projects.md).
|
|
53
57
|
|
|
54
58
|
## Go Deeper
|
|
55
59
|
|
|
@@ -68,4 +72,6 @@ This sub-section is the deep technical surface for how tracked OAT projects exec
|
|
|
68
72
|
- [State Machine](state-machine.md) - Lifecycle and review status transitions across a project.
|
|
69
73
|
- [Reviews](reviews.md) - How review request/receive loops work inside OAT projects.
|
|
70
74
|
- [PR Flow](pr-flow.md) - Progress and final PR generation expectations.
|
|
75
|
+
- [Reviewing OAT PRs](reviewing-oat-prs.md) - Record metadata, pinned links, and editor discovery for synced projects.
|
|
76
|
+
- [Picking Up Projects](picking-up-projects.md) - Remote discovery, adopting pull, coordination children, and retention boundaries.
|
|
71
77
|
- [Repository PR Comment Analysis](repo-analysis.md) - Repo-wide PR comment collection and triage workflows.
|
|
@@ -70,13 +70,23 @@ After implementation closeout finishes:
|
|
|
70
70
|
- GitHub PR feedback delegates to `oat-project-review-receive-remote`
|
|
71
71
|
- Review artifacts delegate to `oat-project-review-receive`
|
|
72
72
|
- After revision tasks complete, state returns to `pr_open`
|
|
73
|
-
5. **Complete** (`oat-project-complete`) — accepts any phase status (`pr_open`, `complete`, `in_progress`), auto-refreshes `summary.md` before closeout when needed, and
|
|
73
|
+
5. **Complete** (`oat-project-complete`) — accepts any phase status (`pr_open`, `complete`, `in_progress`), auto-refreshes `summary.md` before closeout when needed, and archives when selected by the workflow preference or completion prompt
|
|
74
74
|
|
|
75
75
|
### Completion archive behavior
|
|
76
76
|
|
|
77
|
-
On completion, OAT
|
|
78
|
-
|
|
79
|
-
-
|
|
77
|
+
On completion, OAT treats archive handling as an explicit closeout choice:
|
|
78
|
+
|
|
79
|
+
- When archiving is selected, the local archive is written to `.oat/projects/archived/<project>/`.
|
|
80
|
+
- When archiving is disabled or declined, durable projects remain at their
|
|
81
|
+
active path. Synced completion still finalizes and pushes the project ref,
|
|
82
|
+
commits the discovery record as `complete`, retains the checkout and ref, and
|
|
83
|
+
attests a selected recap against the project-ref history.
|
|
84
|
+
- For a synced project, closeout first finalizes the project artifacts and
|
|
85
|
+
pushes them to `refs/oat/projects/<project>`. Archive then requires a clean,
|
|
86
|
+
fully pushed checkout; copies it without the `.git` pointer or `reviews/`;
|
|
87
|
+
marks the tracked record complete; commits the record and configured durable
|
|
88
|
+
exports on the parent branch; removes the nested checkout; and retains the
|
|
89
|
+
ref. This order keeps SHA-pinned PR links valid after completion.
|
|
80
90
|
- If `.oat/config.json` enables `archive.s3SyncOnComplete` and sets `archive.s3Uri`, completion also attempts an S3 upload for a dated snapshot such as `<archive.s3Uri>/<repo-slug>/projects/20260401-<project>/`.
|
|
81
91
|
- If `.oat/config.json` sets `archive.awsProfile` and/or `archive.awsRegion`, those values are forwarded to every `aws` invocation triggered by completion (preflight checks + `aws s3 sync`) and override any ambient shell `AWS_PROFILE` / `AWS_DEFAULT_PROFILE` / `AWS_REGION` / `AWS_DEFAULT_REGION` values. The repo's archive-scoped credentials are treated as deliberate intent so users don't have to unset shell env vars before running completion. See [`config-and-local-state.md`](../../cli-utilities/config-and-local-state.md) for the full precedence chain.
|
|
82
92
|
- If `.oat/config.json` sets `archive.summaryExportPath`, completion copies `summary.md` to `<archive.summaryExportPath>/20260401-<project>.md`.
|
|
@@ -130,7 +140,7 @@ summary, documentation, PR, or project completion.
|
|
|
130
140
|
|
|
131
141
|
### Retrospective completion safety net
|
|
132
142
|
|
|
133
|
-
Before an interactive completion
|
|
143
|
+
Before an interactive completion closes the project,
|
|
134
144
|
`oat-project-complete` checks for
|
|
135
145
|
`{PROJECT_PATH}/references/project-retro.md`. If the artifact is missing, it
|
|
136
146
|
offers to generate one before completion. If the artifact exists, completion
|
|
@@ -292,6 +302,10 @@ Capture lane progression:
|
|
|
292
302
|
## Operational rules
|
|
293
303
|
|
|
294
304
|
- Keep `state.md`, `plan.md`, and `implementation.md` synchronized.
|
|
305
|
+
- For a synced project, publish lifecycle artifact writes with
|
|
306
|
+
`oat project push`; do not stage `.oat/projects/synced/<project>/` on the
|
|
307
|
+
parent branch.
|
|
308
|
+
- On arrival, run `oat project pull` before reading a synced project's state.
|
|
295
309
|
- Stop at configured HiLL checkpoints.
|
|
296
310
|
- Do not move lifecycle forward when required review gates are unresolved.
|
|
297
311
|
- Project entry skills (`oat-project-new`, `oat-project-quick-start`, and `oat-project-import-plan`) surface inherited dirty git state before scaffolding. If the dirty list includes `.oat/sync/manifest.json`, `.claude/`, `.cursor/`, or `.codex/`, the skill calls out that those paths are typically sync output and offers Commit now, Proceed anyway, or Abort.
|