OptionalProductivityVersion 1.0.0

Canvas LMS Course & Assignment Access with Hermes Agent

Fetch Canvas LMS courses and assignments via API token.

Written by Neura Market from the official Hermes Agent documentation for Canvas. Commands, paths, and version numbers are reproduced from the source unchanged.

Read the official documentation

This skill lets you fetch course and assignment data from Canvas LMS using an API token. It is useful for educators, students, or automation builders who want to pull Canvas data into scripts, dashboards, or AI agent workflows without manual browser checks.

What it does

The skill provides a Python CLI that talks to the Canvas API. You can list all courses you are enrolled in (filtered by enrollment state) and list assignments for a specific course, optionally ordered by due date. It is read-only: you can view data but never create, update, or delete anything in Canvas.

Before you start

You need a Canvas account with permission to generate API tokens. The skill runs on Linux, macOS, and Windows. You must have Python available on your system. The skill is optional and installed on demand into the optional-skills/productivity/canvas path under your Hermes home directory.

Generate a Canvas API token

  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:
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

Set a shell variable to keep commands short, then run the Python script:

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

Replace 12345 with the actual course ID from the list_courses output.

Output Format

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)

If you prefer to call the Canvas API directly, use these curl commands:

# 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

  • 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

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

When not to use it

This skill is read-only. If you need to create, update, or delete courses or assignments, you will need a different tool or a direct Canvas API integration with write permissions.

Limits and gotchas

  • Assignment descriptions are truncated to 500 characters. For the full description, follow the html_url link.
  • The Canvas API rate limit is about 700 requests per 10 minutes. If you hit it, wait before making more calls.
  • The Python script handles pagination automatically, but the curl examples only fetch the first page. You would need to follow Link headers manually for full results.

What pairs with this

This skill is part of the Productivity category in Hermes Agent. It works well alongside other optional skills that process or display data, such as those for scheduling, note-taking, or reporting. For more skills, see the Hermes Agent documentation.

More Productivity skills