Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 8 additions & 4 deletions CONTRIBUTING.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,9 +2,11 @@

## Proposing a skill change

Open a PR against `main`. Describe what the skill gets wrong, ambiguous, or
misses today, and how your change fixes it — reviewers and skill-lint judge
the diff, not the intent.
For a new skill or a behavior-shaping edit, run `/write-cmk-skill` first: it
enforces a failing-baseline Iron Law and the ship checklist before text
lands under `skills/`. Then open a PR against `main`. Describe what the
skill gets wrong, ambiguous, or misses today, and how your change fixes
it — reviewers and skill-lint judge the diff, not the intent.

## The kit's bar

Expand DownExpand Up@@ -46,7 +48,9 @@ out of your own diff. CI runs the same script on every PR touching
If your repo vendored the skills via `cmk:agent-vendors` and evolved one
locally, don't just keep the fix local. Run `cmk:sync` in **contribute**
mode: it reviews local amendments flagged as generic-looking upstream
candidates and prepares them as a PR back here.
candidates, names `/write-cmk-skill` for you to run on those candidates,
then prepares them as a PR back here. Pure `## Project adaptations` stay
local and skip that gate.

## Commits

Expand Down
8 changes: 6 additions & 2 deletions docs/ai/skills/README.md
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
# Skills

The `cmk:*` skill packages under [`skills/`](../../../skills/): eight docs-family skills, thirteen setup-family skills, nine delivery-family skills, two knowledge-family skills, and one session-discipline skill (`cmk:interpret`). Each is a directory with a `SKILL.md` (frontmatter `name`/`description`/`version` plus the body the agent reads), and most ship a `references/` folder of guidance, templates, and conventions the workflow loads on demand.
The `cmk:*` skill packages under [`skills/`](../../../skills/): eight docs-family skills, thirteen setup-family skills, nine delivery-family skills, two knowledge-family skills, one session-discipline skill (`cmk:interpret`), and one meta skill (`cmk:write-cmk-skill`). Each is a directory with a `SKILL.md` (frontmatter `name`/`description`/`version` plus the body the agent reads), and most ship a `references/` folder of guidance, templates, and conventions the workflow loads on demand.

Docs-family skills follow the same shape: a "Workflow: Create" / "Workflow: Iterate" pair, with placement rules, shaping guidance, and templates kept out of `SKILL.md` itself and cited via "Read `references/<file>.md`" lines. Setup-family skills instead follow a facet shape (modes and/or a single workflow, plus a report-only `## Verify` section). Delivery-family skills follow a tracker-neutral phase/gate shape and never carry a `## Verify` section — that contract is setup-family only. Knowledge-family skills are reference packs with no create/iterate or phase shape at all. See [conventions.md](./conventions.md) for the exceptions and the full breakdown.

Expand DownExpand Up@@ -52,6 +52,10 @@ Docs-family skills follow the same shape: a "Workflow: Create" / "Workflow: Iter

- [interpret.md](./interpret.md) — `cmk:interpret`, companion session beside another window: stance plus a carry-back reply. User-invoked.

## Meta

- [write-cmk-skill.md](./write-cmk-skill.md) — `cmk:write-cmk-skill`, author or review a `cmk:*` skill under a failing-baseline Iron Law. User-invoked.

## Cross-cutting

- [conventions.md](./conventions.md) — shared shape across all skills (frontmatter, references folder, docs-family create/iterate pattern, setup-family facet shape, delivery-family phase/gate shape, knowledge-family reference packs).
- [conventions.md](./conventions.md) — shared shape across all skills (frontmatter, references folder, docs-family create/iterate pattern, setup-family facet shape, delivery-family phase/gate shape, knowledge-family reference packs, session/meta user-invoked skills).
10 changes: 6 additions & 4 deletions docs/ai/skills/conventions.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -8,8 +8,8 @@ Frontmatter declares three fields the host (Claude Code or OpenCode) reads to di

- `name` — `cmk:<short-name>`, used as the slash command and skill ID.
- `description` — opens in the second person (`Use when…` / `Use whenever…`) with trigger phrases plus an **outcome noun** (the deliverable), not a workflow step list. Used by the agent to auto-select the skill from user intent. A user-invoked skill (`disable-model-invocation: true`) writes one plain human-facing line naming the deliverable instead — the agent never routes on that line.
- `version` — `0.6.x` on `cmk:design`; `0.5.x` on `cmk:delivery-pipeline`; `0.4.x` on `cmk:cicd` (security-scanning facet) and `cmk:requirements` (Standard elicitation: close package, scope band, guards); `0.3.x` on `cmk:delivery-workflow`, `cmk:agent-instructions`, `cmk:adr`, `cmk:docs`, and `cmk:local-stack`; `0.2.0` on two docs-family skills (`learn`, `rule`) and six setup-family skills (`agent-instructions`, `agent-vendors`, `infra`, `mcp-config`, `project-layout`, `toolchain`); `0.1.x` on the rest — `repo-setup` and `sync`, `test-resources`, `rust`, and `testcontainers` (new setup-family skills), the other delivery-family skills (incl. new `cmk:delivery-simplify` at `0.1.0`), both knowledge-family skills, the two remaining docs-family skills (`codebase-docs`, `glossary`), and `cmk:interpret`.
- `disable-model-invocation: true` — optional, fourth field only. Present on `cmk:interpret`. The closer is still `---`.
- `version` — `1.0.0` on `cmk:write-cmk-skill`; `0.6.x` on `cmk:design`; `0.5.x` on `cmk:delivery-pipeline`; `0.4.x` on `cmk:cicd` (security-scanning facet) and `cmk:requirements` (Standard elicitation: close package, scope band, guards); `0.3.x` on `cmk:delivery-workflow`, `cmk:agent-instructions`, `cmk:adr`, `cmk:docs`, and `cmk:local-stack`; `0.2.0` on two docs-family skills (`learn`, `rule`) and six setup-family skills (`agent-instructions`, `agent-vendors`, `infra`, `mcp-config`, `project-layout`, `toolchain`); `0.1.x` on the rest — `repo-setup` and `sync`, `test-resources`, `rust`, and `testcontainers` (new setup-family skills), the other delivery-family skills (incl. new `cmk:delivery-simplify` at `0.1.0`), both knowledge-family skills, the two remaining docs-family skills (`codebase-docs`, `glossary`), and `cmk:interpret`.
- `disable-model-invocation: true` — optional, fourth field only. Present on `cmk:interpret` and `cmk:write-cmk-skill`. The closer is still `---`.

No skill file references outside its own package by relative path — the rule binds a package's own references, not content it emits into a target repo; a skill that needs a target-repo artifact names it repo-root-relative, and a skill that needs another skill cites it by `cmk:` name — see `cmk:agent-vendors`.

Expand All@@ -23,12 +23,14 @@ Delivery-family skills (`delivery-workflow`, `discover-efforts`, `delivery-intak

Session-discipline skills (`interpret`) are neither create/iterate nor a setup facet nor a delivery phase. `cmk:interpret` is user-invoked (`disable-model-invocation: true`), stays read-only toward the repo, and ships a `references/digest.md` loaded only at session end.

Meta skills (`write-cmk-skill`) author or review other skills in this kit. `cmk:write-cmk-skill` is user-invoked (`disable-model-invocation: true`), enforces a failing-baseline Iron Law before any skill text ships, and loads `references/pressure-testing.md` / `references/influence-principles.md` on demand. It is not a docs/setup/delivery/knowledge workflow.

Knowledge-family skills (`sui-sdk`, `sui-devstack`) are domain reference packs sitting beside the generic model rather than replacing it. `cmk:sui-sdk` is a single file with no `references/` directory: it corrects one specific stale-training-data pattern (reaching for Sui JSON-RPC instead of gRPC) and runs no workflow at all. `cmk:sui-devstack` has a `references/` folder and layers Sui-specific detail — Devstack's config shape, account/package staging, instance isolation — on top of `cmk:local-stack`'s generic `(worktree, config, instance)` primitive; it does not restate or replace that primitive. Neither knowledge skill has a `## Verify` section or an `eval.json`.

## Where
- Frontmatter, on every skill: open any `skills/<name>/SKILL.md` and read lines 1–5 (1–6 when `disable-model-invocation: true` is present).
- Skills with `references/`: `skills/adr/`, `skills/agent-instructions/`, `skills/agent-vendors/`, `skills/cicd/`, `skills/codebase-docs/`, `skills/design/`, `skills/docs/`, `skills/infra/`, `skills/learn/`, `skills/local-stack/`, `skills/project-layout/`, `skills/repo-setup/`, `skills/requirements/`, `skills/rule/`, `skills/rust/`, `skills/sync/`, `skills/test-resources/`, `skills/toolchain/`, `skills/delivery-workflow/`, `skills/discover-efforts/`, `skills/delivery-intake/`, `skills/delivery-simplify/`, `skills/delivery-review/`, `skills/delivery-ship/`, `skills/delivery-pipeline/`, `skills/sui-devstack/`, `skills/interpret/`. Skills without one: `skills/glossary/`, `skills/mcp-config/`, `skills/delivery-spec-plan/`, `skills/delivery-handoff/`, `skills/sui-sdk/`, `skills/testcontainers/`.
- Skills with `eval.json`: `skills/agent-instructions/eval.json`, `skills/codebase-docs/eval.json`, `skills/local-stack/eval.json`, `skills/repo-setup/eval.json`, `skills/sync/eval.json`, `skills/interpret/eval.json`. No delivery-family or knowledge-family skill ships one.
- Skills with `references/`: `skills/adr/`, `skills/agent-instructions/`, `skills/agent-vendors/`, `skills/cicd/`, `skills/codebase-docs/`, `skills/design/`, `skills/docs/`, `skills/infra/`, `skills/learn/`, `skills/local-stack/`, `skills/project-layout/`, `skills/repo-setup/`, `skills/requirements/`, `skills/rule/`, `skills/rust/`, `skills/sync/`, `skills/test-resources/`, `skills/toolchain/`, `skills/delivery-workflow/`, `skills/discover-efforts/`, `skills/delivery-intake/`, `skills/delivery-simplify/`, `skills/delivery-review/`, `skills/delivery-ship/`, `skills/delivery-pipeline/`, `skills/sui-devstack/`, `skills/interpret/`, `skills/write-cmk-skill/`. Skills without one: `skills/glossary/`, `skills/mcp-config/`, `skills/delivery-spec-plan/`, `skills/delivery-handoff/`, `skills/sui-sdk/`, `skills/testcontainers/`.
- Skills with `eval.json`: `skills/agent-instructions/eval.json`, `skills/codebase-docs/eval.json`, `skills/local-stack/eval.json`, `skills/repo-setup/eval.json`, `skills/sync/eval.json`, `skills/interpret/eval.json`, `skills/write-cmk-skill/eval.json`. No delivery-family or knowledge-family skill ships one.
- The shared docs-family workflow shape: grep for `^## Workflow: Create` and `^## Workflow: Iterate` across `skills/*/SKILL.md`.
- The shared setup-family Verify contract: grep for the exact heading `^## Verify$` across `skills/*/SKILL.md` — every hit is a setup-family skill. `skills/delivery-review/SKILL.md` has a similarly named but distinct `## Verify before acting` section (adversarial verification of review findings, not a report-only facet check) — match on the exact heading, not the prefix, to tell them apart.
- The delivery-family tracker binding: grep for `references/linear.md` across `skills/delivery-*/SKILL.md` and `skills/discover-efforts/SKILL.md`, then confirm each hit is the sole conditional pointer line, not body prose.
21 changes: 13 additions & 8 deletions docs/ai/skills/sync.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,23 +18,28 @@ lock's recorded SHA, theirs = current upstream, ours = the repo's evolved
copy; apply the upstream delta base→theirs to ours as a meaning-level merge,
surface genuine conflicts for human decision, never auto-resolve), and
**contribute** (review local amendments flagged as generic and prepare them
as upstream contributions). Separable local amendments sit under a marked
`## Project adaptations` section, giving the reconcile a stable seam.
Truly project-owned skills (deploy steps, product workflows) carry no lock
entry and sync never touches them. Ends with a report-only `## Verify`
section.
as upstream contributions — for each upstream-bound candidate, name
`/write-cmk-skill` for the user to run first; never invoke that user-invoked
skill; skip the gate for pure `## Project adaptations`). Separable local
amendments sit under a marked `## Project adaptations` section, giving the
reconcile a stable seam. Truly project-owned skills (deploy steps, product
workflows) carry no lock entry and sync never touches them. Ends with a
report-only `## Verify` section.

## Where
- Skill body: `skills/sync/SKILL.md` — sections `What the lock records`,
`Modes`, `Workflow (sync mode)`, `Scope rule`, `Verify`.
`Modes`, `Workflow (sync mode)`, `Workflow (contribute mode)`, `Scope rule`,
`Verify`.
- `references/skills-lock.md` — the normative `.agents/skills.lock` TOML
shape, field semantics, and the naming mapping between upstream and
vendored directories.
- `references/reconciliation.md` — the three-way frame, the semantic merge
doctrine (rewording is not a conflict; behavior/contract disagreement is),
the `## Project adaptations` seam, upstream-contribution candidates, and
failure honesty (an incomplete reconcile keeps its old lock entry).
the `## Project adaptations` seam, upstream-contribution candidates (incl.
the `/write-cmk-skill` gate), and failure honesty (an incomplete reconcile
keeps its old lock entry).
- Eval scenarios: `skills/sync/eval.json`.

## Links
- Vendored layout and adapters: `cmk:agent-vendors`.
- Authoring gate before upstream contribute: `cmk:write-cmk-skill` (user-invoked).
28 changes: 28 additions & 0 deletions docs/ai/skills/write-cmk-skill.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
# cmk:write-cmk-skill

## What

User-invoked skill for creating, editing, or reviewing a `cmk:*` skill before
it ships. Applies test-driven authoring (RED baseline → GREEN minimal text →
REFACTOR under pressure) so a skill only lands when a failing baseline proves
the text is needed.

## Approach

Neither create/iterate nor a setup facet nor a delivery phase. An Iron Law
forbids shipping skill text without a failing baseline first. Frontmatter
follows kit house form (`name` / `description` / `version`, optional
`disable-model-invocation`); model-invocable descriptions are trigger +
outcome noun, user-invoked descriptions are one plain deliverable line.
Companion material (pressure-testing protocol, influence wording) lives in
`references/` and loads on demand. Structural checks run through
`scripts/skill-lint.sh`.

## Where

- Skill body: `skills/write-cmk-skill/SKILL.md`
- Pressure-testing protocol: `skills/write-cmk-skill/references/pressure-testing.md`
- Influence wording: `skills/write-cmk-skill/references/influence-principles.md`
- Eval fixtures: `skills/write-cmk-skill/eval.json`
- Mechanical lint: `scripts/skill-lint.sh`
- House style for PRs: `CONTRIBUTING.md`
1 change: 1 addition & 0 deletions docs/guides/on-ramps.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -20,6 +20,7 @@ point here; they do not restate this table.
| Open PR / close ticket with evidence | `cmk:delivery-ship` |
| Handoff to another agent | `cmk:delivery-handoff` |
| Vendor skills / sync upstream | `cmk:agent-vendors` / `cmk:sync` |
| Create / edit / review a `cmk:*` skill | `cmk:write-cmk-skill` (user-invoked) |
| CI / local stack / MCP / toolchain alone | matching setup facet (`cmk:cicd`, `cmk:local-stack`, …) |

Rules of thumb:
Expand Down
17 changes: 15 additions & 2 deletions skills/sync/SKILL.md
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
---
name: cmk:sync
description: Use when the user asks to "sync skills with upstream", "pull upstream skill updates", "reconcile vendored skills", "update the skills lockfile", or whenever a repo's vendored `.agents/skills/` copies have drifted from the upstream kit.
version: 0.1.1
version: 0.1.2
---

# Sync
Expand All@@ -25,7 +25,7 @@ Read `references/skills-lock.md`.
the local adaptation.
- **sync** — the three-way reconcile (below).
- **contribute** — review local amendments flagged as generic; prepare them
as upstream contributions.
as upstream contributions (below).

## Workflow (sync mode)

Expand All@@ -45,6 +45,19 @@ Read `references/skills-lock.md`.

Running the reconcile? Read `references/reconciliation.md`.

## Workflow (contribute mode)

1. Collect candidates flagged as generic (from a prior sync, or re-scan per
`references/reconciliation.md`).
2. Drop anything that belongs under `## Project adaptations` or carries
project vocabulary — those stay local; sync never promotes them.
3. For every remaining candidate that will edit an upstream `cmk:*` skill:
**name `/write-cmk-skill` for the user to run** before preparing the PR.
Do not invoke it — `cmk:write-cmk-skill` is user-invoked. Skip this step
only when the user already completed that pass for this amendment set.
4. After that pass (or explicit skip), prepare the upstream contribution PR
from the reviewed generic amendments.

## Scope rule

Truly project-owned skills (deploy steps, product workflows) are new skills,
Expand Down
5 changes: 5 additions & 0 deletions skills/sync/references/reconciliation.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -45,6 +45,11 @@ generic skill is flagged with its file, section, and a one-line rationale.
Flagging is sync's job; actually preparing and contributing it back upstream
is *contribute* mode's job, never a side effect of running sync.

Before contribute prepares that PR, name `/write-cmk-skill` for the user to
run on the candidate set — the kit's authoring Iron Law and ship checklist
live there. Do not invoke `cmk:write-cmk-skill` from sync (user-invoked).
Pure `## Project adaptations` stay local and skip that gate.

## Failure honesty

A skill whose reconcile did not complete keeps its old lock entry. The
Expand Down
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 8 additions & 4 deletions CONTRIBUTING.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,9 +2,11 @@

## Proposing a skill change

Open a PR against `main`. Describe what the skill gets wrong, ambiguous, or
misses today, and how your change fixes it — reviewers and skill-lint judge
the diff, not the intent.
For a new skill or a behavior-shaping edit, run `/write-cmk-skill` first: it
enforces a failing-baseline Iron Law and the ship checklist before text
lands under `skills/`. Then open a PR against `main`. Describe what the
skill gets wrong, ambiguous, or misses today, and how your change fixes
it — reviewers and skill-lint judge the diff, not the intent.

## The kit's bar

Expand DownExpand Up@@ -46,7 +48,9 @@ out of your own diff. CI runs the same script on every PR touching
If your repo vendored the skills via `cmk:agent-vendors` and evolved one
locally, don't just keep the fix local. Run `cmk:sync` in **contribute**
mode: it reviews local amendments flagged as generic-looking upstream
candidates and prepares them as a PR back here.
candidates, names `/write-cmk-skill` for you to run on those candidates,
then prepares them as a PR back here. Pure `## Project adaptations` stay
local and skip that gate.

## Commits

Expand Down
8 changes: 6 additions & 2 deletions docs/ai/skills/README.md
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
# Skills

The `cmk:*` skill packages under [`skills/`](../../../skills/): eight docs-family skills, thirteen setup-family skills, nine delivery-family skills, two knowledge-family skills, and one session-discipline skill (`cmk:interpret`). Each is a directory with a `SKILL.md` (frontmatter `name`/`description`/`version` plus the body the agent reads), and most ship a `references/` folder of guidance, templates, and conventions the workflow loads on demand.
The `cmk:*` skill packages under [`skills/`](../../../skills/): eight docs-family skills, thirteen setup-family skills, nine delivery-family skills, two knowledge-family skills, one session-discipline skill (`cmk:interpret`), and one meta skill (`cmk:write-cmk-skill`). Each is a directory with a `SKILL.md` (frontmatter `name`/`description`/`version` plus the body the agent reads), and most ship a `references/` folder of guidance, templates, and conventions the workflow loads on demand.

Docs-family skills follow the same shape: a "Workflow: Create" / "Workflow: Iterate" pair, with placement rules, shaping guidance, and templates kept out of `SKILL.md` itself and cited via "Read `references/<file>.md`" lines. Setup-family skills instead follow a facet shape (modes and/or a single workflow, plus a report-only `## Verify` section). Delivery-family skills follow a tracker-neutral phase/gate shape and never carry a `## Verify` section — that contract is setup-family only. Knowledge-family skills are reference packs with no create/iterate or phase shape at all. See [conventions.md](./conventions.md) for the exceptions and the full breakdown.

Expand DownExpand Up@@ -52,6 +52,10 @@ Docs-family skills follow the same shape: a "Workflow: Create" / "Workflow: Iter

- [interpret.md](./interpret.md) — `cmk:interpret`, companion session beside another window: stance plus a carry-back reply. User-invoked.

## Meta

- [write-cmk-skill.md](./write-cmk-skill.md) — `cmk:write-cmk-skill`, author or review a `cmk:*` skill under a failing-baseline Iron Law. User-invoked.

## Cross-cutting

- [conventions.md](./conventions.md) — shared shape across all skills (frontmatter, references folder, docs-family create/iterate pattern, setup-family facet shape, delivery-family phase/gate shape, knowledge-family reference packs).
- [conventions.md](./conventions.md) — shared shape across all skills (frontmatter, references folder, docs-family create/iterate pattern, setup-family facet shape, delivery-family phase/gate shape, knowledge-family reference packs, session/meta user-invoked skills).
10 changes: 6 additions & 4 deletions docs/ai/skills/conventions.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -8,8 +8,8 @@ Frontmatter declares three fields the host (Claude Code or OpenCode) reads to di

- `name` — `cmk:<short-name>`, used as the slash command and skill ID.
- `description` — opens in the second person (`Use when…` / `Use whenever…`) with trigger phrases plus an **outcome noun** (the deliverable), not a workflow step list. Used by the agent to auto-select the skill from user intent. A user-invoked skill (`disable-model-invocation: true`) writes one plain human-facing line naming the deliverable instead — the agent never routes on that line.
- `version` — `0.6.x` on `cmk:design`; `0.5.x` on `cmk:delivery-pipeline`; `0.4.x` on `cmk:cicd` (security-scanning facet) and `cmk:requirements` (Standard elicitation: close package, scope band, guards); `0.3.x` on `cmk:delivery-workflow`, `cmk:agent-instructions`, `cmk:adr`, `cmk:docs`, and `cmk:local-stack`; `0.2.0` on two docs-family skills (`learn`, `rule`) and six setup-family skills (`agent-instructions`, `agent-vendors`, `infra`, `mcp-config`, `project-layout`, `toolchain`); `0.1.x` on the rest — `repo-setup` and `sync`, `test-resources`, `rust`, and `testcontainers` (new setup-family skills), the other delivery-family skills (incl. new `cmk:delivery-simplify` at `0.1.0`), both knowledge-family skills, the two remaining docs-family skills (`codebase-docs`, `glossary`), and `cmk:interpret`.
- `disable-model-invocation: true` — optional, fourth field only. Present on `cmk:interpret`. The closer is still `---`.
- `version` — `1.0.0` on `cmk:write-cmk-skill`; `0.6.x` on `cmk:design`; `0.5.x` on `cmk:delivery-pipeline`; `0.4.x` on `cmk:cicd` (security-scanning facet) and `cmk:requirements` (Standard elicitation: close package, scope band, guards); `0.3.x` on `cmk:delivery-workflow`, `cmk:agent-instructions`, `cmk:adr`, `cmk:docs`, and `cmk:local-stack`; `0.2.0` on two docs-family skills (`learn`, `rule`) and six setup-family skills (`agent-instructions`, `agent-vendors`, `infra`, `mcp-config`, `project-layout`, `toolchain`); `0.1.x` on the rest — `repo-setup` and `sync`, `test-resources`, `rust`, and `testcontainers` (new setup-family skills), the other delivery-family skills (incl. new `cmk:delivery-simplify` at `0.1.0`), both knowledge-family skills, the two remaining docs-family skills (`codebase-docs`, `glossary`), and `cmk:interpret`.
- `disable-model-invocation: true` — optional, fourth field only. Present on `cmk:interpret` and `cmk:write-cmk-skill`. The closer is still `---`.

No skill file references outside its own package by relative path — the rule binds a package's own references, not content it emits into a target repo; a skill that needs a target-repo artifact names it repo-root-relative, and a skill that needs another skill cites it by `cmk:` name — see `cmk:agent-vendors`.

Expand All@@ -23,12 +23,14 @@ Delivery-family skills (`delivery-workflow`, `discover-efforts`, `delivery-intak

Session-discipline skills (`interpret`) are neither create/iterate nor a setup facet nor a delivery phase. `cmk:interpret` is user-invoked (`disable-model-invocation: true`), stays read-only toward the repo, and ships a `references/digest.md` loaded only at session end.

Meta skills (`write-cmk-skill`) author or review other skills in this kit. `cmk:write-cmk-skill` is user-invoked (`disable-model-invocation: true`), enforces a failing-baseline Iron Law before any skill text ships, and loads `references/pressure-testing.md` / `references/influence-principles.md` on demand. It is not a docs/setup/delivery/knowledge workflow.

Knowledge-family skills (`sui-sdk`, `sui-devstack`) are domain reference packs sitting beside the generic model rather than replacing it. `cmk:sui-sdk` is a single file with no `references/` directory: it corrects one specific stale-training-data pattern (reaching for Sui JSON-RPC instead of gRPC) and runs no workflow at all. `cmk:sui-devstack` has a `references/` folder and layers Sui-specific detail — Devstack's config shape, account/package staging, instance isolation — on top of `cmk:local-stack`'s generic `(worktree, config, instance)` primitive; it does not restate or replace that primitive. Neither knowledge skill has a `## Verify` section or an `eval.json`.

## Where
- Frontmatter, on every skill: open any `skills/<name>/SKILL.md` and read lines 1–5 (1–6 when `disable-model-invocation: true` is present).
- Skills with `references/`: `skills/adr/`, `skills/agent-instructions/`, `skills/agent-vendors/`, `skills/cicd/`, `skills/codebase-docs/`, `skills/design/`, `skills/docs/`, `skills/infra/`, `skills/learn/`, `skills/local-stack/`, `skills/project-layout/`, `skills/repo-setup/`, `skills/requirements/`, `skills/rule/`, `skills/rust/`, `skills/sync/`, `skills/test-resources/`, `skills/toolchain/`, `skills/delivery-workflow/`, `skills/discover-efforts/`, `skills/delivery-intake/`, `skills/delivery-simplify/`, `skills/delivery-review/`, `skills/delivery-ship/`, `skills/delivery-pipeline/`, `skills/sui-devstack/`, `skills/interpret/`. Skills without one: `skills/glossary/`, `skills/mcp-config/`, `skills/delivery-spec-plan/`, `skills/delivery-handoff/`, `skills/sui-sdk/`, `skills/testcontainers/`.
- Skills with `eval.json`: `skills/agent-instructions/eval.json`, `skills/codebase-docs/eval.json`, `skills/local-stack/eval.json`, `skills/repo-setup/eval.json`, `skills/sync/eval.json`, `skills/interpret/eval.json`. No delivery-family or knowledge-family skill ships one.
- Skills with `references/`: `skills/adr/`, `skills/agent-instructions/`, `skills/agent-vendors/`, `skills/cicd/`, `skills/codebase-docs/`, `skills/design/`, `skills/docs/`, `skills/infra/`, `skills/learn/`, `skills/local-stack/`, `skills/project-layout/`, `skills/repo-setup/`, `skills/requirements/`, `skills/rule/`, `skills/rust/`, `skills/sync/`, `skills/test-resources/`, `skills/toolchain/`, `skills/delivery-workflow/`, `skills/discover-efforts/`, `skills/delivery-intake/`, `skills/delivery-simplify/`, `skills/delivery-review/`, `skills/delivery-ship/`, `skills/delivery-pipeline/`, `skills/sui-devstack/`, `skills/interpret/`, `skills/write-cmk-skill/`. Skills without one: `skills/glossary/`, `skills/mcp-config/`, `skills/delivery-spec-plan/`, `skills/delivery-handoff/`, `skills/sui-sdk/`, `skills/testcontainers/`.
- Skills with `eval.json`: `skills/agent-instructions/eval.json`, `skills/codebase-docs/eval.json`, `skills/local-stack/eval.json`, `skills/repo-setup/eval.json`, `skills/sync/eval.json`, `skills/interpret/eval.json`, `skills/write-cmk-skill/eval.json`. No delivery-family or knowledge-family skill ships one.
- The shared docs-family workflow shape: grep for `^## Workflow: Create` and `^## Workflow: Iterate` across `skills/*/SKILL.md`.
- The shared setup-family Verify contract: grep for the exact heading `^## Verify$` across `skills/*/SKILL.md` — every hit is a setup-family skill. `skills/delivery-review/SKILL.md` has a similarly named but distinct `## Verify before acting` section (adversarial verification of review findings, not a report-only facet check) — match on the exact heading, not the prefix, to tell them apart.
- The delivery-family tracker binding: grep for `references/linear.md` across `skills/delivery-*/SKILL.md` and `skills/discover-efforts/SKILL.md`, then confirm each hit is the sole conditional pointer line, not body prose.
21 changes: 13 additions & 8 deletions docs/ai/skills/sync.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,23 +18,28 @@ lock's recorded SHA, theirs = current upstream, ours = the repo's evolved
copy; apply the upstream delta base→theirs to ours as a meaning-level merge,
surface genuine conflicts for human decision, never auto-resolve), and
**contribute** (review local amendments flagged as generic and prepare them
as upstream contributions). Separable local amendments sit under a marked
`## Project adaptations` section, giving the reconcile a stable seam.
Truly project-owned skills (deploy steps, product workflows) carry no lock
entry and sync never touches them. Ends with a report-only `## Verify`
section.
as upstream contributions — for each upstream-bound candidate, name
`/write-cmk-skill` for the user to run first; never invoke that user-invoked
skill; skip the gate for pure `## Project adaptations`). Separable local
amendments sit under a marked `## Project adaptations` section, giving the
reconcile a stable seam. Truly project-owned skills (deploy steps, product
workflows) carry no lock entry and sync never touches them. Ends with a
report-only `## Verify` section.

## Where
- Skill body: `skills/sync/SKILL.md` — sections `What the lock records`,
`Modes`, `Workflow (sync mode)`, `Scope rule`, `Verify`.
`Modes`, `Workflow (sync mode)`, `Workflow (contribute mode)`, `Scope rule`,
`Verify`.
- `references/skills-lock.md` — the normative `.agents/skills.lock` TOML
shape, field semantics, and the naming mapping between upstream and
vendored directories.
- `references/reconciliation.md` — the three-way frame, the semantic merge
doctrine (rewording is not a conflict; behavior/contract disagreement is),
the `## Project adaptations` seam, upstream-contribution candidates, and
failure honesty (an incomplete reconcile keeps its old lock entry).
the `## Project adaptations` seam, upstream-contribution candidates (incl.
the `/write-cmk-skill` gate), and failure honesty (an incomplete reconcile
keeps its old lock entry).
- Eval scenarios: `skills/sync/eval.json`.

## Links
- Vendored layout and adapters: `cmk:agent-vendors`.
- Authoring gate before upstream contribute: `cmk:write-cmk-skill` (user-invoked).
28 changes: 28 additions & 0 deletions docs/ai/skills/write-cmk-skill.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
# cmk:write-cmk-skill

## What

User-invoked skill for creating, editing, or reviewing a `cmk:*` skill before
it ships. Applies test-driven authoring (RED baseline → GREEN minimal text →
REFACTOR under pressure) so a skill only lands when a failing baseline proves
the text is needed.

## Approach

Neither create/iterate nor a setup facet nor a delivery phase. An Iron Law
forbids shipping skill text without a failing baseline first. Frontmatter
follows kit house form (`name` / `description` / `version`, optional
`disable-model-invocation`); model-invocable descriptions are trigger +
outcome noun, user-invoked descriptions are one plain deliverable line.
Companion material (pressure-testing protocol, influence wording) lives in
`references/` and loads on demand. Structural checks run through
`scripts/skill-lint.sh`.

## Where

- Skill body: `skills/write-cmk-skill/SKILL.md`
- Pressure-testing protocol: `skills/write-cmk-skill/references/pressure-testing.md`
- Influence wording: `skills/write-cmk-skill/references/influence-principles.md`
- Eval fixtures: `skills/write-cmk-skill/eval.json`
- Mechanical lint: `scripts/skill-lint.sh`
- House style for PRs: `CONTRIBUTING.md`
1 change: 1 addition & 0 deletions docs/guides/on-ramps.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -20,6 +20,7 @@ point here; they do not restate this table.
| Open PR / close ticket with evidence | `cmk:delivery-ship` |
| Handoff to another agent | `cmk:delivery-handoff` |
| Vendor skills / sync upstream | `cmk:agent-vendors` / `cmk:sync` |
| Create / edit / review a `cmk:*` skill | `cmk:write-cmk-skill` (user-invoked) |
| CI / local stack / MCP / toolchain alone | matching setup facet (`cmk:cicd`, `cmk:local-stack`, …) |

Rules of thumb:
Expand Down
17 changes: 15 additions & 2 deletions skills/sync/SKILL.md
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
---
name: cmk:sync
description: Use when the user asks to "sync skills with upstream", "pull upstream skill updates", "reconcile vendored skills", "update the skills lockfile", or whenever a repo's vendored `.agents/skills/` copies have drifted from the upstream kit.
version: 0.1.1
version: 0.1.2
---

# Sync
Expand All@@ -25,7 +25,7 @@ Read `references/skills-lock.md`.
the local adaptation.
- **sync** — the three-way reconcile (below).
- **contribute** — review local amendments flagged as generic; prepare them
as upstream contributions.
as upstream contributions (below).

## Workflow (sync mode)

Expand All@@ -45,6 +45,19 @@ Read `references/skills-lock.md`.

Running the reconcile? Read `references/reconciliation.md`.

## Workflow (contribute mode)

1. Collect candidates flagged as generic (from a prior sync, or re-scan per
`references/reconciliation.md`).
2. Drop anything that belongs under `## Project adaptations` or carries
project vocabulary — those stay local; sync never promotes them.
3. For every remaining candidate that will edit an upstream `cmk:*` skill:
**name `/write-cmk-skill` for the user to run** before preparing the PR.
Do not invoke it — `cmk:write-cmk-skill` is user-invoked. Skip this step
only when the user already completed that pass for this amendment set.
4. After that pass (or explicit skip), prepare the upstream contribution PR
from the reviewed generic amendments.

## Scope rule

Truly project-owned skills (deploy steps, product workflows) are new skills,
Expand Down
5 changes: 5 additions & 0 deletions skills/sync/references/reconciliation.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -45,6 +45,11 @@ generic skill is flagged with its file, section, and a one-line rationale.
Flagging is sync's job; actually preparing and contributing it back upstream
is *contribute* mode's job, never a side effect of running sync.

Before contribute prepares that PR, name `/write-cmk-skill` for the user to
run on the candidate set — the kit's authoring Iron Law and ship checklist
live there. Do not invoke `cmk:write-cmk-skill` from sync (user-invoked).
Pure `## Project adaptations` stay local and skip that gate.

## Failure honesty

A skill whose reconcile did not complete keeps its old lock entry. The
Expand Down
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 8 additions & 4 deletions CONTRIBUTING.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,9 +2,11 @@

## Proposing a skill change

Open a PR against `main`. Describe what the skill gets wrong, ambiguous, or
misses today, and how your change fixes it — reviewers and skill-lint judge
the diff, not the intent.
For a new skill or a behavior-shaping edit, run `/write-cmk-skill` first: it
enforces a failing-baseline Iron Law and the ship checklist before text
lands under `skills/`. Then open a PR against `main`. Describe what the
skill gets wrong, ambiguous, or misses today, and how your change fixes
it — reviewers and skill-lint judge the diff, not the intent.

## The kit's bar

Expand DownExpand Up@@ -46,7 +48,9 @@ out of your own diff. CI runs the same script on every PR touching
If your repo vendored the skills via `cmk:agent-vendors` and evolved one
locally, don't just keep the fix local. Run `cmk:sync` in **contribute**
mode: it reviews local amendments flagged as generic-looking upstream
candidates and prepares them as a PR back here.
candidates, names `/write-cmk-skill` for you to run on those candidates,
then prepares them as a PR back here. Pure `## Project adaptations` stay
local and skip that gate.

## Commits

Expand Down
8 changes: 6 additions & 2 deletions docs/ai/skills/README.md
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
# Skills

The `cmk:*` skill packages under [`skills/`](../../../skills/): eight docs-family skills, thirteen setup-family skills, nine delivery-family skills, two knowledge-family skills, and one session-discipline skill (`cmk:interpret`). Each is a directory with a `SKILL.md` (frontmatter `name`/`description`/`version` plus the body the agent reads), and most ship a `references/` folder of guidance, templates, and conventions the workflow loads on demand.
The `cmk:*` skill packages under [`skills/`](../../../skills/): eight docs-family skills, thirteen setup-family skills, nine delivery-family skills, two knowledge-family skills, one session-discipline skill (`cmk:interpret`), and one meta skill (`cmk:write-cmk-skill`). Each is a directory with a `SKILL.md` (frontmatter `name`/`description`/`version` plus the body the agent reads), and most ship a `references/` folder of guidance, templates, and conventions the workflow loads on demand.

Docs-family skills follow the same shape: a "Workflow: Create" / "Workflow: Iterate" pair, with placement rules, shaping guidance, and templates kept out of `SKILL.md` itself and cited via "Read `references/<file>.md`" lines. Setup-family skills instead follow a facet shape (modes and/or a single workflow, plus a report-only `## Verify` section). Delivery-family skills follow a tracker-neutral phase/gate shape and never carry a `## Verify` section — that contract is setup-family only. Knowledge-family skills are reference packs with no create/iterate or phase shape at all. See [conventions.md](./conventions.md) for the exceptions and the full breakdown.

Expand DownExpand Up@@ -52,6 +52,10 @@ Docs-family skills follow the same shape: a "Workflow: Create" / "Workflow: Iter

- [interpret.md](./interpret.md) — `cmk:interpret`, companion session beside another window: stance plus a carry-back reply. User-invoked.

## Meta

- [write-cmk-skill.md](./write-cmk-skill.md) — `cmk:write-cmk-skill`, author or review a `cmk:*` skill under a failing-baseline Iron Law. User-invoked.

## Cross-cutting

- [conventions.md](./conventions.md) — shared shape across all skills (frontmatter, references folder, docs-family create/iterate pattern, setup-family facet shape, delivery-family phase/gate shape, knowledge-family reference packs).
- [conventions.md](./conventions.md) — shared shape across all skills (frontmatter, references folder, docs-family create/iterate pattern, setup-family facet shape, delivery-family phase/gate shape, knowledge-family reference packs, session/meta user-invoked skills).
10 changes: 6 additions & 4 deletions docs/ai/skills/conventions.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -8,8 +8,8 @@ Frontmatter declares three fields the host (Claude Code or OpenCode) reads to di

- `name` — `cmk:<short-name>`, used as the slash command and skill ID.
- `description` — opens in the second person (`Use when…` / `Use whenever…`) with trigger phrases plus an **outcome noun** (the deliverable), not a workflow step list. Used by the agent to auto-select the skill from user intent. A user-invoked skill (`disable-model-invocation: true`) writes one plain human-facing line naming the deliverable instead — the agent never routes on that line.
- `version` — `0.6.x` on `cmk:design`; `0.5.x` on `cmk:delivery-pipeline`; `0.4.x` on `cmk:cicd` (security-scanning facet) and `cmk:requirements` (Standard elicitation: close package, scope band, guards); `0.3.x` on `cmk:delivery-workflow`, `cmk:agent-instructions`, `cmk:adr`, `cmk:docs`, and `cmk:local-stack`; `0.2.0` on two docs-family skills (`learn`, `rule`) and six setup-family skills (`agent-instructions`, `agent-vendors`, `infra`, `mcp-config`, `project-layout`, `toolchain`); `0.1.x` on the rest — `repo-setup` and `sync`, `test-resources`, `rust`, and `testcontainers` (new setup-family skills), the other delivery-family skills (incl. new `cmk:delivery-simplify` at `0.1.0`), both knowledge-family skills, the two remaining docs-family skills (`codebase-docs`, `glossary`), and `cmk:interpret`.
- `disable-model-invocation: true` — optional, fourth field only. Present on `cmk:interpret`. The closer is still `---`.
- `version` — `1.0.0` on `cmk:write-cmk-skill`; `0.6.x` on `cmk:design`; `0.5.x` on `cmk:delivery-pipeline`; `0.4.x` on `cmk:cicd` (security-scanning facet) and `cmk:requirements` (Standard elicitation: close package, scope band, guards); `0.3.x` on `cmk:delivery-workflow`, `cmk:agent-instructions`, `cmk:adr`, `cmk:docs`, and `cmk:local-stack`; `0.2.0` on two docs-family skills (`learn`, `rule`) and six setup-family skills (`agent-instructions`, `agent-vendors`, `infra`, `mcp-config`, `project-layout`, `toolchain`); `0.1.x` on the rest — `repo-setup` and `sync`, `test-resources`, `rust`, and `testcontainers` (new setup-family skills), the other delivery-family skills (incl. new `cmk:delivery-simplify` at `0.1.0`), both knowledge-family skills, the two remaining docs-family skills (`codebase-docs`, `glossary`), and `cmk:interpret`.
- `disable-model-invocation: true` — optional, fourth field only. Present on `cmk:interpret` and `cmk:write-cmk-skill`. The closer is still `---`.

No skill file references outside its own package by relative path — the rule binds a package's own references, not content it emits into a target repo; a skill that needs a target-repo artifact names it repo-root-relative, and a skill that needs another skill cites it by `cmk:` name — see `cmk:agent-vendors`.

Expand All@@ -23,12 +23,14 @@ Delivery-family skills (`delivery-workflow`, `discover-efforts`, `delivery-intak

Session-discipline skills (`interpret`) are neither create/iterate nor a setup facet nor a delivery phase. `cmk:interpret` is user-invoked (`disable-model-invocation: true`), stays read-only toward the repo, and ships a `references/digest.md` loaded only at session end.

Meta skills (`write-cmk-skill`) author or review other skills in this kit. `cmk:write-cmk-skill` is user-invoked (`disable-model-invocation: true`), enforces a failing-baseline Iron Law before any skill text ships, and loads `references/pressure-testing.md` / `references/influence-principles.md` on demand. It is not a docs/setup/delivery/knowledge workflow.

Knowledge-family skills (`sui-sdk`, `sui-devstack`) are domain reference packs sitting beside the generic model rather than replacing it. `cmk:sui-sdk` is a single file with no `references/` directory: it corrects one specific stale-training-data pattern (reaching for Sui JSON-RPC instead of gRPC) and runs no workflow at all. `cmk:sui-devstack` has a `references/` folder and layers Sui-specific detail — Devstack's config shape, account/package staging, instance isolation — on top of `cmk:local-stack`'s generic `(worktree, config, instance)` primitive; it does not restate or replace that primitive. Neither knowledge skill has a `## Verify` section or an `eval.json`.

## Where
- Frontmatter, on every skill: open any `skills/<name>/SKILL.md` and read lines 1–5 (1–6 when `disable-model-invocation: true` is present).
- Skills with `references/`: `skills/adr/`, `skills/agent-instructions/`, `skills/agent-vendors/`, `skills/cicd/`, `skills/codebase-docs/`, `skills/design/`, `skills/docs/`, `skills/infra/`, `skills/learn/`, `skills/local-stack/`, `skills/project-layout/`, `skills/repo-setup/`, `skills/requirements/`, `skills/rule/`, `skills/rust/`, `skills/sync/`, `skills/test-resources/`, `skills/toolchain/`, `skills/delivery-workflow/`, `skills/discover-efforts/`, `skills/delivery-intake/`, `skills/delivery-simplify/`, `skills/delivery-review/`, `skills/delivery-ship/`, `skills/delivery-pipeline/`, `skills/sui-devstack/`, `skills/interpret/`. Skills without one: `skills/glossary/`, `skills/mcp-config/`, `skills/delivery-spec-plan/`, `skills/delivery-handoff/`, `skills/sui-sdk/`, `skills/testcontainers/`.
- Skills with `eval.json`: `skills/agent-instructions/eval.json`, `skills/codebase-docs/eval.json`, `skills/local-stack/eval.json`, `skills/repo-setup/eval.json`, `skills/sync/eval.json`, `skills/interpret/eval.json`. No delivery-family or knowledge-family skill ships one.
- Skills with `references/`: `skills/adr/`, `skills/agent-instructions/`, `skills/agent-vendors/`, `skills/cicd/`, `skills/codebase-docs/`, `skills/design/`, `skills/docs/`, `skills/infra/`, `skills/learn/`, `skills/local-stack/`, `skills/project-layout/`, `skills/repo-setup/`, `skills/requirements/`, `skills/rule/`, `skills/rust/`, `skills/sync/`, `skills/test-resources/`, `skills/toolchain/`, `skills/delivery-workflow/`, `skills/discover-efforts/`, `skills/delivery-intake/`, `skills/delivery-simplify/`, `skills/delivery-review/`, `skills/delivery-ship/`, `skills/delivery-pipeline/`, `skills/sui-devstack/`, `skills/interpret/`, `skills/write-cmk-skill/`. Skills without one: `skills/glossary/`, `skills/mcp-config/`, `skills/delivery-spec-plan/`, `skills/delivery-handoff/`, `skills/sui-sdk/`, `skills/testcontainers/`.
- Skills with `eval.json`: `skills/agent-instructions/eval.json`, `skills/codebase-docs/eval.json`, `skills/local-stack/eval.json`, `skills/repo-setup/eval.json`, `skills/sync/eval.json`, `skills/interpret/eval.json`, `skills/write-cmk-skill/eval.json`. No delivery-family or knowledge-family skill ships one.
- The shared docs-family workflow shape: grep for `^## Workflow: Create` and `^## Workflow: Iterate` across `skills/*/SKILL.md`.
- The shared setup-family Verify contract: grep for the exact heading `^## Verify$` across `skills/*/SKILL.md` — every hit is a setup-family skill. `skills/delivery-review/SKILL.md` has a similarly named but distinct `## Verify before acting` section (adversarial verification of review findings, not a report-only facet check) — match on the exact heading, not the prefix, to tell them apart.
- The delivery-family tracker binding: grep for `references/linear.md` across `skills/delivery-*/SKILL.md` and `skills/discover-efforts/SKILL.md`, then confirm each hit is the sole conditional pointer line, not body prose.
21 changes: 13 additions & 8 deletions docs/ai/skills/sync.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,23 +18,28 @@ lock's recorded SHA, theirs = current upstream, ours = the repo's evolved
copy; apply the upstream delta base→theirs to ours as a meaning-level merge,
surface genuine conflicts for human decision, never auto-resolve), and
**contribute** (review local amendments flagged as generic and prepare them
as upstream contributions). Separable local amendments sit under a marked
`## Project adaptations` section, giving the reconcile a stable seam.
Truly project-owned skills (deploy steps, product workflows) carry no lock
entry and sync never touches them. Ends with a report-only `## Verify`
section.
as upstream contributions — for each upstream-bound candidate, name
`/write-cmk-skill` for the user to run first; never invoke that user-invoked
skill; skip the gate for pure `## Project adaptations`). Separable local
amendments sit under a marked `## Project adaptations` section, giving the
reconcile a stable seam. Truly project-owned skills (deploy steps, product
workflows) carry no lock entry and sync never touches them. Ends with a
report-only `## Verify` section.

## Where
- Skill body: `skills/sync/SKILL.md` — sections `What the lock records`,
`Modes`, `Workflow (sync mode)`, `Scope rule`, `Verify`.
`Modes`, `Workflow (sync mode)`, `Workflow (contribute mode)`, `Scope rule`,
`Verify`.
- `references/skills-lock.md` — the normative `.agents/skills.lock` TOML
shape, field semantics, and the naming mapping between upstream and
vendored directories.
- `references/reconciliation.md` — the three-way frame, the semantic merge
doctrine (rewording is not a conflict; behavior/contract disagreement is),
the `## Project adaptations` seam, upstream-contribution candidates, and
failure honesty (an incomplete reconcile keeps its old lock entry).
the `## Project adaptations` seam, upstream-contribution candidates (incl.
the `/write-cmk-skill` gate), and failure honesty (an incomplete reconcile
keeps its old lock entry).
- Eval scenarios: `skills/sync/eval.json`.

## Links
- Vendored layout and adapters: `cmk:agent-vendors`.
- Authoring gate before upstream contribute: `cmk:write-cmk-skill` (user-invoked).
28 changes: 28 additions & 0 deletions docs/ai/skills/write-cmk-skill.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
# cmk:write-cmk-skill

## What

User-invoked skill for creating, editing, or reviewing a `cmk:*` skill before
it ships. Applies test-driven authoring (RED baseline → GREEN minimal text →
REFACTOR under pressure) so a skill only lands when a failing baseline proves
the text is needed.

## Approach

Neither create/iterate nor a setup facet nor a delivery phase. An Iron Law
forbids shipping skill text without a failing baseline first. Frontmatter
follows kit house form (`name` / `description` / `version`, optional
`disable-model-invocation`); model-invocable descriptions are trigger +
outcome noun, user-invoked descriptions are one plain deliverable line.
Companion material (pressure-testing protocol, influence wording) lives in
`references/` and loads on demand. Structural checks run through
`scripts/skill-lint.sh`.

## Where

- Skill body: `skills/write-cmk-skill/SKILL.md`
- Pressure-testing protocol: `skills/write-cmk-skill/references/pressure-testing.md`
- Influence wording: `skills/write-cmk-skill/references/influence-principles.md`
- Eval fixtures: `skills/write-cmk-skill/eval.json`
- Mechanical lint: `scripts/skill-lint.sh`
- House style for PRs: `CONTRIBUTING.md`
1 change: 1 addition & 0 deletions docs/guides/on-ramps.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -20,6 +20,7 @@ point here; they do not restate this table.
| Open PR / close ticket with evidence | `cmk:delivery-ship` |
| Handoff to another agent | `cmk:delivery-handoff` |
| Vendor skills / sync upstream | `cmk:agent-vendors` / `cmk:sync` |
| Create / edit / review a `cmk:*` skill | `cmk:write-cmk-skill` (user-invoked) |
| CI / local stack / MCP / toolchain alone | matching setup facet (`cmk:cicd`, `cmk:local-stack`, …) |

Rules of thumb:
Expand Down
17 changes: 15 additions & 2 deletions skills/sync/SKILL.md
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
---
name: cmk:sync
description: Use when the user asks to "sync skills with upstream", "pull upstream skill updates", "reconcile vendored skills", "update the skills lockfile", or whenever a repo's vendored `.agents/skills/` copies have drifted from the upstream kit.
version: 0.1.1
version: 0.1.2
---

# Sync
Expand All@@ -25,7 +25,7 @@ Read `references/skills-lock.md`.
the local adaptation.
- **sync** — the three-way reconcile (below).
- **contribute** — review local amendments flagged as generic; prepare them
as upstream contributions.
as upstream contributions (below).

## Workflow (sync mode)

Expand All@@ -45,6 +45,19 @@ Read `references/skills-lock.md`.

Running the reconcile? Read `references/reconciliation.md`.

## Workflow (contribute mode)

1. Collect candidates flagged as generic (from a prior sync, or re-scan per
`references/reconciliation.md`).
2. Drop anything that belongs under `## Project adaptations` or carries
project vocabulary — those stay local; sync never promotes them.
3. For every remaining candidate that will edit an upstream `cmk:*` skill:
**name `/write-cmk-skill` for the user to run** before preparing the PR.
Do not invoke it — `cmk:write-cmk-skill` is user-invoked. Skip this step
only when the user already completed that pass for this amendment set.
4. After that pass (or explicit skip), prepare the upstream contribution PR
from the reviewed generic amendments.

## Scope rule

Truly project-owned skills (deploy steps, product workflows) are new skills,
Expand Down
5 changes: 5 additions & 0 deletions skills/sync/references/reconciliation.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -45,6 +45,11 @@ generic skill is flagged with its file, section, and a one-line rationale.
Flagging is sync's job; actually preparing and contributing it back upstream
is *contribute* mode's job, never a side effect of running sync.

Before contribute prepares that PR, name `/write-cmk-skill` for the user to
run on the candidate set — the kit's authoring Iron Law and ship checklist
live there. Do not invoke `cmk:write-cmk-skill` from sync (user-invoked).
Pure `## Project adaptations` stay local and skip that gate.

## Failure honesty

A skill whose reconcile did not complete keeps its old lock entry. The
Expand Down
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 8 additions & 4 deletions CONTRIBUTING.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,9 +2,11 @@

## Proposing a skill change

Open a PR against `main`. Describe what the skill gets wrong, ambiguous, or
misses today, and how your change fixes it — reviewers and skill-lint judge
the diff, not the intent.
For a new skill or a behavior-shaping edit, run `/write-cmk-skill` first: it
enforces a failing-baseline Iron Law and the ship checklist before text
lands under `skills/`. Then open a PR against `main`. Describe what the
skill gets wrong, ambiguous, or misses today, and how your change fixes
it — reviewers and skill-lint judge the diff, not the intent.

## The kit's bar

Expand DownExpand Up@@ -46,7 +48,9 @@ out of your own diff. CI runs the same script on every PR touching
If your repo vendored the skills via `cmk:agent-vendors` and evolved one
locally, don't just keep the fix local. Run `cmk:sync` in **contribute**
mode: it reviews local amendments flagged as generic-looking upstream
candidates and prepares them as a PR back here.
candidates, names `/write-cmk-skill` for you to run on those candidates,
then prepares them as a PR back here. Pure `## Project adaptations` stay
local and skip that gate.

## Commits

Expand Down
8 changes: 6 additions & 2 deletions docs/ai/skills/README.md
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
# Skills

The `cmk:*` skill packages under [`skills/`](../../../skills/): eight docs-family skills, thirteen setup-family skills, nine delivery-family skills, two knowledge-family skills, and one session-discipline skill (`cmk:interpret`). Each is a directory with a `SKILL.md` (frontmatter `name`/`description`/`version` plus the body the agent reads), and most ship a `references/` folder of guidance, templates, and conventions the workflow loads on demand.
The `cmk:*` skill packages under [`skills/`](../../../skills/): eight docs-family skills, thirteen setup-family skills, nine delivery-family skills, two knowledge-family skills, one session-discipline skill (`cmk:interpret`), and one meta skill (`cmk:write-cmk-skill`). Each is a directory with a `SKILL.md` (frontmatter `name`/`description`/`version` plus the body the agent reads), and most ship a `references/` folder of guidance, templates, and conventions the workflow loads on demand.

Docs-family skills follow the same shape: a "Workflow: Create" / "Workflow: Iterate" pair, with placement rules, shaping guidance, and templates kept out of `SKILL.md` itself and cited via "Read `references/<file>.md`" lines. Setup-family skills instead follow a facet shape (modes and/or a single workflow, plus a report-only `## Verify` section). Delivery-family skills follow a tracker-neutral phase/gate shape and never carry a `## Verify` section — that contract is setup-family only. Knowledge-family skills are reference packs with no create/iterate or phase shape at all. See [conventions.md](./conventions.md) for the exceptions and the full breakdown.

Expand DownExpand Up@@ -52,6 +52,10 @@ Docs-family skills follow the same shape: a "Workflow: Create" / "Workflow: Iter

- [interpret.md](./interpret.md) — `cmk:interpret`, companion session beside another window: stance plus a carry-back reply. User-invoked.

## Meta

- [write-cmk-skill.md](./write-cmk-skill.md) — `cmk:write-cmk-skill`, author or review a `cmk:*` skill under a failing-baseline Iron Law. User-invoked.

## Cross-cutting

- [conventions.md](./conventions.md) — shared shape across all skills (frontmatter, references folder, docs-family create/iterate pattern, setup-family facet shape, delivery-family phase/gate shape, knowledge-family reference packs).
- [conventions.md](./conventions.md) — shared shape across all skills (frontmatter, references folder, docs-family create/iterate pattern, setup-family facet shape, delivery-family phase/gate shape, knowledge-family reference packs, session/meta user-invoked skills).
10 changes: 6 additions & 4 deletions docs/ai/skills/conventions.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -8,8 +8,8 @@ Frontmatter declares three fields the host (Claude Code or OpenCode) reads to di

- `name` — `cmk:<short-name>`, used as the slash command and skill ID.
- `description` — opens in the second person (`Use when…` / `Use whenever…`) with trigger phrases plus an **outcome noun** (the deliverable), not a workflow step list. Used by the agent to auto-select the skill from user intent. A user-invoked skill (`disable-model-invocation: true`) writes one plain human-facing line naming the deliverable instead — the agent never routes on that line.
- `version` — `0.6.x` on `cmk:design`; `0.5.x` on `cmk:delivery-pipeline`; `0.4.x` on `cmk:cicd` (security-scanning facet) and `cmk:requirements` (Standard elicitation: close package, scope band, guards); `0.3.x` on `cmk:delivery-workflow`, `cmk:agent-instructions`, `cmk:adr`, `cmk:docs`, and `cmk:local-stack`; `0.2.0` on two docs-family skills (`learn`, `rule`) and six setup-family skills (`agent-instructions`, `agent-vendors`, `infra`, `mcp-config`, `project-layout`, `toolchain`); `0.1.x` on the rest — `repo-setup` and `sync`, `test-resources`, `rust`, and `testcontainers` (new setup-family skills), the other delivery-family skills (incl. new `cmk:delivery-simplify` at `0.1.0`), both knowledge-family skills, the two remaining docs-family skills (`codebase-docs`, `glossary`), and `cmk:interpret`.
- `disable-model-invocation: true` — optional, fourth field only. Present on `cmk:interpret`. The closer is still `---`.
- `version` — `1.0.0` on `cmk:write-cmk-skill`; `0.6.x` on `cmk:design`; `0.5.x` on `cmk:delivery-pipeline`; `0.4.x` on `cmk:cicd` (security-scanning facet) and `cmk:requirements` (Standard elicitation: close package, scope band, guards); `0.3.x` on `cmk:delivery-workflow`, `cmk:agent-instructions`, `cmk:adr`, `cmk:docs`, and `cmk:local-stack`; `0.2.0` on two docs-family skills (`learn`, `rule`) and six setup-family skills (`agent-instructions`, `agent-vendors`, `infra`, `mcp-config`, `project-layout`, `toolchain`); `0.1.x` on the rest — `repo-setup` and `sync`, `test-resources`, `rust`, and `testcontainers` (new setup-family skills), the other delivery-family skills (incl. new `cmk:delivery-simplify` at `0.1.0`), both knowledge-family skills, the two remaining docs-family skills (`codebase-docs`, `glossary`), and `cmk:interpret`.
- `disable-model-invocation: true` — optional, fourth field only. Present on `cmk:interpret` and `cmk:write-cmk-skill`. The closer is still `---`.

No skill file references outside its own package by relative path — the rule binds a package's own references, not content it emits into a target repo; a skill that needs a target-repo artifact names it repo-root-relative, and a skill that needs another skill cites it by `cmk:` name — see `cmk:agent-vendors`.

Expand All@@ -23,12 +23,14 @@ Delivery-family skills (`delivery-workflow`, `discover-efforts`, `delivery-intak

Session-discipline skills (`interpret`) are neither create/iterate nor a setup facet nor a delivery phase. `cmk:interpret` is user-invoked (`disable-model-invocation: true`), stays read-only toward the repo, and ships a `references/digest.md` loaded only at session end.

Meta skills (`write-cmk-skill`) author or review other skills in this kit. `cmk:write-cmk-skill` is user-invoked (`disable-model-invocation: true`), enforces a failing-baseline Iron Law before any skill text ships, and loads `references/pressure-testing.md` / `references/influence-principles.md` on demand. It is not a docs/setup/delivery/knowledge workflow.

Knowledge-family skills (`sui-sdk`, `sui-devstack`) are domain reference packs sitting beside the generic model rather than replacing it. `cmk:sui-sdk` is a single file with no `references/` directory: it corrects one specific stale-training-data pattern (reaching for Sui JSON-RPC instead of gRPC) and runs no workflow at all. `cmk:sui-devstack` has a `references/` folder and layers Sui-specific detail — Devstack's config shape, account/package staging, instance isolation — on top of `cmk:local-stack`'s generic `(worktree, config, instance)` primitive; it does not restate or replace that primitive. Neither knowledge skill has a `## Verify` section or an `eval.json`.

## Where
- Frontmatter, on every skill: open any `skills/<name>/SKILL.md` and read lines 1–5 (1–6 when `disable-model-invocation: true` is present).
- Skills with `references/`: `skills/adr/`, `skills/agent-instructions/`, `skills/agent-vendors/`, `skills/cicd/`, `skills/codebase-docs/`, `skills/design/`, `skills/docs/`, `skills/infra/`, `skills/learn/`, `skills/local-stack/`, `skills/project-layout/`, `skills/repo-setup/`, `skills/requirements/`, `skills/rule/`, `skills/rust/`, `skills/sync/`, `skills/test-resources/`, `skills/toolchain/`, `skills/delivery-workflow/`, `skills/discover-efforts/`, `skills/delivery-intake/`, `skills/delivery-simplify/`, `skills/delivery-review/`, `skills/delivery-ship/`, `skills/delivery-pipeline/`, `skills/sui-devstack/`, `skills/interpret/`. Skills without one: `skills/glossary/`, `skills/mcp-config/`, `skills/delivery-spec-plan/`, `skills/delivery-handoff/`, `skills/sui-sdk/`, `skills/testcontainers/`.
- Skills with `eval.json`: `skills/agent-instructions/eval.json`, `skills/codebase-docs/eval.json`, `skills/local-stack/eval.json`, `skills/repo-setup/eval.json`, `skills/sync/eval.json`, `skills/interpret/eval.json`. No delivery-family or knowledge-family skill ships one.
- Skills with `references/`: `skills/adr/`, `skills/agent-instructions/`, `skills/agent-vendors/`, `skills/cicd/`, `skills/codebase-docs/`, `skills/design/`, `skills/docs/`, `skills/infra/`, `skills/learn/`, `skills/local-stack/`, `skills/project-layout/`, `skills/repo-setup/`, `skills/requirements/`, `skills/rule/`, `skills/rust/`, `skills/sync/`, `skills/test-resources/`, `skills/toolchain/`, `skills/delivery-workflow/`, `skills/discover-efforts/`, `skills/delivery-intake/`, `skills/delivery-simplify/`, `skills/delivery-review/`, `skills/delivery-ship/`, `skills/delivery-pipeline/`, `skills/sui-devstack/`, `skills/interpret/`, `skills/write-cmk-skill/`. Skills without one: `skills/glossary/`, `skills/mcp-config/`, `skills/delivery-spec-plan/`, `skills/delivery-handoff/`, `skills/sui-sdk/`, `skills/testcontainers/`.
- Skills with `eval.json`: `skills/agent-instructions/eval.json`, `skills/codebase-docs/eval.json`, `skills/local-stack/eval.json`, `skills/repo-setup/eval.json`, `skills/sync/eval.json`, `skills/interpret/eval.json`, `skills/write-cmk-skill/eval.json`. No delivery-family or knowledge-family skill ships one.
- The shared docs-family workflow shape: grep for `^## Workflow: Create` and `^## Workflow: Iterate` across `skills/*/SKILL.md`.
- The shared setup-family Verify contract: grep for the exact heading `^## Verify$` across `skills/*/SKILL.md` — every hit is a setup-family skill. `skills/delivery-review/SKILL.md` has a similarly named but distinct `## Verify before acting` section (adversarial verification of review findings, not a report-only facet check) — match on the exact heading, not the prefix, to tell them apart.
- The delivery-family tracker binding: grep for `references/linear.md` across `skills/delivery-*/SKILL.md` and `skills/discover-efforts/SKILL.md`, then confirm each hit is the sole conditional pointer line, not body prose.
21 changes: 13 additions & 8 deletions docs/ai/skills/sync.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,23 +18,28 @@ lock's recorded SHA, theirs = current upstream, ours = the repo's evolved
copy; apply the upstream delta base→theirs to ours as a meaning-level merge,
surface genuine conflicts for human decision, never auto-resolve), and
**contribute** (review local amendments flagged as generic and prepare them
as upstream contributions). Separable local amendments sit under a marked
`## Project adaptations` section, giving the reconcile a stable seam.
Truly project-owned skills (deploy steps, product workflows) carry no lock
entry and sync never touches them. Ends with a report-only `## Verify`
section.
as upstream contributions — for each upstream-bound candidate, name
`/write-cmk-skill` for the user to run first; never invoke that user-invoked
skill; skip the gate for pure `## Project adaptations`). Separable local
amendments sit under a marked `## Project adaptations` section, giving the
reconcile a stable seam. Truly project-owned skills (deploy steps, product
workflows) carry no lock entry and sync never touches them. Ends with a
report-only `## Verify` section.

## Where
- Skill body: `skills/sync/SKILL.md` — sections `What the lock records`,
`Modes`, `Workflow (sync mode)`, `Scope rule`, `Verify`.
`Modes`, `Workflow (sync mode)`, `Workflow (contribute mode)`, `Scope rule`,
`Verify`.
- `references/skills-lock.md` — the normative `.agents/skills.lock` TOML
shape, field semantics, and the naming mapping between upstream and
vendored directories.
- `references/reconciliation.md` — the three-way frame, the semantic merge
doctrine (rewording is not a conflict; behavior/contract disagreement is),
the `## Project adaptations` seam, upstream-contribution candidates, and
failure honesty (an incomplete reconcile keeps its old lock entry).
the `## Project adaptations` seam, upstream-contribution candidates (incl.
the `/write-cmk-skill` gate), and failure honesty (an incomplete reconcile
keeps its old lock entry).
- Eval scenarios: `skills/sync/eval.json`.

## Links
- Vendored layout and adapters: `cmk:agent-vendors`.
- Authoring gate before upstream contribute: `cmk:write-cmk-skill` (user-invoked).
28 changes: 28 additions & 0 deletions docs/ai/skills/write-cmk-skill.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
# cmk:write-cmk-skill

## What

User-invoked skill for creating, editing, or reviewing a `cmk:*` skill before
it ships. Applies test-driven authoring (RED baseline → GREEN minimal text →
REFACTOR under pressure) so a skill only lands when a failing baseline proves
the text is needed.

## Approach

Neither create/iterate nor a setup facet nor a delivery phase. An Iron Law
forbids shipping skill text without a failing baseline first. Frontmatter
follows kit house form (`name` / `description` / `version`, optional
`disable-model-invocation`); model-invocable descriptions are trigger +
outcome noun, user-invoked descriptions are one plain deliverable line.
Companion material (pressure-testing protocol, influence wording) lives in
`references/` and loads on demand. Structural checks run through
`scripts/skill-lint.sh`.

## Where

- Skill body: `skills/write-cmk-skill/SKILL.md`
- Pressure-testing protocol: `skills/write-cmk-skill/references/pressure-testing.md`
- Influence wording: `skills/write-cmk-skill/references/influence-principles.md`
- Eval fixtures: `skills/write-cmk-skill/eval.json`
- Mechanical lint: `scripts/skill-lint.sh`
- House style for PRs: `CONTRIBUTING.md`
1 change: 1 addition & 0 deletions docs/guides/on-ramps.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -20,6 +20,7 @@ point here; they do not restate this table.
| Open PR / close ticket with evidence | `cmk:delivery-ship` |
| Handoff to another agent | `cmk:delivery-handoff` |
| Vendor skills / sync upstream | `cmk:agent-vendors` / `cmk:sync` |
| Create / edit / review a `cmk:*` skill | `cmk:write-cmk-skill` (user-invoked) |
| CI / local stack / MCP / toolchain alone | matching setup facet (`cmk:cicd`, `cmk:local-stack`, …) |

Rules of thumb:
Expand Down
17 changes: 15 additions & 2 deletions skills/sync/SKILL.md
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
---
name: cmk:sync
description: Use when the user asks to "sync skills with upstream", "pull upstream skill updates", "reconcile vendored skills", "update the skills lockfile", or whenever a repo's vendored `.agents/skills/` copies have drifted from the upstream kit.
version: 0.1.1
version: 0.1.2
---

# Sync
Expand All@@ -25,7 +25,7 @@ Read `references/skills-lock.md`.
the local adaptation.
- **sync** — the three-way reconcile (below).
- **contribute** — review local amendments flagged as generic; prepare them
as upstream contributions.
as upstream contributions (below).

## Workflow (sync mode)

Expand All@@ -45,6 +45,19 @@ Read `references/skills-lock.md`.

Running the reconcile? Read `references/reconciliation.md`.

## Workflow (contribute mode)

1. Collect candidates flagged as generic (from a prior sync, or re-scan per
`references/reconciliation.md`).
2. Drop anything that belongs under `## Project adaptations` or carries
project vocabulary — those stay local; sync never promotes them.
3. For every remaining candidate that will edit an upstream `cmk:*` skill:
**name `/write-cmk-skill` for the user to run** before preparing the PR.
Do not invoke it — `cmk:write-cmk-skill` is user-invoked. Skip this step
only when the user already completed that pass for this amendment set.
4. After that pass (or explicit skip), prepare the upstream contribution PR
from the reviewed generic amendments.

## Scope rule

Truly project-owned skills (deploy steps, product workflows) are new skills,
Expand Down
5 changes: 5 additions & 0 deletions skills/sync/references/reconciliation.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -45,6 +45,11 @@ generic skill is flagged with its file, section, and a one-line rationale.
Flagging is sync's job; actually preparing and contributing it back upstream
is *contribute* mode's job, never a side effect of running sync.

Before contribute prepares that PR, name `/write-cmk-skill` for the user to
run on the candidate set — the kit's authoring Iron Law and ship checklist
live there. Do not invoke `cmk:write-cmk-skill` from sync (user-invoked).
Pure `## Project adaptations` stay local and skip that gate.

## Failure honesty

A skill whose reconcile did not complete keeps its old lock entry. The
Expand Down
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 8 additions & 4 deletions CONTRIBUTING.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,9 +2,11 @@

## Proposing a skill change

Open a PR against `main`. Describe what the skill gets wrong, ambiguous, or
misses today, and how your change fixes it — reviewers and skill-lint judge
the diff, not the intent.
For a new skill or a behavior-shaping edit, run `/write-cmk-skill` first: it
enforces a failing-baseline Iron Law and the ship checklist before text
lands under `skills/`. Then open a PR against `main`. Describe what the
skill gets wrong, ambiguous, or misses today, and how your change fixes
it — reviewers and skill-lint judge the diff, not the intent.

## The kit's bar

Expand DownExpand Up@@ -46,7 +48,9 @@ out of your own diff. CI runs the same script on every PR touching
If your repo vendored the skills via `cmk:agent-vendors` and evolved one
locally, don't just keep the fix local. Run `cmk:sync` in **contribute**
mode: it reviews local amendments flagged as generic-looking upstream
candidates and prepares them as a PR back here.
candidates, names `/write-cmk-skill` for you to run on those candidates,
then prepares them as a PR back here. Pure `## Project adaptations` stay
local and skip that gate.

## Commits

Expand Down
8 changes: 6 additions & 2 deletions docs/ai/skills/README.md
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
# Skills

The `cmk:*` skill packages under [`skills/`](../../../skills/): eight docs-family skills, thirteen setup-family skills, nine delivery-family skills, two knowledge-family skills, and one session-discipline skill (`cmk:interpret`). Each is a directory with a `SKILL.md` (frontmatter `name`/`description`/`version` plus the body the agent reads), and most ship a `references/` folder of guidance, templates, and conventions the workflow loads on demand.
The `cmk:*` skill packages under [`skills/`](../../../skills/): eight docs-family skills, thirteen setup-family skills, nine delivery-family skills, two knowledge-family skills, one session-discipline skill (`cmk:interpret`), and one meta skill (`cmk:write-cmk-skill`). Each is a directory with a `SKILL.md` (frontmatter `name`/`description`/`version` plus the body the agent reads), and most ship a `references/` folder of guidance, templates, and conventions the workflow loads on demand.

Docs-family skills follow the same shape: a "Workflow: Create" / "Workflow: Iterate" pair, with placement rules, shaping guidance, and templates kept out of `SKILL.md` itself and cited via "Read `references/<file>.md`" lines. Setup-family skills instead follow a facet shape (modes and/or a single workflow, plus a report-only `## Verify` section). Delivery-family skills follow a tracker-neutral phase/gate shape and never carry a `## Verify` section — that contract is setup-family only. Knowledge-family skills are reference packs with no create/iterate or phase shape at all. See [conventions.md](./conventions.md) for the exceptions and the full breakdown.

Expand DownExpand Up@@ -52,6 +52,10 @@ Docs-family skills follow the same shape: a "Workflow: Create" / "Workflow: Iter

- [interpret.md](./interpret.md) — `cmk:interpret`, companion session beside another window: stance plus a carry-back reply. User-invoked.

## Meta

- [write-cmk-skill.md](./write-cmk-skill.md) — `cmk:write-cmk-skill`, author or review a `cmk:*` skill under a failing-baseline Iron Law. User-invoked.

## Cross-cutting

- [conventions.md](./conventions.md) — shared shape across all skills (frontmatter, references folder, docs-family create/iterate pattern, setup-family facet shape, delivery-family phase/gate shape, knowledge-family reference packs).
- [conventions.md](./conventions.md) — shared shape across all skills (frontmatter, references folder, docs-family create/iterate pattern, setup-family facet shape, delivery-family phase/gate shape, knowledge-family reference packs, session/meta user-invoked skills).
10 changes: 6 additions & 4 deletions docs/ai/skills/conventions.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -8,8 +8,8 @@ Frontmatter declares three fields the host (Claude Code or OpenCode) reads to di

- `name` — `cmk:<short-name>`, used as the slash command and skill ID.
- `description` — opens in the second person (`Use when…` / `Use whenever…`) with trigger phrases plus an **outcome noun** (the deliverable), not a workflow step list. Used by the agent to auto-select the skill from user intent. A user-invoked skill (`disable-model-invocation: true`) writes one plain human-facing line naming the deliverable instead — the agent never routes on that line.
- `version` — `0.6.x` on `cmk:design`; `0.5.x` on `cmk:delivery-pipeline`; `0.4.x` on `cmk:cicd` (security-scanning facet) and `cmk:requirements` (Standard elicitation: close package, scope band, guards); `0.3.x` on `cmk:delivery-workflow`, `cmk:agent-instructions`, `cmk:adr`, `cmk:docs`, and `cmk:local-stack`; `0.2.0` on two docs-family skills (`learn`, `rule`) and six setup-family skills (`agent-instructions`, `agent-vendors`, `infra`, `mcp-config`, `project-layout`, `toolchain`); `0.1.x` on the rest — `repo-setup` and `sync`, `test-resources`, `rust`, and `testcontainers` (new setup-family skills), the other delivery-family skills (incl. new `cmk:delivery-simplify` at `0.1.0`), both knowledge-family skills, the two remaining docs-family skills (`codebase-docs`, `glossary`), and `cmk:interpret`.
- `disable-model-invocation: true` — optional, fourth field only. Present on `cmk:interpret`. The closer is still `---`.
- `version` — `1.0.0` on `cmk:write-cmk-skill`; `0.6.x` on `cmk:design`; `0.5.x` on `cmk:delivery-pipeline`; `0.4.x` on `cmk:cicd` (security-scanning facet) and `cmk:requirements` (Standard elicitation: close package, scope band, guards); `0.3.x` on `cmk:delivery-workflow`, `cmk:agent-instructions`, `cmk:adr`, `cmk:docs`, and `cmk:local-stack`; `0.2.0` on two docs-family skills (`learn`, `rule`) and six setup-family skills (`agent-instructions`, `agent-vendors`, `infra`, `mcp-config`, `project-layout`, `toolchain`); `0.1.x` on the rest — `repo-setup` and `sync`, `test-resources`, `rust`, and `testcontainers` (new setup-family skills), the other delivery-family skills (incl. new `cmk:delivery-simplify` at `0.1.0`), both knowledge-family skills, the two remaining docs-family skills (`codebase-docs`, `glossary`), and `cmk:interpret`.
- `disable-model-invocation: true` — optional, fourth field only. Present on `cmk:interpret` and `cmk:write-cmk-skill`. The closer is still `---`.

No skill file references outside its own package by relative path — the rule binds a package's own references, not content it emits into a target repo; a skill that needs a target-repo artifact names it repo-root-relative, and a skill that needs another skill cites it by `cmk:` name — see `cmk:agent-vendors`.

Expand All@@ -23,12 +23,14 @@ Delivery-family skills (`delivery-workflow`, `discover-efforts`, `delivery-intak

Session-discipline skills (`interpret`) are neither create/iterate nor a setup facet nor a delivery phase. `cmk:interpret` is user-invoked (`disable-model-invocation: true`), stays read-only toward the repo, and ships a `references/digest.md` loaded only at session end.

Meta skills (`write-cmk-skill`) author or review other skills in this kit. `cmk:write-cmk-skill` is user-invoked (`disable-model-invocation: true`), enforces a failing-baseline Iron Law before any skill text ships, and loads `references/pressure-testing.md` / `references/influence-principles.md` on demand. It is not a docs/setup/delivery/knowledge workflow.

Knowledge-family skills (`sui-sdk`, `sui-devstack`) are domain reference packs sitting beside the generic model rather than replacing it. `cmk:sui-sdk` is a single file with no `references/` directory: it corrects one specific stale-training-data pattern (reaching for Sui JSON-RPC instead of gRPC) and runs no workflow at all. `cmk:sui-devstack` has a `references/` folder and layers Sui-specific detail — Devstack's config shape, account/package staging, instance isolation — on top of `cmk:local-stack`'s generic `(worktree, config, instance)` primitive; it does not restate or replace that primitive. Neither knowledge skill has a `## Verify` section or an `eval.json`.

## Where
- Frontmatter, on every skill: open any `skills/<name>/SKILL.md` and read lines 1–5 (1–6 when `disable-model-invocation: true` is present).
- Skills with `references/`: `skills/adr/`, `skills/agent-instructions/`, `skills/agent-vendors/`, `skills/cicd/`, `skills/codebase-docs/`, `skills/design/`, `skills/docs/`, `skills/infra/`, `skills/learn/`, `skills/local-stack/`, `skills/project-layout/`, `skills/repo-setup/`, `skills/requirements/`, `skills/rule/`, `skills/rust/`, `skills/sync/`, `skills/test-resources/`, `skills/toolchain/`, `skills/delivery-workflow/`, `skills/discover-efforts/`, `skills/delivery-intake/`, `skills/delivery-simplify/`, `skills/delivery-review/`, `skills/delivery-ship/`, `skills/delivery-pipeline/`, `skills/sui-devstack/`, `skills/interpret/`. Skills without one: `skills/glossary/`, `skills/mcp-config/`, `skills/delivery-spec-plan/`, `skills/delivery-handoff/`, `skills/sui-sdk/`, `skills/testcontainers/`.
- Skills with `eval.json`: `skills/agent-instructions/eval.json`, `skills/codebase-docs/eval.json`, `skills/local-stack/eval.json`, `skills/repo-setup/eval.json`, `skills/sync/eval.json`, `skills/interpret/eval.json`. No delivery-family or knowledge-family skill ships one.
- Skills with `references/`: `skills/adr/`, `skills/agent-instructions/`, `skills/agent-vendors/`, `skills/cicd/`, `skills/codebase-docs/`, `skills/design/`, `skills/docs/`, `skills/infra/`, `skills/learn/`, `skills/local-stack/`, `skills/project-layout/`, `skills/repo-setup/`, `skills/requirements/`, `skills/rule/`, `skills/rust/`, `skills/sync/`, `skills/test-resources/`, `skills/toolchain/`, `skills/delivery-workflow/`, `skills/discover-efforts/`, `skills/delivery-intake/`, `skills/delivery-simplify/`, `skills/delivery-review/`, `skills/delivery-ship/`, `skills/delivery-pipeline/`, `skills/sui-devstack/`, `skills/interpret/`, `skills/write-cmk-skill/`. Skills without one: `skills/glossary/`, `skills/mcp-config/`, `skills/delivery-spec-plan/`, `skills/delivery-handoff/`, `skills/sui-sdk/`, `skills/testcontainers/`.
- Skills with `eval.json`: `skills/agent-instructions/eval.json`, `skills/codebase-docs/eval.json`, `skills/local-stack/eval.json`, `skills/repo-setup/eval.json`, `skills/sync/eval.json`, `skills/interpret/eval.json`, `skills/write-cmk-skill/eval.json`. No delivery-family or knowledge-family skill ships one.
- The shared docs-family workflow shape: grep for `^## Workflow: Create` and `^## Workflow: Iterate` across `skills/*/SKILL.md`.
- The shared setup-family Verify contract: grep for the exact heading `^## Verify$` across `skills/*/SKILL.md` — every hit is a setup-family skill. `skills/delivery-review/SKILL.md` has a similarly named but distinct `## Verify before acting` section (adversarial verification of review findings, not a report-only facet check) — match on the exact heading, not the prefix, to tell them apart.
- The delivery-family tracker binding: grep for `references/linear.md` across `skills/delivery-*/SKILL.md` and `skills/discover-efforts/SKILL.md`, then confirm each hit is the sole conditional pointer line, not body prose.
21 changes: 13 additions & 8 deletions docs/ai/skills/sync.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,23 +18,28 @@ lock's recorded SHA, theirs = current upstream, ours = the repo's evolved
copy; apply the upstream delta base→theirs to ours as a meaning-level merge,
surface genuine conflicts for human decision, never auto-resolve), and
**contribute** (review local amendments flagged as generic and prepare them
as upstream contributions). Separable local amendments sit under a marked
`## Project adaptations` section, giving the reconcile a stable seam.
Truly project-owned skills (deploy steps, product workflows) carry no lock
entry and sync never touches them. Ends with a report-only `## Verify`
section.
as upstream contributions — for each upstream-bound candidate, name
`/write-cmk-skill` for the user to run first; never invoke that user-invoked
skill; skip the gate for pure `## Project adaptations`). Separable local
amendments sit under a marked `## Project adaptations` section, giving the
reconcile a stable seam. Truly project-owned skills (deploy steps, product
workflows) carry no lock entry and sync never touches them. Ends with a
report-only `## Verify` section.

## Where
- Skill body: `skills/sync/SKILL.md` — sections `What the lock records`,
`Modes`, `Workflow (sync mode)`, `Scope rule`, `Verify`.
`Modes`, `Workflow (sync mode)`, `Workflow (contribute mode)`, `Scope rule`,
`Verify`.
- `references/skills-lock.md` — the normative `.agents/skills.lock` TOML
shape, field semantics, and the naming mapping between upstream and
vendored directories.
- `references/reconciliation.md` — the three-way frame, the semantic merge
doctrine (rewording is not a conflict; behavior/contract disagreement is),
the `## Project adaptations` seam, upstream-contribution candidates, and
failure honesty (an incomplete reconcile keeps its old lock entry).
the `## Project adaptations` seam, upstream-contribution candidates (incl.
the `/write-cmk-skill` gate), and failure honesty (an incomplete reconcile
keeps its old lock entry).
- Eval scenarios: `skills/sync/eval.json`.

## Links
- Vendored layout and adapters: `cmk:agent-vendors`.
- Authoring gate before upstream contribute: `cmk:write-cmk-skill` (user-invoked).
28 changes: 28 additions & 0 deletions docs/ai/skills/write-cmk-skill.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
# cmk:write-cmk-skill

## What

User-invoked skill for creating, editing, or reviewing a `cmk:*` skill before
it ships. Applies test-driven authoring (RED baseline → GREEN minimal text →
REFACTOR under pressure) so a skill only lands when a failing baseline proves
the text is needed.

## Approach

Neither create/iterate nor a setup facet nor a delivery phase. An Iron Law
forbids shipping skill text without a failing baseline first. Frontmatter
follows kit house form (`name` / `description` / `version`, optional
`disable-model-invocation`); model-invocable descriptions are trigger +
outcome noun, user-invoked descriptions are one plain deliverable line.
Companion material (pressure-testing protocol, influence wording) lives in
`references/` and loads on demand. Structural checks run through
`scripts/skill-lint.sh`.

## Where

- Skill body: `skills/write-cmk-skill/SKILL.md`
- Pressure-testing protocol: `skills/write-cmk-skill/references/pressure-testing.md`
- Influence wording: `skills/write-cmk-skill/references/influence-principles.md`
- Eval fixtures: `skills/write-cmk-skill/eval.json`
- Mechanical lint: `scripts/skill-lint.sh`
- House style for PRs: `CONTRIBUTING.md`
1 change: 1 addition & 0 deletions docs/guides/on-ramps.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -20,6 +20,7 @@ point here; they do not restate this table.
| Open PR / close ticket with evidence | `cmk:delivery-ship` |
| Handoff to another agent | `cmk:delivery-handoff` |
| Vendor skills / sync upstream | `cmk:agent-vendors` / `cmk:sync` |
| Create / edit / review a `cmk:*` skill | `cmk:write-cmk-skill` (user-invoked) |
| CI / local stack / MCP / toolchain alone | matching setup facet (`cmk:cicd`, `cmk:local-stack`, …) |

Rules of thumb:
Expand Down
17 changes: 15 additions & 2 deletions skills/sync/SKILL.md
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
---
name: cmk:sync
description: Use when the user asks to "sync skills with upstream", "pull upstream skill updates", "reconcile vendored skills", "update the skills lockfile", or whenever a repo's vendored `.agents/skills/` copies have drifted from the upstream kit.
version: 0.1.1
version: 0.1.2
---

# Sync
Expand All@@ -25,7 +25,7 @@ Read `references/skills-lock.md`.
the local adaptation.
- **sync** — the three-way reconcile (below).
- **contribute** — review local amendments flagged as generic; prepare them
as upstream contributions.
as upstream contributions (below).

## Workflow (sync mode)

Expand All@@ -45,6 +45,19 @@ Read `references/skills-lock.md`.

Running the reconcile? Read `references/reconciliation.md`.

## Workflow (contribute mode)

1. Collect candidates flagged as generic (from a prior sync, or re-scan per
`references/reconciliation.md`).
2. Drop anything that belongs under `## Project adaptations` or carries
project vocabulary — those stay local; sync never promotes them.
3. For every remaining candidate that will edit an upstream `cmk:*` skill:
**name `/write-cmk-skill` for the user to run** before preparing the PR.
Do not invoke it — `cmk:write-cmk-skill` is user-invoked. Skip this step
only when the user already completed that pass for this amendment set.
4. After that pass (or explicit skip), prepare the upstream contribution PR
from the reviewed generic amendments.

## Scope rule

Truly project-owned skills (deploy steps, product workflows) are new skills,
Expand Down
5 changes: 5 additions & 0 deletions skills/sync/references/reconciliation.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -45,6 +45,11 @@ generic skill is flagged with its file, section, and a one-line rationale.
Flagging is sync's job; actually preparing and contributing it back upstream
is *contribute* mode's job, never a side effect of running sync.

Before contribute prepares that PR, name `/write-cmk-skill` for the user to
run on the candidate set — the kit's authoring Iron Law and ship checklist
live there. Do not invoke `cmk:write-cmk-skill` from sync (user-invoked).
Pure `## Project adaptations` stay local and skip that gate.

## Failure honesty

A skill whose reconcile did not complete keeps its old lock entry. The
Expand Down
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 8 additions & 4 deletions CONTRIBUTING.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,9 +2,11 @@

## Proposing a skill change

Open a PR against `main`. Describe what the skill gets wrong, ambiguous, or
misses today, and how your change fixes it — reviewers and skill-lint judge
the diff, not the intent.
For a new skill or a behavior-shaping edit, run `/write-cmk-skill` first: it
enforces a failing-baseline Iron Law and the ship checklist before text
lands under `skills/`. Then open a PR against `main`. Describe what the
skill gets wrong, ambiguous, or misses today, and how your change fixes
it — reviewers and skill-lint judge the diff, not the intent.

## The kit's bar

Expand DownExpand Up@@ -46,7 +48,9 @@ out of your own diff. CI runs the same script on every PR touching
If your repo vendored the skills via `cmk:agent-vendors` and evolved one
locally, don't just keep the fix local. Run `cmk:sync` in **contribute**
mode: it reviews local amendments flagged as generic-looking upstream
candidates and prepares them as a PR back here.
candidates, names `/write-cmk-skill` for you to run on those candidates,
then prepares them as a PR back here. Pure `## Project adaptations` stay
local and skip that gate.

## Commits

Expand Down
8 changes: 6 additions & 2 deletions docs/ai/skills/README.md
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
# Skills

The `cmk:*` skill packages under [`skills/`](../../../skills/): eight docs-family skills, thirteen setup-family skills, nine delivery-family skills, two knowledge-family skills, and one session-discipline skill (`cmk:interpret`). Each is a directory with a `SKILL.md` (frontmatter `name`/`description`/`version` plus the body the agent reads), and most ship a `references/` folder of guidance, templates, and conventions the workflow loads on demand.
The `cmk:*` skill packages under [`skills/`](../../../skills/): eight docs-family skills, thirteen setup-family skills, nine delivery-family skills, two knowledge-family skills, one session-discipline skill (`cmk:interpret`), and one meta skill (`cmk:write-cmk-skill`). Each is a directory with a `SKILL.md` (frontmatter `name`/`description`/`version` plus the body the agent reads), and most ship a `references/` folder of guidance, templates, and conventions the workflow loads on demand.

Docs-family skills follow the same shape: a "Workflow: Create" / "Workflow: Iterate" pair, with placement rules, shaping guidance, and templates kept out of `SKILL.md` itself and cited via "Read `references/<file>.md`" lines. Setup-family skills instead follow a facet shape (modes and/or a single workflow, plus a report-only `## Verify` section). Delivery-family skills follow a tracker-neutral phase/gate shape and never carry a `## Verify` section — that contract is setup-family only. Knowledge-family skills are reference packs with no create/iterate or phase shape at all. See [conventions.md](./conventions.md) for the exceptions and the full breakdown.

Expand DownExpand Up@@ -52,6 +52,10 @@ Docs-family skills follow the same shape: a "Workflow: Create" / "Workflow: Iter

- [interpret.md](./interpret.md) — `cmk:interpret`, companion session beside another window: stance plus a carry-back reply. User-invoked.

## Meta

- [write-cmk-skill.md](./write-cmk-skill.md) — `cmk:write-cmk-skill`, author or review a `cmk:*` skill under a failing-baseline Iron Law. User-invoked.

## Cross-cutting

- [conventions.md](./conventions.md) — shared shape across all skills (frontmatter, references folder, docs-family create/iterate pattern, setup-family facet shape, delivery-family phase/gate shape, knowledge-family reference packs).
- [conventions.md](./conventions.md) — shared shape across all skills (frontmatter, references folder, docs-family create/iterate pattern, setup-family facet shape, delivery-family phase/gate shape, knowledge-family reference packs, session/meta user-invoked skills).
10 changes: 6 additions & 4 deletions docs/ai/skills/conventions.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -8,8 +8,8 @@ Frontmatter declares three fields the host (Claude Code or OpenCode) reads to di

- `name` — `cmk:<short-name>`, used as the slash command and skill ID.
- `description` — opens in the second person (`Use when…` / `Use whenever…`) with trigger phrases plus an **outcome noun** (the deliverable), not a workflow step list. Used by the agent to auto-select the skill from user intent. A user-invoked skill (`disable-model-invocation: true`) writes one plain human-facing line naming the deliverable instead — the agent never routes on that line.
- `version` — `0.6.x` on `cmk:design`; `0.5.x` on `cmk:delivery-pipeline`; `0.4.x` on `cmk:cicd` (security-scanning facet) and `cmk:requirements` (Standard elicitation: close package, scope band, guards); `0.3.x` on `cmk:delivery-workflow`, `cmk:agent-instructions`, `cmk:adr`, `cmk:docs`, and `cmk:local-stack`; `0.2.0` on two docs-family skills (`learn`, `rule`) and six setup-family skills (`agent-instructions`, `agent-vendors`, `infra`, `mcp-config`, `project-layout`, `toolchain`); `0.1.x` on the rest — `repo-setup` and `sync`, `test-resources`, `rust`, and `testcontainers` (new setup-family skills), the other delivery-family skills (incl. new `cmk:delivery-simplify` at `0.1.0`), both knowledge-family skills, the two remaining docs-family skills (`codebase-docs`, `glossary`), and `cmk:interpret`.
- `disable-model-invocation: true` — optional, fourth field only. Present on `cmk:interpret`. The closer is still `---`.
- `version` — `1.0.0` on `cmk:write-cmk-skill`; `0.6.x` on `cmk:design`; `0.5.x` on `cmk:delivery-pipeline`; `0.4.x` on `cmk:cicd` (security-scanning facet) and `cmk:requirements` (Standard elicitation: close package, scope band, guards); `0.3.x` on `cmk:delivery-workflow`, `cmk:agent-instructions`, `cmk:adr`, `cmk:docs`, and `cmk:local-stack`; `0.2.0` on two docs-family skills (`learn`, `rule`) and six setup-family skills (`agent-instructions`, `agent-vendors`, `infra`, `mcp-config`, `project-layout`, `toolchain`); `0.1.x` on the rest — `repo-setup` and `sync`, `test-resources`, `rust`, and `testcontainers` (new setup-family skills), the other delivery-family skills (incl. new `cmk:delivery-simplify` at `0.1.0`), both knowledge-family skills, the two remaining docs-family skills (`codebase-docs`, `glossary`), and `cmk:interpret`.
- `disable-model-invocation: true` — optional, fourth field only. Present on `cmk:interpret` and `cmk:write-cmk-skill`. The closer is still `---`.

No skill file references outside its own package by relative path — the rule binds a package's own references, not content it emits into a target repo; a skill that needs a target-repo artifact names it repo-root-relative, and a skill that needs another skill cites it by `cmk:` name — see `cmk:agent-vendors`.

Expand All@@ -23,12 +23,14 @@ Delivery-family skills (`delivery-workflow`, `discover-efforts`, `delivery-intak

Session-discipline skills (`interpret`) are neither create/iterate nor a setup facet nor a delivery phase. `cmk:interpret` is user-invoked (`disable-model-invocation: true`), stays read-only toward the repo, and ships a `references/digest.md` loaded only at session end.

Meta skills (`write-cmk-skill`) author or review other skills in this kit. `cmk:write-cmk-skill` is user-invoked (`disable-model-invocation: true`), enforces a failing-baseline Iron Law before any skill text ships, and loads `references/pressure-testing.md` / `references/influence-principles.md` on demand. It is not a docs/setup/delivery/knowledge workflow.

Knowledge-family skills (`sui-sdk`, `sui-devstack`) are domain reference packs sitting beside the generic model rather than replacing it. `cmk:sui-sdk` is a single file with no `references/` directory: it corrects one specific stale-training-data pattern (reaching for Sui JSON-RPC instead of gRPC) and runs no workflow at all. `cmk:sui-devstack` has a `references/` folder and layers Sui-specific detail — Devstack's config shape, account/package staging, instance isolation — on top of `cmk:local-stack`'s generic `(worktree, config, instance)` primitive; it does not restate or replace that primitive. Neither knowledge skill has a `## Verify` section or an `eval.json`.

## Where
- Frontmatter, on every skill: open any `skills/<name>/SKILL.md` and read lines 1–5 (1–6 when `disable-model-invocation: true` is present).
- Skills with `references/`: `skills/adr/`, `skills/agent-instructions/`, `skills/agent-vendors/`, `skills/cicd/`, `skills/codebase-docs/`, `skills/design/`, `skills/docs/`, `skills/infra/`, `skills/learn/`, `skills/local-stack/`, `skills/project-layout/`, `skills/repo-setup/`, `skills/requirements/`, `skills/rule/`, `skills/rust/`, `skills/sync/`, `skills/test-resources/`, `skills/toolchain/`, `skills/delivery-workflow/`, `skills/discover-efforts/`, `skills/delivery-intake/`, `skills/delivery-simplify/`, `skills/delivery-review/`, `skills/delivery-ship/`, `skills/delivery-pipeline/`, `skills/sui-devstack/`, `skills/interpret/`. Skills without one: `skills/glossary/`, `skills/mcp-config/`, `skills/delivery-spec-plan/`, `skills/delivery-handoff/`, `skills/sui-sdk/`, `skills/testcontainers/`.
- Skills with `eval.json`: `skills/agent-instructions/eval.json`, `skills/codebase-docs/eval.json`, `skills/local-stack/eval.json`, `skills/repo-setup/eval.json`, `skills/sync/eval.json`, `skills/interpret/eval.json`. No delivery-family or knowledge-family skill ships one.
- Skills with `references/`: `skills/adr/`, `skills/agent-instructions/`, `skills/agent-vendors/`, `skills/cicd/`, `skills/codebase-docs/`, `skills/design/`, `skills/docs/`, `skills/infra/`, `skills/learn/`, `skills/local-stack/`, `skills/project-layout/`, `skills/repo-setup/`, `skills/requirements/`, `skills/rule/`, `skills/rust/`, `skills/sync/`, `skills/test-resources/`, `skills/toolchain/`, `skills/delivery-workflow/`, `skills/discover-efforts/`, `skills/delivery-intake/`, `skills/delivery-simplify/`, `skills/delivery-review/`, `skills/delivery-ship/`, `skills/delivery-pipeline/`, `skills/sui-devstack/`, `skills/interpret/`, `skills/write-cmk-skill/`. Skills without one: `skills/glossary/`, `skills/mcp-config/`, `skills/delivery-spec-plan/`, `skills/delivery-handoff/`, `skills/sui-sdk/`, `skills/testcontainers/`.
- Skills with `eval.json`: `skills/agent-instructions/eval.json`, `skills/codebase-docs/eval.json`, `skills/local-stack/eval.json`, `skills/repo-setup/eval.json`, `skills/sync/eval.json`, `skills/interpret/eval.json`, `skills/write-cmk-skill/eval.json`. No delivery-family or knowledge-family skill ships one.
- The shared docs-family workflow shape: grep for `^## Workflow: Create` and `^## Workflow: Iterate` across `skills/*/SKILL.md`.
- The shared setup-family Verify contract: grep for the exact heading `^## Verify$` across `skills/*/SKILL.md` — every hit is a setup-family skill. `skills/delivery-review/SKILL.md` has a similarly named but distinct `## Verify before acting` section (adversarial verification of review findings, not a report-only facet check) — match on the exact heading, not the prefix, to tell them apart.
- The delivery-family tracker binding: grep for `references/linear.md` across `skills/delivery-*/SKILL.md` and `skills/discover-efforts/SKILL.md`, then confirm each hit is the sole conditional pointer line, not body prose.
21 changes: 13 additions & 8 deletions docs/ai/skills/sync.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,23 +18,28 @@ lock's recorded SHA, theirs = current upstream, ours = the repo's evolved
copy; apply the upstream delta base→theirs to ours as a meaning-level merge,
surface genuine conflicts for human decision, never auto-resolve), and
**contribute** (review local amendments flagged as generic and prepare them
as upstream contributions). Separable local amendments sit under a marked
`## Project adaptations` section, giving the reconcile a stable seam.
Truly project-owned skills (deploy steps, product workflows) carry no lock
entry and sync never touches them. Ends with a report-only `## Verify`
section.
as upstream contributions — for each upstream-bound candidate, name
`/write-cmk-skill` for the user to run first; never invoke that user-invoked
skill; skip the gate for pure `## Project adaptations`). Separable local
amendments sit under a marked `## Project adaptations` section, giving the
reconcile a stable seam. Truly project-owned skills (deploy steps, product
workflows) carry no lock entry and sync never touches them. Ends with a
report-only `## Verify` section.

## Where
- Skill body: `skills/sync/SKILL.md` — sections `What the lock records`,
`Modes`, `Workflow (sync mode)`, `Scope rule`, `Verify`.
`Modes`, `Workflow (sync mode)`, `Workflow (contribute mode)`, `Scope rule`,
`Verify`.
- `references/skills-lock.md` — the normative `.agents/skills.lock` TOML
shape, field semantics, and the naming mapping between upstream and
vendored directories.
- `references/reconciliation.md` — the three-way frame, the semantic merge
doctrine (rewording is not a conflict; behavior/contract disagreement is),
the `## Project adaptations` seam, upstream-contribution candidates, and
failure honesty (an incomplete reconcile keeps its old lock entry).
the `## Project adaptations` seam, upstream-contribution candidates (incl.
the `/write-cmk-skill` gate), and failure honesty (an incomplete reconcile
keeps its old lock entry).
- Eval scenarios: `skills/sync/eval.json`.

## Links
- Vendored layout and adapters: `cmk:agent-vendors`.
- Authoring gate before upstream contribute: `cmk:write-cmk-skill` (user-invoked).
28 changes: 28 additions & 0 deletions docs/ai/skills/write-cmk-skill.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
# cmk:write-cmk-skill

## What

User-invoked skill for creating, editing, or reviewing a `cmk:*` skill before
it ships. Applies test-driven authoring (RED baseline → GREEN minimal text →
REFACTOR under pressure) so a skill only lands when a failing baseline proves
the text is needed.

## Approach

Neither create/iterate nor a setup facet nor a delivery phase. An Iron Law
forbids shipping skill text without a failing baseline first. Frontmatter
follows kit house form (`name` / `description` / `version`, optional
`disable-model-invocation`); model-invocable descriptions are trigger +
outcome noun, user-invoked descriptions are one plain deliverable line.
Companion material (pressure-testing protocol, influence wording) lives in
`references/` and loads on demand. Structural checks run through
`scripts/skill-lint.sh`.

## Where

- Skill body: `skills/write-cmk-skill/SKILL.md`
- Pressure-testing protocol: `skills/write-cmk-skill/references/pressure-testing.md`
- Influence wording: `skills/write-cmk-skill/references/influence-principles.md`
- Eval fixtures: `skills/write-cmk-skill/eval.json`
- Mechanical lint: `scripts/skill-lint.sh`
- House style for PRs: `CONTRIBUTING.md`
1 change: 1 addition & 0 deletions docs/guides/on-ramps.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -20,6 +20,7 @@ point here; they do not restate this table.
| Open PR / close ticket with evidence | `cmk:delivery-ship` |
| Handoff to another agent | `cmk:delivery-handoff` |
| Vendor skills / sync upstream | `cmk:agent-vendors` / `cmk:sync` |
| Create / edit / review a `cmk:*` skill | `cmk:write-cmk-skill` (user-invoked) |
| CI / local stack / MCP / toolchain alone | matching setup facet (`cmk:cicd`, `cmk:local-stack`, …) |

Rules of thumb:
Expand Down
17 changes: 15 additions & 2 deletions skills/sync/SKILL.md
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
---
name: cmk:sync
description: Use when the user asks to "sync skills with upstream", "pull upstream skill updates", "reconcile vendored skills", "update the skills lockfile", or whenever a repo's vendored `.agents/skills/` copies have drifted from the upstream kit.
version: 0.1.1
version: 0.1.2
---

# Sync
Expand All@@ -25,7 +25,7 @@ Read `references/skills-lock.md`.
the local adaptation.
- **sync** — the three-way reconcile (below).
- **contribute** — review local amendments flagged as generic; prepare them
as upstream contributions.
as upstream contributions (below).

## Workflow (sync mode)

Expand All@@ -45,6 +45,19 @@ Read `references/skills-lock.md`.

Running the reconcile? Read `references/reconciliation.md`.

## Workflow (contribute mode)

1. Collect candidates flagged as generic (from a prior sync, or re-scan per
`references/reconciliation.md`).
2. Drop anything that belongs under `## Project adaptations` or carries
project vocabulary — those stay local; sync never promotes them.
3. For every remaining candidate that will edit an upstream `cmk:*` skill:
**name `/write-cmk-skill` for the user to run** before preparing the PR.
Do not invoke it — `cmk:write-cmk-skill` is user-invoked. Skip this step
only when the user already completed that pass for this amendment set.
4. After that pass (or explicit skip), prepare the upstream contribution PR
from the reviewed generic amendments.

## Scope rule

Truly project-owned skills (deploy steps, product workflows) are new skills,
Expand Down
5 changes: 5 additions & 0 deletions skills/sync/references/reconciliation.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -45,6 +45,11 @@ generic skill is flagged with its file, section, and a one-line rationale.
Flagging is sync's job; actually preparing and contributing it back upstream
is *contribute* mode's job, never a side effect of running sync.

Before contribute prepares that PR, name `/write-cmk-skill` for the user to
run on the candidate set — the kit's authoring Iron Law and ship checklist
live there. Do not invoke `cmk:write-cmk-skill` from sync (user-invoked).
Pure `## Project adaptations` stay local and skip that gate.

## Failure honesty

A skill whose reconcile did not complete keeps its old lock entry. The
Expand Down
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 8 additions & 4 deletions CONTRIBUTING.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,9 +2,11 @@

## Proposing a skill change

Open a PR against `main`. Describe what the skill gets wrong, ambiguous, or
misses today, and how your change fixes it — reviewers and skill-lint judge
the diff, not the intent.
For a new skill or a behavior-shaping edit, run `/write-cmk-skill` first: it
enforces a failing-baseline Iron Law and the ship checklist before text
lands under `skills/`. Then open a PR against `main`. Describe what the
skill gets wrong, ambiguous, or misses today, and how your change fixes
it — reviewers and skill-lint judge the diff, not the intent.

## The kit's bar

Expand DownExpand Up@@ -46,7 +48,9 @@ out of your own diff. CI runs the same script on every PR touching
If your repo vendored the skills via `cmk:agent-vendors` and evolved one
locally, don't just keep the fix local. Run `cmk:sync` in **contribute**
mode: it reviews local amendments flagged as generic-looking upstream
candidates and prepares them as a PR back here.
candidates, names `/write-cmk-skill` for you to run on those candidates,
then prepares them as a PR back here. Pure `## Project adaptations` stay
local and skip that gate.

## Commits

Expand Down
8 changes: 6 additions & 2 deletions docs/ai/skills/README.md
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
# Skills

The `cmk:*` skill packages under [`skills/`](../../../skills/): eight docs-family skills, thirteen setup-family skills, nine delivery-family skills, two knowledge-family skills, and one session-discipline skill (`cmk:interpret`). Each is a directory with a `SKILL.md` (frontmatter `name`/`description`/`version` plus the body the agent reads), and most ship a `references/` folder of guidance, templates, and conventions the workflow loads on demand.
The `cmk:*` skill packages under [`skills/`](../../../skills/): eight docs-family skills, thirteen setup-family skills, nine delivery-family skills, two knowledge-family skills, one session-discipline skill (`cmk:interpret`), and one meta skill (`cmk:write-cmk-skill`). Each is a directory with a `SKILL.md` (frontmatter `name`/`description`/`version` plus the body the agent reads), and most ship a `references/` folder of guidance, templates, and conventions the workflow loads on demand.

Docs-family skills follow the same shape: a "Workflow: Create" / "Workflow: Iterate" pair, with placement rules, shaping guidance, and templates kept out of `SKILL.md` itself and cited via "Read `references/<file>.md`" lines. Setup-family skills instead follow a facet shape (modes and/or a single workflow, plus a report-only `## Verify` section). Delivery-family skills follow a tracker-neutral phase/gate shape and never carry a `## Verify` section — that contract is setup-family only. Knowledge-family skills are reference packs with no create/iterate or phase shape at all. See [conventions.md](./conventions.md) for the exceptions and the full breakdown.

Expand DownExpand Up@@ -52,6 +52,10 @@ Docs-family skills follow the same shape: a "Workflow: Create" / "Workflow: Iter

- [interpret.md](./interpret.md) — `cmk:interpret`, companion session beside another window: stance plus a carry-back reply. User-invoked.

## Meta

- [write-cmk-skill.md](./write-cmk-skill.md) — `cmk:write-cmk-skill`, author or review a `cmk:*` skill under a failing-baseline Iron Law. User-invoked.

## Cross-cutting

- [conventions.md](./conventions.md) — shared shape across all skills (frontmatter, references folder, docs-family create/iterate pattern, setup-family facet shape, delivery-family phase/gate shape, knowledge-family reference packs).
- [conventions.md](./conventions.md) — shared shape across all skills (frontmatter, references folder, docs-family create/iterate pattern, setup-family facet shape, delivery-family phase/gate shape, knowledge-family reference packs, session/meta user-invoked skills).
10 changes: 6 additions & 4 deletions docs/ai/skills/conventions.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -8,8 +8,8 @@ Frontmatter declares three fields the host (Claude Code or OpenCode) reads to di

- `name` — `cmk:<short-name>`, used as the slash command and skill ID.
- `description` — opens in the second person (`Use when…` / `Use whenever…`) with trigger phrases plus an **outcome noun** (the deliverable), not a workflow step list. Used by the agent to auto-select the skill from user intent. A user-invoked skill (`disable-model-invocation: true`) writes one plain human-facing line naming the deliverable instead — the agent never routes on that line.
- `version` — `0.6.x` on `cmk:design`; `0.5.x` on `cmk:delivery-pipeline`; `0.4.x` on `cmk:cicd` (security-scanning facet) and `cmk:requirements` (Standard elicitation: close package, scope band, guards); `0.3.x` on `cmk:delivery-workflow`, `cmk:agent-instructions`, `cmk:adr`, `cmk:docs`, and `cmk:local-stack`; `0.2.0` on two docs-family skills (`learn`, `rule`) and six setup-family skills (`agent-instructions`, `agent-vendors`, `infra`, `mcp-config`, `project-layout`, `toolchain`); `0.1.x` on the rest — `repo-setup` and `sync`, `test-resources`, `rust`, and `testcontainers` (new setup-family skills), the other delivery-family skills (incl. new `cmk:delivery-simplify` at `0.1.0`), both knowledge-family skills, the two remaining docs-family skills (`codebase-docs`, `glossary`), and `cmk:interpret`.
- `disable-model-invocation: true` — optional, fourth field only. Present on `cmk:interpret`. The closer is still `---`.
- `version` — `1.0.0` on `cmk:write-cmk-skill`; `0.6.x` on `cmk:design`; `0.5.x` on `cmk:delivery-pipeline`; `0.4.x` on `cmk:cicd` (security-scanning facet) and `cmk:requirements` (Standard elicitation: close package, scope band, guards); `0.3.x` on `cmk:delivery-workflow`, `cmk:agent-instructions`, `cmk:adr`, `cmk:docs`, and `cmk:local-stack`; `0.2.0` on two docs-family skills (`learn`, `rule`) and six setup-family skills (`agent-instructions`, `agent-vendors`, `infra`, `mcp-config`, `project-layout`, `toolchain`); `0.1.x` on the rest — `repo-setup` and `sync`, `test-resources`, `rust`, and `testcontainers` (new setup-family skills), the other delivery-family skills (incl. new `cmk:delivery-simplify` at `0.1.0`), both knowledge-family skills, the two remaining docs-family skills (`codebase-docs`, `glossary`), and `cmk:interpret`.
- `disable-model-invocation: true` — optional, fourth field only. Present on `cmk:interpret` and `cmk:write-cmk-skill`. The closer is still `---`.

No skill file references outside its own package by relative path — the rule binds a package's own references, not content it emits into a target repo; a skill that needs a target-repo artifact names it repo-root-relative, and a skill that needs another skill cites it by `cmk:` name — see `cmk:agent-vendors`.

Expand All@@ -23,12 +23,14 @@ Delivery-family skills (`delivery-workflow`, `discover-efforts`, `delivery-intak

Session-discipline skills (`interpret`) are neither create/iterate nor a setup facet nor a delivery phase. `cmk:interpret` is user-invoked (`disable-model-invocation: true`), stays read-only toward the repo, and ships a `references/digest.md` loaded only at session end.

Meta skills (`write-cmk-skill`) author or review other skills in this kit. `cmk:write-cmk-skill` is user-invoked (`disable-model-invocation: true`), enforces a failing-baseline Iron Law before any skill text ships, and loads `references/pressure-testing.md` / `references/influence-principles.md` on demand. It is not a docs/setup/delivery/knowledge workflow.

Knowledge-family skills (`sui-sdk`, `sui-devstack`) are domain reference packs sitting beside the generic model rather than replacing it. `cmk:sui-sdk` is a single file with no `references/` directory: it corrects one specific stale-training-data pattern (reaching for Sui JSON-RPC instead of gRPC) and runs no workflow at all. `cmk:sui-devstack` has a `references/` folder and layers Sui-specific detail — Devstack's config shape, account/package staging, instance isolation — on top of `cmk:local-stack`'s generic `(worktree, config, instance)` primitive; it does not restate or replace that primitive. Neither knowledge skill has a `## Verify` section or an `eval.json`.

## Where
- Frontmatter, on every skill: open any `skills/<name>/SKILL.md` and read lines 1–5 (1–6 when `disable-model-invocation: true` is present).
- Skills with `references/`: `skills/adr/`, `skills/agent-instructions/`, `skills/agent-vendors/`, `skills/cicd/`, `skills/codebase-docs/`, `skills/design/`, `skills/docs/`, `skills/infra/`, `skills/learn/`, `skills/local-stack/`, `skills/project-layout/`, `skills/repo-setup/`, `skills/requirements/`, `skills/rule/`, `skills/rust/`, `skills/sync/`, `skills/test-resources/`, `skills/toolchain/`, `skills/delivery-workflow/`, `skills/discover-efforts/`, `skills/delivery-intake/`, `skills/delivery-simplify/`, `skills/delivery-review/`, `skills/delivery-ship/`, `skills/delivery-pipeline/`, `skills/sui-devstack/`, `skills/interpret/`. Skills without one: `skills/glossary/`, `skills/mcp-config/`, `skills/delivery-spec-plan/`, `skills/delivery-handoff/`, `skills/sui-sdk/`, `skills/testcontainers/`.
- Skills with `eval.json`: `skills/agent-instructions/eval.json`, `skills/codebase-docs/eval.json`, `skills/local-stack/eval.json`, `skills/repo-setup/eval.json`, `skills/sync/eval.json`, `skills/interpret/eval.json`. No delivery-family or knowledge-family skill ships one.
- Skills with `references/`: `skills/adr/`, `skills/agent-instructions/`, `skills/agent-vendors/`, `skills/cicd/`, `skills/codebase-docs/`, `skills/design/`, `skills/docs/`, `skills/infra/`, `skills/learn/`, `skills/local-stack/`, `skills/project-layout/`, `skills/repo-setup/`, `skills/requirements/`, `skills/rule/`, `skills/rust/`, `skills/sync/`, `skills/test-resources/`, `skills/toolchain/`, `skills/delivery-workflow/`, `skills/discover-efforts/`, `skills/delivery-intake/`, `skills/delivery-simplify/`, `skills/delivery-review/`, `skills/delivery-ship/`, `skills/delivery-pipeline/`, `skills/sui-devstack/`, `skills/interpret/`, `skills/write-cmk-skill/`. Skills without one: `skills/glossary/`, `skills/mcp-config/`, `skills/delivery-spec-plan/`, `skills/delivery-handoff/`, `skills/sui-sdk/`, `skills/testcontainers/`.
- Skills with `eval.json`: `skills/agent-instructions/eval.json`, `skills/codebase-docs/eval.json`, `skills/local-stack/eval.json`, `skills/repo-setup/eval.json`, `skills/sync/eval.json`, `skills/interpret/eval.json`, `skills/write-cmk-skill/eval.json`. No delivery-family or knowledge-family skill ships one.
- The shared docs-family workflow shape: grep for `^## Workflow: Create` and `^## Workflow: Iterate` across `skills/*/SKILL.md`.
- The shared setup-family Verify contract: grep for the exact heading `^## Verify$` across `skills/*/SKILL.md` — every hit is a setup-family skill. `skills/delivery-review/SKILL.md` has a similarly named but distinct `## Verify before acting` section (adversarial verification of review findings, not a report-only facet check) — match on the exact heading, not the prefix, to tell them apart.
- The delivery-family tracker binding: grep for `references/linear.md` across `skills/delivery-*/SKILL.md` and `skills/discover-efforts/SKILL.md`, then confirm each hit is the sole conditional pointer line, not body prose.
21 changes: 13 additions & 8 deletions docs/ai/skills/sync.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,23 +18,28 @@ lock's recorded SHA, theirs = current upstream, ours = the repo's evolved
copy; apply the upstream delta base→theirs to ours as a meaning-level merge,
surface genuine conflicts for human decision, never auto-resolve), and
**contribute** (review local amendments flagged as generic and prepare them
as upstream contributions). Separable local amendments sit under a marked
`## Project adaptations` section, giving the reconcile a stable seam.
Truly project-owned skills (deploy steps, product workflows) carry no lock
entry and sync never touches them. Ends with a report-only `## Verify`
section.
as upstream contributions — for each upstream-bound candidate, name
`/write-cmk-skill` for the user to run first; never invoke that user-invoked
skill; skip the gate for pure `## Project adaptations`). Separable local
amendments sit under a marked `## Project adaptations` section, giving the
reconcile a stable seam. Truly project-owned skills (deploy steps, product
workflows) carry no lock entry and sync never touches them. Ends with a
report-only `## Verify` section.

## Where
- Skill body: `skills/sync/SKILL.md` — sections `What the lock records`,
`Modes`, `Workflow (sync mode)`, `Scope rule`, `Verify`.
`Modes`, `Workflow (sync mode)`, `Workflow (contribute mode)`, `Scope rule`,
`Verify`.
- `references/skills-lock.md` — the normative `.agents/skills.lock` TOML
shape, field semantics, and the naming mapping between upstream and
vendored directories.
- `references/reconciliation.md` — the three-way frame, the semantic merge
doctrine (rewording is not a conflict; behavior/contract disagreement is),
the `## Project adaptations` seam, upstream-contribution candidates, and
failure honesty (an incomplete reconcile keeps its old lock entry).
the `## Project adaptations` seam, upstream-contribution candidates (incl.
the `/write-cmk-skill` gate), and failure honesty (an incomplete reconcile
keeps its old lock entry).
- Eval scenarios: `skills/sync/eval.json`.

## Links
- Vendored layout and adapters: `cmk:agent-vendors`.
- Authoring gate before upstream contribute: `cmk:write-cmk-skill` (user-invoked).
28 changes: 28 additions & 0 deletions docs/ai/skills/write-cmk-skill.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
# cmk:write-cmk-skill

## What

User-invoked skill for creating, editing, or reviewing a `cmk:*` skill before
it ships. Applies test-driven authoring (RED baseline → GREEN minimal text →
REFACTOR under pressure) so a skill only lands when a failing baseline proves
the text is needed.

## Approach

Neither create/iterate nor a setup facet nor a delivery phase. An Iron Law
forbids shipping skill text without a failing baseline first. Frontmatter
follows kit house form (`name` / `description` / `version`, optional
`disable-model-invocation`); model-invocable descriptions are trigger +
outcome noun, user-invoked descriptions are one plain deliverable line.
Companion material (pressure-testing protocol, influence wording) lives in
`references/` and loads on demand. Structural checks run through
`scripts/skill-lint.sh`.

## Where

- Skill body: `skills/write-cmk-skill/SKILL.md`
- Pressure-testing protocol: `skills/write-cmk-skill/references/pressure-testing.md`
- Influence wording: `skills/write-cmk-skill/references/influence-principles.md`
- Eval fixtures: `skills/write-cmk-skill/eval.json`
- Mechanical lint: `scripts/skill-lint.sh`
- House style for PRs: `CONTRIBUTING.md`
1 change: 1 addition & 0 deletions docs/guides/on-ramps.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -20,6 +20,7 @@ point here; they do not restate this table.
| Open PR / close ticket with evidence | `cmk:delivery-ship` |
| Handoff to another agent | `cmk:delivery-handoff` |
| Vendor skills / sync upstream | `cmk:agent-vendors` / `cmk:sync` |
| Create / edit / review a `cmk:*` skill | `cmk:write-cmk-skill` (user-invoked) |
| CI / local stack / MCP / toolchain alone | matching setup facet (`cmk:cicd`, `cmk:local-stack`, …) |

Rules of thumb:
Expand Down
17 changes: 15 additions & 2 deletions skills/sync/SKILL.md
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
---
name: cmk:sync
description: Use when the user asks to "sync skills with upstream", "pull upstream skill updates", "reconcile vendored skills", "update the skills lockfile", or whenever a repo's vendored `.agents/skills/` copies have drifted from the upstream kit.
version: 0.1.1
version: 0.1.2
---

# Sync
Expand All@@ -25,7 +25,7 @@ Read `references/skills-lock.md`.
the local adaptation.
- **sync** — the three-way reconcile (below).
- **contribute** — review local amendments flagged as generic; prepare them
as upstream contributions.
as upstream contributions (below).

## Workflow (sync mode)

Expand All@@ -45,6 +45,19 @@ Read `references/skills-lock.md`.

Running the reconcile? Read `references/reconciliation.md`.

## Workflow (contribute mode)

1. Collect candidates flagged as generic (from a prior sync, or re-scan per
`references/reconciliation.md`).
2. Drop anything that belongs under `## Project adaptations` or carries
project vocabulary — those stay local; sync never promotes them.
3. For every remaining candidate that will edit an upstream `cmk:*` skill:
**name `/write-cmk-skill` for the user to run** before preparing the PR.
Do not invoke it — `cmk:write-cmk-skill` is user-invoked. Skip this step
only when the user already completed that pass for this amendment set.
4. After that pass (or explicit skip), prepare the upstream contribution PR
from the reviewed generic amendments.

## Scope rule

Truly project-owned skills (deploy steps, product workflows) are new skills,
Expand Down
5 changes: 5 additions & 0 deletions skills/sync/references/reconciliation.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -45,6 +45,11 @@ generic skill is flagged with its file, section, and a one-line rationale.
Flagging is sync's job; actually preparing and contributing it back upstream
is *contribute* mode's job, never a side effect of running sync.

Before contribute prepares that PR, name `/write-cmk-skill` for the user to
run on the candidate set — the kit's authoring Iron Law and ship checklist
live there. Do not invoke `cmk:write-cmk-skill` from sync (user-invoked).
Pure `## Project adaptations` stay local and skip that gate.

## Failure honesty

A skill whose reconcile did not complete keeps its old lock entry. The
Expand Down
Loading
Loading
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 8 additions & 4 deletions CONTRIBUTING.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -2,9 +2,11 @@

## Proposing a skill change

Open a PR against `main`. Describe what the skill gets wrong, ambiguous, or
misses today, and how your change fixes it — reviewers and skill-lint judge
the diff, not the intent.
For a new skill or a behavior-shaping edit, run `/write-cmk-skill` first: it
enforces a failing-baseline Iron Law and the ship checklist before text
lands under `skills/`. Then open a PR against `main`. Describe what the
skill gets wrong, ambiguous, or misses today, and how your change fixes
it — reviewers and skill-lint judge the diff, not the intent.

## The kit's bar

Expand DownExpand Up@@ -46,7 +48,9 @@ out of your own diff. CI runs the same script on every PR touching
If your repo vendored the skills via `cmk:agent-vendors` and evolved one
locally, don't just keep the fix local. Run `cmk:sync` in **contribute**
mode: it reviews local amendments flagged as generic-looking upstream
candidates and prepares them as a PR back here.
candidates, names `/write-cmk-skill` for you to run on those candidates,
then prepares them as a PR back here. Pure `## Project adaptations` stay
local and skip that gate.

## Commits

Expand Down
8 changes: 6 additions & 2 deletions docs/ai/skills/README.md
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
# Skills

The `cmk:*` skill packages under [`skills/`](../../../skills/): eight docs-family skills, thirteen setup-family skills, nine delivery-family skills, two knowledge-family skills, and one session-discipline skill (`cmk:interpret`). Each is a directory with a `SKILL.md` (frontmatter `name`/`description`/`version` plus the body the agent reads), and most ship a `references/` folder of guidance, templates, and conventions the workflow loads on demand.
The `cmk:*` skill packages under [`skills/`](../../../skills/): eight docs-family skills, thirteen setup-family skills, nine delivery-family skills, two knowledge-family skills, one session-discipline skill (`cmk:interpret`), and one meta skill (`cmk:write-cmk-skill`). Each is a directory with a `SKILL.md` (frontmatter `name`/`description`/`version` plus the body the agent reads), and most ship a `references/` folder of guidance, templates, and conventions the workflow loads on demand.

Docs-family skills follow the same shape: a "Workflow: Create" / "Workflow: Iterate" pair, with placement rules, shaping guidance, and templates kept out of `SKILL.md` itself and cited via "Read `references/<file>.md`" lines. Setup-family skills instead follow a facet shape (modes and/or a single workflow, plus a report-only `## Verify` section). Delivery-family skills follow a tracker-neutral phase/gate shape and never carry a `## Verify` section — that contract is setup-family only. Knowledge-family skills are reference packs with no create/iterate or phase shape at all. See [conventions.md](./conventions.md) for the exceptions and the full breakdown.

Expand DownExpand Up@@ -52,6 +52,10 @@ Docs-family skills follow the same shape: a "Workflow: Create" / "Workflow: Iter

- [interpret.md](./interpret.md) — `cmk:interpret`, companion session beside another window: stance plus a carry-back reply. User-invoked.

## Meta

- [write-cmk-skill.md](./write-cmk-skill.md) — `cmk:write-cmk-skill`, author or review a `cmk:*` skill under a failing-baseline Iron Law. User-invoked.

## Cross-cutting

- [conventions.md](./conventions.md) — shared shape across all skills (frontmatter, references folder, docs-family create/iterate pattern, setup-family facet shape, delivery-family phase/gate shape, knowledge-family reference packs).
- [conventions.md](./conventions.md) — shared shape across all skills (frontmatter, references folder, docs-family create/iterate pattern, setup-family facet shape, delivery-family phase/gate shape, knowledge-family reference packs, session/meta user-invoked skills).
10 changes: 6 additions & 4 deletions docs/ai/skills/conventions.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -8,8 +8,8 @@ Frontmatter declares three fields the host (Claude Code or OpenCode) reads to di

- `name` — `cmk:<short-name>`, used as the slash command and skill ID.
- `description` — opens in the second person (`Use when…` / `Use whenever…`) with trigger phrases plus an **outcome noun** (the deliverable), not a workflow step list. Used by the agent to auto-select the skill from user intent. A user-invoked skill (`disable-model-invocation: true`) writes one plain human-facing line naming the deliverable instead — the agent never routes on that line.
- `version` — `0.6.x` on `cmk:design`; `0.5.x` on `cmk:delivery-pipeline`; `0.4.x` on `cmk:cicd` (security-scanning facet) and `cmk:requirements` (Standard elicitation: close package, scope band, guards); `0.3.x` on `cmk:delivery-workflow`, `cmk:agent-instructions`, `cmk:adr`, `cmk:docs`, and `cmk:local-stack`; `0.2.0` on two docs-family skills (`learn`, `rule`) and six setup-family skills (`agent-instructions`, `agent-vendors`, `infra`, `mcp-config`, `project-layout`, `toolchain`); `0.1.x` on the rest — `repo-setup` and `sync`, `test-resources`, `rust`, and `testcontainers` (new setup-family skills), the other delivery-family skills (incl. new `cmk:delivery-simplify` at `0.1.0`), both knowledge-family skills, the two remaining docs-family skills (`codebase-docs`, `glossary`), and `cmk:interpret`.
- `disable-model-invocation: true` — optional, fourth field only. Present on `cmk:interpret`. The closer is still `---`.
- `version` — `1.0.0` on `cmk:write-cmk-skill`; `0.6.x` on `cmk:design`; `0.5.x` on `cmk:delivery-pipeline`; `0.4.x` on `cmk:cicd` (security-scanning facet) and `cmk:requirements` (Standard elicitation: close package, scope band, guards); `0.3.x` on `cmk:delivery-workflow`, `cmk:agent-instructions`, `cmk:adr`, `cmk:docs`, and `cmk:local-stack`; `0.2.0` on two docs-family skills (`learn`, `rule`) and six setup-family skills (`agent-instructions`, `agent-vendors`, `infra`, `mcp-config`, `project-layout`, `toolchain`); `0.1.x` on the rest — `repo-setup` and `sync`, `test-resources`, `rust`, and `testcontainers` (new setup-family skills), the other delivery-family skills (incl. new `cmk:delivery-simplify` at `0.1.0`), both knowledge-family skills, the two remaining docs-family skills (`codebase-docs`, `glossary`), and `cmk:interpret`.
- `disable-model-invocation: true` — optional, fourth field only. Present on `cmk:interpret` and `cmk:write-cmk-skill`. The closer is still `---`.

No skill file references outside its own package by relative path — the rule binds a package's own references, not content it emits into a target repo; a skill that needs a target-repo artifact names it repo-root-relative, and a skill that needs another skill cites it by `cmk:` name — see `cmk:agent-vendors`.

Expand All@@ -23,12 +23,14 @@ Delivery-family skills (`delivery-workflow`, `discover-efforts`, `delivery-intak

Session-discipline skills (`interpret`) are neither create/iterate nor a setup facet nor a delivery phase. `cmk:interpret` is user-invoked (`disable-model-invocation: true`), stays read-only toward the repo, and ships a `references/digest.md` loaded only at session end.

Meta skills (`write-cmk-skill`) author or review other skills in this kit. `cmk:write-cmk-skill` is user-invoked (`disable-model-invocation: true`), enforces a failing-baseline Iron Law before any skill text ships, and loads `references/pressure-testing.md` / `references/influence-principles.md` on demand. It is not a docs/setup/delivery/knowledge workflow.

Knowledge-family skills (`sui-sdk`, `sui-devstack`) are domain reference packs sitting beside the generic model rather than replacing it. `cmk:sui-sdk` is a single file with no `references/` directory: it corrects one specific stale-training-data pattern (reaching for Sui JSON-RPC instead of gRPC) and runs no workflow at all. `cmk:sui-devstack` has a `references/` folder and layers Sui-specific detail — Devstack's config shape, account/package staging, instance isolation — on top of `cmk:local-stack`'s generic `(worktree, config, instance)` primitive; it does not restate or replace that primitive. Neither knowledge skill has a `## Verify` section or an `eval.json`.

## Where
- Frontmatter, on every skill: open any `skills/<name>/SKILL.md` and read lines 1–5 (1–6 when `disable-model-invocation: true` is present).
- Skills with `references/`: `skills/adr/`, `skills/agent-instructions/`, `skills/agent-vendors/`, `skills/cicd/`, `skills/codebase-docs/`, `skills/design/`, `skills/docs/`, `skills/infra/`, `skills/learn/`, `skills/local-stack/`, `skills/project-layout/`, `skills/repo-setup/`, `skills/requirements/`, `skills/rule/`, `skills/rust/`, `skills/sync/`, `skills/test-resources/`, `skills/toolchain/`, `skills/delivery-workflow/`, `skills/discover-efforts/`, `skills/delivery-intake/`, `skills/delivery-simplify/`, `skills/delivery-review/`, `skills/delivery-ship/`, `skills/delivery-pipeline/`, `skills/sui-devstack/`, `skills/interpret/`. Skills without one: `skills/glossary/`, `skills/mcp-config/`, `skills/delivery-spec-plan/`, `skills/delivery-handoff/`, `skills/sui-sdk/`, `skills/testcontainers/`.
- Skills with `eval.json`: `skills/agent-instructions/eval.json`, `skills/codebase-docs/eval.json`, `skills/local-stack/eval.json`, `skills/repo-setup/eval.json`, `skills/sync/eval.json`, `skills/interpret/eval.json`. No delivery-family or knowledge-family skill ships one.
- Skills with `references/`: `skills/adr/`, `skills/agent-instructions/`, `skills/agent-vendors/`, `skills/cicd/`, `skills/codebase-docs/`, `skills/design/`, `skills/docs/`, `skills/infra/`, `skills/learn/`, `skills/local-stack/`, `skills/project-layout/`, `skills/repo-setup/`, `skills/requirements/`, `skills/rule/`, `skills/rust/`, `skills/sync/`, `skills/test-resources/`, `skills/toolchain/`, `skills/delivery-workflow/`, `skills/discover-efforts/`, `skills/delivery-intake/`, `skills/delivery-simplify/`, `skills/delivery-review/`, `skills/delivery-ship/`, `skills/delivery-pipeline/`, `skills/sui-devstack/`, `skills/interpret/`, `skills/write-cmk-skill/`. Skills without one: `skills/glossary/`, `skills/mcp-config/`, `skills/delivery-spec-plan/`, `skills/delivery-handoff/`, `skills/sui-sdk/`, `skills/testcontainers/`.
- Skills with `eval.json`: `skills/agent-instructions/eval.json`, `skills/codebase-docs/eval.json`, `skills/local-stack/eval.json`, `skills/repo-setup/eval.json`, `skills/sync/eval.json`, `skills/interpret/eval.json`, `skills/write-cmk-skill/eval.json`. No delivery-family or knowledge-family skill ships one.
- The shared docs-family workflow shape: grep for `^## Workflow: Create` and `^## Workflow: Iterate` across `skills/*/SKILL.md`.
- The shared setup-family Verify contract: grep for the exact heading `^## Verify$` across `skills/*/SKILL.md` — every hit is a setup-family skill. `skills/delivery-review/SKILL.md` has a similarly named but distinct `## Verify before acting` section (adversarial verification of review findings, not a report-only facet check) — match on the exact heading, not the prefix, to tell them apart.
- The delivery-family tracker binding: grep for `references/linear.md` across `skills/delivery-*/SKILL.md` and `skills/discover-efforts/SKILL.md`, then confirm each hit is the sole conditional pointer line, not body prose.
21 changes: 13 additions & 8 deletions docs/ai/skills/sync.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -18,23 +18,28 @@ lock's recorded SHA, theirs = current upstream, ours = the repo's evolved
copy; apply the upstream delta base→theirs to ours as a meaning-level merge,
surface genuine conflicts for human decision, never auto-resolve), and
**contribute** (review local amendments flagged as generic and prepare them
as upstream contributions). Separable local amendments sit under a marked
`## Project adaptations` section, giving the reconcile a stable seam.
Truly project-owned skills (deploy steps, product workflows) carry no lock
entry and sync never touches them. Ends with a report-only `## Verify`
section.
as upstream contributions — for each upstream-bound candidate, name
`/write-cmk-skill` for the user to run first; never invoke that user-invoked
skill; skip the gate for pure `## Project adaptations`). Separable local
amendments sit under a marked `## Project adaptations` section, giving the
reconcile a stable seam. Truly project-owned skills (deploy steps, product
workflows) carry no lock entry and sync never touches them. Ends with a
report-only `## Verify` section.

## Where
- Skill body: `skills/sync/SKILL.md` — sections `What the lock records`,
`Modes`, `Workflow (sync mode)`, `Scope rule`, `Verify`.
`Modes`, `Workflow (sync mode)`, `Workflow (contribute mode)`, `Scope rule`,
`Verify`.
- `references/skills-lock.md` — the normative `.agents/skills.lock` TOML
shape, field semantics, and the naming mapping between upstream and
vendored directories.
- `references/reconciliation.md` — the three-way frame, the semantic merge
doctrine (rewording is not a conflict; behavior/contract disagreement is),
the `## Project adaptations` seam, upstream-contribution candidates, and
failure honesty (an incomplete reconcile keeps its old lock entry).
the `## Project adaptations` seam, upstream-contribution candidates (incl.
the `/write-cmk-skill` gate), and failure honesty (an incomplete reconcile
keeps its old lock entry).
- Eval scenarios: `skills/sync/eval.json`.

## Links
- Vendored layout and adapters: `cmk:agent-vendors`.
- Authoring gate before upstream contribute: `cmk:write-cmk-skill` (user-invoked).
28 changes: 28 additions & 0 deletions docs/ai/skills/write-cmk-skill.md
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
# cmk:write-cmk-skill

## What

User-invoked skill for creating, editing, or reviewing a `cmk:*` skill before
it ships. Applies test-driven authoring (RED baseline → GREEN minimal text →
REFACTOR under pressure) so a skill only lands when a failing baseline proves
the text is needed.

## Approach

Neither create/iterate nor a setup facet nor a delivery phase. An Iron Law
forbids shipping skill text without a failing baseline first. Frontmatter
follows kit house form (`name` / `description` / `version`, optional
`disable-model-invocation`); model-invocable descriptions are trigger +
outcome noun, user-invoked descriptions are one plain deliverable line.
Companion material (pressure-testing protocol, influence wording) lives in
`references/` and loads on demand. Structural checks run through
`scripts/skill-lint.sh`.

## Where

- Skill body: `skills/write-cmk-skill/SKILL.md`
- Pressure-testing protocol: `skills/write-cmk-skill/references/pressure-testing.md`
- Influence wording: `skills/write-cmk-skill/references/influence-principles.md`
- Eval fixtures: `skills/write-cmk-skill/eval.json`
- Mechanical lint: `scripts/skill-lint.sh`
- House style for PRs: `CONTRIBUTING.md`
1 change: 1 addition & 0 deletions docs/guides/on-ramps.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -20,6 +20,7 @@ point here; they do not restate this table.
| Open PR / close ticket with evidence | `cmk:delivery-ship` |
| Handoff to another agent | `cmk:delivery-handoff` |
| Vendor skills / sync upstream | `cmk:agent-vendors` / `cmk:sync` |
| Create / edit / review a `cmk:*` skill | `cmk:write-cmk-skill` (user-invoked) |
| CI / local stack / MCP / toolchain alone | matching setup facet (`cmk:cicd`, `cmk:local-stack`, …) |

Rules of thumb:
Expand Down
17 changes: 15 additions & 2 deletions skills/sync/SKILL.md
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
---
name: cmk:sync
description: Use when the user asks to "sync skills with upstream", "pull upstream skill updates", "reconcile vendored skills", "update the skills lockfile", or whenever a repo's vendored `.agents/skills/` copies have drifted from the upstream kit.
version: 0.1.1
version: 0.1.2
---

# Sync
Expand All@@ -25,7 +25,7 @@ Read `references/skills-lock.md`.
the local adaptation.
- **sync** — the three-way reconcile (below).
- **contribute** — review local amendments flagged as generic; prepare them
as upstream contributions.
as upstream contributions (below).

## Workflow (sync mode)

Expand All@@ -45,6 +45,19 @@ Read `references/skills-lock.md`.

Running the reconcile? Read `references/reconciliation.md`.

## Workflow (contribute mode)

1. Collect candidates flagged as generic (from a prior sync, or re-scan per
`references/reconciliation.md`).
2. Drop anything that belongs under `## Project adaptations` or carries
project vocabulary — those stay local; sync never promotes them.
3. For every remaining candidate that will edit an upstream `cmk:*` skill:
**name `/write-cmk-skill` for the user to run** before preparing the PR.
Do not invoke it — `cmk:write-cmk-skill` is user-invoked. Skip this step
only when the user already completed that pass for this amendment set.
4. After that pass (or explicit skip), prepare the upstream contribution PR
from the reviewed generic amendments.

## Scope rule

Truly project-owned skills (deploy steps, product workflows) are new skills,
Expand Down
5 changes: 5 additions & 0 deletions skills/sync/references/reconciliation.md
Original file line numberDiff line numberDiff line change
Expand Up@@ -45,6 +45,11 @@ generic skill is flagged with its file, section, and a one-line rationale.
Flagging is sync's job; actually preparing and contributing it back upstream
is *contribute* mode's job, never a side effect of running sync.

Before contribute prepares that PR, name `/write-cmk-skill` for the user to
run on the candidate set — the kit's authoring Iron Law and ship checklist
live there. Do not invoke `cmk:write-cmk-skill` from sync (user-invoked).
Pure `## Project adaptations` stay local and skip that gate.

## Failure honesty

A skill whose reconcile did not complete keeps its old lock entry. The
Expand Down
Loading
Loading