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.
- grillspec-0.1.0/.agents/plugins/marketplace.json +12 -0
- grillspec-0.1.0/.antigravity-plugin/plugin.json +21 -0
- grillspec-0.1.0/.claude-plugin/marketplace.json +18 -0
- grillspec-0.1.0/.claude-plugin/plugin.json +19 -0
- grillspec-0.1.0/.codex-plugin/plugin.json +38 -0
- grillspec-0.1.0/.cursor-plugin/plugin.json +22 -0
- grillspec-0.1.0/.gitattributes +5 -0
- grillspec-0.1.0/.github/CODEOWNERS +1 -0
- grillspec-0.1.0/.github/ISSUE_TEMPLATE/bug_report.yml +30 -0
- grillspec-0.1.0/.github/ISSUE_TEMPLATE/config.yml +5 -0
- grillspec-0.1.0/.github/ISSUE_TEMPLATE/feature_request.yml +17 -0
- grillspec-0.1.0/.github/pull_request_template.md +8 -0
- grillspec-0.1.0/.github/workflows/ci.yml +93 -0
- grillspec-0.1.0/.github/workflows/pr-title.yml +18 -0
- grillspec-0.1.0/.github/workflows/release.yml +67 -0
- grillspec-0.1.0/.gitignore +18 -0
- grillspec-0.1.0/AGENTS.md +23 -0
- grillspec-0.1.0/CHANGELOG.md +41 -0
- grillspec-0.1.0/CODE_OF_CONDUCT.md +7 -0
- grillspec-0.1.0/CONTRIBUTING.md +89 -0
- grillspec-0.1.0/LICENSE +21 -0
- grillspec-0.1.0/NOTICE +42 -0
- grillspec-0.1.0/PKG-INFO +85 -0
- grillspec-0.1.0/README.md +60 -0
- grillspec-0.1.0/README.ru.md +60 -0
- grillspec-0.1.0/SECURITY.md +30 -0
- grillspec-0.1.0/docs/en/README.md +20 -0
- grillspec-0.1.0/docs/en/configuration.md +63 -0
- grillspec-0.1.0/docs/en/how-it-works/archive.md +50 -0
- grillspec-0.1.0/docs/en/how-it-works/bootstrap.md +67 -0
- grillspec-0.1.0/docs/en/how-it-works/council.md +99 -0
- grillspec-0.1.0/docs/en/how-it-works/execution.md +55 -0
- grillspec-0.1.0/docs/en/how-it-works/gates.md +76 -0
- grillspec-0.1.0/docs/en/how-it-works/grilling.md +75 -0
- grillspec-0.1.0/docs/en/how-it-works/memory.md +79 -0
- grillspec-0.1.0/docs/en/how-it-works/plans.md +95 -0
- grillspec-0.1.0/docs/en/how-it-works/specs.md +117 -0
- grillspec-0.1.0/docs/en/installation.md +74 -0
- grillspec-0.1.0/docs/en/tokens.md +63 -0
- grillspec-0.1.0/docs/ru/README.md +20 -0
- grillspec-0.1.0/docs/ru/configuration.md +63 -0
- grillspec-0.1.0/docs/ru/how-it-works/archive.md +50 -0
- grillspec-0.1.0/docs/ru/how-it-works/bootstrap.md +68 -0
- grillspec-0.1.0/docs/ru/how-it-works/council.md +100 -0
- grillspec-0.1.0/docs/ru/how-it-works/execution.md +54 -0
- grillspec-0.1.0/docs/ru/how-it-works/gates.md +78 -0
- grillspec-0.1.0/docs/ru/how-it-works/grilling.md +75 -0
- grillspec-0.1.0/docs/ru/how-it-works/memory.md +80 -0
- grillspec-0.1.0/docs/ru/how-it-works/plans.md +97 -0
- grillspec-0.1.0/docs/ru/how-it-works/specs.md +119 -0
- grillspec-0.1.0/docs/ru/installation.md +74 -0
- grillspec-0.1.0/docs/ru/tokens.md +64 -0
- grillspec-0.1.0/hooks/hooks-codex.json +27 -0
- grillspec-0.1.0/hooks/hooks-cursor.json +17 -0
- grillspec-0.1.0/hooks/hooks.json +27 -0
- grillspec-0.1.0/hooks/run-hook.cmd +51 -0
- grillspec-0.1.0/hooks.json +24 -0
- grillspec-0.1.0/notes.md +31 -0
- grillspec-0.1.0/pyproject.toml +66 -0
- grillspec-0.1.0/pyrightconfig.json +34 -0
- grillspec-0.1.0/ruff.toml +65 -0
- grillspec-0.1.0/scripts/bump_version.py +130 -0
- grillspec-0.1.0/scripts/check_attribution.py +92 -0
- grillspec-0.1.0/scripts/check_docs_mirror.py +74 -0
- grillspec-0.1.0/scripts/check_tokens.py +69 -0
- grillspec-0.1.0/scripts/grillspec +35 -0
- grillspec-0.1.0/scripts/grillspec.cmd +22 -0
- grillspec-0.1.0/scripts/grillspec.py +12 -0
- grillspec-0.1.0/scripts/lint_skills.py +110 -0
- grillspec-0.1.0/skills/grillspec-archive/SKILL.md +57 -0
- grillspec-0.1.0/skills/grillspec-council/SKILL.md +123 -0
- grillspec-0.1.0/skills/grillspec-council/references/prompt.md +27 -0
- grillspec-0.1.0/skills/grillspec-debugging/SKILL.md +285 -0
- grillspec-0.1.0/skills/grillspec-debugging/condition-based-waiting.md +116 -0
- grillspec-0.1.0/skills/grillspec-debugging/defense-in-depth.md +124 -0
- grillspec-0.1.0/skills/grillspec-debugging/root-cause-tracing.md +169 -0
- grillspec-0.1.0/skills/grillspec-finishing/SKILL.md +229 -0
- grillspec-0.1.0/skills/grillspec-grill/SKILL.md +131 -0
- grillspec-0.1.0/skills/grillspec-init/SKILL.md +33 -0
- grillspec-0.1.0/skills/grillspec-inline-execution/SKILL.md +393 -0
- grillspec-0.1.0/skills/grillspec-memory/SKILL.md +99 -0
- grillspec-0.1.0/skills/grillspec-parallel-agents/SKILL.md +167 -0
- grillspec-0.1.0/skills/grillspec-plans/SKILL.md +111 -0
- grillspec-0.1.0/skills/grillspec-plans/references/plan-check.md +21 -0
- grillspec-0.1.0/skills/grillspec-plans/references/plan.md +69 -0
- grillspec-0.1.0/skills/grillspec-receiving-review/SKILL.md +205 -0
- grillspec-0.1.0/skills/grillspec-requesting-review/SKILL.md +95 -0
- grillspec-0.1.0/skills/grillspec-requesting-review/code-reviewer.md +198 -0
- grillspec-0.1.0/skills/grillspec-specs/SKILL.md +105 -0
- grillspec-0.1.0/skills/grillspec-specs/references/builder-check.md +24 -0
- grillspec-0.1.0/skills/grillspec-specs/references/openspec.md +78 -0
- grillspec-0.1.0/skills/grillspec-specs/references/superpowers.md +41 -0
- grillspec-0.1.0/skills/grillspec-subagent-execution/SKILL.md +587 -0
- grillspec-0.1.0/skills/grillspec-subagent-execution/implementer-prompt.md +157 -0
- grillspec-0.1.0/skills/grillspec-subagent-execution/re-review-prompt.md +115 -0
- grillspec-0.1.0/skills/grillspec-subagent-execution/task-reviewer-prompt.md +207 -0
- grillspec-0.1.0/skills/grillspec-tdd/SKILL.md +355 -0
- grillspec-0.1.0/skills/grillspec-tdd/writing-good-tests.md +198 -0
- grillspec-0.1.0/skills/grillspec-verification/SKILL.md +121 -0
- grillspec-0.1.0/skills/grillspec-worktrees/SKILL.md +169 -0
- grillspec-0.1.0/skills/using-grillspec/SKILL.md +119 -0
- grillspec-0.1.0/skills/using-grillspec/references/antigravity-tools.md +12 -0
- grillspec-0.1.0/skills/using-grillspec/references/claude-code-tools.md +12 -0
- grillspec-0.1.0/skills/using-grillspec/references/codex-tools.md +13 -0
- grillspec-0.1.0/skills/using-grillspec/references/cursor-tools.md +12 -0
- grillspec-0.1.0/skills/using-grillspec/references/gigacode-tools.md +15 -0
- grillspec-0.1.0/src/grillspec/__init__.py +7 -0
- grillspec-0.1.0/src/grillspec/__main__.py +9 -0
- grillspec-0.1.0/src/grillspec/archive/__init__.py +7 -0
- grillspec-0.1.0/src/grillspec/archive/_archive.py +290 -0
- grillspec-0.1.0/src/grillspec/archive/_merge.py +344 -0
- grillspec-0.1.0/src/grillspec/blocks/__init__.py +25 -0
- grillspec-0.1.0/src/grillspec/blocks/_edit.py +192 -0
- grillspec-0.1.0/src/grillspec/cli/__init__.py +7 -0
- grillspec-0.1.0/src/grillspec/cli/_main.py +1053 -0
- grillspec-0.1.0/src/grillspec/config/__init__.py +32 -0
- grillspec-0.1.0/src/grillspec/config/_load.py +275 -0
- grillspec-0.1.0/src/grillspec/config/_model.py +123 -0
- grillspec-0.1.0/src/grillspec/council/__init__.py +38 -0
- grillspec-0.1.0/src/grillspec/council/_contract.py +59 -0
- grillspec-0.1.0/src/grillspec/council/_proc.py +243 -0
- grillspec-0.1.0/src/grillspec/council/_prompt.py +128 -0
- grillspec-0.1.0/src/grillspec/council/_run.py +290 -0
- grillspec-0.1.0/src/grillspec/council/_vendors.py +332 -0
- grillspec-0.1.0/src/grillspec/detect/__init__.py +21 -0
- grillspec-0.1.0/src/grillspec/detect/_detect.py +211 -0
- grillspec-0.1.0/src/grillspec/execute/__init__.py +21 -0
- grillspec-0.1.0/src/grillspec/execute/_exec.py +335 -0
- grillspec-0.1.0/src/grillspec/gates/__init__.py +10 -0
- grillspec-0.1.0/src/grillspec/gates/_adapters.py +152 -0
- grillspec-0.1.0/src/grillspec/gates/_gate.py +225 -0
- grillspec-0.1.0/src/grillspec/gates/_patch.py +22 -0
- grillspec-0.1.0/src/grillspec/gates/_shell.py +466 -0
- grillspec-0.1.0/src/grillspec/hooks/__init__.py +7 -0
- grillspec-0.1.0/src/grillspec/hooks/_session_start.py +146 -0
- grillspec-0.1.0/src/grillspec/init/__init__.py +7 -0
- grillspec-0.1.0/src/grillspec/init/_init.py +72 -0
- grillspec-0.1.0/src/grillspec/install/__init__.py +8 -0
- grillspec-0.1.0/src/grillspec/install/_install.py +275 -0
- grillspec-0.1.0/src/grillspec/install/_receipt.py +62 -0
- grillspec-0.1.0/src/grillspec/install/_targets.py +77 -0
- grillspec-0.1.0/src/grillspec/markdown/__init__.py +15 -0
- grillspec-0.1.0/src/grillspec/markdown/_fences.py +75 -0
- grillspec-0.1.0/src/grillspec/memory/__init__.py +31 -0
- grillspec-0.1.0/src/grillspec/memory/_block.py +213 -0
- grillspec-0.1.0/src/grillspec/paths/__init__.py +7 -0
- grillspec-0.1.0/src/grillspec/paths/_data.py +94 -0
- grillspec-0.1.0/src/grillspec/py.typed +0 -0
- grillspec-0.1.0/src/grillspec/specs/__init__.py +26 -0
- grillspec-0.1.0/src/grillspec/specs/_openspec.py +608 -0
- grillspec-0.1.0/src/grillspec/specs/_parse.py +264 -0
- grillspec-0.1.0/src/grillspec/specs/_plan.py +392 -0
- grillspec-0.1.0/src/grillspec/specs/_report.py +87 -0
- grillspec-0.1.0/src/grillspec/specs/_rules.py +223 -0
- grillspec-0.1.0/src/grillspec/specs/_validate.py +149 -0
- grillspec-0.1.0/src/grillspec/state/__init__.py +47 -0
- grillspec-0.1.0/src/grillspec/state/_changes.py +399 -0
- grillspec-0.1.0/src/grillspec/state/_create.py +116 -0
- grillspec-0.1.0/src/grillspec/state/_hash.py +100 -0
- grillspec-0.1.0/src/grillspec/state/_layout.py +47 -0
- grillspec-0.1.0/src/grillspec/state/_phase.py +209 -0
- grillspec-0.1.0/src/grillspec/state/_sidecar.py +169 -0
- grillspec-0.1.0/src/grillspec/state/_store.py +180 -0
- grillspec-0.1.0/src/grillspec/tokens/__init__.py +23 -0
- grillspec-0.1.0/src/grillspec/tokens/_estimate.py +244 -0
- grillspec-0.1.0/templates/agents-block.md +3 -0
- grillspec-0.1.0/templates/config.toml +18 -0
- grillspec-0.1.0/tests/benchmark/overhead.sh +48 -0
- grillspec-0.1.0/tests/conftest.py +38 -0
- grillspec-0.1.0/tests/evals/_fixtures/project.sh +147 -0
- grillspec-0.1.0/tests/evals/archive-asks/case.yaml +5 -0
- grillspec-0.1.0/tests/evals/archive-asks/fixture.sh +2 -0
- grillspec-0.1.0/tests/evals/archive-asks/graders/asks.md +8 -0
- grillspec-0.1.0/tests/evals/archive-asks/graders/no-edit.md +9 -0
- grillspec-0.1.0/tests/evals/archive-asks/graders/no-write.md +9 -0
- grillspec-0.1.0/tests/evals/archive-asks/graders/skill.md +8 -0
- grillspec-0.1.0/tests/evals/archive-asks/prompt.md +7 -0
- grillspec-0.1.0/tests/evals/bootstrap-present/graders/router.md +9 -0
- grillspec-0.1.0/tests/evals/bootstrap-present/prompt.md +6 -0
- grillspec-0.1.0/tests/evals/council-roles/case.yaml +5 -0
- grillspec-0.1.0/tests/evals/council-roles/fixture.sh +2 -0
- grillspec-0.1.0/tests/evals/council-roles/graders/council-line.md +8 -0
- grillspec-0.1.0/tests/evals/council-roles/graders/subagents.md +8 -0
- grillspec-0.1.0/tests/evals/council-roles/graders/weak-signal.md +8 -0
- grillspec-0.1.0/tests/evals/council-roles/prompt.md +7 -0
- grillspec-0.1.0/tests/evals/execute-trigger/case.yaml +5 -0
- grillspec-0.1.0/tests/evals/execute-trigger/fixture.sh +2 -0
- grillspec-0.1.0/tests/evals/execute-trigger/graders/inline-skill.md +8 -0
- grillspec-0.1.0/tests/evals/execute-trigger/prompt.md +7 -0
- grillspec-0.1.0/tests/evals/grill-hurry/case.yaml +5 -0
- grillspec-0.1.0/tests/evals/grill-hurry/fixture.sh +2 -0
- grillspec-0.1.0/tests/evals/grill-hurry/graders/assumptions.md +8 -0
- grillspec-0.1.0/tests/evals/grill-hurry/graders/proceeds.md +10 -0
- grillspec-0.1.0/tests/evals/grill-hurry/prompt.md +7 -0
- grillspec-0.1.0/tests/evals/grill-logs/case.yaml +5 -0
- grillspec-0.1.0/tests/evals/grill-logs/fixture.sh +2 -0
- grillspec-0.1.0/tests/evals/grill-logs/graders/edits-log.md +8 -0
- grillspec-0.1.0/tests/evals/grill-logs/graders/settled.md +8 -0
- grillspec-0.1.0/tests/evals/grill-logs/prompt.md +7 -0
- grillspec-0.1.0/tests/evals/grill-resume/case.yaml +5 -0
- grillspec-0.1.0/tests/evals/grill-resume/fixture.sh +2 -0
- grillspec-0.1.0/tests/evals/grill-resume/graders/next-open.md +8 -0
- grillspec-0.1.0/tests/evals/grill-resume/graders/no-spec.md +10 -0
- grillspec-0.1.0/tests/evals/grill-resume/prompt.md +7 -0
- grillspec-0.1.0/tests/evals/grill-triggers/case.yaml +5 -0
- grillspec-0.1.0/tests/evals/grill-triggers/fixture.sh +2 -0
- grillspec-0.1.0/tests/evals/grill-triggers/graders/no-code.md +9 -0
- grillspec-0.1.0/tests/evals/grill-triggers/graders/skill.md +8 -0
- grillspec-0.1.0/tests/evals/grill-triggers/prompt.md +6 -0
- grillspec-0.1.0/tests/evals/init-triggers/graders/init-skill.md +8 -0
- grillspec-0.1.0/tests/evals/init-triggers/prompt.md +6 -0
- grillspec-0.1.0/tests/evals/memory-propose/case.yaml +5 -0
- grillspec-0.1.0/tests/evals/memory-propose/fixture.sh +2 -0
- grillspec-0.1.0/tests/evals/memory-propose/graders/no-agents-write.md +10 -0
- grillspec-0.1.0/tests/evals/memory-propose/graders/no-block-edit.md +10 -0
- grillspec-0.1.0/tests/evals/memory-propose/graders/no-secret.md +8 -0
- grillspec-0.1.0/tests/evals/memory-propose/graders/numbered-list.md +8 -0
- grillspec-0.1.0/tests/evals/memory-propose/graders/test-command.md +7 -0
- grillspec-0.1.0/tests/evals/memory-propose/prompt.md +7 -0
- grillspec-0.1.0/tests/evals/plan-from-spec/case.yaml +5 -0
- grillspec-0.1.0/tests/evals/plan-from-spec/fixture.sh +2 -0
- grillspec-0.1.0/tests/evals/plan-from-spec/graders/asks.md +8 -0
- grillspec-0.1.0/tests/evals/plan-from-spec/graders/covers.md +8 -0
- grillspec-0.1.0/tests/evals/plan-from-spec/graders/task-line.md +8 -0
- grillspec-0.1.0/tests/evals/plan-from-spec/graders/test-strategy.md +8 -0
- grillspec-0.1.0/tests/evals/plan-from-spec/prompt.md +7 -0
- grillspec-0.1.0/tests/evals/pressure-gate/case.yaml +5 -0
- grillspec-0.1.0/tests/evals/pressure-gate/fixture.sh +2 -0
- grillspec-0.1.0/tests/evals/pressure-gate/graders/holds.md +11 -0
- grillspec-0.1.0/tests/evals/pressure-gate/graders/names-the-way.md +8 -0
- grillspec-0.1.0/tests/evals/pressure-gate/prompt.md +8 -0
- grillspec-0.1.0/tests/evals/pressure-tdd/case.yaml +5 -0
- grillspec-0.1.0/tests/evals/pressure-tdd/fixture.sh +2 -0
- grillspec-0.1.0/tests/evals/pressure-tdd/graders/names-untested.md +8 -0
- grillspec-0.1.0/tests/evals/pressure-tdd/graders/test-first.md +12 -0
- grillspec-0.1.0/tests/evals/pressure-tdd/prompt.md +8 -0
- grillspec-0.1.0/tests/evals/spec-deferred/case.yaml +5 -0
- grillspec-0.1.0/tests/evals/spec-deferred/fixture.sh +2 -0
- grillspec-0.1.0/tests/evals/spec-deferred/graders/asks-q3.md +8 -0
- grillspec-0.1.0/tests/evals/spec-deferred/graders/no-scenarios-yet.md +10 -0
- grillspec-0.1.0/tests/evals/spec-deferred/prompt.md +7 -0
- grillspec-0.1.0/tests/evals/spec-from-log/case.yaml +5 -0
- grillspec-0.1.0/tests/evals/spec-from-log/fixture.sh +2 -0
- grillspec-0.1.0/tests/evals/spec-from-log/graders/asks-approval.md +10 -0
- grillspec-0.1.0/tests/evals/spec-from-log/graders/requirements.md +8 -0
- grillspec-0.1.0/tests/evals/spec-from-log/graders/scenario-ids.md +8 -0
- grillspec-0.1.0/tests/evals/spec-from-log/prompt.md +7 -0
- grillspec-0.1.0/tests/fakes.py +139 -0
- grillspec-0.1.0/tests/smoke/README.md +42 -0
- grillspec-0.1.0/tests/smoke/smoke.sh +40 -0
- grillspec-0.1.0/tests/smoke/smoke_gates.sh +34 -0
- grillspec-0.1.0/tests/support.py +98 -0
- grillspec-0.1.0/tests/unit/test_approve.py +102 -0
- grillspec-0.1.0/tests/unit/test_archive.py +294 -0
- grillspec-0.1.0/tests/unit/test_archive_review.py +294 -0
- grillspec-0.1.0/tests/unit/test_blocks.py +69 -0
- grillspec-0.1.0/tests/unit/test_bump_version.py +67 -0
- grillspec-0.1.0/tests/unit/test_check_attribution.py +63 -0
- grillspec-0.1.0/tests/unit/test_check_tokens.py +72 -0
- grillspec-0.1.0/tests/unit/test_cli.py +45 -0
- grillspec-0.1.0/tests/unit/test_cli_status.py +87 -0
- grillspec-0.1.0/tests/unit/test_config.py +115 -0
- grillspec-0.1.0/tests/unit/test_council_cli.py +245 -0
- grillspec-0.1.0/tests/unit/test_council_config.py +80 -0
- grillspec-0.1.0/tests/unit/test_council_detect.py +159 -0
- grillspec-0.1.0/tests/unit/test_council_prompt.py +117 -0
- grillspec-0.1.0/tests/unit/test_council_review.py +146 -0
- grillspec-0.1.0/tests/unit/test_council_run.py +286 -0
- grillspec-0.1.0/tests/unit/test_detect.py +90 -0
- grillspec-0.1.0/tests/unit/test_docs_mirror.py +55 -0
- grillspec-0.1.0/tests/unit/test_exec.py +184 -0
- grillspec-0.1.0/tests/unit/test_exec_review.py +185 -0
- grillspec-0.1.0/tests/unit/test_gate_hooks.py +248 -0
- grillspec-0.1.0/tests/unit/test_gate_wiring.py +162 -0
- grillspec-0.1.0/tests/unit/test_gates.py +247 -0
- grillspec-0.1.0/tests/unit/test_gates_review.py +203 -0
- grillspec-0.1.0/tests/unit/test_grill_phase.py +114 -0
- grillspec-0.1.0/tests/unit/test_init.py +82 -0
- grillspec-0.1.0/tests/unit/test_install.py +133 -0
- grillspec-0.1.0/tests/unit/test_launcher.py +128 -0
- grillspec-0.1.0/tests/unit/test_lint_skills.py +86 -0
- grillspec-0.1.0/tests/unit/test_manifests.py +56 -0
- grillspec-0.1.0/tests/unit/test_memory_block.py +168 -0
- grillspec-0.1.0/tests/unit/test_memory_cli.py +149 -0
- grillspec-0.1.0/tests/unit/test_memory_review.py +106 -0
- grillspec-0.1.0/tests/unit/test_new.py +146 -0
- grillspec-0.1.0/tests/unit/test_paths.py +16 -0
- grillspec-0.1.0/tests/unit/test_plan_approval.py +215 -0
- grillspec-0.1.0/tests/unit/test_plan_review.py +178 -0
- grillspec-0.1.0/tests/unit/test_plan_rules.py +238 -0
- grillspec-0.1.0/tests/unit/test_repo_hygiene.py +25 -0
- grillspec-0.1.0/tests/unit/test_review_fixes.py +148 -0
- grillspec-0.1.0/tests/unit/test_review_round3.py +197 -0
- grillspec-0.1.0/tests/unit/test_review_s2.py +83 -0
- grillspec-0.1.0/tests/unit/test_run_hook.py +65 -0
- grillspec-0.1.0/tests/unit/test_session_start.py +97 -0
- grillspec-0.1.0/tests/unit/test_spec_hash.py +197 -0
- grillspec-0.1.0/tests/unit/test_specs_cli.py +178 -0
- grillspec-0.1.0/tests/unit/test_specs_openspec.py +220 -0
- grillspec-0.1.0/tests/unit/test_specs_parse.py +163 -0
- grillspec-0.1.0/tests/unit/test_specs_review.py +185 -0
- grillspec-0.1.0/tests/unit/test_specs_rules.py +171 -0
- grillspec-0.1.0/tests/unit/test_state.py +122 -0
- grillspec-0.1.0/tests/unit/test_state_robustness.py +124 -0
- grillspec-0.1.0/tests/unit/test_tokens.py +79 -0
- grillspec-0.1.0/tests/unit/test_tokens_review.py +158 -0
- grillspec-0.1.0/tests/unit/test_vendored_skills.py +66 -0
- grillspec-0.1.0/tests/unit/test_wheel.py +74 -0
- 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 @@
|
|
|
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,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.
|
grillspec-0.1.0/LICENSE
ADDED
|
@@ -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.
|