✨ Become an AI-era PM — words → product → doAIPM.com
#MD SoloMD

v4.5.3

The editor where agents live.

v4.0 is the agent-native author release. The agent goes from "external tool you run a CLI for" to a first-class editor surface — works continuously, across multiple vaults, with full visibility, replay, and rollback. Everything below is in core. No plugin tax. ~15 MB still.

The five pillars

Each is in core. Toggleable via a setting. Built to play nicely with your existing notes — no schema migration, no new file format, no required cloud account.

1 · Inline Agent Panel

Right-side first-class panel (peer to Outline / Backlinks / Tags / History). Streamed chat-with-vault routed through the in-process MCP surface and your existing 14-provider AI stack. [[wikilink]] citations resolve to real notes; tool-call cards expand inline showing every read/write the agent makes. Reply too long? Insert and Copy buttons drop it into the active editor — replaces selection if any, else inserts at the cursor. Run history persists as plain markdown under .solomd/agent-runs/ — grep-able, git-trackable.

2 · Agent Recipes / Scheduled Runs

Declarative agent jobs as YAML in your vault: <workspace>/.solomd/agents/*.yml. Triggers: schedule (cron), on-save, on-commit, on-tag-add, manual. Safety rails are non-negotiable: every run gets its own AutoGit branch agent/<recipe>/<run-id>, writes are reviewable via accept / reject UI before merging, and a per-run write-cap (default 5, hard ceiling 50) prevents runaway loops. Rejected runs have the branch hard-deleted — zero residue. Ships with an 11-recipe cookbook (weekly review, daily summary, TODO extraction, translation, citation cleanup, CJK proofread agent, …) — install one, edit it, run it.

3 · Agent Trace View

Every run (Panel chat OR Recipe) emits a trace.jsonl per step: prompt / model_call / tool_call / tool_result / git_commit / done. Step cards expand to show args, results, token counts, cost estimate, AutoGit branch refs. Replay-from-step button rewinds the run to step N and re-executes from there with edited inputs — the path to self-correcting recipes. New MCP tool read_agent_trace(run_id) exposes traces to other agents.

4 · Workspace Federation

solomd-mcp --workspace path1 --workspace path2 --workspace path3 — one MCP session, many vaults. Tool signatures gain an optional workspace parameter; default = first passed (fully back-compat with single-workspace clients). AutoGit branches stay isolated per workspace. Settings → Integrations adds an MCP profiles UI: name a bundle of vaults, copy the Claude Desktop config snippet with one click.

5 · Ollama first-class

We do NOT bundle a local LLM runtime — Ollama already does that well. v4.0 polishes the integration: auto-detect at localhost:11434 (green status indicator in Settings → AI), one-click install hint when not found, three model presets (rewrite → qwen2.5:7b · quick → qwen2.5:1.5b · cjk → qwen2.5:14b), recommended pull from inline UI when no models installed. Recipes can specify provider: local (alias of ollama) for cheap autonomous loops with zero cloud cost. Your notes never leave the machine — true today via BYOK Ollama; v4.0 makes it discoverable.

🛡️ Safety rails (the bit nobody else does)

  • AutoGit branch sandbox. Every recipe run starts on its own branch. Your main stays untouched until you click Accept. A rejected run leaves nothing in your history — branch deleted, file tree reverted.
  • Per-run write cap. A model that asks to write 50 files when the cap is 5 gets refusals at the 6th tool call. No half-applied state, no surprise mass-edits.
  • Refuses to start on a dirty workspace. If you have uncommitted edits when a recipe fires, it errors out cleanly instead of sweeping your work-in-progress into an agent commit.
  • Path-traversal hardening. Both the in-process tool surface and every Tauri command that joins user-supplied run_id / path arguments now reject .. segments and absolute paths upfront. The agent literally can't write outside its workspace.
  • Replayable trace. Every step on disk in line-delimited JSON. Suspicious behavior in the panel? Walk the trace, find the bad step, replay from N–1 with edited inputs.

Quality bar

  • First-run wizard. New install meets the Agent Panel within 60 seconds — guides you through BYOK key entry OR Ollama setup. Re-launchable from Help.
  • Recipe cookbook (11 starters). Settings → Recipes → Browse cookbook. Weekly review, daily summary, TODO extraction, translation pass, citation cleanup, CJK proofread agent, link-rot detector, frontmatter normalizer, outline-to-blog, refactor pass, weekly tag triage. Install one, edit the prompt, run it.
  • Public REST API (localhost only, token auth). Same surface as MCP for clients that don't speak MCP yet — Alfred / Raycast / n8n / your own scripts.
  • BYOK cost meter. Per-provider running tokens-spent counter, opt-in. Settings → Integrations.
  • Localization. ja / ko translations scaffolded for README + iPad metadata. en/zh remain the full-coverage UI languages.

UX polish you'll notice on day one

  • IME composition guard everywhere. Pinyin users typing Chinese, Japanese kana mode, Korean Hangul — pressing Enter to commit a candidate no longer fires "send" in chat / "rename" in file tree / "open" in command palette and search. Fixed across 7 input surfaces.
  • Insert / Copy on assistant replies. Two buttons under each completed reply. Insert respects the current editor selection (replaces it) or falls back to cursor insertion. Copy is plain clipboard.
  • Window UX on macOS. Launch activation timing is right — SoloMD becomes frontmost on cold start instead of opening behind Finder. Restored window position stays inside the current monitor work area; bad saved state from a now-disconnected secondary monitor recenters cleanly instead of opening off-screen.
  • Stuck "streaming…" with no error. Fixed. A misconfigured provider (e.g. Ollama with a model that isn't pulled) used to hang the panel forever. Now you see a red error banner with the actual response from the backend, and the Send button comes back.

What v4.0 explicitly skips (and why)

Saying "no" is part of the product. These were considered and consciously not shipped:

  • Bundled local LLM runtime. Ollama already covers this; re-implementing violates "write less code we maintain forever." BYOK provider stays the path.
  • Online recipe marketplace. Server ops + moderation = off-mission. Cookbook ships in-tree.
  • Multi-user / team agents. Violates "one window, one writer." This product is for the single author; collaboration belongs to a different product.
  • Copilot-style ghost-text autocomplete. Different brand. Ghost-text dilutes the writer's voice; our agents work at vault granularity instead, with batched reviewable writes.

Upgrade notes

  • No file-format changes. Your existing .md files, AutoGit history, sync setup, BYOK keys all carry over untouched.
  • Agent Panel auto-enables on first launch. v3.6.x users had a hidden showAgentPanel: false from the v4-beta scaffolding period; a one-time migration flips it on so you actually see the marquee feature. Toggle off via ⌘⇧P → View: Toggle Agent Panel if you don't want it.
  • Settings layout adds Recipes and Cost meter tabs under Integrations. Existing settings keep their previous tabs.
  • The MCP server (solomd-mcp) gained a --workspace flag (repeatable). Older MCP clients with a single workspace argument keep working unchanged; the federation behavior is opt-in.

🔮 What's next

The 5 pillars + quality bar are the headline drop. The v4.x and beyond open directions on the roadmap: a sandboxed scripting API, a CLI v2 (rewrite / commit / semantic search / recipe-trigger from terminal), and the long-deferred "should SoloMD become a business?" question (paid sync — original v3.0 question, still unanswered, no engineering until decided).

Thanks to everyone who filed issues, opened PRs, and ran the v4-beta builds through real vaults during the quiet phase. v4.0 shipped because dogfooding caught the bugs that integration tests didn't. Earlier: browse the blog →

Comments & feedback

Comments live on GitHub Discussions — sign in once with your GitHub account.

Comments load from GitHub Discussions. If you see this message instead, the maintainer has not finished the one-time giscus.app setup yet — see web/COMMUNITY-SETUP.md.

Open on GitHub Discussions →