An unnecessarily sophisticated AI system for tiny life decisions.
Submit a small decision you're overthinking (e.g., "Should I buy bubble tea tonight?") and watch a multi-agent AI system over-analyse it from every angle before delivering a funny but actionable verdict.
A personal portfolio project demonstrating advanced agentic architecture — LangGraph orchestration, multi-agent workflows, MCP tool integration, streaming trace UI, per-agent token/cost tracking, schema-enforced JSON outputs, persistent memory, and observability — all wrapped in a silly, memorable product.
Streamlit UI
↓
Decision Submission
↓
LangGraph Workflow
├── Planner Agent (classifies decision, routes agents & tools)
├── Memory MCP (retrieves similar past decisions)
├── Calendar MCP (read-only Google Calendar density check)
├── Weather MCP (Open-Meteo friction assessment)
├── Emotional Agent
├── Social Battery Agent
├── Willingness-to-Spend Agent
├── Future Regret Agent
├── Existential Agent
├── Practical Adult Agent
├── Debate Agent (synthesis)
├── Reflection Agent (self-critique)
├── Verdict Agent (final answer)
└── SQLite Memory Store
| Component | Tech |
|---|---|
| UI | Streamlit |
| Orchestration | LangGraph |
| LLM Framework | LangChain |
| MCP Integration | mcp Python SDK + langchain-mcp-adapters |
| Database | SQLite via SQLAlchemy |
| Validation | Pydantic |
| Observability | Token counting, per-agent cost, streaming trace UI |
| Testing | pytest |
| LLM Providers | OpenAI, Anthropic, Ollama, Datasaur |
| Observability | Token counting, per-agent cost, streaming trace UI |
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt./run.shOn first run, run.sh automatically bootstraps .env from .env.example (if missing) and exits — edit .env with your API keys, then re-run.
| Command | Behaviour |
|---|---|
./run.sh or ./run.sh all |
Start 3 MCP servers (ports 8001–8003) + Streamlit UI. Ctrl+C stops everything. |
./run.sh be |
Start MCP servers only. |
./run.sh fe |
Start Streamlit frontend only. |
./run.sh stop |
Kill all running MCP servers. |
Set LLM_PROVIDER in .env to one of: openai, anthropic, ollama, datasaur. Each provider needs the corresponding API keys configured in .env.
The LLM provider can also be switched at runtime via the sidebar selector in the Streamlit UI — the setting flows through the LangGraph state so every agent uses the same provider.
- Go to Google Cloud Console
- Create a project and enable the Google Calendar API
- Create OAuth 2.0 credentials (Desktop application)
- Download credentials JSON to
credentials/google_calendar_credentials.json - On first use, a browser OAuth flow will save a token to
credentials/google_calendar_token.json
Calendar access is read-only (calendar.readonly scope). No events are ever created, edited, or deleted.
pytest46 unit tests covering input validation, output schemas, LLM provider switching, JSON extraction, repository CRUD, and tool helpers.
.
├── run.sh # Unified launcher (MCP servers + Streamlit)
├── app.py # Streamlit entrypoint
├── agents/ # One file per LangGraph agent node
├── graph/workflow.py # LangGraph graph definition
├── llm/ # LLM provider interface + implementations
├── mcp_servers/ # MCP server implementations (calendar, weather, memory)
├── mcp_client/ # MCP client loading and tool registry
├── tools/ # Underlying tool logic
├── memory/ # SQLAlchemy models + repository
├── schemas/ # Pydantic models (inputs, outputs, state)
├── prompts/ # Prompt templates per agent (.md)
├── observability/ # Agent tracing, token tracking, cost calculation
├── data/ # SQLite database files
├── credentials/ # Google Calendar OAuth credentials
└── tests/ # Unit, integration, and agent tests
- Runs entirely locally (if you use Ollama).
- No authentication required.
- No data sent to any server (except the LLM API you configure).
- Google Calendar is read-only.
- No bank, spending, or payment access.
- NOT a substitute for professional advice (medical, legal, financial).
- Calendar integration requires Google Cloud setup.
- Weather queries use Open-Meteo (no API key needed).
- Agent quality depends on the LLM provider and model chosen.
- Local model mode via Ollama
- Outcome review reminders
- Markdown export
- Graph visualization
- Voice input
- Different personality modes