Guilherme Ceschiatti B. Moreira21 downloadsChat with Hermes Agent in Obsidian — with sessions, model & mode pickers, inline diffs, skills hub, memory review, and live subagent panels.
rea-hermes-studio)Hermes Studio AI chat, workspace assistant, and diff workbench brought seamlessly into Obsidian.md.
A standalone Obsidian plugin inspired by the VSCode Hermes Studio extension and patterns from Obsidian Copilot.
| AI Chat & Context Workbench | Learning & Skills Hub |
|---|---|
![]() |
![]() |
App, Vault, and WorkspaceLeaf:[[Note]]) and Obsidian URL scheme (obsidian://open?vault=...&file=...) generation.Hermes Studio: Open assistant modal).http://localhost:8080), API keys, model selections, and custom temperature settings.src/
├── core/
│ ├── hermes-bridge.ts # Bidirectional postMessage event protocol
│ ├── hermes-core.ts # State machine, chat history & engine
│ └── unified-diff-view.ts # LCS / Line diff visualizer & chunk applicator
├── host/
│ ├── note-tracker.ts # Active file watcher & selection listener
│ ├── obsidian-host.ts # VSCode Workspace/Window API shim for Obsidian
│ └── wikilink-resolver.ts # Markdown link & Obsidian URI handler
├── plugin/
│ ├── hermes-modal.ts # Floating pop-out modal view
│ ├── hermes-view.ts # Dockable Sidebar WorkspaceLeaf view
│ └── settings-tab.ts # Plugin settings UI in Obsidian options
├── webview/
│ ├── obsidian-theme-bridge.ts # Syncs Obsidian CSS vars into Webview Shadow DOM
│ └── svelte-mount.ts # Svelte 5 Webview component lifecycle mount
├── main.ts # Plugin entrypoint & lifecycle manager
└── types.ts # Protocol and Host type definitions
Clone this repository:
git clone https://github.com/6qat/rea-hermes-studio.git
cd rea-hermes-studio
Install dependencies:
npm install
Build the plugin:
npm run build
Run unit and integration tests:
npm test
hermes-studio folder in your Obsidian vault's plugin directory:mkdir -p /path/to/your/vault/.obsidian/plugins/hermes-studio
main.js, manifest.json, and styles.css into that directory:cp main.js manifest.json styles.css /path/to/your/vault/.obsidian/plugins/hermes-studio/
Hermes Studio: Open sidebar view - Opens or focuses the Hermes Studio assistant in the right sidebar.Hermes Studio: Open assistant modal - Displays the assistant in a modal overlay over your active note.Hermes Studio: Insert active note context - Sends current file content and highlighted text into the assistant session.Comprehensive test suites verify the host API shim, vault and adapter compliance, note tracking, diff generation, and WikiLink resolution:
npm test
All 11 tests across all test suites are automated with Vitest.
Bump version in manifest.json (and package.json), commit, then:
npm run release
The script tags the current version exactly as written in manifest.json (e.g. 0.6.11 — no v prefix) and pushes it, which triggers the release workflow. The plain tag is required: Obsidian's plugin release check looks for a GitHub release whose tag equals the manifest version exactly. Push exactly this one tag — extra duplicate tags fire duplicate workflow runs and create duplicate releases.
Hermes Studio is configured with "isDesktopOnly": true and adheres strictly to Obsidian's Developer Policies:
app.vault & app.vault.adapter):Vault and DataAdapter APIs. This preserves Obsidian's in-memory caching, atomic write safety, and full compatibility with Obsidian Sync.child_process):hermes acp): Spawns the local hermes CLI binary via child_process.spawn() to communicate with the local agent daemon over standard input/output (stdio) via the Agent Client Protocol (ACP). The CLI path is user-configurable in plugin settings (hermesStudio.path).git diff): Spawns git via child_process.spawnSync() exclusively with fixed argument arrays (["diff"] or ["diff", "--cached"]) inside Git-versioned vaults to display unified diff proposals.gnome-terminal, kitty, alacritty, Terminal.app) passing discrete command arguments strictly when the user requests interactive model setup (hermes model) or memory review (hermes /memory).args: string[]) directly to executables without shell interpretation (shell: false). No unvalidated shell strings or remote shell scripts are ever executed.fs / fs/promises):fs is used solely to interact with the external Hermes Agent configuration, memories, and skills located in the user's home directory (~/.hermes/ or $HERMES_HOME), and to verify the path of the local hermes CLI binary. No vault files are modified or read using raw node:fs.navigator.clipboard):MIT License. Inspired by Hermes Studio and Obsidian Copilot.