Grimoire
Open source catalog of reusable skills and workflows for AI agents, installable in Claude Code and Codex.
Problem
AI agent skills and workflows are usually tied to a single tool and copied by hand from one tool to another.
Decisions
- Platform-agnostic architecture: one canonical implementation per skill and documented packaging per tool.
- Repository contracts verified by Python tests and behavior evaluations with recorded scenarios and results.
- Implementation, documentation, tests and platform integration kept separate.
Stack
- Python
- Markdown
- Claude Code
- Codex
Result
Open source catalog with 15 skills, one of them orchestrating a composed workflow (chain), packaged for Claude Code, Codex, Pi and Hermes Agent, with a suite of 41 Python tests.
Learnings
Defining stable contracts across different tools and testing agent behavior, not only code.
How I used AI
The product is instructions for AI agents, so skill changes are evaluated with agents: each scenario has observable criteria, runs against the current skills to record the RED result, and runs again after the smallest fix to record the GREEN result, in a fresh context and an isolated sandbox. No scenario is marked as passing from reading SKILL.md alone. The repository's structural contracts are checked by Python tests.
Evidence
- Source code and installation guides on GitHub
Suite with 41 Python tests (tests/test_repository.py): all pass in a local run at commit d15acbb$ python -m unittest discover -s tests ... Ran 41 tests in 0.035s OKIllustrationCatalog structure: 15 skills under skills/, 8 composed by the business-direction chain manifest and 7 standalone IllustrationPer-platform packaging: the same canonical implementation under skills/ is exposed to Claude Code, Codex, Pi and Hermes Agent def test_packaged_version_is_consistent(self) -> None: claude = self.load(".claude-plugin/plugin.json") codex = self.load(".codex-plugin/plugin.json") marketplace = self.load(".claude-plugin/marketplace.json") entry = next( item for item in marketplace["plugins"] if item["name"] == PLUGIN_NAME ) self.assertEqual(claude["version"], codex["version"]) self.assertEqual(claude["version"], entry["version"])Test that enforces the same version across the Claude Code, Codex and marketplace manifests (tests/test_repository.py) View in repository
def test_canonical_skills_are_vendor_neutral(self) -> None: banned = ("~/.claude", ".codex/skills", "AskUserQuestion") for path in (ROOT / "skills").glob("*/SKILL.md"): text = path.read_text(encoding="utf-8") for token in banned: self.assertNotIn(token, text, f"{token} in {path}")Test that keeps platform-specific references out of the canonical skills (tests/test_repository.py) View in repository