Skip to content

v0.1.0 — initial release

Choose a tag to compare

@phsb5321 phsb5321 released this 08 Apr 15:04

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:

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.