SMS interface for CMU GPT
- Python 100%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
- Switch inbound SMS webhook to BlueBubbles JSON message webhook - Add BlueBubbles REST API client for sending replies - Update config, env example, README, and tests for BlueBubbles - Remove Twilio and python-multipart dependencies |
||
| src | ||
| tests | ||
| .env.example | ||
| .gitignore | ||
| pyproject.toml | ||
| README.md | ||
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.py
The 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 notifications
Planned 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?