@ericrisco/rsc 0.1.34 → 0.1.35

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/README.md +20 -0
  2. package/manifest.json +1 -1
  3. package/package.json +1 -1
  4. package/skills/agent-eval/SKILL.md +1 -1
  5. package/skills/analyze/SKILL.md +1 -1
  6. package/skills/brand-voice/SKILL.md +1 -1
  7. package/skills/brand-voice/references/voice-guide-template.md +14 -0
  8. package/skills/building-agents/SKILL.md +2 -2
  9. package/skills/competitor-watch/SKILL.md +9 -4
  10. package/skills/competitor-watch/references/tracker-schema.md +19 -0
  11. package/skills/constitution/references/constitution-template.md +10 -0
  12. package/skills/content-engine/SKILL.md +1 -1
  13. package/skills/content-engine/references/brief-and-pipeline.md +15 -1
  14. package/skills/course-builder/references/grounding-and-scoping.md +23 -0
  15. package/skills/course-storytelling/references/learner-grounding.md +22 -2
  16. package/skills/decision-records/SKILL.md +14 -1
  17. package/skills/decision-records/references/templates.md +20 -0
  18. package/skills/design/references/brand-grounding.md +11 -1
  19. package/skills/harness/SKILL.md +3 -3
  20. package/skills/harness/references/daily-curation-automation.md +8 -6
  21. package/skills/harness/references/obsidian-scaffolding.md +16 -9
  22. package/skills/harness/references/wiki-article-template.md +31 -14
  23. package/skills/harness/references/wiki-index-template.md +7 -3
  24. package/skills/harness/references/wiki-protocol.md +120 -54
  25. package/skills/harness/references/wiki-worklog-template.md +5 -1
  26. package/skills/instagram-api/SKILL.md +8 -1
  27. package/skills/instagram-api/references/insights-metrics.md +8 -1
  28. package/skills/knowledge-ops/SKILL.md +9 -9
  29. package/skills/knowledge-ops/evals/cases.yaml +1 -1
  30. package/skills/knowledge-ops/references/gardening-playbook.md +18 -8
  31. package/skills/linkedin-api/SKILL.md +10 -1
  32. package/skills/linkedin-strategy/SKILL.md +12 -0
  33. package/skills/linkedin-strategy/references/wiki-records.md +27 -1
  34. package/skills/marketing/references/brand-grounding.md +22 -2
  35. package/skills/medium-strategy/SKILL.md +12 -0
  36. package/skills/medium-strategy/references/wiki-records.md +39 -1
  37. package/skills/medium-writing/SKILL.md +19 -0
  38. package/skills/plan/references/plan-template.md +12 -1
  39. package/skills/roast-me/tools/adapters/__pycache__/__init__.cpython-312.pyc +0 -0
  40. package/skills/roast-me/tools/adapters/__pycache__/base.cpython-312.pyc +0 -0
  41. package/skills/roast-me/tools/adapters/__pycache__/claude.cpython-312.pyc +0 -0
  42. package/skills/roast-me/tools/adapters/__pycache__/codex.cpython-312.pyc +0 -0
  43. package/skills/roast-me/tools/adapters/__pycache__/gemini.cpython-312.pyc +0 -0
  44. package/skills/roast-me/tools/adapters/__pycache__/registry.cpython-312.pyc +0 -0
  45. package/skills/shortform-packaging/SKILL.md +7 -2
  46. package/skills/shortform-packaging/references/package-templates.md +13 -2
  47. package/skills/shortform-strategy/SKILL.md +30 -6
  48. package/skills/shortform-strategy/references/learning-loop-template.md +9 -1
  49. package/skills/specify/references/spec-template.md +12 -1
  50. package/skills/tiktok-api/SKILL.md +6 -2
  51. package/skills/tiktok-api/references/wiki-schema.md +38 -4
  52. package/skills/verify/SKILL.md +11 -1
  53. package/skills/youtube-api/SKILL.md +7 -2
  54. package/skills/youtube-api/references/wiki-schema.md +25 -4
  55. package/skills/youtube-packaging/SKILL.md +10 -2
  56. package/skills/youtube-packaging/references/description-and-chapters.md +70 -2
  57. package/skills/youtube-strategy/SKILL.md +9 -2
  58. package/skills/youtube-strategy/references/wiki-records.md +39 -6
  59. package/skills/youtube-strategy/scripts/verify.sh +4 -0
  60. package/skills/youtube-thumbnails/SKILL.md +10 -5
  61. package/skills/youtube-thumbnails/references/experiment-log-format.md +28 -2
package/README.md CHANGED
@@ -256,6 +256,26 @@ The front door and the workspace brain.
256
256
  > self-improving wiki. It governs software *or* a whole company. **orient** is the
257
257
  > always-on compass that keeps a non-technical human oriented after every step.
258
258
 
259
+ > #### 📦 The `02-DOCS/` brain is now 100% Open Knowledge Format (OKF v0.1) conformant
260
+ >
261
+ > Google Cloud published the [**Open Knowledge Format**](https://github.com/GoogleCloudPlatform/knowledge-catalog/tree/main/okf)
262
+ > — a vendor-neutral standard for portable, agent-readable knowledge — built on the
263
+ > same Karpathy *LLM-wiki* pattern our `02-DOCS/` engine has used from day one. We
264
+ > independently converged on the same design, so adopting the standard cost almost
265
+ > nothing. As of now, **every `02-DOCS/wiki/` is a valid, portable OKF bundle**:
266
+ >
267
+ > - **Markdown + YAML frontmatter**, `type` on every concept doc, OKF-standard
268
+ > fields (`title`, `description`, `resource`, `tags`, `timestamp`).
269
+ > - **Standard markdown links** (not wikilinks) form the knowledge graph — any OKF
270
+ > consumer reads it, *and* it stays a native Obsidian vault (graph, backlinks,
271
+ > Properties, Bases). Same files, no export step.
272
+ > - **Reserved files** honored: `index.md` (no frontmatter) for navigation,
273
+ > `log.md` (newest-first, ISO 8601) for history.
274
+ >
275
+ > Tarball a `wiki/` and any OKF tool — including Google's own viewer — can read it.
276
+ > And the brain now **keeps your repo clean**: a loose file it ingests (a PDF at the
277
+ > root, anything in `inbox/`) is *moved* into `raw/`, never left as clutter.
278
+
259
279
  ### 📐 Spec-Driven Development
260
280
  Take a fuzzy intent to a shipped, verified change — phase by phase. `npx @ericrisco/rsc install --profile core`.
261
281
 
package/manifest.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "version": "0.1.34",
2
+ "version": "0.1.35",
3
3
  "counts": {
4
4
  "skills": 232
5
5
  },
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ericrisco/rsc",
3
- "version": "0.1.34",
3
+ "version": "0.1.35",
4
4
  "description": "Eric Risco's agent-skills catalog as a granular, self-recommending CLI installer.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -199,7 +199,7 @@ Pick by where the eval runs and what it must do. Versions as of 2026-06 — re-v
199
199
 
200
200
  ## Project grounding
201
201
 
202
- If the workspace has a `02-DOCS/` harness, record the eval policy in `02-DOCS/wiki/stack/evals.md`: dataset location, scorer mix, gate baseline file, judge model, and the failure modes covered. Index it in `02-DOCS/wiki/index.md` (the Knowledge map; root `CLAUDE.md` keeps only a short pointer). This is **recorded, not gated** — skip silently if there is no harness.
202
+ If the workspace has a `02-DOCS/` harness, record the eval policy in `02-DOCS/wiki/stack/evals.md`: dataset location, scorer mix, gate baseline file, judge model, and the failure modes covered. Write it as an OKF v0.1 wiki article per the harness [`wiki-article-template.md`](../harness/references/wiki-article-template.md): open with YAML frontmatter carrying a non-empty `type:` (use `type: stack`), `timestamp` in ISO 8601, and standard markdown links — never wikilinks. Index it in `02-DOCS/wiki/index.md` (the Knowledge map; root `CLAUDE.md` keeps only a short pointer). This is **recorded, not gated** — skip silently if there is no harness.
203
203
 
204
204
  ## verify.sh
205
205
 
@@ -112,7 +112,7 @@ Produce a single consistency report:
112
112
  3. **Findings table** — `# | Severity | Type | Artifact A (loc) | Artifact B (loc) | Conflict | Resolve in (phase)`.
113
113
  4. **Recommended routing** — group fixes by the phase that owns them (`clarify` for spec ambiguity, `plan` for missing architecture, `tasks` for a missing done-check, `constitution` if a principle itself is wrong).
114
114
 
115
- Write the report to `02-DOCS/wiki/sdd/analysis/<slug>.md` (create the dir if absent) and index it in `02-DOCS/wiki/index.md` (the Knowledge map; root `CLAUDE.md` keeps only a short pointer) under the `sdd/` topic, so the next phase and the harness can find it. The report is the artifact analyze owns — it is the *only* thing analyze writes. Per-run point-in-time; overwrite on re-run, the wiki keeps history.
115
+ Write the report to `02-DOCS/wiki/sdd/analysis/<slug>.md` (create the dir if absent) and index it in `02-DOCS/wiki/index.md` (the Knowledge map; root `CLAUDE.md` keeps only a short pointer) under the `sdd/` topic, so the next phase and the harness can find it. It is an OKF v0.1 wiki article: open it with YAML frontmatter carrying a non-empty `type:` (use `type: analysis`), a `timestamp` in ISO 8601, and standard markdown links — never wikilinks. The report is the artifact analyze owns — it is the *only* thing analyze writes. Per-run point-in-time; overwrite on re-run, the wiki keeps history.
116
116
 
117
117
  Adapt the rendered verbosity to the dial (L0 = table only; L3 = full walk-through). Do not log a decision to `decisions.md` — analyze decides nothing; the phase that resolves the finding logs its own decision.
118
118
 
@@ -150,7 +150,7 @@ Tone by context: onboarding=warm; error=plain+reassuring, no humor;
150
150
  success=light warmth, no hype; billing=precise+calm; legal=formal+exact.
151
151
  ```
152
152
 
153
- **Persist it.** Write the compiled guide under `02-DOCS/wiki/brand/voice-guide.md` and the voice-DNA block beside it, per the `harness` Karpathy-wiki convention (compiled brand articles under `02-DOCS/wiki/brand/`, raw user inputs under `02-DOCS/raw/brand/`). This is the exact study `marketing`, `landing-copy`, and `content-engine` read to ground their copy. A guide in a slide deck is invisible to them.
153
+ **Persist it.** Write the compiled guide under `02-DOCS/wiki/brand/voice-guide.md` and the voice-DNA block beside it, per the `harness` Karpathy-wiki convention (compiled brand articles under `02-DOCS/wiki/brand/`, raw user inputs under `02-DOCS/raw/brand/`). The persisted file is an OKF v0.1 wiki article: open it with YAML frontmatter carrying a non-empty `type:` (use `type: brand-voice`) — see the frontmatter block in [`references/voice-guide-template.md`](references/voice-guide-template.md). This is the exact study `marketing`, `landing-copy`, and `content-engine` read to ground their copy. A guide in a slide deck is invisible to them.
154
154
 
155
155
  ## Auditing for drift
156
156
 
@@ -2,6 +2,20 @@
2
2
 
3
3
  Fill every slot. Delete the instruction lines in italics before you ship. The finished file lives at `02-DOCS/wiki/brand/voice-guide.md`. A fully worked mini-example follows the blank template — copy its shape, not its content.
4
4
 
5
+ The persisted guide is an OKF v0.1 wiki article: it MUST open with YAML frontmatter carrying a non-empty `type`. Copy the block below verbatim to the top of `02-DOCS/wiki/brand/voice-guide.md`, fill the values, and set `timestamp` to the ISO 8601 datetime of the edit:
6
+
7
+ ```yaml
8
+ ---
9
+ type: brand-voice
10
+ title: <brand> — Voice & Tone Guide
11
+ description: How the <brand> brand sounds — traits, rules, dimensions, word bank, and AI voice-DNA.
12
+ tags: [brand-voice, tone-of-voice, voice-guide]
13
+ timestamp: YYYY-MM-DDTHH:MM:SSZ
14
+ topic: brand
15
+ status: stable
16
+ ---
17
+ ```
18
+
5
19
  ---
6
20
 
7
21
  ## Blank template
@@ -454,9 +454,9 @@ agent inherits the conventions instead of re-deriving them.
454
454
 
455
455
  1. **Find the article** `02-DOCS/wiki/stack/agents.md`, indexed in `02-DOCS/wiki/index.md` (the Knowledge map index; root `CLAUDE.md` points to it).
456
456
  2. **If missing or stale**, create/update it with the project's real choices — the provider(s) and model routing, where the provider adapter lives, tool/RAG conventions, the eval gates, and the observability backend —
457
- then index it in `02-DOCS/wiki/index.md` (the Knowledge map; root `CLAUDE.md` keeps only a short pointer to it).
457
+ then index it in `02-DOCS/wiki/index.md` (the Knowledge map; root `CLAUDE.md` keeps only a short pointer to it). Write it as an OKF v0.1 wiki article per the harness [`wiki-article-template.md`](../harness/references/wiki-article-template.md): open with YAML frontmatter carrying a non-empty `type:` (use `type: stack`), and use standard markdown links — never wikilinks.
458
458
  3. **Read it first on every use** and stay consistent; when a convention changes, update the
459
- article (bump its `Updated` date) in the same change.
459
+ article (bump its `timestamp`) in the same change.
460
460
 
461
461
  No `02-DOCS/` layer? Skip silently (optionally suggest `harness`). Unlike the
462
462
  brand study, technical conventions are *recorded, not gated* — never block the task on this.
@@ -122,10 +122,15 @@ Good: 2026-05-20 · pricing · Acme · acme.com/pricing
122
122
  ## The tracker artifacts
123
123
 
124
124
  Three structured files. Required fields named here; full schema + a filled end-to-end example
125
- competitor live in `references/tracker-schema.md`.
126
-
127
- - **Competitor profile** (one per rival): `name`, `positioning_line`, `segment`, pricing tiers
128
- (each with `amount`, `currency`, `source_url`, `date`), feature-matrix rows, watched URLs.
125
+ competitor live in `references/tracker-schema.md`. The profile is a `.md` page under the
126
+ `02-DOCS/wiki/` OKF v0.1 bundle, so its YAML frontmatter carries a non-empty `type: competitor`
127
+ (plus the OKF-recommended `title`/`description`/`tags`/`timestamp`) alongside the domain keys;
128
+ its body uses standard markdown links, never wikilinks. The two CSVs are data files, not OKF
129
+ documents.
130
+
131
+ - **Competitor profile** (one per rival): OKF frontmatter (`type: competitor`, …) + the domain
132
+ keys `name`, `positioning_line`, `segment`, pricing tiers (each with `amount`, `currency`,
133
+ `source_url`, `date`), feature-matrix rows, watched URLs.
129
134
  - **Feature matrix** (CSV): rows = features, columns = competitors, each cell sourced + dated.
130
135
  - **Change log** (CSV, append-only): `date,competitor,axis,url,old_value,new_value,materiality,action`.
131
136
 
@@ -5,12 +5,28 @@ captures (the diffed HTML/JSON snapshots) go under `02-DOCS/raw/competitors/<riv
5
5
  rule that overrides everything: **a price or feature cell without a `source_url` + `date` is
6
6
  not knowledge — leave it blank and say so.**
7
7
 
8
+ `02-DOCS/wiki/` is an OKF v0.1 bundle, so the one `.md` file here (the competitor profile)
9
+ carries YAML frontmatter with a non-empty `type:`; the two CSVs are data files, not OKF
10
+ documents. Any cross-references in the profile body use **standard markdown links** (e.g.
11
+ `[Beta](./beta.md)`), never wikilinks. See `../../harness/references/wiki-protocol.md`
12
+ "## Conventions".
13
+
8
14
  ## 1. Competitor profile (one file per rival)
9
15
 
10
16
  Markdown front-matter + body. One per rival, named `02-DOCS/wiki/competitors/<rival>.md`.
17
+ The frontmatter is OKF v0.1 conformant: `type:` is the only required field (non-empty);
18
+ `title`/`description`/`tags`/`timestamp` are the recommended standard surface. All the
19
+ domain keys below (`name`, `positioning_source.date`, every `pricing_tiers[].date`, …) are
20
+ kept verbatim — OKF allows any extra key and `verify.sh` reads them, so adding the OKF
21
+ fields is purely additive.
11
22
 
12
23
  ```yaml
13
24
  ---
25
+ type: competitor
26
+ title: Acme
27
+ description: "Tracker of record for Acme — positioning, pricing tiers, and watched surfaces."
28
+ tags: [competitor, pricing-watch, feature-watch]
29
+ timestamp: 2026-05-28T00:00:00Z
14
30
  name: Acme
15
31
  positioning_line: "The all-in-one workspace for remote-first teams"
16
32
  positioning_source: { url: "https://acme.com", date: "2026-05-28" }
@@ -28,6 +44,9 @@ pricing_tiers:
28
44
 
29
45
  ## Notes
30
46
  Repositioned from "project tool" to "workspace" in Q2 2026 — see change log 2026-05-12.
47
+
48
+ ## Related
49
+ - [Beta](./beta.md) — closest competing positioning; cross-watch their pricing moves.
31
50
  ```
32
51
 
33
52
  Every `pricing_tiers` row and any feature claim must carry `source_url` + `date`. If you only
@@ -5,6 +5,16 @@ Render this into `02-DOCS/wiki/sdd/constitution.md`. Keep it to 1-2 screens. Eve
5
5
  ---
6
6
 
7
7
  ```markdown
8
+ ---
9
+ type: constitution
10
+ title: <Project> — Constitution
11
+ description: The non-negotiable principles every rsc-sdd phase obeys.
12
+ tags: [sdd, constitution]
13
+ timestamp: YYYY-MM-DDTHH:MM:SSZ
14
+ topic: sdd
15
+ version: v1.0.0
16
+ ---
17
+
8
18
  # <Project> — Constitution
9
19
 
10
20
  > Version: v1.0.0 · Ratified: YYYY-MM-DD · Last amended: YYYY-MM-DD
@@ -79,7 +79,7 @@ date,pillar,cluster,format,owner,stage,brief_link,atomization,mix
79
79
 
80
80
  ## The brief
81
81
 
82
- A slot **cannot leave the `idea` stage without a brief.** One canonical brief format means consistent output regardless of who writes it. Required fields (inline minimum):
82
+ A slot **cannot leave the `idea` stage without a brief.** One canonical brief format means consistent output regardless of who writes it. The brief is a `.md` page in the `02-DOCS/wiki/` OKF v0.1 bundle: its YAML frontmatter carries a non-empty `type: content-brief` (plus the OKF-recommended `title`/`description`/`tags`/`timestamp`) alongside the domain fields below, and any body cross-references use standard markdown links, never wikilinks. Required fields (inline minimum):
83
83
 
84
84
  - **objective** — the one outcome this piece drives.
85
85
  - **persona** — which of the 2–4 you target.
@@ -8,6 +8,13 @@ template, the stage gates, and the CSV column docs you fill in.
8
8
  Every slot carries one brief in the same shape. A slot cannot leave the `idea` stage
9
9
  without it. Store briefs under `02-DOCS/wiki/content/briefs/<slug>.md`.
10
10
 
11
+ These briefs live in the `02-DOCS/wiki/` OKF v0.1 bundle, so each brief `.md` carries YAML
12
+ frontmatter with a non-empty `type: content-brief` (the OKF-recommended `title`/`description`/
13
+ `tags`/`timestamp` are added where meaningful). The domain brief fields below are kept as-is —
14
+ OKF allows any extra key. Cross-references in the body use **standard markdown links**, never
15
+ wikilinks (e.g. `[brand voice](../brand-voice.md)`). See
16
+ `../../harness/references/wiki-protocol.md` "## Conventions".
17
+
11
18
  | Field | Required | What goes here |
12
19
  |---|---|---|
13
20
  | `objective` | yes | the one outcome (e.g. "drive activation-checklist signups") |
@@ -25,6 +32,13 @@ without it. Store briefs under `02-DOCS/wiki/content/briefs/<slug>.md`.
25
32
 
26
33
  ```markdown
27
34
  ---
35
+ # OKF v0.1 standard surface — `type` is the only REQUIRED field (non-empty).
36
+ type: content-brief
37
+ title: "Onboarding activation guide — brief"
38
+ description: "Brief of record for the flagship activation-checklist guide."
39
+ tags: [content-brief, onboarding, flagship]
40
+ timestamp: 2026-07-01T00:00:00Z
41
+ # Domain brief fields (OKF allows any extra key; the pipeline + verify read these).
28
42
  slug: onboarding-activation-guide
29
43
  objective: drive activation-checklist signups from new-trial users
30
44
  persona: hands-on-ops-lead
@@ -36,7 +50,7 @@ owner: ana
36
50
  target_keyword: "saas user activation checklist"
37
51
  success_metric: 100 checklist downloads in 30 days
38
52
  atomization_intent: 10 derivatives — 3 LinkedIn, 1 X thread, 2 shorts, 1 newsletter, 3 carousels
39
- voice_ref: 02-DOCS/wiki/brand-voice.md
53
+ voice_ref: ../brand-voice.md
40
54
  ---
41
55
  ```
42
56
 
@@ -46,6 +46,29 @@ Reuse the learner profile if it exists rather than re-interviewing. When you wri
46
46
  matrix, persist them there so `course-storytelling` can pick up the same grounding for the hand-off.
47
47
  Note in the file that the profile is shared, so neither skill clobbers the other's section.
48
48
 
49
+ Each persisted `02-DOCS/wiki/teaching/*.md` file is an OKF v0.1 wiki article: open it with YAML
50
+ frontmatter carrying a non-empty `type:` (`type: course-outline`), then the H1 and body. Use standard
51
+ markdown links between articles (`[Outcomes](./<course>-outcomes.md)`), never wikilinks. Mirror the
52
+ harness `wiki-article-template.md` shape:
53
+
54
+ ```markdown
55
+ ---
56
+ type: course-outline
57
+ title: <Course> — Outcomes
58
+ description: The measurable, ABCD-complete learning outcomes for <course>.
59
+ tags: [course, learning-outcomes]
60
+ timestamp: YYYY-MM-DDTHH:MM:SSZ
61
+ topic: teaching
62
+ status: stable
63
+ ---
64
+
65
+ # <Course> — Outcomes
66
+
67
+ > Sources: {user interview, YYYY-MM-DD}
68
+
69
+ ...
70
+ ```
71
+
49
72
  ## Right-sizing scope by format
50
73
 
51
74
  The single most common failure is too many outcomes for the time. Honest ceilings:
@@ -81,9 +81,19 @@ If the user can't answer a question, that dimension stays incomplete — note th
81
81
 
82
82
  ### Profile wiki article template
83
83
 
84
- Each `02-DOCS/wiki/teaching/*.md` article follows the harness wiki format:
84
+ Each `02-DOCS/wiki/teaching/*.md` article follows the harness wiki format. It is an OKF v0.1 article: open it with YAML frontmatter carrying a non-empty `type:` (`teaching-profile`), then the H1 and body:
85
85
 
86
86
  ```markdown
87
+ ---
88
+ type: teaching-profile
89
+ title: Teaching — Learner
90
+ description: Who is learning, their level and prior knowledge, their pains and desires, and what they can DO after.
91
+ tags: [teaching, learner, profile]
92
+ timestamp: YYYY-MM-DDTHH:MM:SSZ
93
+ topic: teaching
94
+ status: stable
95
+ ---
96
+
87
97
  # Teaching — Learner
88
98
 
89
99
  > Sources: {user interview, YYYY-MM-DD}
@@ -116,9 +126,19 @@ After this, the learner can: …
116
126
 
117
127
  ### False-beliefs article specifics
118
128
 
119
- `false-beliefs.md` must type every belief so `brunson-frameworks.md` can match it to a breaking story:
129
+ `false-beliefs.md` must type every belief so `brunson-frameworks.md` can match it to a breaking story (same OKF frontmatter; `type: teaching-profile`):
120
130
 
121
131
  ```markdown
132
+ ---
133
+ type: teaching-profile
134
+ title: Teaching — False Beliefs
135
+ description: The learner's blocking beliefs, typed vehicle / internal / external, each with a breaking story.
136
+ tags: [teaching, false-beliefs, profile]
137
+ timestamp: YYYY-MM-DDTHH:MM:SSZ
138
+ topic: teaching
139
+ status: stable
140
+ ---
141
+
122
142
  # Teaching — False Beliefs
123
143
 
124
144
  > Sources: {user interview, YYYY-MM-DD}
@@ -56,9 +56,22 @@ Map every ADR to the **MADR 4.0.0 template** (released 2024-09-17 — the curren
56
56
 
57
57
  Required spine, in order: **Title → Status → Date → Context and Problem Statement → Decision Drivers → Considered Options → Decision Outcome → Consequences**. The MADR-optional sections (Confirmation, Pros and Cons of the Options, More Information) you add only when they pull weight.
58
58
 
59
- Minimal skeleton — this is enough for most decisions:
59
+ Minimal skeleton — this is enough for most decisions. When the ADR lives in a harness
60
+ workspace (`02-DOCS/wiki/decisions/`), it is part of an OKF v0.1 bundle, so it opens with YAML
61
+ frontmatter carrying a non-empty `type: decision` (plus the OKF-recommended `title`/`tags`/
62
+ `timestamp`). The body keeps the human-readable `- Status:`/`- Date:` lines verbatim — they are
63
+ the decision's domain record and `scripts/verify.sh` reads them, so the frontmatter is purely
64
+ additive. Cross-references use standard markdown links, never wikilinks. (In a plain code repo
65
+ under `docs/adr/`, the frontmatter is optional — OKF conformance only governs the wiki bundle.)
60
66
 
61
67
  ```markdown
68
+ ---
69
+ type: decision
70
+ title: "Choose Postgres over DynamoDB for the primary store"
71
+ tags: [adr, database, billing]
72
+ timestamp: 2026-06-02T00:00:00Z
73
+ ---
74
+
62
75
  # 7. Choose Postgres over DynamoDB for the primary store
63
76
 
64
77
  - Status: accepted
@@ -8,6 +8,17 @@ Filenames: `NNNN-title-with-dashes.md` where `NNNN` is a zero-padded sequential
8
8
 
9
9
  Store under one log only — `docs/adr/` (code repo) or `02-DOCS/wiki/decisions/` (harness workspace). Maintain an index as `docs/adr/README.md` or `0000-index.md`:
10
10
 
11
+ When the log lives in `02-DOCS/wiki/decisions/`, each ADR is a document in an OKF v0.1 bundle, so it opens with YAML frontmatter carrying a non-empty `type: decision` (plus the OKF-recommended `title`/`tags`/`timestamp`). The MADR body — `- Status:`, `- Date:`, the sections — is kept exactly as below; the frontmatter is additive and `verify.sh` keeps reading the body lines. The index file (`0000-index.md` / `README.md`) is the OKF reserved directory listing and carries **no frontmatter**. All cross-references are standard markdown links, never wikilinks. In a plain `docs/adr/` code repo the frontmatter is optional — OKF conformance governs only the wiki bundle. The OKF frontmatter block to prepend (shown once; the templates below omit it for brevity):
12
+
13
+ ```yaml
14
+ ---
15
+ type: decision
16
+ title: "<short decision title>"
17
+ tags: [adr]
18
+ timestamp: YYYY-MM-DDTHH:MM:SSZ
19
+ ---
20
+ ```
21
+
11
22
  ```markdown
12
23
  # Decision Log
13
24
 
@@ -116,7 +127,16 @@ a test, an architecture-fitness check.>
116
127
 
117
128
  ## Worked example — `0007-choose-postgres.md`
118
129
 
130
+ Shown with the OKF frontmatter it carries when stored in `02-DOCS/wiki/decisions/`:
131
+
119
132
  ```markdown
133
+ ---
134
+ type: decision
135
+ title: "Choose Postgres over DynamoDB for the primary store"
136
+ tags: [adr, database, billing]
137
+ timestamp: 2026-06-02T00:00:00Z
138
+ ---
139
+
120
140
  # 7. Choose Postgres over DynamoDB for the primary store
121
141
 
122
142
  - Status: accepted
@@ -102,9 +102,19 @@ If the user can't answer a question, that dimension stays incomplete — note th
102
102
 
103
103
  ### Visual-identity wiki article template
104
104
 
105
- Each `02-DOCS/wiki/brand/*.md` article follows the harness wiki format:
105
+ Each `02-DOCS/wiki/brand/*.md` article follows the harness wiki format. It is an OKF v0.1 article: open it with YAML frontmatter carrying a non-empty `type:` (`brand-study`), then the H1 and body:
106
106
 
107
107
  ```markdown
108
+ ---
109
+ type: brand-study
110
+ title: Brand — Visual Identity
111
+ description: The visual personality — OKLCH color system, type pairing & scale, and radius/shadow/motion personality.
112
+ tags: [brand, visual-identity, design]
113
+ timestamp: YYYY-MM-DDTHH:MM:SSZ
114
+ topic: brand
115
+ status: stable
116
+ ---
117
+
108
118
  # Brand — Visual Identity
109
119
 
110
120
  > Sources: {user interview, YYYY-MM-DD}
@@ -11,7 +11,7 @@ profiles: [minimal, core, full]
11
11
  The **harness** is the control plane of a workspace. A workspace need not be code: it can be a company, an ops desk, a legal archive, a personal knowledge vault. Whatever it is, the harness is the durable apparatus that keeps it operable and legible, made of three parts:
12
12
 
13
13
  - **`01-TOOLS/<PROVIDER>/`** — the operational tooling layer. One folder per external provider, co-locating credentials (`.env`) with the scripts that consume them. Each tool ships a working `test_connection` against the real API.
14
- - **`02-DOCS/`** — the **Karpathy chaos→knowledge engine**: a domain-agnostic LLM wiki (`inbox/` + `raw/` + `raw/worklog/` + `wiki/` + `wiki/index.md` + `wiki/log.md` + `wiki/gaps.md` + `wiki/scores.json` + the `.base` views), fully embedded in this skill. It feeds from **two on-ramps**: (1) the user drops **any raw file in any format** (PDF, image, CSV, JSON, txt, html…) into `inbox/`, and an **Auto-Ingest Sweep** ("the agent goes for a walk") extracts, classifies, cross-links, and compiles it — and goes further, **discovering un-ingested documents anywhere in the workspace** (a stray `/transcripts`, `/facturas`…), bounded by `.rscignore` and de-duplicated by the `wiki/.ingested.json` ledger, fired automatically at SessionStart (when the inbox has material) and by the daily cron. Ingest is non-destructive (originals are copied, never moved); removing an emptied folder needs explicit consent; (2) a **Worklog Sweep** captures **what we do** — every meaningful session of work is itself a `raw` source (`raw/worklog/`) compiled into the wiki, fired by a `PreCompact`/`SessionEnd` hook, by an explicit milestone (a commit), or by the daily curation automation (`references/daily-curation-automation.md`). The wiki is **Obsidian-native**: wikilinks, YAML frontmatter (Properties), readable filenames, and `.base` views give a real graph + live tables — structure, **not vector DB / embeddings / RAG**. The agent writes it; the human reads it in Obsidian. See `references/wiki-protocol.md` for the protocol, `references/ingest-formats.md` for the multiformat Fetch, `references/wiki-worklog-template.md` for the work capture, and `references/obsidian-scaffolding.md` for the vault scaffolding. Topics are inferred from content (`finanzas/`, `legal/`, `crm/`…), never hardcoded. The wiki **self-improves continuously**: every Ingest, Sweep and Query triggers a Maintenance Pass (deterministic lint, score recomputation, gap detection, Related/See-Also sweep), and every N interactions a Micro-Improve runs. Deep Improve runs on explicit request or via the scheduled daily curation. No external skill needed.
14
+ - **`02-DOCS/`** — the **Karpathy chaos→knowledge engine**: a domain-agnostic LLM wiki (`inbox/` + `raw/` + `raw/worklog/` + `wiki/` + `wiki/index.md` + `wiki/log.md` + `wiki/gaps.md` + `wiki/scores.json` + the `.base` views), fully embedded in this skill. It feeds from **two on-ramps**: (1) the user drops **any raw file in any format** (PDF, image, CSV, JSON, txt, html…) into `inbox/`, and an **Auto-Ingest Sweep** ("the agent goes for a walk") extracts, classifies, cross-links, and compiles it — and goes further, **discovering un-ingested documents anywhere in the workspace** (a stray `/transcripts`, `/facturas`…), bounded by `.rscignore` and de-duplicated by the `wiki/.ingested.json` ledger, fired automatically at SessionStart (when the inbox has material) and by the daily cron. Ingest keeps the repo clean: a loose file it ingests at the workspace root (or anything in `inbox/`) is **moved into `raw/`** (relocated, never deleted — a dropped PDF ends up in `raw/`, not at the root), while files inside a user-maintained folder are copied and consolidation is proposed; removing a redundant folder needs explicit consent; (2) a **Worklog Sweep** captures **what we do** — every meaningful session of work is itself a `raw` source (`raw/worklog/`) compiled into the wiki, fired by a `PreCompact`/`SessionEnd` hook, by an explicit milestone (a commit), or by the daily curation automation (`references/daily-curation-automation.md`). The `wiki/` is a **100%-OKF-v0.1 bundle** (Google's [Open Knowledge Format](https://github.com/GoogleCloudPlatform/knowledge-catalog/tree/main/okf)) AND an **Obsidian-native** vault at the same time — standard markdown links, OKF-standard YAML frontmatter (Properties), readable filenames, and `.base` views give a real graph + live tables — structure, **not vector DB / embeddings / RAG**. The agent writes it; the human reads it in Obsidian. See `references/wiki-protocol.md` for the protocol, `references/ingest-formats.md` for the multiformat Fetch, `references/wiki-worklog-template.md` for the work capture, and `references/obsidian-scaffolding.md` for the vault scaffolding. Topics are inferred from content (`finanzas/`, `legal/`, `crm/`…), never hardcoded. The wiki **self-improves continuously**: every Ingest, Sweep and Query triggers a Maintenance Pass (deterministic lint, score recomputation, gap detection, Related/See-Also sweep), and every N interactions a Micro-Improve runs. Deep Improve runs on explicit request or via the scheduled daily curation. No external skill needed.
15
15
  - **The Knowledge map** — the `## Knowledge map` section of the root `CLAUDE.md` that indexes the wiki (including the `harness/` topic) and is read by every other skill before it works in its area.
16
16
 
17
17
  `harness` is the **protagonist concept**. `init` is the bootstrap front door — it gauges the user, drafts the profile, and hands off the first scaffold. THIS skill (`harness`) is the **ongoing control**: it audits, migrates, scaffolds, sweeps the inbox, and keeps the wiki, the tooling and the Knowledge map honest over the life of the workspace. It also generates root `CLAUDE.md` and `AGENTS.md`, and migrates legacy `XX-*` numbered folders into the canonical layout.
@@ -105,7 +105,7 @@ harness/
105
105
  │ ├── inbox-readme-template.md ← the inbox/README.md drop-zone contract
106
106
  │ ├── wiki-raw-template.md ← format for raw/<topic>/*.md
107
107
  │ ├── wiki-worklog-template.md ← format for raw/worklog/*.md (work-driven capture)
108
- │ ├── wiki-article-template.md ← format for wiki/<topic>/*.md (Obsidian frontmatter + wikilinks)
108
+ │ ├── wiki-article-template.md ← format for wiki/<topic>/*.md (OKF frontmatter + markdown links)
109
109
  │ ├── wiki-index-template.md ← format for wiki/index.md (machine catalog; .base = human nav)
110
110
  │ ├── obsidian-scaffolding.md ← .base views, .gitignore, attachments, .obsidian config
111
111
  │ ├── daily-curation-automation.md ← portable scheduled compounding pass (the third trigger)
@@ -356,7 +356,7 @@ If any of these occur, stop and report:
356
356
  - `references/inbox-readme-template.md` — the `inbox/README.md` drop-zone contract shown to the user.
357
357
  - `references/wiki-raw-template.md` — format for `02-DOCS/raw/<topic>/*.md`.
358
358
  - `references/wiki-worklog-template.md` — format for `02-DOCS/raw/worklog/*.md` (the work-driven capture; the session as a raw source).
359
- - `references/wiki-article-template.md` — format for `02-DOCS/wiki/<topic>/*.md` (Obsidian frontmatter + wikilinks + `## Related`).
359
+ - `references/wiki-article-template.md` — format for `02-DOCS/wiki/<topic>/*.md` (OKF v0.1 frontmatter + relative markdown links + `## Related`).
360
360
  - `references/wiki-index-template.md` — format for `02-DOCS/wiki/index.md` (machine catalog; the `.base` views are the human navigation).
361
361
  - `references/obsidian-scaffolding.md` — the vault scaffolding: `.base` views, `.gitignore`, `attachments/`, `.obsidian` config (no vector DB / RAG).
362
362
  - `references/daily-curation-automation.md` — portable scheduled compounding pass; on Claude Code wired via the `schedule` skill.
@@ -39,12 +39,14 @@ Run the daily curation pass for this 02-DOCS second brain.
39
39
 
40
40
  Use the harness wiki-protocol.md as the contract. First run the Auto-Ingest Sweep:
41
41
  process inbox/, then scan the workspace (minus .rscignore) for un-ingested documents,
42
- ingest the clearly-documentary folders (copy originals, never move), record them in
43
- wiki/.ingested.json, and list ambiguous folders as proposals (do not grab them).
44
- Then compile pending raw/worklog/ material into wiki/ pages (update existing before
45
- creating new), keep frontmatter + wikilinks consistent, append significant decisions
46
- to wiki/harness/decisions.md, refresh the .base-backed navigation, recompute
47
- scores.json + the score: property, and append a dated entry to wiki/log.md.
42
+ applying Clean-as-you-go (move loose root-level + inbox files into raw/ after a
43
+ verified ingest; copy files nested in user-maintained folders and propose
44
+ consolidation), record them in wiki/.ingested.json, and list ambiguous folders as
45
+ proposals (do not grab them). Then compile pending raw/worklog/ material into wiki/
46
+ pages (update existing before creating new), keep frontmatter + relative markdown
47
+ links OKF-consistent, append significant decisions to wiki/harness/decisions.md,
48
+ refresh the .base-backed navigation, recompute scores.json + the score: property,
49
+ and prepend a dated entry (newest first) to wiki/log.md.
48
50
 
49
51
  Be conservative. If the topic map no longer fits, record a recommendation in
50
52
  wiki/gaps.md or a page's Open Questions instead of moving large parts of the
@@ -31,17 +31,24 @@ not bundled with a specific raw source. Link them from the page that depends on
31
31
  them. Source-bundled originals stay in `raw/<topic>/_originals/`.
32
32
  ```
33
33
 
34
- ## `02-DOCS/.obsidian/app.json` (attachment folder)
34
+ ## `02-DOCS/.obsidian/app.json` (attachment folder + OKF link mode)
35
35
 
36
36
  ```json
37
37
  {
38
38
  "attachmentFolderPath": "attachments",
39
- "newLinkFormat": "shortest",
40
- "useMarkdownLinks": false
39
+ "newLinkFormat": "relative",
40
+ "useMarkdownLinks": true,
41
+ "alwaysUpdateLinks": true
41
42
  }
42
43
  ```
43
44
 
44
- `useMarkdownLinks: false` makes new internal links wikilinks. `userIgnoreFilters`
45
+ `useMarkdownLinks: true` makes new internal links **standard markdown links**, not
46
+ wikilinks — this is what keeps `wiki/` a 100%-OKF-conformant bundle (OKF consumers
47
+ follow markdown links; wikilinks `[[...]]` are non-conformant). `newLinkFormat:
48
+ relative` writes paths relative to the current file (`../topic/page.md`), which OKF
49
+ supports and which resolves both in Obsidian and in any OKF consumer.
50
+ `alwaysUpdateLinks: true` makes Obsidian rewrite those relative links automatically
51
+ on rename, so links survive moves the way wikilinks used to. `userIgnoreFilters`
45
52
  (Settings → Files & Links → Excluded files) should hide noise from search/graph:
46
53
  `raw/_originals/`, `inbox/_processed/`, `audits/`.
47
54
 
@@ -59,7 +66,7 @@ filters:
59
66
  views:
60
67
  - type: table
61
68
  name: All Articles
62
- order: [file.name, topic, status, score, updated]
69
+ order: [file.name, topic, status, score, timestamp]
63
70
  sort:
64
71
  - property: score
65
72
  direction: DESC
@@ -74,9 +81,9 @@ filters:
74
81
  views:
75
82
  - type: table
76
83
  name: Worklog
77
- order: [file.name, topic, date, status]
84
+ order: [file.name, topic, timestamp, status]
78
85
  sort:
79
- - property: date
86
+ - property: timestamp
80
87
  direction: DESC
81
88
  ```
82
89
 
@@ -89,8 +96,8 @@ filters:
89
96
  views:
90
97
  - type: table
91
98
  name: Decisions
92
- order: [file.name, topic, status, updated]
99
+ order: [file.name, topic, status, timestamp]
93
100
  sort:
94
- - property: updated
101
+ - property: timestamp
95
102
  direction: DESC
96
103
  ```
@@ -1,19 +1,23 @@
1
1
  ---
2
+ # OKF v0.1 standard surface — `type` is the only REQUIRED field (non-empty).
3
+ type: article
2
4
  title: {Title}
3
- aliases: [{old-slug}]
5
+ description: {One-sentence summary, for previews + search.}
6
+ resource: {URL or path to the underlying source/asset — omit the line if none}
4
7
  tags: []
5
- type: article
8
+ timestamp: {YYYY-MM-DDTHH:MM:SSZ}
9
+ # rsc custom fields (OKF allows any; conformant consumers preserve unknown keys)
10
+ aliases: [{old-slug}]
6
11
  topic: {topic}
7
12
  status: draft
8
13
  sources: []
9
- updated: {YYYY-MM-DD}
10
14
  score: 0.0
11
15
  ---
12
16
 
13
17
  # {Title}
14
18
 
15
19
  > Sources: {Author1, YYYY-MM-DD; Author2, YYYY-MM-DD}
16
- > Raw: [[{raw-source-1}]]; [[{raw-source-2}]]
20
+ > Raw: [{raw-source-1}](../../raw/{topic}/{raw-source-1}.md); [{raw-source-2}](../../raw/{topic}/{raw-source-2}.md)
17
21
 
18
22
  ## Overview
19
23
 
@@ -25,19 +29,32 @@ score: 0.0
25
29
 
26
30
  ## Related
27
31
 
28
- {OPTIONAL — include only when cross-references exist. Maintained during lint. Use wikilinks so the link survives renames and shows in the Obsidian graph + backlinks:
29
- - Same or different topic: `- [[Other Article]] — why it connects.`
30
- - With display text: `- [[Other Article|how we say it here]] — why it connects.`}
32
+ {OPTIONAL — include only when cross-references exist. Maintained during lint. Use
33
+ standard markdown links (OKF-conformant — they ARE the knowledge graph; an OKF
34
+ consumer follows them, and the Obsidian graph + backlinks render them too):
35
+ - Same topic: `- [Other Article](./other-article.md) — why it connects.`
36
+ - Different topic: `- [Other Article](../other-topic/other-article.md) — why it connects.`
37
+ - With display text: `- [how we say it here](../other-topic/other-article.md) — why it connects.`}
31
38
 
32
39
  <!--
33
- FRONTMATTER CONTRACT (this is what powers Obsidian Properties + Bases + graph):
34
- - title human-readable; the H1 matches it.
35
- - aliases keep the old kebab slug here so pre-migration links/wikilinks still resolve.
36
- - tags cross-cutting qualities ONLY — never the main category (that is `topic`).
37
- - type article | decision | worklog | brief | spec | profile
40
+ FRONTMATTER CONTRACT — OKF v0.1 conformant. Powers OKF consumers AND Obsidian
41
+ Properties + Bases + graph (same file, no translation).
42
+ OKF standard surface:
43
+ - type REQUIRED, non-empty. article | decision | worklog | brief | spec | profile.
44
+ (OKF type values are not registered centrally; consumers tolerate unknown ones.)
45
+ - title human-readable; the H1 matches it. Consumers may derive from filename if absent.
46
+ - description single-sentence summary for previews/search.
47
+ - resource URI/path to the underlying asset this concept documents (omit if none).
48
+ - tags cross-cutting qualities ONLY — never the main category (that is `topic`).
49
+ - timestamp ISO 8601 datetime of the last meaningful edit (e.g. 2026-06-28T14:30:00Z).
50
+ rsc custom fields (allowed by OKF; never required for conformance):
51
+ - aliases keep the old kebab slug here so pre-migration links still resolve.
38
52
  - topic the wiki/<topic>/ folder, one level. Inferred from content, never hardcoded.
39
53
  - status draft | stable | stale (lifecycle; filterable in a Base).
40
- - sources wikilinks to raw/ pages this was distilled from (cite your evidence).
41
- - updated YYYY-MM-DD of the last meaningful edit.
54
+ - sources markdown links to raw/ pages this was distilled from (cite your evidence).
42
55
  - score mirror of scores.json, written by the Maintenance Pass (single writer → no drift).
56
+
57
+ LINKS: standard markdown links only — NEVER wikilinks ([[...]]). Relative paths
58
+ (./same-topic.md, ../other-topic/page.md, ../../raw/<topic>/<file>.md). This is
59
+ what keeps wiki/ a portable, 100%-OKF-conformant bundle.
43
60
  -->
@@ -1,5 +1,9 @@
1
1
  # Knowledge Base Index
2
2
 
3
+ > **OKF v0.1 reserved file** — `index.md` carries **no frontmatter** (it is a
4
+ > directory listing for progressive disclosure, per the OKF spec). Links are
5
+ > standard markdown, relative to this file (`topic/article.md`), NEVER wikilinks.
6
+ >
3
7
  > **Human navigation lives in the `.base` views** (`Articles.base`, `Worklog.base`,
4
8
  > `Decisions.base`) — live tables over frontmatter, sorted by score/status/date.
5
9
  > This index is the **machine-readable catalog + fallback** the agent maintains;
@@ -11,8 +15,8 @@
11
15
 
12
16
  | Article | Summary | Updated | Score |
13
17
  |---------|---------|---------|-------|
14
- | [[{Article Title}]] | {One-line summary} | {YYYY-MM-DD} | {N.N} |
15
- | [[{Archived Article}]] | [Archived] {One-line summary} | {YYYY-MM-DD} | {N.N} |
18
+ | [{Article Title}]({topic-name}/{article-file}.md) | {One-line summary} | {YYYY-MM-DD} | {N.N} |
19
+ | [{Archived Article}]({topic-name}/{archived-file}.html) | [Archived] {One-line summary} | {YYYY-MM-DD} | {N.N} |
16
20
 
17
21
  ## {another-topic}
18
22
 
@@ -20,7 +24,7 @@
20
24
 
21
25
  | Article | Summary | Updated | Score |
22
26
  |---------|---------|---------|-------|
23
- | [[{Article Title}]] | {One-line summary} | {YYYY-MM-DD} | {N.N} |
27
+ | [{Article Title}]({another-topic}/{article-file}.md) | {One-line summary} | {YYYY-MM-DD} | {N.N} |
24
28
 
25
29
  > **Score**: composite quality score (inbound links, source count, cited count,
26
30
  > freshness; minus conflicts and orphan penalty). Regenerated on every