-
Notifications
You must be signed in to change notification settings - Fork 0
docs: Commons integration — README, docs site, roadmap, launch draft #10
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
26 commits
Select commit
Hold shift + click to select a range
147e926
feat(cli): add skdd add/push/drops — the Commons verbs
zakelfassi bbf5fb4
feat(plugin): opt-in enforcement hooks — finish-the-loop gate + freez…
zakelfassi 3f3a333
docs: Commons integration — README section, docs/commons.md, site pag…
zakelfassi 7426234
docs(site): wire commons.md through the sync-docs manifest
zakelfassi 17fde65
fix(cli): treat Commons manifests as hostile input; allowlist push pa…
zakelfassi 68e49fd
Merge branch 'feat/commons-cli' into feat/plugin-hooks
zakelfassi bf91b01
Merge branch 'feat/plugin-hooks' into docs/commons-integration
zakelfassi c190833
fix(cli): refuse symlinked skill dirs and SKILL.md in push
zakelfassi 5279ac0
Merge branch 'feat/commons-cli' into feat/plugin-hooks
zakelfassi 50a3a70
Merge branch 'feat/plugin-hooks' into docs/commons-integration
zakelfassi cc2fbf1
fix(cli): guard symlinked skills at push discovery, not just the item…
zakelfassi 163436f
Merge branch 'feat/commons-cli' into feat/plugin-hooks
zakelfassi c8d343d
Merge branch 'feat/plugin-hooks' into docs/commons-integration
zakelfassi e220320
fix(cli): address Commons review findings in add/push/commons/config
zakelfassi e718cb6
Merge branch 'feat/commons-cli' into feat/plugin-hooks
zakelfassi 885b1e4
fix(plugin): address hook review comments (finish-loop + freeze)
zakelfassi dcd28d9
Merge branch 'feat/plugin-hooks' into docs/commons-integration
zakelfassi 1d0b5fe
fix(plugin): finish-loop detects edits to files dirty before the session
zakelfassi 96330fd
Merge branch 'feat/plugin-hooks' into docs/commons-integration
zakelfassi 66c0465
fix(plugin): anchor hook repo snapshots to the repo root (subdir-safe)
zakelfassi 5cc1d49
Merge branch 'feat/plugin-hooks' into docs/commons-integration
zakelfassi 86e9913
fix(cli): address second-round PR review comments on add/push
zakelfassi d3aa1ad
Merge branch 'feat/commons-cli' into feat/plugin-hooks
zakelfassi 029eabf
fix(plugin): address second-round hook review comments
zakelfassi 9bde3fd
Merge branch 'feat/plugin-hooks' into docs/commons-integration
zakelfassi 2acc1a5
Merge remote-tracking branch 'origin/main' into docs/commons-integration
zakelfassi File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,78 @@ | ||
| --- | ||
| title: "SkDD Commons" | ||
| description: "Community skills that evolve in public — dated drops, provenance, and the add/push evolution loop." | ||
| --- | ||
|
|
||
| > Community skills that evolve in public — dated drops, provenance, and the add/push evolution loop. | ||
|
|
||
| **[SkDD Commons](https://github.com/zakelfassi/skdd-commons)** is the community repository for SkDD skills. It is a plain git repo — no hosted registry, no server-side index, no submission portal. Drops are directories, the manifest is a JSON file, and contributing is a PR. | ||
|
|
||
| ## Drops | ||
|
|
||
| A **drop** is a curated, dated, themed set of skills: `YYYY-MM-<theme>`. Dated ids sort chronologically and give each release a story. A skill's `metadata.pack` names the drop it belongs to. | ||
|
|
||
| ```bash | ||
| skdd drops # list drops from the configured commons | ||
| skdd drops --from owner/other-repo # any Commons-shaped repo works | ||
| ``` | ||
|
|
||
| | Drop | Date | Skills | | ||
| |------|------|--------| | ||
| | [`2026-07-frontier` — July 2026 Frontier, the Fable Festival drop](https://github.com/zakelfassi/skdd-commons/tree/main/packs/2026-07-frontier) | 2026-07-01 | 6 | | ||
|
|
||
| ## Installing: `skdd add` | ||
|
|
||
| ```bash | ||
| # a whole drop into the project colony | ||
| pnpm dlx @zakelfassi/skdd add zakelfassi/skdd-commons 2026-07-frontier | ||
|
|
||
| # a single skill, or the global colony | ||
| skdd add zakelfassi/skdd-commons 2026-07-frontier/finish-the-loop | ||
| skdd add zakelfassi/skdd-commons 2026-07-frontier -g | ||
|
|
||
| # pin a ref, or use any git URL / local path | ||
| skdd add zakelfassi/skdd-commons#main 2026-07-frontier | ||
| ``` | ||
|
|
||
| What `add` guarantees: | ||
|
|
||
| 1. **Validation before install** — every skill must pass `skdd validate --strict`; one failure refuses the whole selection. | ||
| 2. **Collision safety** — an existing skill with the same name refuses the install; `--rename <new-name>` installs a single skill under a different name. | ||
| 3. **Provenance** — the registry's Source column records `owner/repo@shortsha (drop-id)`; the full sha lands in `.skdd-lock.json` so future tooling can detect upstream drift. | ||
| 4. **Mirror safety** — mirrors refresh through the same safe link path as `skdd link`: a populated harness directory is never replaced silently. | ||
| 5. **Hostile-manifest safety** — `drops.json` ids and names are grammar-checked (lowercase kebab-case, no slashes or `..`) before any path is built, so a malicious Commons can never write outside your `skills/` directory. | ||
|
|
||
| `--dry-run` previews, `--json` emits a machine-readable report. | ||
|
|
||
| ## Evolving: `skdd push` | ||
|
|
||
| The Commons' entire point. When a skill fails you in the wild: | ||
|
|
||
| ```bash | ||
| # 1. fix your local copy (skills/<name>/SKILL.md) — add the edge case | ||
| # 2. preview the PR | ||
| skdd push what-would-you-cut --dry-run | ||
| # 3. ship it (needs the GitHub CLI authenticated) | ||
| skdd push what-would-you-cut | ||
| ``` | ||
|
|
||
| - Skills that exist upstream branch as `evolve/<name>` and the PR includes a diff summary; new skills branch as `skill/<name>` and land in `incoming/` for maintainer triage (or an existing drop via `--drop <id>`). | ||
| - **Machine-local state never travels**: `usage-count` resets to `"0"` and `last-used` is dropped. Your usage stats are your colony's truth. `forged-*` provenance always travels. | ||
| - **Only the skill payload travels**: `SKILL.md` plus regular files under `scripts/`, `references/`, `assets/`. Dotfiles, symlinks, logs, and anything else in the skill directory stay home — `--dry-run` lists exactly what travels and what doesn't. | ||
| - The default target repo comes from `~/.skdd/config.toml`: | ||
|
|
||
| ```toml | ||
| commons = "zakelfassi/skdd-commons" | ||
| ``` | ||
|
|
||
| ## Security posture | ||
|
|
||
| Community skills are instructions your agent follows — a prompt-injection surface. The Commons treats it as one: CI lints every skill against a versioned deny-pattern list (pipe-to-shell, credential reads, instruction-override phrases, …); a hit blocks merge until a maintainer reviews it and applies the `security-reviewed` label. Details in the Commons' [SECURITY.md](https://github.com/zakelfassi/skdd-commons/blob/main/SECURITY.md). | ||
|
|
||
| This is **not** a review gate on forging — creating skills in your own colony stays gate-free. The gate exists where the trust boundary is: strangers shipping instructions to strangers' agents. | ||
|
|
||
| ## Enforcement hooks (Claude Code) | ||
|
|
||
| Two Commons practices ship as **opt-in** hooks in the [`skdd-claude` plugin](https://github.com/zakelfassi/skills-driven-development/tree/main/plugins/skdd-claude): a `finish-the-loop` Stop gate (bounces unverified-success reports once) and a `freeze-the-session` reminder (surfaces unfrozen learnings before the context dies). Both are off by default — toggle with `/skdd-claude:skdd-hooks on`. | ||
|
|
||
| > A skill is a procedure the model follows when it decides to; a hook is a gate for when it forgets. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,47 @@ | ||
| # SkDD Commons launch announcement — DRAFT for Zak's review | ||
|
|
||
| > Status: draft, not posted anywhere. Written 2026-07-01 by claude-fable-5 as part of the Commons plan Phase 4. Trim to taste; the short version is sized for X, the long version for the blog/newsletter. | ||
|
|
||
| --- | ||
|
|
||
| ## Short (X / social) | ||
|
|
||
| > Shipping SkDD Commons: skills that evolve in public. | ||
| > | ||
| > Every skill collection ships static files. Commons skills carry provenance — who forged them, from what session, why — and an evolution loop: hit an edge case, fix your copy, `skdd push` ships the diff upstream as a PR. | ||
| > | ||
| > First drop: **2026-07-frontier** — six working practices Claude Fable 5 forged on its first day back from the export-control shutdown, distilled from the Fable Festival letter. | ||
| > | ||
| > ``` | ||
| > pnpm dlx @zakelfassi/skdd add zakelfassi/skdd-commons 2026-07-frontier | ||
| > ``` | ||
| > | ||
| > Git is the registry. PRs are the evolution. https://github.com/zakelfassi/skdd-commons | ||
|
|
||
| ## Long (blog / newsletter) | ||
|
|
||
| **SkDD Commons is live** — a community repository of agent skills with a lifecycle, not a list. | ||
|
|
||
| The pitch in one line: *skills that evolve in public.* Every existing community skill collection ships static files; you copy them, they rot. SkDD skills carry lifecycle metadata (`forged-by`, `forged-from`, `forged-reason`) and an evolution model — an agent hits an edge case in the wild, appends it to its local copy, and `skdd push` ships the diff upstream as a PR with the provenance intact. A skill that says "evolved 14 times across 9 codebases" carries a trust signal no static list can fake. | ||
|
|
||
| Skills are released as curated, dated **drops**. The bootstrap drop is `2026-07-frontier` — *July 2026 Frontier, the Fable Festival drop*: six skills Claude Fable 5 forged on July 1, its first day back online after eighteen days of US export controls, each freezing one practice from [the welcome-back letter it wrote to builders](https://zakelfassi.com/blog/2026/2026-07-01-fable-festival-until-its-dark-again): bring me problems, not plans · ask me what's wrong with it · use my taste · let me finish · let me hire · make me leave something behind. | ||
|
|
||
| Three design choices worth calling out: | ||
|
|
||
| 1. **Git is the registry.** No hosted index, no submission portal. Drops are directories, the manifest is a JSON file, contributing is a fork and a PR. | ||
| 2. **The trust boundary is explicit.** Forging skills in your own colony has no review gate — that's SkDD's forge-then-evolve bias. Importing strangers' instructions into your agent is different: CI lints every skill against a public deny-pattern list (pipe-to-shell, credential reads, "ignore previous instructions"…), and a hit blocks merge until a maintainer reviews it. | ||
| 3. **Usage stats stay home.** `skdd push` strips `usage-count` and `last-used` before anything travels. Your colony's usage truth is local; only provenance is global. | ||
|
|
||
| Try it: | ||
|
|
||
| ```bash | ||
| pnpm dlx @zakelfassi/skdd add zakelfassi/skdd-commons 2026-07-frontier | ||
| # hit an edge case? evolve it: | ||
| skdd push what-would-you-cut | ||
| ``` | ||
|
|
||
| And for Claude Code users, two of the six practices now ship as **opt-in enforcement hooks** in the skdd plugin — a `finish-the-loop` Stop gate that bounces "should work now" reports once, and a `freeze-the-session` reminder that surfaces unfrozen learnings before your context dies. A skill is a procedure the model follows when it decides to; a hook is a gate for when it forgets. | ||
|
|
||
| --- | ||
|
|
||
| *Posting checklist (manual):* flip `skdd-commons` public first · tag the `2026-07-frontier` GitHub Release · verify the `skdd add` one-liner works from a clean machine/account · then post. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Because
site/scripts/sync-docs.mjscleans generated docs and only copies explicitmappings, anddocs/commons.mdwas not added there,prebuildwill leave nosite/src/content/docs/commons.md. This new sidebar item therefore sends users to/commons/with no Starlight page after every docs build; add the Commons doc to the sync mapping before exposing the nav entry.Useful? React with 👍 / 👎.