CtrlK
BlogDocsLog inGet started
Tessl Logo
SkillPublic

adversus

Adversus integration. Manage data, records, and automate workflows. Use when the user wants to interact with Adversus data.

Quality

62%

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

Fix and improve this skill with Tessl

tessl review fix ./skills/adversus/SKILL.md
SKILL.md
Quality
Evals
Security

Quality

Content

50%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 Membrane CLI usage sections are well-structured, actionable, and include a solid connection-state feedback loop, but they are buried in a 200-line entity list that looks like legal-practice boilerplate unrelated to Adversus. The opening also mischaracterizes the platform as a 'competitive intelligence platform' while the popular actions (leads, campaigns, activities) indicate an outbound calling/CRM product, creating an internal inconsistency. Numbered workflow steps and result verification for write actions are missing.

Suggestions

Move the ~200-line entity list out of SKILL.md into a references/ file (e.g. references/entities.md) and keep a one-line pointer, or delete it entirely given it appears to be from an unrelated legal-domain skill.

Fix the dangling workflow reference: "skip to **Step 2**" points to a step that is never labeled — number the main workflow steps explicitly (1. Install, 2. Authenticate, 3. Connect, 4. Search, 5. Run).

Add validation guidance for write/destructive actions, e.g. "Before update-lead, run get-lead to capture current values; after, re-run get-lead to confirm the change applied."

Add one concrete end-to-end example with resolved values (e.g. running get-lead with a real action key and connection id) and remove the inaccurate 'competitive intelligence platform' characterization.

DimensionReasoningScore

Conciseness

Roughly 200 of ~345 body lines are a bullet dump of entity names ("Court", "Judge", "Will", "Trust", "Pet", "Safe Deposit Box") that appear to come from a legal-practice boilerplate and are irrelevant to Adversus, plus opening marketing copy ("Adversus is a competitive intelligence platform. It helps businesses monitor and analyze their competitors' strategies...") that Claude does not need. Not 1 because the Membrane CLI sections themselves are efficient and instructional; not 3 because well over half the body is padding.

2 / 5

Actionability

The CLI workflow is genuinely concrete — "npm install -g @membranehq/cli@latest", "membrane connection ensure \"https://adversus.io\" --json", "membrane action run <actionId> --connectionId=CONNECTION_ID --input '{\"key\": \"value\"}' --json" — but there is no end-to-end example with resolved values (a real actionId such as get-lead, a concrete connection id), and "Use action names and parameters as needed" is vague direction with no parameter guidance. This sits between the pseudocode-incomplete anchor (3) and mostly-executable (4); the missing resolved examples and the vacuous parameter line pull it to 3.

3 / 5

Workflow Clarity

The install → login → connect → search → run sequence is present, and connection setup has a real feedback loop (poll with "npx @membranehq/cli connection get <id> --wait --json", handle CLIENT_ACTION_REQUIRED, re-poll, "Check the error field for details"). However "If the returned connection has state: \"READY\", skip to **Step 2**" references a 'Step 2' that is never labeled anywhere, and destructive/batch write actions (update-lead, change-lead-status, create-lead) have no verification guidance — capping this at 3. Not 4 because the dangling step reference and absent result-verification checkpoints break the sequence; not 2 because the connection-state handling is a genuine validation loop.

3 / 5

Progressive Disclosure

No bundle files exist (no references/, scripts/, or assets/), and "## Adversus Overview" inlines ~200 lines of entity names that clearly belong in a separate reference file — matching the anchor-3 example ("## Overview [200 lines of API reference that could be in a separate file]"). Not 2 because the remaining sections (Working with Adversus, Popular actions, Proxy requests, Best practices) are well organized with clear headings; not 4 because the largest content block is inlined rather than split out.

3 / 5

Total

11

/

20

Passed

Description

57%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 functional but under-specified: it correctly scopes the skill to Adversus with an explicit 'Use when' clause, yet describes no concrete capabilities beyond generic verbs. It also does not reflect what the body's popular actions suggest the platform actually does (leads, campaigns, outbound calling) — 'competitive intelligence' framing appears only in the body and contradicts it.

Suggestions

Replace "Manage data, records, and automate workflows" with the platform's actual concrete operations, e.g. "Create, update, and retrieve leads, assign leads to campaigns, add notes and activities, and change lead statuses in Adversus."

Add natural trigger terms users would say for this platform — e.g. "Use when the user mentions Adversus, leads, campaigns, or outbound calling/dialer data."

Avoid circular 'when' phrasing ("interact with Adversus data") and instead name the concrete tasks that should activate the skill.

DimensionReasoningScore

Specificity

"Manage data, records, and automate workflows" names the domain (Adversus) but the actions are purely generic — no concrete operations like "create leads", "change lead status", or "manage campaigns" appear. It sits at the 'Names the domain but actions are minimal or generic' anchor, not 3, because no concrete action is actually named; not 1 because the domain and action verbs are present rather than pure abstraction.

2 / 5

Completeness

Both parts are present: what ("Adversus integration. Manage data, records, and automate workflows") and when ("Use when the user wants to interact with Adversus data"), so the missing-'Use when' cap at 3 does not apply. Not 5 because the 'what' lacks concrete actions and the 'when' is circular ('interact with Adversus data') rather than adding concrete trigger phrases.

4 / 5

Trigger Term Quality

"Adversus" is the one natural keyword a user would say, matching the anchor-3 example "Works with PDF files" (domain keyword present, variations missing). It is not 4 because coverage is thin — no supporting terms like leads, campaigns, contacts, dialer, or call center; not 2 because "Adversus" is exactly the natural phrase, not generic filler.

3 / 5

Distinctiveness Conflict Risk

The proper noun "Adversus" and the trigger "interact with Adversus data" give it a clear niche with minimal wrong-skill risk. Not 5 because distinctiveness rests solely on the app name — the middle phrase "Manage data, records, and automate workflows" is generic boilerplate that overlaps many data-integration skills if the name is stripped away.

4 / 5

Total

13

/

20

Passed

Validation

93%

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

Validation — 15 / 16 Passed

Validation for skill structure

CriteriaDescriptionResult

frontmatter_unknown_keys

Unknown frontmatter key(s) found; consider removing or moving to metadata

Warning

Total

15

/

16

Passed

Repository

membranedev/application-skills

Path

skills/adversus/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.