CtrlK
BlogDocsLog inGet started
Tessl Logo
SkillPublic

affinity

Affinity integration. Manage Organizations, Leads, Pipelines, Users, Roles, Filters. Use when the user wants to interact with Affinity data.

Quality

76%

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/affinity/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's strength is actionability — a complete, copy-paste-ready command path from CLI install through connection-state handling to action execution and an API-proxy fallback, plus a solid action catalog. Its weaknesses are padding in the overview sections (marketing prose and a cryptic entity bullet list), no validation/verification loop around the create/update operations it performs on live CRM data, and a broken "skip to Step 2" cross-reference. Progressive disclosure is good but the whole API surface lives inline in one file.

Suggestions

Trim the opening marketing paragraph ("helps sales, investment banking, and consulting teams close more deals...") to one line, and cut the cryptic "Affinity Overview" bullet list and the filler line "Use action names and parameters as needed" — neither informs execution.

Add a validation loop for write operations: after running create/update actions, check the `output` response for errors and verify the result with the corresponding get-* action (e.g. `get-person` after `update-person`) before reporting success.

Fix the dangling cross-reference "If the returned connection has state: \"READY\", skip to **Step 2**" by numbering the actual workflow steps (the only numbered heading is "1b") or replacing it with a concrete section name like "Searching for actions".

DimensionReasoningScore

Conciseness

The operational core (install, auth, connection, action discovery, running, proxy flags) is tight and command-first, but there is real padding: the opening marketing paragraph ("helps sales, investment banking, and consulting teams close more deals. It automates the collection of relationship data..."), the cryptic "Affinity Overview" bullet list ("Document / Section / Project / Tag"), the filler line "Use action names and parameters as needed.", and "This will burn less tokens" in Best practices. This matches "mostly efficient but includes some unnecessary explanation or could be tightened" rather than the minor-trim level of a 4.

3 / 5

Actionability

Every phase of the lifecycle ships a copy-paste-ready command with real flags: `npm install -g @membranehq/cli@latest`, `membrane login --tenant --clientName=<agentType>`, `membrane connection ensure "https://www.affinity.co/" --json`, `membrane action list --connectionId=... --intent "QUERY" --limit 10 --json`, `membrane action run <actionId> --input '{...}'`, and a full proxy flag table (-X, -H, -d, --json, --rawData, --query, --pathParam). A 20-row action table with names, keys, and descriptions covers the common cases; not a 4 because there are no material gaps — the actionId source is explained by the action-list output schema ("Each result includes id, name, description, inputSchema...").

5 / 5

Workflow Clarity

The connection phase is genuinely strong — explicit state-machine checkpoints (poll with --wait until READY, handle CLIENT_ACTION_REQUIRED via clientAction.agentInstructions, re-poll after the user acts, check the error field on CONFIGURATION_ERROR/SETUP_FAILED). But the data-operation phase has no validation guidance at all: the skill drives create/update of CRM records (update-person, update-organization, update-opportunity, create-list-entry) with no verify-after-write step and no error-checking on action run results, so the destructive/batch cap of 3 applies. There is also a dangling navigation reference: "If the returned connection has state: \"READY\", skip to **Step 2**" — no "Step 2" is labeled anywhere in the document, and the only numbered heading is "#### 1b", implying a step scheme that was never written.

3 / 5

Progressive Disclosure

A single-file skill (no references/, scripts/, or assets/ exist, so no dangling or nested references) with a clean one-level section structure: Install → Authentication → Connecting → Searching → Popular actions → Running → Proxy → Best practices. This lands on "good structure; most content is appropriately placed; minor organization gaps" — the 20-row Popular actions table is borderline reference material that could move to a reference file, which is what keeps it from a 5, but at ~160 lines with headers doing real navigation work the split is a nicety, not a defect.

4 / 5

Total

15

/

20

Passed

Description

75%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 solid description that names the integration, enumerates concrete entity areas, and includes an explicit "Use when" clause — hitting all four dimensions at a good-but-not-excellent level. Its main weaknesses are relying on one generic verb ("Manage") instead of distinct actions, a thin single-phrase trigger clause, and terminology drift ("Leads"/"Pipelines" vs. the "Opportunities"/"Lists" vocabulary the body actually exposes).

Suggestions

Replace the single verb "Manage" with distinct concrete actions, e.g. "Search, create, and update Organizations, Opportunities, Persons, Lists, and Notes in Affinity" — aligning entity names with the action keys the skill actually exposes.

Broaden the when-clause with natural trigger variations: "Use when the user mentions Affinity, CRM data, leads, deals, or wants to create/update/search records in Affinity."

Add missing synonyms (CRM, contacts, opportunities, deals) so the description triggers on the phrasings users actually use when they don't name the app directly.

DimensionReasoningScore

Specificity

"Manage Organizations, Leads, Pipelines, Users, Roles, Filters" names the domain plus six concrete capability areas, matching the anchor for several specific actions with minor coverage gaps. It falls short of a 5 because a single generic verb ("Manage") stands in for distinct actions (create/update/search), and capabilities shown in the body (notes, lists, list entries, opportunities) are not covered.

4 / 5

Completeness

Both halves are present: the "what" ("Affinity integration. Manage Organizations, Leads, Pipelines, Users, Roles, Filters.") and an explicit "Use when the user wants to interact with Affinity data" trigger clause, matching the anchor where "when" could be more explicit or specific. It is not a 5 because the when-clause is a single generic phrase without concrete trigger variations (e.g. "mentions Affinity, wants to create or update a lead/organization/opportunity").

4 / 5

Trigger Term Quality

"Affinity" plus the entity terms ("Organizations, Leads, Pipelines, Users, Roles, Filters") give good keyword coverage of what users would naturally say. Not a 5: common synonyms and variations are missing (CRM, contacts, deals, opportunities — the body's action table uses "Opportunities" and "Lists", terms absent from the description).

4 / 5

Distinctiveness Conflict Risk

Naming the specific app ("Affinity") gives it a clear niche with distinct triggers, but generic CRM entity terms ("Organizations", "Leads", "Pipelines") create minor overlap risk with other CRM/sales skills when the user does not name the app — the "mostly distinct; minor overlap risk with closely related skills" anchor. A 5 would require triggers that keep it clearly separate from those neighboring skills.

4 / 5

Total

16

/

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