Design patterns from Obsidian + Claude session (2026-05-24) #1

Open
opened 2026-05-24 08:20:12 +00:00 by fkrebs · 0 comments
Owner

Captured while Claude (via MCP obsidian server) worked extensively in Notizen/ on 2026-05-24. These are first-look patterns Nexa should adopt when writing back to the user's surfaces (Memos, Obsidian, Nextcloud). Not bugs — design input for Phase 1–2.

1. Write-back location: merge into existing, never parallel

Claude's first instinct was to create Work/Journal/Claude Edits/YYYY-MM-DD.md (parallel tree). User corrected: append a ## 🤖 Claude edits section into the existing daily note at Work/Journal/YYYY/MM/YYYY-MM-DD.md.

Nexa rule: any AI write-back lands in the user's existing structure (daily note, project note, area page). Use a marked section header (## 🤖 Nexa, etc.) so the user can read top-to-bottom and see AI activity in context. Never create a parallel *.AI/ or *.Nexa/ tree.

2. Convention auto-detection — don't impose, observe

User keeps assets in .assets/ (hidden — to declutter the Obsidian file tree). Default-aware tools would write into assets/. After today's link batch-fix, 234 links across 41 files had to be rewritten because the wrong convention was used historically.

Nexa rule: before writing into the vault, sniff conventions from a sample of recent notes (attachment dir, frontmatter style, daily-note path format, language). Cache the inferred profile per-vault.

3. Dry-run + diff before destructive bulk ops

The link rewriter ran --dry first, printed a 30-line sample, then user could OK. Same for the Work / Work 1 merge (presented mtime comparison table before any mv).

Nexa rule: any operation touching > N (suggest N=3) user notes must produce a preview the user can read in Memos (or a dedicated Nexa-review note) before applying. Audit log of what changed, with rollback.

4. Idempotent writes + Nextcloud collision tolerance

When the user resynced via Option A (clean-pull), Nextcloud renamed the incoming Work/ to Work 1/ because a local Work/ already existed. This is standard NC behaviour. Any Nexa write loop must handle it.

Nexa rule: writes must be idempotent (re-running yields same state). On collision, prefer reconcile-then-merge over both-versions. Detect 1/ 2/ suffixes as conflict signals to surface.

5. Secret-aware: vault is NOT a secrets store

Grep across vault found 32 plaintext secrets (Anthropic API key, Gemini, NC AIO passphrase, etc.). User's habit is paste-into-note. Nexa workflows that ingest from Memos / Karakeep / mail must detect and flag secrets, never re-write or re-embed them.

Nexa rule:

  1. On ingest: regex sweep for sk-, AIza, Bearer, password: etc. → tag the memo, do NOT push to embeddings until reviewed.
  2. Produce a per-week audit note (pattern: Home/Homelab/Secrets to Move.md created today) tracking what needs to move to Vaultwarden/Infisical.

6. Aggregation across self-hosted tools

Key insight surfaced when the user audited Obsidian plugins: Karakeep, Paperless, Memos, Immich each hold pieces of the user's thinking. Today's plugin research recommended Hoarder Sync, Paperless plugin, Immich Picker, Memos Sync — all to pull these into the vault.

Nexa rule: this is exactly Nexa's job from the other direction — instead of N plugins each polling, run one n8n flow per source, normalise into a write-back schema (frontmatter source: karakeep, source_id: ..., ingested_at: ...), and write into a topic-routed location (/Inbox/karakeep/, /Inbox/paperless/, etc.). The user then triages weekly.

7. Capture surface = Inbox.md (root)

User has a single Inbox.md at vault root for capture. Matches Memos' role as Nexa's mouth. QuickAdd plugin recommendation today closed the loop for Android share-target.

Nexa rule: treat Inbox.md (and Memos itself) as the canonical "unsorted" surface. Workflows triage from there, never to there (avoids overflow loops).

8. Cruft cleanup is a recurring need

Vault had: empty notes, dup folder pairs after sync collision, stale plugin data folders (.smart-env/, .copilot/, BMO/ from removed plugins), 7 fullwidth-slash filenames, 141 orphan notes.

Nexa rule: schedule a weekly "vault hygiene" n8n flow → output a markdown report into the next-Monday daily note. Items: empty notes ≥ 30d, orphans w/ no edit for ≥ 60d, plugin-data-dirs for plugins not in community-plugins.json, MKCOL-style sync conflicts.

9. Daily-note as agent log + user log

Claude's session-end summary now lives in the user's daily note (## 🤖 Claude edits). Future Claude sessions will append. Pattern works for Nexa.

Nexa rule: Nexa adds its own section ## 🧠 Nexa activity to the daily note for: classifications made (Work/Personal counts), tasks created, memos archived, embeddings refreshed. User opens daily note → sees both human + AI activity in one place.


Next concrete actions for Nexa

  • Implement convention-sniffer (pattern #2): n8n workflow that reads 20 recent notes, detects attachment-dir, daily-note path, frontmatter style.
  • Secret-detection node (pattern #5): regex pre-filter before any Memos→embedding flow.
  • Karakeep / Paperless / Immich ingest flows with shared frontmatter schema (pattern #6).
  • Weekly vault-hygiene report flow (pattern #8).
  • Standardise on the daily-note section pattern (## 🧠 Nexa activity) for write-back (patterns #1 + #9).

Referenced session artifacts (in vault):

  • Work/Journal/2026/05/2026-05-24.md — full session log
  • Home/Homelab/Secrets to Move.md — pattern #5 example output

Referenced infrastructure:

  • Obsidian MCP server: https://mcp.nuclide.systems/obsidian/mcp
  • Vault path (UNAS): /var/nfs/shared/storage/services/nextcloud/fkrebs@nucli.de/files/Notizen
Captured while Claude (via MCP `obsidian` server) worked extensively in `Notizen/` on 2026-05-24. These are **first-look patterns** Nexa should adopt when writing back to the user's surfaces (Memos, Obsidian, Nextcloud). Not bugs — design input for Phase 1–2. ## 1. Write-back location: merge into existing, never parallel Claude's first instinct was to create `Work/Journal/Claude Edits/YYYY-MM-DD.md` (parallel tree). User corrected: append a `## 🤖 Claude edits` section into the existing daily note at `Work/Journal/YYYY/MM/YYYY-MM-DD.md`. **Nexa rule:** any AI write-back lands in the user's existing structure (daily note, project note, area page). Use a marked section header (`## 🤖 Nexa`, etc.) so the user can read top-to-bottom and see AI activity in context. **Never** create a parallel `*.AI/` or `*.Nexa/` tree. ## 2. Convention auto-detection — don't impose, observe User keeps assets in `.assets/` (hidden — to declutter the Obsidian file tree). Default-aware tools would write into `assets/`. After today's link batch-fix, 234 links across 41 files had to be rewritten because the wrong convention was used historically. **Nexa rule:** before writing into the vault, sniff conventions from a sample of recent notes (attachment dir, frontmatter style, daily-note path format, language). Cache the inferred profile per-vault. ## 3. Dry-run + diff before destructive bulk ops The link rewriter ran `--dry` first, printed a 30-line sample, then user could OK. Same for the `Work` / `Work 1` merge (presented mtime comparison table before any `mv`). **Nexa rule:** any operation touching > N (suggest N=3) user notes must produce a preview the user can read in Memos (or a dedicated Nexa-review note) before applying. Audit log of what changed, with rollback. ## 4. Idempotent writes + Nextcloud collision tolerance When the user resynced via Option A (clean-pull), Nextcloud renamed the incoming `Work/` to `Work 1/` because a local `Work/` already existed. This is standard NC behaviour. Any Nexa write loop must handle it. **Nexa rule:** writes must be idempotent (re-running yields same state). On collision, prefer reconcile-then-merge over both-versions. Detect ` 1/` ` 2/` suffixes as conflict signals to surface. ## 5. Secret-aware: vault is NOT a secrets store Grep across vault found 32 plaintext secrets (Anthropic API key, Gemini, NC AIO passphrase, etc.). User's habit is paste-into-note. Nexa workflows that ingest from Memos / Karakeep / mail must detect and flag secrets, never re-write or re-embed them. **Nexa rule:** 1. On ingest: regex sweep for `sk-`, `AIza`, `Bearer`, `password:` etc. → tag the memo, do NOT push to embeddings until reviewed. 2. Produce a per-week audit note (pattern: `Home/Homelab/Secrets to Move.md` created today) tracking what needs to move to Vaultwarden/Infisical. ## 6. Aggregation across self-hosted tools Key insight surfaced when the user audited Obsidian plugins: Karakeep, Paperless, Memos, Immich each hold pieces of the user's thinking. Today's plugin research recommended Hoarder Sync, Paperless plugin, Immich Picker, Memos Sync — all to pull these into the vault. **Nexa rule:** this is exactly Nexa's job from the other direction — instead of N plugins each polling, run one n8n flow per source, normalise into a write-back schema (frontmatter `source: karakeep`, `source_id: ...`, `ingested_at: ...`), and write into a topic-routed location (`/Inbox/karakeep/`, `/Inbox/paperless/`, etc.). The user then triages weekly. ## 7. Capture surface = `Inbox.md` (root) User has a single `Inbox.md` at vault root for capture. Matches Memos' role as Nexa's mouth. QuickAdd plugin recommendation today closed the loop for Android share-target. **Nexa rule:** treat `Inbox.md` (and Memos itself) as the canonical "unsorted" surface. Workflows triage *from* there, never *to* there (avoids overflow loops). ## 8. Cruft cleanup is a recurring need Vault had: empty notes, dup folder pairs after sync collision, stale plugin data folders (`.smart-env/`, `.copilot/`, `BMO/` from removed plugins), 7 fullwidth-slash filenames, 141 orphan notes. **Nexa rule:** schedule a weekly "vault hygiene" n8n flow → output a markdown report into the next-Monday daily note. Items: empty notes ≥ 30d, orphans w/ no edit for ≥ 60d, plugin-data-dirs for plugins not in `community-plugins.json`, MKCOL-style sync conflicts. ## 9. Daily-note as agent log + user log Claude's session-end summary now lives in the user's daily note (`## 🤖 Claude edits`). Future Claude sessions will append. Pattern works for Nexa. **Nexa rule:** Nexa adds its own section `## 🧠 Nexa activity` to the daily note for: classifications made (Work/Personal counts), tasks created, memos archived, embeddings refreshed. User opens daily note → sees both human + AI activity in one place. --- ## Next concrete actions for Nexa - [ ] Implement convention-sniffer (pattern #2): n8n workflow that reads 20 recent notes, detects attachment-dir, daily-note path, frontmatter style. - [ ] Secret-detection node (pattern #5): regex pre-filter before any Memos→embedding flow. - [ ] Karakeep / Paperless / Immich ingest flows with shared frontmatter schema (pattern #6). - [ ] Weekly vault-hygiene report flow (pattern #8). - [ ] Standardise on the daily-note section pattern (`## 🧠 Nexa activity`) for write-back (patterns #1 + #9). Referenced session artifacts (in vault): - `Work/Journal/2026/05/2026-05-24.md` — full session log - `Home/Homelab/Secrets to Move.md` — pattern #5 example output Referenced infrastructure: - Obsidian MCP server: `https://mcp.nuclide.systems/obsidian/mcp` - Vault path (UNAS): `/var/nfs/shared/storage/services/nextcloud/fkrebs@nucli.de/files/Notizen`
Sign in to join this conversation.
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: fkrebs/nexa#1