一句话哲学:Canvas 网页能干的事,AI 都能更快帮你干。
一个面向 AI agent 的 Canvas LMS atomic CLI。任何 AI 都能用——Claude Code / Codex / Cursor / Gemini CLI / Aider …,只要它能跑 bash 就行。
默认配 SJTU Canvas(oc.sjtu.edu.cn),但任何 Canvas 实例(UMich / Harvard / Berkeley / 国内外用 Instructure Canvas 的高校)只要改 base_url 都能用。
用 Claude Code / Codex / Cursor / Gemini CLI 都行——把整段(含开头到
--- end ---)粘给它即可。
请帮我安装 canvas-cli-skill:
1. git clone https://github.com/treerobin06/canvas-cli-skill ~/canvas-cli-skill
2. 把 README 和 docs/get-token.zh.md 读一遍,告诉我怎么去 Canvas 申请 token(按那 4 步截图教程)
3. 等我把 token 给你之后,你写到 ~/canvas-cli-skill/config.json 并 chmod 600
- SJTU 学生 base_url 用 https://oc.sjtu.edu.cn(默认值就是)
- 其他学校把 base_url 换成自己学校的 Canvas 域名
4. 跑 bash ~/canvas-cli-skill/tests/smoke.sh,告诉我是否通过
5. 通过后把 SKILL.md 当作"决策地图"——以后我说"看作业"/"提交zip"/"看公告"等,
你按 SKILL.md 的子命令表选合适的 canvas-cli.sh 子命令即可
--- end ---
按这段提示,AI 5 分钟内能让你在自然语言里使用 Canvas("这周要交什么?" / "把 hw3 交了")。
| 你说 | 它做 |
|---|---|
| "这周要交什么作业" | list-upcoming --days 7 跨课程合并 |
| "我有几门课没交的" | list-todo 服务器侧筛选 |
| "下载机器学习理论 HW4 的附件" | find-course → find-assignment → download-attachments |
| "把 zip 交了" | submit <cid> <aid> <zip>(三步上传协议秒级提交) |
| "我交了吗 / 几号交的 / 第几次 attempt" | submission-status |
| "老师改了 ddl 没" | list-announcements 跨 9 门课聚合 |
| "总评估算" | list-grades 跨课程 + 单课明细 |
| "课程 syllabus 里写了什么" | show-syllabus <cid> |
完整子命令表见 SKILL.md。
| 场景 | Canvas 网页 | canvas-cli-skill |
|---|---|---|
| "这周要交什么" | 进 9 门课,每门点开作业页面,自己合并 | 一行 list-upcoming |
| "下 HW4 + 提交 zip + 验证" | 点 7 次 + 上传 + 等加载 | 三行命令 |
| "找 'midterm project' 是哪门课的" | 翻 9 门课的作业列表 | find-assignment "midterm" |
| "总评" | 进 9 门课各看一次"评分"页 | 一行 list-grades |
| "把这一学期所有作业 ddl 同步到 macOS 日历" | 不可能 | list-calendar --json + 转 ICS |
LLM 拿到原始 JSON 之后还能:跨课程聚合、按 ddl 排序、识别 high-signal 公告(如 "ddl 改" / "考试新增")、生成 todo 清单等。
git clone https://github.com/treerobin06/canvas-cli-skill
cd canvas-cli-skill
# 1. 拿 Canvas API token,4 步截图教程:
# docs/get-token.zh.md
# or: docs/get-token.en.md
# 2. 配 token + base_url
cp config.example.json config.json
# 编辑 config.json,把 token 字段填上
chmod 600 config.json
# 3. 验证
bash scripts/canvas-cli.sh whoami
bash tests/smoke.sh依赖:bash / curl / python3(macOS / Linux 自带)。零外部 pip 包。
完整图文:docs/get-token.zh.md / docs/get-token.en.md
简单版:
- 进 https://oc.sjtu.edu.cn/profile/settings(其他学校换域名)
- 找到 "已批准的集成" / "Approved Integrations" 段
- 点 "+ 创建新访问许可证" / "+ New Access Token"
- 用途随便填(如
canvas-cli),过期留空,点生成令牌 - 复制弹出的 token 字符串
| Agent | 装到这里就能 auto-discover |
|---|---|
| Claude Code | ~/.claude/skills/canvas-cli-skill/ 或者作为 plugin |
| Codex CLI | ~/.codex/skills/canvas-cli-skill/ |
| Cursor / Gemini CLI | 看各自的 skill / extension 加载方式;通用做法是 git clone 后给 AI 路径 |
不用 skill 系统也行——直接把 scripts/canvas-cli.sh 加到 $PATH 当普通 CLI 用。
两层分离:
- 本仓库(atomic IO 层):每个子命令 = 一个 Canvas API endpoint,不带任何用户偏好
- 上层编排(personal layer):你自己定义"作业要怎么做" / "命名约定" / "提交前要不要 review"——那应该是另一个 skill / 一段 prompt
我自己有一个私人的 canvas-todo-agent 编排层(饱和式完成 / 不打断 / AutoDL 触发等),那是个人偏好不开源。本仓库就是底下那个干净的 atomic IO 层,给所有人用。
- 基于 Canvas LMS REST API
- 灵感部分来自 openclaw-sjtu 的 Canvas 部分(但本仓库 atomic 粒度更细 + 默认
--json友好 + 含find-course/find-assignment模糊搜)
MIT — see LICENSE.
由 Tree (Bowen Jiang) 维护。Issues 和 PR 欢迎。