Developer tooling · static analysis
Skillcheck
Static skill review, entirely in the browser
Make an agent skill easier to review before it becomes part of a workflow.
- Public source
- Live
Pending release
The review workflow shown above
Folder intake, the editable comparison, finding decisions, and the exports were merged into the public source on September 13, 2026. The live app may still show the earlier release until it is redeployed.
My role: Product design, analyzer architecture, implementation, and delivery.
- React 19
- TypeScript (strict)
- Vite
- Deterministic checks
- Zero backend
At a glance
- Problem
- Teams adopting agent skills need a quick, inspectable review of instructions before installing them. Skill files can also contain internal instructions that should not leave the machine.
- My contribution
- Product design, analyzer architecture, implementation, and delivery: a pure TypeScript analysis layer shared by the browser and a CLI, with the interface kept separate so a reviewed file is never executed.
- Outcome
- Live and open source: deterministic quality checks and injection-pattern analysis, versioned exports for pull requests, and an analyzer covered by tests. Findings are review aids, not measured model performance.

The browser interface and the CLI are two entry points over one pure analysis layer, which produces the findings a review exports.
In words
- The browser interface (src/components) is one entry point; the CLI (scripts/skillcheck.mjs) is the other.
- Both call the same analyzeReview entry point in src/domain.
- That layer is pure logic with no React: diff, quality, injection, and review checks.
- Its findings and decisions export as versioned JSON or Markdown.
- Calibration fixtures, 21 labeled synthetic cases, exercise the domain layer in tests.
Derived from the public repository layout (src/domain, src/components, scripts/skillcheck.mjs).
Engineering decisions
01
Keep the analysis local
Skill files can contain internal instructions. Analysis runs in the browser, with a pure TypeScript domain layer separated from the interface. Reviewing a file does not execute its instructions.
Tradeoff
With no backend there is no server-side record of a review; the exported JSON or Markdown file is the record.
02
Expose the reasons behind a score
Deterministic checks flag structure, clarity, actionability, completeness, and efficiency. An editable comparison, line differences, and finding decisions connect a changed instruction to a reviewable result. Versioned JSON and Markdown exports preserve the review.
Tradeoff
Deterministic rules are legible and reproducible, and they miss anything a rule does not describe.
03
Treat detection as a review aid
Injection analysis uses patterns, normalization, and context-aware damping. A reassuring score cannot establish that a skill is safe or that a model will follow it.
What you can verify
- Inspect the pure analysis layer and its co-located tests in src/domain.
- Run the same input through the browser and the shared CLI, which imports the same analyzeReview entry point.
- Inspect the 21 author-labeled synthetic calibration cases, including false positives and missed patterns.
- Every line is scanned against ten categories of known injection patterns, listed in the README and implemented as one rule file per category.
Source and release links checked .
Scope and limits
This is static, heuristic analysis. Scores are not measured task success, a security certification, or a substitute for reviewing the instructions and testing them with the intended model.
A short walkthrough
- 01
Load the built-in review example or select a skill folder with local text references.
- 02
Edit the candidate and inspect the quality findings, injection warnings, and differences.
- 03
Record your finding decisions and export the review for a pull request.