canvas – Design & UI skill for AI agents
Fetch Canvas LMS courses and assignments via API token.
Install the canvas skill with one command
Pick the tool you use, copy the command and paste it in your terminal. The skill lands in that tool's skills folder and is ready in your next session.
Claude Code
mkdir -p ~/.claude/skills && curl -fsSL https://skill.dn1nguoi.com/z/canvas-c56c0.tgz | tar xz -C ~/.claude/skills
Call it in Claude Code: /canvas – then describe the task you want done.
Codex
mkdir -p ~/.codex/skills && curl -fsSL https://skill.dn1nguoi.com/z/canvas-c56c0.tgz | tar xz -C ~/.codex/skills
Call it in Codex: $canvas – then describe the task you want done.
Hermes Agent
mkdir -p ~/.hermes/skills && curl -fsSL https://skill.dn1nguoi.com/z/canvas-c56c0.tgz | tar xz -C ~/.hermes/skills
Call it in Hermes Agent: /canvas – then describe the task you want done.
DeepSeek
mkdir -p ~/.deepcode/skills && curl -fsSL https://skill.dn1nguoi.com/z/canvas-c56c0.tgz | tar xz -C ~/.deepcode/skills
Call it in DeepSeek: /canvas – then describe the task you want done.
SKILL.md content
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
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.comThe 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_atOutput 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 |
Related skills
- brand-guidelines – When the user wants to apply, document, or enforce brand guidelines for any product or…
- slack-gif-creator – Toolkit for creating animated GIFs optimized for Slack, with validators for size…
- android-jetpack-compose-expert – Expert guidance for building modern Android UIs with Jetpack Compose, covering state…
- android-ui-journey-testing – XML-specified Android UI journey testing, interactive step execution, assertion…
- android_ui_verification – Automated end-to-end UI testing and verification on an Android Emulator using ADB.
- theme-factory – Toolkit for styling artifacts with a theme. These artifacts can be slides, docs…
- claude-design – Design one-off HTML artifacts (landing, deck, prototype).
- performance-optimization – Optimizes application performance across frontend, backend, queries, and databases. Use…