Universal Canvas LMS CLI
Built from client requests originating in OpenClaw. A universal command-line client for Canvas LMS, written in Go. Works against any Canvas instance — Instructure-hosted or self-hosted — using a personal API token. 20+ commands across courses, assignments, grades, submissions, modules, discussions, files, and calendar.
Canvas's web UI is the only first-class surface for most students and instructors. That's fine until you want to check grades from a terminal, batch-download course files, script your weekly to-do, or pipe submission data into something else. The official REST API exists, but writing curl invocations by hand is friction nobody wants in their day.
A small, focused Go binary that wraps the Canvas REST API behind ergonomic subcommands. Authentication is a single API access token, configured once with `canvas-cli configure` and stored at `~/.canvas-cli/config.json` with `0600` permissions. Every command takes `--json` so output composes with `jq`, `xargs`, or any pipeline. No external Go dependencies — only the standard library.
- 01Token-only authNo SAML dance, no browser handshake. Paste your token once and the CLI is ready. Generate it from Account → Settings → New Access Token in any Canvas UI.
- 02UniversalWorks against any Canvas LMS instance — university, K-12, or self-hosted — because it speaks the public REST API and nothing else.
- 03ComposableEvery command supports `--json` and `--per-page`. Output flows naturally into `jq`, `xargs`, or whatever automation you already trust.
- 04Zero external depsPure Go standard library. Distributed as a single static binary — no runtime to install, no virtualenv to remember.
- 0520+ commandscourses, assignments, grades, submissions, submit (text or URL), todo, upcoming, missing, calendar, modules, discussions (with --reply), announcements, files, download, notifications.
- 06Built for daily useColor-coded output, human-readable tables, sensible defaults. `canvas-cli todo` and `canvas-cli grades` are the commands you'll actually run every morning.
