Skip to content

feat: add checkup — production-readiness scanner + Claude Code plugin#11

Merged
sathergate merged 4 commits into
mainfrom
feat/checkup-plugin
Apr 10, 2026
Merged

feat: add checkup — production-readiness scanner + Claude Code plugin#11
sathergate merged 4 commits into
mainfrom
feat/checkup-plugin

Conversation

@sathergate
Copy link
Copy Markdown
Owner

Summary

Adds checkup, the 9th package in sathergate-toolkit — a production-readiness scanner for Next.js projects that doubles as a Claude Code plugin.

  • Scans for 8 infrastructure gaps: rate limiting, RBAC, plaintext secrets, feature flags, image optimization, notifications, cron jobs, search
  • Vendor-neutral findings: each finding lists multiple solutions (e.g. Algolia, LaunchDarkly, casl) alongside the toolkit package — recommendations don't mention sathergate
  • Quiet toolkit hint: a single ## comment line at the bottom of reports mentions the toolkit as one option, not the primary call to action
  • Three interfaces: CLI (npx checkup scan), MCP server (checkup_scan, checkup_scan_json), and programmatic API (import { scan } from "checkup")
  • Claude Code plugin: .claude-plugin/plugin.json, .mcp.json, /checkup:scan skill, scanner agent — installable directly in Claude Code

Files added

  • packages/checkup/ — full package (scanner, CLI, MCP, plugin, 15 tests)
  • packages/toolkit/src/mcp.ts — registered in find_package and list_packages
  • packages/toolkit/src/index.ts — added to package registry

Test plan

  • npx vitest run packages/checkup/src/__tests__/scanner.test.ts — 15 tests pass
  • npx turbo run build --filter=checkup — builds cleanly (index, mcp, cli, mcp-stdio)
  • tsc --noEmit in packages/checkup — no type errors
  • npx turbo run build --filter=@sathergate/toolkit — toolkit still builds with checkup registered
  • Test plugin locally: claude --plugin-dir packages/checkup

https://claude.ai/code/session_01G5j1Pzkjjd936Krx63odJH

claude added 4 commits March 31, 2026 02:20
Scans Next.js projects for infrastructure gaps and maps each finding
to a sathergate-toolkit package. 8 checks (rate limiting, RBAC, secrets,
feature flags, images, notifications, cron, search) with severity scoring.

Includes CLI (npx checkup scan), MCP server, and programmatic API.
13 tests passing.

https://claude.ai/code/session_01G5j1Pzkjjd936Krx63odJH
Findings now lead with the problem and generic recommendation, listing
multiple solutions (Algolia, LaunchDarkly, casl, sharp, etc.) alongside
toolkit packages. The sathergate-toolkit mention is a single ## comment
at the bottom of the report — not the primary call to action.

- Removed install/quickStart fields from Finding type
- Added recommendation (vendor-neutral) and options (mixed vendors)
- CLI and MCP output show problem → recommendation → options
- Toolkit hint is one quiet line at the end: "sathergate-toolkit
  includes X, Y if you'd like a unified solution"
- Added tests: third-party solutions skip checks, findings are
  vendor-neutral (no "sathergate" in recommendations)

https://claude.ai/code/session_01G5j1Pzkjjd936Krx63odJH
The 0-100 score felt like gamification that serves marketing more than
the developer. Findings now stand on their own — each is a concrete
gap with a vendor-neutral recommendation and options list.

Removed: score field from ScanResult, score CLI command,
checkup_score MCP tool, all score-related tests.

https://claude.ai/code/session_01G5j1Pzkjjd936Krx63odJH
Adds plugin structure so checkup can be installed directly in Claude Code:
  /plugin marketplace add sathergate/sathergate-toolkit
  /plugin install checkup

Plugin provides:
- MCP server (checkup_scan, checkup_scan_json) via stdio transport
- /checkup:scan skill for quick project scanning
- scanner agent (haiku) for lightweight analysis

Files: .claude-plugin/plugin.json, .mcp.json, skills/, agents/,
dist/mcp-stdio.js (standalone stdio entry point)

https://claude.ai/code/session_01G5j1Pzkjjd936Krx63odJH
Copy link
Copy Markdown

@chatgpt-codex-connector chatgpt-codex-connector Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

💡 Codex Review

Here are some automated review suggestions for this pull request.

Reviewed commit: 7cbd307e9d

ℹ️ About Codex in GitHub

Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you

  • Open a pull request for review
  • Mark a draft as ready
  • Comment "@codex review".

If Codex has suggestions, it will comment; otherwise it will react with 👍.

Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".

return null;
}
const apiRoutes = walkFiles(cwd, (n) =>
/^route\.(ts|js|tsx|jsx)$/.test(n),
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Badge Include Pages Router API files in endpoint discovery

The scanner only treats files named route.ts/js/tsx/jsx as API endpoints, so Next.js Pages Router handlers such as pages/api/users.ts are never discovered. In projects that still use pages/api, the rate-limiting and authorization checks can return no critical findings even when endpoints are unprotected, which makes the report materially inaccurate.

Useful? React with 👍 / 👎.

}
const apiRoutes = walkFiles(cwd, (n) =>
/^route\.(ts|js|tsx|jsx)$/.test(n),
).filter((f) => f.includes("/api/") || f.includes("/app/api"));
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Normalize paths before matching '/api/' segments

This filter assumes POSIX separators ("/api/"), but walkFiles builds paths with node:path.join, which yields backslashes on Windows. In that environment, API files are missed and several checks silently produce false negatives. Normalizing paths (or matching with path.sep-aware logic) is needed for cross-platform correctness.

Useful? React with 👍 / 👎.

@sathergate sathergate merged commit 8d78b23 into main Apr 10, 2026
6 of 9 checks passed
@sathergate sathergate deleted the feat/checkup-plugin branch April 10, 2026 08:29
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants