Help us improve
Share bugs, ideas, or general feedback.
From purlin
Creates anchor specs defining cross-cutting constraints with optional external references. Manages Figma-driven design anchors with visual match rules and responsive variants.
npx claudepluginhub rlabarca/purlin --plugin purlinHow this skill is triggered — by the user, by Claude, or both
Slash command
/purlin:anchorThe summary Claude sees in its skill listing — used to decide when to auto-load this skill
Create, sync, and manage anchor specs. Anchors define cross-cutting constraints that other features reference via `> Requires:`.
Provides behavioral guidelines to reduce common LLM coding mistakes, focusing on simplicity, surgical changes, assumption surfacing, and verifiable success criteria.
Searches, retrieves, and installs Agent Skills from prompts.chat registry using MCP tools like search_skills and get_skill. Activates for finding skills, browsing catalogs, or extending Claude.
Guides systematic root-cause debugging when tests fail, builds break, or unexpected errors occur. Provides a structured triage checklist to preserve evidence, localize, and fix issues instead of guessing.
Share bugs, ideas, or general feedback.
Create, sync, and manage anchor specs. Anchors define cross-cutting constraints that other features reference via > Requires:.
See references/formats/anchor_format.md for the full format.
purlin:anchor create <name> # Create a local anchor
purlin:anchor create <name> --source <url> # Create with external reference
purlin:anchor add-figma <figma-url> # Create from Figma design
purlin:anchor sync <name> # Pull latest from external source
purlin:anchor sync --check-only # CI: exit non-zero if any anchor is stale
Create a new anchor spec in specs/_anchors/.
purlin:spec).references/formats/anchor_format.md.--source <url> is provided, add > Source: and > Pinned: metadata and read the external content to inform the rules.After creating the anchor, commit immediately:
git add specs/_anchors/<name>.md
git commit -m "anchor(<name>): create cross-cutting constraint"
Do not batch with other changes. Drift detection and staleness checks depend on committed anchor state.
Create an anchor from a Figma design URL. Read references/figma_extraction_criteria.md for the full extraction criteria.
get_metadata MCP tool to get the file info.get_design_context MCP tool to read the design.get_screenshot MCP tool to capture the visual reference.specs/_anchors/screenshots/.> Source: pointing to the Figma URL> Visual-Reference: figma://<fileKey>/<nodeId>> Pinned: set to the file's lastModified timestamp> Type: design@e2ereferences/commit_conventions.md.Do NOT extract granular CSS/typography/spacing rules. The LLM reads Figma directly during build for full visual fidelity.
Compare > Pinned: value to the upstream source. Pull if different.
> Source: to get repo URL and > Path: to get file path.> Pinned: to get the current SHA.git ls-remote <repo> HEAD.> Pinned: with the new SHA.
c. If the anchor has local rules (rules not from the original sync), flag: "External reference changed. This anchor has N local rules — review for conflicts via purlin:drift."
d. Commit per references/commit_conventions.md: anchor(<name>): sync from upstream (<new-sha>[:7])> Source: to get the Figma URL.> Pinned: to get the current timestamp.get_metadata MCP tool with the Figma file key to get lastModified.get_design_context to fetch the current design data.
b. Update the anchor file with refreshed visual data.
c. Update > Pinned: with the new timestamp.
d. If > Visual-Reference: exists, call get_screenshot to recapture the reference screenshot.
e. If local rules exist, flag for drift review.
f. Commit.If any fetch command fails (auth error, network timeout, repo not found, Figma MCP error):
> Pinned: or the anchor content.purlin:anchor sync <name>."If the fetched content is empty or unparseable:
For CI pipelines without Claude Code:
> Source:, compare > Pinned: to the remote HEAD.CI scripting example (without Claude Code):
# Check if anchor's external ref is stale
PINNED=$(grep '> Pinned:' specs/_anchors/api_contract.md | awk '{print $3}')
REMOTE=$(git ls-remote git@github.com:acme/api-spec.git HEAD | cut -f1)
if [ "$PINNED" != "$REMOTE" ]; then echo "Anchor stale"; exit 1; fi