ChatGPT MD

approved

by bramses

A seamless integration of ChatGPT, OpenRouter.ai and local LLMs via Ollama into your notes.

1,431 stars127,703 downloadsUpdated 13d agoMIT

ChatGPT MD

Your AI writing companion, living inside Obsidian.

Chat with AI directly in your notes. Reference your other notes with [[wiki links]]. Keep everything in your vault—where it belongs.

Chatting with links about vacation plans


✨ What's New

Provider Reliability (v3.2) — Updated provider integrations, safer tool calling, and more reliable model selection and streaming across cloud and local providers.

Agents (v3.1) — Create AI personas like a writing coach, code reviewer, or brainstorming partner. Apply them to any note instantly.

Tool Calling (v3.0) — Let AI search your vault, read your notes, and browse the web. You approve everything. Your data, your control.


🚀 Get Started in 30 Seconds

  1. Install — Settings → Community Plugins → Browse → Search "ChatGPT MD"
  2. Add API key — Settings → ChatGPT MD → Paste your key (OpenAI, Anthropic, or OpenRouter)
  3. Chat — Press Cmd+P → Type "ChatGPT MD: Chat"

That's it. You're now chatting with AI in your notes.

💡 Set a hotkey and thank me later: Settings → Hotkeys → Search "ChatGPT MD: Chat" → Press Cmd+J


💰 Free & Private AI

Don't want API costs? Don't want your notes leaving your computer?

Ollama and LM Studio run AI locally on your machine. Completely free. Completely private.

Ollama (Recommended)

# Install from ollama.ai, then:
ollama pull llama3.2    # Download a model
ollama list               # See what you have

In your note:

---
model: ollama@llama3.2
---

LM Studio

  1. Download from lmstudio.ai
  2. Load a model in the app
  3. Start the Local Server
  4. Use model: lmstudio@your-model

🎯 What You Can Do

Chat About Anything

Write a question, get an answer. Simple.

user:: What makes a good daily note?

assistant:: Great daily notes are:
- **Specific** — "Had coffee with Sarah" not "Met a friend"
- **Actionable** — Include next steps or open questions
- **Connected** — Link to related ideas and people

Reference Your Other Notes

This is where it gets magical. Use [[wiki links]] and AI reads those notes too:

user:: Based on my [[Meeting Notes]] and [[Project Ideas]],
what should I focus on this week?

AI reads your linked notes and gives you a contextual answer. No more copy-pasting context.

Create AI Agents

Make AI personas for different tasks:

# agents/WritingCoach.md
---
model: openai@gpt-4.1-mini
temperature: 0.8
---
You are a supportive writing coach. Help the user:
- Clarify their ideas with questions
- Suggest improvements without being harsh
- Celebrate their progress

Apply with "Choose Agent" command. Switch between agents instantly.

Let AI Search Your Vault

Enable in Settings → Tool Calling. Then:

user:: What have I written about machine learning?

AI: "I'd like to search your vault." You: Approve ✓ AI: "Found 5 notes. Here's what you've written..." You: Select what to share ✓

You're always in control. AI only sees what you approve.


🔌 AI Providers

ProviderWhy Use ItCost
OpenAIReliable, GPT-4Pay per use
AnthropicClaude, great for long docsPay per use
GeminiGoogle's modelsPay per use
OpenRouterAccess to ALL modelsPay per use
Z.AIGLM modelsPay per use
OllamaLocal, privateFree
LM StudioLocal, privateFree

Model prefix examples:

  • OpenAI: openai@gpt-4.1-mini (unprefixed OpenAI model IDs also work)
  • Anthropic: anthropic@claude-sonnet-4-20250514
  • Gemini: gemini@gemini-2.5-flash-lite
  • OpenRouter: openrouter@openai/gpt-4.1-mini
  • Local: ollama@llama3.2 or lmstudio@model-name

OpenAI search-preview models such as openai@gpt-4o-mini-search-preview are supported through OpenAI's chat-completions endpoint.


⚙️ Commands

CommandWhat It Does
ChatThe main event. Send message, get AI response
Select ModelSwitch between models/providers
Choose AgentApply an AI persona to current note
Create AgentMake a new agent (manual or AI-generated)
Infer TitleAuto-generate title from conversation
Clear ChatStart fresh, keep settings
Stop StreamingCancel a long response

⚙️ Settings

In Your Notes (Frontmatter)

---
model: openai@gpt-4.1-mini # Which AI to use
temperature: 0.7         # Creativity (0-2)
max_tokens: 4096         # Response length
system_commands:        # Give AI a role
  - You are a helpful assistant
agent: WritingCoach      # Apply an agent by name
---

Global Defaults (Settings → ChatGPT MD)

  • API Keys — One secure Obsidian credential per cloud provider (with legacy text fields on older Obsidian versions)
  • Default Model — Which AI to use by default
  • Folders — Where to save chats, templates, agents
  • Stream Mode — See responses appear word by word

Priority: Note settings beat Agent settings beat Global settings beat default chat frontmatter/provider defaults


❓ Common Questions

Q: How do I actually use this?

A: Open any note. Write something. Press Cmd+P, type "chat", hit Enter. Watch AI respond in your note.

Q: Can I use my existing notes?

A: Yes! Just add a frontmatter block at the top with your settings, then use [[wiki links]] to reference other notes.

Q: Which local model should I use?

A: llama3.2 is great for general use. deepseek-r1:7b for reasoning. Try a few and see what works for you.

Q: Is my data private?

A: With OpenAI/Anthropic, your messages go to their servers. With Ollama/LM Studio, everything stays on your computer. Your choice.

Q: What's an "agent"?

A: A reusable AI persona. Like having different experts on call—writing coach for drafts, code reviewer for programming, researcher for learning.


🔒 Privacy

With cloud providers (OpenAI, Anthropic, etc.):

  • Your messages are sent to their servers
  • They may use messages to improve services (check their policies)

With local AI (Ollama, LM Studio):

  • Everything stays on your computer
  • No internet required
  • Completely private

Credentials:

  • When both Obsidian SecretStorage and its native secret control are available, provider and web-search keys are stored as vault-local Obsidian credentials; plugin data contains only opaque references.
  • Existing plaintext keys migrate automatically on plugin load. Failed migrations retain a usable plaintext key and retry on the next load or settings-tab opening.
  • If a valid secure credential and plaintext copy coexist, settings explains the risk and offers an explicit Delete insecure copy action. The copy is retained if saving fails.
  • Replacing or clearing a selection removes only this plugin's reference. Old credentials remain available for management in Obsidian.
  • Older or partially capable Obsidian versions keep the legacy plaintext controls and behavior. After migrating and then downgrading, re-enter keys because secure references are never sent as credentials.

Always:

  • Chat messages and automatically expanded [[linked notes]] are sent to the selected provider
  • AI tools require approval before execution, and vault/web search results must be selected before sharing
  • Custom web-search endpoints receive your query and any configured bearer credential
  • No tracking from this plugin

See SECURITY.md for vulnerability reporting and the full data model.


🛠️ For Developers

git clone https://github.com/bramses/chatgpt-md.git
cd chatgpt-md
npm install
npm run dev

Project structure:

src/
├── Commands/     # User actions
├── Services/     # AI providers, adapters, tools
├── Views/        # UI, modals
├── Utilities/    # Pure functions (tested)
└── core/         # Dependency injection

Contributions welcome! Fork → Branch → PR.


🧪 Beta Testing

Want the latest features? Use BRAT:

  1. Install BRAT plugin
  2. Add bramses/chatgpt-md as beta plugin
  3. Select "latest version"

Test beta versions in a separate vault.


👋 About

Bram Adams made this. He writes at bramadams.dev and builds Your Commonbase.

Deniz Okcu keeps it running. Say hi on Bluesky.


Happy note-taking! 📝

For plugin developers

Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.