CtrlK
BlogDocsLog inGet started
Tessl Logo

canvas

Fetch Canvas LMS courses and assignments via API token.

62

Quality

75%

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 ./optional-skills/productivity/canvas/SKILL.md
SKILL.md
Quality
Evals
Security

Quality

Content

92%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 SKILL.md body is a strong example: executable, well-sequenced with an explicit auth-validation checkpoint and error-recovery table, and cleanly split from its implementation script. The only weakness is mild duplication between the Python CLI usage and the inline curl API reference.

DimensionReasoningScore

Conciseness

The body is lean — concrete setup steps, executable commands, example outputs, and a compact troubleshooting table — with only minor trimmable content, e.g., the '## API Reference (curl)' section largely duplicates what the bundled Python script already does. This matches the score-4 anchor 'Efficient; minor instances of over-explanation that could be trimmed'; it is not 5 because of that curl duplication, and not 3 because there is no padding or explanation of concepts Claude already knows.

4 / 5

Actionability

Everything is copy-paste ready: numbered token-generation steps ('Account → Settings ... + New Access Token'), exact env-var block, runnable commands ('$CANVAS list_assignments 12345 --order-by due_at'), concrete JSON output examples, and curl equivalents. This matches the score-5 anchor 'Fully executable; copy-paste ready code or commands; specific examples cover the common cases'. It is not 4 because there are no gaps — even edge cases (empty course list, wrong institution) are covered in Troubleshooting.

5 / 5

Workflow Clarity

The single-purpose read-only workflow is unambiguous: a numbered setup sequence, an explicit first-use validation checkpoint ('On first use, verify auth by running $CANVAS list_courses — if it fails with 401, guide the user through setup'), and error-recovery guidance in the Troubleshooting table. This matches the score-5 anchor 'Clear sequence with explicit validation steps; feedback loops for error recovery'. It is not 4 because validation and recovery paths are explicit, not merely implied.

5 / 5

Progressive Disclosure

The body is a clear, well-sectioned overview; the 160-line implementation is correctly externalized to 'scripts/canvas_api.py', which exists in the bundle and is accurately described ('Python CLI for Canvas API calls'); no buried or nested references. This matches the score-5 anchor 'Clear overview with well-signaled one-level-deep references; content appropriately split; easy navigation'. It is not 4 because there are no organization gaps — every inline section (setup, usage, output, rules, troubleshooting) belongs inline at this skill's size.

5 / 5

Total

19

/

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 specific, uses third person, and clearly identifies a distinct niche (Canvas LMS), but it omits any 'when to use' trigger guidance and lacks synonym coverage, so it underperforms on completeness and trigger quality. Adding a 'Use when...' clause with natural user phrasings would substantially improve it.

Suggestions

Add an explicit trigger clause, e.g., 'Use when the user asks about their Canvas courses, assignments, homework, or due dates.'

Broaden trigger vocabulary with natural synonyms users would say — 'homework', 'class', 'grades', 'Instructure' — not just the technical terms 'courses' and 'assignments'.

Optionally mention read-only/listing scope in the description (e.g., 'read-only listing') so the skill's boundary is visible at trigger time.

DimensionReasoningScore

Specificity

"Fetch Canvas LMS courses and assignments via API token" names the domain (Canvas LMS) and two concrete actions (fetch courses, fetch assignments), matching the score-3 anchor 'Names domain and 1-2 concrete actions, but not comprehensive'. It is not 4 because only two actions are listed with no breadth of coverage (e.g., no mention of filtering, due dates, or pagination), and not 2 because the actions are concrete rather than generic.

3 / 5

Completeness

The 'what' is clear ("Fetch Canvas LMS courses and assignments via API token") but there is no 'when' / 'Use when...' clause or equivalent trigger guidance anywhere in the description, which per the judging guidelines caps completeness at 3 ('Has a clear what but when is missing or only weakly implied'). It is not 4 because no usage context is even implicitly suggested, and not 2 because the 'what' is specific and unambiguous.

3 / 5

Trigger Term Quality

The description contains relevant natural keywords — "Canvas LMS", "courses", "assignments" — but misses common variations users would actually say (e.g., "homework", "class", "grades", "Instructure", "syllabus"), matching the score-3 anchor 'Some relevant keywords but missing common variations or synonyms'. It is not 4 because several natural trigger phrases are absent, and not 2 because the terms present are domain-specific rather than generic.

3 / 5

Distinctiveness Conflict Risk

"Canvas LMS" is a clearly named, narrow niche with distinct triggers (courses/assignments of a specific LMS platform), so conflict with other skills is minimal — matching the score-5 anchor 'Clear niche with distinct triggers; minimal conflict risk'. It is not 4 because the domain identifier is unambiguous rather than merely 'mostly distinct'.

5 / 5

Total

14

/

20

Passed

Validation

81%

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

Validation — 13 / 16 Passed

Validation for skill structure

CriteriaDescriptionResult

metadata_version

'metadata.version' is missing

Warning

metadata_field

'metadata' should map string keys to string values

Warning

frontmatter_unknown_keys

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

Warning

Total

13

/

16

Passed

Repository
NousResearch/hermes-agent
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.