Zachary Gray

Agents connected to my academic life, with my lectures, Blackboard, and deadlines in one repo my AI can read.

Fork it, then try the example
cp -r examples/cs-2123 classes/cs-2123

A made-up class with two lectures and two assignments.

  • Public templateStatus
  • 2026Started
  • Agents and toolsKind

What it is

The code is public, and you can run it yourself.

Your AI can't help you with school if it can't see your school. The course brain is one git repo that holds a semester of coursework as plain markdown: lecture transcripts, syllabi, assignment specs and due dates. Point an agent at it, and it already knows what your professor said on Tuesday and what's due this week.

Every lecture gets transcribed and filed through Granola. Every assignment and due date is mirrored from Harvey (what we call Blackboard at TU), and deadlines sync to Todoist. Anything ambiguous, like a due date moved out loud in lecture, comes to my phone for a one-tap decision instead of being applied on its own.

It isn't an agent. Nothing in it thinks. It's the knowledge base and the plumbing, and whatever agent you run does the reasoning. Claude Code, Codex and Hermes all work with it. My own copy stays private, and I published a cleaned-up template for other TU students in August 2026.

What it does

It keeps a copy of your semester current, so you don't have to.

  1. Harvey, mirrored

    A scheduled scan reads the gradebook and content tree through Blackboard's JSON API and files every graded item as a markdown file with its title, due date and link. When a professor moves a date, the file updates on the next run.

  2. Every lecture, filed

    Hit record in Granola when class starts. Thirty minutes after it ends, the transcript and a summary are filed under that class, one file per meeting.

  3. Logged in for you

    Login is scripted with Playwright, your password manager and TOTP, so a scheduled job can pull a spec unattended. The agent never sees your password.

  4. Tasks both ways

    Each assignment becomes a task with the full spec in it. Check the task off and the next run marks the file submitted.

  5. What Blackboard misses

    When a professor says "push that to Friday" in lecture, the conflict with the filed due date goes to a review file for your decision. Nothing changes until you say so.

On its own, and never

The line between what runs by itself and what waits for you.

On its own, on a schedule

  • Files new lectures and new graded items.
  • Rewrites a due date when Blackboard itself shows a different one, since Blackboard is the authority on its own deadlines.
  • Mirrors course files and spec text into each class's folder.
  • Creates, refreshes and closes tasks, then commits.

Never, by design

  • Changes a due date because someone said a date out loud.
  • Creates a task from a lecture transcript. Transcribed speech is too noisy for your to-do list.
  • Submits anything, or posts, emails or replies as you.
  • Guesses when two things could match.

Getting started

Fork it, make it private, add a class.

  1. Fork it

    And make your copy private. You'll be committing your own class content.

  2. Try the example

    cp -r examples/cs-2123 classes/cs-2123 gives you a made-up class with two lectures and two assignments to poke at.

  3. Add a real class

    Open the repo in your agent and say "add my class". The skill asks for the code, schedule, Blackboard link and folder, then sets it up.

  4. Wire up what you use

    Granola, Todoist and Blackboard are each optional. The repo works with whatever you connect.

  5. Schedule it

    python3 scripts/gen-schedule.py installs the jobs on a Mac. A laptop that sleeps is fine, since a missed run costs nothing.

The stack

Every piece is swappable. That's why it's markdown and scripts.

PieceI useSwap for
AgentClaude CodeCodex, Hermes, any agent CLI
LecturesGranolaWhisper, or any transcript
TasksTodoistReminders, TickTick, Notion, a markdown file
Logins1PasswordBitwarden CLI, pass, env vars
Phone pingsntfyPushover, a Telegram bot, nothing
Schedulelaunchdcron, systemd timers, Task Scheduler

Before you record a lecture, ask your professor. A transcript captures your classmates too, so treat the repo as their data as well. Keep your copy private.

Go run it

The repo has everything on this page, and the rest.