All projects

Case 03 / An AI study assistant for bCourses

OpenMind

An AI study assistant connected to Berkeley course materials, deadlines, and grades. Python computes the facts; the model explains them.

Role
Designer and maintainer
Status
Open sourceOpen source; MIT licensed
Period
2026 - present
Key decision
Let the model handle conversation while code computes dates, grade weights, study-hour estimates, and start-by times.
Evidence
12 read-only tools. 5 prompts. No write access. Runs on the student's laptop with their own bCourses token.
openmind / local

StudentWhat's due this week?

Course facts via OpenMind

Causal Inference / Midterm 1

Due
Thu, Sep 10 at 11:59 PM
Grade weight
30%
Study estimate
About 4 hours
Start by
Wednesday
12
read tools
5
prompts
0
write tools
Illustrative interaction adapted from the project README. Not a live student account.

A wrong deadline is worse than an unhelpful answer.

Students can ask an AI assistant to explain a course document, but course state lives elsewhere: deadlines, assignment groups, grades, and files sit in bCourses.

Connecting those systems creates a sharper risk than ordinary chat. A due date off by a day or an invented grade weight is actionable misinformation, and a broad Canvas client could change course state.

Course facts in code. Conversation in the client.

OpenMind runs on the student's laptop with their own bCourses token. Fixed Canvas routes fetch only selected courses. Python turns raw course state into labelled facts, then MCP makes those facts available to Claude, Cursor, or ChatGPT for conversation and synthesis.

System map / OpenMind
OpenMind local, read-only boundaryAn AI client and OpenMind run on the student laptop. OpenMind exposes twelve read-only tools, fetches only fixed bCourses and public schedule routes, and computes dates, weights, and planning facts in Python. Course data shown to the AI client is still governed by the external model provider.Student laptopthe AI model is not localAI clientClaude, Cursor, ChatGPTLocal MCP serverOpenMind12 read-only toolsPython computes factsbCoursesfixed read routesClass schedulepublic offering dataExternal boundaryModel providersees facts used in an answer
  1. 01Selected bCoursesFixed read-only routes
  2. 02Python toolsDates, weights, priorities
  3. 03Local MCP server12 tools, 5 prompts
  4. 04AI clientConversation and synthesis
  5. 05StudentReviews cited course facts
Local connector does not mean local model: the diagram keeps that provider boundary explicit.

The trade-offs.

01

The model talks; the code computes

Instead of
Pass raw assignments to the model and let it infer urgency, grade weight, and a study plan.
Choice
Compute dates, weights, estimated hours, and start-by times in Python before the model sees labelled facts.
Why it holds
Correctness is explicit for calendaring and arithmetic; the model is more useful at explanation and conversation.
Cost
The connector carries more domain logic and must maintain those rules as Canvas data changes.
02

Enforce read-only access in code

Instead of
Expose a general Canvas client that could submit work, post replies, or send messages.
Choice
Allow a fixed list of read routes, selected courses, self-only grades, and no arbitrary URL fetch.
Why it holds
A study assistant can be useful without acquiring the authority to act as the student.
Cost
Workflows stop at advice; the student must make every external change themselves.
03

Keep the connector local

Instead of
Run a hosted service with accounts, stored tokens, and centralized telemetry.
Choice
Use the student's own token on their machine, with no OpenMind server, account, or telemetry.
Why it holds
The connector does not need to become another custodian of course credentials and activity data.
Cost
Each student installs and configures the tool, and course data still reaches the AI provider when that provider answers.

Twelve tools, with a reviewable read boundary.

Built

  • Twelve read-only tools and five prompts exposed through a local MCP server.
  • Deterministic deadline, timezone, grade-weight, effort, and start-by calculations.
  • Course-document indexing for cited tutoring and retrieval practice, limited to courses the student explicitly enables.
  • Setup, diagnostics, data refresh, and clear commands for macOS, Windows, and Linux.
  • CI, security and privacy documentation, and an MIT-licensed Python package.

Evaluation

  • Deterministic outputs can be tested without asking a model to reproduce the same wording.
  • The read boundary is expressed as a fixed route list and missing write tools, so capability review is a code question rather than a prompt-policy question.

Supported result

  • The current connector works with Claude Desktop, Claude Code, Cursor, and the ChatGPT desktop app.
  • It keeps deadlines and grades out of local storage; indexed course documents exist only for courses the student selects and can be cleared.

What this does not solve.

Current limitations

  • The AI client is not local. Course content sent for an answer is governed by that provider's privacy policy.
  • OpenMind is an independent student project and is not affiliated with or endorsed by UC Berkeley.
  • Read-only scope is deliberate: it cannot submit work, post, message, upload, or change a grade.

Next improvements

  • Keep the supported client setup paths current as desktop MCP configuration changes.
  • Expand deterministic test fixtures around timezone edges and unusual assignment-group rules.
  • Make data-flow and provider disclosure unavoidable during setup, not only available in documentation.