grillspec 0.1.0__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 (309) hide show
  1. grillspec-0.1.0/.agents/plugins/marketplace.json +12 -0
  2. grillspec-0.1.0/.antigravity-plugin/plugin.json +21 -0
  3. grillspec-0.1.0/.claude-plugin/marketplace.json +18 -0
  4. grillspec-0.1.0/.claude-plugin/plugin.json +19 -0
  5. grillspec-0.1.0/.codex-plugin/plugin.json +38 -0
  6. grillspec-0.1.0/.cursor-plugin/plugin.json +22 -0
  7. grillspec-0.1.0/.gitattributes +5 -0
  8. grillspec-0.1.0/.github/CODEOWNERS +1 -0
  9. grillspec-0.1.0/.github/ISSUE_TEMPLATE/bug_report.yml +30 -0
  10. grillspec-0.1.0/.github/ISSUE_TEMPLATE/config.yml +5 -0
  11. grillspec-0.1.0/.github/ISSUE_TEMPLATE/feature_request.yml +17 -0
  12. grillspec-0.1.0/.github/pull_request_template.md +8 -0
  13. grillspec-0.1.0/.github/workflows/ci.yml +93 -0
  14. grillspec-0.1.0/.github/workflows/pr-title.yml +18 -0
  15. grillspec-0.1.0/.github/workflows/release.yml +67 -0
  16. grillspec-0.1.0/.gitignore +18 -0
  17. grillspec-0.1.0/AGENTS.md +23 -0
  18. grillspec-0.1.0/CHANGELOG.md +41 -0
  19. grillspec-0.1.0/CODE_OF_CONDUCT.md +7 -0
  20. grillspec-0.1.0/CONTRIBUTING.md +89 -0
  21. grillspec-0.1.0/LICENSE +21 -0
  22. grillspec-0.1.0/NOTICE +42 -0
  23. grillspec-0.1.0/PKG-INFO +85 -0
  24. grillspec-0.1.0/README.md +60 -0
  25. grillspec-0.1.0/README.ru.md +60 -0
  26. grillspec-0.1.0/SECURITY.md +30 -0
  27. grillspec-0.1.0/docs/en/README.md +20 -0
  28. grillspec-0.1.0/docs/en/configuration.md +63 -0
  29. grillspec-0.1.0/docs/en/how-it-works/archive.md +50 -0
  30. grillspec-0.1.0/docs/en/how-it-works/bootstrap.md +67 -0
  31. grillspec-0.1.0/docs/en/how-it-works/council.md +99 -0
  32. grillspec-0.1.0/docs/en/how-it-works/execution.md +55 -0
  33. grillspec-0.1.0/docs/en/how-it-works/gates.md +76 -0
  34. grillspec-0.1.0/docs/en/how-it-works/grilling.md +75 -0
  35. grillspec-0.1.0/docs/en/how-it-works/memory.md +79 -0
  36. grillspec-0.1.0/docs/en/how-it-works/plans.md +95 -0
  37. grillspec-0.1.0/docs/en/how-it-works/specs.md +117 -0
  38. grillspec-0.1.0/docs/en/installation.md +74 -0
  39. grillspec-0.1.0/docs/en/tokens.md +63 -0
  40. grillspec-0.1.0/docs/ru/README.md +20 -0
  41. grillspec-0.1.0/docs/ru/configuration.md +63 -0
  42. grillspec-0.1.0/docs/ru/how-it-works/archive.md +50 -0
  43. grillspec-0.1.0/docs/ru/how-it-works/bootstrap.md +68 -0
  44. grillspec-0.1.0/docs/ru/how-it-works/council.md +100 -0
  45. grillspec-0.1.0/docs/ru/how-it-works/execution.md +54 -0
  46. grillspec-0.1.0/docs/ru/how-it-works/gates.md +78 -0
  47. grillspec-0.1.0/docs/ru/how-it-works/grilling.md +75 -0
  48. grillspec-0.1.0/docs/ru/how-it-works/memory.md +80 -0
  49. grillspec-0.1.0/docs/ru/how-it-works/plans.md +97 -0
  50. grillspec-0.1.0/docs/ru/how-it-works/specs.md +119 -0
  51. grillspec-0.1.0/docs/ru/installation.md +74 -0
  52. grillspec-0.1.0/docs/ru/tokens.md +64 -0
  53. grillspec-0.1.0/hooks/hooks-codex.json +27 -0
  54. grillspec-0.1.0/hooks/hooks-cursor.json +17 -0
  55. grillspec-0.1.0/hooks/hooks.json +27 -0
  56. grillspec-0.1.0/hooks/run-hook.cmd +51 -0
  57. grillspec-0.1.0/hooks.json +24 -0
  58. grillspec-0.1.0/notes.md +31 -0
  59. grillspec-0.1.0/pyproject.toml +66 -0
  60. grillspec-0.1.0/pyrightconfig.json +34 -0
  61. grillspec-0.1.0/ruff.toml +65 -0
  62. grillspec-0.1.0/scripts/bump_version.py +130 -0
  63. grillspec-0.1.0/scripts/check_attribution.py +92 -0
  64. grillspec-0.1.0/scripts/check_docs_mirror.py +74 -0
  65. grillspec-0.1.0/scripts/check_tokens.py +69 -0
  66. grillspec-0.1.0/scripts/grillspec +35 -0
  67. grillspec-0.1.0/scripts/grillspec.cmd +22 -0
  68. grillspec-0.1.0/scripts/grillspec.py +12 -0
  69. grillspec-0.1.0/scripts/lint_skills.py +110 -0
  70. grillspec-0.1.0/skills/grillspec-archive/SKILL.md +57 -0
  71. grillspec-0.1.0/skills/grillspec-council/SKILL.md +123 -0
  72. grillspec-0.1.0/skills/grillspec-council/references/prompt.md +27 -0
  73. grillspec-0.1.0/skills/grillspec-debugging/SKILL.md +285 -0
  74. grillspec-0.1.0/skills/grillspec-debugging/condition-based-waiting.md +116 -0
  75. grillspec-0.1.0/skills/grillspec-debugging/defense-in-depth.md +124 -0
  76. grillspec-0.1.0/skills/grillspec-debugging/root-cause-tracing.md +169 -0
  77. grillspec-0.1.0/skills/grillspec-finishing/SKILL.md +229 -0
  78. grillspec-0.1.0/skills/grillspec-grill/SKILL.md +131 -0
  79. grillspec-0.1.0/skills/grillspec-init/SKILL.md +33 -0
  80. grillspec-0.1.0/skills/grillspec-inline-execution/SKILL.md +393 -0
  81. grillspec-0.1.0/skills/grillspec-memory/SKILL.md +99 -0
  82. grillspec-0.1.0/skills/grillspec-parallel-agents/SKILL.md +167 -0
  83. grillspec-0.1.0/skills/grillspec-plans/SKILL.md +111 -0
  84. grillspec-0.1.0/skills/grillspec-plans/references/plan-check.md +21 -0
  85. grillspec-0.1.0/skills/grillspec-plans/references/plan.md +69 -0
  86. grillspec-0.1.0/skills/grillspec-receiving-review/SKILL.md +205 -0
  87. grillspec-0.1.0/skills/grillspec-requesting-review/SKILL.md +95 -0
  88. grillspec-0.1.0/skills/grillspec-requesting-review/code-reviewer.md +198 -0
  89. grillspec-0.1.0/skills/grillspec-specs/SKILL.md +105 -0
  90. grillspec-0.1.0/skills/grillspec-specs/references/builder-check.md +24 -0
  91. grillspec-0.1.0/skills/grillspec-specs/references/openspec.md +78 -0
  92. grillspec-0.1.0/skills/grillspec-specs/references/superpowers.md +41 -0
  93. grillspec-0.1.0/skills/grillspec-subagent-execution/SKILL.md +587 -0
  94. grillspec-0.1.0/skills/grillspec-subagent-execution/implementer-prompt.md +157 -0
  95. grillspec-0.1.0/skills/grillspec-subagent-execution/re-review-prompt.md +115 -0
  96. grillspec-0.1.0/skills/grillspec-subagent-execution/task-reviewer-prompt.md +207 -0
  97. grillspec-0.1.0/skills/grillspec-tdd/SKILL.md +355 -0
  98. grillspec-0.1.0/skills/grillspec-tdd/writing-good-tests.md +198 -0
  99. grillspec-0.1.0/skills/grillspec-verification/SKILL.md +121 -0
  100. grillspec-0.1.0/skills/grillspec-worktrees/SKILL.md +169 -0
  101. grillspec-0.1.0/skills/using-grillspec/SKILL.md +119 -0
  102. grillspec-0.1.0/skills/using-grillspec/references/antigravity-tools.md +12 -0
  103. grillspec-0.1.0/skills/using-grillspec/references/claude-code-tools.md +12 -0
  104. grillspec-0.1.0/skills/using-grillspec/references/codex-tools.md +13 -0
  105. grillspec-0.1.0/skills/using-grillspec/references/cursor-tools.md +12 -0
  106. grillspec-0.1.0/skills/using-grillspec/references/gigacode-tools.md +15 -0
  107. grillspec-0.1.0/src/grillspec/__init__.py +7 -0
  108. grillspec-0.1.0/src/grillspec/__main__.py +9 -0
  109. grillspec-0.1.0/src/grillspec/archive/__init__.py +7 -0
  110. grillspec-0.1.0/src/grillspec/archive/_archive.py +290 -0
  111. grillspec-0.1.0/src/grillspec/archive/_merge.py +344 -0
  112. grillspec-0.1.0/src/grillspec/blocks/__init__.py +25 -0
  113. grillspec-0.1.0/src/grillspec/blocks/_edit.py +192 -0
  114. grillspec-0.1.0/src/grillspec/cli/__init__.py +7 -0
  115. grillspec-0.1.0/src/grillspec/cli/_main.py +1053 -0
  116. grillspec-0.1.0/src/grillspec/config/__init__.py +32 -0
  117. grillspec-0.1.0/src/grillspec/config/_load.py +275 -0
  118. grillspec-0.1.0/src/grillspec/config/_model.py +123 -0
  119. grillspec-0.1.0/src/grillspec/council/__init__.py +38 -0
  120. grillspec-0.1.0/src/grillspec/council/_contract.py +59 -0
  121. grillspec-0.1.0/src/grillspec/council/_proc.py +243 -0
  122. grillspec-0.1.0/src/grillspec/council/_prompt.py +128 -0
  123. grillspec-0.1.0/src/grillspec/council/_run.py +290 -0
  124. grillspec-0.1.0/src/grillspec/council/_vendors.py +332 -0
  125. grillspec-0.1.0/src/grillspec/detect/__init__.py +21 -0
  126. grillspec-0.1.0/src/grillspec/detect/_detect.py +211 -0
  127. grillspec-0.1.0/src/grillspec/execute/__init__.py +21 -0
  128. grillspec-0.1.0/src/grillspec/execute/_exec.py +335 -0
  129. grillspec-0.1.0/src/grillspec/gates/__init__.py +10 -0
  130. grillspec-0.1.0/src/grillspec/gates/_adapters.py +152 -0
  131. grillspec-0.1.0/src/grillspec/gates/_gate.py +225 -0
  132. grillspec-0.1.0/src/grillspec/gates/_patch.py +22 -0
  133. grillspec-0.1.0/src/grillspec/gates/_shell.py +466 -0
  134. grillspec-0.1.0/src/grillspec/hooks/__init__.py +7 -0
  135. grillspec-0.1.0/src/grillspec/hooks/_session_start.py +146 -0
  136. grillspec-0.1.0/src/grillspec/init/__init__.py +7 -0
  137. grillspec-0.1.0/src/grillspec/init/_init.py +72 -0
  138. grillspec-0.1.0/src/grillspec/install/__init__.py +8 -0
  139. grillspec-0.1.0/src/grillspec/install/_install.py +275 -0
  140. grillspec-0.1.0/src/grillspec/install/_receipt.py +62 -0
  141. grillspec-0.1.0/src/grillspec/install/_targets.py +77 -0
  142. grillspec-0.1.0/src/grillspec/markdown/__init__.py +15 -0
  143. grillspec-0.1.0/src/grillspec/markdown/_fences.py +75 -0
  144. grillspec-0.1.0/src/grillspec/memory/__init__.py +31 -0
  145. grillspec-0.1.0/src/grillspec/memory/_block.py +213 -0
  146. grillspec-0.1.0/src/grillspec/paths/__init__.py +7 -0
  147. grillspec-0.1.0/src/grillspec/paths/_data.py +94 -0
  148. grillspec-0.1.0/src/grillspec/py.typed +0 -0
  149. grillspec-0.1.0/src/grillspec/specs/__init__.py +26 -0
  150. grillspec-0.1.0/src/grillspec/specs/_openspec.py +608 -0
  151. grillspec-0.1.0/src/grillspec/specs/_parse.py +264 -0
  152. grillspec-0.1.0/src/grillspec/specs/_plan.py +392 -0
  153. grillspec-0.1.0/src/grillspec/specs/_report.py +87 -0
  154. grillspec-0.1.0/src/grillspec/specs/_rules.py +223 -0
  155. grillspec-0.1.0/src/grillspec/specs/_validate.py +149 -0
  156. grillspec-0.1.0/src/grillspec/state/__init__.py +47 -0
  157. grillspec-0.1.0/src/grillspec/state/_changes.py +399 -0
  158. grillspec-0.1.0/src/grillspec/state/_create.py +116 -0
  159. grillspec-0.1.0/src/grillspec/state/_hash.py +100 -0
  160. grillspec-0.1.0/src/grillspec/state/_layout.py +47 -0
  161. grillspec-0.1.0/src/grillspec/state/_phase.py +209 -0
  162. grillspec-0.1.0/src/grillspec/state/_sidecar.py +169 -0
  163. grillspec-0.1.0/src/grillspec/state/_store.py +180 -0
  164. grillspec-0.1.0/src/grillspec/tokens/__init__.py +23 -0
  165. grillspec-0.1.0/src/grillspec/tokens/_estimate.py +244 -0
  166. grillspec-0.1.0/templates/agents-block.md +3 -0
  167. grillspec-0.1.0/templates/config.toml +18 -0
  168. grillspec-0.1.0/tests/benchmark/overhead.sh +48 -0
  169. grillspec-0.1.0/tests/conftest.py +38 -0
  170. grillspec-0.1.0/tests/evals/_fixtures/project.sh +147 -0
  171. grillspec-0.1.0/tests/evals/archive-asks/case.yaml +5 -0
  172. grillspec-0.1.0/tests/evals/archive-asks/fixture.sh +2 -0
  173. grillspec-0.1.0/tests/evals/archive-asks/graders/asks.md +8 -0
  174. grillspec-0.1.0/tests/evals/archive-asks/graders/no-edit.md +9 -0
  175. grillspec-0.1.0/tests/evals/archive-asks/graders/no-write.md +9 -0
  176. grillspec-0.1.0/tests/evals/archive-asks/graders/skill.md +8 -0
  177. grillspec-0.1.0/tests/evals/archive-asks/prompt.md +7 -0
  178. grillspec-0.1.0/tests/evals/bootstrap-present/graders/router.md +9 -0
  179. grillspec-0.1.0/tests/evals/bootstrap-present/prompt.md +6 -0
  180. grillspec-0.1.0/tests/evals/council-roles/case.yaml +5 -0
  181. grillspec-0.1.0/tests/evals/council-roles/fixture.sh +2 -0
  182. grillspec-0.1.0/tests/evals/council-roles/graders/council-line.md +8 -0
  183. grillspec-0.1.0/tests/evals/council-roles/graders/subagents.md +8 -0
  184. grillspec-0.1.0/tests/evals/council-roles/graders/weak-signal.md +8 -0
  185. grillspec-0.1.0/tests/evals/council-roles/prompt.md +7 -0
  186. grillspec-0.1.0/tests/evals/execute-trigger/case.yaml +5 -0
  187. grillspec-0.1.0/tests/evals/execute-trigger/fixture.sh +2 -0
  188. grillspec-0.1.0/tests/evals/execute-trigger/graders/inline-skill.md +8 -0
  189. grillspec-0.1.0/tests/evals/execute-trigger/prompt.md +7 -0
  190. grillspec-0.1.0/tests/evals/grill-hurry/case.yaml +5 -0
  191. grillspec-0.1.0/tests/evals/grill-hurry/fixture.sh +2 -0
  192. grillspec-0.1.0/tests/evals/grill-hurry/graders/assumptions.md +8 -0
  193. grillspec-0.1.0/tests/evals/grill-hurry/graders/proceeds.md +10 -0
  194. grillspec-0.1.0/tests/evals/grill-hurry/prompt.md +7 -0
  195. grillspec-0.1.0/tests/evals/grill-logs/case.yaml +5 -0
  196. grillspec-0.1.0/tests/evals/grill-logs/fixture.sh +2 -0
  197. grillspec-0.1.0/tests/evals/grill-logs/graders/edits-log.md +8 -0
  198. grillspec-0.1.0/tests/evals/grill-logs/graders/settled.md +8 -0
  199. grillspec-0.1.0/tests/evals/grill-logs/prompt.md +7 -0
  200. grillspec-0.1.0/tests/evals/grill-resume/case.yaml +5 -0
  201. grillspec-0.1.0/tests/evals/grill-resume/fixture.sh +2 -0
  202. grillspec-0.1.0/tests/evals/grill-resume/graders/next-open.md +8 -0
  203. grillspec-0.1.0/tests/evals/grill-resume/graders/no-spec.md +10 -0
  204. grillspec-0.1.0/tests/evals/grill-resume/prompt.md +7 -0
  205. grillspec-0.1.0/tests/evals/grill-triggers/case.yaml +5 -0
  206. grillspec-0.1.0/tests/evals/grill-triggers/fixture.sh +2 -0
  207. grillspec-0.1.0/tests/evals/grill-triggers/graders/no-code.md +9 -0
  208. grillspec-0.1.0/tests/evals/grill-triggers/graders/skill.md +8 -0
  209. grillspec-0.1.0/tests/evals/grill-triggers/prompt.md +6 -0
  210. grillspec-0.1.0/tests/evals/init-triggers/graders/init-skill.md +8 -0
  211. grillspec-0.1.0/tests/evals/init-triggers/prompt.md +6 -0
  212. grillspec-0.1.0/tests/evals/memory-propose/case.yaml +5 -0
  213. grillspec-0.1.0/tests/evals/memory-propose/fixture.sh +2 -0
  214. grillspec-0.1.0/tests/evals/memory-propose/graders/no-agents-write.md +10 -0
  215. grillspec-0.1.0/tests/evals/memory-propose/graders/no-block-edit.md +10 -0
  216. grillspec-0.1.0/tests/evals/memory-propose/graders/no-secret.md +8 -0
  217. grillspec-0.1.0/tests/evals/memory-propose/graders/numbered-list.md +8 -0
  218. grillspec-0.1.0/tests/evals/memory-propose/graders/test-command.md +7 -0
  219. grillspec-0.1.0/tests/evals/memory-propose/prompt.md +7 -0
  220. grillspec-0.1.0/tests/evals/plan-from-spec/case.yaml +5 -0
  221. grillspec-0.1.0/tests/evals/plan-from-spec/fixture.sh +2 -0
  222. grillspec-0.1.0/tests/evals/plan-from-spec/graders/asks.md +8 -0
  223. grillspec-0.1.0/tests/evals/plan-from-spec/graders/covers.md +8 -0
  224. grillspec-0.1.0/tests/evals/plan-from-spec/graders/task-line.md +8 -0
  225. grillspec-0.1.0/tests/evals/plan-from-spec/graders/test-strategy.md +8 -0
  226. grillspec-0.1.0/tests/evals/plan-from-spec/prompt.md +7 -0
  227. grillspec-0.1.0/tests/evals/pressure-gate/case.yaml +5 -0
  228. grillspec-0.1.0/tests/evals/pressure-gate/fixture.sh +2 -0
  229. grillspec-0.1.0/tests/evals/pressure-gate/graders/holds.md +11 -0
  230. grillspec-0.1.0/tests/evals/pressure-gate/graders/names-the-way.md +8 -0
  231. grillspec-0.1.0/tests/evals/pressure-gate/prompt.md +8 -0
  232. grillspec-0.1.0/tests/evals/pressure-tdd/case.yaml +5 -0
  233. grillspec-0.1.0/tests/evals/pressure-tdd/fixture.sh +2 -0
  234. grillspec-0.1.0/tests/evals/pressure-tdd/graders/names-untested.md +8 -0
  235. grillspec-0.1.0/tests/evals/pressure-tdd/graders/test-first.md +12 -0
  236. grillspec-0.1.0/tests/evals/pressure-tdd/prompt.md +8 -0
  237. grillspec-0.1.0/tests/evals/spec-deferred/case.yaml +5 -0
  238. grillspec-0.1.0/tests/evals/spec-deferred/fixture.sh +2 -0
  239. grillspec-0.1.0/tests/evals/spec-deferred/graders/asks-q3.md +8 -0
  240. grillspec-0.1.0/tests/evals/spec-deferred/graders/no-scenarios-yet.md +10 -0
  241. grillspec-0.1.0/tests/evals/spec-deferred/prompt.md +7 -0
  242. grillspec-0.1.0/tests/evals/spec-from-log/case.yaml +5 -0
  243. grillspec-0.1.0/tests/evals/spec-from-log/fixture.sh +2 -0
  244. grillspec-0.1.0/tests/evals/spec-from-log/graders/asks-approval.md +10 -0
  245. grillspec-0.1.0/tests/evals/spec-from-log/graders/requirements.md +8 -0
  246. grillspec-0.1.0/tests/evals/spec-from-log/graders/scenario-ids.md +8 -0
  247. grillspec-0.1.0/tests/evals/spec-from-log/prompt.md +7 -0
  248. grillspec-0.1.0/tests/fakes.py +139 -0
  249. grillspec-0.1.0/tests/smoke/README.md +42 -0
  250. grillspec-0.1.0/tests/smoke/smoke.sh +40 -0
  251. grillspec-0.1.0/tests/smoke/smoke_gates.sh +34 -0
  252. grillspec-0.1.0/tests/support.py +98 -0
  253. grillspec-0.1.0/tests/unit/test_approve.py +102 -0
  254. grillspec-0.1.0/tests/unit/test_archive.py +294 -0
  255. grillspec-0.1.0/tests/unit/test_archive_review.py +294 -0
  256. grillspec-0.1.0/tests/unit/test_blocks.py +69 -0
  257. grillspec-0.1.0/tests/unit/test_bump_version.py +67 -0
  258. grillspec-0.1.0/tests/unit/test_check_attribution.py +63 -0
  259. grillspec-0.1.0/tests/unit/test_check_tokens.py +72 -0
  260. grillspec-0.1.0/tests/unit/test_cli.py +45 -0
  261. grillspec-0.1.0/tests/unit/test_cli_status.py +87 -0
  262. grillspec-0.1.0/tests/unit/test_config.py +115 -0
  263. grillspec-0.1.0/tests/unit/test_council_cli.py +245 -0
  264. grillspec-0.1.0/tests/unit/test_council_config.py +80 -0
  265. grillspec-0.1.0/tests/unit/test_council_detect.py +159 -0
  266. grillspec-0.1.0/tests/unit/test_council_prompt.py +117 -0
  267. grillspec-0.1.0/tests/unit/test_council_review.py +146 -0
  268. grillspec-0.1.0/tests/unit/test_council_run.py +286 -0
  269. grillspec-0.1.0/tests/unit/test_detect.py +90 -0
  270. grillspec-0.1.0/tests/unit/test_docs_mirror.py +55 -0
  271. grillspec-0.1.0/tests/unit/test_exec.py +184 -0
  272. grillspec-0.1.0/tests/unit/test_exec_review.py +185 -0
  273. grillspec-0.1.0/tests/unit/test_gate_hooks.py +248 -0
  274. grillspec-0.1.0/tests/unit/test_gate_wiring.py +162 -0
  275. grillspec-0.1.0/tests/unit/test_gates.py +247 -0
  276. grillspec-0.1.0/tests/unit/test_gates_review.py +203 -0
  277. grillspec-0.1.0/tests/unit/test_grill_phase.py +114 -0
  278. grillspec-0.1.0/tests/unit/test_init.py +82 -0
  279. grillspec-0.1.0/tests/unit/test_install.py +133 -0
  280. grillspec-0.1.0/tests/unit/test_launcher.py +128 -0
  281. grillspec-0.1.0/tests/unit/test_lint_skills.py +86 -0
  282. grillspec-0.1.0/tests/unit/test_manifests.py +56 -0
  283. grillspec-0.1.0/tests/unit/test_memory_block.py +168 -0
  284. grillspec-0.1.0/tests/unit/test_memory_cli.py +149 -0
  285. grillspec-0.1.0/tests/unit/test_memory_review.py +106 -0
  286. grillspec-0.1.0/tests/unit/test_new.py +146 -0
  287. grillspec-0.1.0/tests/unit/test_paths.py +16 -0
  288. grillspec-0.1.0/tests/unit/test_plan_approval.py +215 -0
  289. grillspec-0.1.0/tests/unit/test_plan_review.py +178 -0
  290. grillspec-0.1.0/tests/unit/test_plan_rules.py +238 -0
  291. grillspec-0.1.0/tests/unit/test_repo_hygiene.py +25 -0
  292. grillspec-0.1.0/tests/unit/test_review_fixes.py +148 -0
  293. grillspec-0.1.0/tests/unit/test_review_round3.py +197 -0
  294. grillspec-0.1.0/tests/unit/test_review_s2.py +83 -0
  295. grillspec-0.1.0/tests/unit/test_run_hook.py +65 -0
  296. grillspec-0.1.0/tests/unit/test_session_start.py +97 -0
  297. grillspec-0.1.0/tests/unit/test_spec_hash.py +197 -0
  298. grillspec-0.1.0/tests/unit/test_specs_cli.py +178 -0
  299. grillspec-0.1.0/tests/unit/test_specs_openspec.py +220 -0
  300. grillspec-0.1.0/tests/unit/test_specs_parse.py +163 -0
  301. grillspec-0.1.0/tests/unit/test_specs_review.py +185 -0
  302. grillspec-0.1.0/tests/unit/test_specs_rules.py +171 -0
  303. grillspec-0.1.0/tests/unit/test_state.py +122 -0
  304. grillspec-0.1.0/tests/unit/test_state_robustness.py +124 -0
  305. grillspec-0.1.0/tests/unit/test_tokens.py +79 -0
  306. grillspec-0.1.0/tests/unit/test_tokens_review.py +158 -0
  307. grillspec-0.1.0/tests/unit/test_vendored_skills.py +66 -0
  308. grillspec-0.1.0/tests/unit/test_wheel.py +74 -0
  309. grillspec-0.1.0/uv.lock +345 -0
@@ -0,0 +1,12 @@
1
+ {
2
+ "name": "grillspec",
3
+ "interface": { "displayName": "grillspec" },
4
+ "plugins": [
5
+ {
6
+ "name": "grillspec",
7
+ "source": { "source": "url", "url": "./" },
8
+ "policy": { "installation": "AVAILABLE", "authentication": "ON_INSTALL" },
9
+ "category": "Developer Tools"
10
+ }
11
+ ]
12
+ }
@@ -0,0 +1,21 @@
1
+ {
2
+ "name": "grillspec",
3
+ "displayName": "grillspec",
4
+ "version": "0.1.0",
5
+ "description": "Spec-driven agentic development: grill the user until nothing is guessed, write the spec, plan, then execute with TDD.",
6
+ "category": "Developer Tools",
7
+ "keywords": [
8
+ "spec-driven-development",
9
+ "planning",
10
+ "grilling",
11
+ "tdd",
12
+ "skills",
13
+ "workflow"
14
+ ],
15
+ "author": {
16
+ "name": "forbxpg"
17
+ },
18
+ "homepage": "https://github.com/forbxpg/grillspec",
19
+ "repository": "https://github.com/forbxpg/grillspec",
20
+ "license": "MIT"
21
+ }
@@ -0,0 +1,18 @@
1
+ {
2
+ "name": "grillspec",
3
+ "description": "grillspec: spec-driven agentic development",
4
+ "owner": {
5
+ "name": "forbxpg"
6
+ },
7
+ "plugins": [
8
+ {
9
+ "name": "grillspec",
10
+ "description": "Spec-driven agentic development: grill the user until nothing is guessed, write the spec, plan, then execute with TDD.",
11
+ "version": "0.1.0",
12
+ "source": "./",
13
+ "author": {
14
+ "name": "forbxpg"
15
+ }
16
+ }
17
+ ]
18
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "name": "grillspec",
3
+ "description": "Spec-driven agentic development: grill the user until nothing is guessed, write the spec, plan, then execute with TDD.",
4
+ "version": "0.1.0",
5
+ "author": {
6
+ "name": "forbxpg"
7
+ },
8
+ "homepage": "https://github.com/forbxpg/grillspec",
9
+ "repository": "https://github.com/forbxpg/grillspec",
10
+ "license": "MIT",
11
+ "keywords": [
12
+ "spec-driven-development",
13
+ "planning",
14
+ "grilling",
15
+ "tdd",
16
+ "skills",
17
+ "workflow"
18
+ ]
19
+ }
@@ -0,0 +1,38 @@
1
+ {
2
+ "name": "grillspec",
3
+ "version": "0.1.0",
4
+ "description": "Spec-driven agentic development: grill the user until nothing is guessed, write the spec, plan, then execute with TDD.",
5
+ "author": {
6
+ "name": "forbxpg",
7
+ "url": "https://github.com/forbxpg"
8
+ },
9
+ "homepage": "https://github.com/forbxpg/grillspec",
10
+ "repository": "https://github.com/forbxpg/grillspec",
11
+ "license": "MIT",
12
+ "keywords": [
13
+ "spec-driven-development",
14
+ "planning",
15
+ "grilling",
16
+ "tdd",
17
+ "skills",
18
+ "workflow"
19
+ ],
20
+ "skills": "./skills/",
21
+ "hooks": "./hooks/hooks-codex.json",
22
+ "interface": {
23
+ "displayName": "grillspec",
24
+ "shortDescription": "Grill, spec, plan, execute: spec-driven development for coding agents",
25
+ "developerName": "forbxpg",
26
+ "category": "Developer Tools",
27
+ "capabilities": [
28
+ "Interactive",
29
+ "Read",
30
+ "Write"
31
+ ],
32
+ "defaultPrompt": [
33
+ "Let's add a feature to this project.",
34
+ "Set up grillspec in this repo."
35
+ ],
36
+ "websiteURL": "https://github.com/forbxpg/grillspec"
37
+ }
38
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "name": "grillspec",
3
+ "displayName": "grillspec",
4
+ "description": "Spec-driven agentic development: grill the user until nothing is guessed, write the spec, plan, then execute with TDD.",
5
+ "version": "0.1.0",
6
+ "author": {
7
+ "name": "forbxpg"
8
+ },
9
+ "homepage": "https://github.com/forbxpg/grillspec",
10
+ "repository": "https://github.com/forbxpg/grillspec",
11
+ "license": "MIT",
12
+ "keywords": [
13
+ "spec-driven-development",
14
+ "planning",
15
+ "grilling",
16
+ "tdd",
17
+ "skills",
18
+ "workflow"
19
+ ],
20
+ "skills": "./skills/",
21
+ "hooks": "./hooks/hooks-cursor.json"
22
+ }
@@ -0,0 +1,5 @@
1
+ # The hook runner is read by cmd.exe and by POSIX shells: keep LF everywhere.
2
+ hooks/run-hook.cmd text eol=lf
3
+ *.sh text eol=lf
4
+ scripts/grillspec text eol=lf
5
+ scripts/grillspec.cmd text eol=lf
@@ -0,0 +1 @@
1
+ * @forbxpg
@@ -0,0 +1,30 @@
1
+ name: Bug report
2
+ description: Something does not work as documented. Security issues go to the security policy.
3
+ labels: [bug]
4
+ body:
5
+ - type: input
6
+ id: version
7
+ attributes:
8
+ label: grillspec version or commit
9
+ validations:
10
+ required: true
11
+ - type: dropdown
12
+ id: harness
13
+ attributes:
14
+ label: Harness
15
+ options: [Claude Code, Cursor, Codex, Antigravity, GigaCode, Not harness-specific]
16
+ validations:
17
+ required: true
18
+ - type: textarea
19
+ id: steps
20
+ attributes:
21
+ label: Steps to reproduce
22
+ description: What you asked the agent, the output of `grillspec status`, and what happened.
23
+ validations:
24
+ required: true
25
+ - type: textarea
26
+ id: expected
27
+ attributes:
28
+ label: Expected and actual behaviour
29
+ validations:
30
+ required: true
@@ -0,0 +1,5 @@
1
+ blank_issues_enabled: false
2
+ contact_links:
3
+ - name: Report a security issue
4
+ url: https://github.com/forbxpg/grillspec/security/advisories/new
5
+ about: Report privately, never in a public issue.
@@ -0,0 +1,17 @@
1
+ name: Feature request
2
+ description: Propose a change to grillspec's workflow, skills or harness support.
3
+ labels: [enhancement]
4
+ body:
5
+ - type: textarea
6
+ id: problem
7
+ attributes:
8
+ label: The problem
9
+ description: What goes wrong or costs too much today, in a concrete session.
10
+ validations:
11
+ required: true
12
+ - type: textarea
13
+ id: proposal
14
+ attributes:
15
+ label: What you propose
16
+ validations:
17
+ required: true
@@ -0,0 +1,8 @@
1
+ ## What and why
2
+
3
+ ## Checklist
4
+
5
+ - [ ] The title follows Conventional Commits (`feat: …`, `fix: …`).
6
+ - [ ] No AI attribution in commits or this description.
7
+ - [ ] Tests cover the change; skills stay lint-clean; docs changed in both `docs/en` and `docs/ru`.
8
+ - [ ] `uv run ruff check . && uv run basedpyright && uv run pytest` passes.
@@ -0,0 +1,93 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+
8
+ permissions:
9
+ contents: read
10
+
11
+ concurrency:
12
+ group: ci-${{ github.ref }}
13
+ cancel-in-progress: true
14
+
15
+ jobs:
16
+ lint:
17
+ name: Lint, types, skills, versions, docs
18
+ runs-on: ubuntu-latest
19
+ steps:
20
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
21
+ with:
22
+ persist-credentials: false
23
+ - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
24
+ - run: uv sync --locked
25
+ - run: uv run ruff check .
26
+ - run: uv run ruff format --check .
27
+ - run: uv run basedpyright
28
+ - run: uv run python scripts/lint_skills.py
29
+ - run: uv run python scripts/bump_version.py --check
30
+ - run: uv run python scripts/check_docs_mirror.py
31
+ - run: uv run python scripts/check_tokens.py
32
+
33
+ test:
34
+ name: Tests (${{ matrix.os }}, Python ${{ matrix.python }})
35
+ runs-on: ${{ matrix.os }}
36
+ strategy:
37
+ fail-fast: false
38
+ matrix:
39
+ os: [ubuntu-latest, macos-latest, windows-latest]
40
+ python: ["3.11", "3.12", "3.13", "3.14"]
41
+ steps:
42
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
43
+ with:
44
+ persist-credentials: false
45
+ - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
46
+ with:
47
+ python-version: ${{ matrix.python }}
48
+ - run: uv sync --locked
49
+ - run: uv run pytest --cov --cov-report=term-missing --cov-fail-under=90
50
+
51
+ preview:
52
+ name: Tests on the next Python (preview, allowed to fail)
53
+ runs-on: ubuntu-latest
54
+ continue-on-error: true
55
+ steps:
56
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
57
+ with:
58
+ persist-credentials: false
59
+ - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
60
+ with:
61
+ python-version: "3.15"
62
+ - run: uv sync --locked
63
+ - run: uv run pytest
64
+
65
+ attribution:
66
+ name: No AI attribution in commits or the PR description
67
+ if: github.event_name == 'pull_request'
68
+ runs-on: ubuntu-latest
69
+ steps:
70
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
71
+ with:
72
+ persist-credentials: false
73
+ fetch-depth: 0
74
+ - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
75
+ # Untrusted values go through env, never into the script text.
76
+ - run: uv run --no-project python scripts/check_attribution.py "origin/$BASE_REF..HEAD"
77
+ env:
78
+ BASE_REF: ${{ github.base_ref }}
79
+ - run: printf '%s' "$PR_BODY" | uv run --no-project python scripts/check_attribution.py --stdin
80
+ env:
81
+ PR_BODY: ${{ github.event.pull_request.body }}
82
+
83
+ plugin-validate:
84
+ name: Claude Code plugin manifest
85
+ runs-on: ubuntu-latest
86
+ steps:
87
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
88
+ with:
89
+ persist-credentials: false
90
+ - uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.0
91
+ with:
92
+ node-version: "22"
93
+ - run: npx -y @anthropic-ai/claude-code plugin validate --strict .
@@ -0,0 +1,18 @@
1
+ name: PR title
2
+
3
+ on:
4
+ pull_request:
5
+ types: [opened, edited, synchronize, reopened]
6
+
7
+ permissions:
8
+ pull-requests: read
9
+
10
+ jobs:
11
+ conventional:
12
+ name: Conventional Commits title
13
+ runs-on: ubuntu-latest
14
+ steps:
15
+ # The squash-merge title becomes the commit message the changelog is built from.
16
+ - uses: amannn/action-semantic-pull-request@48f256284bd46cdaab1048c3721360e808335d50 # v6.1.1
17
+ env:
18
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -0,0 +1,67 @@
1
+ name: Release
2
+
3
+ on:
4
+ push:
5
+ tags: ["v*"]
6
+
7
+ permissions:
8
+ contents: read
9
+
10
+ jobs:
11
+ build:
12
+ name: Build
13
+ runs-on: ubuntu-latest
14
+ steps:
15
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
16
+ with:
17
+ persist-credentials: false
18
+ - uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
19
+ - run: uv run python scripts/bump_version.py --check
20
+ - name: Tag matches the version
21
+ run: test "v$(uv run --no-project python -c 'import tomllib;print(tomllib.load(open("pyproject.toml","rb"))["project"]["version"])')" = "$GITHUB_REF_NAME"
22
+ - name: CHANGELOG has a section for this version
23
+ run: |
24
+ version="${GITHUB_REF_NAME#v}"
25
+ awk -v v="$version" '$0 ~ "^## \\[" v "\\]" {on=1; next} /^## \[/ {on=0} on' CHANGELOG.md > notes.md
26
+ grep -q '[^[:space:]]' notes.md || { echo "CHANGELOG.md has no notes for $version"; exit 1; }
27
+ - run: uv build
28
+ - uses: actions/upload-artifact@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
29
+ with:
30
+ name: dist
31
+ path: dist/
32
+
33
+ pypi:
34
+ name: Publish to PyPI
35
+ needs: build
36
+ runs-on: ubuntu-latest
37
+ environment: pypi
38
+ permissions:
39
+ id-token: write
40
+ steps:
41
+ - uses: actions/download-artifact@9000827ccba6bdab643e8b6fd33ac0654aef8333 # v8.0.2
42
+ with:
43
+ name: dist
44
+ path: dist/
45
+ - uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # v1.14.2
46
+ with:
47
+ # A retried run must not fail on files a previous attempt uploaded.
48
+ skip-existing: true
49
+
50
+ github-release:
51
+ name: GitHub release
52
+ needs: pypi
53
+ runs-on: ubuntu-latest
54
+ permissions:
55
+ contents: write
56
+ steps:
57
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
58
+ with:
59
+ persist-credentials: false
60
+ - name: Release notes from CHANGELOG
61
+ run: |
62
+ version="${GITHUB_REF_NAME#v}"
63
+ awk -v v="$version" '$0 ~ "^## \\[" v "\\]" {on=1; next} /^## \[/ {on=0} on' CHANGELOG.md > notes.md
64
+ gh release view "$GITHUB_REF_NAME" >/dev/null 2>&1 ||
65
+ gh release create "$GITHUB_REF_NAME" --title "$GITHUB_REF_NAME" --notes-file notes.md
66
+ env:
67
+ GH_TOKEN: ${{ github.token }}
@@ -0,0 +1,18 @@
1
+ .venv/
2
+ __pycache__/
3
+ *.pyc
4
+ .pytest_cache/
5
+ .ruff_cache/
6
+ .coverage
7
+ coverage.xml
8
+ htmlcov/
9
+ dist/
10
+ build/
11
+ *.egg-info/
12
+ .DS_Store
13
+ tests/evals/results/
14
+
15
+ # Private working material (specs, plans, ADRs, research) and local grillspec state:
16
+ # never published.
17
+ private/
18
+ .grillspec/
@@ -0,0 +1,23 @@
1
+ # Contributing as an agent
2
+
3
+ This is the grillspec repository. These rules apply to every change here.
4
+
5
+ - **Commits and PRs carry no AI attribution.** No `Co-Authored-By: Claude`, no
6
+ "Generated with Claude Code", no similar line for any agent. CI rejects them.
7
+ - Commit messages and PR titles follow Conventional Commits (`feat:`, `fix:`, `docs:`,
8
+ `test:`, `ci:`, `build:`, `chore:`, `refactor:`). PRs are squash-merged.
9
+ - Before pushing, all of these pass:
10
+ `uv run ruff check . && uv run ruff format --check . && uv run basedpyright && uv run pytest`
11
+ and `uv run python scripts/lint_skills.py && uv run python scripts/bump_version.py --check && uv run python scripts/check_docs_mirror.py`
12
+ (`uv run python` rather than `python3`, so the same commands work on Windows).
13
+ - Runtime code uses the Python standard library only and runs on Python 3.11–3.15.
14
+ Never call `python3` from skills, hooks or docs: use the launchers
15
+ (`scripts/grillspec`, `scripts/grillspec.cmd`), which find a suitable Python.
16
+ Development tools live in the `dev` dependency group.
17
+ - Python follows Google-style docstrings everywhere, packages with private modules and
18
+ sorted `__all__` tuples, `from __future__ import annotations`.
19
+ - Skills (`skills/*/SKILL.md`) are English only, with exactly `name` and `description`
20
+ in the frontmatter; the router stays within 150 lines.
21
+ - Every user-facing doc exists in `docs/en` and `docs/ru` with the same structure.
22
+ - Specs, plans, ADRs and research live in `private/` (git-ignored) and are never
23
+ committed; follow them, and record deviations there.
@@ -0,0 +1,41 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project are documented here. The format follows
4
+ [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and the project uses
5
+ [Semantic Versioning](https://semver.org/spec/v2.0.0.html); while on 0.x, a minor
6
+ release may break things and says so here.
7
+
8
+ ## [Unreleased]
9
+
10
+ ## [0.1.0] - 2026-10-18
11
+
12
+ First public release.
13
+
14
+ ### Added
15
+
16
+ - `grillspec` CLI (`status`, `use`, `init`, `detect`, `install`, `uninstall`, `hook`,
17
+ `version`), standard library only, Python 3.11+.
18
+ - Layered configuration: project `.grillspec/config.toml` over the user file over
19
+ built-in defaults.
20
+ - Phases derived from artifacts and approvals; one active change per working tree.
21
+ - Session-start bootstrap for Claude Code, Cursor, Codex and Antigravity through one
22
+ fail-open hook runner; GigaCode bootstraps through `GIGACODE.md`.
23
+ - `using-grillspec` router skill and `grillspec-init` skill.
24
+ - Plugin manifests for Claude Code, Cursor, Codex and Antigravity; a fallback installer
25
+ with an exact uninstall.
26
+ - Grilling: `grillspec new`, decision logs, depth settings and the `grillspec-grill`
27
+ skill.
28
+ - Council: `grillspec council ask` with role subagents and external agent CLIs.
29
+ - Specs: `grillspec validate` for both backends, scenario IDs, content-bound
30
+ `grillspec approve spec`.
31
+ - Memory: a managed block in `AGENTS.md` and `grillspec memory list|add|retire`.
32
+ - Plans: one plan format for both backends, plan validation and `approve plan`.
33
+ - Execution: `grillspec exec` helpers and execution skills adapted from Superpowers.
34
+ - Archive: `grillspec archive` merges OpenSpec deltas or marks superpowers changes.
35
+ - Phase gates: pre-tool hooks block code edits while a change is grilled, specced or
36
+ planned; `grillspec gate pause|resume`.
37
+ - `grillspec tokens` and a generated cost table in the docs; measured session
38
+ overhead.
39
+
40
+ [Unreleased]: https://github.com/forbxpg/grillspec/compare/v0.1.0...HEAD
41
+ [0.1.0]: https://github.com/forbxpg/grillspec/releases/tag/v0.1.0
@@ -0,0 +1,7 @@
1
+ # Code of conduct
2
+
3
+ This project follows the [Contributor Covenant, version 2.1](https://www.contributor-covenant.org/version/2/1/code_of_conduct/).
4
+
5
+ Report unacceptable behaviour privately to the maintainer, [@forbxpg](https://github.com/forbxpg),
6
+ through a GitHub direct channel such as a private security advisory. Reports are handled
7
+ confidentially.
@@ -0,0 +1,89 @@
1
+ # Contributing to grillspec
2
+
3
+ Thank you for helping. grillspec is small on purpose: every skill line is read by an
4
+ agent on every activation, so a contribution is judged by what it changes in an
5
+ agent's behaviour, not by how much it adds.
6
+
7
+ ## Ground rules
8
+
9
+ - Commit messages and PR titles follow [Conventional Commits](https://www.conventionalcommits.org/).
10
+ PRs are squash-merged; the PR title becomes the commit message.
11
+ - No AI attribution in commits or PR descriptions (`Co-Authored-By: Claude`,
12
+ "Generated with …"). CI rejects it. Use agents freely; credit is yours.
13
+ - Runtime code is Python 3.11–3.15 with the standard library only, and must work on
14
+ Linux, macOS and Windows. Skills, hooks and docs never call `python3` directly:
15
+ they go through `scripts/grillspec` / `scripts/grillspec.cmd`.
16
+ - Every user-facing doc change lands in both `docs/en` and `docs/ru`.
17
+
18
+ ## Set up
19
+
20
+ ```bash
21
+ uv sync
22
+ ```
23
+
24
+ ## Check before you push
25
+
26
+ ```bash
27
+ uv run ruff check . && uv run ruff format --check . && uv run basedpyright && uv run pytest
28
+ uv run python scripts/lint_skills.py
29
+ uv run python scripts/bump_version.py --check
30
+ uv run python scripts/check_docs_mirror.py
31
+ ```
32
+
33
+ ## How work is planned here
34
+
35
+ grillspec develops itself with grillspec: a change that involves a decision is grilled,
36
+ specced and planned before code. Those working documents stay with whoever writes them
37
+ (`private/` is git-ignored); the PR description carries what reviewers need.
38
+ Typos, renames and other changes without a choice in them need none of it.
39
+
40
+ ## Changing a skill
41
+
42
+ Skills are behaviour, so they are tested like behaviour:
43
+
44
+ 1. Write down the failure you want to fix: the prompt, what the agent did, and what it
45
+ should have done.
46
+ 2. Reproduce it without your change (an eval case in `tests/evals/` or a pressure
47
+ scenario in `tests/pressure/`).
48
+ 3. Change the skill, rerun, and show the difference in the PR.
49
+
50
+ Keep skill frontmatter to `name` and `description`, English only. The router
51
+ (`skills/using-grillspec`) stays within 150 lines.
52
+
53
+ ## Adding a harness
54
+
55
+ 1. Add its skill directory and context file to `src/grillspec/install/_targets.py`.
56
+ 2. If it has session-start hooks, add its output shape to
57
+ `src/grillspec/hooks/_session_start.py`, a hook config under `hooks/`, and a branch
58
+ in `hooks/run-hook.cmd` for the no-Python message.
59
+ 3. Add `skills/using-grillspec/references/<harness>-tools.md`.
60
+ 4. Add the harness to `tests/smoke/smoke.sh` and record a run in `tests/smoke/README.md`.
61
+
62
+ ## Releasing (maintainer)
63
+
64
+ Before the tag, on the release branch:
65
+
66
+ 1. `uv run python scripts/bump_version.py X.Y.Z`; move `[Unreleased]` in `CHANGELOG.md`
67
+ under `## [X.Y.Z] - YYYY-MM-DD` and update the compare links at the bottom.
68
+ 2. CI is green, and locally `claude plugin validate --strict .` passes.
69
+ 3. Pressure evals: `claude plugin eval . --eval-dir tests/evals --scaffold --tag pressure
70
+ --ablation none --no-publish --trust-plugin --allow-tools Edit Write`. Every case
71
+ averages at least 0.8; record the scores in the release PR description before
72
+ it is merged.
73
+ 4. Smoke runs: `tests/smoke/smoke.sh` and `tests/smoke/smoke_gates.sh` for Claude Code
74
+ and Cursor must PASS; every other harness gets a dated row in
75
+ `tests/smoke/README.md` saying why it was not run.
76
+ 5. `uv run python scripts/check_tokens.py` passes; after a harness or model update, run
77
+ `tests/benchmark/overhead.sh claude` and add a row to `docs/*/tokens.md`.
78
+ 6. Merge the release PR as `chore: release X.Y.Z`.
79
+
80
+ Publishing (the owner, once per step):
81
+
82
+ 1. First release only: on pypi.org add a pending trusted publisher for `grillspec`
83
+ (repository `forbxpg/grillspec`, workflow `release.yml`, environment `pypi`), and
84
+ create the `pypi` environment in the repository settings.
85
+ 2. Tag `vX.Y.Z` on main and push it; the release workflow checks the version and the
86
+ changelog, builds, publishes to PyPI and creates the GitHub release.
87
+ 3. Check the PyPI page, `uvx grillspec version`, and the GitHub release notes.
88
+ 4. Catalogues: the repository itself is the Claude Code and Codex marketplace; submit
89
+ to the Anthropic plugin directory and other catalogues with the README summary.
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 forbxpg
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.
grillspec-0.1.0/NOTICE ADDED
@@ -0,0 +1,42 @@
1
+ grillspec
2
+ Copyright (c) 2026 forbxpg. Licensed under the MIT License (see LICENSE).
3
+
4
+ grillspec is an independent project. It builds on ideas, formats and, where noted,
5
+ code from the following MIT-licensed projects. Their copyright notices are kept here
6
+ as their licenses require.
7
+
8
+ Superpowers 7.0.0 — https://github.com/obra/superpowers
9
+ Copyright (c) 2025 Jesse Vincent. MIT License.
10
+ Taken: the session-start bootstrap pattern and the polyglot hook runner
11
+ (hooks/run-hook.cmd is based on Superpowers' hooks/run-hook.cmd); the plan format,
12
+ the execution workflow (subagent-driven development, executing plans), systematic
13
+ debugging, verification and code-review practices; the method for writing and
14
+ pressure-testing skills.
15
+ Skills adapted from Superpowers 7.0.0 (text kept where it still holds; renamed,
16
+ re-pointed to `grillspec exec` and the grillspec plan format):
17
+ subagent-driven-development → grillspec-subagent-execution, executing-plans →
18
+ grillspec-inline-execution, test-driven-development → grillspec-tdd,
19
+ systematic-debugging → grillspec-debugging, verification-before-completion →
20
+ grillspec-verification, requesting-code-review → grillspec-requesting-review,
21
+ receiving-code-review → grillspec-receiving-review, using-git-worktrees →
22
+ grillspec-worktrees, finishing-a-development-branch → grillspec-finishing,
23
+ dispatching-parallel-agents → grillspec-parallel-agents.
24
+
25
+ OpenSpec 1.14.2 — https://github.com/Fission-AI/OpenSpec
26
+ Copyright (c) Fission AI. MIT License.
27
+ Taken: the living-spec model (specs plus change deltas, archive), the Requirement /
28
+ Scenario format and the delta sections. grillspec's openspec backend writes files
29
+ compatible with the OpenSpec CLI; it does not include OpenSpec code.
30
+
31
+ mattpocock/skills 1.3.1 — https://github.com/mattpocock/skills
32
+ Copyright (c) 2026 Matt Pocock. MIT License.
33
+ Taken: the grilling approach (decision tree, recommended answer per question,
34
+ facts looked up versus decisions asked) and its round-based question format.
35
+
36
+ claude-council 2026.7.6 — https://github.com/hex/claude-council
37
+ Copyright (c) 2025-2026 hex. MIT License.
38
+ Taken: the idea of a council of independent perspectives with role lenses and a
39
+ consensus / divergence / recommendation synthesis.
40
+
41
+ The MIT License text for each project is the same as in LICENSE, with the copyright
42
+ line above.