CtrlK
BlogDocsLog inGet started
Tessl Logo
SkillPublic

convex-authz

Audit and harden a Convex app's authorization: identity-from-arg impersonation, missing per-document ownership checks, public queries leaking data by a client-supplied id, and writes into a parent/container the caller doesn't own. Scans for the 4 shapes, applies requireIdentity/requireOwner, verifies with tsc. TRIGGER on 'secure my app', 'audit auth/authz', 'who can access this data'. SKIP when there is no convex/ directory.

Quality

85%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide
SecuritybySnyk

Passed

No findings from the security scan

The canonical home for this skill is convex-authz in openclaw/clawhub

SKILL.md
Quality
Evals
Security

Quality

Content

70%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 body delivers an unusually rigorous, well-sequenced audit workflow with real regexes, precise helper semantics, and a genuine verify-and-re-scan feedback loop. Its weaknesses are redundancy (step 0 restated in Rules, exemption stated twice), run-on paragraphs, and a dangling reference to content/convex-expert.md whose 'verbatim' pattern the bundle never ships.

Suggestions

Inline the actual requireIdentity/requireOwner code (or ship convex-expert.md in the bundle) — the skill mandates applying the pattern 'verbatim' but the code appears nowhere, and content/convex-expert.md does not exist in the skill directory.

Deduplicate: the auth-foundation check is fully specified in Workflow step 0 and then repeated as the first Rules bullet — keep one authoritative statement and cross-reference it.

Provide literal grep regexes for shapes b, c, and d as done for shape a, since step 3 tells the reader to 're-run the step-1 scan' and only shape (a) has an executable regex.

DimensionReasoningScore

Conciseness

There is significant duplication: the entire 'MANDATORY FIRST STEP' foundation check in Workflow step 0 is restated nearly verbatim as the first Rules bullet, and the internal-function exemption appears in both step 2 ('Never widen scope — an internal/admin function... stays internalQuery/internalMutation') and the Rules ('the one legitimate exception is an internalQuery/internalMutation'). The intro's defect statistics ('25 identity-from-arg + 13 missing-ownership-check + 6 PII-leak-by-argument = 44 of 214') add little operational value, and steps 0 and 2 are run-on paragraphs that could be tightened. Mostly purposeful content, but with clear tightening opportunities — anchor 3, not 4 (the redundancy is more than 'minor instances').

3 / 5

Actionability

Concrete guidance is strong: exact grep regex for shape (a), precise helper contracts ('throws 401 if ctx.auth.getUserIdentity() is null', 'throws 404 if doc is null, throws 403 if doc.ownerId !== identity.subject'), and a concrete verification command ('npx tsc --noEmit'). However, the canonical requireIdentity/requireOwner code itself is never shown — the skill says 'apply the canonical pattern from content/convex-expert.md verbatim — do not invent a new helper', yet no such file exists in the bundle, and shapes b-d get prose descriptions rather than the literal regexes promised by 'the 4 deterministic greps'. Mostly executable with a real gap — anchor 4, not 5.

4 / 5

Workflow Clarity

The sequence is explicit and well-gated: step 0 (foundation check with a clear branch: internalize-and-defer on foundationless apps), step 1 (deterministic scan), step 2 (harden), step 3 (VERIFY: 'run npx tsc --noEmit... Then re-run the step-1 scan to confirm 0 remaining hits'), step 4 (report with diffs). This is a batch-edit operation and it has both an explicit validation checkpoint and a feedback loop (re-scan until 0 hits), matching anchor 5's 'explicit validation steps; feedback loops for error recovery'.

5 / 5

Progressive Disclosure

There are no bundle files (no references/, scripts/, or assets/ directories), yet the body repeatedly directs the reader to 'content/convex-expert.md' and notes generation from 'content/capabilities/convex-authz.json' — paths that do not resolve inside the skill bundle, so the reference containing the canonical pattern to apply 'verbatim' is unnavigable. Meanwhile the operative content is inlined as two dense paragraph-walls (steps 0 and 2) that would be more usable split out. This matches anchor 3 ('references present but not clearly signaled; content that should be separate is inline') better than 4, where references would be mostly clear and resolvable.

3 / 5

Total

15

/

20

Passed

Description

92%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.

A strong description: it names the exact defect shapes it targets, the concrete fix mechanism, and the verification step, all in third person with explicit trigger and skip conditions. The only weakness is slightly narrow trigger coverage missing common synonyms like 'permissions'.

Suggestions

Add common trigger synonyms such as 'permissions check', 'authorization bypass', or 'unauthorized access' to the TRIGGER clause to broaden natural-term coverage.

Consider a trigger phrase mentioning Convex by name (e.g., 'Convex auth') so users who name the platform directly also match.

DimensionReasoningScore

Specificity

The description enumerates multiple concrete capabilities: 'identity-from-arg impersonation, missing per-document ownership checks, public queries leaking data by a client-supplied id, and writes into a parent/container the caller doesn't own', plus concrete actions ('Scans for the 4 shapes, applies requireIdentity/requireOwner, verifies with tsc'). This matches the anchor 'lists multiple specific concrete actions; comprehensive coverage' — not score 4, since there are no meaningful coverage gaps.

5 / 5

Completeness

Both 'what' (the four authz defect shapes and the scan/harden/verify pipeline) and 'when' (explicit 'TRIGGER on...' phrases plus a 'SKIP when there is no convex/ directory' boundary) are clearly and explicitly stated with concrete trigger phrases. This is exactly anchor 5; anchor 4's 'when could be more explicit' does not apply.

5 / 5

Trigger Term Quality

TRIGGER phrases 'secure my app', 'audit auth/authz', 'who can access this data' are natural user utterances, but common synonyms like 'permissions', 'authorization check', or 'lock down my app' are missing. Good coverage with a few natural terms absent — matches anchor 4 rather than 5's 'comprehensive coverage including synonyms'.

4 / 5

Distinctiveness Conflict Risk

The niche is narrow and well-fenced: Convex-specific authorization auditing, with an explicit SKIP ('no convex/ directory') preventing triggering on generic security-review requests. Distinct trigger phrases and platform-specific vocabulary (requireIdentity/requireOwner, convex/) give minimal conflict risk — matches anchor 5 rather than 4's 'minor overlap risk with closely related skills'.

5 / 5

Total

19

/

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

FacundoLucci/autonomous-buyer

Path

.claude/skills/convex-authz/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.