canvas
Canvas LMS integration — fetch enrolled courses and assignments using API token authentication.
- License 许可
- MIT
- 所属仓库
- zapabob/Skills
- 最近更新
- 2026-10-26
- Stars
- ★ 2
- Forks
- 0
01 前言 Front Matter
- name
- canvas
- author
- community
- license
- MIT
- version
- 1.0.0
- metadata
- { "hermes": { "tags": [ "Canvas", "LMS", "Education", "Courses", "Assignments" ] } }
- platforms
- [ "linux", "macos", "windows" ]
- description
- Canvas LMS integration — fetch enrolled courses and assignments using API token authentication.
- prerequisites
- { "env_vars": [ "CANVAS_API_TOKEN", "CANVAS_BASE_URL" ] }
02 资源文件 13
- 参考文档architecture-decision-template.md337 B
- 资产文件data/domain-complexity.csv2.1 KB
- 资产文件data/project-types.csv758 B
- 参考文档steps/step-01-init.md6.4 KB
- 参考文档steps/step-01b-continue.md6.1 KB
- 参考文档steps/step-02-context.md8.4 KB
- 参考文档steps/step-03-starter.md11.7 KB
- 参考文档steps/step-04-decisions.md10.0 KB
- 参考文档steps/step-05-patterns.md10.7 KB
- 参考文档steps/step-06-structure.md10.9 KB
- 参考文档steps/step-07-validation.md11.4 KB
- 参考文档steps/step-08-complete.md3.1 KB
- 参考文档workflow.md1.5 KB
03 SKILL.md 正文
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/.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
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:
[{"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)
# 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-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 |
04 同仓库更多 Skills
xurl
X/Twitter via xurl CLI: post, search, DM, media, v2 API.
writing-plans
Write implementation plans: bite-sized tasks, paths, code.
whisper
OpenAI's general-purpose speech recognition model. Supports 99 languages, transcription, translation to English, and language identification. Six model sizes from tiny (39M params) to large (1550M params). Use for speech-to-text, podcast transcription, or multilingual audio processing. Best for robust, multilingual ASR.
weights-and-biases
W&B: log ML experiments, sweeps, model registry, dashboards.
watchers
Poll RSS, JSON APIs, and GitHub with watermark dedup.
serving-llms-vllm
vLLM: high-throughput LLM serving, OpenAI API, quantization.