This repository exists solely so the author can develop and version the ratatoskr skill. The canonical file is skills/ratatoskr/SKILL.md — people install it as a Claude Code plugin (or copy that one file into their agent's skill dir). Nothing in this repo (CLAUDE.md, CHANGELOG.md, README.md, CI, etc.) may affect the skill's mechanics. All behavior must be self-contained in skills/ratatoskr/SKILL.md.
Ratatoskr is part of the Yggdrasil family of AI-coding-agent correctness tools: it is the family's communication layer — the courier that keeps the agent talking to the user in plain words, never in code. It governs how the agent communicates on every turn, not how the work is sequenced. Siblings: Urd (intent → code), Yggdrasil (architecture), Researcher.
This repo is installable as a Claude Code plugin and as a GitHub Copilot CLI plugin. Layout mirrors the convention used by sibling repos (e.g. UrdSkill, ResearcherSkill):
.claude-plugin/plugin.json— plugin manifest (name, version, description, keywords).versionhere MUST match the latest released version inCHANGELOG.mdand is bumped together with it..claude-plugin/marketplace.json— single-plugin marketplace listing for Claude Code, so the repo can be added via/plugin install ratatoskr@ratatoskr-marketplace..github/plugin/marketplace.json— single-plugin marketplace listing for GitHub Copilot CLI (Copilot reads this path), so the repo can be added viacopilot plugin marketplace add krzysztofdudek/RatatoskrSkillthencopilot plugin install ratatoskr@ratatoskr-marketplace. Mirrors the Claude listing but additionally carriesversion, askillsarray (./skills/ratatoskr), and ahooksfield pointing at./hooks/copilot-hooks.json(the Copilot-format session-start hook). Its pluginversionMUST be kept in lockstep withplugin.json..codex-plugin/plugin.json— plugin manifest for OpenAI Codex CLI (Codex reads the plugin manifest only from.codex-plugin/). Bundles the skill via"skills": "./skills/"; Codex discovers the marketplace from the existing.claude-plugin/marketplace.json(its legacy-compatible path), so the repo installs viacodex plugin marketplace add krzysztofdudek/RatatoskrSkillthencodex plugin install ratatoskr@ratatoskr-marketplace. ItsversionMUST be kept in lockstep withplugin.json. Codex needs no hook wiring of its own: it auto-discovers the defaulthooks/hooks.json, reuses Claude'sSessionStart/hookSpecificOutputschema, and setsCLAUDE_PLUGIN_ROOTfor compatibility, so the bundled Claude hook fires under Codex unchanged..cursor-plugin/plugin.json— plugin manifest for Cursor (single-plugin-at-root: manifest at the repo root, no Cursor marketplace file; components are auto-discovered, soskills/ratatoskr/is picked up automatically). Installed locally via~/.cursor/plugins/local/or published to the Cursor Marketplace. Carries ahooksfield pointing athooks/cursor-hooks.json(the Cursor-format session-start hook). ItsversionMUST be kept in lockstep withplugin.json.hooks/— session-start activation hooks, one per platform we integrate with. Activation-only: each injects a short instruction so the agent applies the skill from the first turn and re-asserts it after compaction; they encode no rules of their own, so the self-containment rule holds — all behavior still lives inSKILL.md. One shared script,hooks/ratatoskr-session-start.sh, emits the right stdout envelope based on its$1argument (claude/codex→hookSpecificOutput.additionalContext;copilot→ flatadditionalContext;cursor→ snake_caseadditional_context). The per-platform configs:hooks/hooks.json(ClaudeSessionStart, also auto-discovered by Codex),hooks/copilot-hooks.json(CopilotsessionStart, wired via the.github/plugin/marketplace.jsonhooksfield, uses${PLUGIN_ROOT}), andhooks/cursor-hooks.json(CursorsessionStart, wired via the.cursor-plugin/plugin.jsonhooksfield). The message lives once, in the script.skills/ratatoskr/SKILL.md— the canonical skill body. Editing this file IS editing the skill.
When bumping version, update the version in all of .claude-plugin/plugin.json, .github/plugin/marketplace.json (plugin entry), .codex-plugin/plugin.json, and .cursor-plugin/plugin.json in lockstep with the CHANGELOG section header.
This project uses Semantic Versioning and maintains a CHANGELOG.md following the Keep a Changelog format.
When the user says "bump version":
- Move
[Unreleased]entries inCHANGELOG.mdinto a new version section with today's date - Update the comparison links at the bottom of
CHANGELOG.md(add the new[X.Y.Z]: …compare/vA.B.C...vX.Y.Zline and point[Unreleased]at the new version) - Update the
versionin.claude-plugin/plugin.json,.github/plugin/marketplace.json(plugin entry),.codex-plugin/plugin.json, and.cursor-plugin/plugin.jsonto match - Commit and tag with
v{version}