Repository navigation
Conversation
Port dari Ruby ke Python karena server Hermes tanpa Ruby, dan struktur skill kita bersarang (multi-kategori) bukan flat skills/*/. - scripts/validate-skills-python: validasi frontmatter, name, description, deteksi nama kembar lintas skill, anti-pola gh secret --body - - scripts/committer: stage eksplisit, pesan wajib, validasi dulu, tolak file rahasia (.env/.pem/.key) - hooks/pre-commit-python: hook git jalankan validator - HERMES-PORT.md: dokumentasi + pitfall + protokol bersih-bersih Temuan pertama: 491 skill Hermes, 2 bug (YAML rusak + nama kembar). [chokdi_staging]
Ruby is not installed on every machine that runs this repo's pre-commit hook (Linux servers, slim CI images), so validation silently cannot run there. This adds a dependency-light Python equivalent. Parity with the Ruby script: - front matter must start on line 1 and close with --- - must parse as a YAML mapping - name and description must be non-empty strings - gh secret set ... --body - is rejected Two deliberate differences for larger skill pools: - discovery is recursive, so pools that nest by category (<category>/<skill>/SKILL.md) are validated instead of silently skipped - duplicate name detection is global: name is the routing key, so a collision across directories is an error, not just within one level The block-scalar description case (description: | that failed to parse) is reported explicitly rather than as a generic missing-description error. Verified against a 491-skill nested pool and this repo's own skills/.
|
🦞👀 Pull request received. I will update this pull request when review starts. ClawSweeper review completeClawSweeper finished reviewing this revision. The review result is being finalized. |
|
Codex review: needs real behavior proof before merge. Reviewed September 29, 2026, 1:36 AM ET / 05:36 UTC. ClawSweeper reviewWhat this changesAdds two Python skill validators, a Python pre-commit hook and commit helper, and documentation for a nested Hermes skill pool. Merge readiness⛔ Blocked before merge - 15 items remain The Python validator addresses a real portability gap in the existing Ruby-only hook, but the submitted branch is not ready to merge: its new hook cannot find the validator, its fallback parser can accept invalid YAML, and the added commit helper can include files it did not check. This repository’s conservative onboarding policy also precludes automatic PR closure. Priority: P2 Review scores
Verification
How this fits togetherSkill files enter a local validation script before a Git commit; validation errors should stop the commit. The existing hook invokes the Ruby validator, while this PR adds separate Python entrypoints and a helper that stages, commits, and optionally pushes files. flowchart LR
A[Skill files] --> B[Pre-commit hook]
B --> C[Validator selection]
C --> D[Front matter checks]
D --> E{Errors found?}
E -->|Yes| F[Block commit]
E -->|No| G[Allow commit]
Decision needed
Why: The PR offers two different Python validators and adds a separate commit workflow, while current documentation names the Ruby validator as the shared entrypoint. Before merge
Findings
Agent review detailsSecurityNeeds attention: The new commit helper can commit and push already-staged files that its secret-name check never examines. Review metrics
Merge-risk optionsMaintainer options:
Technical reviewBest possible solution: Choose one Python validator, make runtime selection work from the repository hook, reject unsupported YAML rather than passing it, and keep any Hermes-specific commit workflow in a focused follow-up. Do we have a high-confidence way to reproduce the issue? Yes for the introduced defects: the hook's missing executable, permissive fallback parser, and unrestricted commit operation are traceable directly from the new source. The reported 491-skill pool itself is not available in this checkout. Is this the best way to solve the issue? No. A single Python validator connected to the existing hook is narrower and avoids maintaining two divergent ports and an unrelated commit workflow. Full review comments:
Overall correctness: patch is incorrect AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning medium; reviewed against 3f8c6a33f911. LabelsLabel changes:
Label justifications:
EvidenceSecurity concerns:
What I checked:
Likely related people:
Rating scale
Overall follows the weaker of proof and patch quality. Workflow
|
|
Thanks for documenting the Python-only and nested-pool use cases. I’m closing this because the proposed parallel validator and Hermes-specific tooling do not fit this repository’s single canonical guardrail. The diff also includes two validator copies, an unrelated auto-pushing commit helper, and a hook pointing at The validation contract would also weaken: without PyYAML, malformed YAML and non-string values can pass; |
What
Adds
scripts/validate-skills-py— a dependency-light Python port ofscripts/validate-skills.Why
The Ruby script cannot run on every machine:
hooks/pre-commitcallsscripts/validate-skills, so on those machines theguardrail silently does nothing.
skills/*/SKILL.md(one level, flat). Skill poolsthat nest by category —
<category>/[<subcategory>/]<skill>/SKILL.md— arecommon, and against those the Ruby script validates zero files and still
exits 0, which looks like a pass.
Parity with the Ruby version
---nameanddescriptionmust be non-empty stringsgh secret set ... --body -is rejectedDeliberate differences
nameis the routing key, so two skillssharing one name is a collision regardless of which directory they sit in.
(The Ruby version tracks duplicates only within the single scanned level.)
description: |that failed to parse) arereported specifically instead of as a generic missing-description error.
Verification
Run against a real 491-skill nested pool and this repo's own
skills/:On that pool it immediately surfaced two real defects that the flat glob never
reported:
descriptioncontained an unquotedSource: owner/repo, makingthe YAML invalid — the skill never routed at all
nameNotes
PyYAMLis used when available, with a minimal fallbackparser otherwise. Python 3.8+.
--root,--only-changed,--json,--quietflags for pre-commit/CI use.scripts/validate-skillsas a runtime-selectedimplementation, or keep the Ruby script canonical and treat this purely as an
alternative for Python-only machines — your call.