CtrlK
BlogDocsLog inGet started
Tessl Logo
SkillPublic

compromise-nlp

Write correct code with the `compromise` JavaScript NLP library (the npm package `compromise`, imported as `nlp`). Use this whenever you are writing or editing JS/TS that imports compromise, calls `nlp(...)`, or chains methods like `.match()`, `.tag()`, `.people()`, `.verbs()`, `.nouns()`, `.numbers()`, `.normalize()`, or `.replace()` — and also whenever doing rule-based natural-language tasks in JavaScript (extracting entities/dates/numbers, matching text patterns, changing verb tense, pluralizing, redacting/anonymizing text, building a simple chatbot intent matcher) where compromise is or could be the tool. compromise's match-syntax and tagset are non-obvious and easy to get wrong from memory; consult this skill before guessing.

Quality

95%

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

SKILL.md
Quality
Evals
Security

Quality

Content

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

An exemplary library-usage skill: dense with non-obvious, version-current pitfalls, fully executable examples with expected outputs, and a real debugging feedback loop. The only flaw is a single ambiguous inline reference ('see references for the rest') that points at no actual bundle file.

Suggestions

Point '(see references for the rest)' at a concrete destination — e.g., the 'Going deeper' section or node_modules/compromise/docs/match-syntax.md — since no references/ bundle file ships with the skill.

If the match-syntax cheat sheet grows further, move the full operator table into a bundled reference file (e.g., references/match-syntax.md) and keep SKILL.md as the lean overview, which would also give the inline pointer a real target.

DimensionReasoningScore

Conciseness

Every section carries library-specific, non-obvious knowledge — in-place mutation semantics ('Transforms mutate the document in place'), silent failure of invalid tags ('an invalid #Tag matches nothing, silently'), term-level match syntax, and methods that throw ('.money().currency()… do not exist'). There is no general NLP/JavaScript explanation and no padding; each token earns its place. Not 4 because there are no identifiable over-explanations to trim — even the intro paragraph conveys the library-specific document/View model, not concepts Claude already knows.

5 / 5

Actionability

Fully executable, copy-paste-ready code with expected outputs throughout ('nlp(\'five hundred\').numbers().toNumber().text() // \'500\''), including correct-vs-incorrect contrasts for the mutation rule, exact replacements for nonexistent methods ('Use .money().json() / .fractions().get() instead'), and concrete debugging commands. Matches the anchor-5 pattern of runnable examples covering the common cases; not 4 because no key case is left pseudocode or incomplete.

5 / 5

Workflow Clarity

A single-purpose skill whose flow is unambiguous: internalize the five rules → apply verified patterns → heed sharp edges → follow the explicit error-recovery loop ('doc.debug() // prints how every word was actually tagged — start here', then json(), verbose, then a three-cause checklist for empty matches). The debugging section is a genuine validate→diagnose→retry feedback loop; not 4 because checkpoints for the risky paths (wrong tags, empty matches, throwing methods) are explicit rather than implicit.

5 / 5

Progressive Disclosure

Good structure: a lean cheat-sheet body with a well-signaled 'Going deeper' section pointing one level deep to version-matched package docs, each described by purpose ('match-syntax.md — every match operator', 'tag-definitions.md — the complete, valid tagset'). Not 5 because the inline pointer '(see references for the rest)' does not resolve to a real bundle file — no references/ directory ships with the skill — leaving one navigation target ambiguous; not 3 because all other references are clearly signaled and the content split is otherwise appropriate.

4 / 5

Total

19

/

20

Passed

Description

91%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 that explicitly states what the skill does and when to use it, with comprehensive, natural trigger terms covering both explicit compromise usage and task-based scenarios. Two minor issues keep it from full marks: second-person voice in the trigger clause and an intentionally broad 'could be the tool' catch-all that raises slight conflict risk with general NLP-skill triggers.

Suggestions

Rewrite the trigger clause in third person (e.g., 'Use when writing or editing JS/TS that imports compromise') to satisfy the third-person voice rule and recover the specificity penalty.

Tighten 'where compromise is or could be the tool' to more specific conditions (e.g., 'where lightweight, dependency-free, in-browser NLP is needed') to reduce overlap with general NLP/text-processing skill triggers.

Consider naming the import identifier once ('compromise, imported as nlp') earlier and trimming the repeated method-name enumeration, which slightly pads an otherwise dense description.

DimensionReasoningScore

Specificity

Base score is 5: the description lists multiple concrete actions — 'extracting entities/dates/numbers, matching text patterns, changing verb tense, pluralizing, redacting/anonymizing text, building a simple chatbot intent matcher' — with comprehensive coverage of the library's capability surface. However, the second-person phrasing 'Use this whenever you are writing or editing JS/TS' violates the third-person voice rule, triggering the −1 penalty; it is not a 3 because the action list itself is comprehensive and concrete, far beyond '1-2 concrete actions'.

4 / 5

Completeness

Explicitly answers both questions: what ('Write correct code with the compromise JavaScript NLP library…') and when, with concrete trigger phrases ('Use this whenever you are writing or editing JS/TS that imports compromise, calls nlp(...)… and also whenever doing rule-based natural-language tasks in JavaScript'). Matches the anchor-5 example's structure exactly; not 4 because the 'when' clause is not merely present but enumerates specific triggering conditions.

5 / 5

Trigger Term Quality

Comprehensive natural-term coverage: the package name and import form ('the npm package compromise, imported as nlp'), API surface terms ('nlp(...)', '.match()', '.people()', '.verbs()'), and task phrases users would actually say ('extracting entities', 'changing verb tense', 'redacting/anonymizing text', 'chatbot intent matcher'). It sits at the anchor-5 example's level (PDF files, PDFs, forms, .pdf) rather than anchor 4, which leaves natural synonyms missing — none are missing here.

5 / 5

Distinctiveness Conflict Risk

The niche is distinct — a specific npm library with signature calls ('imports compromise, calls nlp(...)') and named methods — but the catch-all clause 'whenever doing rule-based natural-language tasks in JavaScript… where compromise is or could be the tool' broadens triggers to any rule-based NLP task in JS, creating minor overlap risk with general text-processing/NLP skills. Not 5 because that broadened trigger could fire for tasks where a different tool is intended; not 3 because the primary triggers are unmistakably library-specific.

4 / 5

Total

18

/

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

spencermountain/compromise

Path

docs/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.