Files
clawmates/skills/research/obsidian-vault-conventions.md
T
Omar SobhandClaude Opus 5 a2d7e3ea92
deploy / test (push) Successful in 4m4s
deploy / build (push) Successful in 1m45s
feat(skills): author the Continuous Research skills, and make its roles honest
The boot log has said `continuous_research — 4 role skills bound, 8 unresolved`
on every start. Those eight roles ran without the instructions their template
promised them, silently: `skills_loader` reports the miss and carries on.

Worse than the missing files was what the prompts described. v1 told the
harvester to sweep "RSS feeds, GitHub trending, HN front page, YouTube /
podcast RSS" — none of which exist. `harvest.rs` searches arXiv and nothing
else. A role prompt describing a machine that was never built is the failure
this codebase keeps paying for, so v2 describes the machine that exists.

Roles now match the pipeline: paper_reader (the harvest already ran; read the
manifest and the papers), signal_ranker (unchanged in spirit), script_writer
(the podcast half, which had no role at all).

Seven skills authored under skills/research/, kebab-case to match the loader —
team_template_loader.rs:177-181 documents the snake_case/kebab-case trap that
already unbinds skills elsewhere:

  arxiv-daily                  what the harvest guarantees, so an agent does
                               NOT re-search arXiv and corrupt the seen-set
  paper-to-project-relevance   name a file or roadmap item, or say "no bearing"
  duplicate-detection          the seen-set catches identity; this catches the
                               same work under a different id
  signal-to-noise-ranking      novelty/relevance/depth, and the two biases to
                               resist (recency up, inconvenience down)
  executive-summary-writing    what it is / why it matters / what to do — decide,
                               do not hedge
  obsidian-vault-conventions   the vault is a human's live workspace; never
                               main, never reorganise, hash the body not the file
  podcast-dialogue-writing     write for someone on a treadmill; the 10-70 char
                               highlight bound is the API's, not a style rule

`web_fetch` dropped from mcp_bundles: runtime_provision.rs binds every mission
claw to `["clawmates_door"]` and never reads that field, so declaring it
instructed roles to use a tool that never arrived. The prompts say `curl` via
Bash, which is what they actually have.

Boot now reports `continuous_research — 11 role skills bound`, with no
unresolved clause. 344 tests pass.

Co-Authored-By: Claude Opus 5 <[email protected]>
2026-08-17 14:44:03 -07:00

2.0 KiB

name, description, when_to_use, tags
name description when_to_use tags
obsidian-vault-conventions Writing into a live Obsidian vault a human also edits — frontmatter, links, paths, and what never to touch. You are committing notes, digests or scripts into the valhalla-vault repository.
research
conventions

The vault is somebody's live workspace

valhalla-vault is a real Obsidian vault a human edits and syncs continuously. It is not scratch space. Two consequences drive everything below.

Never commit to main

Mission work lands on the run's own branch. library.rs does this deliberately and only auto-merges when the change is provably additive — every file in git diff --name-status base...branch is an A. A rename or a delete is not additive and stops the merge.

That rule protects the human: an auto-merge can add a note beside their work, never rewrite it.

Stay in your folders

60 Papers/arxiv-<id>.md              one note per paper, written by the harvest
ContinuousResearch/<date>/...        one folder per run — yours

Do not reorganise, rename or "tidy" anything outside those. What looks like a stray file is usually load-bearing in someone's graph.

Frontmatter is the index

Obsidian queries it, so it must be parseable YAML and keys must stay stable:

---
date: 2026-08-17
type: research-digest
harvested: 23
surfaced: 4
---

Hash the body, not the file. Sync rewrites updated: and size_kb: on notes it touches; hashing the whole file reports phantom edits on notes nobody changed and makes "unchanged" meaningless.

[[wikilinks]] are the vault's native form — use them for internal references, plain markdown links for external URLs. A link to a note that does not exist yet is fine and idiomatic: it marks something worth writing.

source: is not identity

The vault uses source: for local provenance — often a path like /Users/…/Downloads/paper.pdf. It is not a citable identifier and must never be used as a dedup key. Identity is arxiv:<id>, version suffix stripped.