feat(tooling): add Claude Code automations (MCPs, hooks, skills, subagents) - #31
Merged
Merged
Conversation
schmug
enabled auto-merge (squash)
April 18, 2026 23:22
…agents Since the repo has no CI, these encode the "green local checks are the merge gate" contract into Claude Code tooling the team shares: - .mcp.json: Cloudflare + Playwright MCP servers, cutting ad-hoc curl/dig and trace-zip parsing that had accumulated in settings.local.json. - .claude/settings.json: project-shared permissions allowlist + two hooks. PostToolUse typecheck fires `npm run typecheck` after TS/Astro edits (non-blocking); PreToolUse protect asks for confirm before editing public/_routes.json, package-lock.json, or .env files. - .claude/skills/add-app: packages the registry-edit workflow, including the easy-to-miss springboard tile-count bump in e2e/smoke.spec.ts. - .claude/skills/verify-before-merge: the three-command pre-merge ritual from CLAUDE.md, plus a conditional build when blog content changed. - .claude/agents/registry-consistency-reviewer: proactive reviewer for src/apps/registry.ts edits; catches the tile-count footgun. - .claude/agents/a11y-reviewer: enforces the OS-shell a11y contract from docs/architecture.md on changes under src/components/os and mobile. Hook scripts are factored into .claude/hooks/*.sh rather than inlined in settings.json so they're readable and testable; both parse cleanly and behave correctly against synthetic stdin payloads. Typecheck and vitest both pass (85/85) post-change. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Main merged #32 (GitHub Actions + eslint + prettier) while this branch was in flight, making two of its new markdown files fail format:check and making the verify-before-merge skill's "no CI" framing stale. - Prettier auto-fixes on .claude/agents/registry-consistency-reviewer.md and .claude/skills/add-app/SKILL.md (trailing-newline nit). - Rewrite verify-before-merge to mirror the CI gate in .github/workflows/ci.yml: format:check → lint → typecheck → vitest → playwright → build, with build still gated to blog/schema changes locally since CI will always run it anyway. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
schmug
force-pushed
the
claude/blissful-nash-de77c0
branch
from
April 19, 2026 00:27
ff2e4b0 to
a8cbb14
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
.mcp.json(Cloudflare + Playwright),.claude/settings.json(permissions + hooks), two skills, two subagents..claude/hooks/*.shfor readability/testability rather than inlining shell insettings.json.What's in this PR
MCP servers (
.mcp.json):cloudflare— HTTP MCP atmcp.cloudflare.comfor deploy/DNS/header inspection.playwright— browser automation, replaces hand-parsing trace zips.Hooks (
.claude/settings.json+.claude/hooks/):typecheck-on-edit.sh— non-blockingnpm run typecheckafter Edit/Write/MultiEdit on.ts/.tsx/.astro.protect-files.sh— confirm gate onpublic/_routes.json,package-lock.json,.env*.Skills (
.claude/skills/):add-app— registry-edit workflow, explicitly includes the springboard tile-count bump ine2e/smoke.spec.ts(known footgun).verify-before-merge— typecheck + vitest + e2e, plus conditionalnpm run buildwhen blog content/schema changed.Subagents (
.claude/agents/):registry-consistency-reviewer— auto-dispatched onsrc/apps/registry.tsedits; enforces tile-count and AppManifest shape.a11y-reviewer— enforces the OS-shell a11y contract fromdocs/architecture.md.Test plan
npm run typecheck— clean (1 pre-existing hint)npm test— 85/85 passedbash -nparse clean,protect-files.shexits 2 with message onpublic/_routes.json, exits 0 on normal paths.mcp.jsonloads (restart Claude Code,claude mcp list)/add-appand/verify-before-mergeappear in the skill palette.tsfile and confirm PostToolUse typecheck fires in the transcriptNot included
.claude/settings.local.jsontrim happened locally but isn't committed (globally gitignored; per-dev).🤖 Generated with Claude Code