CtrlK
BlogDocsLog inGet started
Tessl Logo
SkillPublic

canny

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

Quality

65%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide
SecuritybySnyk

Low

Low-risk findings worth noting

Fix and improve this skill with Tessl

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

Quality

Content

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

A well-structured, highly actionable integration guide with excellent state-machine handling of the connection lifecycle and a useful action catalog. Its main weaknesses are padding that assumes Claude lacks basic knowledge of Canny, a dangling "Step 2" reference, and an inline action table plus proxy documentation that would be better served by progressive disclosure into reference files.

Suggestions

Cut the Canny explainer paragraph and marketing lines ("focus on the integration logic rather than auth plumbing", "This is the fastest way...") — Claude already knows what Canny and OAuth are.

Fix the dangling "skip to **Step 2**" reference by numbering the actual steps (1. Connect, 2. Search actions, 3. Run), and reconcile the `membrane connection get` vs `npx @membranehq/cli connection get` inconsistency.

Show one fully resolved example of `action run` using a real key from the table (e.g. `list-posts`) so the `<actionId>` placeholder is unambiguous, and add a confirmation caveat before destructive actions like `delete-post`.

DimensionReasoningScore

Conciseness

The body is mostly commands and tables, but opens with an explanation of what Canny is and who uses it ("Canny is a feedback management tool that helps SaaS companies collect, organize, and prioritize user feedback..."), which Claude already knows, plus marketing filler ("so you can focus on the integration logic rather than auth plumbing", "This is the fastest way to get a connection") and the no-op line "Use action names and parameters as needed.". This matches anchor 3 ('mostly efficient but includes some unnecessary explanation'), and the knowledge-assumption violation keeps it from 4.

3 / 5

Actionability

Guidance is concrete and copy-paste-ready: install command, `membrane login`, `membrane connection ensure "https://canny.io" --json`, `--wait` polling, `action run ... --input '{...}'`, a proxy flag table, and a 20-row action catalog with keys. Minor gaps keep it at anchor 4 rather than 5: the `<actionId>` placeholder is never concretely resolved against the catalog keys, and the polling example switches from `membrane connection get` to `npx @membranehq/cli connection get` without explanation.

4 / 5

Workflow Clarity

The connection lifecycle is a clear sequence with a genuine feedback loop: ensure → poll with `--wait` → branch on `READY`/`CLIENT_ACTION_REQUIRED` (with typed `clientAction` handling) /`CONFIGURATION_ERROR` → user acts → re-poll, then search actions and run them. It is not 5 because the text says "skip to **Step 2**" but no Step 2 heading exists (a dangling reference), and the destructive `delete-post` action appears in the catalog with no confirmation guidance.

4 / 5

Progressive Disclosure

No bundle files exist, so everything lives in a single SKILL.md with well-organized sections (Overview, Install, Authentication, Connecting, Searching, Popular actions, Running, Proxy, Best practices) and one clearly signaled external link to the official docs. This matches anchor 4 ('good structure; most content appropriately placed; minor organization gaps'); the 20-row action table is arguably reference material that could be split out, and the >50-line simple-skill exception does not apply, so it does not reach 5.

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 correctly names the target app and includes an explicit trigger clause, but the capability statement is generic filler that would apply to almost any app integration. It neither lists concrete Canny actions nor captures the natural vocabulary (feedback, posts, boards) users would actually say.

Suggestions

Replace the vague "Manage data, records, and automate workflows" with concrete Canny capabilities, e.g. "Create, update, and delete feedback posts; manage boards, comments, votes, users, and changelog entries via the Canny API".

Broaden trigger terms to the vocabulary users naturally use: "Use when the user mentions Canny, user feedback, feature requests, feedback boards, or wants to manage product feedback and changelog entries".

State the mechanism (Membrane CLI connection handling auth and credential refresh) so the 'what' distinguishes this skill from a raw Canny API skill.

DimensionReasoningScore

Specificity

"Manage data, records, and automate workflows" names the Canny domain but the actions are pure generic filler; no concrete Canny capabilities (posts, boards, votes, comments, changelog) are mentioned. It matches anchor 2 ('names the domain but actions are minimal or generic') and falls short of anchor 3, which requires 1-2 concrete actions.

2 / 5

Completeness

A 'Use when...' trigger clause is explicitly present, but the 'what' ("Manage data, records, and automate workflows") is buzzword-vague and never states concretely what the skill does with Canny. It sits between anchor 3 and anchor 4: the 'when' is present (ruling out 3's literal fit) but the 'what' is too vague to satisfy 4, which assumes a clear capability statement; the vagueness pulls it to 3.

3 / 5

Trigger Term Quality

"Use when the user wants to interact with Canny data" includes the key natural term "Canny", but misses obvious synonyms and phrases users would say such as "feedback", "feature requests", "boards", "changelog", or "roadmap". This is anchor 3 ('some relevant keywords but missing common variations or synonyms'), not anchor 4 which requires good keyword coverage.

3 / 5

Distinctiveness Conflict Risk

"Canny integration" carves a specific niche around a named SaaS tool with distinct triggers, giving minimal conflict risk with unrelated skills. Not anchor 5 because the templated phrasing ("Manage data, records, and automate workflows") reads like a generic integration-skill boilerplate and could overlap with other app-integration skills built on the same pattern.

4 / 5

Total

12

/

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