Objective
Persist one already-selected methodology or procedural skill proposal under
.skill-proposals/, or ship one reviewed proposal into skills/ after all
human and composition gates pass.
Do not perform intake, path selection, purpose review, composition review, or implicit routing.
Invocation
/skill-draft-shipin Cursor or Claude Code$skill-draft-shipin Codexskill-draft-ship
Explicit invocation is required.
Repository source of truth
Before either mode:
- Resolve
repo_rootfrom the active task working directory withgit rev-parse --show-toplevel. - Require
<repo_root>/WORKFLOW.md,<repo_root>/skills/INDEX.md, and every siblingSKILL.mdneeded by the selected mode. - Read sibling instructions only from
<repo_root>/skills/. Never use a globally installed Codex, Cursor, Claude, or.agentscopy as source or fallback. - If repository discovery or a dependency fails, write nothing and return
blocked.
Draft writes are restricted to
<repo_root>/.skill-proposals/<skill_name>/. Ship writes are restricted to
the approved skills/<skill_name>/ package plus skills/INDEX.md and
README.md.
Input contracts
Draft mode
Require all of:
mode: draft- A complete checklist with
purpose,audience,when_to_use,when_not,success_signal,boundaries,context,output_format,skill_name,skill_summary, optionalinvocation, andreplace: none | proposal | shipped | both - A
pathresult whose verdict is exactlymethodologyorprocedural, with rationale; methodology also requires the unmodifiedmethodology-selectorcontract and selection
Missing or malformed inputs return blocked; do not invoke skill-brief,
skill-path-selector, or skill-review.
Ship mode
Require all of:
mode: ship- An explicit human ship utterance naming the skill
- The exact
.skill-proposals/<skill_name>/draft path purpose_passfor that draft- Either
composition_okfromskill-compositionfor the current draft content in this ship attempt, or an explicit human composition skip naming the skill and giving a reason - When
skills/<skill_name>/already exists, a fresh explicit humanship_replace: trueutterance naming that shipped target in this ship attempt
Intake-time replacement permission never authorizes a later shipped-package overwrite.
Collision contract
Normalize omitted replacement permission to replace: none; never infer or
upgrade it.
| Existing target | Required draft permission | Draft effect |
|---|---|---|
| proposal only | proposal or both |
May replace only the proposal after the replacement content validates |
| shipped only | shipped or both |
May create a replacement proposal; shipped package remains untouched |
| both | both |
May replace only the proposal; shipped package remains untouched |
Permission is valid only when the human names skill_name and the target kind
in the current task. Any unauthorized collision returns blocked with the
kind and exact paths.
Workflow
Draft mode
- Resolve the repository and validate the full draft input contract.
- Recheck proposal and shipped collisions immediately before writing and enforce the replacement table.
- For
methodology, read and run repositorymethodology-skill-creatordirectly. Prepare its JSON input from the selector handoff; never ask the human to hand-write it. The renderer only proposes content, so remap its proposedSKILL.mdto the proposal target. Do not route throughloop-orchestrator. - For
procedural, author one focusedSKILL.mdusing the repository's procedural summary/when style without anApply {Method}formula. - Validate the complete proposed package before changing an existing proposal. A failed validation leaves the existing proposal unchanged.
- Write exactly one proposal and return
draft_created; stop for a separateskill-review.
Ship mode
- Resolve the repository and validate every ship input gate.
- Treat any draft edit after
composition_okas invalidating that evidence. Composition is an input artifact, not a skill this mode invokes. - If the destination exists, require the fresh
ship_replace: trueapproval. - Copy
.skill-proposals/<skill_name>/toskills/<skill_name>/. - Update
skills/INDEX.mdand the README Meta list from the shipped description. - Delete the proposal only after the package and both documentation updates succeed. On any failure, stop and preserve the draft.
Results
Draft success:
result: draft_created
draft:
path: <repo_root>/.skill-proposals/<skill_name>
replaced_proposal: true | false
Ship success:
result: shipped
skill:
path: <repo_root>/skills/<skill_name>
composition: <composition_ok payload>
# Or, only for an explicit human skip:
composition_skip:
by: human
skill: <skill_name>
reason: <human reason>
Failure:
result: blocked
blocked:
code: repo_root_missing | missing_dependency | invalid_input | collision | validation_failed | ship_gate_failed
missing_dependencies: []
collision:
kind: proposal | shipped | both
paths: []
required_action: ...
Validation
- Draft input is complete and selected before any write.
- Draft mode writes only the authorized proposal.
- Methodology draft calls
methodology-skill-creatordirectly and never callsloop-orchestrator. - Replacement content validates before an existing proposal changes.
- Ship evidence names the current draft; fresh shipped-target replacement approval is present when required.
- Ship leaves
skills/<skill_name>/present and deletes the draft only after package and documentation updates succeed.
Boundaries
- Do not perform intake or invoke
skill-brief. - Do not select a path or invoke
skill-path-selector. - Do not select a methodology or absorb
methodology-selector. - Do not judge purpose or invoke
skill-review. - Do not invoke
skill-composition; require its artifact in ship mode. - Do not write
skills/<name>/in draft mode. - Do not commit, push, install globally, or edit files outside the repository.
Human review and stop
Human approval is required before replacing a proposal, creating a replacement draft for a shipped name, replacing a shipped package, skipping composition, or shipping.
Stop after one draft, one ship, or one blocked result.