Pierre Awaragi57 downloadsWatch the system clipboard and insert new content into a pinned note at its cursor, even when Obsidian isn't focused.
Turn your clipboard into a live feed into any note — copy something, anywhere, and it lands at your cursor automatically. Built for capturing a stream of screenshots and snippets (e.g. live-noting a meeting) without ever switching back to Obsidian.
Desktop only. Clipboard polling relies on Electron's clipboard APIs, which aren't available on mobile — the plugin declares
isDesktopOnlyand won't install there.
Run Start watch mode from the command palette (Cmd/Ctrl P) with the note you want to capture into open and active. That's it — watch mode reuses your last-used content-type scope and text format, so this is the fast path for repeat use.
The status bar shows something like:
Clipboard Monitor: Meeting Notes — Text & Images — Callout
Copy anything matching the active scope — text or an image — and it's inserted at your cursor in the target note, formatted with the active template.
Run Start watch mode (choose settings) to pick the content-type scope and text format for this session before starting. Your choices become the new "last used" defaults for next time.
Run Stop watch mode, or just close, delete, or move the target note — any of those stops watch mode automatically, with a notice.
Bind a single hotkey to Toggle watch mode (Settings → Hotkeys) to start or stop with one key: it starts watch mode (using the last-used scope and format, same as Start watch mode) if it's currently stopped, or stops it if it's currently running. The dedicated Start watch mode, Start watch mode (choose settings), and Stop watch mode commands are still available if you'd rather bind them separately.
A clipboard icon in the left ribbon opens Start watch mode (choose settings) on click, whether or not watch mode is currently running — cancel the modal to leave a running session untouched, or confirm new settings to restart with them. Turn it off with the "Show ribbon icon" setting (see Settings); the change takes effect the next time the plugin loads.
Templates use {{content}} for the copied text (or an image's generated embed link) and {{time}} for the current time (HH:MM). Ships with:
| Format | Template |
|---|---|
| Raw | {{content}} |
| Bullet | - {{content}} |
| Timestamped | **{{time}}** — {{content}} |
| Callout | > [!note]\n> {{content}} |
Add, edit, delete, or reorder formats in Settings → Clipboard Monitor; a format applies to both text and images, so under Bullet, a captured image becomes - ![[Pasted image ....png]]. Reset to defaults restores the shipped four if you want to start over.
Open Settings → Clipboard Monitor to configure:
| Setting | Default | Description |
|---|---|---|
| Polling frequency | Moderate | Fast, Moderate, or Slow — how often the clipboard is checked. Faster notices new content sooner but uses more CPU. |
| Clear clipboard after image insert | Off | Clears the entire system clipboard (all formats) right after an image is saved and inserted. Re-copying the same image afterward is treated as new content and reinserted. |
| Text formats | 4 built-in | Managed list of insertion templates — add/edit/delete/reorder, or reset to defaults. |
| Debug logging | Off | Logs polling, dedupe, and insertion activity to the developer console, prefixed [Clipboard Monitor]. Takes effect immediately, even mid-session. |
| Show ribbon icon | On | Shows the left-ribbon shortcut icon. Takes effect the next time the plugin loads (e.g. after restarting Obsidian or toggling the plugin off and on). |
Target note, content-type scope, and text format are deliberately not global settings — they're chosen per watch-mode session and remembered as "last used."
The plugin UI is available in English (default), French, Spanish, and Arabic (right-to-left). Language is detected automatically from Obsidian's language setting.
To add a new language:
src/ts/i18n/locales/en.json to src/ts/i18n/locales/<code>.json (e.g. de.json)en.jsonsrc/ts/i18n/i18n.ts:import de from "./locales/de.json";
export const locales: Record<string, Partial<Translations>> = { en, fr, es, ar, de };
RTL_LOCALES in the same filenpm run buildmain.js, manifest.json, and styles.css from the latest release.obsidian/plugins/clipboard-monitor/# Install dependencies
npm install
# Copy .env.example and set your vault plugin path
cp .env.example .env
# Production build → dist/main.js
npm run build
# Development build (inline sourcemaps)
npm run dev
# Copy dist/ to your local vault plugin directory
npm run deploy
# Build + deploy in one step
npm run dev:deploy
# Rebuild + deploy whenever src/ changes
npm run dev:deploy:watch
# Remove dist/
npm run clean
# Lint / format / test
npm run lint
npm run format
npm test
Bump the version — choose patch, minor, or major:
npm run release:prepare patch
Updates package.json and manifest.json, then commits both as "chore: bump version to X.Y.Z".
Make your code changes and commit them:
git add -A && git commit -m "feat: ..."
Publish — pushes the branch, creates a bare version tag (e.g. 0.2.0), and pushes the tag:
npm run release
The tag push triggers the GitHub Actions workflow, which builds, tests, and publishes the release.
MIT