@squinch/skill
skills/squinch/SKILL.md is the whole contract an
agent needs to author Squinch diagrams: the grammar, the visibility rules, a
layout cookbook, and the check-render-fix loop. It is the only thing the
twenty cold agents in the gauntlet are given, alongside the
squinch binary — so if something an agent needs isn't in here, the gauntlet
is where that shows up.
Installing it
The CLI carries the skill and installs it where agents look:
npx squinch skill # this project: .agents/skills/ — Cursor, Codex,
# Gemini CLI, Copilot and every other agent that
# reads the Agent Skills standard (agentskills.io);
# adds .claude/skills/ when it detects Claude Code
npx squinch skill --global # just for you: the same two, under your home
# directory — ~/.agents/skills, and ~/.claude/skills
# when ~/.claude is there (or with --claude)
Re-run after upgrading squinch — the installed file is version-locked to the CLI that wrote it.
Or take the plugin instead, straight from this repo — updates then arrive with the plugin rather than living in your tree. Claude Code:
/plugin marketplace add jquatier/squinch
/plugin install squinch@squinch
Codex, and anything else that reads Agent Plugins — Cursor, Copilot, Kiro, VS Code:
codex plugin marketplace add jquatier/squinch
codex plugin add squinch@squinch
Then ask for a diagram in plain language — the frontmatter's description is
what makes it fire, so "draw the architecture of this service" is enough. The
skill drives squinch check and squinch render, so the CLI has to be
reachable: npx squinch works with no install at all.
Using it with any other agent
There is nothing Claude-specific in the file below the frontmatter. Copy
skills/squinch/SKILL.md wherever your agent discovers skills, paste it into
a system prompt, or hand it to whatever your harness calls context. What
matters is that the agent can run squinch check and read the diagnostics —
the skill is written around that loop, not around one vendor's format.
Keeping it true
test/skill.test.ts compiles every DSL snippet in SKILL.md through the real
engine and asserts every icon id it names actually resolves in an installed
pack. Documentation that drifts from the language fails the build, which is the
point: an agent reading a stale cookbook produces diagrams that don't check.
One file derives from SKILL.md — edit only the canonical file:
packages/cli/src/skill.generated.ts, the copy squinch skill installs,
regenerated by scripts/gen-skill.mjs (pre-commit and CI diff it).
Two manifests here make this one directory two plugins off the same skills/
dir: .claude-plugin/plugin.json for Claude Code, and plugin.json — Agent
Plugins 1.0 — for Codex and the rest. Each has a marketplace manifest at the
repo root pointing back at this directory (.claude-plugin/marketplace.json
and .agents/plugins/marketplace.json), and scripts/version.mjs moves both
plugin manifests with everything else. test/skill.test.ts asserts the two
agree on name, version and description, and core's guardrails assert both
marketplaces still resolve here.