agtmls 0.0.3__tar.gz

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 (329) hide show
  1. agtmls-0.0.3/.agents/plugins/marketplace.json +16 -0
  2. agtmls-0.0.3/.claude-plugin/marketplace.json +35 -0
  3. agtmls-0.0.3/.claude-plugin/plugin.json +12 -0
  4. agtmls-0.0.3/.codex-plugin/plugin.json +34 -0
  5. agtmls-0.0.3/.corral-state.json +4 -0
  6. agtmls-0.0.3/.cursor-plugin/plugin.json +23 -0
  7. agtmls-0.0.3/.gitignore +9 -0
  8. agtmls-0.0.3/.kimi-plugin/plugin.json +24 -0
  9. agtmls-0.0.3/.opencode/INSTALL.md +33 -0
  10. agtmls-0.0.3/CATALOG.md +46 -0
  11. agtmls-0.0.3/CHANGELOG.md +145 -0
  12. agtmls-0.0.3/CONTRIBUTING.md +124 -0
  13. agtmls-0.0.3/GEMINI.md +4 -0
  14. agtmls-0.0.3/LICENSE +21 -0
  15. agtmls-0.0.3/PKG-INFO +429 -0
  16. agtmls-0.0.3/README.md +409 -0
  17. agtmls-0.0.3/RELEASE.md +40 -0
  18. agtmls-0.0.3/SBOM.spdx.json +2016 -0
  19. agtmls-0.0.3/SECURITY.md +33 -0
  20. agtmls-0.0.3/VERSIONING.md +30 -0
  21. agtmls-0.0.3/agent-card.json +184 -0
  22. agtmls-0.0.3/checks.json +62 -0
  23. agtmls-0.0.3/commands/README.md +10 -0
  24. agtmls-0.0.3/commands/agtmls.md +16 -0
  25. agtmls-0.0.3/docs/adr/0001-flat-skill-tree.md +41 -0
  26. agtmls-0.0.3/docs/adr/0002-generated-portable-frontmatter.md +35 -0
  27. agtmls-0.0.3/docs/adr/0003-bundled-registry-in-the-wheel.md +39 -0
  28. agtmls-0.0.3/docs/adr/0004-allowed-tools-declares-full-capability.md +41 -0
  29. agtmls-0.0.3/docs/adr/README.md +52 -0
  30. agtmls-0.0.3/docs/checks.md +72 -0
  31. agtmls-0.0.3/docs/cli.md +46 -0
  32. agtmls-0.0.3/docs/tag-protection.md +45 -0
  33. agtmls-0.0.3/evals/README.md +46 -0
  34. agtmls-0.0.3/evals/behavioral/README.md +27 -0
  35. agtmls-0.0.3/evals/behavioral/cases/agent-loop-design.json +19 -0
  36. agtmls-0.0.3/evals/behavioral/cases/ai-supply-chain-security.json +19 -0
  37. agtmls-0.0.3/evals/behavioral/cases/cross-language-port.json +27 -0
  38. agtmls-0.0.3/evals/behavioral/cases/handoff.json +24 -0
  39. agtmls-0.0.3/evals/behavioral/cases/noyalib-architecture-contract.json +23 -0
  40. agtmls-0.0.3/evals/behavioral/cases/noyalib-build-and-env.json +24 -0
  41. agtmls-0.0.3/evals/behavioral/cases/noyalib-change-control.json +24 -0
  42. agtmls-0.0.3/evals/behavioral/cases/noyalib-ci-and-release.json +24 -0
  43. agtmls-0.0.3/evals/behavioral/cases/noyalib-config-and-flags.json +24 -0
  44. agtmls-0.0.3/evals/behavioral/cases/noyalib-coverage-campaign.json +24 -0
  45. agtmls-0.0.3/evals/behavioral/cases/noyalib-debugging-playbook.json +24 -0
  46. agtmls-0.0.3/evals/behavioral/cases/noyalib-diagnostics-and-tooling.json +25 -0
  47. agtmls-0.0.3/evals/behavioral/cases/noyalib-docs-and-writing.json +24 -0
  48. agtmls-0.0.3/evals/behavioral/cases/noyalib-external-positioning.json +24 -0
  49. agtmls-0.0.3/evals/behavioral/cases/noyalib-failure-archaeology.json +24 -0
  50. agtmls-0.0.3/evals/behavioral/cases/noyalib-research-frontier.json +24 -0
  51. agtmls-0.0.3/evals/behavioral/cases/noyalib-validation-and-qa.json +24 -0
  52. agtmls-0.0.3/evals/behavioral/cases/pr-review-and-release.json +19 -0
  53. agtmls-0.0.3/evals/behavioral/cases/receiving-code-review.json +24 -0
  54. agtmls-0.0.3/evals/behavioral/cases/systematic-debugging.json +25 -0
  55. agtmls-0.0.3/evals/behavioral/cases/test-driven-development.json +25 -0
  56. agtmls-0.0.3/evals/behavioral/cases/using-agtmls.json +18 -0
  57. agtmls-0.0.3/evals/behavioral/cases/verification-before-completion.json +24 -0
  58. agtmls-0.0.3/evals/behavioral/cases/web-research-and-source-triage.json +19 -0
  59. agtmls-0.0.3/evals/behavioral/cases/writing-plans.json +24 -0
  60. agtmls-0.0.3/evals/behavioral/cases/yaml-domain-reference.json +24 -0
  61. agtmls-0.0.3/evals/cases/agent-loop-design.json +11 -0
  62. agtmls-0.0.3/evals/cases/ai-supply-chain-security.json +11 -0
  63. agtmls-0.0.3/evals/cases/cross-language-port.json +13 -0
  64. agtmls-0.0.3/evals/cases/handoff.json +13 -0
  65. agtmls-0.0.3/evals/cases/noyalib-architecture-contract.json +13 -0
  66. agtmls-0.0.3/evals/cases/noyalib-build-and-env.json +13 -0
  67. agtmls-0.0.3/evals/cases/noyalib-change-control.json +13 -0
  68. agtmls-0.0.3/evals/cases/noyalib-ci-and-release.json +14 -0
  69. agtmls-0.0.3/evals/cases/noyalib-config-and-flags.json +13 -0
  70. agtmls-0.0.3/evals/cases/noyalib-coverage-campaign.json +13 -0
  71. agtmls-0.0.3/evals/cases/noyalib-debugging-playbook.json +13 -0
  72. agtmls-0.0.3/evals/cases/noyalib-diagnostics-and-tooling.json +13 -0
  73. agtmls-0.0.3/evals/cases/noyalib-docs-and-writing.json +13 -0
  74. agtmls-0.0.3/evals/cases/noyalib-external-positioning.json +13 -0
  75. agtmls-0.0.3/evals/cases/noyalib-failure-archaeology.json +13 -0
  76. agtmls-0.0.3/evals/cases/noyalib-research-frontier.json +13 -0
  77. agtmls-0.0.3/evals/cases/noyalib-validation-and-qa.json +13 -0
  78. agtmls-0.0.3/evals/cases/pr-review-and-release.json +11 -0
  79. agtmls-0.0.3/evals/cases/receiving-code-review.json +13 -0
  80. agtmls-0.0.3/evals/cases/systematic-debugging.json +13 -0
  81. agtmls-0.0.3/evals/cases/test-driven-development.json +13 -0
  82. agtmls-0.0.3/evals/cases/using-agtmls.json +13 -0
  83. agtmls-0.0.3/evals/cases/verification-before-completion.json +13 -0
  84. agtmls-0.0.3/evals/cases/web-research-and-source-triage.json +11 -0
  85. agtmls-0.0.3/evals/cases/writing-plans.json +13 -0
  86. agtmls-0.0.3/evals/cases/yaml-domain-reference.json +13 -0
  87. agtmls-0.0.3/gemini-extension.json +6 -0
  88. agtmls-0.0.3/index.json +1771 -0
  89. agtmls-0.0.3/lifecycle.json +57 -0
  90. agtmls-0.0.3/mcp-resources.json +187 -0
  91. agtmls-0.0.3/plugin.json +5 -0
  92. agtmls-0.0.3/profiles.json +87 -0
  93. agtmls-0.0.3/provenance.json +83 -0
  94. agtmls-0.0.3/providers.json +149 -0
  95. agtmls-0.0.3/pyproject.toml +77 -0
  96. agtmls-0.0.3/references/README.md +17 -0
  97. agtmls-0.0.3/references/definition-of-done.md +49 -0
  98. agtmls-0.0.3/references/noyalib-bundle.md +126 -0
  99. agtmls-0.0.3/references/registry-schema.md +100 -0
  100. agtmls-0.0.3/scripts/agtmls-doctor.py +182 -0
  101. agtmls-0.0.3/scripts/agtmls.py +522 -0
  102. agtmls-0.0.3/scripts/bench.py +15 -0
  103. agtmls-0.0.3/scripts/bump-version.py +120 -0
  104. agtmls-0.0.3/scripts/check-skill-collisions.py +117 -0
  105. agtmls-0.0.3/scripts/evolve-session.py +24 -0
  106. agtmls-0.0.3/scripts/export-registry.py +130 -0
  107. agtmls-0.0.3/scripts/generate-agent-card.py +18 -0
  108. agtmls-0.0.3/scripts/generate-catalog.py +67 -0
  109. agtmls-0.0.3/scripts/generate-docs-site.py +124 -0
  110. agtmls-0.0.3/scripts/generate-mcp-resources.py +18 -0
  111. agtmls-0.0.3/scripts/generate-plugin-manifests.py +230 -0
  112. agtmls-0.0.3/scripts/generate-provenance.py +28 -0
  113. agtmls-0.0.3/scripts/generate-sbom.py +28 -0
  114. agtmls-0.0.3/scripts/generate-skill-index.py +254 -0
  115. agtmls-0.0.3/scripts/import-skill.py +91 -0
  116. agtmls-0.0.3/scripts/next-version.py +62 -0
  117. agtmls-0.0.3/scripts/propose-skill-from-session.py +128 -0
  118. agtmls-0.0.3/scripts/provider-install.py +76 -0
  119. agtmls-0.0.3/scripts/record-evidence.py +14 -0
  120. agtmls-0.0.3/scripts/registry-diff.py +58 -0
  121. agtmls-0.0.3/scripts/release-check.py +41 -0
  122. agtmls-0.0.3/scripts/release-dry-run.py +104 -0
  123. agtmls-0.0.3/scripts/release-pack.py +62 -0
  124. agtmls-0.0.3/scripts/run-all-checks.py +159 -0
  125. agtmls-0.0.3/scripts/run-behavioral-evals.py +77 -0
  126. agtmls-0.0.3/scripts/run-trigger-evals.py +122 -0
  127. agtmls-0.0.3/scripts/run-unit-tests.py +541 -0
  128. agtmls-0.0.3/scripts/scaffold-skill.py +87 -0
  129. agtmls-0.0.3/scripts/setup-workspace.sh +217 -0
  130. agtmls-0.0.3/scripts/smoke-bump-version-check.py +34 -0
  131. agtmls-0.0.3/scripts/smoke-cli.py +111 -0
  132. agtmls-0.0.3/scripts/smoke-evolve-evidence.py +22 -0
  133. agtmls-0.0.3/scripts/smoke-export.py +81 -0
  134. agtmls-0.0.3/scripts/smoke-import.py +51 -0
  135. agtmls-0.0.3/scripts/smoke-install-profiles.py +68 -0
  136. agtmls-0.0.3/scripts/smoke-install.py +73 -0
  137. agtmls-0.0.3/scripts/smoke-live-providers.py +111 -0
  138. agtmls-0.0.3/scripts/smoke-next-version.py +41 -0
  139. agtmls-0.0.3/scripts/smoke-proposal.py +69 -0
  140. agtmls-0.0.3/scripts/smoke-provider-install.py +53 -0
  141. agtmls-0.0.3/scripts/smoke-release-dry-run.py +33 -0
  142. agtmls-0.0.3/scripts/smoke-release-pack.py +69 -0
  143. agtmls-0.0.3/scripts/smoke-scaffold.py +80 -0
  144. agtmls-0.0.3/scripts/sync-skill-frontmatter.py +194 -0
  145. agtmls-0.0.3/scripts/validate-check-manifest.py +69 -0
  146. agtmls-0.0.3/scripts/validate-cli-surface.py +97 -0
  147. agtmls-0.0.3/scripts/validate-commands.py +71 -0
  148. agtmls-0.0.3/scripts/validate-doc-links.py +63 -0
  149. agtmls-0.0.3/scripts/validate-docs-site.py +35 -0
  150. agtmls-0.0.3/scripts/validate-eval-cases.py +108 -0
  151. agtmls-0.0.3/scripts/validate-generated-artifacts.py +36 -0
  152. agtmls-0.0.3/scripts/validate-gitignore.py +46 -0
  153. agtmls-0.0.3/scripts/validate-governance.py +18 -0
  154. agtmls-0.0.3/scripts/validate-json-files.py +54 -0
  155. agtmls-0.0.3/scripts/validate-licence-headers.py +76 -0
  156. agtmls-0.0.3/scripts/validate-lifecycle.py +50 -0
  157. agtmls-0.0.3/scripts/validate-packaging.py +144 -0
  158. agtmls-0.0.3/scripts/validate-plugin-manifest.py +202 -0
  159. agtmls-0.0.3/scripts/validate-profiles.py +61 -0
  160. agtmls-0.0.3/scripts/validate-providers.py +93 -0
  161. agtmls-0.0.3/scripts/validate-python-scripts.py +39 -0
  162. agtmls-0.0.3/scripts/validate-release.py +46 -0
  163. agtmls-0.0.3/scripts/validate-secrets.py +54 -0
  164. agtmls-0.0.3/scripts/validate-shell-syntax.py +49 -0
  165. agtmls-0.0.3/scripts/validate-skill-index.py +80 -0
  166. agtmls-0.0.3/scripts/validate-skill-metadata.py +92 -0
  167. agtmls-0.0.3/scripts/validate-skills.py +182 -0
  168. agtmls-0.0.3/scripts/validate-spec-conformance.py +78 -0
  169. agtmls-0.0.3/scripts/validate-system-prompts.py +48 -0
  170. agtmls-0.0.3/scripts/validate-templates.py +54 -0
  171. agtmls-0.0.3/scripts/validate-version-policy.py +121 -0
  172. agtmls-0.0.3/scripts/verify-release-assets.py +128 -0
  173. agtmls-0.0.3/skills/agent-loop-design/SKILL.md +32 -0
  174. agtmls-0.0.3/skills/agent-loop-design/metadata.json +20 -0
  175. agtmls-0.0.3/skills/agent-loop-design/reference.md +16 -0
  176. agtmls-0.0.3/skills/ai-supply-chain-security/SKILL.md +36 -0
  177. agtmls-0.0.3/skills/ai-supply-chain-security/metadata.json +20 -0
  178. agtmls-0.0.3/skills/ai-supply-chain-security/reference.md +16 -0
  179. agtmls-0.0.3/skills/cross-language-port/SKILL.md +196 -0
  180. agtmls-0.0.3/skills/cross-language-port/examples/README.md +51 -0
  181. agtmls-0.0.3/skills/cross-language-port/examples/bash-to-python-pathdedupe/README.md +51 -0
  182. agtmls-0.0.3/skills/cross-language-port/examples/bash-to-python-pathdedupe/corpus/expected.txt +8 -0
  183. agtmls-0.0.3/skills/cross-language-port/examples/bash-to-python-pathdedupe/corpus/input.txt +8 -0
  184. agtmls-0.0.3/skills/cross-language-port/examples/bash-to-python-pathdedupe/port.py +31 -0
  185. agtmls-0.0.3/skills/cross-language-port/examples/bash-to-python-pathdedupe/reference.sh +34 -0
  186. agtmls-0.0.3/skills/cross-language-port/examples/bash-to-python-pathdedupe/verify.sh +6 -0
  187. agtmls-0.0.3/skills/cross-language-port/examples/boundary-traps/README.md +39 -0
  188. agtmls-0.0.3/skills/cross-language-port/examples/boundary-traps/integer-width/verify.sh +34 -0
  189. agtmls-0.0.3/skills/cross-language-port/examples/go-to-rust-fraction/README.md +42 -0
  190. agtmls-0.0.3/skills/cross-language-port/examples/go-to-rust-fraction/corpus/expected.txt +9 -0
  191. agtmls-0.0.3/skills/cross-language-port/examples/go-to-rust-fraction/corpus/input.txt +9 -0
  192. agtmls-0.0.3/skills/cross-language-port/examples/go-to-rust-fraction/port.rs +85 -0
  193. agtmls-0.0.3/skills/cross-language-port/examples/go-to-rust-fraction/reference.go +70 -0
  194. agtmls-0.0.3/skills/cross-language-port/examples/go-to-rust-fraction/verify.sh +7 -0
  195. agtmls-0.0.3/skills/cross-language-port/examples/js-to-ts-configvalidate/README.md +44 -0
  196. agtmls-0.0.3/skills/cross-language-port/examples/js-to-ts-configvalidate/corpus/expected.txt +8 -0
  197. agtmls-0.0.3/skills/cross-language-port/examples/js-to-ts-configvalidate/corpus/input.txt +8 -0
  198. agtmls-0.0.3/skills/cross-language-port/examples/js-to-ts-configvalidate/package.json +4 -0
  199. agtmls-0.0.3/skills/cross-language-port/examples/js-to-ts-configvalidate/port.ts +50 -0
  200. agtmls-0.0.3/skills/cross-language-port/examples/js-to-ts-configvalidate/reference.js +34 -0
  201. agtmls-0.0.3/skills/cross-language-port/examples/js-to-ts-configvalidate/verify.sh +5 -0
  202. agtmls-0.0.3/skills/cross-language-port/examples/py-to-cpp-hexcolor/README.md +42 -0
  203. agtmls-0.0.3/skills/cross-language-port/examples/py-to-cpp-hexcolor/compile_flags.txt +3 -0
  204. agtmls-0.0.3/skills/cross-language-port/examples/py-to-cpp-hexcolor/corpus/expected.txt +8 -0
  205. agtmls-0.0.3/skills/cross-language-port/examples/py-to-cpp-hexcolor/corpus/input.txt +8 -0
  206. agtmls-0.0.3/skills/cross-language-port/examples/py-to-cpp-hexcolor/port.cpp +56 -0
  207. agtmls-0.0.3/skills/cross-language-port/examples/py-to-cpp-hexcolor/reference.py +36 -0
  208. agtmls-0.0.3/skills/cross-language-port/examples/py-to-cpp-hexcolor/verify.sh +7 -0
  209. agtmls-0.0.3/skills/cross-language-port/examples/py-to-go-duration/README.md +47 -0
  210. agtmls-0.0.3/skills/cross-language-port/examples/py-to-go-duration/corpus/expected.txt +9 -0
  211. agtmls-0.0.3/skills/cross-language-port/examples/py-to-go-duration/corpus/input.txt +9 -0
  212. agtmls-0.0.3/skills/cross-language-port/examples/py-to-go-duration/port.go +54 -0
  213. agtmls-0.0.3/skills/cross-language-port/examples/py-to-go-duration/reference.py +38 -0
  214. agtmls-0.0.3/skills/cross-language-port/examples/py-to-go-duration/verify.sh +5 -0
  215. agtmls-0.0.3/skills/cross-language-port/examples/py-to-rust-iban/README.md +51 -0
  216. agtmls-0.0.3/skills/cross-language-port/examples/py-to-rust-iban/corpus/expected.txt +8 -0
  217. agtmls-0.0.3/skills/cross-language-port/examples/py-to-rust-iban/corpus/input.txt +8 -0
  218. agtmls-0.0.3/skills/cross-language-port/examples/py-to-rust-iban/port.rs +91 -0
  219. agtmls-0.0.3/skills/cross-language-port/examples/py-to-rust-iban/reference.py +37 -0
  220. agtmls-0.0.3/skills/cross-language-port/examples/py-to-rust-iban/verify.sh +9 -0
  221. agtmls-0.0.3/skills/cross-language-port/examples/ruby-to-python-histogram/README.md +41 -0
  222. agtmls-0.0.3/skills/cross-language-port/examples/ruby-to-python-histogram/corpus/expected.txt +8 -0
  223. agtmls-0.0.3/skills/cross-language-port/examples/ruby-to-python-histogram/corpus/input.txt +3 -0
  224. agtmls-0.0.3/skills/cross-language-port/examples/ruby-to-python-histogram/port.py +25 -0
  225. agtmls-0.0.3/skills/cross-language-port/examples/ruby-to-python-histogram/reference.rb +15 -0
  226. agtmls-0.0.3/skills/cross-language-port/examples/ruby-to-python-histogram/verify.sh +5 -0
  227. agtmls-0.0.3/skills/cross-language-port/examples/rust-to-swift-op/README.md +38 -0
  228. agtmls-0.0.3/skills/cross-language-port/examples/rust-to-swift-op/corpus/expected.txt +8 -0
  229. agtmls-0.0.3/skills/cross-language-port/examples/rust-to-swift-op/corpus/input.txt +8 -0
  230. agtmls-0.0.3/skills/cross-language-port/examples/rust-to-swift-op/port.swift +53 -0
  231. agtmls-0.0.3/skills/cross-language-port/examples/rust-to-swift-op/reference.rs +50 -0
  232. agtmls-0.0.3/skills/cross-language-port/examples/rust-to-swift-op/verify.sh +7 -0
  233. agtmls-0.0.3/skills/cross-language-port/harness/README.md +67 -0
  234. agtmls-0.0.3/skills/cross-language-port/harness/golden-diff.sh +45 -0
  235. agtmls-0.0.3/skills/cross-language-port/harness/port-check.sh +106 -0
  236. agtmls-0.0.3/skills/cross-language-port/harness/templates/fast-check_diff.mjs +24 -0
  237. agtmls-0.0.3/skills/cross-language-port/harness/templates/hypothesis_diff.py +29 -0
  238. agtmls-0.0.3/skills/cross-language-port/harness/templates/proptest_diff.rs +44 -0
  239. agtmls-0.0.3/skills/cross-language-port/metadata.json +23 -0
  240. agtmls-0.0.3/skills/cross-language-port/reference.md +291 -0
  241. agtmls-0.0.3/skills/cross-language-port/triggers.md +74 -0
  242. agtmls-0.0.3/skills/handoff/SKILL.md +117 -0
  243. agtmls-0.0.3/skills/handoff/metadata.json +20 -0
  244. agtmls-0.0.3/skills/handoff/reference.md +137 -0
  245. agtmls-0.0.3/skills/noyalib-architecture-contract/SKILL.md +221 -0
  246. agtmls-0.0.3/skills/noyalib-architecture-contract/metadata.json +23 -0
  247. agtmls-0.0.3/skills/noyalib-architecture-contract/reference.md +262 -0
  248. agtmls-0.0.3/skills/noyalib-build-and-env/SKILL.md +280 -0
  249. agtmls-0.0.3/skills/noyalib-build-and-env/metadata.json +23 -0
  250. agtmls-0.0.3/skills/noyalib-build-and-env/reference.md +84 -0
  251. agtmls-0.0.3/skills/noyalib-change-control/SKILL.md +308 -0
  252. agtmls-0.0.3/skills/noyalib-change-control/metadata.json +23 -0
  253. agtmls-0.0.3/skills/noyalib-change-control/reference.md +311 -0
  254. agtmls-0.0.3/skills/noyalib-ci-and-release/SKILL.md +268 -0
  255. agtmls-0.0.3/skills/noyalib-ci-and-release/metadata.json +23 -0
  256. agtmls-0.0.3/skills/noyalib-ci-and-release/reference.md +450 -0
  257. agtmls-0.0.3/skills/noyalib-config-and-flags/SKILL.md +317 -0
  258. agtmls-0.0.3/skills/noyalib-config-and-flags/metadata.json +23 -0
  259. agtmls-0.0.3/skills/noyalib-config-and-flags/reference.md +180 -0
  260. agtmls-0.0.3/skills/noyalib-coverage-campaign/SKILL.md +355 -0
  261. agtmls-0.0.3/skills/noyalib-coverage-campaign/metadata.json +23 -0
  262. agtmls-0.0.3/skills/noyalib-coverage-campaign/reference.md +426 -0
  263. agtmls-0.0.3/skills/noyalib-debugging-playbook/SKILL.md +306 -0
  264. agtmls-0.0.3/skills/noyalib-debugging-playbook/metadata.json +23 -0
  265. agtmls-0.0.3/skills/noyalib-debugging-playbook/reference.md +145 -0
  266. agtmls-0.0.3/skills/noyalib-diagnostics-and-tooling/SKILL.md +389 -0
  267. agtmls-0.0.3/skills/noyalib-diagnostics-and-tooling/metadata.json +23 -0
  268. agtmls-0.0.3/skills/noyalib-diagnostics-and-tooling/reference.md +280 -0
  269. agtmls-0.0.3/skills/noyalib-docs-and-writing/SKILL.md +274 -0
  270. agtmls-0.0.3/skills/noyalib-docs-and-writing/metadata.json +23 -0
  271. agtmls-0.0.3/skills/noyalib-docs-and-writing/reference.md +193 -0
  272. agtmls-0.0.3/skills/noyalib-external-positioning/SKILL.md +240 -0
  273. agtmls-0.0.3/skills/noyalib-external-positioning/metadata.json +23 -0
  274. agtmls-0.0.3/skills/noyalib-external-positioning/reference.md +173 -0
  275. agtmls-0.0.3/skills/noyalib-failure-archaeology/SKILL.md +178 -0
  276. agtmls-0.0.3/skills/noyalib-failure-archaeology/metadata.json +23 -0
  277. agtmls-0.0.3/skills/noyalib-failure-archaeology/reference.md +508 -0
  278. agtmls-0.0.3/skills/noyalib-research-frontier/SKILL.md +207 -0
  279. agtmls-0.0.3/skills/noyalib-research-frontier/metadata.json +23 -0
  280. agtmls-0.0.3/skills/noyalib-research-frontier/reference.md +329 -0
  281. agtmls-0.0.3/skills/noyalib-validation-and-qa/SKILL.md +263 -0
  282. agtmls-0.0.3/skills/noyalib-validation-and-qa/metadata.json +23 -0
  283. agtmls-0.0.3/skills/noyalib-validation-and-qa/reference.md +147 -0
  284. agtmls-0.0.3/skills/pr-review-and-release/SKILL.md +32 -0
  285. agtmls-0.0.3/skills/pr-review-and-release/metadata.json +20 -0
  286. agtmls-0.0.3/skills/pr-review-and-release/reference.md +16 -0
  287. agtmls-0.0.3/skills/receiving-code-review/SKILL.md +125 -0
  288. agtmls-0.0.3/skills/receiving-code-review/metadata.json +20 -0
  289. agtmls-0.0.3/skills/receiving-code-review/reference.md +127 -0
  290. agtmls-0.0.3/skills/systematic-debugging/SKILL.md +140 -0
  291. agtmls-0.0.3/skills/systematic-debugging/metadata.json +22 -0
  292. agtmls-0.0.3/skills/systematic-debugging/reference.md +144 -0
  293. agtmls-0.0.3/skills/test-driven-development/SKILL.md +142 -0
  294. agtmls-0.0.3/skills/test-driven-development/metadata.json +22 -0
  295. agtmls-0.0.3/skills/test-driven-development/reference.md +118 -0
  296. agtmls-0.0.3/skills/using-agtmls/SKILL.md +83 -0
  297. agtmls-0.0.3/skills/using-agtmls/metadata.json +20 -0
  298. agtmls-0.0.3/skills/using-agtmls/reference.md +54 -0
  299. agtmls-0.0.3/skills/verification-before-completion/SKILL.md +153 -0
  300. agtmls-0.0.3/skills/verification-before-completion/metadata.json +20 -0
  301. agtmls-0.0.3/skills/verification-before-completion/reference.md +151 -0
  302. agtmls-0.0.3/skills/web-research-and-source-triage/SKILL.md +32 -0
  303. agtmls-0.0.3/skills/web-research-and-source-triage/metadata.json +20 -0
  304. agtmls-0.0.3/skills/web-research-and-source-triage/reference.md +16 -0
  305. agtmls-0.0.3/skills/writing-plans/SKILL.md +121 -0
  306. agtmls-0.0.3/skills/writing-plans/metadata.json +20 -0
  307. agtmls-0.0.3/skills/writing-plans/reference.md +143 -0
  308. agtmls-0.0.3/skills/yaml-domain-reference/SKILL.md +362 -0
  309. agtmls-0.0.3/skills/yaml-domain-reference/metadata.json +23 -0
  310. agtmls-0.0.3/skills/yaml-domain-reference/reference.md +221 -0
  311. agtmls-0.0.3/src/agtmls/__init__.py +5 -0
  312. agtmls-0.0.3/src/agtmls/__main__.py +10 -0
  313. agtmls-0.0.3/src/agtmls/cli.py +99 -0
  314. agtmls-0.0.3/system-prompts/_base.md +113 -0
  315. agtmls-0.0.3/system-prompts/bash.md +138 -0
  316. agtmls-0.0.3/system-prompts/cpp.md +146 -0
  317. agtmls-0.0.3/system-prompts/go.md +156 -0
  318. agtmls-0.0.3/system-prompts/javascript.md +142 -0
  319. agtmls-0.0.3/system-prompts/python.md +165 -0
  320. agtmls-0.0.3/system-prompts/ruby.md +156 -0
  321. agtmls-0.0.3/system-prompts/rust.md +135 -0
  322. agtmls-0.0.3/system-prompts/swift.md +135 -0
  323. agtmls-0.0.3/system-prompts/typescript.md +142 -0
  324. agtmls-0.0.3/templates/README.md +12 -0
  325. agtmls-0.0.3/templates/evals/behavioral.json +21 -0
  326. agtmls-0.0.3/templates/evals/routing.json +11 -0
  327. agtmls-0.0.3/templates/skill/SKILL.md +34 -0
  328. agtmls-0.0.3/templates/skill/metadata.json +20 -0
  329. agtmls-0.0.3/templates/skill/reference.md +9 -0
@@ -0,0 +1,16 @@
1
+ {
2
+ "interface": {
3
+ "displayName": "AgtMLS"
4
+ },
5
+ "name": "agtmls",
6
+ "plugins": [
7
+ {
8
+ "category": "Developer Tools",
9
+ "name": "agtmls",
10
+ "source": {
11
+ "source": "url",
12
+ "url": "./"
13
+ }
14
+ }
15
+ ]
16
+ }
@@ -0,0 +1,35 @@
1
+ {
2
+ "description": "The universal agent skills registry — polyglot engineering skills, system prompts, and commands for Claude Code and compatible agents.",
3
+ "name": "agtmls",
4
+ "owner": {
5
+ "name": "Sebastien Rousseau",
6
+ "url": "https://github.com/sebastienrousseau"
7
+ },
8
+ "plugins": [
9
+ {
10
+ "author": {
11
+ "name": "Sebastien Rousseau"
12
+ },
13
+ "category": "engineering",
14
+ "commands": "./commands",
15
+ "description": "The universal agent skills registry — polyglot engineering skills and system prompts, symlinked or installed into consumer repos.",
16
+ "displayName": "AgtMLS",
17
+ "homepage": "https://github.com/sebastienrousseau/agtmls",
18
+ "keywords": [
19
+ "skills",
20
+ "registry",
21
+ "polyglot",
22
+ "porting",
23
+ "security",
24
+ "release"
25
+ ],
26
+ "license": "MIT",
27
+ "name": "agtmls",
28
+ "repository": "https://github.com/sebastienrousseau/agtmls",
29
+ "skills": "./skills",
30
+ "source": "./",
31
+ "version": "0.0.3"
32
+ }
33
+ ],
34
+ "version": "0.0.3"
35
+ }
@@ -0,0 +1,12 @@
1
+ {
2
+ "author": {
3
+ "name": "Sebastien Rousseau"
4
+ },
5
+ "commands": "./commands",
6
+ "description": "The universal agent skills registry — polyglot engineering skills and system prompts, symlinked or installed into consumer repos.",
7
+ "homepage": "https://github.com/sebastienrousseau/agtmls",
8
+ "license": "MIT",
9
+ "name": "agtmls",
10
+ "skills": "./skills",
11
+ "version": "0.0.3"
12
+ }
@@ -0,0 +1,34 @@
1
+ {
2
+ "author": {
3
+ "name": "Sebastien Rousseau"
4
+ },
5
+ "commands": "./commands",
6
+ "description": "The universal agent skills registry — polyglot engineering skills and system prompts, symlinked or installed into consumer repos.",
7
+ "homepage": "https://github.com/sebastienrousseau/agtmls",
8
+ "interface": {
9
+ "capabilities": [
10
+ "Read",
11
+ "Write",
12
+ "Interactive"
13
+ ],
14
+ "developerName": "Sebastien Rousseau",
15
+ "displayName": "AgtMLS",
16
+ "shortDescription": "The universal agent skills registry",
17
+ "websiteURL": "https://github.com/sebastienrousseau/agtmls"
18
+ },
19
+ "keywords": [
20
+ "skills",
21
+ "registry",
22
+ "polyglot",
23
+ "porting",
24
+ "security",
25
+ "release"
26
+ ],
27
+ "license": "MIT",
28
+ "name": "agtmls",
29
+ "repository": "https://github.com/sebastienrousseau/agtmls",
30
+ "skills": [
31
+ "./skills"
32
+ ],
33
+ "version": "0.0.3"
34
+ }
@@ -0,0 +1,4 @@
1
+ {
2
+ "last_synced_pushed_at": "2026-07-21T23:01:48Z",
3
+ "last_synced_at": "2026-08-04T13:27:59.212144Z"
4
+ }
@@ -0,0 +1,23 @@
1
+ {
2
+ "author": {
3
+ "name": "Sebastien Rousseau"
4
+ },
5
+ "description": "The universal agent skills registry — polyglot engineering skills and system prompts, symlinked or installed into consumer repos.",
6
+ "displayName": "AgtMLS",
7
+ "homepage": "https://github.com/sebastienrousseau/agtmls",
8
+ "keywords": [
9
+ "skills",
10
+ "registry",
11
+ "polyglot",
12
+ "porting",
13
+ "security",
14
+ "release"
15
+ ],
16
+ "license": "MIT",
17
+ "name": "agtmls",
18
+ "repository": "https://github.com/sebastienrousseau/agtmls",
19
+ "skills": [
20
+ "./skills"
21
+ ],
22
+ "version": "0.0.3"
23
+ }
@@ -0,0 +1,9 @@
1
+ .DS_Store
2
+ *.swp
3
+ *.swo
4
+ *~
5
+ .ruff_cache/
6
+ __pycache__/
7
+ .agtmls/
8
+ dist/
9
+ *.egg-info/
@@ -0,0 +1,24 @@
1
+ {
2
+ "author": {
3
+ "name": "Sebastien Rousseau"
4
+ },
5
+ "description": "The universal agent skills registry — polyglot engineering skills and system prompts, symlinked or installed into consumer repos.",
6
+ "homepage": "https://github.com/sebastienrousseau/agtmls",
7
+ "keywords": [
8
+ "skills",
9
+ "registry",
10
+ "polyglot",
11
+ "porting",
12
+ "security",
13
+ "release"
14
+ ],
15
+ "license": "MIT",
16
+ "name": "agtmls",
17
+ "sessionStart": {
18
+ "skill": "using-agtmls"
19
+ },
20
+ "skills": [
21
+ "./skills"
22
+ ],
23
+ "version": "0.0.3"
24
+ }
@@ -0,0 +1,33 @@
1
+ <!-- SPDX-FileCopyrightText: 2026 Sebastien Rousseau -->
2
+ <!-- SPDX-License-Identifier: MIT -->
3
+ <!-- Generated by scripts/generate-plugin-manifests.py; do not edit by hand. -->
4
+
5
+ # Installing AgtMLS for OpenCode
6
+
7
+ OpenCode has no plugin manifest for skill bundles. It loads Markdown
8
+ guidance through the `instructions` array in `opencode.json`, which takes
9
+ paths and glob patterns.
10
+
11
+ Clone the hub, then add it to your global or project `opencode.json`:
12
+
13
+ ```json
14
+ {
15
+ "instructions": [
16
+ "~/dev/agtmls/system-prompts/_base.md",
17
+ "~/dev/agtmls/skills/*/SKILL.md"
18
+ ]
19
+ }
20
+ ```
21
+
22
+ One glob covers the catalog: the skill tree is flat, so every skill is
23
+ exactly one level under `skills/`.
24
+
25
+ This loads every skill body eagerly, which spends context that a native
26
+ progressive-disclosure install would not. Prefer a narrower glob, or
27
+ export a profile and point `instructions` at that instead:
28
+
29
+ ```sh
30
+ python3 scripts/agtmls.py export --provider generic --profile minimal --out-dir dist
31
+ ```
32
+
33
+ Verify by asking OpenCode: "which AgtMLS skill applies here?"
@@ -0,0 +1,46 @@
1
+ <!-- SPDX-FileCopyrightText: 2026 Sebastien Rousseau -->
2
+ <!-- SPDX-License-Identifier: MIT -->
3
+ <!-- Generated by scripts/generate-catalog.py; do not edit by hand. -->
4
+
5
+ # AgtMLS Catalog
6
+
7
+ Registry version: `0.0.3`
8
+ Skills: `26`
9
+ Commands: `1`
10
+
11
+ ## Skills
12
+
13
+ | Name | Bundle | Tags | Path |
14
+ |---|---|---|---|
15
+ | `agent-loop-design` | `loops` | loops, validation | `skills/agent-loop-design` |
16
+ | `ai-supply-chain-security` | `security` | release, security, validation | `skills/ai-supply-chain-security` |
17
+ | `cross-language-port` | `general` | porting | `skills/cross-language-port` |
18
+ | `handoff` | `general` | validation | `skills/handoff` |
19
+ | `noyalib-architecture-contract` | `noyalib` | architecture, ci, noyalib | `skills/noyalib-architecture-contract` |
20
+ | `noyalib-build-and-env` | `noyalib` | coverage, diagnostics, noyalib, qa | `skills/noyalib-build-and-env` |
21
+ | `noyalib-change-control` | `noyalib` | ci, noyalib, release, security | `skills/noyalib-change-control` |
22
+ | `noyalib-ci-and-release` | `noyalib` | ci, noyalib, release | `skills/noyalib-ci-and-release` |
23
+ | `noyalib-config-and-flags` | `noyalib` | config, noyalib | `skills/noyalib-config-and-flags` |
24
+ | `noyalib-coverage-campaign` | `noyalib` | coverage, debugging, noyalib | `skills/noyalib-coverage-campaign` |
25
+ | `noyalib-debugging-playbook` | `noyalib` | debugging, noyalib, qa | `skills/noyalib-debugging-playbook` |
26
+ | `noyalib-diagnostics-and-tooling` | `noyalib` | coverage, diagnostics, noyalib, validation | `skills/noyalib-diagnostics-and-tooling` |
27
+ | `noyalib-docs-and-writing` | `noyalib` | architecture, ci, docs, noyalib, qa, release | `skills/noyalib-docs-and-writing` |
28
+ | `noyalib-external-positioning` | `noyalib` | docs, noyalib, release, yaml | `skills/noyalib-external-positioning` |
29
+ | `noyalib-failure-archaeology` | `noyalib` | ci, noyalib, validation | `skills/noyalib-failure-archaeology` |
30
+ | `noyalib-research-frontier` | `noyalib` | noyalib, research, validation | `skills/noyalib-research-frontier` |
31
+ | `noyalib-validation-and-qa` | `noyalib` | diagnostics, noyalib, qa, validation | `skills/noyalib-validation-and-qa` |
32
+ | `pr-review-and-release` | `engineering` | ci, docs, engineering, release | `skills/pr-review-and-release` |
33
+ | `receiving-code-review` | `general` | ci | `skills/receiving-code-review` |
34
+ | `systematic-debugging` | `general` | debugging, qa | `skills/systematic-debugging` |
35
+ | `test-driven-development` | `general` | qa | `skills/test-driven-development` |
36
+ | `using-agtmls` | `general` | noyalib, porting, routing | `skills/using-agtmls` |
37
+ | `verification-before-completion` | `general` | porting, qa, validation | `skills/verification-before-completion` |
38
+ | `web-research-and-source-triage` | `web-reach` | ci, debugging, docs, research, validation, web-reach | `skills/web-research-and-source-triage` |
39
+ | `writing-plans` | `general` | docs | `skills/writing-plans` |
40
+ | `yaml-domain-reference` | `noyalib` | config, noyalib, yaml | `skills/yaml-domain-reference` |
41
+
42
+ ## Commands
43
+
44
+ | Name | Description | Path |
45
+ |---|---|---|
46
+ | `agtmls` | Run the local AgtMLS registry health check. | `commands/agtmls.md` |
@@ -0,0 +1,145 @@
1
+ <!-- SPDX-FileCopyrightText: 2026 Sebastien Rousseau -->
2
+ <!-- SPDX-License-Identifier: MIT -->
3
+
4
+ # Changelog
5
+
6
+ All notable changes to AgtMLS are recorded here.
7
+
8
+ ## Unreleased
9
+
10
+ ### Added
11
+
12
+ - **A real unit-test suite for the tooling** — 65 tests across 12 cases
13
+ covering the spec validator, collision maths, frontmatter derivation,
14
+ packaging layout, manifest generation, index parsing, and the packaged CLI.
15
+ The 57-check gate validates repository *data*; these validate the
16
+ validators, which is the failure mode the gate cannot see.
17
+ - `validate-spec-conformance.py`, running the Agent Skills **reference**
18
+ implementation (`skills-ref`) over every skill. Skips cleanly when the
19
+ optional dependency is absent; CI installs it, so it always runs on a PR.
20
+ - `validate-licence-headers.py`, enforcing an SPDX header on every file that
21
+ can carry one and `license:` frontmatter on the two classes that cannot
22
+ (`SKILL.md`, `commands/*.md` must start with `---` at byte 0).
23
+ - `docs/adr/` with the first four architecture decision records, applying to
24
+ AgtMLS the ADR discipline it already requires of the projects it serves.
25
+ - `.github/CODEOWNERS`, `docs/cli.md`, `docs/checks.md`.
26
+ - Signed build provenance on releases via `actions/attest-build-provenance`,
27
+ plus a post-build step that installs the wheel and asserts it reports the
28
+ released version.
29
+ - **Six discipline skills**, general (`"bundle": null`) so they install in
30
+ every repo: `writing-plans`, `test-driven-development`,
31
+ `systematic-debugging`, `verification-before-completion`,
32
+ `receiving-code-review`, and `handoff`. They are
33
+ language- and project-agnostic, compose in phase order, and defer to a
34
+ project bundle's own rules on specifics. Adds a `discipline` install/export
35
+ profile; the `polyglot`, `noyalib`, `security`, and `research` profiles now
36
+ carry them too.
37
+ - **PyPI packaging**: `uvx agtmls ...` / `pipx install agtmls`, with the whole
38
+ registry bundled in the wheel under `agtmls/_registry/` and no runtime
39
+ dependencies. `scripts/validate-packaging.py` gates the force-include list
40
+ so a wheel cannot ship a registry the CLI can't find.
41
+ - `--copy` on `setup-workspace.sh` and `agtmls install`, materialising real
42
+ files instead of symlinks. Package installs default to it, because a wheel
43
+ in an ephemeral uvx cache cannot be the target of a durable symlink.
44
+ - `.claude-plugin/marketplace.json`, so the registry is installable with
45
+ `/plugin marketplace add sebastienrousseau/agtmls`.
46
+ - `scripts/sync-skill-frontmatter.py`, which mirrors `metadata.json` into the
47
+ spec's `compatibility`, `metadata`, and `allowed-tools` frontmatter fields.
48
+ Runs `--check` in CI so the sidecar and the frontmatter cannot drift.
49
+ - `allowed_tools` in `index.json`, derived from each skill's `safety_policy`.
50
+ - A `plugin_targets` section in `providers.json` for runtimes that consume a
51
+ plugin manifest rather than a symlink install or a Markdown export:
52
+ Antigravity, Codex, Cursor, Gemini CLI, Kimi Code, and OpenCode.
53
+ - `scripts/generate-plugin-manifests.py` (and `agtmls.py plugin-manifests`),
54
+ which generates all eight manifests from `.claude-plugin/plugin.json` and
55
+ the skill tree so no runtime drifts behind a version bump or a new bundle.
56
+ Runs `--check` in CI.
57
+
58
+ ### Changed
59
+
60
+ - CI runs a matrix of Python 3.10-3.13 across Linux and macOS. It previously
61
+ tested one interpreter on one OS while declaring `requires-python >=3.10`,
62
+ so the 3.10 code path had never executed.
63
+ - README split: the command reference and the check list moved to
64
+ `docs/cli.md` and `docs/checks.md`; CONTRIBUTING rewritten around the gate,
65
+ the skill lifecycle, and what a good skill looks like.
66
+ - **The skill tree is now flat**: every skill is `skills/<name>/SKILL.md`.
67
+ Bundle membership moved from a parent directory to a `bundle` field in each
68
+ skill's `metadata.json` (`null` for general skills). Agent runtimes scan
69
+ their skills path *non-recursively*, so nested skills were invisible to any
70
+ runtime without array-valued `skills` support — Codex, Cursor, Gemini CLI,
71
+ and Antigravity among them. Every manifest now points at a single
72
+ `./skills`. `--bundle` scoping in `setup-workspace.sh` is unchanged in
73
+ behaviour and now resolves through metadata.
74
+ - `skills/noyalib/README.md` moved to `references/noyalib-bundle.md`.
75
+ - `validate-version-policy.py` and `bump-version.py` derive their metadata
76
+ file lists from the skill tree instead of hardcoding them, so a new skill
77
+ cannot escape the version gate.
78
+ - `validate-skills.py` now enforces the agentskills.io Agent Skills spec: the
79
+ closed six-key frontmatter set, the `name` length and hyphen rules, the
80
+ `compatibility` length cap, flat string `metadata`, and a 500-line
81
+ `SKILL.md` budget.
82
+ - `validate-plugin-manifest.py` also validates the marketplace catalog, and
83
+ fails if a nested skill ever reappears — such a skill would be invisible to
84
+ every runtime. Before the tree was flattened, `plugin.json`'s single
85
+ `./skills` path exposed only the two top-level skills; the other 18 never
86
+ loaded for anyone installing as a plugin.
87
+
88
+ ### Fixed
89
+
90
+ - `generate-skill-index.py` did not unquote the **last** frontmatter key —
91
+ only the mid-loop flush was patched. Invisible for skills (where `metadata`
92
+ is last) but wrong for `commands/*.md`, where `description` is the only key.
93
+ Found by the new unit tests.
94
+ - Three checks (`validate-packaging.py`, `sync-skill-frontmatter.py`,
95
+ `generate-plugin-manifests.py`) were in `checks.json` and the local runner
96
+ but **absent from CI**, which enumerates steps by hand.
97
+ `validate-check-manifest.py` now enforces manifest/runner/CI parity.
98
+ - `generate-skill-index.py` unquotes YAML scalars, so quoted descriptions no
99
+ longer carry their quotes into `index.json` and every downstream export.
100
+ - `agtmls-doctor.py` handles array-valued `skills`/`commands` manifest paths.
101
+
102
+ ### Removed
103
+
104
+ - Non-spec `date:` frontmatter keys from three noyalib skills, and the dead
105
+ `date` field from the `index.json` schema.
106
+
107
+ ## 0.0.3 - 2026-07-21
108
+
109
+ ### Changed
110
+
111
+ - Bumped release metadata through the guarded patch-line release flow.
112
+
113
+
114
+ ## 0.0.2 - 2026-07-21
115
+
116
+ ### Changed
117
+
118
+ - Bumped release metadata through the guarded patch-line release flow.
119
+
120
+
121
+ ## 0.0.1 - 2026-07-20
122
+
123
+ ### Added
124
+
125
+ - Registry `index.json` generation and validation.
126
+ - Full routing eval coverage for all current skills.
127
+ - Behavioral smoke evals for all current skills.
128
+ - Local `agtmls` dispatcher for registry checks, install flows, provider export,
129
+ evolution proposals, evidence recording, benchmarks, SBOM, provenance, MCP
130
+ resources, and agent-card generation.
131
+ - Doctor checks for registry health and consumer-repo installs.
132
+ - Skill metadata sidecars with bundle inheritance.
133
+ - Lifecycle metadata and validation.
134
+ - Command validation and plugin command-path consistency checks.
135
+ - Security and contribution policy documents.
136
+ - Provider export/install adapters for Claude, Codex, Aider, Cursor, GitHub
137
+ Copilot, Continue, Windsurf, Zed, OpenAI, Anthropic, and Google Gemini
138
+ style targets.
139
+ - Generated `CATALOG.md`, docs site, `agent-card.json`, `mcp-resources.json`,
140
+ `SBOM.spdx.json`, and deterministic `provenance.json`.
141
+ - Governance, release, smoke, behavioral, routing, and benchmark checks in the
142
+ release gate.
143
+ - 2026-ready skill bundles for agent loop design, AI supply-chain security, web
144
+ research/source triage, PR/release workflow, and project-specific noyalib
145
+ operations.
@@ -0,0 +1,124 @@
1
+ <!-- SPDX-FileCopyrightText: 2026 Sebastien Rousseau -->
2
+ <!-- SPDX-License-Identifier: MIT -->
3
+
4
+ # Contributing to AgtMLS
5
+
6
+ AgtMLS is a registry, so the bar is unusual: a bad skill does not crash, it
7
+ quietly makes every agent that loads it worse. Most of the process below
8
+ exists to catch that.
9
+
10
+ ## The one command
11
+
12
+ ```bash
13
+ python3 scripts/agtmls.py check
14
+ ```
15
+
16
+ 57 checks. It is the same gate CI runs — `validate-check-manifest.py` fails
17
+ if `checks.json`, `scripts/run-all-checks.py`, and
18
+ `.github/workflows/validate.yml` ever disagree, so a green local run means a
19
+ green CI run.
20
+
21
+ Two checks need optional extras and skip cleanly without them:
22
+
23
+ | Check | Extra | Install |
24
+ | --- | --- | --- |
25
+ | `validate-spec-conformance.py` | reference validator | `pip install skills-ref` |
26
+ | `smoke-live-providers.py` | provider credentials | export the relevant `*_API_KEY` |
27
+
28
+ CI installs `skills-ref`, so spec conformance is always enforced on a pull
29
+ request even if you skipped it locally.
30
+
31
+ ## Adding a skill
32
+
33
+ ```bash
34
+ python3 scripts/agtmls.py scaffold-skill my-skill # general
35
+ python3 scripts/agtmls.py scaffold-skill my-skill --bundle x # project-scoped
36
+ ```
37
+
38
+ That writes `skills/my-skill/` with `SKILL.md`, `reference.md`,
39
+ `metadata.json`, and both eval cases. Then:
40
+
41
+ 1. **Write the description first.** It is the whole routing surface — the
42
+ model decides whether to load your skill from it alone. Say what the skill
43
+ does *and when to load it*, using words a user would actually type.
44
+ 2. **Write the body.** Keep `SKILL.md` under 500 lines and put depth in
45
+ `reference.md`. The body is loaded in full on activation; the reference is
46
+ loaded only when the skill asks for it.
47
+ 3. **Fill in `metadata.json`**, especially `safety_policy`. It is generated
48
+ into portable frontmatter, so it is what a Cursor or Gemini user sees.
49
+ Never hand-edit `license`, `compatibility`, `allowed-tools`, or `metadata`
50
+ in `SKILL.md` — run `sync-skill-frontmatter.py --write`.
51
+ 4. **Write the eval cases.** Routing positives are prompts that *must* reach
52
+ your skill; negatives are prompts that must not. Behavioral cases assert
53
+ that load-bearing content stays present.
54
+ 5. **Regenerate and check:**
55
+
56
+ ```bash
57
+ python3 scripts/sync-skill-frontmatter.py --write
58
+ python3 scripts/generate-skill-index.py --write
59
+ python3 scripts/agtmls.py check
60
+ ```
61
+
62
+ ### What a good skill looks like
63
+
64
+ - **One rule, stated once.** The best skills have a single load-bearing
65
+ sentence that the rest of the body serves.
66
+ - **Triggers, not topics.** "Load when X happens" beats "about X".
67
+ - **A `When not to use` section.** Skills that never decline get loaded
68
+ wrongly and dilute the router.
69
+ - **Concrete over abstract.** Commands, tables, worked examples.
70
+ - **Defers to project bundles.** A general skill states the floor; a project
71
+ skill overrides it on specifics.
72
+
73
+ ## Skill lifecycle
74
+
75
+ Skills move through four stages (`lifecycle.json`), each with exit criteria:
76
+
77
+ | Stage | Requires | Exit criteria |
78
+ | --- | --- | --- |
79
+ | proposal | `.agtmls/proposals/<skill>.md` | human-reviewed trigger and safety boundaries |
80
+ | draft | `SKILL.md`, routing eval | validator, routing eval, collision check pass |
81
+ | hardened | behavioral eval | behavioral eval passes, index regenerated |
82
+ | published | `index.json` | doctor clean, CI green, docs updated |
83
+
84
+ External skills enter as drafts via `agtmls.py import-skill`, never directly
85
+ as hardened.
86
+
87
+ ## Architecture decisions
88
+
89
+ Load-bearing or hard-to-reverse changes need an ADR in `docs/adr/` — the skill
90
+ contract, the on-disk layout, distribution, or the permission posture. See
91
+ `docs/adr/README.md` for when one is required and the template. Routine work
92
+ does not need one.
93
+
94
+ ## Changing the tooling
95
+
96
+ `scripts/` is covered by `scripts/run-unit-tests.py`. If you change a
97
+ validator's logic, add a test that fails without your change: the gate checks
98
+ repository *data*, so a checker that always returns 0 is invisible to it.
99
+ Tests run on Python 3.10–3.13 across Linux and macOS in CI.
100
+
101
+ ## Style
102
+
103
+ - **Python: stdlib only.** The zero-dependency guarantee is what makes
104
+ `uvx agtmls` a single fast download; `validate-packaging.py` enforces it.
105
+ - **Shell:** `set -euo pipefail`, 2-space indent.
106
+ - **Licence on every file.** Markdown gets an SPDX header — except `SKILL.md`
107
+ and `commands/*.md`, which must begin with `---` at byte 0 and declare
108
+ `license:` in frontmatter instead. `validate-licence-headers.py` enforces
109
+ whichever form applies.
110
+ - **Conventional Commits.**
111
+
112
+ ## Never edit by hand
113
+
114
+ These are generated and drift-checked:
115
+
116
+ `index.json` · `CATALOG.md` · `site/index.html` · `agent-card.json` ·
117
+ `mcp-resources.json` · `SBOM.spdx.json` · `provenance.json` ·
118
+ `plugin.json` · `gemini-extension.json` · `GEMINI.md` ·
119
+ `.codex-plugin/` · `.cursor-plugin/` · `.kimi-plugin/` · `.agents/` ·
120
+ `.opencode/INSTALL.md` · the generated frontmatter fields in every `SKILL.md`
121
+
122
+ ## Reporting security issues
123
+
124
+ See `SECURITY.md`. Do not open a public issue for a vulnerability.
agtmls-0.0.3/GEMINI.md ADDED
@@ -0,0 +1,4 @@
1
+ <!-- SPDX-FileCopyrightText: 2026 Sebastien Rousseau -->
2
+ <!-- SPDX-License-Identifier: MIT -->
3
+ <!-- Generated by scripts/generate-plugin-manifests.py; do not edit by hand. -->
4
+ @./skills/using-agtmls/SKILL.md
agtmls-0.0.3/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Sebastien Rousseau
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.