A maintainable, team-ready Canvas LMS productivity client with a Textual TUI frontend, Chrome extension, Python SDK, and a fine-tuned calendar agent — with a documented shared-core architecture.
Canvas Tracker — the fastest path from Canvas API token to a local calendar agent, polished TUI, and contribution-ready dataset pipeline.
| Deploy | Link |
|---|---|
| PyPI (SDK) | |
| Codespaces | |
| HF Space | |
| Docker |
See Quick Start · Examples · Public Roadmap
| Surface | Channel | Status |
|---|---|---|
| canvas-sdk (Python) | PyPI | live — v1.2.3 on PyPI |
| canvas-tui (Python) | PyPI | not yet published — pyproject.toml v2.0.0; tracked in #177 |
| canvas-tui (Docker) | ghcr.io/kleinpanic/canvas-tui |
live — built nightly + on tag (#140) |
| Chrome extension | Chrome Web Store | listing in progress — install via Load unpacked for now |
| HF Space demo | Live | live — auto-deploys on push to main |
| HF Model | v7-DPO | live |
canvas-sdk v1.2.3 live on PyPI (API token). OIDC trusted publisher not yet registered at pypi.org. Chrome Web Store listing in progress — install via
Load unpackedfor now.
- Clone or download this repo.
- In Chrome, open
chrome://extensions/and enable Developer mode. - Click Load unpacked and select the
extension/directory. - Pin the extension, open a Canvas page, and click the icon.
pip install canvas-sdk[autodownload] # fetches the v7-dpo Gemma4 model from HF on first run
pip install canvas-sdk[gemini] # optional Gemini fallback
pip install canvas-sdk[all] # bothNote: PyPI publishes v1.2.3. The v2.0.0 local source (with the updated agent architecture) can be installed with
pip install -e src/sdk/.
import os
from canvas_sdk import CanvasAgent
os.environ["CANVAS_TOKEN"] = "..." # your Canvas API token
os.environ["CANVAS_BASE_URL"] = "https://canvas.vt.edu"
agent = CanvasAgent.auto() # auto-resolves: env -> local -> HF -> Gemini
print(agent.run("What is due this week?"))CanvasAgent.auto() resolution order:
CANVAS_LLM_ENDPOINTenv (skip auto-download, use your own server)- Local cache at
~/.cache/canvas-agent/v7-dpo/(spawns vLLM on:8765) - Download
kleinpanic93/canvas-calendar-agent-v7-dpofrom HF, then (2) - Fall back to Gemini (
gemini-2.5-flashby default)
export CANVAS_TOKEN="your_canvas_token_here"
export CANVAS_BASE_URL="https://canvas.yourschool.edu" # required — no default; tool exits with error if unset
pipx install . # recommended
# or: pip install .
canvas-tuiTry the fine-tuned Canvas Calendar Agent in your browser — no install required, no tokens needed:
- Agent demo (mock Canvas data, hosted DPO model): https://kleinpanic.github.io/CS3704-Canvas-Project/agent-demo/
- HF Space (full model, mock tools): https://huggingface.co/spaces/kleinpanic93/canvas-calendar-agent-demo
- HF Collection (v3.0 method matrix): https://huggingface.co/collections/kleinpanic93/canvas-calendar-agent-v30-69fa6462f697e0342b21dfe0
Browser -> Cloudflare Worker -> HF Space (ZeroGPU)
^ ^
| |
| HF_TOKEN held as | Gemma4 v7-dpo behind
| Cloudflare secret | gradio 5 ChatInterface +
| (never reaches the | 18 mock tool dispatchers
| browser) |
The HF token is stored as a Cloudflare Worker secret. Public clients only
see the proxy URL (cs3704-demo-proxy.kleinpanic.workers.dev); they never
receive any credential. See proxy/README.md for the
deploy procedure and proxy/iframe-fallback.html
for a zero-infra alternative that embeds the Space directly.
Token policy: the SDK reads
CANVAS_TOKENandGOOGLE_API_KEYfrom your local environment. Tokens never enter the published browser demo, the GH Pages site, or any committed file. The Cloudflare Worker proxy is the only place an HF token is held, and it sits server-side as a Cloudflare secret. If you fork this project and host your own demo, follow the same pattern — seeproxy/README.md.
- Docs site — live project docs
- Agent demo — chat with the Canvas Calendar Agent in your browser
- Roadmap — planned milestones and feature backlog
- HF Space — full v7-dpo model behind a Gradio chat UI
- How it Works — DPO methodology, 9-method ablation matrix, G1–G13 guardrails, bench harness
- PyPI: canvas-sdk —
pip install canvas-sdk - Architecture docs — system design decisions
- Browser extension docs — shared client/runtime architecture
- Contributing — contribution guidelines and developer setup
- Maintainers — maintainer responsibilities
- Security policy — security procedures
For team workflow, branch naming, repo structure, and dev setup, see CONTRIBUTING.md.
Made with contrib.rocks.
GPL-3.0-or-later. See LICENSE.
