Grimoire
Catálogo open source de skills e workflows reutilizáveis para agentes de IA, instalável em Claude Code e Codex.
Problema
Skills e workflows de agentes de IA costumam ficar presos a uma única ferramenta e são copiados à mão de uma para outra.
Decisões
- Arquitetura agnóstica de plataforma: uma implementação canônica por skill e empacotamento documentado por ferramenta.
- Contratos de repositório verificados por testes em Python e avaliações comportamentais com cenários e resultados registrados.
- Separar implementação, documentação, testes e integração por plataforma.
Stack
- Python
- Markdown
- Claude Code
- Codex
Resultado
Catálogo open source com 15 skills, uma delas orquestrando um workflow composto (chain), empacotado para Claude Code, Codex, Pi e Hermes Agent, com suíte de 41 testes em Python.
Aprendizado
Definir contratos estáveis entre ferramentas diferentes e testar o comportamento de agentes, não só o código.
Como usei IA
O produto são instruções para agentes de IA, então as mudanças nas skills são avaliadas com agentes: cada cenário tem critérios observáveis, roda contra as skills atuais para registrar o resultado RED e roda de novo depois da menor correção para registrar o GREEN, em contexto novo e sandbox isolado. Nenhum cenário é dado como aprovado só pela leitura do SKILL.md. Os contratos estruturais do repositório são verificados por testes em Python.
Evidências
- Código-fonte e guias de instalação no GitHub
Suíte com 41 testes em Python (tests/test_repository.py): todos passam em execução local no commit d15acbb$ python -m unittest discover -s tests ... Ran 41 tests in 0.035s OKIlustraçãoEstrutura do catálogo: 15 skills em skills/, 8 delas compostas pelo manifesto da chain business-direction e 7 avulsas IlustraçãoEmpacotamento por plataforma: a mesma implementação canônica em skills/ é exposta a Claude Code, Codex, Pi e 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"])Teste que garante a mesma versão nos manifestos de Claude Code, Codex e marketplace (tests/test_repository.py) Ver no repositório
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}")Teste que impede referências a uma plataforma específica nas skills canônicas (tests/test_repository.py) Ver no repositório