Skip to content
Back to skills

12.Pre

ASecurity

Authors packet goal.md files from existing specs and leaves the goal template and session state with their owners.

  • 36 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added October 1, 2026
toolspythongobashnode

Works with

  • cli

Security analysis

A100/100

Scanned October 1, 2026

npx -y skills add MichelKerkmeester/opencode--spec-kit-skilled-agent-orchestration --skill 12.pre --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of 12.Pre?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for 12.Pre
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/michelkerkmeester-12-pre/badge)](https://www.skillsdirectory.com/skills/michelkerkmeester-12-pre)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: sk-create-goal
description: Authors packet goal.md files from existing specs and leaves the goal template and session state with their owners.
allowed-tools: [Read, Write, Edit, Bash, Grep, Glob]
version: 1.2.0.0
---

<!-- Keywords: create-goal, /create:goal, packet goal, goal.md authoring, phase parent goal, nested phase child goal -->

# Create Packet Goals

`sk-create-goal` authors `goal.md` content for an existing spec packet. It fills per-kind templates that are checked copies of the system-spec-kit goal template and keeps runtime goal state with its existing owners.

---

## 1. WHEN TO USE

### Activation Triggers

Use this packet to:

- Author or revise a top-level goal or phase-parent goal.
- Author or revise a nested phase-child goal.
- Add `goal.md` to an existing packet that has no goal.
- Add a binding row and matching child goal when someone adds a phase.
- Cut an over-budget parent goal without dropping a completion criterion.
- Print a parent goal's chat slice for the operator to set or resend.
- Handle a request that enters through `/create:goal`.

Keyword triggers: `create packet goal`, `author goal.md`, `revise packet goal`, `phase parent goal`, `nested phase child goal`, `add a goal file`, `goal chat slice`, `/create:goal`.

### When NOT to Use

- The target packet does not exist. Use system-spec-kit to create it first.
- The packet's phase structure is not established. Use system-spec-kit to plan the phases first.
- The request is to set, bind, inject or resend a session objective. Redirect it to the goal hooks or the host's native goal command.
- The request changes runtime goal behavior or system-spec-kit template tooling. Those owners remain outside this packet.

This packet authors files only. Its goal-file work does not change session state.

---

## 2. SMART ROUTING

Run these four decisions before writing:

1. **File content or session state?** A request to author or revise a packet's `goal.md` is file work. A request to set, bind, inject or resend a session objective belongs to the goal hooks or the host's native goal command. Redirect session-state requests without editing a packet goal.
2. **Does the packet exist? What role does it have?** Confirm the target directory exists. A nested phase child has a parent directory containing `spec.md`. A packet with direct phase-child directories is the phase parent. Otherwise, treat it as a top-level packet. If the packet is missing, route packet creation to system-spec-kit first.
3. **Does `goal.md` exist?** Revise an existing goal. Add one to an existing packet that has none. Do not treat a missing packet as a goal-file request.
4. **Does a child change alter a parent decision or criterion?** If it does, amend the parent first. Then print the updated parent chat slice for the operator to resend. Do not let a child goal override a parent decision.

Discover reference and asset documents at call time. Keep loads inside this packet. For top-level, phase-parent and nested-child authoring, retrofit, phase-add or parent amendment work, load [`references/parent-and-nested-goals.md`](references/parent-and-nested-goals.md) and follow the matching workflow. For every goal authoring or revision request, also load [`references/authoring-standards.md`](references/authoring-standards.md), [`assets/goal-exemplars.md`](assets/goal-exemplars.md) and the template for the goal's kind before drafting. For a budget measurement or chat-slice handoff, load [`references/budget-and-handoff.md`](references/budget-and-handoff.md). Fall back to the workflow reference when no specific resource applies:

```python
from pathlib import Path

SKILL_ROOT = Path(__file__).resolve().parent
RESOURCE_BASES = (SKILL_ROOT / "references", SKILL_ROOT / "assets")
DEFAULT_RESOURCE = "references/parent-and-nested-goals.md"
UNKNOWN_FALLBACK = {
    "load_level": "UNKNOWN_FALLBACK",
    "needs_disambiguation": True,
    "resources": [],
}

def discover_markdown_resources():
    documents = []
    for base in RESOURCE_BASES:
        if base.exists():
            documents.extend(path for path in base.rglob("*.md") if path.is_file())
    return {path.relative_to(SKILL_ROOT).as_posix() for path in documents}

def _guard_in_skill(relative_path):
    resolved = (SKILL_ROOT / relative_path).resolve()
    resolved.relative_to(SKILL_ROOT)
    if resolved.suffix.lower() != ".md":
        raise ValueError("Only packet-local markdown resources are routable")
    return resolved.relative_to(SKILL_ROOT).as_posix()

def route_references(selected):
    inventory = discover_markdown_resources()
    loaded = []
    seen = set()
    for relative_path in selected:
        guarded = _guard_in_skill(relative_path)
        if guarded in inventory and guarded not in seen:
            load(guarded)
            loaded.append(guarded)
            seen.add(guarded)
    if not loaded:
        fallback = _guard_in_skill(DEFAULT_RESOURCE)
        if fallback in inventory:
            load(fallback)
            loaded.append(fallback)
        return {**UNKNOWN_FALLBACK, "resources": loaded}
    return {"resources": loaded}
```

---

## 3. HOW IT WORKS

1. Read the target packet's source specification and acceptance criteria. For a phase parent, read its phase map and inspect every direct phase-child directory on disk.
2. Apply the four routing decisions above. For top-level, phase-parent, nested-child, retrofit, phase-add and amendment work, load and follow [`references/parent-and-nested-goals.md`](references/parent-and-nested-goals.md). Identify which goal files to add or revise and whether a child change requires a parent amendment first.
3. Start each goal from the template for its kind: [`goal-top-level-template.md`](assets/goal-top-level-template.md), [`goal-phase-parent-template.md`](assets/goal-phase-parent-template.md) or [`goal-phase-child-template.md`](assets/goal-phase-child-template.md). Each is a checked copy of system-spec-kit's [`goal.md.tmpl`](../../system-spec-kit/templates/addons/goal.md.tmpl) at that kind's level. Copy the block between its template markers into `goal.md`. When [`create.sh`](../../system-spec-kit/runtime/cli/spec/create.sh) `--with-goal` has already scaffolded a child's `goal.md`, keep that file and fill it with the child template's guidance. Child scaffolding alone does not create its parent goal.
4. Before filling the template, load [`authoring-standards.md`](references/authoring-standards.md) and [`goal-exemplars.md`](assets/goal-exemplars.md). Fill it with packet-specific content and apply both resources. Use three to seven self-contained completion criteria that can be checked without opening another file. Leave no template placeholders. Copy the criteria verbatim into the objective text required by the goal contract.
5. For a phase parent, make the binding table match the filesystem. Add one row for each direct phase-child directory, with that child's goal document as the target. Keep the table only in the phase-parent goal.
6. Keep the durable slice at or below 4,000 characters wherever the cap applies. Load [`references/budget-and-handoff.md`](references/budget-and-handoff.md): section 2 says which goals carry the cap and how to read the packet report, and section 3 is the cut order for a goal that runs over. Never remove a criterion or make one uncheckable.
7. Before handing off any authored or revised goal, run `node .skilled/skills/sk-doc/sk-create-goal/scripts/check-goal.cjs <packet>` from the repository root and resolve each finding. A finding left open for any reason, an operator brief included, stops the run: report it, print no chat slice and end with `STATUS=FAIL`.
8. Only after the checker passes, and after authoring or amending a parent goal, load [`references/budget-and-handoff.md`](references/budget-and-handoff.md) for the projection distinction and runtime matrix, then print its chat slice with `node .skilled/hooks/goal/bin/goal.cjs packet <packet> --workspace <root>`. The `chat_slice` is for the operator to set or resend. It is not a session bind.

---

## 4. RULES

### ✅ ALWAYS

1. Run the four pre-write decisions before changing a goal file.
2. Derive each goal from the existing packet's source documents, not from a guessed or remembered summary.
3. Start every goal from the asset template for its kind. Keep each template's fixed text identical to `goal.md.tmpl`. The parity test fails when they drift.
4. Use three to seven self-contained criteria.
5. Make each criterion checkable without opening another file.
6. Remove every template placeholder.
7. Preserve every criterion when cutting an over-budget parent.
8. Compare each binding row with the direct phase-child directories on disk.
9. Print the updated parent chat slice for the operator when parent goal content changes.

### ⛔ NEVER

1. Never change an asset template's fixed text or structure on its own. Change `goal.md.tmpl` through system-spec-kit, then carry its new fixed text into all three templates.
2. Never modify system-spec-kit's template tooling or shared validator from this packet.
3. Never bind a packet to a session, set or resend a session objective, inject runtime state or track whether an operator has set the goal.
4. Never put a binding table in a top-level goal or a phase-child goal.
5. Never omit a phase child from the parent's binding table or drop a completion criterion to meet the budget.

### ⚠️ ESCALATE IF

1. The source documents disagree about a decision or criterion. They also must describe the same phase structure. Report any conflict instead of choosing a truth silently.
2. A phase child is missing the source documents needed to author its goal.
3. The parent phase map and child directories do not agree.
4. A child change requires a parent decision or criterion amendment, but the request would leave the parent untouched.
5. A parent cannot meet the durable budget without losing a criterion or making one unclear. Do not cut the criterion count. Ask whether the packet scope should be split.
6. The request requires session-goal state or a change to a system-spec-kit-owned contract.

---

## 5. REFERENCES

- [`references/parent-and-nested-goals.md`](references/parent-and-nested-goals.md) defines the top-level, phase-parent, child, retrofit, phase-add and amendment workflows.
- [`authoring-standards.md`](references/authoring-standards.md) gives the reader checks for goal content.
- [`references/budget-and-handoff.md`](references/budget-and-handoff.md) explains the durable budget, the one full cut order, what a parent goal sent in chat contains and the runtime handoff.
- [`goal-exemplars.md`](assets/goal-exemplars.md) records cited pass and failure examples.
- [`goal-top-level-template.md`](assets/goal-top-level-template.md), [`goal-phase-parent-template.md`](assets/goal-phase-parent-template.md) and [`goal-phase-child-template.md`](assets/goal-phase-child-template.md) are the blanks each goal kind is filled from.
- [`goal.md.tmpl`](../../system-spec-kit/templates/addons/goal.md.tmpl) is the system-spec-kit source the three templates copy.
- [`scripts/README.md`](scripts/README.md) describes the checker and its tests.
- [`goal-set-string-playbook.md`](../../system-spec-kit/references/workflows/goal-set-string-playbook.md) documents the objective set string a runtime binds and when a changed goal is resent. The budget, the cut order and what a goal sent in chat contains are in `budget-and-handoff.md`.
- [`goal hooks README`](../../../hooks/goal/README.md) documents the runtime session-state boundary.
- [`goal.cjs`](../../../hooks/goal/bin/goal.cjs) prints a packet's file-derived slices without binding a session.

---

## 6. SUCCESS CRITERIA

- Every authored goal starts from the template for its kind, and all three templates match `goal.md.tmpl`.
- Every phase-parent binding row corresponds to a direct phase-child directory on disk. No child is omitted.
- Each goal has three to seven self-contained criteria. No template placeholders remain.
- Top-level and phase-parent durable slices meet the 4,000-character limit without losing a criterion.
- Print parent chat slices for the operator. Do not change session objectives or runtime state.

---

## 7. INTEGRATION POINTS

- **system-spec-kit:** Owns `goal.md.tmpl`, the source the three asset templates copy, and `create.sh --with-goal`, which scaffolds child goals with the same structure.
- **Goal hooks and host command:** Own session binding and objective delivery. This includes injection and resend tracking. This packet only authors the source file and prints its chat slice for the operator.
- **Command surface:** The intended entry point is `/create:goal`. The command itself lives outside this packet.
- **sk-doc:** Routes goal-file authoring to this packet.

---

## 8. RELATED RESOURCES

- [`README.md`](./README.md) is the short reader entry point.

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…