mochi-quest
by ATaiIsHere
README.md
# Mochi Quest π‘
> An open-source, AI-powered personal growth coaching system.
Mochi Quest lets you describe your goals β lose weight, learn English, become a Googler β and an AI coach builds a personalized plan, assigns daily tasks, tracks your progress, and dynamically adjusts when things get too hard or too easy.
**Agent-agnostic**: works with Claude, GPT, Gemini, or any MCP-capable AI agent.
---
## Features
- **Goal clarification** β AI interviews you to understand your situation, constraints, and current level before building a plan
- **Cycle-based planning** β AI plans a full cycle (7β14 days) with a per-day task menu; daily allocation runs instantly from the DB (no LLM latency)
- **Dynamic replan** β triggers automatically at cycle end, when skip rate is high, or when all optional tasks are done (too easy)
- **Multi-goal balance** β set a weight per goal; daily tasks are allocated proportionally within your daily limit
- **Coin + reward system** β earn coins from tasks, redeem for self-defined rewards; AI adjusts pricing if a reward conflicts with your goals
- **Streak tracking** β per-goal streaks + global streak (all goals done = global +1); milestone bonuses at 7/30/100/365 days
- **Web dashboard** β local UI for checking off tasks, viewing plan roadmap, wallet, and streaks
- **Real-time updates** β SSE pushes events to the UI instantly
- **Background daemon** β `node-cron` daily check at 4am (configurable): streak update, task allocation, cycle-end detection, replan flagging
- **Push notifications** β server POSTs typed events to the agent's webhook URL (pre-filtered); agent uses Discord to ask the user questions or report results
---
## Architecture
```
ββββββββββββββββββββββββββββββββββββββββββββ
β AI Agent Layer β
β Claude / GPT / Gemini / any MCP agent β
β ββββββββββββββββββββββββββββββββββββ β
β β SKILL.md β β
β β coaching behavior & decisions β β
β ββββββββββββββββββββββββββββββββββββ β
ββββββββββββββββββββ¬ββββββββββββββββββββββββ
β MCP (stdio)
ββββββββββββββββββββΌββββββββββββββββββββββββ
β MCP Server (Node.js) β
β Goals Β· Plans Β· Tasks Β· Wallet Β· Streaksβ
β βββββββββββββββββββββββββββββββββββββββ β
β β SQLite (~/.mochi-quest/data.db) β β
β βββββββββββββββββββββββββββββββββββββββ β
β REST API :3030 βββββ Web UI (React) β
β node-cron (4am daily check, daemon) β
ββββββββββββββββββββββββββββββββββββββββββββ
```
One command (`mochi-quest start`) runs the MCP server, REST API, and scheduler together.
---
## Quick Start
### Prerequisites
- Node.js 20+
- pnpm 9+
- An MCP-capable AI agent (Claude Code, Cursor, etc.)
### Install
```bash
git clone https://github.com/YOUR_USERNAME/mochi-quest.git
cd mochi-quest
pnpm install
```
### Build
```bash
# Build server
cd packages/server && pnpm build
# Build web UI
cd packages/web && pnpm build
```
### Run
```bash
# Start everything (MCP + REST API + scheduler + built Web UI)
node packages/server/dist/index.js start
# Or as a background daemon
node packages/server/dist/index.js start --daemon
```
The web dashboard is available at **http://localhost:3030**.
### Docker
```bash
docker compose up -d --build
```
The Docker server stores SQLite data in the `mochi_quest_data` volume and serves the built Web UI, REST API, scheduler, and MCP entrypoint from one container.
Full deployment notes: [`docs/deployment.md`](docs/deployment.md).
### Connect to your AI agent
Add the MCP server to your agent's config:
**Claude Code** (`~/.claude/settings.json` or project `.mcp.json`):
```json
{
"mcpServers": {
"mochi-quest": {
"command": "node",
"args": ["/path/to/mochi-quest/packages/server/dist/index.js", "mcp"]
}
}
}
```
Then install `skills/mochi-quest/` as a skill (or paste the SKILL.md body into your system prompt).
---
## MCP Tools
| Tool | Description |
|------|-------------|
| `mq_get_dashboard` | Full overview: goals, today's tasks, wallet, streaks, replan status |
| `mq_list_goals` / `mq_create_goal` / `mq_update_goal` | Goal management |
| `mq_get_plan` / `mq_generate_plan` / `mq_adjust_plan` | Plan management |
| `mq_get_today_tasks` / `mq_get_optional_tasks` | Fetch tasks |
| `mq_complete_task` / `mq_skip_task` | Report task status |
| `mq_get_wallet` / `mq_list_rewards` / `mq_redeem_reward` | Coin & reward system |
| `mq_add_assessment` / `mq_get_user_state` | Track progress assessments |
| `mq_get_streak` / `mq_get_streak_milestones` | Streak info |
| `mq_get_replan_status` | Check if AI action is needed (offline catch-up) |
| `mq_send_notification` | Send a message to configured Discord channel |
| `mq_register_webhook` | Register agent webhook URL for push events |
| `mq_get_settings` / `mq_update_settings` | Global settings |
Full tool reference: [`packages/skill/SKILL.md`](packages/skill/SKILL.md)
---
## Project Structure
```
mochi-quest/
βββ packages/
β βββ server/ # MCP Server + REST API (Node.js + TypeScript)
β β βββ src/
β β βββ db/ # SQLite schema & queries
β β βββ mcp/ # MCP tool implementations
β β βββ api/ # REST API routes (Hono)
β β βββ scheduler.ts # node-cron daily check + notifications
β βββ web/ # Web dashboard (React + Vite + Tailwind)
β β βββ src/
β β βββ pages/ # Dashboard, Goals, Tasks, Wallet, Settings
β β βββ components/
β β βββ hooks/ # useSSE for real-time updates
β β βββ lib/ # API client + types
β βββ skill/
β βββ SKILL.md # AI coaching behavior definition
βββ docs/
βββ spec.md # Full system specification
```
---
## How It Works
### Planning vs Execution
The AI generates a **cycle-based plan** (7β14 days) during planning sessions β a day-by-day schedule where each day has specific tasks, plus an optional pool for the whole cycle. The server allocates daily tasks by `day_in_cycle` with no LLM call, so the UI loads instantly.
### Event-driven Replan
Every meaningful state change emits a typed event through a unified pipeline:
```
emitEvent(type, data)
βββ writeLog() β DB audit log
βββ emitSseEvent() β Web UI badge (real-time)
βββ notifyAgentWebhook() β Agent HTTP endpoint (pre-filtered)
```
The server pre-filters before pushing β the agent only receives actionable signals:
| Event | Pushed to agent when⦠| Agent action |
|-------|----------------------|-------------|
| `task_completed` | `optional_completion_rate === 1.0` | Ask user: plan too easy? Consider replan |
| `cycle_ended` | always | Replan immediately, notify user |
| `daily_check_ran` | any goal `skip_rate_3d > 0.5` | Ask user why; decide whether to replan |
| `assessment_recorded` | always | Review plan; replan if significantly changed |
The agent registers its webhook URL via `mq_register_webhook` or the settings page. As offline catch-up, `mq_get_replan_status()` at session start returns any pending replans from while the webhook was offline.
### Multi-goal Task Allocation
Each goal has a `daily_task_weight` (1β5). Tasks are allocated proportionally:
```
weights = [3, 2, 1] β budget = 6 β tasks = [3, 2, 1]
```
Adjust weights any time: "Focus more on English this week."
---
## Data Storage
All data is stored locally in `~/.mochi-quest/data.db` (SQLite). No cloud sync, no accounts.
---
## Notifications (Daemon Mode)
```bash
node packages/server/dist/index.js start --daemon
```
The built-in scheduler runs a daily check at the configured notification time (default: 08:00) and sends a native OS notification when there are pending tasks.
- macOS: Notification Center
- Windows: Toast Notification
- Linux: libnotify (`notify-send`)
---
## Roadmap
- [ ] Integration adapters (Fitbit, Garmin, Duolingo, LeetCode)
- [ ] Habitica sync (push tasks to Habitica, webhook completion back)
- [ ] Server-driven replan (server calls LLM directly in daemon mode)
- [ ] Apple Health companion app
- [ ] Auto-start installer (`mochi-quest setup`)
---
## Contributing
Pull requests welcome. Please open an issue first to discuss larger changes.
---
## License
MIT
This server cannot be deployed
Maintenance
ActivityStale
ResponsivenessNo issues