Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Compile or lint a persistent Mayor-style
.claude/skills/boshu2-craft-goal/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-05 | ✗→✓ | ▲ Improved | 66% | 0% |
| case-04 | ✗→✓ | ▲ Improved | 236% | 0% |
| case-01 | ✗→✓ | ▲ Improved | 131% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 198% | 0% |
| case-06 | ✗→✓ | ▲ Improved | 65% | 0% |
Craft the autonomy contract above AgentOps RPI. A goal is a persistent Mayor over a bead-shaped experiment graph. Each RPI is one scientific trial; the goal selects the next useful trial, preserves what was learned, and ratchets toward a larger outcome.
textGoal / Mayor: observe graph → choose bounded wave → consume verdicts → ratchet └─ Bead: durable experiment intent, context, scratch, evidence, and links └─ RPI: plan → implement → fresh validate → verdict → report and stop └─ Implementation: one RED → GREEN → refactor experiment
The number of RPIs need not be known in advance. The goal is safe when success is decidable, every experiment is bounded, knowledge is monotonic, and the authorization envelope cannot silently renew itself.
Insight: bounded waves shorten the feedback loop; one hard, non-renewing campaign envelope prevents those waves from becoming infinite continuation.
Authority boundary. The emitted goal prompt and safety report are inert caller-owned text. Crafting one creates no goal, starts no runtime, and mutates no bead; it confers no standing authorization. The prompt drives RPI dispatch only when a caller pastes it into their own goal runtime under their own authority, and only within the non-renewing envelope the caller then sets.
Named failure mode — completion treadmill: discoveries recursively become requirements and activity continues without new information. Its opposite is first-red abandonment: one falsified hypothesis ends a viable campaign. Anti-pattern: choose endless retries or stop on the first red. Corrective: continue while experiments produce a defined ratchet and remain inside the envelope; invoke an andon on churn, judgment, or exhaustion. Stop when the goal reports ACHIEVED, NOT_ACHIEVED, or NEEDS_OPERATOR.
| Caller wording | Mode | Result | |---|---|---| | "craft a goal", "turn this into a goal" | craft | Compile a Mayor-style goal prompt and settings. | | "lint/review this goal", "is this safe" | lint | Return findings and a rewrite when supplied facts permit one. |
Stop after 1 compilation pass. Never create a goal or mutate beads.
Fuzzy route is acceptable; fuzzy success is not. Before goal creation, the caller must know the outcome, what evidence would prove it, non-goals, and authority. The exact experiment graph may still be unknown.
USE_RPI for one shaped experiment with no verdict-driven follow-on.creates the root and initial experiment beads.
UNSAFE_GOAL when no falsifiable first question or terminal evidencecan be named. Route that intent to idea/plan work.
UNSAFE_GOAL for indefinite monitoring or event reaction; that is anautomation, not a terminal goal.
Goals may be different sizes. Size the wave and hard campaign envelopes to the outcome; do not invent one universal budget.
change hypotheses and dependencies, never silently enlarge success. Why: discovery should steer the route, not redefine the finish line.
goal ledger. Root epic = outer intent; child bead = one experiment/RPI. Why: compaction must not erase the scientific record.
fresh validation result. The goal may request durable verdict evidence but never rewrites it. Why: orchestration cannot author its own proof.
decision-relevant knowledge or advances acceptance. Why: activity without information is churn.
the full goal also has monotonic hard ceilings. Why: a new wave must not mint a new campaign.
failure, oscillation, scope pressure, or exhaustion enters HOLD and gets exactly 1 bounded fresh helper before UNSTUCK or ESCALATE.
graph frontier, verdicts, ratchets, churn, remaining budget, and next thesis.
shell/worktree and use the factory only for a declared bounded canary.
Stop when the goal reports ACHIEVED, NOT_ACHIEVED, or NEEDS_OPERATOR.
Record each experiment in a bead with:
Use graph semantics deliberately:
parent-child for goal → experiment membership;blocks only for real execution ordering;related for alternatives or correlated observations;discovered-from for provenance of newly exposed work.Use live bd/br state as authority and bv --robot-* output for prioritization, parallel tracks, bottlenecks, and graph insight. Never treat a static plan as fresher than the graph. The bd/br/bv tracker is an external, caller-owned runtime the emitted goal will drive (declared via intel_scope: topic); craft-goal reads live tracker state when present but starts nothing and requires no tracker to be installed to compile a prompt.
An RPI makes progress when its durable result does at least one:
different.
More code, another commit, a repeated error, or a rewritten plan is not itself progress. A NOT_PROVEN result counts only when its evidence narrows the next question; repetition without new information increments the no-progress counter. Stop when no ratchet remains inside the envelope.
prior verdicts, unresolved uncertainties, and remaining budgets.
ready experiments. Parallelize only disjoint write and regeneration scopes.
independent verdict and human-readable summary.
criterion. Red may revise a hypothesis or expose a child experiment.
add a discovered-from child and consider it in a later wave.
breaker, or emit a terminal report.
Every newly selected RPI must address an unmet criterion or a named uncertainty blocking one. A new commit, subject, bead, helper, or wave never resets totals.
Specify both:
checkpoint at its end.
and any patch/surface limit for the whole campaign.
Dispatch budget: every wave declares numeric RPI, token, time, and concurrency limits before any work is selected. Fresh-helper budget: exactly 1 per HOLD.
Continue automatically across waves only while a ratchet exists and the next experiment fits frozen acceptance, authority, and remaining envelope.
Enter HOLD on any declared trigger: repeated blocker, no ratchet for the configured number of RPIs, oscillation between prior approaches, repeated live failure class, requested acceptance change, operator-reserved decision, or hard-ceiling exhaustion. HOLD permits exactly 1 bounded fresh-context helper:
UNSTUCK must name a materially different bounded experiment, then resume.ESCALATE emits NEEDS_OPERATOR and performs no more implementation.Current Codex goals lack an agent-triggered pause/checkpoint state. A NEEDS_OPERATOR report therefore also tells the operator to pause the goal; the prompt alone cannot guarantee that product-level pause. Stop when any terminal report is emitted.
Read and fill the copy-paste-only goal prompt. Preserve its headings and terminal semantics; replace every angle-bracket field.
Lead with SAFE_TO_CREATE, USE_RPI, or UNSAFE_GOAL. Return the copy-paste prompt, separate goal-tool token budget, assumptions, and one lint line for: outcome, evidence, admission, bead graph, RPI boundary, ratchet, discovery, wave budget, hard budget, breaker, operator andon, scope, self-hosting, and terminal reports.
Output validator — a captured decision must lead with exactly one terminal token:
bashprintf '%s\n' "$decision" | head -n1 | grep -Eq '^(SAFE_TO_CREATE|USE_RPI|UNSAFE_GOAL)\b'
This pins the machine-checkable shape of the output contract. scripts/validate.sh still enforces structural hygiene; the fourteen lint dimensions above stay a human rubric because they judge prompt content that has no persisted artifact at gate time.
Done when:
Stop after 1 lint pass and zero goal executions. Paired evidence: docs/learnings/2026-07-12-go-cli-goal-stall-tracker-layer-confusion.md and skills/rpi/SKILL.md.
Return UNSAFE_GOAL with missing decisions. Do not invent acceptance, authority, graph semantics, or campaign size. The caller owns revision and goal creation.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-05 | fail→pass | 13,996 | 8,118 | -42% | 1 | 1 | 0% | 2,207 | 3,655 | +66% | 0 | 0 | — |
case-03 | fail→fail | 7,025 | 18,725 | +167% | 1 | 1 | 0% | 1,119 | 5,778 | +416% | 0 | 0 | — |
case-04 | fail→pass | 7,499 | 9,739 | +30% | 1 | 1 | 0% | 1,178 | 3,958 | +236% | 0 | 0 | — |
case-01 | fail→pass | 13,940 | 18,767 | +35% | 1 | 1 | 0% | 2,423 | 5,590 | +131% | 0 | 0 | — |
case-02 | fail→pass | 7,973 | 7,782 | -2% | 1 | 1 | 0% | 1,250 | 3,723 | +198% | 0 | 0 | — |
case-06 | fail→pass | 12,295 | 5,288 | -57% | 1 | 1 | 0% | 1,980 | 3,276 | +65% | 0 | 0 | — |
case-07 | pass→pass | 7,715 | 4,587 | -41% | 1 | 1 | 0% | 1,223 | 3,216 | +163% | 0 | 0 | — |
case-08 | fail→pass | 12,926 | 7,639 | -41% | 1 | 1 | 0% | 2,073 | 3,638 | +75% | 0 | 0 | — |
case-09 | pass→pass | 11,352 | 7,537 | -34% | 1 | 1 | 0% | 1,551 | 3,631 | +134% | 0 | 0 | — |
case-10 | pass→pass | 11,769 | 5,050 | -57% | 1 | 1 | 0% | 1,732 | 3,195 | +84% | 0 | 0 | — |
case-11 | fail→pass | 18,677 | 9,792 | -48% | 1 | 1 | 0% | 2,830 | 4,030 | +42% | 0 | 0 | — |
case-12 | pass→pass | 6,526 | 6,028 | -8% | 1 | 1 | 0% | 925 | 3,324 | +259% | 0 | 0 | — |
case-13 | pass→pass | 12,852 | 4,300 | -67% | 1 | 1 | 0% | 1,987 | 3,019 | +52% | 0 | 0 | — |
case-14 | pass→pass | 12,069 | 6,833 | -43% | 1 | 1 | 0% | 1,817 | 3,367 | +85% | 0 | 0 | — |
case-15 | fail→pass | 23,559 | 2,364 | -90% | 1 | 1 | 0% | 1,020 | 2,691 | +164% | 0 | 0 | — |
case-16 | fail→pass | 19,692 | 2,468 | -87% | 1 | 1 | 0% | 1,452 | 2,772 | +91% | 0 | 0 | — |
case-17 | pass→pass | 11,024 | 4,985 | -55% | 1 | 1 | 0% | 1,613 | 3,122 | +94% | 0 | 0 | — |
case-18 | fail→fail | 10,534 | 3,262 | -69% | 1 | 1 | 0% | 1,601 | 2,951 | +84% | 0 | 0 | — |
case-19 | fail→pass | 11,889 | 3,707 | -69% | 1 | 1 | 0% | 1,710 | 2,900 | +70% | 0 | 0 | — |
case-20 | pass→fail | 17,822 | 23,707 | +33% | 1 | 1 | 0% | 2,865 | 6,318 | +121% | 0 | 0 | — |
case-21 | pass→pass | 6,808 | 11,769 | +73% | 1 | 1 | 0% | 1,329 | 4,416 | +232% | 0 | 0 | — |
case-22 | pass→pass | 7,512 | 6,484 | -14% | 1 | 1 | 0% | 1,461 | 3,588 | +146% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 21 counted toward the lift figure. The other 1 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +41 percentage points is the difference between those two pass rates over the 21 comparable cases. 1 case got worse with the skill loaded, and it is included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.