OR Key

        

Snappy Skills

Treat markdown like code.

A skill is markdown + YAML frontmatter — the Anthropic spec. Run one as-is on any compatible CLI, or take the full tree for self-healing loaders and a shared feedback ledger.

$ npx snappy-os init

Fresh machine — clones the repo and wires the hook into Claude Code, Codex, OpenClaw, Pi, or Gemini CLI on PATH.

Drop any .md skill file anywhere on this page to audit it against the canonical schema — everything stays in your browser. See exactly what an install puts on disk →

01Kernel discipline

Every loader teaches itself. When an agent hits a gap — a missing flag, a wrong selector, a quirk — the loader is edited inline before the session ends. The next agent never re-learns the same lesson.

02Multi-runtime reach

One loader, five CLIs — four agentic (Claude, Codex, OpenClaw, Pi) plus context-only Gemini. Each fires the same verb through its native surface, no per-runtime rewrites.

03Gateway truth

Push a loader once; every machine pulls it by SHA from the gateway. The manifest is the source of truth — not any one laptop. Cross-machine drift is measured, not hoped for.

Per-runtime wiring

Pick a tab — same install, different wiring per runtime.

Agentic · native hooks

Installs snappy-os-inject.sh into ~/.claude/hooks/ and wires ~/.claude/settings.json. SessionStart + Stop hooks fire natively; slash-verbs dispatch directly.

Claude Code0.69 mean eval· 16 runs

Agentic · provider-agnostic

Wraps Pi's read/bash/edit/write tools. Auth via ANTHROPIC_API_KEY, GEMINI_API_KEY, or OPENAI_API_KEY — use Gemini for quota independence. Verbs fire through a prompt wrapper (no native slash-dispatcher).

Pi baseline· new runtime

Agentic · parallel hook impl

Writes ~/.codex/hooks.json. Same loader, same verbs as Claude Code. Requires Codex CLI ≥ 0.118.0.

Codex0.21 mean eval· 14 runs · climbing

Context-only · sync writes AGENTS.md

Same loaders as Claude Code and Codex. Current wiring is context-only (sync writes the AGENTS.md parity file); execution-time hooks pending. Requires OpenClaw ≥ 2026.4.0.

OpenClaw0.24 mean eval· 21 runs · context-only so far

Context-only · 5-min cron fallback

Syncs GEMINI.md into the project. No session-hook surface, so agentic runs ride a 5-minute cron wrapper.

Gemini CLI0.00 mean eval· 11 runs · context-only

Try it on something of yours

Two lanes. Left: paste a GitHub URL, get a snappy-os configuration proposal (which skills apply, which hooks to wire, what a loader looks like). Right: drop a .md skill file you already wrote — the page parses it against the canonical schema and shows you what the system would see. Keys stay in this browser; the analyzer call is direct to OpenRouter.

Not set.
Analyze a GitHub repo
Drop a skill file
No file selected.
Schema
program.md
The shape of the system
What snappy-os IS. Loops, verbs, evals, the PID contract — the file every agent reads first.
Catalog
state/index.md
What exists and where
Living index of 2 skills, libs, bins, lints, recipes — the pointer the agent consults after program.md.
Runtime
snappy-os/CLAUDE.md
How to execute
The repo-root CLAUDE.md for snappy-os itself — hook wiring, credential path, rules of operation. (Every project you work on has its own CLAUDE.md; this is the one for the OS.)
Skills live under state/skills/ 2 on disk
You are browsing this machine your tenant shared state globally public catalog · 2 skills

os

The kernel manifest — what every snappy-os installation is guaranteed to have on disk, what self-maintains it, and…

snappy-hello

reading primer for what a skill looks like; prints a greeting and writes an eval row

How it works

Every prompt passes through one hook. That hook is the only magic — everything else is plain files, HTTP, and CLI.

1
You type a prompt
Any runtime: Claude Code, Codex, Gemini CLI, openclaw. The UserPromptSubmit hook reads it before the model does.
2
Hook matches trigger phrases
Scans the prompt for any state/skills/<name>/AGENTS.md whose frontmatter says Triggers on prompt mention of '…'. Up to 2 loaders splice in per turn, plus a one-line pointer to program.md + state/index.md.
3
The loader carries the skill's rules
Critical pitfalls, shape of the inputs, how to eval the result. The full skill body (state/skills/<name>/SKILL.md) is referenced, not injected — the agent opens it only if it needs to.
4
Run — then a different session grades
The verb runs and appends a row to state/log/evals.ndjson with actor_session_id and score: null. A later session (auditor_session_id ≠ actor_session_id, enforced by sessionId() in state/lib/eval.ts) fills in the score. The generator cannot be the grader — that's the contract, not a nice-to-have.
The PID loop — three honest modes
When a run exposes a loader gap, exactly one of these happens. See stack.md §4.
[FIXED]
Inline edit
The gap is small — the agent edits the AGENTS.md loader right there in the turn. PostToolUse(Edit) appends FIXED to state/log/agents-md-feedback.log.
[LOGGED]
Queue for async regen
The gap is too structural for an inline fix. One line appended to state/log/regen-pending.txt; the verb continues. Nothing stalls.
drain
Drain-on-Stop
state/regen/drain.sh fires from the Stop hook. It pops queued slugs and rewrites their loaders, in a fresh session. Actor-auditor separation preserved.

What you actually install

The seed-owned file list. npx snappy-os init writes these onto your machine; --refresh-seed diffs against .seed-manifest.json. Everything else under state/ is yours, never overwritten.

path
role
the system contract — invariants only, no implementation. One screen.
human entry point. Points at program.md and the install verb.
the CLI — init, doctor, --refresh-seed, push --auto.
postinstall guard. Refuses to run inside the seed repo itself.
the PID self-correction footer every AGENTS.md loader carries (DRY'd).
drains state/log/regen-pending.txt on the Stop hook.
enqueues a slug for regen. Called from PostToolUse(Edit).
the per-turn injector. Reads triggers, splices loaders, tails recent evals.
the Stop hook companion — runs the regen drain.
structural lint. Master entry; called from npm run check.
refuses npm publish when an eval row is missing actor != auditor.
flags skills that grew >=3 executable blocks in prose without a sidecar.
structured logger. Every other lib + sidecar imports from here.
credential loader. Reads .env.cache at repo root.
eval row schema + sessionId() — the one place actor != auditor is enforced.
sha256-per-file manifest. SEED_OWNED_FILES here is the canonical list.
.seed-manifest.json
written by init; consumed by --refresh-seed + doctor.

That's it. The skills you see in the catalog above are user-owned; the kernel just runs the loop they ride on. Source of truth: SEED_OWNED_FILES in state/lib/seed-manifest.ts and stack.md §11.

What's in here

The catalog, as numbers.

2
skills
1
categories
0
with loaders auto-injected on trigger
2
dormant run only when invoked explicitly

Try it

Type a verb. The simulator probes the gateway for the real files that fire when any agent says that word — no model call, no key. Or lint all 2 at once to see which are broken.

No verb selected.

Extend it

Skills live at state/skills/<name>.md. Add the file, push, it shows up here. Add an optional <name>.agents.md loader and the hook auto-injects it whenever a prompt mentions your trigger phrase. Full schema in program.md; worked examples in state/index.md.

🔍
No skills match your search
Try a different keyword or category