@ericrisco/rsc 0.1.33 → 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 (65) 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/roast-me/tools/adapters/base.py +12 -0
  46. package/skills/roast-me/tools/adapters/codex.py +146 -53
  47. package/skills/roast-me/tools/adapters/gemini.py +102 -81
  48. package/skills/roast-me/tools/extract_prompts.py +13 -14
  49. package/skills/shortform-packaging/SKILL.md +7 -2
  50. package/skills/shortform-packaging/references/package-templates.md +13 -2
  51. package/skills/shortform-strategy/SKILL.md +30 -6
  52. package/skills/shortform-strategy/references/learning-loop-template.md +9 -1
  53. package/skills/specify/references/spec-template.md +12 -1
  54. package/skills/tiktok-api/SKILL.md +6 -2
  55. package/skills/tiktok-api/references/wiki-schema.md +38 -4
  56. package/skills/verify/SKILL.md +11 -1
  57. package/skills/youtube-api/SKILL.md +7 -2
  58. package/skills/youtube-api/references/wiki-schema.md +25 -4
  59. package/skills/youtube-packaging/SKILL.md +10 -2
  60. package/skills/youtube-packaging/references/description-and-chapters.md +70 -2
  61. package/skills/youtube-strategy/SKILL.md +9 -2
  62. package/skills/youtube-strategy/references/wiki-records.md +39 -6
  63. package/skills/youtube-strategy/scripts/verify.sh +4 -0
  64. package/skills/youtube-thumbnails/SKILL.md +10 -5
  65. package/skills/youtube-thumbnails/references/experiment-log-format.md +28 -2
@@ -46,7 +46,13 @@ produce generic copy in someone else's voice.
46
46
  hook, the keyword, and the audience all at once.)
47
47
 
48
48
  Persist what you write under `02-DOCS/wiki/youtube/` (the package) and raw test
49
- results under `02-DOCS/raw/youtube/`.
49
+ results under `02-DOCS/raw/youtube/`. `02-DOCS/wiki/` is an **OKF v0.1** bundle:
50
+ every package or log file persisted there carries YAML frontmatter with a
51
+ non-empty `type` (`youtube-package`) plus the OKF surface (`title`, `description`,
52
+ `tags`, `timestamp`) shared with the strategy/thumbnail/api siblings, and all
53
+ cross-references use standard markdown links — never `[[wikilinks]]`. The OKF
54
+ frontmatter shape for the persisted package and log is in
55
+ [references/description-and-chapters.md](references/description-and-chapters.md).
50
56
 
51
57
  ## The title
52
58
 
@@ -158,7 +164,9 @@ carry forward what won as priors: if numeric titles beat curiosity titles 3 test
158
164
  running on this channel, the new set leans numeric. If a hashtag set tanked, drop
159
165
  it.
160
166
 
161
- **Append after you test.** One row per test:
167
+ **Append after you test.** One row per test, into `02-DOCS/wiki/youtube/packaging-log.md`
168
+ (OKF v0.1: file-level `type: youtube-package` frontmatter at the top, the table
169
+ below it, newest rows appended, past rows immutable):
162
170
 
163
171
  ```text
164
172
  | date | video | title set tried | winner | CTR | impressions | avg view duration | note |
@@ -1,8 +1,9 @@
1
1
  # Description, chapters & feedback-log formats
2
2
 
3
- Offloaded depth for [../SKILL.md](../SKILL.md). Three things live here: the full
3
+ Offloaded depth for [../SKILL.md](../SKILL.md). Four things live here: the full
4
4
  description template with a filled example, the chapter format spec with the four
5
- failure cases worked through, and the feedback-log entry schema with a filled row.
5
+ failure cases worked through, the feedback-log entry schema with a filled row, and
6
+ the OKF v0.1 frontmatter shape for the package and log when persisted into the wiki.
6
7
 
7
8
  ## 1. Description template
8
9
 
@@ -110,6 +111,31 @@ should be short and scannable — it doubles as a search jump-to target.
110
111
  One markdown table in `02-DOCS/wiki/youtube/packaging-log.md`. One row per A/B
111
112
  test, appended when Test & Compare resolves (~2 weeks).
112
113
 
114
+ `02-DOCS/wiki/` is an **OKF v0.1** bundle, so `packaging-log.md` carries
115
+ file-level frontmatter once at the top (a non-empty `type` plus the OKF surface
116
+ shared across all four youtube skills), then the table below it. Refresh
117
+ `timestamp` when you append a row; past rows are immutable.
118
+
119
+ ```markdown
120
+ ---
121
+ type: youtube-package
122
+ title: Packaging feedback log
123
+ description: One row per Test & Compare result — title sets tried, winner, and the transferable lesson.
124
+ tags: [youtube, packaging-log, ab-testing]
125
+ timestamp: 2026-05-28T00:00:00Z
126
+ ---
127
+ # Packaging feedback log
128
+
129
+ | date | video | title set tried | winner | CTR | impressions | avg view duration | note |
130
+ |------|-------|-----------------|--------|-----|-------------|-------------------|------|
131
+ ```
132
+
133
+ > Note: this frontmatter is for the **persisted wiki file**. The package *draft*
134
+ > you point `scripts/verify.sh` at uses labeled sections (`Titles:`,
135
+ > `Description:`, …) and stays frontmatter-free so the linter parses it cleanly.
136
+
137
+ Column meanings:
138
+
113
139
  | Column | Meaning |
114
140
  |---|---|
115
141
  | `date` | resolution date of the test (YYYY-MM-DD) |
@@ -133,3 +159,45 @@ The `note` column is the point: it turns one data row into a prior the next
133
159
  package carries forward. Always grade the winner by watched-time-per-impression
134
160
  (reflected in CTR *and* avg view duration together), never CTR alone — a high-CTR /
135
161
  low-duration row is a warning, not a win.
162
+
163
+ ## 4. Persisted package — the wiki file
164
+
165
+ When you persist a finished package under `02-DOCS/wiki/youtube/` (e.g.
166
+ `packages/<video-slug>.md`), wrap it in OKF v0.1 frontmatter — a non-empty `type`
167
+ plus the shared OKF surface — so the wiki bundle stays conformant and the
168
+ strategy/thumbnail siblings can read it. The body holds the human-readable
169
+ package; cross-references use standard markdown links, never `[[wikilinks]]`.
170
+
171
+ ```markdown
172
+ ---
173
+ type: youtube-package
174
+ title: Package — Learn Python in 2026 (beginner tutorial)
175
+ description: Title set, description, tags, hashtags and chapters for the 12-minute beginner Python tutorial.
176
+ tags: [youtube, packaging]
177
+ timestamp: 2026-05-28T00:00:00Z
178
+ ---
179
+ # Package — Learn Python in 2026 (beginner tutorial)
180
+
181
+ ## Titles (A/B set)
182
+ - Learn Python in 2026: 12-Min Beginner Tutorial
183
+ - Python in 12 Minutes (Total Beginner)
184
+ - I Taught a Beginner Python in 12 Min
185
+
186
+ ## Description
187
+ <above-fold line + body + links + hashtag line, per §1>
188
+
189
+ ## Tags
190
+ python, learn python, python tutorial, python for beginners, …
191
+
192
+ ## Hashtags
193
+ #Python #LearnToCode #ProgrammingForBeginners
194
+
195
+ ## Chapters
196
+ 00:00 Intro — what you'll build
197
+ …
198
+ ```
199
+
200
+ > The `scripts/verify.sh` linter runs on the package **draft** (labeled sections,
201
+ > no frontmatter). The persisted wiki file adds the frontmatter above the same
202
+ > body — do not feed the frontmatter'd wiki copy to the linter, since its `tags:`
203
+ > frontmatter key would be read as the Tags section.
@@ -128,14 +128,21 @@ Read CTR (>~6% is healthy for new channels) and AVD/retention from the wiki to c
128
128
  A strategy session that does not write back does not compound — the next session starts from zero. On exit, append a **dated decision record** under `02-DOCS/wiki/youtube/` and, when reviewing, a **what-worked** entry tied to specific videos/playlists. Minimal record inline; full templates in `references/wiki-records.md`:
129
129
 
130
130
  ```markdown
131
+ ---
132
+ type: youtube-strategy-record
133
+ title: Niche down to budget mechanical keyboards for programmers
134
+ description: Reposition from broad tech reviews to budget mechanical keyboards for programmers; hold 2/wk cadence.
135
+ tags: [youtube, strategy-decision, positioning]
136
+ timestamp: 2026-06-02T00:00:00Z
137
+ ---
131
138
  # 2026-06-02 — Niche down to budget mechanical keyboards for programmers
132
- - Context read: flat subs at 40 videos; top 3 by AVD all keyboard reviews (wiki/youtube/what-worked.md)
139
+ - Context read: flat subs at 40 videos; top 3 by AVD all keyboard reviews ([what-worked.md](./what-worked.md))
133
140
  - Decision: reposition from "tech reviews" to "budget mechanical keyboards for programmers"; cadence 2/wk held
134
141
  - Bets on metric: AVD on keyboard videos (currently ~48%) holding while non-keyboard topics are dropped
135
142
  - Review date: 2026-09-02
136
143
  ```
137
144
 
138
- Every record names **the metric it is betting on** and a **review date**. A decision with no metric is an opinion, not a bet you can later check. Run `scripts/verify.sh 02-DOCS/wiki/youtube/` after writing to confirm the records are structurally complete.
145
+ `02-DOCS/wiki/` is an OKF v0.1 bundle: every record carries a non-empty `type` (`youtube-strategy-record`) above the body, and cross-references use standard markdown links (never `[[wikilinks]]`). Every record names **the metric it is betting on** and a **review date**. A decision with no metric is an opinion, not a bet you can later check. Run `scripts/verify.sh 02-DOCS/wiki/youtube/` after writing to confirm the records are structurally complete (date, `Decision:`, metric, and `type`). Full templates in `references/wiki-records.md`.
139
146
 
140
147
  ## Anti-patterns
141
148
 
@@ -2,6 +2,8 @@
2
2
 
3
3
  This is where the channel's strategy memory lives. The skill READs it on entry and WRITEs to it on exit so sessions compound. Keep it append-only.
4
4
 
5
+ `02-DOCS/wiki/` is an **OKF v0.1** bundle, so every `.md` record this skill writes carries YAML frontmatter with a non-empty `type` (`youtube-strategy-record`) plus the OKF surface (`title`, `description`, `tags`, `timestamp`). These are shared, identically, across all four youtube skills. The strategy-specific body fields the loop and `verify.sh` rely on (`Decision:`, `Bets on metric:`, the date) stay in the body exactly as before — the frontmatter is purely additive. All cross-references use standard markdown links (`[text](./file.md)`), never `[[wikilinks]]`.
6
+
5
7
  ## File layout under `02-DOCS/wiki/youtube/`
6
8
 
7
9
  ```text
@@ -28,6 +30,13 @@ mkdir -p 02-DOCS/wiki/youtube/decisions
28
30
  `positioning.md` stub:
29
31
 
30
32
  ```markdown
33
+ ---
34
+ type: youtube-strategy-record
35
+ title: Channel positioning
36
+ description: The channel's current niche, who-it's-for, and three-factor rationale.
37
+ tags: [youtube, positioning]
38
+ timestamp: 2026-06-02T00:00:00Z
39
+ ---
31
40
  # Channel positioning
32
41
  - Niche: <to define — narrow 2-3 levels, not an industry>
33
42
  - Who it's for: <specific viewer>
@@ -37,11 +46,18 @@ mkdir -p 02-DOCS/wiki/youtube/decisions
37
46
 
38
47
  ## Decision-record template
39
48
 
40
- Every decision file carries these fields. The metric line is mandatory — a decision with no metric is an opinion, not a checkable bet.
49
+ Every decision file carries the frontmatter (`type` + OKF surface) **and** these body fields. The metric line is mandatory — a decision with no metric is an opinion, not a checkable bet. The body fields (`Decision:`, `Bets on metric:`, the date) are what `verify.sh` lints, so keep them verbatim; the frontmatter sits above them.
41
50
 
42
51
  ```markdown
52
+ ---
53
+ type: youtube-strategy-record
54
+ title: <one-line decision title>
55
+ description: <one-sentence summary of the decision and what it bets on>
56
+ tags: [youtube, strategy-decision]
57
+ timestamp: <YYYY-MM-DDTHH:MM:SSZ>
58
+ ---
43
59
  # <YYYY-MM-DD> — <one-line decision title>
44
- - Context read: <what the wiki/data said that drove this; cite files>
60
+ - Context read: <what the wiki/data said that drove this; cite files with markdown links>
45
61
  - Decision: <positioning / cadence / series choice, stated concretely>
46
62
  - Bets on metric: <the single metric this decision expects to move, with current value>
47
63
  - Review date: <YYYY-MM-DD — when to check whether the bet paid off>
@@ -50,8 +66,15 @@ Every decision file carries these fields. The metric line is mandatory — a dec
50
66
  Worked example:
51
67
 
52
68
  ```markdown
69
+ ---
70
+ type: youtube-strategy-record
71
+ title: Niche down to budget mechanical keyboards for programmers
72
+ description: Reposition from broad tech reviews to budget mechanical keyboards for programmers, holding 2/wk cadence.
73
+ tags: [youtube, strategy-decision, positioning]
74
+ timestamp: 2026-06-02T00:00:00Z
75
+ ---
53
76
  # 2026-06-02 — Niche down to budget mechanical keyboards for programmers
54
- - Context read: flat subs at 40 videos; top 3 by AVD all keyboard reviews (what-worked.md)
77
+ - Context read: flat subs at 40 videos; top 3 by AVD all keyboard reviews ([what-worked.md](../what-worked.md))
55
78
  - Decision: reposition from "tech reviews" to "budget mechanical keyboards for programmers"; hold cadence 2/wk
56
79
  - Bets on metric: AVD on keyboard videos (~48%) holds while non-keyboard topics are dropped
57
80
  - Review date: 2026-09-02
@@ -59,15 +82,24 @@ Worked example:
59
82
 
60
83
  ## What-worked template
61
84
 
62
- Append one entry per observed win or loss, tied to a real asset so future sessions can pattern-match.
85
+ `what-worked.md` carries the file-level frontmatter once at the top; below it, **append one entry per observed win or loss** (append-only, ISO 8601 dates, past entries immutable), tied to a real asset so future sessions can pattern-match. Refresh `timestamp` when you append.
63
86
 
64
87
  ```markdown
88
+ ---
89
+ type: youtube-strategy-record
90
+ title: What worked — wins and losses log
91
+ description: Running log of channel wins/losses tied to specific videos and playlists.
92
+ tags: [youtube, what-worked]
93
+ timestamp: 2026-05-20T00:00:00Z
94
+ ---
95
+ # What worked
96
+
65
97
  ## <YYYY-MM-DD> — <video or playlist id/title>
66
98
  - Metric: <CTR / AVD / session lift, with the number>
67
99
  - Lesson: <the transferable insight — what to do more or less of>
68
100
  ```
69
101
 
70
- Example:
102
+ Example entry (appended under the frontmatter + heading):
71
103
 
72
104
  ```markdown
73
105
  ## 2026-05-20 — "I Tested 5 Sub-$20 Keyboards" (vid abc123)
@@ -82,5 +114,6 @@ Example:
82
114
  1. The target `02-DOCS/wiki/youtube/` directory exists.
83
115
  2. At least one decision record is present (a `decisions/*.md` file or a `decisions.md` log).
84
116
  3. Each decision record contains the three required signals: a date, a `Decision:` line, and a named metric/bet (a `Bets on metric:` line or equivalent `metric`/`bet` field).
117
+ 4. Each decision record carries a non-empty `type:` frontmatter field (the OKF v0.1 conformance check). A record with no `type` is a hard failure.
85
118
 
86
- A record missing the metric field is a hard failure with a clear message. An empty or missing target reports cleanly and exits 0 — no false failure on a fresh channel.
119
+ A record missing the metric or `type` field is a hard failure with a clear message. An empty or missing target reports cleanly and exits 0 — no false failure on a fresh channel. The `type` check is additive: it does not touch the existing date/`Decision:`/metric checks.
@@ -13,6 +13,8 @@
13
13
  # - a named metric/bet (a "Bets on metric:" / "metric" / "bet" field)
14
14
  # A record missing the metric/bet field is a HARD FAILURE — a decision with
15
15
  # no metric is an opinion, not a checkable bet.
16
+ # 4. Each decision record carries a non-empty `type:` frontmatter field
17
+ # (OKF v0.1 conformance). A record with no `type` is a HARD FAILURE.
16
18
  #
17
19
  # Missing date or Decision line is also a hard failure. A missing/empty target
18
20
  # (a fresh channel with no wiki yet) is reported and exits 0 — no false failure.
@@ -105,6 +107,8 @@ while IFS= read -r rec; do
105
107
  grep -Eq "$DATE_RE" "$rec" || miss="$miss date"
106
108
  grep -Eiq '^[[:space:]-]*Decision:' "$rec" || miss="$miss decision-line"
107
109
  grep -Eiq '(bets on metric:|metric|bet:)' "$rec" || miss="$miss metric/bet"
110
+ # OKF v0.1: a non-empty `type:` frontmatter field is required.
111
+ grep -Eiq '^[[:space:]]*type:[[:space:]]*[^[:space:]]' "$rec" || miss="$miss type"
108
112
 
109
113
  if [ -n "$miss" ]; then
110
114
  fail "$rec: missing required field(s):$miss"
@@ -125,17 +125,22 @@ the video doesn't cash. That is a promise problem, not an image problem.
125
125
  ## The feedback loop (wiki)
126
126
 
127
127
  Every test result goes to the channel wiki. Exact path:
128
- `02-DOCS/wiki/youtube/`.
128
+ `02-DOCS/wiki/youtube/`. `02-DOCS/wiki/` is an **OKF v0.1** bundle: both files
129
+ below carry file-level frontmatter with a non-empty `type` (`thumbnail-experiment`)
130
+ plus the OKF surface (`title`, `description`, `tags`, `timestamp`) shared with the
131
+ api/strategy/packaging siblings, and cross-references use standard markdown links,
132
+ never `[[wikilinks]]`.
129
133
 
130
- **Log file** — `thumbnail-experiments.md`, one row per test:
134
+ **Log file** — `thumbnail-experiments.md`, frontmatter at the top then one row per
135
+ test (append-only, ISO 8601 dates, past rows immutable):
131
136
 
132
137
  ```text
133
138
  | date | video | variants | axis tested | winner | CTR | watch-time share | note |
134
139
  ```
135
140
 
136
- **Derived file** — `thumbnail-patterns.md`, a running table of what wins on THIS
137
- channel (e.g. "faces beat objects 4/5 tests", "no-text wins on tutorials"). You
138
- update this after each logged test.
141
+ **Derived file** — `thumbnail-patterns.md`, frontmatter at the top then a running
142
+ table of what wins on THIS channel (e.g. "faces beat objects 4/5 tests", "no-text
143
+ wins on tutorials"). You update this after each logged test.
139
144
 
140
145
  **Next-concept rule:** the next thumbnail keeps the winning level of every axis
141
146
  already settled by the log, and tests the next unsettled axis. You only re-test a
@@ -3,6 +3,14 @@
3
3
  The wiki layout, schema, filled example, and pattern-mining heuristic for the
4
4
  feedback loop in SKILL.md. Everything lives under `02-DOCS/wiki/youtube/`.
5
5
 
6
+ `02-DOCS/wiki/` is an **OKF v0.1** bundle, so both files below carry file-level
7
+ YAML frontmatter with a non-empty `type` (`thumbnail-experiment`) plus the OKF
8
+ surface (`title`, `description`, `tags`, `timestamp`) — the same shared key set the
9
+ api/strategy/packaging siblings use. The frontmatter sits once at the top of each
10
+ file, above the table. Refresh `timestamp` when you append/rewrite. Any
11
+ cross-reference uses a standard markdown link (`[text](./file.md)`), never an
12
+ Obsidian `[[wikilink]]`.
13
+
6
14
  ## Files
7
15
 
8
16
  - `thumbnail-experiments.md` — append-only log, one row per Test & Compare run.
@@ -11,7 +19,18 @@ feedback loop in SKILL.md. Everything lives under `02-DOCS/wiki/youtube/`.
11
19
 
12
20
  ## `thumbnail-experiments.md` schema
13
21
 
14
- ```text
22
+ File-level frontmatter once at the top, then the append-only table below it:
23
+
24
+ ```markdown
25
+ ---
26
+ type: thumbnail-experiment
27
+ title: Thumbnail experiments log
28
+ description: One row per Test & Compare run — variants, axis tested, winner, and the takeaway.
29
+ tags: [youtube, thumbnails, ab-testing]
30
+ timestamp: 2026-06-01T00:00:00Z
31
+ ---
32
+ # Thumbnail experiments
33
+
15
34
  | date | video | variants | axis tested | winner | CTR | watch-time share | note |
16
35
  ```
17
36
 
@@ -38,7 +57,14 @@ feedback loop in SKILL.md. Everything lives under `02-DOCS/wiki/youtube/`.
38
57
 
39
58
  ## `thumbnail-patterns.md` shape
40
59
 
41
- ```text
60
+ ```markdown
61
+ ---
62
+ type: thumbnail-experiment
63
+ title: What wins on this channel
64
+ description: Derived summary of the settled thumbnail axes and their confidence.
65
+ tags: [youtube, thumbnails, patterns]
66
+ timestamp: 2026-06-01T00:00:00Z
67
+ ---
42
68
  # What wins on this channel
43
69
 
44
70
  | axis | settled winner | evidence | confidence |