raw-to-obsidian
Build and maintain the memory graph under memories/ from immutable sources. Obsidian syntax: .agents/skills/obsidian-markdown/SKILL.md.
Canonical structure
daily-raw/ # source transcripts — read only, never modify
daily-memory/ # distilled daily notes — read only, never modify
memories/ # agent-maintained memory graph (.md nodes)
memories/index.md # table of contents for memory pages
memories/log.md # append-only operation log for memory edits
plans/ # pending plans + post-execution audits (not graph nodes)
plans/YYYY-MM-DD-plan.md
plans/YYYY-MM-DD-audit.md
raw # source documents — read only, immutable, never modify
Graph model
- Node: one
.md file in memories/ = one durable concept, entity, process, source summary, Q&A capture, or index.
- Edge: one intentional
[[link]] to another memory page’s filename stem (treat these as memory links; Obsidian resolves by note name).
- Metadata: YAML frontmatter on every page (schema below).
- Backlinks: use Obsidian backlinks to judge connectivity; reduce orphans per Global rules.
Modes
| Mode |
Writes memories/? |
Focus |
| ingest |
Yes (after user alignment) |
Sources → summary + concept/entity/process nodes |
| lint |
No |
Memory graph + metadata + format compliance |
| audit |
No |
Same checks as lint, plus contradiction/outdated-risk report |
Confirm mode, source paths, and (for ingest) user alignment on focus before writing.
Node metadata (required on every memories/**/*.md)
| Key |
Rule |
id |
Filename stem, lowercase-hyphen (e.g. machine-learning for machine-learning.md) |
type |
One of: concept, entity, process, summary, qa, index |
tags |
Short topical tags (YAML list) |
sources |
List of contributing raw paths and/or memory pages |
last_updated |
YYYY-MM-DD HH:MM:SS |
status |
draft or stable |
Global rules
- Never modify
daily-raw/**, daily-memory/** or raw/**.
- Filenames:
lowercase-hyphen.md only; one primary topic per page; split when mixed.
- Plain language, short sections; meaningful
[[memory-links]] between pages.
- For unresolved links: if the link is important but the content isn't ready, create the file with status: draft and a "STUB" header.
- After any memory change: update
memories/index.md and append memories/log.md.
- If categorization is unclear, ask the user before writing.
- Factual claims in body: Citation rules (below).
Ingest workflow
Trigger: user asks for ingestion.
- Read the full scoped document(s) in
daily-raw/, daily-memory/ and raw/ (read-only).
- Share key takeaways and proposed focus with the user; align before writing.
- Create a note page: normalized name from source basename — strip final extension, lowercase, replace
. and _ with -, collapse duplicate hyphens → filename-note.md (e.g. 2026-05-08-raw.md → 2026-05-08-note.md).
- Set or refresh metadata on every touched node.
- Create/update
concept / entity / process nodes for major ideas (expect many nodes per source, often ~10–15).
- NOTE: Create new nodes only for distinct concepts that don't yet exist or require significant expansion; otherwise, update existing nodes.
- Resolve all broken
[[links]] (stub or unlink).
- Update
memories/index.md with new/changed pages and one-line descriptions.
- Append one entry to
memories/log.md: date, source(s), short change summary.
Citation rules (body text)
- Every factual claim cites a source immediately after:
(source: filename.ext) (relative path from vault root when needed).
- Conflicting sources: state the contradiction explicitly.
- No evidence: mark as needing verification.
- Keep citations in the body even when paths appear in
sources: frontmatter.
Lint / audit workflow (memory pages)
When asked to lint or audit memories/:
- Contradictions across pages.
- Orphan pages (no inbound
[[links]]).
- Named concepts lacking a dedicated page.
- Likely outdated claims (stale
last_updated, superseded sources).
- Metadata schema + Obsidian-format compliance.
- Unresolved
[[wikilinks]].
- Output a numbered list with concrete fixes.
Guardrails (summary)
- Allowed read:
daily-raw/**, daily-memory/**, raw/**, templates/**, memories/**, plans/**
- Allowed write:
memories/** (ingest/lint fixes); plans/** only for *-plan.md / *-audit.md artifacts per .agents/skills/raw-to-obsidian/REFERENCE.md
- Forbidden touch:
.obsidian/**, .git/**, .gitignore, .gitattributes
- High-risk trigger (deletes, drops, prod-like changes): follow .agents/skills/raw-to-obsidian/REFERENCE.md.
1---2name: raw-to-obsidian3description: Ingests read-only sources from `daily-raw` and `daily-memory` into interlinked `memories/` pages with enforced YAML metadata, body citations, `memories/index.md`, and append-only `memories/log.md`; stores pending high-risk plans and execution audits as dated files under `plans/`; lints or audits the memory graph. Use when the user invokes raw-to-obsidian, ingests memory from raw/daily notes, updates index or log, uses `plans/` for plan/audit pairs, validates metadata and links, or audits graph health.4---56# raw-to-obsidian78Build and maintain the **memory graph** under `memories/` from immutable sources. Obsidian syntax: [.agents/skills/obsidian-markdown/SKILL.md](../obsidian-markdown/SKILL.md).910## Canonical structure1112```text13daily-raw/ # source transcripts — read only, never modify14daily-memory/ # distilled daily notes — read only, never modify15memories/ # agent-maintained memory graph (.md nodes)16memories/index.md # table of contents for memory pages17memories/log.md # append-only operation log for memory edits18plans/ # pending plans + post-execution audits (not graph nodes)19plans/YYYY-MM-DD-plan.md20plans/YYYY-MM-DD-audit.md21raw # source documents — read only, immutable, never modify22```2324## Graph model2526- **Node:** one `.md` file in `memories/` = one durable concept, entity, process, source summary, Q&A capture, or index.27- **Edge:** one intentional `[[link]]` to another memory page’s filename stem (treat these as **memory links**; Obsidian resolves by note name).28- **Metadata:** YAML frontmatter on every page (schema below).29- **Backlinks:** use Obsidian backlinks to judge connectivity; reduce orphans per Global rules.3031## Modes3233| Mode | Writes `memories/`? | Focus |34|------|---------------------|--------|35| **ingest** | Yes (after user alignment) | Sources → summary + concept/entity/process nodes |36| **lint** | No | Memory graph + metadata + format compliance |37| **audit** | No | Same checks as lint, plus contradiction/outdated-risk report |3839Confirm **mode**, **source paths**, and (for ingest) **user alignment** on focus before writing.4041## Node metadata (required on every `memories/**/*.md`)4243| Key | Rule |44|-----|------|45| `id` | Filename stem, `lowercase-hyphen` (e.g. `machine-learning` for `machine-learning.md`) |46| `type` | One of: `concept`, `entity`, `process`, `summary`, `qa`, `index` |47| `tags` | Short topical tags (YAML list) |48| `sources` | List of contributing raw paths and/or memory pages |49| `last_updated` | `YYYY-MM-DD HH:MM:SS` |50| `status` | `draft` or `stable` |5152## Global rules5354- **Never** modify `daily-raw/**`, `daily-memory/**` or `raw/**`.55- Filenames: `lowercase-hyphen.md` only; **one primary topic** per page; split when mixed.56- Plain language, short sections; meaningful `[[memory-links]]` between pages.57- For **unresolved links:** if the link is important but the content isn't ready, create the file with status: draft and a "STUB" header.58- After **any** memory change: update `memories/index.md` and append `memories/log.md`.59- If categorization is unclear, **ask the user** before writing.60- Factual claims in body: **Citation rules** (below).6162## Ingest workflow6364**Trigger:** user asks for ingestion.65661. Read the **full** scoped document(s) in `daily-raw/`, `daily-memory/` and `raw/` (read-only).672. Share **key takeaways** and proposed focus with the user; **align before writing**.683. Create a **note** page: normalized name from source basename — strip final extension, lowercase, replace `.` and `_` with `-`, collapse duplicate hyphens → `filename-note.md` (e.g. `2026-05-08-raw.md` → `2026-05-08-note.md`).694. Set or refresh metadata on **every** touched node.705. Create/update `concept` / `entity` / `process` nodes for major ideas (expect **many** nodes per source, often ~10–15).71 - NOTE: Create new nodes only for distinct concepts that don't yet exist or require significant expansion; otherwise, update existing nodes.726. Resolve all broken `[[links]]` (stub or unlink).737. Update `memories/index.md` with new/changed pages and **one-line** descriptions.748. Append **one** entry to `memories/log.md`: date, source(s), short change summary.7576## Citation rules (body text)7778- Every factual claim cites a source immediately after: `(source: filename.ext)` (relative path from vault root when needed).79- Conflicting sources: state the contradiction explicitly.80- No evidence: mark as needing verification.81- Keep citations in the body even when paths appear in `sources:` frontmatter.8283## Lint / audit workflow (memory pages)8485When asked to lint or audit `memories/`:86871. Contradictions across pages. 882. Orphan pages (no inbound `[[links]]`). 893. Named concepts lacking a dedicated page. 904. Likely outdated claims (stale `last_updated`, superseded `sources`). 915. Metadata schema + Obsidian-format compliance. 926. Unresolved `[[wikilinks]]`. 937. Output a **numbered** list with **concrete fixes**.9495## Guardrails (summary)9697- **Allowed read:** `daily-raw/**`, `daily-memory/**`, `raw/**`, `templates/**`, `memories/**`, `plans/**` 98- **Allowed write:** `memories/**` (ingest/lint fixes); `plans/**` only for `*-plan.md` / `*-audit.md` artifacts per [.agents/skills/raw-to-obsidian/REFERENCE.md](REFERENCE.md#plans-folder) 99- **Forbidden touch:** `.obsidian/**`, `.git/**`, `.gitignore`, `.gitattributes` 100- **High-risk trigger** (deletes, drops, prod-like changes): follow [.agents/skills/raw-to-obsidian/REFERENCE.md](REFERENCE.md#high-risk-change-protocol).