@open-agent-toolkit/cli 0.2.56 → 0.2.58
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-phase-implementer.md +166 -10
- package/assets/bundle-metadata.json +1 -1
- package/assets/docs/contributing/smoke-testing.md +44 -0
- package/assets/docs/workflows/projects/implementation-execution.md +6 -2
- package/assets/docs/workflows/skills/explainer-kit.md +8 -5
- package/assets/public-package-versions.json +4 -4
- package/assets/skills/analyze/SKILL.md +18 -17
- package/assets/skills/oat-brainstorm/SKILL.md +2 -2
- package/assets/skills/oat-doctor/SKILL.md +49 -36
- package/assets/skills/oat-idea-summarize/SKILL.md +2 -2
- package/assets/skills/oat-project-autonomous/SKILL.md +17 -10
- package/assets/skills/oat-project-autonomous/references/gate-inventory.md +3 -3
- package/assets/skills/oat-project-complete/SKILL.md +18 -8
- package/assets/skills/oat-project-design/SKILL.md +15 -1
- package/assets/skills/oat-project-discover/SKILL.md +3 -3
- package/assets/skills/oat-project-document/references/docs/autonomy-contract.md +3 -3
- package/assets/skills/oat-project-implement/SKILL.md +1 -1
- package/assets/skills/oat-project-implement/references/completion-and-closeout.md +12 -3
- package/assets/skills/oat-project-implement/references/docs/autonomy-contract.md +3 -3
- package/assets/skills/oat-project-implement/references/phase-execution.md +225 -7
- package/assets/skills/oat-project-implement/references/plan-and-resume.md +5 -2
- package/assets/skills/oat-project-implement/scripts/capture-dirty-tree.mjs +1069 -0
- package/assets/skills/oat-project-import-plan/SKILL.md +12 -6
- package/assets/skills/oat-project-next/SKILL.md +7 -5
- package/assets/skills/oat-project-plan/SKILL.md +24 -12
- package/assets/skills/oat-project-pr-final/SKILL.md +2 -2
- package/assets/skills/oat-project-pr-final/references/docs/autonomy-contract.md +3 -3
- package/assets/skills/oat-project-quick-start/SKILL.md +11 -6
- package/assets/skills/oat-project-quick-start/references/docs/autonomy-contract.md +3 -3
- package/assets/skills/oat-project-retro/SKILL.md +4 -2
- package/assets/skills/oat-project-review-receive/SKILL.md +9 -5
- package/assets/skills/oat-project-revise/SKILL.md +6 -6
- package/package.json +2 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-phase-implementer
|
|
3
|
-
version: 1.1.
|
|
3
|
+
version: 1.1.3
|
|
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
|
|
@@ -37,7 +37,8 @@ The root supplies:
|
|
|
37
37
|
candidates, and formal dispatch stamp;
|
|
38
38
|
- `phase_recovery_limit`, `phase_recovery_attempts_used`,
|
|
39
39
|
`original_request_id`, and the root-resolved recovery authorization source;
|
|
40
|
-
- optional `parallel_group`, `expected_base_sha`, and
|
|
40
|
+
- optional `parallel_group`, `expected_base_sha`, `recovered_patch`, and
|
|
41
|
+
smoke run metadata.
|
|
41
42
|
|
|
42
43
|
Fix mode also supplies:
|
|
43
44
|
|
|
@@ -341,12 +342,62 @@ use ancestry from `expected_base_sha` as a substitute for the exact
|
|
|
341
342
|
`phase_base_head` check. For a plan-declared parallel group, verify this before
|
|
342
343
|
any task edit.
|
|
343
344
|
|
|
345
|
+
A fresh child never starts on a dirty tree. The one exception is a supplied
|
|
346
|
+
`recovered_patch`, which carries work a lost child left behind: verify it,
|
|
347
|
+
apply it, review it, and commit it as your first action before task one,
|
|
348
|
+
exactly as `## Mode: Recover` steps 2 and 4 describe, and only after every
|
|
349
|
+
precondition that can park the phase has passed. That single commit is a
|
|
350
|
+
recovery commit rather than a planned task commit, so it does not consume any
|
|
351
|
+
task's one-commit budget; report it under `### Recovery Events` with the
|
|
352
|
+
artifact reference and manifest digest. Without a verified `recovered_patch`,
|
|
353
|
+
any dirt blocks.
|
|
354
|
+
|
|
344
355
|
When smoke containment, ownership registration, expected base, or fixture
|
|
345
356
|
readiness proves the run invalid, return `INVALID_RUN_ABORT` with the evidence.
|
|
346
357
|
Do not launch a child, continue sequentially, review, or repair the invalid run.
|
|
347
358
|
|
|
348
359
|
### 2. Execute Tasks in Plan Order
|
|
349
360
|
|
|
361
|
+
#### Cross-Cutting Option Sweep
|
|
362
|
+
|
|
363
|
+
Before the first edit of a task that adds, renames, retypes, or changes the
|
|
364
|
+
default or meaning of an option, argument, flag, configuration field, schema
|
|
365
|
+
property, or policy value consumed outside the module that defines it,
|
|
366
|
+
inventory that symbol repository-wide. A value that is defined, read, and
|
|
367
|
+
written only inside its own module does not trigger this rule.
|
|
368
|
+
|
|
369
|
+
The inventory is repository-wide. It is never limited to the declared file
|
|
370
|
+
boundary and never limited to production source: sweep declarations and type
|
|
371
|
+
definitions, constructors and factories, adapters and wrappers, serializers and
|
|
372
|
+
deserializers, persisted schemas and templates, fixtures, mocks, snapshots, and
|
|
373
|
+
tests, and every call site that constructs, forwards, or defaults the value.
|
|
374
|
+
Use `rg` or an equivalent repository-wide search together with whatever
|
|
375
|
+
language-aware check this repository already provides; no single tool is proof
|
|
376
|
+
of completeness, so search the property name, its serialized spelling, and its
|
|
377
|
+
accessors.
|
|
378
|
+
|
|
379
|
+
A declared file list is review scope, not a correctness boundary. When the
|
|
380
|
+
sweep finds files outside that list:
|
|
381
|
+
|
|
382
|
+
- **Widen mechanically and proceed** when every discovered file is already
|
|
383
|
+
required by the declared task outcome, the edit to it is mechanical
|
|
384
|
+
propagation of the same value, and no sibling or active parallel task owns
|
|
385
|
+
it. The effective task boundary is the declared list plus those mechanically
|
|
386
|
+
discovered files. Record every addition in the Task Outcomes `Files` cell and
|
|
387
|
+
in Self-Review Observations, and never edit `plan.md` to match.
|
|
388
|
+
- **Stop and report** the exact discovered file set and the ownership conflict
|
|
389
|
+
when the expansion would change the declared task outcome, cross sibling or
|
|
390
|
+
parallel-lane ownership, invalidate a plan-declared parallel group, or
|
|
391
|
+
require a new design, architecture, or public-behavior decision.
|
|
392
|
+
|
|
393
|
+
Threading an already-agreed option through four call sites that would otherwise
|
|
394
|
+
keep the stale default is mechanical propagation. Adding new behavior at a
|
|
395
|
+
discovered call site, changing an unrelated default, or deciding how two lanes
|
|
396
|
+
divide a shared file is not, and stops for direction. This pre-edit rule
|
|
397
|
+
matches the mechanically derived, in-phase widening already allowed during
|
|
398
|
+
post-commit recovery, and it never relaxes the standing rule against scope
|
|
399
|
+
expansion beyond the phase.
|
|
400
|
+
|
|
350
401
|
For every task:
|
|
351
402
|
|
|
352
403
|
1. Record `PRE_TASK_HEAD`.
|
|
@@ -369,7 +420,9 @@ For every task:
|
|
|
369
420
|
mutate Git config or use `--no-verify`.
|
|
370
421
|
9. Verify:
|
|
371
422
|
- HEAD is exactly one commit after `PRE_TASK_HEAD`;
|
|
372
|
-
- the commit changes only
|
|
423
|
+
- the commit changes only files in the effective task boundary, which is
|
|
424
|
+
the declared task files plus any mechanical additions permitted by, and
|
|
425
|
+
reported under, the cross-cutting option sweep;
|
|
373
426
|
- every task verification passed; and
|
|
374
427
|
- the worktree is clean.
|
|
375
428
|
10. Perform a brief between-task transition check before starting the next
|
|
@@ -462,8 +515,18 @@ phase_verification: { relevant phase command }
|
|
|
462
515
|
dispatch_target: { exact original launcher-owned target }
|
|
463
516
|
dispatch_axes: { unchanged original launcher-owned axes }
|
|
464
517
|
dispatch_stamp: { original formal Dispatch line }
|
|
518
|
+
recovered_patch: { artifact, manifest_digest, size, stat, components }
|
|
465
519
|
```
|
|
466
520
|
|
|
521
|
+
`recovered_patch` is optional. It is present only when a lost child left
|
|
522
|
+
uncommitted work that the lifecycle captured before restoring the worktree to
|
|
523
|
+
its clean base. Its `artifact` is a readable path outside the worktree, never a
|
|
524
|
+
mutable worktree path; `manifest_digest` and `size` are the capture's recorded
|
|
525
|
+
values; `stat` is the captured `git diff --cached --stat` summary; and
|
|
526
|
+
`components` lists the `index`, `worktree`, and `untracked` entries the
|
|
527
|
+
artifact holds. The same field may arrive on a same-target `implement`
|
|
528
|
+
continuation.
|
|
529
|
+
|
|
467
530
|
1. Validate every recover input. Confirm the exact launcher-owned target equals
|
|
468
531
|
the original target and the generic `continuation_events` record links
|
|
469
532
|
`continuation_event` to `original_request_id`.
|
|
@@ -471,23 +534,116 @@ dispatch_stamp: { original formal Dispatch line }
|
|
|
471
534
|
remains immutable at the same history position; and the worktree contains
|
|
472
535
|
only the reconciled pending ledger reservation plus an optional mechanically
|
|
473
536
|
bounded diff inside `bounded_files`. Any other dirt or history change
|
|
474
|
-
blocks.
|
|
537
|
+
blocks. Compare against the briefed `recovery_base_head`, never a remembered
|
|
538
|
+
earlier value: once a recovery-patch commit has landed, the retry's
|
|
539
|
+
`recovery_base_head` is the reconciled current HEAD, which includes that
|
|
540
|
+
recovery commit and any candidate or ledger-only commit already durably
|
|
541
|
+
made, and the brief omits the already-committed artifact because re-applying
|
|
542
|
+
it would duplicate the work. Beyond that reconciled reservation and its
|
|
543
|
+
bounded diff, a supplied `recovered_patch` is the only permitted
|
|
544
|
+
pre-existing dirt, and only after it verifies. Verification is read-only and
|
|
545
|
+
happens here; the apply and the commit wait for step 4, so every precondition
|
|
546
|
+
that can park the phase resolves before anything is written. When the brief
|
|
547
|
+
carries no `recovered_patch` — an ordinary resume, or a retry after the
|
|
548
|
+
recovery commit already landed — the ordinary permitted-dirt invariant above
|
|
549
|
+
is the whole of this step: there is no artifact to resolve a script for, so
|
|
550
|
+
the continuation skips verification and continues to the ledger
|
|
551
|
+
reconciliation in step 3, and step 4 is a no-op. Resolve
|
|
552
|
+
`capture-dirty-tree.mjs` through installed scope rather than a
|
|
553
|
+
repository-relative path, probing in order and binding the first match, and
|
|
554
|
+
only when an artifact was briefed:
|
|
555
|
+
|
|
556
|
+
```bash
|
|
557
|
+
set -eu
|
|
558
|
+
# `recovered_patch` is optional and all-or-nothing. Without one there is
|
|
559
|
+
# nothing to verify and nothing to apply, so the verifier is skipped
|
|
560
|
+
# entirely; a partial brief is a named stop rather than an unbound-variable
|
|
561
|
+
# death. Never dereference an artifact variable outside the branch: under
|
|
562
|
+
# `set -u` an unset one exits here, and an empty one fails verification —
|
|
563
|
+
# either way an artifact-free retry parks before the ledger reconciliation
|
|
564
|
+
# it needs to reach.
|
|
565
|
+
if [ -z "${ARTIFACT_DIR:-}${MANIFEST_DIGEST:-}${ARTIFACT_SIZE:-}" ]; then
|
|
566
|
+
: # No recovered_patch: continue to the ledger reconciliation.
|
|
567
|
+
elif [ -z "${ARTIFACT_DIR:-}" ] || [ -z "${MANIFEST_DIGEST:-}" ] ||
|
|
568
|
+
[ -z "${ARTIFACT_SIZE:-}" ]; then
|
|
569
|
+
echo "artifact-verification-failed: a partial recovered_patch is unusable; artifact, manifest_digest and size travel together" >&2
|
|
570
|
+
exit 1
|
|
571
|
+
else
|
|
572
|
+
CAPTURE_SCRIPT=""
|
|
573
|
+
REPO_ROOT=$(git -C "$PHASE_WORKTREE" rev-parse --show-toplevel 2>/dev/null || true)
|
|
574
|
+
for CAPTURE_ROOT in "${HOME:-}/.agents/skills/oat-project-implement" \
|
|
575
|
+
"${REPO_ROOT:+$REPO_ROOT/.agents/skills/oat-project-implement}"; do
|
|
576
|
+
[ -n "$CAPTURE_ROOT" ] || continue
|
|
577
|
+
[ -f "$CAPTURE_ROOT/scripts/capture-dirty-tree.mjs" ] || continue
|
|
578
|
+
CAPTURE_SCRIPT="$CAPTURE_ROOT/scripts/capture-dirty-tree.mjs"
|
|
579
|
+
break
|
|
580
|
+
done
|
|
581
|
+
[ -n "$CAPTURE_SCRIPT" ] || {
|
|
582
|
+
echo "capture-script-unavailable" >&2
|
|
583
|
+
exit 1
|
|
584
|
+
}
|
|
585
|
+
|
|
586
|
+
EXPECTED_HEAD=$(git -C "$PHASE_WORKTREE" rev-parse --verify HEAD)
|
|
587
|
+
node "$CAPTURE_SCRIPT" --verify \
|
|
588
|
+
--artifact-dir "$ARTIFACT_DIR" \
|
|
589
|
+
--manifest-digest "$MANIFEST_DIGEST" \
|
|
590
|
+
--size "$ARTIFACT_SIZE" \
|
|
591
|
+
--expected-head "$EXPECTED_HEAD"
|
|
592
|
+
fi
|
|
593
|
+
```
|
|
594
|
+
|
|
595
|
+
`ARTIFACT_DIR`, `MANIFEST_DIGEST`, and `ARTIFACT_SIZE` are the
|
|
596
|
+
`recovered_patch` fields; bind them as shell variables rather than pasting
|
|
597
|
+
`<placeholder>` tokens, which a shell reads as input redirections. The guard
|
|
598
|
+
terminates rather than warning: `node ""` reads its program from stdin and
|
|
599
|
+
exits zero at EOF, so a fall-through would report an unverified artifact as
|
|
600
|
+
verified. Every block that runs the script repeats the resolution and the
|
|
601
|
+
guard, because shell variables do not survive across separate tool
|
|
602
|
+
invocations. `--expected-head` and the
|
|
603
|
+
apply below both resolve against `$PHASE_WORKTREE`, never the ambient
|
|
604
|
+
working directory. An empty `CAPTURE_SCRIPT` is a
|
|
605
|
+
`capture-script-unavailable` stop: report it verbatim with the probed roots
|
|
606
|
+
and the recovery command
|
|
607
|
+
`oat tools install workflows --scope <user|project>` or
|
|
608
|
+
`oat tools update --pack workflows --scope <user|project>`, and never fall
|
|
609
|
+
back to a repository-relative path. With an artifact briefed, verify before
|
|
610
|
+
touching the tree and stop on any `artifact-verification-failed` mismatch, including the base mismatch
|
|
611
|
+
`--expected-head` catches: integrity is not base agreement, and a hunk whose
|
|
612
|
+
context happens to match applies cleanly at the wrong commit. Report an
|
|
613
|
+
`active-writer`, `unsupported-dirt`, `round-trip-failed`, or
|
|
614
|
+
`artifact-verification-failed` reason verbatim and stop; never improvise a
|
|
615
|
+
partial or best-effort restore. Without a verified `recovered_patch` you
|
|
616
|
+
start on a clean tree.
|
|
617
|
+
|
|
475
618
|
3. Reconcile the authoritative `pending_attempt` and nonzero
|
|
476
619
|
`phase_recovery_attempts_used` with `state.md`. Recover mode continues that
|
|
477
620
|
same consumed attempt and must not increment usage again. Missing,
|
|
478
|
-
contradictory, or unreconciled state blocks before editing.
|
|
479
|
-
|
|
621
|
+
contradictory, or unreconciled state blocks before editing. Nothing has been
|
|
622
|
+
applied or committed yet, so this block leaves the branch exactly at
|
|
623
|
+
`recovery_base_head` with the artifact untouched and re-verifiable; the root
|
|
624
|
+
re-briefs from current authoritative state once the ledger is repaired.
|
|
625
|
+
4. Only now apply the verified `recovered_patch`, if one was supplied:
|
|
626
|
+
`git apply --index` for the `index` component, `git apply` for the
|
|
627
|
+
`worktree` component, and byte copies plus the manifest's recorded
|
|
628
|
+
executable bit for the `untracked` component. Review the result and commit
|
|
629
|
+
it as your first action. That commit is immutable, and so is every commit
|
|
630
|
+
this mode durably makes after it: if anything later parks the phase, the
|
|
631
|
+
retry's `recovery_base_head` is the reconciled current HEAD, which includes
|
|
632
|
+
that recovery commit and any candidate or ledger-only commit already made.
|
|
633
|
+
That brief omits the already-committed artifact; dirt that accumulated
|
|
634
|
+
afterwards travels as its own newly captured `recovered_patch`.
|
|
635
|
+
5. Apply or complete only `bounded_correction_scope`. Recover mode must not
|
|
480
636
|
replay planned tasks and must not require, fabricate, or consume a review
|
|
481
637
|
artifact.
|
|
482
|
-
|
|
638
|
+
6. Apply the bounded correction, then run `focused_verification` and
|
|
483
639
|
`phase_verification` before creating a candidate commit. If either check
|
|
484
640
|
fails, restore `bounded_files` to their original committed content,
|
|
485
641
|
atomically mark the pending entry `failed`, durably commit only that
|
|
486
642
|
ledger transition, emit one `failed-attempt` event, and stop.
|
|
487
|
-
|
|
643
|
+
7. When both pre-commit checks pass, atomically mark the pending entry
|
|
488
644
|
`completed` and create one append-only candidate recovery commit containing
|
|
489
645
|
only `bounded_files` plus that ledger transition.
|
|
490
|
-
|
|
646
|
+
8. Immediately rerun `focused_verification` and `phase_verification` against the
|
|
491
647
|
committed HEAD; these reruns are authoritative. On pass, emit one `recovered`
|
|
492
648
|
event and report the candidate as the successful recovery commit. On
|
|
493
649
|
failure, atomically replace `completed` with `failed`, durably commit that
|
|
@@ -496,7 +652,7 @@ dispatch_stamp: { original formal Dispatch line }
|
|
|
496
652
|
commit. If terminal evidence cannot be committed, report an unreconciled
|
|
497
653
|
block that root must reject before bookkeeping. Never amend history or
|
|
498
654
|
launch fallback.
|
|
499
|
-
|
|
655
|
+
9. Return the report below. `DONE` is accepted success;
|
|
500
656
|
`DONE_WITH_CONCERNS` and `BLOCKED` may be accepted terminal stops and must
|
|
501
657
|
still report provenance, accounting, immutable history, and the event.
|
|
502
658
|
|
|
@@ -249,6 +249,50 @@ journaled worktree that is already gone from disk is still recoverable; a
|
|
|
249
249
|
contradictory or unjournaled resource fails closed with a refusal rather than
|
|
250
250
|
guessing.
|
|
251
251
|
|
|
252
|
+
### Reserved versus registered ownership
|
|
253
|
+
|
|
254
|
+
The deterministic provider's nested phase worktrees are journaled as a
|
|
255
|
+
transaction, so an interruption can no longer leave an _unjournaled_ child.
|
|
256
|
+
It can still leave state cleanup refuses by design — an interruption inside
|
|
257
|
+
`git worktree add` may leave a path with no Git registration, and that is
|
|
258
|
+
refused rather than deleted.
|
|
259
|
+
|
|
260
|
+
Other nested creators still register directly after creation. Their entries are
|
|
261
|
+
read as ownership the same way, but they are validated more loosely: a
|
|
262
|
+
directly-registered entry carries no reservation origin, so it is not subject
|
|
263
|
+
to the run-directory containment and run-baseline checks a finalized
|
|
264
|
+
reservation gets. Their creation transaction has not been migrated yet.
|
|
265
|
+
|
|
266
|
+
The two reservation states are:
|
|
267
|
+
|
|
268
|
+
- **`reserved`** — the exact branch, worktree path, marker path, expected
|
|
269
|
+
baseline, shared Git directory, and run identity are written to the manifest
|
|
270
|
+
_before_ `git worktree add` runs. The entry is durable intent, not ownership.
|
|
271
|
+
- **`registered`** — the child's marker, Git worktree registration, branch,
|
|
272
|
+
HEAD ancestry, and shared Git directory have all been corroborated.
|
|
273
|
+
Finalization only flips a matching reservation; it never rewrites what was
|
|
274
|
+
reserved, and a child contradicting its reservation is refused.
|
|
275
|
+
|
|
276
|
+
Cleanup reconciles a reservation only against exactly matching state. If
|
|
277
|
+
neither the branch nor the worktree was ever created, nothing is deleted and
|
|
278
|
+
the reservation goes away with the manifest. If both exist exactly as reserved,
|
|
279
|
+
they are removed after baseline, shared Git directory, and run-marker
|
|
280
|
+
corroboration. If only the branch survives, its tip must equal the reserved
|
|
281
|
+
baseline exactly. Anything else — an occupied path Git never registered, a
|
|
282
|
+
different branch at the reserved path, a missing marker — fails closed.
|
|
283
|
+
|
|
284
|
+
Manifests written before this transaction existed use ownership journal schema
|
|
285
|
+
version 1. They stay readable and all of their entries read as already
|
|
286
|
+
`registered`. Such a manifest is never rewritten to a newer schema version and
|
|
287
|
+
never gains a reservation, and a v1 entry claiming reserved state is refused
|
|
288
|
+
rather than treated as owned. Direct registration may still append a
|
|
289
|
+
`registered` entry to one, which leaves its schema version untouched.
|
|
290
|
+
|
|
291
|
+
Nothing is ever pruned by `smoke-*` name, path prefix, run age, or ancestry
|
|
292
|
+
alone. Without an ownership lease the runner cannot tell a stale run from an
|
|
293
|
+
active one, so it refuses instead of guessing and leaves the state for you to
|
|
294
|
+
resolve.
|
|
295
|
+
|
|
252
296
|
To finish a stalled run, re-run the matching `--stage collect` (collection-only
|
|
253
297
|
triggers cleanup) or start a fresh run; the runner reconciles journaled
|
|
254
298
|
resources on the next errored or collection-bearing invocation. If cleanup fails
|
|
@@ -88,7 +88,7 @@ The phase implementer receives one `Phase Scope`, reads the relevant artifacts
|
|
|
88
88
|
once, and directly executes each task in plan order. For every task it:
|
|
89
89
|
|
|
90
90
|
1. records the pre-task HEAD;
|
|
91
|
-
2. implements
|
|
91
|
+
2. implements the declared task files plus any mechanical additions permitted by, and reported under, the cross-cutting option sweep (a repository-wide sweep for every consumer of a changed option; cross-owner expansions stop and report instead);
|
|
92
92
|
3. runs task verification;
|
|
93
93
|
4. self-checks requirements and scope before commit;
|
|
94
94
|
5. creates exactly one task commit; and
|
|
@@ -152,7 +152,11 @@ by the phase's standing authority. The important distinctions are:
|
|
|
152
152
|
boundary, not for every eligible defect;
|
|
153
153
|
- a **continuation** preserves the original request and exact target, either in
|
|
154
154
|
the accepted handle or through an explicitly linked fresh same-target
|
|
155
|
-
recovery launch
|
|
155
|
+
recovery launch, and never starts on a dirty tree: uncommitted work a lost
|
|
156
|
+
child left behind is first captured into a digest-verified artifact,
|
|
157
|
+
restored out of the worktree, handed forward as `recovered_patch`, and
|
|
158
|
+
committed by the continuation as its first action, while unverified or
|
|
159
|
+
unsupported dirt still blocks; and
|
|
156
160
|
- a **successful repair** produces one immutable append-only recovery commit.
|
|
157
161
|
|
|
158
162
|
This recovery is not accepted-launch fallback. After a launch is accepted,
|
|
@@ -434,11 +434,14 @@ typed adapter settings.
|
|
|
434
434
|
Private integrations use the core boundary directly: resolve private inputs
|
|
435
435
|
before the run, construct one versioned request, invoke the core once, then
|
|
436
436
|
publish or link the versioned manifest after the run. Wrapper acceptance reads
|
|
437
|
-
the complete post-run `publish-receipt/v2`,
|
|
438
|
-
|
|
439
|
-
remains readable for replay of older runs only.
|
|
440
|
-
|
|
441
|
-
|
|
437
|
+
the complete post-run `publish-receipt/v2`, requires complete manifest and
|
|
438
|
+
catalog evidence, verifies the core run ID, and rejects foreign or stale
|
|
439
|
+
receipts; `publish-receipt/v1` remains readable for replay of older runs only.
|
|
440
|
+
Public and protected v2 receipts must each provide exactly one entry for every
|
|
441
|
+
finalized manifest artifact and exactly one generated catalog entry. The
|
|
442
|
+
`explainer-kit` wrapper extension contract owns this rule; this page restates
|
|
443
|
+
it for integrators. Presets, private source systems, external-document
|
|
444
|
+
synchronization, and personal destinations remain wrapper-owned.
|
|
442
445
|
|
|
443
446
|
V1 exposes no plugin registry or private mid-pipeline hook. Unsupported
|
|
444
447
|
contract majors and identity mismatches fail closed instead of being guessed
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: analyze
|
|
3
|
-
version: 0.
|
|
3
|
+
version: 0.2.0
|
|
4
4
|
description: Multi-angle analysis of existing artifacts, codebases, documents, or systems. Examines what you have from six analysis angles and produces structured findings with prioritized recommendations.
|
|
5
5
|
argument-hint: 'target [--context path]'
|
|
6
6
|
user-invocable: true
|
|
@@ -49,15 +49,16 @@ Print this banner once at start:
|
|
|
49
49
|
|
|
50
50
|
Then print step indicators before beginning work:
|
|
51
51
|
|
|
52
|
-
- `[1/
|
|
53
|
-
- `[2/
|
|
54
|
-
- `[3/
|
|
55
|
-
- `[4/
|
|
56
|
-
- `[5/
|
|
57
|
-
- `[6/
|
|
58
|
-
- `[7/
|
|
59
|
-
- `[8/
|
|
60
|
-
- `[9/
|
|
52
|
+
- `[1/10] Parsing arguments…`
|
|
53
|
+
- `[2/10] Reading context…` (if applicable)
|
|
54
|
+
- `[3/10] Classifying input type…`
|
|
55
|
+
- `[4/10] Selecting analysis angles…`
|
|
56
|
+
- `[5/10] Checking sub-agent availability…`
|
|
57
|
+
- `[6/10] Executing analysis angles…`
|
|
58
|
+
- `[7/10] Checking for comparisons…` (if applicable)
|
|
59
|
+
- `[8/10] Cross-angle synthesis…`
|
|
60
|
+
- `[9/10] Resolving output destination…`
|
|
61
|
+
- `[10/10] Writing artifact…`
|
|
61
62
|
|
|
62
63
|
For long-running operations, print a start line and a completion line:
|
|
63
64
|
|
|
@@ -72,7 +73,7 @@ Keep it concise; don't print a line for every shell command.
|
|
|
72
73
|
|
|
73
74
|
### Step 1: Parse arguments
|
|
74
75
|
|
|
75
|
-
`[1/
|
|
76
|
+
`[1/10] Parsing arguments…`
|
|
76
77
|
|
|
77
78
|
Parse from `$ARGUMENTS`:
|
|
78
79
|
|
|
@@ -91,7 +92,7 @@ The prompt should ask: _"What would you like me to analyze? Provide a file path,
|
|
|
91
92
|
|
|
92
93
|
### Step 2: Read context (if provided)
|
|
93
94
|
|
|
94
|
-
`[2/
|
|
95
|
+
`[2/10] Reading context…`
|
|
95
96
|
|
|
96
97
|
If `--context` is specified:
|
|
97
98
|
|
|
@@ -107,7 +108,7 @@ If `--context` is not specified, skip this step.
|
|
|
107
108
|
|
|
108
109
|
### Step 3: Input type classification
|
|
109
110
|
|
|
110
|
-
`[3/
|
|
111
|
+
`[3/10] Classifying input type…`
|
|
111
112
|
|
|
112
113
|
Classify the target to determine analysis angle emphasis:
|
|
113
114
|
|
|
@@ -126,7 +127,7 @@ Log: `→ Input type: {type}`
|
|
|
126
127
|
|
|
127
128
|
### Step 4: Analysis angle selection
|
|
128
129
|
|
|
129
|
-
`[4/
|
|
130
|
+
`[4/10] Selecting analysis angles…`
|
|
130
131
|
|
|
131
132
|
All six angles are ALWAYS run. The input type determines emphasis weighting (primary angles get deeper investigation):
|
|
132
133
|
|
|
@@ -157,7 +158,7 @@ Log the selected emphasis: `→ Primary: {angles} · Secondary: {angles}`
|
|
|
157
158
|
### Step 5: Sub-agent availability probe
|
|
158
159
|
|
|
159
160
|
```
|
|
160
|
-
[5/
|
|
161
|
+
[5/10] Checking sub-agent availability…
|
|
161
162
|
→ analysis workers: {available | not resolved} ({reason})
|
|
162
163
|
→ Selected: Execution Tier {1|2|3} — {description}
|
|
163
164
|
```
|
|
@@ -184,7 +185,7 @@ Log the selected emphasis: `→ Primary: {angles} · Secondary: {angles}`
|
|
|
184
185
|
|
|
185
186
|
### Step 6: Execute analysis angles
|
|
186
187
|
|
|
187
|
-
`[6/
|
|
188
|
+
`[6/10] Executing analysis angles…`
|
|
188
189
|
|
|
189
190
|
For each angle, the worker (sub-agent or self) receives:
|
|
190
191
|
|
|
@@ -209,7 +210,7 @@ Print progress for each angle:
|
|
|
209
210
|
|
|
210
211
|
### Step 7: Conditional /compare dispatch
|
|
211
212
|
|
|
212
|
-
`[7/
|
|
213
|
+
`[7/10] Checking for comparisons…`
|
|
213
214
|
|
|
214
215
|
If any angle surfaces comparables (e.g. "this component could use library A or B"):
|
|
215
216
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-brainstorm
|
|
3
|
-
version: 1.3.
|
|
3
|
+
version: 1.3.5
|
|
4
4
|
description: Use when the user explicitly invokes the `brainstorm` verb, including `/oat-brainstorm`, "let's brainstorm", "brainstorm this", "can we brainstorm X", or "help me brainstorm X". For ambiguous exploratory phrasing ("I've been thinking", "what if", "help me think through"), do NOT auto-enter; respond conversationally and offer mode only after ≥2 sustained exploratory turns. Do NOT use for review, debug, PR, status, implementation, or active-workflow questions.
|
|
5
5
|
disable-model-invocation: false
|
|
6
6
|
user-invocable: true
|
|
@@ -191,7 +191,7 @@ Classify the opening brainstorm topic before running the Node preflight or print
|
|
|
191
191
|
command -v node >/dev/null 2>&1 && echo "available" || echo "missing"
|
|
192
192
|
```
|
|
193
193
|
|
|
194
|
-
- If `node` is **missing**: skip the offer entirely. Do not print the offer message. Log a one-line note in the conversation
|
|
194
|
+
- If `node` is **missing**: skip the offer entirely. Do not print the offer message. Log a one-line note in the conversation for this session only: "visual companion suppressed — node not on PATH". Nothing persists that note, so no later diagnostic run can report it. Proceed with `VISUAL_COMPANION = "unavailable"`.
|
|
195
195
|
- If `node` is **available**: print the offer as its own message. Suggested wording (adapt freely; the constraint is "own message, no other content"):
|
|
196
196
|
|
|
197
197
|
> "Some of what we're working on might be easier to explain if I can show it in a local web browser — mockups, diagrams, side-by-side comparisons. The visual companion is bundled with this skill (a small Node-based local server). Want me to start it? (Requires opening a `localhost` URL.)"
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-doctor
|
|
3
|
-
version: 1.
|
|
3
|
+
version: 1.2.0
|
|
4
4
|
description: Use when you need to diagnose your OAT setup, check for outdated skills, identify misconfigurations, or get a summary of installed tools and config. Runs health checks and recommends corrective actions.
|
|
5
5
|
argument-hint: '[--summary]'
|
|
6
6
|
disable-model-invocation: true
|
|
@@ -151,47 +151,60 @@ For summary mode, compare installed skills against the full manifest to identify
|
|
|
151
151
|
|
|
152
152
|
**Bundled skill manifest (source of truth):**
|
|
153
153
|
|
|
154
|
-
|
|
154
|
+
Each heading below names a pack exactly as `oat tools install <pack>` expects
|
|
155
|
+
it, and lists every skill that pack ships.
|
|
155
156
|
|
|
156
|
-
|
|
157
|
+
`core` pack skills:
|
|
157
158
|
|
|
158
|
-
|
|
159
|
+
- oat-docs, oat-doctor
|
|
159
160
|
|
|
160
|
-
|
|
161
|
-
- oat-project-design, oat-project-discover, oat-project-document
|
|
162
|
-
- oat-project-implement, oat-project-import-plan, oat-project-new
|
|
163
|
-
- oat-project-open, oat-project-plan, oat-project-plan-writing
|
|
164
|
-
- oat-project-pr-final, oat-project-pr-progress, oat-project-progress
|
|
165
|
-
- oat-project-promote-spec-driven, oat-project-quick-start
|
|
166
|
-
- oat-project-reconcile, oat-project-revise, oat-project-review-provide
|
|
167
|
-
- oat-project-review-receive, oat-project-review-receive-remote
|
|
168
|
-
- oat-project-spec, oat-project-summary
|
|
169
|
-
- oat-repo-knowledge-index, oat-worktree-bootstrap, oat-worktree-bootstrap-auto
|
|
170
|
-
|
|
171
|
-
Ideas pack skills:
|
|
161
|
+
`ideas` pack skills:
|
|
172
162
|
|
|
173
163
|
- oat-idea-new, oat-idea-ideate, oat-idea-summarize, oat-idea-scratchpad
|
|
174
164
|
|
|
175
|
-
|
|
165
|
+
`docs` pack skills:
|
|
166
|
+
|
|
167
|
+
- authoring-docs, oat-agent-instructions-analyze
|
|
168
|
+
- oat-agent-instructions-apply, oat-docs-analyze
|
|
169
|
+
- oat-docs-apply, oat-docs-authoring, oat-docs-bootstrap
|
|
176
170
|
|
|
177
|
-
|
|
178
|
-
- oat-docs-analyze, oat-docs-apply
|
|
171
|
+
`workflows` pack skills:
|
|
179
172
|
|
|
180
|
-
|
|
173
|
+
- oat-cursor-cloud-projects, oat-explainer-kit, oat-project-autonomous
|
|
174
|
+
- oat-project-capture, oat-project-clear-active, oat-project-complete
|
|
175
|
+
- oat-project-design, oat-project-dispatch-subagents, oat-project-discover
|
|
176
|
+
- oat-project-document, oat-project-implement, oat-project-import-plan
|
|
177
|
+
- oat-project-new, oat-project-next, oat-project-open
|
|
178
|
+
- oat-project-plan, oat-project-plan-writing, oat-project-pr-final
|
|
179
|
+
- oat-project-pr-progress, oat-project-progress, oat-project-promote-spec-driven
|
|
180
|
+
- oat-project-quick-start, oat-project-reconcile, oat-project-retro
|
|
181
|
+
- oat-project-retro-file, oat-project-revise, oat-project-review-provide
|
|
182
|
+
- oat-project-review-provide-remote, oat-project-review-receive
|
|
183
|
+
- oat-project-review-receive-remote, oat-project-spec, oat-project-split
|
|
184
|
+
- oat-project-summary, oat-repo-knowledge-index, oat-worktree-bootstrap
|
|
185
|
+
- oat-worktree-bootstrap-auto, oat-wave-execute, oat-wave-program
|
|
186
|
+
- oat-wrap-up
|
|
187
|
+
|
|
188
|
+
`utility` pack skills:
|
|
181
189
|
|
|
182
|
-
- create-agnostic-skill
|
|
183
|
-
- oat-repo-
|
|
184
|
-
- oat-review-
|
|
190
|
+
- create-agnostic-skill, explainer-kit, oat-dispatch-subagents
|
|
191
|
+
- subagent-orchestration, oat-repo-improve, oat-repo-maintainability-review
|
|
192
|
+
- oat-review-provide, oat-review-provide-remote, oat-review-receive
|
|
193
|
+
- oat-review-receive-remote
|
|
185
194
|
|
|
186
|
-
|
|
195
|
+
`project-management` pack skills:
|
|
187
196
|
|
|
188
|
-
- oat-pjm-add-backlog-item, oat-pjm-
|
|
189
|
-
- oat-pjm-review-backlog
|
|
197
|
+
- oat-pjm-add-backlog-item, oat-pjm-decision
|
|
198
|
+
- oat-pjm-update-repo-reference, oat-pjm-review-backlog
|
|
190
199
|
|
|
191
|
-
|
|
200
|
+
`research` pack skills:
|
|
192
201
|
|
|
193
202
|
- analyze, compare, deep-research
|
|
194
|
-
- skeptic, synthesize
|
|
203
|
+
- recon, skeptic, synthesize
|
|
204
|
+
|
|
205
|
+
`brainstorm` pack skills:
|
|
206
|
+
|
|
207
|
+
- oat-brainstorm
|
|
195
208
|
|
|
196
209
|
For each pack, determine:
|
|
197
210
|
|
|
@@ -224,12 +237,12 @@ OAT ▸ DOCTOR SUMMARY
|
|
|
224
237
|
| Pack | Scope | Skills | Status |
|
|
225
238
|
| --------- | ------- | ------ | -------- |
|
|
226
239
|
| core | user | 2/2 | current |
|
|
227
|
-
| docs | project |
|
|
228
|
-
| workflows | project |
|
|
240
|
+
| docs | project | 7/7 | current |
|
|
241
|
+
| workflows | project | 39/39 | current |
|
|
229
242
|
| ideas | user | 4/4 | current |
|
|
230
|
-
| project-management | project |
|
|
231
|
-
| research | project |
|
|
232
|
-
| utility | project |
|
|
243
|
+
| project-management | project | 4/4 | current |
|
|
244
|
+
| research | project | 6/6 | current |
|
|
245
|
+
| utility | project | 10/10 | outdated |
|
|
233
246
|
|
|
234
247
|
## Outdated Skills
|
|
235
248
|
|
|
@@ -239,11 +252,11 @@ OAT ▸ DOCTOR SUMMARY
|
|
|
239
252
|
|
|
240
253
|
## Available But Not Installed
|
|
241
254
|
|
|
242
|
-
- **docs** pack:
|
|
255
|
+
- **docs** pack: authoring-docs, oat-agent-instructions-analyze, oat-agent-instructions-apply, oat-docs-analyze, oat-docs-apply, oat-docs-authoring, oat-docs-bootstrap (7 skills available)
|
|
243
256
|
→ Run: oat tools install docs --scope {scope}
|
|
244
|
-
- **project-management** pack: oat-pjm-add-backlog-item, oat-pjm-update-repo-reference, oat-pjm-review-backlog (
|
|
257
|
+
- **project-management** pack: oat-pjm-add-backlog-item, oat-pjm-decision, oat-pjm-update-repo-reference, oat-pjm-review-backlog (4 skills available)
|
|
245
258
|
→ Run: oat tools install project-management --scope {scope}
|
|
246
|
-
- **research** pack: analyze, compare, deep-research, skeptic, synthesize (
|
|
259
|
+
- **research** pack: analyze, compare, deep-research, recon, skeptic, synthesize (6 skills available)
|
|
247
260
|
→ Run: oat tools install research --scope {scope}
|
|
248
261
|
|
|
249
262
|
## Configuration
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: oat-idea-summarize
|
|
3
|
-
version: 1.
|
|
3
|
+
version: 1.3.0
|
|
4
4
|
description: Use when an idea is mature enough to move from brainstorming into the backlog. Generates a summary document and adds the idea to the backlog.
|
|
5
5
|
argument-hint: '[--global]'
|
|
6
6
|
disable-model-invocation: true
|
|
7
7
|
user-invocable: true
|
|
8
|
-
allowed-tools: Read, Write, Grep, AskUserQuestion
|
|
8
|
+
allowed-tools: Read, Write, Bash, Glob, Grep, AskUserQuestion
|
|
9
9
|
---
|
|
10
10
|
|
|
11
11
|
# Summarize Idea
|