Nice Schedule For groups

A free walkthrough

Build a fair call schedule in minutes, using an AI agent that doesn’t hallucinate.

Copy this into your agent
The prompt
I want to set up a call schedule using https://niceschedule.com/how-to-make-a-schedule-with-ai/.

Please clone https://github.com/rumblelab/ai-call-scheduler into this folder, read AGENTS.md first, and follow its instructions.

Don't ask me anything until you've read it.

Or skip the DIY. Contact Nice Schedule and we’ll build the scheduling agent on your rules and run it for your group.

Demo

See an AI agent build a fair call schedule, end to end.

Demo video
Coming soon

Why this page exists

A senior resident asked Reddit. The top reply said no AI could do it.

They were half right. ChatGPT alone won’t build you a fair call schedule. It’ll happily invent one that looks fine, double-book a post-call doc, and quietly skip a vacation request. But an AI coding agent, pointed at a small open-source scheduler, will do it deterministically and in seconds. That’s the gap this page closes.

A senior resident asking r/Residency how they make their call schedules. Title: For all the senior/chief residents, how do you make the call schedules at your program? 28 upvotes, 13 comments.
The question. r/Residency, 3 months ago.
A reply on the post saying: As someone who did this, there is no replacement for just fucking getting shit done on Excel. No AI is going to do a better job. 60 upvotes.
The top reply on that thread. 60 upvotes, more than the original post.

I built the free walkthrough for the senior resident, the chief, the fellow, the one partner in the group, the person who got handed the spreadsheet and is now spending every other weekend trying to make it fair. If that’s you, paste the prompt above into your agent. If you know someone like that, send them this page.

What your agent will produce

A printable schedule that respects every rule.

Below is what comes out of the sample run, laid out as a real call calendar. Two weeks. Six clinicians. One OR shift and one OB shift per day. Every hard rule respected. Your agent runs this exact sample first, so you can see the mechanics work before swapping in your own group.

Sample schedule, June 1–14, 2026
Clinician
Mon 1
Tue 2
Wed 3
Thu 4
Fri 5
Sat 6
Sun 7
Mon 8
Tue 9
Wed 10
Thu 11
Fri 12
Sat 13
Sun 14
M. Cary
·
OB
·
OR
VAC
VAC
VAC
OR
·
·
·
·
OR
·
A. Fox
·
OR
·
·
·
OB
·
·
OR
·
OR
·
·
OR
R. Aken
·
·
OR
·
·
OR
·
·
·
OR
·
OR
·
·
C. Johns
·
·
OB
·
OB
·
·
OB
·
·
OB
·
·
OB
J. Judy
OR
·
·
·
OR
·
OR
·
·
OB
·
·
OB
·
S. Reed
OB
VAC
·
OB
·
·
OB
·
OB
·
·
OB
·
·

A few things worth noticing, because they prove the rules were respected, not invented around:

  • Cary’s vacation June 5–7 is honored. Zero assignments those days. Want to add a pre-call buffer? Just one prompt away.
  • Reed’s hard block on June 2 is honored, even though Reed covers five other shifts in the window.
  • Johns asked off OB on June 10 only (one shift type, not the whole day). The schedule honored that without blocking other shift types. That distinction matters in real groups.
  • Weekend calls are spread across the group. Nobody is “the one who always covers.”

What your agent will need from you

Four things. You don’t type any of them into a spreadsheet. Unless you want to.

Your agent does the formatting. You paste what you already have, in whatever shape you have it.

Your roster

Names of the people on call, and what each person can cover. A bulleted list works. A screenshot of the roster from QGenda works too.

Your coverage pattern

Which shifts run on which days. “One OB every day, one OR every weekend day, two OR on weekdays” is enough.

Time-off requests

Vacation, no-call, and soft preferences. Paste a screenshot of the request list inside Sheets, QGenda or wherever the data lives. Don’t retype them.

Recent history

Last month or two of who covered what, so the new schedule stays fair against what just happened. Or tell the agent you’re starting fresh.

The agent will ask for these one at a time, in plain English. It won’t give you a form to fill out, and it won’t show you any code. If it does, something’s off, tell it to re-read AGENTS.md.

Why this works (and ChatGPT alone doesn’t)

Plausible answers vs. checked answers.

Once upon a time, if you asked an LLM how many r’s were in strawberry, it would confidently tell you two. A one-line Python program would just count the letters and return three. That’s the difference between a plausible answer and a checked answer.

Your call schedule needs the checked answer. A language model predicts the most likely next token, which is genuinely great for translating messy human rules into something more precise. It’s the wrong tool to be the schedule. It will produce a calendar that looks reasonable and quietly skip a vacation, double-book a post-call physician, or leave a weekend uncovered.

A real scheduler works differently. You hand it the people, the shifts, and the rules. It searches for assignments that satisfy every rule. If the rules conflict, it tells you the schedule is impossible instead of inventing one.

The right pattern: use AI to translate your rules. Use a real scheduler to make the schedule.

The scheduler under the hood is Google’s OR-Tools, the open-source engine they use for routing and logistics. It’s deterministic, it doesn’t hallucinate, and it’s free. Your AI agent’s only job is to translate your group’s rules into the scheduler’s inputs and read the results back to you.

Which AI

Use Claude Code or Codex, not a chat window.

This walkthrough is built around an AI agent that runs on your laptop and can read files, run programs, and open the schedule for you to look at. Two options, both free to try:

A chat window like ChatGPT or Claude.ai can’t do this. It can’t read your roster files, can’t run the scheduler, and can’t open the output. It’ll guess at what your inputs look like and make confident things up. The whole point of pointing an agent at the open-source project is that the agent can actually do the work and check itself, instead of guessing.

Both tools install in a couple of minutes and ask for permission before they do anything on your machine. Pick one, install it, then come back here and copy the prompt at the top of this page.

Privacy

The schedule never leaves your laptop.

Even without patient information, physician schedules, vacation requests, and internal group rules can still be sensitive. Three things to know:

  • The scheduler runs on your machine. The schedule itself is computed locally and never uploaded.
  • Your AI assistant still sees the conversation you have with it. Pick a tool that doesn’t train on your inputs, both Claude Code and Codex have settings or default behavior for this. Check before you paste real names.
  • A local-folder agent is safer than a chat window because the agent can read your files without you copy-pasting your group’s roster into a public tool.

If you’d rather not paste real names into any AI tool at all, use initials or made-up IDs for the first run. The schedule comes out the same shape either way.

Where this stops being enough

This is great until the rules get real.

The basic pattern is not magic. The hard part is making it work for a real group, month after month: cleaning a steady stream of requests, importing historical fairness across months, modeling local exceptions, fixing infeasible months without burning a Saturday, post-call recovery, locked assignments, holiday rotation, secure access, schedule distribution, and the maintenance work nobody wants to own.

That’s roughly the moment a DIY script stops being enough. A real schedule needs a place where requests live, where history is tracked across months, where people can be added or removed without breaking previous solves, and where the schedule can be safely shared with the group after it’s reviewed.

If that’s the wall you’ve hit, see how Nice Schedule handles it for real groups, or jump to the cards below.

Built your first schedule with this? I’d genuinely love to hear how it went. moultrie@niceschedule.com. No mailing list, no follow-up sequence, just curious.

One last thing

Three ways this is useful to someone right now.

Share it with the resident who’s stuck.

Every program has one. Senior or chief who got handed the spreadsheet, lost the weekend, and is going to be the hero who shows up Monday with a working schedule. Every time they use this, they’ll remember the friend who sent it.

Want a web version?

If you’d rather not run anything locally, a hosted version with the same scheduler, a clean form for requests, and a one-click “build my schedule” button, email me and tell me what your group needs. If enough people want it, I’ll build it next.

Email me about the web version

Your group is past DIY?

If you’re running call for a real anesthesia group and don’t want your schedule depending on a script someone vibe-coded, send us your current spreadsheet and the rules in your head. That’s how we onboard.

See Nice Schedule for groups