Three related rough edges in the journal voice surfaced from real journal usage 2026-04-27 → 2026-04-29: 1. **Persona overhelps.** When the user logged "today I'm prepping for an ISP migration at Branch 14 Bedford for work at famous supply", the assistant came back with "ISP migrations can be tricky. Are you handling the network configuration yourself, or is there a team supporting you? Also, are there any specific tasks or checks you need to complete before the switch?" — pushing IT-helpdesk advice the user didn't ask for. The user had to push back. JOURNAL_PERSONA now leads with "CAPTURE first, advise only if asked" and the RESPONSE STYLE block has an explicit anti-pattern banning troubleshooting / checklist / process-advice follow-ups unless the user explicitly invites them. 2. **Moments stored in third-person observer voice.** The dentist appointment beat got written as "The user mentioned having an appointment this Friday but hasn't provided details yet." — reads like an LLM transcript annotation, not a journal jot. The record_moment tool's `content` description previously said "in the user's voice or third-person", which was the literal source of the bug. New phrasing requires first-person/imperative with concrete GOOD/BAD examples, and the JOURNAL_CALIBRATION block reinforces it. 3. **Inconsistent emoji use.** 4/27 was clinical, 4/29 had 😊 and 🛠️ in the appointment confirmation. RESPONSE STYLE now bans emojis outright — the journal is a thinking-companion surface and the emoji warmth reads as out-of-register chat-bot tone. Bonus while in here: - New MOMENT ENTITY LINKING section explicitly forbids attaching a task_titles link unless the user references the task by name (the 4/27 Docker→ADHD auto-link bug; rest of that fix is in #158). - Same section rejects generic place placeholders ("work" / "home" / "office") in favor of letting the user name the real place. 22 tests pass (4 journal + 18 calendar tool); ruff clean. Closes Fable task #157. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Fabled Scribe
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.