<< All versions
Skill v1.0.0
currentLLM-judged scan90/100cosmic-hydra/accesstwin/canvas
──Details
PublishedOctober 22, 2026 at 05:24 AM
Content Hashsha256:e2335a4e635a018d...
Git SHAe26fc535e3f4
──Files
Files (1 file, 3.2 KB)
SKILL.md3.2 KBactive
SKILL.md · 99 lines · 3.2 KB
name: canvas description: Fetch Canvas LMS courses and assignments via API token. version: 1.0.0 author: community license: MIT platforms: [linux, macos, windows] prerequisites: env_vars: [CANVAS_API_TOKEN, CANVAS_BASE_URL] metadata: hermes: tags: [Canvas, LMS, Education, Courses, Assignments]
Canvas LMS — Course & Assignment Access
Read-only access to Canvas LMS for listing courses and assignments.
Scripts
scripts/canvas_api.py— Python CLI for Canvas API calls
Setup
- 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_hereCANVAS_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
bash
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
list_courses returns:
json
[{"id": 12345, "name": "Intro to CS", "course_code": "CS101", "workflow_state": "available", "start_at": "...", "end_at": "..."}]
list_assignments returns:
json
[{"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)
bash
# List coursescurl -s -H "Authorization: Bearer $CANVAS_API_TOKEN" \"$CANVAS_BASE_URL/api/v1/courses?enrollment_state=active&per_page=10"# List assignments for a coursecurl -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
- 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
| 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 |