v0.1.0 — initial release
First public release of claude-classroom-submit — autonomous Google Classroom submission plugin for Claude Code.
What it does
Bypasses the cross-origin Drive Picker iframe that makes browser automation of Google Classroom impossible, by speaking the Classroom REST API directly. Upload a local file to your Drive via rclone, find the target assignment by natural-language query, attach the Drive file, and turn in — all in a single CLI call.
Highlights
- Pure Python stdlib — no `google-auth`, no `requests`, no `google-api-python-client`. ~900 lines of `urllib` / `http.server` / `json` / `subprocess`.
- OAuth 2.0 Installed App flow with loopback redirect on `localhost:8765`, automatic access-token refresh on 401.
- Minimal scopes — only `classroom.courses.readonly` + `classroom.coursework.me`. No grades, no other students' data.
- Atomic submit — `modifyAttachments` + `turnIn` in one call, with a hard check for `TURNED_IN` state to prevent double-submissions.
- Rclone-first upload — prefers local FUSE mount (instant `cp`), falls back to `rclone copy`, polls `rclone lsjson --original` for the Drive file ID.
- Natural-language search — `find "Airbnb"` walks every active course and matches title/description substrings.
- Claude Code plugin — three slash commands (`/classroom-auth`, `/classroom-find`, `/classroom-submit`), skill auto-triggers on Classroom submission intents.
- Nix flake — `nix run github:yolo-labz/claude-classroom-submit -- courses`, full nix-darwin / home-manager integration docs.
- shellcheck + shfmt clean, sandboxed `nix flake check` runs the full lint suite.
Installation
Full walkthroughs in:
- `README.md` — general install + usage
- `docs/google-cloud-setup.md` — one-time Google Cloud OAuth client setup (~5 min)
- `docs/nixos-integration.md` — nix-darwin / home-manager / plain NixOS
Quick start without installing
```bash
nix run github:yolo-labz/claude-classroom-submit#setup-wizard
```
This opens the required Google Cloud Console pages, auto-detects the downloaded credentials JSON in `/Downloads`, installs it to `/.config/claude-classroom-submit/credentials.json`, and runs the OAuth consent flow.
After setup:
```bash
nix run github:yolo-labz/claude-classroom-submit -- find "Airbnb" --terse
nix run github:yolo-labz/claude-classroom-submit -- submit-file ~/file.pdf --query "Airbnb"
```
Related
- Sibling plugin: claude-mac-chrome — deterministic multi-profile Chrome automation for Claude Code. Designed to be used together: chrome-mac-chrome drives the browser, claude-classroom-submit finalizes the submission.