Use it when your goal in design and media is clear and you can limit it to the data and actions it actually needs.
Canvas
Fetch Canvas LMS courses and assignments via API token
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.
Do not add it merely to experiment when Hermes already has a simpler path, or when you cannot review its source and permissions.
Best for users who want a repeatable way of working inside Hermes.
Start with a disposable asset and create a copy instead of changing the original.
Fetch Canvas LMS courses and assignments via API token
This entry was indexed from Hermes Optional Skills. Our explanation interprets the type and domain without inventing a capability not present upstream.
The source is official or editorially reviewed, but you still need to review permissions and version compatibility.
Inspect, install, then test.
- 01Open the source
Match the publisher, license, and description to your need. Check the real update history.
- 02Review permissions and secrets
Never paste a secret value into this site. Use environment-variable names and grant the smallest scope.
- 03Copy setup only after review
The controls below copy text. They do not execute commands on your device.
- 04Test with a non-sensitive task
Inspect the visible tools, then exclude write or delete tools you do not need.
Review the command, then copy it.
hermes skills install canvasHermes Belarabi does not execute this command. Installation happens on your device and remains subject to Hermes scanning and your review.
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.
| Source | Optional — install with hermes skills install official/productivity/canvas |
| Path | optional-skills/productivity/canvas |
| Version | 1.0.0 |
| Author | community |
| License | MIT |
| Platforms | linux, macos, windows |
| Tags | Canvas, 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.
- Log in to your Canvas instance in a browser
- Go to Account → Settings (click your profile icon, then Settings)
- Scroll to Approved Integrations and click + New Access Token
- Name the token (e.g., "Hermes Agent"), set an optional expiry, and click Generate Token
- Copy the token and add to
${HERMES_HOME:-~/.hermes}/.env:
CANVAS_API_TOKEN=your_token_here
CANVAS_BASE_URL=https://yourschool.instructure.comThe 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.
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_atOutput Format
Explains the idea itself. Read it slowly; the later sections build on it.
list_courses returns:
[{"id": 12345, "name": "Intro to CS", "course_code": "CS101", "workflow_state": "available", "start_at": "...", "end_at": "..."}]list_assignments returns:
[{"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.
# 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-Remainingheader if hitting limits
Troubleshooting
A troubleshooting section. Find the symptom that matches yours rather than reading it end to end.
| Problem | Fix |
|---|---|
| 401 Unauthorized | Token invalid or expired — regenerate in Canvas Settings |
| 403 Forbidden | Token lacks permission for this course |
| Empty course list | Try --enrollment-state active or omit the flag to see all states |
| Wrong institution | Verify CANVAS_BASE_URL matches the URL in your browser |
| Timeout errors | Check network connectivity to your Canvas instance |