cu25 and Reckon Review

cu25 is a CLI and MCP server for Cornell room reservations. Reckon Review is a GitHub App that checks reviewers' understanding of a pull request before it can merge.

Type
Member project
Timeline
Summer – Fall 2026
Status
Open source, in beta

cu25: booking rooms from the terminal

Cornell's 25Live event request form has conditional fields and requires two days' notice. Library study rooms use a separate booking system. cu25 provides a command-line tool for direct use and an MCP server for AI agents. It routes study-space and small-group requests to the library system and organization events to 25Live.

Agent with cu25Illustration
Can you get us a room for our club meeting next Thursday, 5 to 6pm? About 20 people.

That's an event for an organization, so it goes through 25Live. Three rooms are free for 20+:

cu25 rooms 2026-10-29 17:00 18:00 --people 20

  • Gates Hall G01 · seats 40
  • Phillips Hall 203 · seats 24
  • Upson Hall 116 · seats 30
Gates G01.

The form needs two answers before I can preview the request:

  • Will food be served at this event?
  • Will anyone under 18 attend?
Pizza, yes. No minors.

Since food will be served, who's providing it? Once you tell me, I'll show you the full request to approve before anything is sent.

cu25 submit request.json → preview, confirm code 3f9a1c0b2e

Illustration of an agent using cu25. The room, questions and reference are examples.

Hard-coding the room form would tie cu25 to one version of 25Live's questions and follow-up rules. Reading the form live lets cu25 return the current questions and options when information is missing.

Live form schema
cu25 reads the form's fields, questions, follow-up rules and date limits live from 25Live, which had 164 form rules at last count. If the form changes, cu25 notices and says so instead of submitting something wrong.
Missing answers
When an answer is missing, cu25 returns the question in the form's own words and options, so the agent asks you. It never invents an answer about food, guests or alcohol.
Preview, then confirm
Submitting without a confirmation code only shows you exactly what would be sent. The code is a fingerprint of that exact request, so the request that goes out is the one you approved.
No saved password
You log in once in your own browser with NetID and Duo. There's no server and no saved password. Requests stay Tentative until a real scheduler approves them.

Library spaces in Olin, Uris, Catherwood, Mann and Carpenter need no login. cu25 first lists the free spaces with each one's open times, then books one under your own name and Cornell email.

The tests replay real, sanitised responses from 25Live and the libraries to check that cu25 behaves exactly like the website. One test copies a past event, takes it through the check, preview and confirm steps, and checks that the request cu25 sends matches what the browser sent, field for field.

Reckon Review: explain what you merge

Reckon Review is a GitHub App that checks whether reviewers understand the code they merge, including changes written by AI. It identifies two to four important decisions in a pull request and blocks the merge until someone with write access explains how the change works in their own words, rather than restating the diff. A separate model grades the explanation. A passing answer unblocks the merge. If the explanation is incomplete, Reckon names the specific gap to address.

  1. 01

    PR opens

    written by a person or by AI

  2. 02

    Find the decisions

    2 to 4 that matter, using a map of how the change fits the codebase

  3. 03

    Explain

    a reviewer replies in their own words

  4. 04

    Graded

    a pass unblocks the merge. Otherwise Reckon names the one gap

Pull request #142 · Retry failed webhook deliveriesIllustration

Reckon comprehension · pending, merge blocked

Before merging, explain in your own words:

  1. how this change decides when to retry a failed delivery and when to stop
  2. how this change prevents the same webhook from being processed twice

reviewer

Failures go into a queue with exponential backoff, up to five tries, then they're marked dead and we alert.

Reckon

You've explained the retry timing. What prevents a second delivery from being processed if the first attempt succeeded?

reviewer

Each delivery carries its ID, and the handler skips any ID it has already recorded, so a retry of a success is a no-op.

Reckon comprehension · passed, merge unblocked

Illustration of Reckon on a pull request. The change and the replies are examples.

In the webhook illustration, explaining the retry schedule leaves duplicate delivery unanswered. Reckon's follow-up asks for the missing reasoning before it marks the check as passed.

Reckon skips changes that don't need an explanation. Docs, lockfiles and tiny diffs pass on their own, and so do changes that only touch styles, assets, tests or config. Changes to code that many other files depend on are graded more strictly. If you push a typo fix after passing and the decisions haven't changed, your pass carries over.

Reckon builds an in-memory dependency graph from the repository at the PR's head revision to identify changes to widely used code. The graph is discarded after a few seconds, and no source code is stored.

Code and feedback

Both tools are free, open source, and in beta. For feedback on either tool, open a GitHub issue or talk to us at a meeting.

Keep reading