@vegastack/skills 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (66) hide show
  1. package/README.md +27 -7
  2. package/dist/index.js +191 -95
  3. package/package.json +16 -5
  4. package/skill/{vegastack-arch-guardian → arch-guardian}/SKILL.md +1 -1
  5. package/skill/arch-guardian/agents/openai.yaml +4 -0
  6. package/skill/{vegastack-arch-guardian → arch-guardian}/assets/architecture-profile.schema.json +1 -1
  7. package/skill/{vegastack-arch-guardian → arch-guardian}/refresh/REFRESH.md +1 -1
  8. package/skill/{vegastack-arch-guardian → arch-guardian}/refresh/sources.json +10 -10
  9. package/skill/{vegastack-arch-guardian → arch-guardian}/scripts/refresh-evidence.mjs +4 -1
  10. package/skill/skill-maintainer/SKILL.md +79 -0
  11. package/skill/skill-maintainer/agents/openai.yaml +4 -0
  12. package/skill/skill-maintainer/references/release-ops.md +63 -0
  13. package/skill/skill-maintainer/references/standards.md +92 -0
  14. package/skill/skill-maintainer/refresh/REFRESH.md +40 -0
  15. package/skill/skill-maintainer/refresh/sources.json +103 -0
  16. package/skill/skillify/SKILL.md +154 -0
  17. package/skill/skillify/agents/openai.yaml +4 -0
  18. package/skill/skillify/assets/templates/README.md.template +26 -0
  19. package/skill/skillify/assets/templates/REFRESH.md.template +21 -0
  20. package/skill/skillify/assets/templates/SKILL.md.template +26 -0
  21. package/skill/skillify/assets/templates/openai.yaml.template +4 -0
  22. package/skill/skillify/assets/templates/skill.test.ts.template +40 -0
  23. package/skill/skillify/assets/templates/sources.json.template +6 -0
  24. package/skill/skillify/references/authoring.md +72 -0
  25. package/skill/skillify/references/eval-playbook.md +62 -0
  26. package/skill/skillify/refresh/REFRESH.md +24 -0
  27. package/skill/skillify/refresh/sources.json +6 -0
  28. package/skill/skillify/scripts/scaffold-skill.mjs +138 -0
  29. package/skill-integrity.json +75 -45
  30. package/skill/vegastack-arch-guardian/agents/openai.yaml +0 -4
  31. /package/skill/{vegastack-arch-guardian → arch-guardian}/assets/adr-template.md +0 -0
  32. /package/skill/{vegastack-arch-guardian → arch-guardian}/assets/answers-example.json +0 -0
  33. /package/skill/{vegastack-arch-guardian → arch-guardian}/assets/architecture-profile.json +0 -0
  34. /package/skill/{vegastack-arch-guardian → arch-guardian}/assets/deployment-review-template.md +0 -0
  35. /package/skill/{vegastack-arch-guardian → arch-guardian}/assets/service-design-template.md +0 -0
  36. /package/skill/{vegastack-arch-guardian → arch-guardian}/assets/threat-model-template.md +0 -0
  37. /package/skill/{vegastack-arch-guardian → arch-guardian}/references/architecture/agent-product.md +0 -0
  38. /package/skill/{vegastack-arch-guardian → arch-guardian}/references/architecture/ai-cost.md +0 -0
  39. /package/skill/{vegastack-arch-guardian → arch-guardian}/references/architecture/ai-data-boundaries.md +0 -0
  40. /package/skill/{vegastack-arch-guardian → arch-guardian}/references/architecture/ai-evals.md +0 -0
  41. /package/skill/{vegastack-arch-guardian → arch-guardian}/references/architecture/connectors-sandbox.md +0 -0
  42. /package/skill/{vegastack-arch-guardian → arch-guardian}/references/architecture/data-memory.md +0 -0
  43. /package/skill/{vegastack-arch-guardian → arch-guardian}/references/architecture/delivery-operations.md +0 -0
  44. /package/skill/{vegastack-arch-guardian → arch-guardian}/references/architecture/durable-execution.md +0 -0
  45. /package/skill/{vegastack-arch-guardian → arch-guardian}/references/architecture/flutter.md +0 -0
  46. /package/skill/{vegastack-arch-guardian → arch-guardian}/references/architecture/foundation.md +0 -0
  47. /package/skill/{vegastack-arch-guardian → arch-guardian}/references/architecture/hosting-reliability.md +0 -0
  48. /package/skill/{vegastack-arch-guardian → arch-guardian}/references/architecture/identity-tenancy.md +0 -0
  49. /package/skill/{vegastack-arch-guardian → arch-guardian}/references/architecture/model-lifecycle.md +0 -0
  50. /package/skill/{vegastack-arch-guardian → arch-guardian}/references/architecture/models-observability.md +0 -0
  51. /package/skill/{vegastack-arch-guardian → arch-guardian}/references/architecture/realtime-channels.md +0 -0
  52. /package/skill/{vegastack-arch-guardian → arch-guardian}/references/architecture/security-privacy.md +0 -0
  53. /package/skill/{vegastack-arch-guardian → arch-guardian}/references/architecture/topology-monorepo.md +0 -0
  54. /package/skill/{vegastack-arch-guardian → arch-guardian}/references/architecture/web.md +0 -0
  55. /package/skill/{vegastack-arch-guardian → arch-guardian}/references/control-catalog.json +0 -0
  56. /package/skill/{vegastack-arch-guardian → arch-guardian}/references/foundation-compatibility.json +0 -0
  57. /package/skill/{vegastack-arch-guardian → arch-guardian}/references/golden-patterns.md +0 -0
  58. /package/skill/{vegastack-arch-guardian → arch-guardian}/references/profile-governance.md +0 -0
  59. /package/skill/{vegastack-arch-guardian → arch-guardian}/references/rule-model.json +0 -0
  60. /package/skill/{vegastack-arch-guardian → arch-guardian}/references/workflows.md +0 -0
  61. /package/skill/{vegastack-arch-guardian → arch-guardian}/scripts/architecture-check.mjs +0 -0
  62. /package/skill/{vegastack-arch-guardian → arch-guardian}/scripts/lib.mjs +0 -0
  63. /package/skill/{vegastack-arch-guardian → arch-guardian}/scripts/profile-tool.mjs +0 -0
  64. /package/skill/{vegastack-arch-guardian → arch-guardian}/scripts/schema-validate.mjs +0 -0
  65. /package/skill/{vegastack-arch-guardian → arch-guardian}/scripts/validate-profile.mjs +0 -0
  66. /package/skill/{vegastack-arch-guardian → arch-guardian}/scripts/verify-corpus.mjs +0 -0
@@ -22,8 +22,8 @@
22
22
  "service": "EVE",
23
23
  "kind": "pinned-source-package",
24
24
  "pinnedVersion": "0.29.5",
25
- "currentVersion": "0.31.2",
26
- "versionCheckedAt": "2026-08-07T18:47:48.335Z",
25
+ "currentVersion": "0.31.3",
26
+ "versionCheckedAt": "2026-08-08T07:53:01.687Z",
27
27
  "commit": "8988139097d1e1a1f1aca9b2828e63408848fccf",
28
28
  "stability": "beta-protocol-critical",
29
29
  "thresholdDays": 14,
@@ -639,7 +639,7 @@
639
639
  "service": "Turborepo",
640
640
  "kind": "official-docs",
641
641
  "pinnedVersion": "2.5.6",
642
- "currentVersion": "2.10.8",
642
+ "currentVersion": "2.10.9",
643
643
  "stability": "tooling",
644
644
  "thresholdDays": 30,
645
645
  "critical": false,
@@ -666,7 +666,7 @@
666
666
  "rule:PKG-002",
667
667
  "ref:topology-monorepo"
668
668
  ],
669
- "versionCheckedAt": "2026-08-07T18:47:48.335Z"
669
+ "versionCheckedAt": "2026-08-08T07:53:01.687Z"
670
670
  },
671
671
  {
672
672
  "id": "FLUTTER-DOCS",
@@ -777,8 +777,8 @@
777
777
  "versionDetection": {
778
778
  "type": "http-hash-and-changelog"
779
779
  },
780
- "retrievedAt": "2026-08-07T18:47:48.335Z",
781
- "checksum": "a8e45e4fda04b32279f1a82bd0afa7380b70f738cc1b5ee42ab178945d7dd1fe",
780
+ "retrievedAt": "2026-08-08T07:53:01.687Z",
781
+ "checksum": "9d428c76f42eafa6cd895e29bc54cd7b2ba0fa067c63eef457d6cf1a519b1b71",
782
782
  "previousRetrievalChecksum": "d8117a391c5875a7b4d352a3f8b8b89ad12e6617a91038228f7279c732d0cd98",
783
783
  "topics": [
784
784
  "notifications",
@@ -1047,7 +1047,7 @@
1047
1047
  "service": "AI SDK",
1048
1048
  "kind": "official-docs-package",
1049
1049
  "pinnedVersion": "7.x",
1050
- "currentVersion": "7.0.57",
1050
+ "currentVersion": "7.0.58",
1051
1051
  "stability": "model-library",
1052
1052
  "thresholdDays": 30,
1053
1053
  "critical": false,
@@ -1075,7 +1075,7 @@
1075
1075
  "rule:MODEL-001",
1076
1076
  "ref:models-observability"
1077
1077
  ],
1078
- "versionCheckedAt": "2026-08-07T18:47:48.335Z"
1078
+ "versionCheckedAt": "2026-08-08T07:53:01.687Z"
1079
1079
  },
1080
1080
  {
1081
1081
  "id": "ANTHROPIC-MODELS",
@@ -1152,8 +1152,8 @@
1152
1152
  "ref:model-lifecycle",
1153
1153
  "ref:models-observability"
1154
1154
  ],
1155
- "checksum": "379866ba1eef7fa6ed14b14f7961fb3f58989e02dc1e54d12c4a8293d87667fd",
1156
- "retrievedAt": "2026-08-07T19:12:27.794Z"
1155
+ "checksum": "5f2224358c1f3f47ba6cdd5e46b2d695a2c8bfcad93faedcab549290fcada1e6",
1156
+ "retrievedAt": "2026-08-08T07:53:01.687Z"
1157
1157
  }
1158
1158
  ]
1159
1159
  }
@@ -13,7 +13,7 @@ const defaultRegistry = join(skillRoot, 'refresh', 'sources.json')
13
13
  const maximumBytes = 5 * 1024 * 1024
14
14
  // Every host referenced by refresh/sources.json must appear here; loadRegistry enforces the
15
15
  // consistency so the allowlist cannot silently drift from the registry.
16
- const approvedHosts = new Set(['ai-sdk.dev', 'ai.google.dev', 'api.flutter.dev', 'aws.amazon.com', 'better-auth.com', 'bun.sh', 'developer.apple.com', 'developers.cloudflare.com', 'developers.openai.com', 'docs.aws.amazon.com', 'docs.flutter.dev', 'firebase.google.com', 'git.postgresql.org', 'github.com', 'modal.com', 'modelcontextprotocol.io', 'nextjs.org', 'openbao.org', 'openid.github.io', 'opennext.js.org', 'opentelemetry.io', 'platform.claude.com', 'pub.dev', 'pypi.org', 'raw.githubusercontent.com', 'registry.npmjs.org', 'riverpod.dev', 'turborepo.dev', 'workflow-sdk.dev', 'www.cloudflare.com', 'www.npmjs.com', 'www.postgresql.org'])
16
+ const approvedHosts = new Set(['agentskills.io', 'ai-sdk.dev', 'ai.google.dev', 'api.flutter.dev', 'aws.amazon.com', 'better-auth.com', 'bun.sh', 'code.claude.com', 'developer.apple.com', 'developers.cloudflare.com', 'developers.openai.com', 'docs.aws.amazon.com', 'docs.flutter.dev', 'firebase.google.com', 'git.postgresql.org', 'github.com', 'hermes-agent.nousresearch.com', 'learn.chatgpt.com', 'modal.com', 'modelcontextprotocol.io', 'nextjs.org', 'openbao.org', 'openid.github.io', 'opennext.js.org', 'opentelemetry.io', 'platform.claude.com', 'pub.dev', 'pypi.org', 'raw.githubusercontent.com', 'registry.npmjs.org', 'riverpod.dev', 'turborepo.dev', 'workflow-sdk.dev', 'www.cloudflare.com', 'www.npmjs.com', 'www.postgresql.org'])
17
17
 
18
18
  function flagValue(argv, flag) {
19
19
  const value = argv.shift()
@@ -309,6 +309,9 @@ export async function refreshEvidence(options) {
309
309
  Object.assign(source, update)
310
310
  report.acceptedBaselines.push({ id: source.id, ...update })
311
311
  }
312
+ // A manual-review flag raised earlier in this same run is satisfied by the acceptance that
313
+ // just refreshed the source's retrievedAt — it must not fail-close the run that fixed it.
314
+ for (const entry of report.manualVersionReview) if (baselineUpdates.get(entry.id)?.retrievedAt) { entry.due = false; entry.ageDays = 0 }
312
315
  await atomicJson(options.registry, registry)
313
316
  }
314
317
  await atomicJson(options.cache, cache)
@@ -0,0 +1,79 @@
1
+ ---
2
+ name: skill-maintainer
3
+ description: Maintainer skill for the vegastack-skills repository itself. Use whenever working on this repo - creating or scaffolding a new skill, editing an existing skill (SKILL.md, references, refresh registry, tests), renaming, deprecating, or removing a skill, cutting a release or rolling one back, or checking cross-agent portability across Claude Code, Codex, Hermes, and the agentskills.io standard. Encodes the tri-harness standards (frontmatter policy, naming grammar, description and context budgets, install surfaces) and the per-skill contract every change under skills/ must satisfy. Load it before touching any file in this repo.
4
+ ---
5
+
6
+ # VegaStack Skill Maintainer
7
+
8
+ Maintenance skill for this repository. Every change under `skills/` must satisfy the per-skill contract and the tri-harness standards below. Obey them in your own edits; enforce them in review. When a rule here disagrees with `CONTRIBUTING.md` or `docs/policies/` at the repo root, those win — then fix this skill.
9
+
10
+ ## Operating rules
11
+
12
+ 1. Skill content lives only in `skills/<name>/`. Wiring lives outside it: the packaging allowlist in `packages/cli/scripts/sync-skill.mjs`, the root `README.md` skills table, and `CHANGELOG.md` (via changesets).
13
+ 2. Frontmatter is exactly two keys: `name` and `description`. The open spec also allows `license`, `compatibility`, and `metadata`, but this repo defaults to the minimal two; adding any other key is a policy exception needing maintainer sign-off.
14
+ 3. `name` must equal the directory name. Grammar: starts with a lowercase letter, then only lowercase letters, digits, and hyphens; no leading/trailing hyphen, no consecutive hyphens; at most 64 chars.
15
+ 4. `description`: at most 1024 chars, third person, states WHAT the skill does and WHEN to load it, trigger words front-loaded, no angle brackets. Never summarize the workflow in it — agents follow the summary and skip the body. Err slightly pushy: agents under-trigger.
16
+ 5. `SKILL.md` under 500 lines (target under 150) and roughly under 5k tokens. Detail goes to `references/`, executables to `scripts/`, templates to `assets/`. Relative links stay inside the skill, one level deep.
17
+ 6. No Claude-only body syntax anywhere in a skill: no dynamic command injection, no argument placeholders, no Claude environment-variable paths — the exact token list is in [standards](references/standards.md). Reference scripts as plain relative paths runnable from the skill directory.
18
+ 7. Never hand-edit checksums, versions, or timestamps in any `refresh/sources.json` — they must come from a refresh-runner run.
19
+ 8. Before finishing any change: `node packages/cli/scripts/validate-skill.mjs skills/<name>` and `bun test skills/<name>` (both from repo root) must pass.
20
+
21
+ ## Route progressively
22
+
23
+ | Need | Read |
24
+ |---|---|
25
+ | tri-harness standards: discovery paths, frontmatter rules, context budgets, install surfaces, portability rules, unverified items | [standards](references/standards.md) |
26
+ | release, rename, deprecate, rollback mechanics | [release ops](references/release-ops.md) |
27
+ | this skill's own freshness contract | [REFRESH](refresh/REFRESH.md), [sources](refresh/sources.json) |
28
+ | authoritative repo policy | `CONTRIBUTING.md`, `docs/policies/content-versioning.md`, `docs/policies/release-and-rollback.md` at the repo root |
29
+
30
+ ## Workflow: scaffold a new skill
31
+
32
+ 1. Create `skills/<name>/` with the full per-skill contract: `SKILL.md` (agent entry), `README.md` (repo-side walkthrough, never packaged), `references/`, `tests/` (bun tests, never packaged), `refresh/sources.json` + `refresh/REFRESH.md` (freshness contract), `agents/openai.yaml` (Codex interface metadata); `scripts/` and `assets/` only if the skill needs them.
33
+ 2. Write frontmatter and body per operating rules 2–6; the body routes to references, it does not inline them.
34
+ 3. Wire it in: add every packaged file to the allowlist in `packages/cli/scripts/sync-skill.mjs` (the build fails loudly on unlisted files); add a row to the root README skills table; add a changeset (a new skill is MINOR).
35
+ 4. The installer is multi-skill: every authored skill needs a packaging allowlist entry in packages/cli/scripts/sync-skill.mjs (the build fails loudly on unlisted files).
36
+ 5. Seed refresh baselines with the deterministic runner, never by hand — invocation in [REFRESH](refresh/REFRESH.md).
37
+ 6. Run the checks in operating rule 8.
38
+
39
+ ## Workflow: update or maintain
40
+
41
+ - **Stable IDs are permanent.** Never renumber or reuse a rule ID; removing or renaming one is a MAJOR content change (`docs/policies/content-versioning.md`). New rules/references are MINOR; weakening a MUST is MAJOR; factual refreshes (pins, URLs, checksums) are PATCH.
42
+ - **Tag volatile claims.** Any sentence carrying a vendor version, mechanism name, or numeric budget gets a source marker comment mapping to an ID in that skill's `refresh/sources.json`, and the registry entry's `affected` list must name the reference it lives in. Untagged volatile facts rot silently.
43
+ - **Description budgets.** Stay within 1024 chars and keep triggers in the first sentence: Codex truncates its skill list at 2% of the context window / 8,000 chars, Claude Code truncates a skill's always-loaded listing at 1,536 chars — the tail of a long description is the first thing lost.
44
+ - **Packaged-file changes.** Any add/remove/rename of a packaged file must update the `sync-skill.mjs` allowlist in the same PR.
45
+
46
+ ## Workflow: rename, deprecate, or remove
47
+
48
+ Full playbook in [release ops](references/release-ops.md). Short form: a rename changes the directory and the frontmatter `name` in the same commit (they must stay equal), updates allowlist + root README table + CHANGELOG, and is MAJOR. Deprecation is announced in README/CHANGELOG before removal. Removal deletes the tree, unwires it, and is MAJOR.
49
+
50
+ ## Workflow: release
51
+
52
+ Changeset lands with the PR → maintainer runs `bunx changeset version`, `bun install`, commits → tags `v<version>` → tag-driven pipeline runs check, tag↔version guard, npm trusted publishing, SBOM, GitHub release. Two decoupled version identities — **package version** (npm, changesets) and **foundation version** (content contract for deployed profiles) — must never be conflated; bumping the package must never invalidate a deployed profile. Rollback is roll-forward (publish previous-good as a new patch) plus `npm deprecate` of the bad version; unpublish only within 72 hours and only in addition. Details: [release ops](references/release-ops.md).
53
+
54
+ ## Workflow: portability check
55
+
56
+ Run this checklist before merging any skill change; per-harness detail in [standards](references/standards.md).
57
+
58
+ - [ ] Frontmatter keys exactly `name` + `description`, values within limits (rules 2–4).
59
+ - [ ] `name` equals the directory name.
60
+ - [ ] Description has no angle brackets and triggers front-loaded.
61
+ - [ ] `SKILL.md` under 500 lines; relative links resolve and stay inside the skill.
62
+ - [ ] No Claude-only body syntax (token list in standards).
63
+ - [ ] `agents/openai.yaml` present for Codex; extra files are safely ignored by the other harnesses.
64
+ - [ ] Install surfaces respected: Claude Code `.claude/skills` (project) / `~/.claude/skills` (global); Codex `.agents/skills` (project and global); Hermes `~/.hermes/skills` **global only** — never assume Hermes project-level discovery.
65
+ - [ ] `node packages/cli/scripts/validate-skill.mjs skills/<name>` and `bun test skills/<name>` pass.
66
+
67
+ ## Hard limits
68
+
69
+ | Limit | Value |
70
+ |---|---|
71
+ | `name` | ≤ 64 chars, lowercase letter first, then `[a-z0-9-]`, no consecutive hyphens, equals directory name |
72
+ | `description` | 1–1024 chars, no angle brackets |
73
+ | `SKILL.md` | under 500 lines / ~5k tokens; target under 150 lines |
74
+ | Claude Code listing | name + description truncated at 1,536 chars per skill |
75
+ | Claude Code body | first 5,000 tokens persist across compaction; 25,000-token shared skills budget |
76
+ | Codex skill list | 2% of context window / 8,000 chars — descriptions shortened first |
77
+ | Hermes skills_list | ~3k tokens |
78
+
79
+ These mirror marked sentences in [standards](references/standards.md); update both in the same PR when a source changes.
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "VegaStack Skill Maintainer"
3
+ short_description: "Maintain vegastack-skills skills to tri-harness standards"
4
+ default_prompt: "Use $skill-maintainer to make this vegastack-skills change satisfy the per-skill contract and tri-harness standards."
@@ -0,0 +1,63 @@
1
+ # Release, rename, and rollback operations
2
+
3
+ Condensed operational playbook. The authoritative policies live at the repo root — `docs/policies/release-and-rollback.md` and `docs/policies/content-versioning.md` — and this file must never contradict them; when in doubt, they win.
4
+
5
+ ## Semver for skill content
6
+
7
+ Consumers depend on rule IDs and rule strength, not an API surface.
8
+
9
+ | Bump | Content change |
10
+ |---|---|
11
+ | MAJOR | Removing or renaming a rule ID (IDs are stable and permanent — never renumber or reuse). Changing a `MUST`/`MUST NOT` so it permits something previously forbidden. Removing or renaming a skill. |
12
+ | MINOR | New rules or rule IDs. New references or reference sections. New skill. Loosening ceremony without weakening a `MUST`. Tightening a `SHOULD` to a `MUST`. |
13
+ | PATCH | Factual refreshes: version pins, vendor mechanism names, URLs, registry checksums. Typos and non-normative wording. Test/fixture-only changes. |
14
+
15
+ Installer/CLI changes follow ordinary semver on the same package version; a release takes the highest bump either side requires.
16
+
17
+ ## Two version identities — never conflate
18
+
19
+ | Identity | Lives in | Governs |
20
+ |---|---|---|
21
+ | Package version | `packages/cli/package.json` (changesets) | npm releases of installer + content snapshot |
22
+ | Foundation version | profile schema const, `profile-tool.mjs` default, `foundation-compatibility.json` | the profile/schema contract deployed `.vegastack/architecture` profiles validate against |
23
+
24
+ - Bumping the **package** (even MAJOR) must never invalidate a deployed profile — profiles bind to the foundation version.
25
+ - Bumping the **foundation** version is a content-contract event: it requires a compatibility entry describing how existing baselines are treated, and at minimum a MINOR package release.
26
+ - Each identity has one source of truth; never introduce additional copies of either number.
27
+
28
+ ## Release flow (tag-driven)
29
+
30
+ 1. Every PR that changes released behavior lands with a changeset (`bunx changeset`) whose bump follows the table above.
31
+ 2. Maintainer, at release time: `bunx changeset version` (applies changesets to `packages/cli/package.json` and the changelog), then `bun install` so `bun.lock` does not go stale, commit. Root `CHANGELOG.md` gets a human-readable entry for every release.
32
+ 3. Tag the release commit `v<version>`, push the tag.
33
+ 4. The release workflow runs on the tag: `bun run check`, tag↔version guard, `npm publish` via trusted publishing (OIDC, token-free, provenance by default; idempotently skipped if already on the registry), SBOM, GitHub release. Never pass `--provenance` explicitly — it conflicts with trusted-publishing config.
34
+
35
+ Contributors do not bump versions in PRs; releases are maintainer-driven.
36
+
37
+ ## Rollback
38
+
39
+ `npm unpublish` is limited to 72 hours and breaks pinned consumers — it is not the rollback mechanism.
40
+
41
+ 1. **Roll forward:** revert the offending commits on `main`, changeset, tag, release the previous known-good content as a **new patch version**.
42
+ 2. **Deprecate the bad version:** `npm deprecate @vegastack/skills@<bad> "Broken — use <new>"`.
43
+ 3. Unpublish only if the bad version leaked secrets or is actively harmful, still within 72 hours, and always *in addition to* steps 1–2, never instead.
44
+
45
+ ## Rename a skill
46
+
47
+ Derived from the stable-ID logic in content-versioning (skill names are consumer-facing identifiers like rule IDs):
48
+
49
+ 1. Rename the directory and the frontmatter `name` in the same commit — they must always stay equal.
50
+ 2. Update every wiring point in the same PR: the packaging allowlist in `packages/cli/scripts/sync-skill.mjs`, the root README skills table row, and any cross-skill or docs links.
51
+ 3. Changeset: MAJOR. Note the migration in `CHANGELOG.md`: copies installed under the old name are orphaned, and installer operations addressed to the old name stop resolving once the shipped manifest no longer knows it.
52
+ 4. Registry source IDs inside `refresh/sources.json` are skill-internal and unaffected, but every `affected` ref must still resolve to a real reference in the renamed tree.
53
+ 5. Re-run `node packages/cli/scripts/validate-skill.mjs skills/<new-name>` and the skill's tests — name/directory equality is validated.
54
+
55
+ ## Deprecate / remove a skill
56
+
57
+ 1. Announce deprecation in the root README table and `CHANGELOG.md` at least one release before removal when practical.
58
+ 2. Removal: delete `skills/<name>/`, remove its allowlist entries and README row, MAJOR changeset with migration notes.
59
+ 3. Removing a skill in a new MAJOR does **not** deprecate previously published package versions — `npm deprecate` only versions that are themselves broken.
60
+
61
+ ## Refresh branches
62
+
63
+ Branches named `refresh/**` are reserved for the automated freshness loop and are CI-restricted to `skills/*/refresh/` and `skills/*/references/foundation-compatibility.json`. Human content changes go on normal branches. Never hand-edit checksums/versions/timestamps anywhere — CI re-fetches claimed baselines, so hand-edited values cannot merge.
@@ -0,0 +1,92 @@
1
+ # Tri-harness skill standards
2
+
3
+ The complete standards reference for skills in this repository, covering the three target harnesses — Claude Code, Codex, Hermes — and the agentskills.io open standard they converge on. Verified 2026-08-08.
4
+
5
+ Sentences carrying volatile vendor facts end with an HTML `source:` comment naming a registry ID; each ID maps to an entry in [sources.json](../refresh/sources.json). When a source changes, the marked sentences are the edit surface — see [REFRESH.md](../refresh/REFRESH.md). Items flagged **UNVERIFIED** must never be asserted as fact in skill content or reviews.
6
+
7
+ ## agentskills.io open standard
8
+
9
+ Source: https://agentskills.io/specification. Reference validator: `skills-ref validate` from github.com/agentskills/agentskills. <!-- source: AGENTSKILLS-SPEC -->
10
+
11
+ - Directory layout: `skill-name/SKILL.md` required; optional `scripts/`, `references/`, `assets/`. <!-- source: AGENTSKILLS-SPEC -->
12
+ - Frontmatter — the spec defines exactly six fields: <!-- source: AGENTSKILLS-SPEC -->
13
+ - `name` (required): 1–64 chars, `[a-z0-9-]` only, no leading/trailing hyphen, no consecutive hyphens, must match the parent directory name. <!-- source: AGENTSKILLS-SPEC -->
14
+ - `description` (required): 1–1024 chars, what + when, keyword-rich. <!-- source: AGENTSKILLS-SPEC -->
15
+ - `license` (optional): short string or bundled-file reference. <!-- source: AGENTSKILLS-SPEC -->
16
+ - `compatibility` (optional): 1–500 chars, environment requirements only. <!-- source: AGENTSKILLS-SPEC -->
17
+ - `metadata` (optional): string→string map. <!-- source: AGENTSKILLS-SPEC -->
18
+ - `allowed-tools` (optional): space-separated string; experimental, support varies across harnesses. <!-- source: AGENTSKILLS-SPEC -->
19
+ - Progressive disclosure: metadata costs ~100 tokens at startup; SKILL.md body should stay under 5,000 tokens (under 500 lines); bundled resources load on demand; relative file references one level deep. <!-- source: AGENTSKILLS-SPEC -->
20
+ - The spec's own version identifier: **UNVERIFIED** — do not cite a spec version number.
21
+
22
+ ## Claude Code
23
+
24
+ Source: https://code.claude.com/docs/en/skills. <!-- source: CLAUDE-CODE-SKILLS -->
25
+
26
+ - Discovery: project `.claude/skills/<name>/SKILL.md`, loaded from the start directory and every parent up to the repo root; personal `~/.claude/skills/`; enterprise via managed settings; nested `<subdir>/.claude/skills/` lazy-loaded; plugin `<plugin>/skills/`. Precedence: enterprise > personal > project. Symlinks are followed; skill changes are detected live mid-session. <!-- source: CLAUDE-CODE-SKILLS -->
27
+ - Frontmatter: all fields optional in Claude Code itself (directory name is the command name; description recommended). It accepts an extended set beyond the spec six — `when_to_use`, `argument-hint`, `arguments`, `disable-model-invocation`, `user-invocable`, `allowed-tools`, `disallowed-tools`, `model`, `effort`, `context` (fork), `agent`, `background`, `hooks`, `paths`, `shell`, plus `license`/`compatibility`/`metadata` (accepted but not acted on). <!-- source: CLAUDE-CODE-SKILLS -->
28
+ - **Packaging trap:** claude.ai uploads, the Skills API, and `package_skill.py` hard-error on any key outside the spec six (`name`, `description`, `license`, `compatibility`, `metadata`, `allowed-tools`) — a skill that works in Claude Code can still be unpackageable. <!-- source: CLAUDE-CODE-SKILLS -->
29
+ - Context budgets: each skill's `description` (+`when_to_use`) is always in context, truncated at 1,536 chars combined per skill; the body loads on invocation and persists — the first 5,000 tokens are re-attached after compaction, within a 25,000-token budget shared across skills. <!-- source: CLAUDE-CODE-SKILLS -->
30
+ - Invocation: implicit matching on description, or direct `/skill-name`. `allowed-tools` is a per-turn permission pre-grant only, not a sandbox. <!-- source: CLAUDE-CODE-SKILLS -->
31
+ - Claude-only body features — **never use in this repo's skills** (broken or dead weight elsewhere): <!-- source: CLAUDE-CODE-SKILLS -->
32
+ - `` !`cmd` `` dynamic command-output injection
33
+ - `$ARGUMENTS`, `$0`, `$name` argument placeholders
34
+ - `${CLAUDE_SKILL_DIR}`, `${CLAUDE_PROJECT_DIR}` environment paths
35
+ - 2026 changes: commands and skills merged; `context: fork` subagents; skill-level hooks; `paths` glob gating; `skillOverrides`; skills-dir plugins; bundled skills. <!-- source: CLAUDE-CODE-SKILLS -->
36
+
37
+ ## Codex (OpenAI)
38
+
39
+ Source: https://developers.openai.com/codex/skills (canonical content at learn.chatgpt.com/docs/build-skills.md). <!-- source: CODEX-SKILLS -->
40
+
41
+ - Discovery order: `$CWD/.agents/skills` → parent directories' `.agents/skills` within a git repo → `$REPO_ROOT/.agents/skills` → `$HOME/.agents/skills` → `/etc/codex/skills` → bundled. Symlinks followed. <!-- source: CODEX-SKILLS -->
42
+ - Legacy `~/.codex/skills` discovery: **UNVERIFIED** — no longer documented; do not rely on it.
43
+ - Frontmatter: `name` + `description` required; same SKILL.md format as the spec. <!-- source: CODEX-SKILLS -->
44
+ - Unknown frontmatter keys: officially undocumented; community evidence says ignored — **UNVERIFIED** officially.
45
+ - Optional per-skill `agents/openai.yaml`: <!-- source: CODEX-SKILLS -->
46
+ - `interface`: `display_name`, `short_description`, `icon_small`, `icon_large`, `brand_color`, `default_prompt`
47
+ - `policy`: `allow_implicit_invocation: false` (default true)
48
+ - `dependencies`: `tools: [{type: "mcp", value: "..."}]`
49
+ - Invocation: `$` mention, `/skills` list, implicit matching on description. The skill list is capped at 2% of the context window / 8,000 chars — descriptions are shortened first, so front-load trigger words. <!-- source: CODEX-SKILLS -->
50
+
51
+ ## Hermes (Nous Research)
52
+
53
+ Source: https://hermes-agent.nousresearch.com/docs/user-guide/features/skills. <!-- source: HERMES-SKILLS -->
54
+
55
+ - Hermes Agent is Nous Research's open agent harness (github.com/NousResearch/hermes-agent; CLI + desktop + messengers; v0.9.0 Apr 2026), explicitly compatible with the agentskills.io standard. <!-- source: HERMES-SKILLS -->
56
+ - Discovery: a single global directory `~/.hermes/skills/` — **no project-level discovery at all**. Extra directories only via `~/.hermes/config.yaml` under `skills.external_dirs` (e.g. `[~/.agents/skills]`). `hermes skills install <source>` installs from hubs/URLs into the global directory after a security scan. <!-- source: HERMES-SKILLS -->
57
+ - Frontmatter: `name` + `description` required; optional Hermes fields: `version`, `platforms` (macos, linux), `required_environment_variables`, `requires_toolsets`, `fallback_for_toolsets`, `metadata.hermes.{tags, category, config}`. Name pattern `^[a-z][a-z0-9_-]*$` — must start with a letter (underscores allowed by Hermes but not by the spec; use hyphens). <!-- source: HERMES-SKILLS -->
58
+ - Unknown-key handling, and treatment of `allowed-tools`/`license`/`compatibility`: **UNVERIFIED** (presumed ignored; no error reports).
59
+ - Triggering: every skill becomes a slash command (`/name args`, chainable); model-side progressive disclosure via `skills_list()` (~3k tokens) then `skill_view(name)`. `/learn` auto-authors SKILL.md. <!-- source: HERMES-SKILLS -->
60
+
61
+ ## Install surfaces
62
+
63
+ | Harness | Project install | Global install | Notes |
64
+ |---|---|---|---|
65
+ | Claude Code | `.claude/skills/` | `~/.claude/skills/` | parents scanned to repo root; nested dirs lazy-loaded <!-- source: CLAUDE-CODE-SKILLS --> |
66
+ | Codex | `.agents/skills/` | `~/.agents/skills/` | also `/etc/codex/skills` and bundled <!-- source: CODEX-SKILLS --> |
67
+ | Hermes | — none | `~/.hermes/skills/` | **global only**; extension only via `skills.external_dirs` config <!-- source: HERMES-SKILLS --> |
68
+
69
+ Installer implication: the `@vegastack/skills` installer must treat Hermes as global-only — a "project install" for Hermes does not exist.
70
+
71
+ ## Portability rules (this repo's policy)
72
+
73
+ One authored tree, three harnesses. Every skill in `skills/` follows all seven:
74
+
75
+ 1. **Frontmatter:** only `name` + `description` (spec also allows `license`, `compatibility`, `metadata` — off by default here). Never depend on `allowed-tools`. No Claude-only keys: they break claude.ai packaging and are dead weight elsewhere.
76
+ 2. **Name:** equals the directory name; grammar intersection across harnesses: starts with a lowercase letter, then `[a-z0-9-]`, no consecutive hyphens, no underscores, ≤ 64 chars.
77
+ 3. **Description:** ≤ 1024 chars, trigger words front-loaded (Codex 2%/8,000-char list budget; Claude Code 1,536-char per-skill listing truncation).
78
+ 4. **Body syntax:** no Claude-only tokens (list above); scripts referenced as plain relative paths runnable from the skill directory; relative links one level deep.
79
+ 5. **Size:** SKILL.md under 500 lines / under 5k tokens; detail in `references/`, executables in `scripts/`, templates in `assets/`.
80
+ 6. **Extra files:** `agents/openai.yaml` is safe to ship — Claude Code and Hermes ignore unknown files.
81
+ 7. **Per-harness metadata** that must survive claude.ai packaging goes under `metadata:` with namespaced keys (e.g. `metadata.hermes.*`).
82
+
83
+ Repo enforcement: `packages/cli/scripts/validate-skill.mjs` (run by `bun run check`) accepts exactly the spec six (`name`, `description`, `license`, `compatibility`, `allowed-tools`, `metadata`) and rejects everything else, enforces the full name grammar (lowercase-letter start, no consecutive hyphens, ≤64 chars, name equals the skill directory name), and rejects empty or over-length descriptions and angle brackets. Policy (rule 1) is stricter than the validator; the minimal two keys are the default.
84
+
85
+ ## UNVERIFIED register
86
+
87
+ Do not assert any of these; if one becomes load-bearing, verify against the live source first and move it into a marked sentence:
88
+
89
+ - agentskills.io spec version identifier.
90
+ - Codex official unknown-frontmatter-key behavior (community: ignored).
91
+ - Codex legacy `~/.codex/skills` discovery.
92
+ - Hermes unknown-key handling and its treatment of `allowed-tools`/`license`/`compatibility`.
@@ -0,0 +1,40 @@
1
+ # Refresh contract — skill-maintainer
2
+
3
+ Instructions for the scheduled refresh agent (and any human running a manual refresh). This file, together with `sources.json`, is the complete freshness contract for this skill.
4
+
5
+ ## What this skill claims
6
+
7
+ - **Durable content** (`SKILL.md` workflows and operating rules, `references/release-ops.md`): repo process, derived from `docs/policies/*` — the refresh agent NEVER edits these. If a policy doc changes, that is a normal human PR, not a refresh.
8
+ - **Mechanism-coupled claims**: sentences marked `<!-- source: SOURCE-ID -->` inside `references/standards.md`. These carry the tri-harness standards — discovery paths, frontmatter rules, numeric context budgets, install surfaces. They are the compliance basis of every skill in this repo, so **all standards changes are semantic drift requiring a human-reviewed PR**: the agent may propose edits to marked sentences only, in the same PR as the registry update that evidences the change, and a maintainer must review before merge. The hard-limits table in `SKILL.md` mirrors several marked sentences; update it in the same PR (this is the one sanctioned SKILL.md touch, and only when a mirrored number changed).
9
+ - **Volatile layer** (the only file the agent edits freely): `refresh/sources.json` — the source registry and staleness snapshot (checksums, retrieval times).
10
+
11
+ ## How to refresh
12
+
13
+ The deterministic runner is repo-shared and hosted in arch-guardian for now. Run from the repo root:
14
+
15
+ 1. **Deterministic pass first** (no LLM judgment):
16
+ `node skills/arch-guardian/scripts/refresh-evidence.mjs --registry skills/skill-maintainer/refresh/sources.json`
17
+ drift/stale/unavailable results are the work-list. Exit 1 with a critical entry means fail-closed: the run must not be silently skipped. All four sources here are critical.
18
+ 2. **Accept verified changes** in the same code path:
19
+ `node skills/arch-guardian/scripts/refresh-evidence.mjs --registry skills/skill-maintainer/refresh/sources.json --accept-baselines`
20
+ This writes registry, cache, and drift report together — never hand-edit checksums, versions, or timestamps; they must always come from a run. Baselines are runner-seeded; when a new source is added or a verified change is accepted, this accept-baselines invocation is the only sanctioned way to update them.
21
+ 3. **Semantic verification** for every source the deterministic pass flagged: read the changed page (fetch the registry URL), decide whether any `<!-- source: X -->` marked sentence in `references/standards.md` (or the mirrored SKILL.md hard-limits row) is now wrong, and propose the minimal edit. Unlike version-pin registries, checksum drift here is presumed meaningful until a human reads the diff — these pages define the standards themselves. Editorial churn may be accepted silently only after that read.
22
+ 4. **One PR per refresh**, branch `refresh/<date>`, force-updating the standing refresh branch if last week's PR is unmerged (never stack duplicate PRs). PR body lists: each changed source, old→new checksum, links to the evidence, and which marked sentences changed and why. A maintainer review is mandatory before merge.
23
+ 5. Changes to durable content, workflows, tests, or anything outside `refresh/` and marked sentences are out of scope for a refresh PR — CI enforces this (refresh-guard workflow).
24
+
25
+ ## Cadence and thresholds
26
+
27
+ Weekly scheduled run. Every `thresholdDays` in `sources.json` is ≥ 14 (2× cadence) so one missed run never breaches a threshold.
28
+
29
+ ## What counts as drift worth a PR
30
+
31
+ - Any text-scope checksum change on any of the four sources → read the page; if a discovery path, frontmatter rule, numeric budget, or install surface changed, propose the marked-sentence edit and flag it prominently — downstream, every skill in `skills/` may need re-checking against the new standard (that re-check is a separate human task, never part of the refresh PR).
32
+ - A source page moves to an UNVERIFIED area (e.g. a documented path disappears) → move the claim into the UNVERIFIED register in `references/standards.md` rather than asserting the old fact.
33
+ - A critical source is unavailable or a redirect leaves the approved host set → investigate immediately; host changes require a deliberate `approvedHosts` update in the shared runner (out of refresh-PR scope — open an issue).
34
+
35
+ ## Never
36
+
37
+ - Never edit unmarked sentences, workflows, or `references/release-ops.md`.
38
+ - Never hand-write checksum/version/timestamp values.
39
+ - Never merge a standards change without human review — this registry has no auto-acceptable semantic drift.
40
+ - Never archive third-party documentation bodies in this repo (claim metadata, URLs, hashes, and concise excerpts only).
@@ -0,0 +1,103 @@
1
+ {
2
+ "schemaVersion": 1,
3
+ "policy": {
4
+ "criticalTopics": [
5
+ "skills-standard"
6
+ ],
7
+ "defaultChecksumScope": "html-text-v1",
8
+ "offline": "Use cached metadata only; fail closed when a critical entry is missing or older than thresholdDays.",
9
+ "drift": "All four sources are the compliance basis for this skill: any drift requires reading the changed page and a human-reviewed PR updating the marked sentences in references/standards.md (and the mirrored hard-limits table in SKILL.md); never auto-apply.",
10
+ "copyright": "Store claim metadata, URLs, hashes, headers, and concise excerpts only; never archive whole third-party documentation corpora.",
11
+ "cadence": "weekly automated refresh; thresholdDays must be >= 14 (2x cadence) so a single missed run never breaches a threshold"
12
+ },
13
+ "sources": [
14
+ {
15
+ "id": "AGENTSKILLS-SPEC",
16
+ "service": "agentskills.io specification",
17
+ "kind": "official-spec",
18
+ "stability": "open-standard",
19
+ "thresholdDays": 14,
20
+ "critical": true,
21
+ "urls": {
22
+ "primary": "https://agentskills.io/specification"
23
+ },
24
+ "versionDetection": {
25
+ "type": "manual-review"
26
+ },
27
+ "topics": [
28
+ "skills-standard"
29
+ ],
30
+ "affected": [
31
+ "ref:standards"
32
+ ],
33
+ "checksum": "1aecfc21328fcf51b456615477d7aebfa05b779c56d75c7721c4fd5f969af8f7",
34
+ "retrievedAt": "2026-08-08T07:52:08.251Z"
35
+ },
36
+ {
37
+ "id": "CLAUDE-CODE-SKILLS",
38
+ "service": "Claude Code skills documentation",
39
+ "kind": "official-docs",
40
+ "stability": "vendor-harness",
41
+ "thresholdDays": 14,
42
+ "critical": true,
43
+ "urls": {
44
+ "primary": "https://code.claude.com/docs/en/skills"
45
+ },
46
+ "versionDetection": {
47
+ "type": "manual-review"
48
+ },
49
+ "topics": [
50
+ "skills-standard"
51
+ ],
52
+ "affected": [
53
+ "ref:standards"
54
+ ],
55
+ "checksum": "a2651c4f1a7aa43978c549c9f376c47b738ac53532fecc8168aee0d3b796469a",
56
+ "retrievedAt": "2026-08-08T07:52:08.251Z"
57
+ },
58
+ {
59
+ "id": "CODEX-SKILLS",
60
+ "service": "Codex skills documentation",
61
+ "kind": "official-docs",
62
+ "stability": "vendor-harness",
63
+ "thresholdDays": 14,
64
+ "critical": true,
65
+ "urls": {
66
+ "primary": "https://developers.openai.com/codex/skills"
67
+ },
68
+ "versionDetection": {
69
+ "type": "manual-review"
70
+ },
71
+ "topics": [
72
+ "skills-standard"
73
+ ],
74
+ "affected": [
75
+ "ref:standards"
76
+ ],
77
+ "checksum": "b7667a87600436ae5d70e414a2a0fcb207e11c8ffdb7a28d93637980f3ff565d",
78
+ "retrievedAt": "2026-08-08T07:52:08.251Z"
79
+ },
80
+ {
81
+ "id": "HERMES-SKILLS",
82
+ "service": "Hermes Agent skills documentation",
83
+ "kind": "official-docs",
84
+ "stability": "vendor-harness",
85
+ "thresholdDays": 14,
86
+ "critical": true,
87
+ "urls": {
88
+ "primary": "https://hermes-agent.nousresearch.com/docs/user-guide/features/skills"
89
+ },
90
+ "versionDetection": {
91
+ "type": "manual-review"
92
+ },
93
+ "topics": [
94
+ "skills-standard"
95
+ ],
96
+ "affected": [
97
+ "ref:standards"
98
+ ],
99
+ "checksum": "c4ed10a90e9303adb7a80aa5531ea92a1debbe6c4edff588199b123429065893",
100
+ "retrievedAt": "2026-08-08T07:52:08.251Z"
101
+ }
102
+ ]
103
+ }