cmugpt-sms-surface
SMS/iMessage companion feature for the CMUGPT Agent. Students send iMessages via BlueBubbles, authenticate with their CMU Andrew ID, and chat with the CMU campus assistant for event notifications, schedule planning, reminders, and orientation-week help.
Local setup
- Install dependencies with
uv:
uv sync- Copy the example environment file and fill in your values:
cp .env.example .env- Run the service:
uv run python src/main.pyThe app starts on http://localhost:8000 by default.
Development commands
- Format:
uv run ruff format - Lint:
uv run ruff check - Typecheck:
uv run ty check - Tests:
uv run pytest
Architecture
sms-surface/├── src/│ ├── main.py # FastAPI app + webhook routes│ ├── config.py # Environment-based settings│ ├── sms_handler.py # BlueBubbles inbound/outbound iMessage logic│ ├── auth.py # CMU Keycloak integration│ ├── database.py # DB session + engine│ ├── agent_client.py # Boundary with CMUGPT agent (API or direct import)│ └── scheduler.py # Reminders + event notificationsPlanned integration with cmugpt-agent
- Mirrors
cmugpt-agent’s stack: Python 3.12, FastAPI,uv,ruff,ty. - Keeps all new code in this repo;
cmugpt-agent/is read-only context. - Talks to the agent through
src/agent_client.py, which can be wired to either the agent’s HTTP API or a direct Python import once that decision is finalized.
Open questions before implementation
- Should SMS call the agent API or import the agent package directly?
- What database for production? (SQLite for MVP, then Postgres?)
- What “basic student info” should be saved?
- How does the CMU Keycloak auth flow work?
- Where does orientation/week event data come from?
- Should reminders be proactive or reactive in the MVP?