Applies the grounding discipline from the agentic briefing work to the main chat system prompt. The regular chat pipeline was already agentic (it uses stream_chat_with_tools), but its system prompt never told the model "only assert facts from tool results" or "if a tool returns nothing, say so honestly." That left room for the same class of hallucinations the briefings had — calling list_events, getting an empty array, and then confidently mentioning a meeting anyway. Adds two new static rules to the tool guidance block in llm.build_context: GROUNDING — when the user asks about their own data, call the relevant tool to see what exists. Never assert from memory or assumption. HONESTY WHEN EMPTY — if a tool returns empty results, tell the user plainly. No fabricated example items, no invented meetings, no generic suggestions dressed up as real data. Both rules are in the static (KV-cache-stable) portion of the system prompt so they cost nothing on repeated requests for the same user. Carries the hallucination fix from the briefing work directly into every chat turn, not just chat that happens inside a briefing thread. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Fabled Assistant
A self-hosted second brain and project management application with integrated LLM capabilities. Write, organise, and act on your notes and tasks with the help of a local AI assistant — all running on your own hardware.
Features
Notes and tasks with a Markdown editor, sub-tasks, milestones, and kanban project workspaces. AI chat with streaming responses, RAG over your notes, and tool use (web search, calendar, weather). A daily briefing that digests your tasks, RSS feeds, and weather on a schedule. Knowledge graph, per-user/group sharing, PWA with push notifications, an MCP server for external AI clients, and an Android companion app.
Quick Start
Prerequisites: Docker and Docker Compose. 8 GB+ RAM recommended for LLM inference.
Download docker-compose.quickstart.yml from this repo, then:
# Optional but recommended — set a secret key
export SECRET_KEY=your-random-secret-here
docker compose -f docker-compose.quickstart.yml up -d
Open http://localhost:5000. The first user to register becomes admin. Go to Settings → General to pull an LLM model — qwen3:8b or llama3.1:8b are good starting points.
GPU: Ollama runs CPU-only by default. See the comments in
docker-compose.quickstart.ymlto enable NVIDIA GPU passthrough.
Development: To build from source, see Development.
Documentation
| Doc | Contents |
|---|---|
| Architecture | Stack, design decisions, data models, key services |
| Configuration | Environment variables, Docker Compose, production setup, security |
| Features | Detailed feature breakdown and keyboard shortcuts |
| Development | Dev workflow, CI/CD, migrations, release process |
| API Keys & MCP | API key management and Fable MCP install guide |
| SSO / OAuth | OIDC setup for Authentik, Keycloak, and other providers |
| API Reference | All REST API endpoints |
| Android App | Flutter companion app architecture and feature status |
License
This project is privately maintained.