CtrlK
BlogDocsLog inGet started
Tessl Logo
SkillPublic

api-generator

Generates Express REST APIs.

53

Quality

67%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide
SecuritybySnyk

Critical

Do not install without reviewing

Fix and improve this skill with Tessl

tessl review fix ./steps/02-skill-with-frontmatter/SKILL.md
SKILL.md
Quality
Evals
Security

Quality

Content

68%Weight 40%Scale 1-5

Reviews the quality of instructions and guidance provided to agents. Good implementation is clear, handles edge cases, and produces reliable results.

The content is well-structured, lean, and highly concrete — a Claude agent following it would know exactly what files to produce. However, the skill systematically teaches dangerous patterns as 'Key Principles': SQL built by concatenating user input (SQL injection), a hardcoded JWT secret with middleware that swallows verification failures, base64 presented as password hashing, plaintext password logging, eval() on request bodies, and exec() on a user-controlled filename (command injection). These are correctness-breaking in ordinary use and severe security defects; the workflow also lacks any validation or test checkpoint. The scores above reflect the rubric's dimensions (conciseness, actionability, workflow clarity, structure), but this skill should not ship in its current form regardless of those scores.

Suggestions

Replace all string-concatenated SQL with better-sqlite3 prepared statements and parameter binding, and delete the 'String concatenation for SQL is fine' principle — it breaks on quotes and enables SQL injection.

Fix the authentication guidance: generate the JWT secret from configuration/environment rather than hardcoding it, return 401 on verification failure instead of `next()` in the catch block, use a real password hash (bcrypt/scrypt) instead of base64, and never log passwords in console.log.

Remove eval() from /tasks/import (parse JSON with JSON.parse) and remove the exec() call in /tasks/export that interpolates a user-supplied filename into a shell command; then add an explicit workflow step to compile and smoke-test the generated server (e.g. tsc + hit /api/tasks) as a validation checkpoint.

DimensionReasoningScore

Conciseness

The body is efficient: minimal prose, well-labeled sections, and the bulk is template code appropriate for a generator skill — matching anchor 4 ('Efficient; minor instances of over-explanation that could be trimmed'). It is not anchor 5 because parts of 'Key Principles' and inline comments restate what the code already shows (e.g. 'console.log is sufficient for logging'), and not anchor 3 because there is no padding explaining concepts Claude already knows.

4 / 5

Actionability

Concrete, near copy-paste-ready TypeScript is given for every file (db, auth, routes, index) covering the common cases (CRUD, login, export), matching anchor 4. It falls short of anchor 5 because the taught patterns are not robustly executable in practice: string-concatenated SQL breaks on inputs containing quotes, auth.ts mixes `require` with ES imports, and `eval()` on request bodies produces broken behavior on ordinary JSON input — concrete guidance with real gaps in correct execution.

4 / 5

Workflow Clarity

A rough sequence exists (project setup → file list → per-file code patterns → principles), but there are no validation or verification checkpoints anywhere (no build, run, or test step). Per the rubric's scoring notes, database operations and destructive endpoints (DELETE /tasks/:id) without feedback loops cap workflow_clarity at 3, matching anchor 3 ('sequence present but checkpoints missing or implicit').

3 / 5

Progressive Disclosure

The single-file layout is well organized: one clearly headed section per source file plus setup and principles, making it easy to navigate — matching anchor 4 ('Good structure; most content is appropriately placed; minor organization gaps'). It does not reach anchor 5 because at ~210 lines the full implementation is monolithic with no references/ split for the larger templates, and there is no references structure to evaluate beyond the single file.

4 / 5

Total

15

/

20

Passed

Description

48%Weight 40%Scale 1-5

Based on the skill's description, can an agent find and select it at the right time? Clear, specific descriptions lead to better discovery.

The description is concise and names a specific, recognizable domain, but it is bare-bones. It states a single 'what' with no capability detail and completely lacks a 'when to use' trigger clause, which both caps completeness and limits trigger-term coverage. Adding an explicit usage trigger and one or two concrete capabilities would lift it substantially.

Suggestions

Add an explicit trigger clause, e.g. 'Use when the user asks to create, build, or scaffold a REST API, Express server, or backend with endpoints.'

Enumerate 2-3 concrete capabilities (e.g. 'with CRUD endpoints, JWT authentication, and SQLite persistence') to raise specificity beyond a single generic action verb.

Include natural user variations such as 'build', 'create', 'scaffold', 'Node.js', and 'endpoints' to broaden trigger-term coverage.

DimensionReasoningScore

Specificity

The description 'Generates Express REST APIs.' names the domain (Express REST APIs) but provides only a single minimal action verb, structurally matching anchor 2's example 'Processes PDF files'. It does not reach anchor 3 because it enumerates no concrete capabilities of the generated API (no CRUD, endpoints, auth, or database mention), and anchor 1 does not apply since a concrete domain and action are named.

2 / 5

Completeness

It clearly answers 'what' (generates Express REST APIs) but contains no 'Use when...' clause or equivalent trigger guidance, which per the judging guidelines caps completeness at 3. This exactly matches anchor 3: 'Has a clear what but when is missing or only weakly implied' — here 'when' is entirely absent, keeping it below anchor 4.

3 / 5

Trigger Term Quality

Relevant natural keywords are present — 'Generates', 'Express', 'REST', 'APIs' — terms a user would plausibly say. However, common variations and synonyms are missing ('create', 'build', 'scaffold', 'backend', 'endpoints', 'Node.js'), matching anchor 3 ('Some relevant keywords but missing common variations or synonyms'). Not anchor 4 because coverage is thin, not anchor 2 because the terms present are natural rather than generic filler.

3 / 5

Distinctiveness Conflict Risk

'Express REST APIs' carves out a fairly specific niche with distinct triggers (Express, REST, API), so it is mostly distinguishable from unrelated skills, matching anchor 4. It does not reach anchor 5 because the terse phrasing could also capture generic REST-API or backend-generation requests not specific to Express, creating minor overlap with closely related web-API skills.

4 / 5

Total

12

/

20

Passed

Validation

100%

Checks the skill against the spec for correct structure and formatting. All validation checks must pass before discovery and implementation can be scored.

Validation — 16 / 16 Passed

Validation for skill structure

No warnings or errors.

Repository

jbaruch/tessl-demo

Path

steps/02-skill-with-frontmatter/SKILL.md

Reviewed

Table of Contents

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.