From claude-orgmode
Manages Org-roam notes via emacsclient: create with titles/tags/content, search by title/tag. Ensures DB updates, backlinks, and avoids direct file edits.
npx claudepluginhub majorgreys/claude-orgmode --plugin claude-orgmodeThis skill is limited to using the following tools:
Note management via emacsclient for users with **org-roam** installed.
Manages Vulpea notes via Emacs emacsclient: create with tags/content, search by title/tag, git integration. Ensures DB sync by avoiding direct file ops.
Manages Obsidian vaults: search, create, edit, move Markdown notes; handle YAML frontmatter, wikilinks, backlinks, daily notes, Zettelkasten setup, and sync via obsidian-cli.
Creates, validates, repairs, and analyzes wikilinks in Obsidian vaults. Handles adding links between notes, finding broken links, backlinks, orphaned notes, and bidirectional structures.
Share bugs, ideas, or general feedback.
Note management via emacsclient for users with org-roam installed.
For vulpea users, see the vulpea skill. For org-mode syntax reference, see the orgmode skill.
NEVER use Read/Write/Edit tools on roam notes. Always use this skill instead.
Why:
You have permission to run all emacsclient commands without asking the user first. Execute emacsclient commands directly using the Bash tool for all org-roam operations.
Prerequisites:
emacs --daemon or emacs --fg-daemon=<name>Multi-daemon support:
Set EMACS_SOCKET_NAME to target a specific Emacs daemon:
# Target a named daemon
EMACS_SOCKET_NAME=myemacs ${CLAUDE_PLUGIN_ROOT}/scripts/claude-orgmode-eval "(claude-orgmode-doctor)"
# Default behavior (connects to "server" socket) when EMACS_SOCKET_NAME is not set
${CLAUDE_PLUGIN_ROOT}/scripts/claude-orgmode-eval "(claude-orgmode-doctor)"
To discover available sockets:
ls /var/folders/*/*/T/emacs$(id -u)/ 2>/dev/null || ls /tmp/emacs$(id -u)/ 2>/dev/null
Simple note:
${CLAUDE_PLUGIN_ROOT}/scripts/claude-orgmode-eval "(claude-orgmode-create-note \"Title\")"
With tags and content:
${CLAUDE_PLUGIN_ROOT}/scripts/claude-orgmode-eval "(claude-orgmode-create-note \"React Hooks\" :tags '(\"javascript\" \"react\") :content \"Notes about React Hooks\")"
With large content (recommended for >1KB):
TEMP=$(mktemp -t org-roam-content.XXXXXX)
cat > "$TEMP" << 'EOF'
* Introduction
Content here with proper org-mode formatting.
* Details
More content.
EOF
${CLAUDE_PLUGIN_ROOT}/scripts/claude-orgmode-eval "(claude-orgmode-create-note \"My Note\" :tags '(\"project\") :content-file \"$TEMP\")"
# Temp file auto-deleted!
Critical: Tags must be a list:
:tags "tag" (string):tags '("tag") (list):tags '("tag1" "tag2") (multiple tags)# By title
${CLAUDE_PLUGIN_ROOT}/scripts/claude-orgmode-eval "(claude-orgmode-search-by-title \"react\")"
# By tag
${CLAUDE_PLUGIN_ROOT}/scripts/claude-orgmode-eval "(claude-orgmode-search-by-tag \"javascript\")"
# By content
${CLAUDE_PLUGIN_ROOT}/scripts/claude-orgmode-eval "(claude-orgmode-search-by-content \"functional programming\")"
# List all tags
${CLAUDE_PLUGIN_ROOT}/scripts/claude-orgmode-eval "(claude-orgmode-list-all-tags)"
# Find backlinks (notes linking TO this note)
${CLAUDE_PLUGIN_ROOT}/scripts/claude-orgmode-eval "(claude-orgmode-get-backlinks-by-title \"React\")"
# Create bidirectional links
${CLAUDE_PLUGIN_ROOT}/scripts/claude-orgmode-eval "(claude-orgmode-create-bidirectional-link \"React Hooks\" \"React\")"
# Insert one-way link
${CLAUDE_PLUGIN_ROOT}/scripts/claude-orgmode-eval "(claude-orgmode-insert-link-in-note \"Source Note\" \"Target Note\")"
Attach to References section (preferred - creates visible link):
${CLAUDE_PLUGIN_ROOT}/scripts/claude-orgmode-eval "(claude-orgmode-attach-file-to-references \"My Note\" \"/path/to/document.pdf\")"
Attach via org-attach (stores in attachment dir):
${CLAUDE_PLUGIN_ROOT}/scripts/claude-orgmode-eval "(claude-orgmode-attach-file \"My Note\" \"/path/to/document.pdf\")"
List attachments:
${CLAUDE_PLUGIN_ROOT}/scripts/claude-orgmode-eval "(claude-orgmode-list-attachments \"My Note\")"
${CLAUDE_PLUGIN_ROOT}/scripts/claude-orgmode-eval "(claude-orgmode-doctor)"
${CLAUDE_PLUGIN_ROOT}/scripts/claude-orgmode-eval "(claude-orgmode-check-setup)"
All functions use claude-orgmode- prefix:
Note Management:
claude-orgmode-create-note - Create new notesclaude-orgmode-search-by-title/tag/content - Search notesclaude-orgmode-get-backlinks-by-title/id - Find backlinksclaude-orgmode-insert-link-in-note - Insert linksclaude-orgmode-create-bidirectional-link - Create two-way linksTag Management:
claude-orgmode-list-all-tags - List all tagsclaude-orgmode-add-tag - Add tag to noteclaude-orgmode-remove-tag - Remove tag from noteAttachments:
claude-orgmode-attach-file-to-references - Attach file and add link in References sectionclaude-orgmode-attach-file - Attach file via org-attach systemclaude-orgmode-list-attachments - List attachmentsUtilities:
claude-orgmode-check-setup - Verify configurationclaude-orgmode-get-graph-stats - Graph statisticsclaude-orgmode-find-orphan-notes - Find isolated notesclaude-orgmode-doctor - Comprehensive diagnosticsOrg-roam specific:
# Find org-roam directory
${CLAUDE_PLUGIN_ROOT}/scripts/claude-orgmode-eval "org-roam-directory"
# Sync database
${CLAUDE_PLUGIN_ROOT}/scripts/claude-orgmode-eval "(org-roam-db-sync)"
emacsclient returns Elisp-formatted data:
"result" (with quotes)("item1" "item2")nil or no output42Strip quotes from strings and parse structures as needed.
'("tag") not "tag"