One knowledge base.
You and your agents.
Lore LLM is a markdown knowledge base you edit from your desktop, browser and phone, share with your team, and that Claude, Codex and other AI agents read and write through MCP, each with its own scoped, revocable token.
Launch checklist
## Backend
.trash/ for 30 daysClaude · now## Mobile
The same files, from both sides.
You sign in with Google and work in the apps. Agents connect to the MCP endpoint with a token you issue. Both land in the same folders, and every agent change is logged against its name.
You
- Browse projects, write and organise notes
- Tick checklists in place
- Review agent changes, restore with one tap
/v1/*
Lore
- Worker: MCP server + management API
- R2:
{user}/{project}/…markdown - D1: agent permissions & audit log
/mcp
Your agents
- List, read, write and append notes
- Only inside the projects you allow
- Read-only or read-write, per agent
Built for sharing memory with agents.
Agents get long-term context that you can actually read and edit. You keep control over what each one sees and changes.
Projects of plain markdown
Each top-level folder is a project. Notes are ordinary .md files with folders, links between files, and attachments.
Living checklists
checklist.md renders as a nested task list. Ticking a box rewrites only that line, and concurrent appends never lose data.
Auto-compiled index
Every project has an index.md that the server rebuilds after each change. It gives agents a map of the project and can't be edited by hand.
Scoped, revocable tokens
Issue one token per agent, limited to projects like Work/* and to read or read-write. Revoking it takes effect immediately.
Activity & restore
Every agent write lands in an activity feed with a side-by-side diff. If you don't like a change, restore the previous version.
Desktop, web and mobile
An Electron editor for macOS, Windows and Linux, the same UI in your browser, and a native Expo app for iOS and Android, all signed in to the same knowledge base.
Teams and roles
Create a team, invite people by email as owner, editor or viewer, and move a project into it. Roles are enforced by the server, not just hidden in the UI.
Obsidian sync
Keep a local copy of your knowledge base as a plain folder and open it as an Obsidian vault. Edits sync both ways, concurrent changes are three-way merged, and wikilinks work.
Hosted MCP connectors
Add the /mcp URL to Claude.ai or ChatGPT and approve access with OAuth: you pick the projects and read or read-write, no token to paste.
Three steps, one token.
The server speaks MCP over Streamable HTTP. Any client that can send a bearer header can connect.
Sign in to the app
Open Lore LLM on desktop, mobile or in the browser and sign in with Google.
Create an agent
In Settings → Agents, pick Claude or Codex, choose its projects and access level. The token is shown once and never stored by the server.
Paste the setup
Copy the generated command or config into your agent. It can now list, read and write notes in its scope.
Using Claude.ai, ChatGPT or claude mcp add without a header? Add your /mcp URL as a connector and sign in with OAuth instead: the consent page creates the agent for you.
claude mcp add --transport http lore \
https://<your-worker>.workers.dev/mcp \
--header "Authorization: Bearer $LORE_TOKEN"
[mcp_servers.lore]
url = "https://<your-worker>.workers.dev/mcp"
http_headers = { Authorization = "Bearer $LORE_TOKEN" }
curl https://<your-worker>.workers.dev/mcp \
-H "Authorization: Bearer $LORE_TOKEN" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call",
"params":{"name":"list_projects","arguments":{}}}'
Eighteen tools, all scoped.
Every call is confined to the agent's user and project scope, write tools need a read-write agent, and every write is recorded in the audit log.
list_projectsProjects this agent is allowed to see.
list_filesNotes and attachments in a project or folder.
read_fileRead a markdown note, including the project's index.md.
read_file_linesRead just a range of lines from a long note.
search_filesCase-insensitive keyword search across the notes in scope.
get_checklistA project's checklist with a completed/total summary.
write_fileCreate a note. Overwriting needs an explicit overwrite: true.
append_fileAppend safely with an etag precondition, ideal for logs.
patch_fileReplace a precise piece of text instead of rewriting the whole note.
delete_fileRemove a note the agent has read-write access to.
add_checklist_itemAdd an item, optionally under a ## version section.
check_itemTick or untick items by text; only that line changes.
edit_checklist_itemReword an item without touching the rest.
move_checklist_itemMove an item to another section.
delete_checklist_itemRemove an item from the checklist.
create_projectStart a new project folder.
rename_projectRename a project and move all its files.
delete_projectDelete a project; it needs an explicit confirm: true.
Three open-source repos.
The backend, the desktop editor and the mobile app are developed side by side.
Lore LLM server
MCP server and management API on Cloudflare Workers, with R2 for files, D1 for permissions and audit, and AWS Cognito for sign-in.
Davide255/lore-llm →Lore LLM Desktop
Keyboard-first editor with ⌘K search, inline checklists, undoable deletes, teams, Obsidian sync and a live activity view with diffs. Also runs in the browser.
Davide255/lore-llm-desktop →Lore LLM Mobile
Native tabs, a live-preview editor, full-text search and agent management, with Liquid Glass on iOS 26.
Davide255/lore-llm-mobile →Isolation by default.
The trade-offs are written down in ARCHITECTURE_DECISIONS.md.
.., control characters or non-markdown extensions are rejected.index.md is read-only for agents.Runs on the free tier.
The backend fits Cloudflare's free plan: 100k requests a day, and every request is I/O-bound apart from a single JWT verification. Bring your own Cognito user pool and deploy with Wrangler: the step-by-step guide is in the README.
# clone and test
git clone https://github.com/Davide255/lore-llm
cd lore-llm && npm ci
npm run typecheck && npm test
# run locally
cp .dev.vars.example .dev.vars
npm run db:migrate:local && npm run dev
# deploy
npx wrangler secret put AGENT_TOKEN_SECRET
npx wrangler d1 migrations apply DB --remote
npm run deploy