From osdu
Use when reading from, writing to, or organizing the OSDU brain Obsidian vault — the project's long-term memory and knowledge base. Trigger this skill whenever the user mentions the vault, brain, daily notes, daily briefing, reports, knowledge base, decision records, incident reports, dependency reports, QA reports, meeting notes, architecture notes, or asks to "remember", "store", "log", or "write up" anything related to project operations. Also trigger when generating MR summaries, pipeline analysis, RCA write-ups, dependency audits, or any content destined for the brain vault. Use when the user says "vault", "brain", "daily note", "remember this", "store this", "log this", "write up", or references knowledge base operations. Not for: ad-hoc chat answers, one-time commands, or information already in git history.
How this skill is triggered — by the user, by Claude, or both
Slash command
/osdu:brainThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
The vault location is determined by:
references/session-digest.mdreferences/templates.mdscaffold/templates/architecture-note.mdscaffold/templates/daily-note.mdscaffold/templates/decision-record.mdscaffold/templates/decision.mdscaffold/templates/dependency-report.mdscaffold/templates/goal.mdscaffold/templates/incident-report.mdscaffold/templates/meeting-note.mdscaffold/templates/qa-report.mdscaffold/templates/report-note.mdThe vault location is determined by:
$OSDU_BRAIN environment variable (if set)~/.osdu-brainAll paths below use $OSDU_BRAIN to mean the resolved location.
The $OSDU_BRAIN directory is an Obsidian vault that serves as persistent, human-readable
project memory. The plugin provides the scaffold (directory structure, templates, Obsidian
config); content accumulates per-user over time.
Check if the vault exists and QMD is indexed:
ls $OSDU_BRAIN/00-inbox/ 2>/dev/null && echo "vault exists" || echo "vault not found"
If the vault exists, use the QMD MCP server (qmd collection: brain) for all searches
before writing — this prevents duplicate notes and surfaces related content.
If the vault does not exist, run the initialization below.
When the vault does not exist and vault access is needed, or when the user says "init brain", "setup brain", or "create vault":
$OSDU_BRAIN/
├── 00-inbox/
├── 01-goals/
├── 02-projects/
├── 03-knowledge/
│ └── decisions/
├── 04-reports/
├── attachments/
└── templates/
scaffold/templates/ into $OSDU_BRAIN/templates/scaffold/obsidian/ into $OSDU_BRAIN/.obsidian/scaffold/Welcome.md into $OSDU_BRAIN/00-inbox/Welcome.mdscaffold/.gitignore into $OSDU_BRAIN/.gitignoreAfter initialization, report what was created and suggest opening in Obsidian.
$OSDU_BRAIN/
+-- 00-inbox/ # Landing zone — new notes and daily briefings
+-- 01-goals/ # Quarterly objectives and key results
+-- 02-projects/ # Project config notes (one per project/platform)
+-- 03-knowledge/ # Durable reference material, research, patterns
+-- 04-reports/ # Generated reports (QA, dependency, incident, etc.)
+-- attachments/ # Images, diagrams, embedded files
+-- templates/ # Note templates (do NOT modify these)
Key rule: Notes start in 00-inbox/ unless they clearly belong in a specific folder.
The user curates and moves notes in Obsidian — place them correctly when
the destination is obvious (e.g., reports in 04-reports/, ADRs in 03-knowledge/).
Daily briefings always go in 00-inbox/.
Every note MUST have YAML frontmatter. Match the type field to the template being used.
Always include tags as an array. Use ISO dates (YYYY-MM-DD).
---
type: qa-report
date: 2026-03-05
tags: [report/qa, storage-service]
---
Templates live in $OSDU_BRAIN/templates/. Before creating any note, check if a matching
template exists and follow its structure. When creating notes from templates, adapt the
template's default tags to follow the nested taxonomy (e.g., replace tags: [osdu, qa]
with tags: [report/qa, storage-service]). The available templates are:
| Template | Use For | Destination |
|---|---|---|
daily-note.md | Daily briefings with MR summaries | 00-inbox/ |
report-note.md | General reports | 04-reports/ |
qa-report.md | QA/test run results | 04-reports/ |
dependency-report.md | Dependency audits, CVE analysis | 04-reports/ |
incident-report.md | RCA, pipeline failures, outages | 04-reports/ |
decision-record.md | Architecture Decision Records | 03-knowledge/ |
decision.md | Lightweight decisions, agent observations | 03-knowledge/decisions/ |
architecture-note.md | System design, component docs | 03-knowledge/ |
meeting-note.md | Meeting minutes | 00-inbox/ |
goal.md | Quarterly OKRs | 01-goals/ |
For complete template field reference, see: Templates Reference
Write Markdown that renders well in Obsidian:
[[note-name]] to link between notes, [[note-name|display text]] for aliases#tag-name inline or tags: [a, b] in frontmatter (prefer frontmatter)> [!warning] Title
> Content here
Available types: note, abstract, info, tip, success, question, warning,
danger, bug, example, quote- [ ] task / - [x] doneYYYY-MM-DD.md (e.g., 2026-03-05.md)YYYY-MM-DD-descriptive-slug.md (e.g., 2026-03-05-storage-service-qa.md)descriptive-slug.md (e.g., spring-boot-3.2-migration-guide.md)adr-NNN-descriptive-slug.md (e.g., adr-001-use-avm-modules.md)descriptive-slug.md (e.g., use-cnpg-over-azure-postgres.md)Daily notes follow the daily-note.md template. When generating a daily briefing:
00-inbox/YYYY-MM-DD.md02-projects/ gets its own sectionWhen writing reports (QA, dependency, incident, etc.):
templates/04-reports/YYYY-MM-DD-descriptive-slug.md[[wiki-links]]Lightweight captured judgments — things the user or an agent decided that should persist.
Use decision.md (lightweight) when:
Use decision-record.md (ADR) when:
Do NOT create a decision note for:
Decision notes go in 03-knowledge/decisions/ using the decision.md template.
File naming: descriptive-slug.md (e.g., use-cnpg-over-azure-postgres.md).
For durable reference material (architecture patterns, research findings, how-to guides):
03-knowledge/descriptive-slug.mdtype: knowledge or a more specific type in frontmatterThe vault's power comes from connections between notes. When creating content:
02-projects/ if one existsThis vault serves as the central brain for a platform with 50+ service repos. Key patterns:
service: storage-service)[!NNN](web_url) format in tables04-reports/ with findings organized by service02-projects/ that serves as a hub linking to relevant reports, decisions, and knowledgeEvery agent (CIMPL, OSDU) must follow these rules when writing to the vault. The vault is a curated knowledge graph — not a log dump. Protect its signal-to-noise ratio.
Before creating a vault note, pass through this filter:
1. Did the user explicitly ask to store this? → YES → Write it.
2. Is this durable knowledge (useful in 30+ days)? → NO → Keep in chat.
3. Does a note on this topic already exist? → YES → Update it, don't duplicate.
4. Is this raw output (logs, command dumps, traces)? → YES → Don't write. Summarize instead.
5. Does this represent a decision, pattern, or root cause? → YES → Write it.
Write — decisions, patterns, root causes, research findings, incident post-mortems, architectural insights, recurring problems, cross-repo observations.
Don't write — one-off answers, raw CLI output, ephemeral debugging steps, status checks, information the user didn't ask to preserve, anything already captured in git history or CI logs.
When in doubt: answer in chat, offer to store. ("Want me to put this in the vault?")
Tags are the primary way agents navigate the vault. Poor tagging makes notes invisible to future sessions. Every note must have at least two tags from different categories.
Tag structure: category + specificity.
# GOOD — two categories, one specific
tags: [incident, storage-service, pipeline]
# GOOD — nested tags for hierarchy
tags: [report/qa, storage-service]
# BAD — only one generic tag
tags: [report]
# BAD — too many, dilutes signal
tags: [report, qa, service, storage, pipeline, azure, aks, critical, 2026]
Nested tags use / separator for hierarchy. Obsidian renders these as collapsible
groups in the tag pane:
| Parent | Children | Use For |
|---|---|---|
report/ | report/qa, report/dependency, report/incident, report/rca | Report subtypes |
platform/ | platform/storage, platform/search, platform/indexer | Service-specific platform notes |
infra/ | infra/aks, infra/terraform, infra/networking | Infrastructure topics |
decision/ | decision/architecture, decision/tooling, decision/process | Decision subtypes |
Tagging checklist (apply in order):
daily, incident, adr, architecture, or nested report/*)storage-service, terraform, spring-boot)critical, draft, resolved)The vault is not a scratchpad. These do NOT belong:
| Keep out of vault | Why | Where it belongs |
|---|---|---|
Raw kubectl / terraform output | Ephemeral, noisy | Chat response or CI logs |
| Single-question answers | No future recall value | Chat response |
| Intermediate debugging steps | Process, not outcome | Chat; write an incident note for the conclusion |
| Full MR diffs or code dumps | Already in git | Link to the MR instead |
| Speculative plans not yet decided | Premature, will rot | Chat; write an ADR when decided |
| Duplicate of an existing note | Dilutes the graph | Update the existing note |
Rule of thumb: If it wouldn't be useful to an agent starting a fresh session next week, it doesn't belong in the vault.
Before writing a new note, search for related existing notes. The vault's value comes from its connections, not its volume.
brain) to search for existing
notes on the same topic before creating a new one. Use both lexical (lex) and semantic
(vec) search. If a note exists, update it rather than creating a new file. When updating,
append a new dated section rather than replacing content — this preserves history while
keeping notes evergreen.[[wiki-link]] to a
related existing note (a project, a prior incident, a relevant ADR).02-projects/.01-goals/. Goals are the vault's "north star" — agents should
reference them when context is ambiguous.[[adr-003-cnpg-operator-strategy]] — want me to add a link?")When an agent writes a note based on external data (GitLab API, pipeline logs, CLI output),
include a source field in frontmatter so future readers know where the data came from:
---
type: qa-report
date: 2026-03-11
tags: [report/qa, storage-service]
source: glab pipeline, storage-service MR !456
---
This is not required for user-dictated notes or daily briefings (the source is obvious).
At the end of a session, capture a structured digest summarizing decisions, facts learned, and open threads. This creates episodic memory that helps future sessions pick up context.
Append to the current daily note (00-inbox/YYYY-MM-DD.md):
## Session Digest — HH:MM
### Context
What was being worked on (1-2 sentences)
### Decisions
- Key decisions made
### Facts Learned
- New information discovered
### Open Questions
- Threads to pick up later
[[wiki-links]] to reference vault notes mentioned in the sessionFull format reference: Session Digest Reference
Knowledge notes decay over time. The consolidation process flags stale notes and contradictions to keep the vault accurate.
source: human in frontmatter never decay (human-corrected knowledge)last-verified date (or git log fallback)| Field | Type | Purpose |
|---|---|---|
last-verified | YYYY-MM-DD | When the note was last confirmed accurate |
source | human / agent observation / free text | human = never decays |
When updating a knowledge note, set last-verified to today's date to reset its decay timer.
When a human explicitly corrects or confirms a note, set source: human.
uv run skills/consolidate/scripts/consolidate.py --dry-run
See the consolidate skill for the full consolidation protocol.
templates/ — these are the scaffold.obsidian/ config files — the user manages Obsidian settings#heading tags in frontmatter arrays (use plain strings: [qa, report] not [#qa, #report])npx claudepluginhub danielscholl/claude-osdu --plugin osduProvides persistent Obsidian vault memory for coding agents. Auto-orients sessions with TODOs and project overviews, supports lookup of notes/patterns, and writes discoveries using commands like init, lookup, note.
Organizes an Obsidian vault: adds documents with auto-categorization, restructures misplaced files, processes meeting notes, and runs health checks.
Manage a per-project .briefing/ knowledge base with Obsidian-compatible Markdown notes for sessions, decisions, learnings, and references.