Install
$ agentstack add skill-onebrain-ai-onebrain-moc ✓ scanned · ✓ verified — works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ✓ Network access No
- ✓ Filesystem access No
- ✓ Shell / process execution No
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
About
Vault Portal
Creates or updates MOC.md at the vault root : a hybrid Map of Content with:
- AI zone: agent-written summary callout (note counts, focus note)
- Dataview zone: live queries for Tasks, Recently Modified, Projects, Areas, Knowledge, Resources, Bookmarks
- Static zone: user-maintained Pinned section (never overwritten by the agent)
Usage:
/moc: create or refresh MOC.md and open it in Obsidian
Step 1: Read vault configuration
Read onebrain.yml from the current working directory. If it cannot be read or parsed, stop immediately and tell the user: > "onebrain.yml exists but could not be parsed : aborting. Check onebrain.yml for syntax errors and try again. Error: [error]."
Store moc_path = {vault_root}/MOC.md.
Step 2: Scan vault for summary data
Collect the following using Glob to count .md files:
- projects_count :
.mdfiles under[projects_folder]/(recursive) - areas_count :
.mdfiles under[areas_folder]/(recursive) - knowledge_count :
.mdfiles under[knowledge_folder]/(recursive) - resources_count :
.mdfiles under[resources_folder]/(recursive) - inbox_count :
.mdfiles directly in[inbox_folder]/(non-recursive, direct children only) - focus_note : the single most recently modified
.mdfile across projects, areas, knowledge, and resources folders. Store its display name (filename without.mdextension) and its vault-relative path for use as a wikilink.
If a folder does not exist on disk, use count 0 for that folder : this is expected for new vaults.
If the Glob tool returns an error or cannot enumerate a folder that appears to exist, stop immediately and tell the user: > "Could not scan [folder] : MOC.md was not written. Error: [error]. Resolve the issue and try again."
Do not write MOC.md with potentially incorrect counts.
Step 3: Preserve existing Pinned section
If MOC.md exists:
- Read the file. If the read fails, stop immediately and tell the user:
> "Could not read existing MOC.md at [moc_path] : aborting to protect your Pinned section. Error: [error]. Resolve the file access issue and try again."
- Extract
created:from the frontmatter : store ascreated_date(fall back to today if absent) - Set
is_new_file = false - Find the line that starts with
## 📌 Pinned - Store everything from that line to the end of file as
pinned_content - If
## 📌 Pinnedis not found in the existing file, warn the user before continuing:
> "Warning: Pinned section (## 📌 Pinned) not found in existing MOC.md : the default placeholder will be used instead. Any content you added below the last recognized section header may not be preserved." Then use the default pinned block.
If MOC.md does not exist:
- Set
created_dateto today - Set
is_new_file = true - Use the default pinned block
Step 4: Write MOC.md
Write the complete file. Replace every placeholder in the template with actual values before writing.
Placeholder reference:
| Placeholder | Value | |------------|-------| | CREATED_DATE | preserved created: date or today | | TODAY | today's date (YYYY-MM-DD) | | PROJECTS_FOLDER | [projects_folder] | | AREAS_FOLDER | [areas_folder] | | KNOWLEDGE_FOLDER | [knowledge_folder] | | RESOURCES_FOLDER | [resources_folder] | | AGENT_FOLDER | [agent_folder] | | LOGS_FOLDER | [logs_folder] | | ARCHIVE_FOLDER | [archive_folder] | | PROJECTS_COUNT | projectscount | | AREAS_COUNT | areascount | | KNOWLEDGE_COUNT | knowledgecount | | RESOURCES_COUNT | resourcescount | | INBOX_COUNT | inboxcount | | FOCUS_LINK | [[vault-relative-path\|display-name]] of focusnote : e.g. [[01-projects/alpha/Project Alpha\|Project Alpha]]. Use : if no notes found. | | FIRST_RUN_LINE | If is_new_file is true: > 💡 Install the [Dataview plugin](https://github.com/blacksmithgu/obsidian-dataview) to activate live query sections. : otherwise remove this line entirely from the output; do not insert a blank line where it was. | | PINNED_CONTENT | preserved pinned section (or default below) |
Template:
`````markdown --- tags: [dashboard, moc] created: CREATED_DATE updated: TODAY ---
🧠 Vault Portal
> [!info] Agent Summary : updated TODAY > PROJECTSCOUNT projects : AREASCOUNT areas : KNOWLEDGECOUNT knowledge notes : RESOURCESCOUNT resources : INBOXCOUNT inbox items > 🔺 Focus: FOCUSLINK FIRSTRUNLINE
⚡ Tasks
not done
path does not include LOGS_FOLDER
path does not include ARCHIVE_FOLDER
due before in 8 days
sort by priority
sort by due
🕐 Recently Modified
TABLE file.mtime AS "Modified"
FROM ""
WHERE !startswith(file.folder, "LOGS_FOLDER") AND !startswith(file.folder, "AGENT_FOLDER") AND !startswith(file.folder, "ARCHIVE_FOLDER") AND file.name != "MOC" AND file.name != "TASKS"
SORT file.mtime DESC
LIMIT 10
🚀 Projects
LIST
FROM "PROJECTS_FOLDER"
SORT file.mtime DESC
🗂 Areas
LIST
FROM "AREAS_FOLDER"
SORT file.name ASC
🧠 Knowledge
TABLE length(rows) AS "Notes"
FROM "KNOWLEDGE_FOLDER"
GROUP BY file.folder
SORT key ASC
📚 Resources
LIST
FROM "RESOURCES_FOLDER"
SORT file.mtime DESC
🔖 Bookmarks
[[Bookmarks]] : saved URLs and references.
PINNED_CONTENT
`````
Default PINNED_CONTENT (used when no existing Pinned section is found):
## 📌 Pinned
If the write fails, stop immediately and tell the user: > "Could not write MOC.md at [mocpath]. Error: [error]. Vault root used: [vaultroot]"
Step 5: Open in Obsidian and confirm
The shipped helper detects platform and emits the right URI (cygpath, percent-encoding, etc.). On macOS/Linux/MSYS just run it via Bash:
bash ".claude/plugins/onebrain/startup/scripts/open-in-obsidian.sh" "MOC.md"
In a PowerShell-only environment where bash is not on PATH, the helper still runs because Git for Windows / WSL ships bash.exe on PATH alongside Obsidian on Windows; if it genuinely is not present, skip the open step (the file is already saved) rather than constructing a URI by hand — manual URI assembly is exactly the pattern the helper exists to replace.
Then say: 🗺️ MOC.md updated. → Opening in Obsidian...
Known Gotchas
- MOC.md is overwritten on every
/mocrun. The user-editable## Pinnedsection is preserved by reading it first and re-inserting it. If the Pinned section is missing from the existing file, it will not appear in the new version — warn the user if no Pinned section is found during the read.
- Dataview must be installed in Obsidian for the query blocks to render. If the user reports that MOC.md shows raw code blocks instead of data, they need to install the Dataview community plugin.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: onebrain-ai
- Source: onebrain-ai/onebrain
- License: Apache-2.0
- Homepage: https://onebrain.run
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet — be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.