Obsidian Vault
Deterministic Obsidian vault edits without approval-prone shell/Python by default.
Obsidian Knowledge Base
Vault path: {{HOME}}/obsidian-vault
Use OpenClaw native file tools first: read, edit, write, and apply_patch.
Use shell commands only when the task genuinely requires command output that native tools cannot provide. Never use shell heredocs or inline Python for routine vault edits.
Approval-safe operating rule
Routine note and Todo work must not require Telegram approval prompts.
Preferred order:
readthe relevant absolute file path.- Make deterministic exact-text changes with
edit. - Use
writeonly when creating a new note or replacing a fully inspected/generated file. - Use
apply_patchonly when multiple vault files need coordinated deterministic changes. - Use
execonly as a last resort for searches, lint checks, or git/status operations; avoid it for content mutation unless Ben explicitly asks or the native tools cannot do the job.
Important: /usr/bin/obsidian is not a usable Obsidian.md vault CLI on this host. It is the npm package obsidian-cli v0.5.1 for ObsidianQA test-run imports into Obsidianqa.com, requiring API credentials. Do not use it for unattended Markdown vault edits or note maintenance.
Do not run:
python - <<'PY',python3 - <<'PY',cat <<EOF,tee <<EOF, or any other shell heredoc.- Inline Python/Node/Ruby/Perl one-liners to edit markdown when
editorwritecan do it. - Broad
find/lsdiscovery for normal note updates.
If exec approval is triggered, stop and switch to native file tools when possible instead of retrying variations of the same command.
Working rules
- Always work inside
{{HOME}}/obsidian-vault, never in the workspace. - Never read, edit, create, or delete anything under
Wiki/Kip/— that folder is managed by thememory-wikiplugin. - Read a note before editing it.
- Prefer known absolute paths for root files such as
{{HOME}}/obsidian-vault/Todo.mdand{{HOME}}/obsidian-vault/Ideas.md. - For targeted search, prefer native
readof likely files first. Useexec+rgonly when the target file is genuinely unknown. - Use the existing category structure: Work, Teaching, Home, Open Source.
- Keep filenames descriptive, because the filename is the note title.
- Do not delete notes unless Ben explicitly asks for deletion.
- Use wikilinks like
[[Note Name]]when adding references inside notes.
Folder map
{{HOME}}/obsidian-vault/
├── Archive/
├── Documents/
│ ├── Work/
│ ├── Teaching/
│ ├── Home/
│ └── Open Source/
├── Wiki/
│ └── Kip/ ← OFF LIMITS (memory-wiki plugin)
├── Ideas.md
├── Todo.md
└── README.md
Search
Use targeted search instead of browsing the whole vault.
Approval-safe approach:
- If the request names Todo, Ideas, or a likely note path, read that file directly.
- If the path is unknown but the note title is clear, infer the likely path under
Documents/<category>/and read it. - Only then use
execwithrgfor search.
When shell search is necessary, keep it read-only and narrow:
rg -il "search terms" {{HOME}}/obsidian-vault/ --glob '*.md' --glob '!Wiki/Kip/**'
List notes only when needed, and exclude Wiki/Kip/:
find {{HOME}}/obsidian-vault -name '*.md' -not -path '*/.*' -not -path '{{HOME}}/obsidian-vault/Wiki/Kip/*'
Create or edit notes
When creating a new note, use an absolute path under the vault.
Use this frontmatter template when creating notes:
---
created: '<ISO timestamp>'
modified: '<ISO timestamp>'
---
# Title
When editing a note:
- Read the file first.
- Make the smallest sensible deterministic edit.
- Prefer
editwith exact old/new text. If multiple nearby changes are needed, merge them into one replacement. - Update
modifiedif frontmatter exists. - Do not add frontmatter to older notes unless Ben asks or you are creating the note.
- Verify by reading the changed lines back. Use git status/commit only when explicitly requested or already part of the workflow.
Todo rules
Todo.md is the root task list.
Life-area sections:
## Work## Home## Open Source## Teaching
Inside ## Work, keep:
### High Priorityfor today's focus### Low Priorityfor active but non-urgent work
Ben's current Todo preference is a two-tier worklist: do not create a ### Medium Priority section unless he explicitly requests it. When redistributing existing Medium items, move each one to High or Low and remove the Medium heading.
Global Todo convention:
- Keep a single
## Donesection at the bottom ofTodo.mdfor all completed items across Work, Home, Open Source, and Teaching. - Do not use a
## Since Last Digestsection. The old buffer workflow is deprecated. - Completed items stay in
## Doneuntil Ben confirms a News Apps digest has been sent or explicitly asks to archive/sweep them. Then the digest workflow moves them intoArchive/Done-Items.mdwith a<!-- digest: YYYY-MM-DD -->marker and clears## Donefully. - Ensure each todo item has a relevant hashtag when possible. Use only canonical tags from
{{HOME}}/.openclaw/workspace/skills/news-apps-digest/taxonomy.yaml. - Run the
kip-todo-lintskill for hashtag validation when tags are new or suspect. Do not use ad hoc Python cleanup for tag fixes. - Remove obvious typos and stray empty lines during routine cleanup, but do it with exact
editreplacements after readingTodo.md.
When Ben names today's priorities:
- Read
{{HOME}}/obsidian-vault/Todo.md. - Move those items into
### High Priorityusing exacteditreplacements. - Put the most urgent ones first.
- Treat high priority as current focus, not permanent importance.
- Read the affected section back to verify.
When Ben says something is done or asks to check it off:
- Read
{{HOME}}/obsidian-vault/Todo.md. - Mark the checkbox as complete.
- Move the item to the bottom
## Donesection. - Ensure no blank lines remain after moving items.
- Verify by reading the affected active section and
## Done. - Do not leave checked items in active sections.
- After any successful Todo.md change, automatically refresh the pinned Todo dashboard from the updated file before reporting completion. If the dashboard refresh fails, report the vault change and the refresh failure separately.
Do not write to Archive/Done-Items.md from this skill unless Ben explicitly asks to archive/sweep completed items after a digest.
When work is no longer urgent, move it to ### Low Priority.
Todo dashboard workflow
The pinned Todo dashboard is a display-only snapshot of {{HOME}}/obsidian-vault/Todo.md; its bullets are not write-through controls. After every successful Todo edit—adding, moving, completing, reprioritizing, or other list change—automatically update the stable dashboard widget so it matches the note before reporting completion. The dashboard's Refresh button sends a chat request to rebuild the snapshot from the current Todo file.
Ideas rules
Ideas.md is the single root list for future work.
- Keep ideas under the matching category heading.
- Keep idea entries short and scannable.
- If an idea becomes active, move it into
Todo.md.
Documents rules
Documents/ holds longer-lived notes.
- Use
Documents/Work/for work notes. - Use
Documents/Teaching/for teaching notes. - Use
Documents/Home/for home notes. - Use
Documents/Open Source/for open source notes. - Keep subfolders when they are already useful, like
Documents/Teaching/CUNY/. - Put reference notes, planning notes, and support material in
Documents/, not inTodo.mdorIdeas.md.
Periodic review cues
- Daily: Correct typos, clean up misformatted notes, ensure relevant canonical hashtags, remove empty lines, and move completed items to the bottom
## Donesection inTodo.mdusing native file tools. Runkip-todo-lintif any new or suspect tags appear. - After Ben says a News Apps digest has been sent, sweep
## DoneintoArchive/Done-Items.mdwith that digest date marker, then leave## Doneempty. - Monthly: review
Ideas.mdand category notes inDocuments/. - Quarterly: archive stale notes and simplify the vault structure where needed.
Failure handling
If a vault operation triggers an approval prompt unexpectedly:
- Do not retry the same task with another shell/Python variation.
- Explain briefly that the shell path hit approval.
- Switch to
read/edit/writeif possible. - Ask Ben only if native tools cannot complete the task safely.
