My personal Claude Code skills and slash commands, packaged as a single-plugin marketplace.
| Skill | Invocation | Purpose |
|---|---|---|
| audit | (auto-triggered) | Two-pass code audit — adversarial Opus deep review + independent Codex second opinion. |
| react-doctor | (auto-triggered) | React project triage — lint, dead code, a11y, bundle size, architecture diagnostics. |
| gitignore | (auto-triggered) | Generates or edits .gitignore files following per-stack conventions. |
| visual-verify | (auto-triggered) | BEFORE/AFTER screenshots at every Tailwind breakpoint + interactive slider UI to verify responsive fixes. |
| learn | (auto-triggered) | Socratic teaching loop that makes sure you deeply understand work that was just done. |
| tailnet-host | (auto-triggered) | How to host/serve/publish something on liam-vps's tailnet ports (7000–7100), see what's already taken, and make it survive reboot. Stack-agnostic. |
| second-opinion | (auto-triggered) | Consult other AI models (Codex/GPT, Grok, Gemini, any OpenRouter model) for outside perspectives — read-only by default, scoped writes only on explicit ask, zero pinned model names. |
| audit-fix | /liam:audit-fix |
Work through an existing HTML audit report one finding at a time — verify, minimal fix, commit, update the report row. |
| publish | /liam:publish |
Render markdown into a styled, self-contained HTML page under .notes/ (house theme) and open it in the browser. |
| ui-tips | /liam:ui-tips |
Personal scrapbook of UI/design-engineering details — browsable collection, not a style guide. |
| thermo-nuclear-code-quality-review | /liam:thermo-review |
Extremely strict maintainability + abstraction review hunting for "code judo" simplifications. |
| teach (WIP) | /liam:teach |
Multi-session teaching workspace — missions, lessons, learning records. Vendored from mattpocock/skills for evaluation; lives in skills/wip/. |
| copywriter (WIP) | /liam:copywriter |
Write or rewrite copy in Liam's voice — Slack, Linear, email, announcements, blog posts. Voice rules tuned from a ~1,100-item corpus audit. Repo copy is canonical; claude.ai mirror synced manually. Lives in skills/wip/. |
WIP skills live in plugins/liam/skills/wip/ while under evaluation — see Trial (WIP) skills for how they're wired up.
| Command | Purpose |
|---|---|
/liam:housekeeping |
Project housekeeping — gitignore, CLAUDE.md, stale logs, screenshots, artifacts. |
/liam:ide-edits |
VS Code / Cursor settings, extensions, keybindings — assisted edits with current docs. |
/liam:pr-check |
Triage + resolve PR review feedback and CI failures to clean state. Never merges. |
/liam:react-doctor |
Run the react-doctor CLI and triage findings against the current branch. |
/liam:visual-verify |
Two-phase responsive screenshot capture + slider UI. Combine with a change request ("...and visually verify") for full capture→edit→capture loop. |
/liam:thermo-review |
Thermo-nuclear code quality review — harsh maintainability + abstraction audit of the current changes (branch / diff / full). |
/liam:audit-fix |
Run the audit-fix skill — verify → fix → commit → reconcile, one audit finding at a time. |
/liam:publish |
Run the publish skill — render markdown to a house-themed HTML page in .notes/reports/ and open it. |
/liam:wrap-up |
Session wrap-up — summarize what happened and save a datestamped breadcrumb to .notes/wrap-ups/. |
/liam:catch-up |
Super-brief "where was I" report after time away — reads the latest wrap-up note + git state to reload context fast. |
| Event | Script | Purpose |
|---|---|---|
Stop |
autopublish.mjs |
Auto-publish report-worthy responses to styled HTML in .notes/responses/. |
The MCP orphan reaper (
cleanup-mcp-orphans.sh,/liam:cleanup-mcp, a SessionStart hook, and a machine LaunchAgent) lived here v0.7.0–v0.7.1 and was removed deliberately: orphaned MCP cleanup is the platform's job (tracked upstream at anthropics/claude-code#66280, several fixes already landed). If leaks pile up before upstream finishes, restore from git history at tag-commit3304c38.
Inside Claude Code:
/plugin marketplace add isoscelesxyz/liam-claude-plugin
/plugin install liam@isoscelesxyz
Everything surfaces under the liam: namespace (e.g. /liam:pr-check).
Source of truth: this repo at ~/code/isoscelesxyz/liam-claude-plugin. Claude Code keeps a
cached copy under ~/.claude/plugins/cache/isoscelesxyz/liam/<version>/ which
is what actually runs — rebuilt from GitHub each time the marketplace updates.
cd ~/code/isoscelesxyz/liam-claude-plugin
$EDITOR plugins/liam/skills/audit/SKILL.md
git add -A && git commit -m "feat(audit): ..." && git pushThen, inside Claude Code:
/plugin marketplace update isoscelesxyz
Restart the session (or open a new one) so the refreshed cache is loaded.
/plugin marketplace update fetches from the GitHub remote — push first or it
won't see your changes.
mkdir -p plugins/liam/skills/<name>
$EDITOR plugins/liam/skills/<name>/SKILL.md
# commit, push, marketplace updateSurfaces as /liam:<name> after the next session.
Skills being evaluated before promotion live under plugins/liam/skills/wip/<name>/
(see skills/wip/README.md). Skill
auto-discovery is not recursive — it only scans direct subdirectories of
skills/ — so every WIP skill must also be registered in the plugin
manifest's skills array, which supplements the default scan:
// plugins/liam/.claude-plugin/plugin.json
"skills": ["./skills/wip/teach"]When promoting a WIP skill, move it to skills/<name>/ and remove its
manifest entry. Vendored skills keep upstream content unmodified plus a
source-attribution comment at the top of SKILL.md.
Edit the cached copy directly to test changes live without pushing:
$EDITOR ~/.claude/plugins/cache/isoscelesxyz/liam/<version>/plugins/liam/skills/<name>/SKILL.mdTest in a new session, then port the change back to ~/code/isoscelesxyz/liam-claude-plugin/
and commit. /plugin marketplace update blows away local-only edits to the cache.
Bump version in both .claude-plugin/marketplace.json and
plugins/liam/.claude-plugin/plugin.json on every shipped change: minor for
new skills/commands/features, patch for fixes. Docs-only commits don't bump.
liam-claude-plugin/
├── .claude-plugin/
│ └── marketplace.json # marketplace catalog (name: "isoscelesxyz")
├── plugins/
│ └── liam/
│ ├── .claude-plugin/
│ │ └── plugin.json # plugin manifest (name: "liam")
│ ├── skills/
│ │ ├── audit/SKILL.md
│ │ ├── audit-fix/SKILL.md
│ │ ├── react-doctor/SKILL.md
│ │ ├── gitignore/{SKILL.md,references/}
│ │ ├── publish/{SKILL.md,scripts/}
│ │ ├── ui-tips/{SKILL.md,references/}
│ │ ├── visual-verify/{SKILL.md,references/,scripts/}
│ │ ├── learn/SKILL.md
│ │ ├── thermo-nuclear-code-quality-review/SKILL.md
│ │ └── wip/ # trial skills — must be registered in plugin.json "skills"
│ │ ├── README.md
│ │ ├── teach/ # vendored from mattpocock/skills
│ │ └── copywriter/ # ported from Liam's claude.ai personal skill
│ ├── commands/
│ │ ├── audit-fix.md
│ │ ├── housekeeping.md
│ │ ├── ide-edits.md
│ │ ├── pr-check.md
│ │ ├── publish.md
│ │ ├── react-doctor.md
│ │ ├── visual-verify.md
│ │ └── thermo-review.md
│ └── hooks/
│ ├── hooks.json # Stop hook config
│ └── scripts/
│ └── autopublish.mjs
└── README.md
audit/adapted from wwwazzz/audit-skill.wip/teach/vendored from mattpocock/skills by Matt Pocock (MIT), content unmodified.