iMessage-style front desk for AI task management via spacecadet MCP.
Send natural-language messages from a browser. Concierge classifies your intent, creates/updates tasks in org-mode through spacecadet, and sends back a short acknowledgement — all without blocking your input.
Browser (WebSocket)
↕
FastAPI server
↕
WebSocket Handler → Inbox (filesystem, append-only)
↓
Burst Detector (groups rapid messages)
↓
Classifier (LLM: Anthropic or Ollama)
↓
Reconciler → SpacecadetClient (MCP) → org files
↓
Acknowledger → response back over WebSocket
- Python 3.10+
- spacecadet set up and working (with Emacs)
- An LLM provider: Anthropic API key or Ollama running locally
git clone <repo-url>
cd concierge
pip install -e .Copy .env.example to .env and fill in your settings:
cp .env.example .envAt minimum, set:
CONCIERGE_SPACECADET_PATH— path to your spacecadetserver.pyANTHROPIC_API_KEY— if using Anthropic (default provider)
uvicorn concierge.main:appOpen http://localhost:8000 in your browser.
Set CONCIERGE_LLM_PROVIDER to choose:
| Provider | Value | Requirements |
|---|---|---|
| Anthropic | anthropic (default) |
ANTHROPIC_API_KEY set |
| Ollama | ollama |
Ollama running at CONCIERGE_OLLAMA_BASE_URL |
- You type messages in the browser. Each is persisted to the inbox immediately.
- The burst detector groups rapid messages (waits for a 2s quiet window).
- The classifier sends the burst to an LLM, extracting structured intents.
- The reconciler maps each intent to spacecadet tool calls (add_task, update_task, etc.).
- The acknowledger generates a short confirmation and sends it back.
Input is never blocked — you can keep typing while processing happens.
pip install -e ".[dev]"
pytestMIT