scribe
A conversational AI agent for your notes. Ask it to find things, summarize what you wrote, restructure a mess of files, fix broken links, tag things, or edit content directly — it figures out which operations to run and does it, chaining multiple steps together when the task needs it.
Built on MCP for tool access and OpenRouter for the LLM, so you can point it at whichever model you like. Currently supports Obsidian, with more backends (Notion and others) planned — see Roadmap.
Requirements
- Python 3.11+
- An OpenRouter API key (free tier available)
- For Obsidian: a vault on your local filesystem
Install
pip install git+https://github.com/ZedoMak/scribe.git
This pulls in everything needed for the Obsidian backend automatically — no separate install step.
First run
scribe obsidian chat
You'll be asked for your OpenRouter API key and the absolute path to your
vault, once. This is saved to ~/.config/scribe/config.toml. Redo setup
any time with scribe obsidian config --reset, or override a single value
with an environment variable: OPENROUTER_API_KEY, OBSIDIAN_VAULT_PATH,
AGENT_MODEL.
Usage
Every backend follows the same command shape: scribe <backend> <command>.
scribe obsidian chat # interactive session
scribe obsidian task "reorganize my Projects folder" # one-off task, then exit
scribe obsidian search --query "authentication roadmap"
scribe obsidian summarize --file "Weekly Notes"
scribe obsidian tags --min-usage 5
scribe obsidian doctor # troubleshooting
scribe obsidian config # view current config
Interactive chat
scribe obsidian chat
Talk to your vault like you would to a person. Inside a session:
| Command | Does |
|---|---|
/help |
list commands |
/tools |
list every operation the agent can call |
/clear |
wipe conversation history, start fresh |
/exit |
quit (also: exit, quit, Ctrl+D) |
One-off tasks
scribe obsidian task "merge my two Machine Learning folders and tag everything by topic"
Runs a single instruction to completion, then exits — useful for scripting or quick jobs where you don't want a full chat session.
For anything that changes files, task shows you a plan before doing
anything:
╭─ proposed plan ──────────────────────────────────╮ │ 1. Move Model.md and DataSets.md into │ │ Machine Learning/Fundamentals/ │ │ 2. Create Machine Learning/Linear Regression/ │ │ and move the 3 related notes there │ │ 3. Tag all moved notes with #ml │ ╰────────────────────────────────────────────────────╯ Proceed with this plan? [y/N]
Nothing is touched until you approve. Skip the prompt with --yes/-y if
you trust it and want it to just run (careful with this on anything
destructive).
summarize, search, and tags are read-only shortcuts for common
lookups — they skip the plan step since there's nothing to confirm.
What it can actually do
Anything the underlying Obsidian MCP server exposes: reading, creating,
editing, and deleting notes; searching by text, tag, date, or regex;
managing tags; finding backlinks and broken links; listing orphaned notes;
moving and renaming notes and folders. Run /tools inside a chat session
to see the live list.
The agent is instructed to survey your vault before restructuring it, trust successful operations instead of re-verifying obsessively, and skip (rather than force) anything that doesn't go as expected — these are lessons from real failures during development, not defaults you need to configure.
Troubleshooting
obsidian-mcp was not found on your PATH
Run scribe obsidian doctor — it checks what's missing and how to fix it.
A task times out or seems stuck Individual tool calls are capped at 30 seconds; a stuck call will report a timeout instead of hanging forever. If a task genuinely needs to touch a lot of notes, it's normal for it to take a while — you'll see each tool call as it happens.
Something else broke
This project pins a few dependency versions deliberately
(fastmcp==2.8.1, pydantic<2.12) because of real breaking changes
upstream in those libraries. If you're hacking on the source directly,
don't loosen those pins without confirming scribe obsidian doctor still
passes afterward.
Roadmap
- Notion backend
- Conversation history persistence across sessions
- More granular per-backend safety controls
Contributing
Issues and PRs welcome. This is a young project — expect rough edges.
License
MIT — see LICENSE.
Metadata
Release files for scribe-agent 0.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| scribe_agent-0.3.0.tar.gz | 12.2 kB | Without provenance | Details for scribe_agent-0.3.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| scribe_agent-0.3.0-py3-none-any.whl | Python 3 | none | any | Details for scribe_agent-0.3.0-py3-none-any.whl |
Total release size: 27.7 kB
Release files / scribe_agent-0.3.0.tar.gz
| Download URL | scribe_agent-0.3.0.tar.gz |
|---|---|
| Size | 12.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e6b6cd541e83a4398626f7b9136a8bfa03b6cb656f728a7f1a58bc22fb8d3e00
|
|
BLAKE2b-256 checksum How to use checksums |
f95a9cf37aac1520a1efebf552ce8d61fee45b8708fcf6dd76d60a1ea0459e08
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.3
|
Release files / scribe_agent-0.3.0-py3-none-any.whl
| Download URL | scribe_agent-0.3.0-py3-none-any.whl |
|---|---|
| Size | 15.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
9e432a69db45c9371e25d975d93a9aaaecc6035bbeb71fe1c3026e0d897a72f8
|
|
BLAKE2b-256 checksum How to use checksums |
5c57a1be78e7a322532d4c1bab6762bd10dfcfb6653b6a929093a2fdb8936e42
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.3
|
Security for scribe-agent 0.3.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.