Thanks for your interest. Canvas Pilot is a
Claude Code project: the behavior lives in
Markdown skill files under .claude/skills/, and the Python in src/ is
API-primitive glue (Canvas client, PDF tooling, verifiers). Most contributions
are either (a) framework Python / hook fixes or (b) skill-prose improvements.
By participating in this project you agree to abide by its Code of Conduct.
This repo ships under a strict public/private split.
- Never commit personal or school-identifying data. Course IDs, file IDs,
instructor names, school names, emails, cookies, JWTs, real drafts — none of
it. All of that lives in gitignored paths (
_private/,SECRETS.md,courses.yaml,.env,.cookies/,sources/,runs/). APreToolUsehook (.claude/hooks/check-public-leak.py) blocks commits that add known identity literals, but the hook is a backstop, not a license to be careless. git addalways names explicit paths. Nevergit add -A,git add ., orgit add -f. Verify withgit diff --cachedbefore committing.- Never edit
.gitignoreto remove a safety entry, even "just for testing". - No school-specific or instructor-specific solving logic in tracked files.
The tracked skills are generic frameworks; per-school behavior belongs in a
local
_private/canvas-<name>-app.mdoverlay that never leaves your machine.
git clone https://github.com/X-isdoingreat/Canvas_pilot.git
cd Canvas_pilot
python -m venv .venv
. .venv/bin/activate # Windows: .venv\Scripts\activate
pip install -r requirements.txt
python -m playwright install chromium # one-time, ~150 MBOpen the folder in Claude Code and say scan canvas to exercise the entry
flow. On a fresh checkout this dispatches canvas-setup (asks for your Canvas
URL, logs you in once).
.claude/skills/canvas-*/SKILL.md— the actual behavior. Prose instructions to Claude, organized as pipelines (stages), not monoliths..claude/hooks/*.py— deterministic guardrails (schema validation, approval gates, leak checks). These run inside Claude Code sessions.src/*.py— API primitives and verifiers. Pure-ish Python, unit-testable.scripts/*.py— cron-able helpers (reminders, autonomous submit) for Windows Task Scheduler //schedule.tests/— these are Codex-sidecar runners (run_*.py), not pytest suites. Run a relevant one directly, e.g.python tests/codex_runtime/run_all.py.
Run the runner for the area you touched:
python tests/codex_runtime/run_all.py # scan / execute / router / onboarding
python tests/codex_hooks/run_hook_tests.py # hooks- Keep PRs scoped to one concern.
- Describe what changes for the student ("the scanner now…"), not just the diff.
- If you touched a hook or the public/private boundary, say so explicitly and
confirm
check-public-leak.pystill blocks the bad cases. - By contributing, you agree your contribution is licensed under AGPL-3.0-or-later, the project license.
- General questions: open an issue, or reach the maintainer on X @X_isdoingreat.
- Security or accidental-leak reports: see SECURITY.md. Do not open a public issue for those.