Directory → SKILL
SKILLoptionalHermes Optional Skills

Canvas

Fetch Canvas LMS courses and assignments via API token

CanvasLMSEducationCoursesAssignmentsOptionalHermes skill
Last registry verification2026-08-18v1.0.0community
Plain meaning

What does it add to Hermes?

Fetch Canvas LMS courses and assignments via API token

Canvas is a skill related to design and media. It adds tools to create, read, or modify media such as designs, images, audio, or video.

This plain-language explanation is based on the publisher description. The original text remains visible for verification.

Use it when

Use it when your goal in design and media is clear and you can limit it to the data and actions it actually needs.

Skip it when

Do not add it merely to experiment when Hermes already has a simpler path, or when you cannot review its source and permissions.

Who is it for?

Best for users who want a repeatable way of working inside Hermes.

Safe first test

Start with a disposable asset and create a copy instead of changing the original.

Original publisher description

Fetch Canvas LMS courses and assignments via API token

✓
Data source

This entry was indexed from Hermes Optional Skills. Our explanation interprets the type and domain without inventing a capability not present upstream.

!
Security review

The source is official or editorially reviewed, but you still need to review permissions and version compatibility.

Safe setup path

Inspect, install, then test.

  1. 01
    Open the source

    Match the publisher, license, and description to your need. Check the real update history.

  2. 02
    Review permissions and secrets

    Never paste a secret value into this site. Use environment-variable names and grant the smallest scope.

  3. 03
    Copy setup only after review

    The controls below copy text. They do not execute commands on your device.

  4. 04
    Test with a non-sensitive task

    Inspect the visible tools, then exclude write or delete tools you do not need.

Install command

Review the command, then copy it.

hermes skills install canvas

Hermes Belarabi does not execute this command. Installation happens on your device and remains subject to Hermes scanning and your review.

The full skill definition

Exactly what Hermes loads when this skill runs.

Reproduced from the official documentation. Read it before enabling the skill: this text becomes the agent's instructions.

Fetch Canvas LMS courses and assignments via API token.

Skill metadata

A lookup table. Do not read it all; find the row that applies to you.

SourceOptional — install with hermes skills install official/productivity/canvas
Pathoptional-skills/productivity/canvas
Version1.0.0
Authorcommunity
LicenseMIT
Platformslinux, macos, windows
TagsCanvas, LMS, Education, Courses, Assignments

Reference: full SKILL.md

Explains the idea itself. Read it slowly; the later sections build on it.

Read-only access to Canvas LMS for listing courses and assignments.

Scripts

Explains the idea itself. Read it slowly; the later sections build on it.

  • scripts/canvas_api.py — Python CLI for Canvas API calls

Setup

Ordered, practical steps. Run one and confirm it worked before moving on.

  1. Log in to your Canvas instance in a browser
  2. Go to Account → Settings (click your profile icon, then Settings)
  3. Scroll to Approved Integrations and click + New Access Token
  4. Name the token (e.g., "Hermes Agent"), set an optional expiry, and click Generate Token
  5. Copy the token and add to ${HERMES_HOME:-~/.hermes}/.env:
Text2 lines
CANVAS_API_TOKEN=your_token_here
CANVAS_BASE_URL=https://yourschool.instructure.com

The base URL is whatever appears in your browser when you're logged into Canvas (no trailing slash).

Usage

Settings you configure once. Change one at a time so you can see what each does. Set HERMES_HOME in your environment, not in the chat.

Shell13 lines
CANVAS="python $HERMES_HOME/skills/productivity/canvas/scripts/canvas_api.py"

# List all active courses
$CANVAS list_courses --enrollment-state active

# List all courses (any state)
$CANVAS list_courses

# List assignments for a specific course
$CANVAS list_assignments 12345

# List assignments ordered by due date
$CANVAS list_assignments 12345 --order-by due_at

Output Format

Explains the idea itself. Read it slowly; the later sections build on it.

list_courses returns:

JSON1 line
[{"id": 12345, "name": "Intro to CS", "course_code": "CS101", "workflow_state": "available", "start_at": "...", "end_at": "..."}]

list_assignments returns:

JSON1 line
[{"id": 67890, "name": "Homework 1", "due_at": "2025-02-15T23:59:00Z", "points_possible": 100, "submission_types": ["online_upload"], "html_url": "...", "description": "...", "course_id": 12345}]

Note: Assignment descriptions are truncated to 500 characters. The html_url field links to the full assignment page in Canvas.

API Reference (curl)

Settings you configure once. Change one at a time so you can see what each does. Set CANVAS_API_TOKEN, CANVAS_BASE_URL in your environment, not in the chat.

Shell7 lines
# List courses
curl -s -H "Authorization: Bearer $CANVAS_API_TOKEN" \
  "$CANVAS_BASE_URL/api/v1/courses?enrollment_state=active&per_page=10"

# List assignments for a course
curl -s -H "Authorization: Bearer $CANVAS_API_TOKEN" \
  "$CANVAS_BASE_URL/api/v1/courses/COURSE_ID/assignments?per_page=10&order_by=due_at"

Canvas uses Link headers for pagination. The Python script handles pagination automatically.

Rules

Explains the idea itself. Read it slowly; the later sections build on it.

  • This skill is read-only — it only fetches data, never modifies courses or assignments
  • On first use, verify auth by running $CANVAS list_courses — if it fails with 401, guide the user through setup
  • Canvas rate-limits to ~700 requests per 10 minutes; check X-Rate-Limit-Remaining header if hitting limits

Troubleshooting

A troubleshooting section. Find the symptom that matches yours rather than reading it end to end.

ProblemFix
401 UnauthorizedToken invalid or expired — regenerate in Canvas Settings
403 ForbiddenToken lacks permission for this course
Empty course listTry --enrollment-state active or omit the flag to see all states
Wrong institutionVerify CANVAS_BASE_URL matches the URL in your browser
Timeout errorsCheck network connectivity to your Canvas instance