@easysociable/cli 0.1.1 → 0.1.2

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 (108) hide show
  1. package/README.md +4 -1
  2. package/dist/easysociable.js +301 -2829
  3. package/dist/easysociable.js.map +1 -1
  4. package/package.json +17 -12
  5. package/skills/ONBOARDING.md +3 -1
  6. package/skills/easysociable-content/INSTALL.md +60 -0
  7. package/skills/easysociable-content/SKILL.md +107 -96
  8. package/skills/easysociable-content/fixtures/golden-run-en/draft.md +13 -0
  9. package/skills/easysociable-content/fixtures/golden-run-en/idea.md +26 -0
  10. package/skills/easysociable-content/fixtures/golden-run-en/pack-tiktok.json +11 -0
  11. package/skills/easysociable-content/platforms/claude.md +1 -2
  12. package/skills/easysociable-content/platforms/codex.md +1 -2
  13. package/skills/easysociable-content/platforms/hermes.md +1 -2
  14. package/skills/easysociable-content/platforms/openclaw.md +1 -2
  15. package/skills/easysociable-content/references/CLI.md +25 -12
  16. package/skills/easysociable-content/references/CONTRACT_SYNC.md +42 -0
  17. package/skills/easysociable-content/references/MCP.md +7 -12
  18. package/skills/easysociable-content/references/PAGE_PACK.md +128 -5
  19. package/skills/easysociable-content/references/PLATFORM_GUIDE.md +36 -0
  20. package/skills/easysociable-content/references/RUN_LAYOUT.md +73 -0
  21. package/skills/easysociable-content/references/TROUBLESHOOTING.md +11 -9
  22. package/skills/easysociable-content/references/VAULT.md +32 -12
  23. package/skills/easysociable-content/references/VOICE.md +16 -0
  24. package/skills/easysociable-content/scripts/contracts.mjs +183 -0
  25. package/skills/easysociable-content/scripts/export-contracts.mjs +76 -0
  26. package/skills/easysociable-content/scripts/fixture.test.mjs +24 -0
  27. package/skills/easysociable-content/scripts/package-skill.mjs +49 -0
  28. package/skills/easysociable-content/scripts/setup.mjs +127 -83
  29. package/skills/easysociable-content/scripts/setup.test.mjs +49 -38
  30. package/skills/easysociable-content/scripts/starter.mjs +50 -48
  31. package/skills/easysociable-content/scripts/validate-export.mjs +42 -0
  32. package/skills/easysociable-content/scripts/validate-pack.mjs +48 -0
  33. package/skills/easysociable-content/scripts/validate-run.mjs +100 -0
  34. package/skills/easysociable-content/scripts/validate.test.mjs +101 -0
  35. package/skills/easysociable-content/scripts/workbench.mjs +135 -0
  36. package/skills/easysociable-content/starter/CLAUDE.md +756 -0
  37. package/skills/easysociable-content/starter/accounts/README.md +9 -0
  38. package/skills/easysociable-content/starter/accounts/_index.md +31 -0
  39. package/skills/easysociable-content/starter/accounts/overrides/README.md +3 -0
  40. package/skills/easysociable-content/starter/discovery/README.md +18 -0
  41. package/skills/easysociable-content/starter/discovery/_index.md +27 -0
  42. package/skills/easysociable-content/starter/discovery/_template.md +41 -0
  43. package/skills/easysociable-content/starter/engine.json +19 -0
  44. package/skills/easysociable-content/starter/exports/README.md +28 -0
  45. package/skills/easysociable-content/starter/inbox/README.md +9 -0
  46. package/skills/easysociable-content/starter/inbox/_index.md +24 -0
  47. package/skills/easysociable-content/starter/inbox/entries/README.md +3 -0
  48. package/skills/easysociable-content/starter/platforms/README.md +19 -0
  49. package/skills/easysociable-content/starter/platforms/ig.md +69 -0
  50. package/skills/easysociable-content/starter/platforms/instagram.md +5 -0
  51. package/skills/easysociable-content/starter/platforms/linkedin.md +72 -0
  52. package/skills/easysociable-content/starter/platforms/threads.md +69 -0
  53. package/skills/easysociable-content/starter/platforms/tiktok.md +71 -0
  54. package/skills/easysociable-content/starter/platforms/x.md +78 -0
  55. package/skills/easysociable-content/starter/platforms/xiaohongshu.md +19 -0
  56. package/skills/easysociable-content/starter/profiles/_index.md +13 -0
  57. package/skills/easysociable-content/starter/profiles/default/README.md +11 -0
  58. package/skills/easysociable-content/starter/profiles/default/audience.md +38 -0
  59. package/skills/easysociable-content/starter/profiles/default/pillars.md +33 -0
  60. package/skills/easysociable-content/starter/profiles/default/voice.md +24 -0
  61. package/skills/easysociable-content/starter/published/_index.md +20 -0
  62. package/skills/easysociable-content/starter/raw/README.md +4 -0
  63. package/skills/easysociable-content/starter/raw/_index.md +12 -0
  64. package/skills/easysociable-content/starter/runs/README.md +22 -0
  65. package/skills/easysociable-content/starter/runs/_index.md +41 -0
  66. package/skills/easysociable-content/starter/runs/_template/brief.md +66 -0
  67. package/skills/easysociable-content/starter/runs/_template/draft.md +11 -0
  68. package/skills/easysociable-content/starter/runs/_template/editor.md +18 -0
  69. package/skills/easysociable-content/starter/runs/_template/feedback.md +15 -0
  70. package/skills/easysociable-content/starter/runs/_template/idea.md +27 -0
  71. package/skills/easysociable-content/starter/runs/_template/pack.md +47 -0
  72. package/skills/easysociable-content/starter/runs/_template/packet.md +25 -0
  73. package/skills/easysociable-content/starter/runs/_template/rubric.md +19 -0
  74. package/skills/easysociable-content/starter/swipe/_index.md +27 -0
  75. package/skills/easysociable-content/starter/swipe/_template.md +34 -0
  76. package/skills/easysociable-content/starter/topics/README.md +25 -0
  77. package/skills/easysociable-content/starter/topics/WATCHLIST.md +65 -0
  78. package/skills/easysociable-content/starter/topics/_index.md +44 -0
  79. package/skills/easysociable-content/starter/topics/_template-item.md +90 -0
  80. package/skills/easysociable-content/starter/topics/items/README.md +4 -0
  81. package/skills/easysociable-content/starter/topics/scoring.md +201 -0
  82. package/skills/easysociable-content/starter/topics/watchlists/README.md +10 -0
  83. package/skills/easysociable-content/starter/topics/watchlists/_shared.md +14 -0
  84. package/skills/easysociable-content/starter/topics/watchlists/default.md +6 -0
  85. package/skills/easysociable-content/starter/wiki/README.md +13 -0
  86. package/skills/easysociable-content/starter/wiki/atoms/_index.md +23 -0
  87. package/skills/easysociable-content/starter/wiki/atoms/_template.md +31 -0
  88. package/skills/easysociable-content/starter/wiki/claims/_index.md +26 -0
  89. package/skills/easysociable-content/starter/wiki/claims/_template.md +38 -0
  90. package/skills/easysociable-content/starter/workbench/README.md +17 -0
  91. package/skills/easysociable-content/workbench/build.py +1074 -0
  92. package/skills/easysociable-content/workbench/serve.py +53 -0
  93. package/skills/easysociable-content/workbench/template.html +2119 -0
  94. package/skills/easysociable-content/workflows/ANALYSIS_AND_COVERAGE.md +14 -5
  95. package/skills/easysociable-content/workflows/CONTENT_EXPORT.md +16 -11
  96. package/skills/easysociable-content/workflows/GETTING_STARTED.md +40 -0
  97. package/skills/easysociable-content/workflows/MCP_FIRST.md +3 -8
  98. package/skills/easysociable-content/workflows/OUT_OF_SCOPE.md +18 -0
  99. package/skills/easysociable-content/workflows/PACK_AUTHORING.md +42 -0
  100. package/skills/easysociable-content/workflows/SWIPE_CAPTURE.md +18 -0
  101. package/skills/easysociable-content/workflows/TOPIC_DRAFT.md +28 -4
  102. package/skills/easysociable-content/workflows/WORKING_DRAFT.md +17 -8
  103. package/skills/easysociable-slideshow/SKILL.md +20 -13
  104. package/skills/easysociable-slideshow/references/VAULT.md +13 -11
  105. package/skills/easysociable-template/scripts/generate-theme-from-hex.mjs +0 -0
  106. package/skills/easysociable-content/workflows/DEVICE_TASKS.md +0 -5
  107. package/skills/easysociable-content/workflows/EXPERIMENTS.md +0 -6
  108. package/skills/easysociable-content/workflows/PUBLICATION.md +0 -5
@@ -0,0 +1,90 @@
1
+ ---
2
+ id: T-YYYYMMDD-XX
3
+ date: YYYY-MM-DD
4
+ status: scored
5
+ account: your-handle
6
+ profile: default
7
+ platform: x
8
+ pillar: P1
9
+ source_type: watchlist | inbox | user | discovery
10
+ purpose: produce | library | discard
11
+ scout_label: demand | ally | foil | craft_only
12
+ ---
13
+
14
+ # Opportunity
15
+
16
+ One sentence — what's the content opportunity, not a title.
17
+
18
+ ## Source
19
+
20
+ - **type:** watchlist | inbox | user | discovery
21
+ - **url:**
22
+ - **handle:**
23
+ - **discovery_id:** (only if promoted from D-…; else empty)
24
+ - **capture_id:** (only if linked to inbox; else empty)
25
+ - **raw:** (only if exists)
26
+ - **engagement snapshot:** likes / replies / bookmarks / views @ time
27
+
28
+ ## Scout
29
+
30
+ - **purpose:** produce | library
31
+ - **scout_label:** demand | ally | foil | craft_only
32
+ - **scout_note:** (one line — why not discard)
33
+
34
+ ## Context
35
+
36
+ - **what_changed:**
37
+ - **why_now:**
38
+
39
+ ## Audience
40
+
41
+ - **who:**
42
+ - **current_belief:**
43
+ - **icp_checks:** (pain / buyer shape / wedge — note which hit, from profile)
44
+
45
+ ## Conflict
46
+
47
+ - **old_model:**
48
+ - **new_reality:**
49
+ - **belief_gap:**
50
+
51
+ ## Insight
52
+
53
+ - **potential_insight:**
54
+ - **why_nonobvious:**
55
+
56
+ ## Evidence
57
+
58
+ - **available:**
59
+ - **type:** data | example | case | mechanism | expert | observation
60
+ - **gaps:**
61
+
62
+ ## Score (opportunity)
63
+
64
+ | dim | score 0-10 | note |
65
+ |-----|------------|------|
66
+ | context | | |
67
+ | audience | | |
68
+ | conflict | | |
69
+ | insight | | |
70
+ | evidence | | |
71
+
72
+ **opp_score:** (weighted per `topics/scoring.md`)
73
+ **audience_floor:** (hard check ≥ 6)
74
+
75
+ ## Profile fit
76
+
77
+ - pillars:
78
+ - audience_pain:
79
+ - risk:
80
+
81
+ ## Suggested production (optional, not binding)
82
+
83
+ - swipe: none | S…
84
+ - atoms: none | …
85
+ - claim: none | C…
86
+
87
+ ## Decision
88
+
89
+ - next: open_run | hold | kill | library_ingest | research_evidence
90
+ - run_id: (filled when promoted)
@@ -0,0 +1,4 @@
1
+ # items/
2
+
3
+ One markdown file per topic (`T-YYYYMMDD-XX.md`).
4
+ Registry: `../_index.md` (column `item` points here).
@@ -0,0 +1,201 @@
1
+ # Topic scoring — Opportunity evaluation
2
+
3
+ Stable rules for evaluating **Content Opportunities** for the active profile.
4
+ Scores whether a topic **deserves to exist as content**, not whether it can be written well.
5
+
6
+ **Principle:** Don't generate content from topics. Generate content from validated opportunities.
7
+
8
+ **Goal of a `ready` opportunity:** worth opening a run that speaks to the readers and pains in
9
+ `profiles/<id>/audience.md` and `pillars.md`, and can land the account’s product/wedge honestly
10
+ (not empty consensus, not hard sell).
11
+
12
+ ---
13
+
14
+ ## Pipeline (do not skip)
15
+
16
+ ```text
17
+ watchlist / inbox / url / discovery signal
18
+ → 0) Hard filters
19
+ → 1) Scout gate (purpose + label) ← most signals die here
20
+ → 2) Opportunity five-dim score ← only for produce candidates
21
+ → 3) Verdict (opp_score + audience floor)
22
+ → 4) Among ready only: sort by src_*
23
+ ```
24
+
25
+ Library-only signals may skip (2)–(3) — see Scout purposes below.
26
+
27
+ Watchlist scans create **Discovery** records first. Topic scoring runs only after the user explicitly promotes a Discovery (or names another explicit input).
28
+
29
+ ---
30
+
31
+ ## 0) Hard filters (fail → do not create topic, or `parked`)
32
+
33
+ - Off **profile pillars** (unless user override)
34
+ - Hits audience **Not for** (F4F, pure crypto shill, comment-gate junk as the only substance, etc.)
35
+ - Requires invented personal metrics/experience to write honestly
36
+ - Wrong network for the watchlist row (e.g. X tools on a `tiktok` handle)
37
+
38
+ ---
39
+
40
+ ## 1) Scout gate (before opportunity scores)
41
+
42
+ Every scanned signal gets a **purpose** and a **scout_label**.
43
+ **Default bias: discard.** Max **5** `produce` topics per promotion session.
44
+
45
+ ### Purpose
46
+
47
+ | purpose | Meaning | Create T-? | Score opportunity? |
48
+ |---------|---------|------------|------------------|
49
+ | `discard` | Noise / wrong ICP / no reusable mechanism | **No** | No |
50
+ | `library` | Worth swipe/atom/claim later; not this week's post | Optional T- with status `library` **or** offer capture only | Optional; **not** `ready` |
51
+ | `produce` | Candidate to open a run | **Yes** | **Yes** |
52
+
53
+ ### Scout label (on produce / library)
54
+
55
+ | scout_label | Meaning |
56
+ |-------------|---------|
57
+ | `demand` | Target reader states a real pain/job in their own words |
58
+ | `ally` | Peer system / adjacent thinking we can teach beside |
59
+ | `foil` | Competitor or default path to contrast |
60
+ | `craft_only` | Stealable structure; weak ICP/wedge fit — prefer `library`, rarely `produce` |
61
+
62
+ ### Scout discard examples (profile-aware)
63
+
64
+ - Pure growth/engagement playbook with **zero** angle toward this profile’s pillars
65
+ - Comment-gate kits with no inspectable mechanism
66
+ - End-user vanity metrics with no buyer/operator shape from `audience.md`
67
+ - Wrong vertical vs profile **Not for** (unless user override)
68
+
69
+ ### Scout pass hints (toward `produce`)
70
+
71
+ - Pain named in `audience.md` (or clear operator inside that buyer shape)
72
+ - Mechanism / contrast that maps to at least one pillar
73
+ - Ally or foil that sharpens the account’s wedge without inventing claims
74
+ - Reusable structure that still clears the audience floor (else prefer `library`)
75
+
76
+ Record on the topic item: `purpose`, `scout_label`, one-line `scout_note`.
77
+
78
+ ---
79
+
80
+ ## 2) Opportunity dimensions (0–10 each)
81
+
82
+ Only required for `purpose: produce`. Optional brief notes for `library`.
83
+
84
+ **Principle:** these five dimensions answer **"is this worth saying?"** — not "can it be written well?"
85
+ Presentation concerns (framework, structure, format) belong at Brief stage.
86
+
87
+ | Key | Name | What to judge | Weight |
88
+ |-----|------|---------------|--------|
89
+ | `context` | Context | What changed? Why now? Timing, freshness, relevance to the audience's world | **15%** |
90
+ | `audience` | Audience | Who specifically cares? ICP match — pain / buyer shape / wedge from profile | **20%** |
91
+ | `conflict` | Conflict | Current belief vs reality — is there a real gap? How strong is the tension? No conflict = no content | **25%** |
92
+ | `insight` | Insight | Non-obvious perspective, mechanism, or reframe the audience hasn't seen | **25%** |
93
+ | `evidence` | Evidence | Can the core angle be supported with something specific? What evidence exists or could be found? | **15%** |
94
+
95
+ ```text
96
+ opp_score = 0.15×context + 0.20×audience + 0.25×conflict + 0.25×insight + 0.15×evidence
97
+ ```
98
+
99
+ Round to 1 decimal.
100
+
101
+ ### Per-dimension scoring guide
102
+
103
+ **Context (15%)**
104
+
105
+ | Range | Guide |
106
+ |-------|-------|
107
+ | 8–10 | Clear, recent shift the audience has felt but may not have named |
108
+ | 5–7 | Real change but not urgent or widely felt yet |
109
+ | 0–4 | Nothing changed; evergreen truism or stale news |
110
+
111
+ **Audience (20%)** — read `profiles/<id>/audience.md` and `pillars.md` first
112
+
113
+ Score using these checks (note which hit):
114
+
115
+ 1. **Pain** — matches a real pain / job from audience (or clear operator inside that shape)
116
+ 2. **Buyer shape** — who buys/acts matches audience buyer as defined there
117
+ 3. **Wedge land** — can honestly teach or contrast toward this account’s product/wedge without inventing claims
118
+
119
+ | Range | Guide |
120
+ |-------|-------|
121
+ | 8–10 | ≥2 checks strong; clear buyer + pain |
122
+ | 6–7 | One strong check; usable with careful angle |
123
+ | 4–5 | Stretch; usually `backlog` even if other dims are high |
124
+ | 0–3 | Wrong room → should have been scout `discard` / `library` |
125
+
126
+ **Conflict (25%)** — the most important dimension
127
+
128
+ | Range | Guide |
129
+ |-------|-------|
130
+ | 8–10 | Clear belief gap: audience believes X, reality is Y, and the gap has consequences |
131
+ | 5–7 | Some tension but the gap is soft or already widely acknowledged |
132
+ | 0–4 | No real conflict; topic is an observation or list with nothing to challenge |
133
+
134
+ When scoring, the agent must write the `current_belief` and `belief_gap` on the topic item — not just a score. If you can't articulate what the audience currently believes wrong, the conflict score cannot be above 5.
135
+
136
+ **Insight (25%)**
137
+
138
+ | Range | Guide |
139
+ |-------|-------|
140
+ | 8–10 | Genuinely non-obvious; reframes how the audience thinks about the problem |
141
+ | 5–7 | Useful perspective but predictable for a knowledgeable reader |
142
+ | 0–4 | Restates common knowledge |
143
+
144
+ **Evidence (15%)**
145
+
146
+ | Range | Guide |
147
+ |-------|-------|
148
+ | 8–10 | Specific, named evidence available (data, product behavior, case, mechanism) |
149
+ | 5–7 | Evidence exists but generic or secondhand |
150
+ | 0–4 | No evidence beyond assertion; "experts say" with no expert named |
151
+
152
+ When `evidence < 5`, agent should flag an **evidence gap** on the topic item and may suggest **research** before finalizing the score. Topics can be re-scored after research fills the gap.
153
+
154
+ ---
155
+
156
+ ## 3) Verdict
157
+
158
+ For `purpose: produce`:
159
+
160
+ | Verdict | Rule |
161
+ |---------|------|
162
+ | **ready** | `opp_score ≥ 7.5` **and** `audience ≥ 6` |
163
+ | **backlog** | opp_score ≥ 6.0 and audience ≥ 5, but not both ready thresholds; **or** one dim very high / another mid — may research, re-angle, and rescore |
164
+ | **parked** | opp_score < 6.0 **or** audience < 5 **or** hard filter |
165
+
166
+ For `purpose: library`: status `library` (not ready). User may later promote via re-angle + rescore as `produce`.
167
+
168
+ **Never** promote to `ready` on high `src_*` alone.
169
+
170
+ ### Weak-dim guidance
171
+
172
+ When any single dim scores < 6, agent flags it with a suggestion:
173
+
174
+ | Weak dim | Suggestion |
175
+ |----------|-----------|
176
+ | context | "Is there a real trigger or change? If not, consider timing or reframing." |
177
+ | audience | "Who specifically has this problem? If no ICP match, consider library instead." |
178
+ | conflict | "What does the audience believe that's wrong? If no gap, this may not be content." |
179
+ | insight | "What's the non-obvious angle? If predictable, consider a different perspective." |
180
+ | evidence | "Can we prove this? Research X to strengthen." |
181
+
182
+ ---
183
+
184
+ ## 4) Source engagement (sort only)
185
+
186
+ When source is an external post, record on **`topics/_index.md`**:
187
+
188
+ - `src_likes`, `src_replies`, `src_bookmarks`, optional `src_views`
189
+ - `engagement_at`
190
+
191
+ **Do not** fold into `opp_score`.
192
+ Among **ready** items only: prefer higher `src_replies` / `src_bookmarks` over raw likes/views.
193
+ High views + low audience → still not ready.
194
+
195
+ ---
196
+
197
+ ## Rescore
198
+
199
+ Allowed: same `T-id`, update scores / purpose / status in item + `_index`.
200
+ Re-angling a `library` or `backlog` into profile fit is the usual upgrade path.
201
+ Research → new evidence → re-score `evidence` dim is the other upgrade path.
@@ -0,0 +1,10 @@
1
+ # topics/watchlists/
2
+
3
+ **One file per profile** + optional shared table.
4
+
5
+ | Path | Scope |
6
+ |------|--------|
7
+ | `_shared.md` | All profiles (`*`) — merged on every scan |
8
+ | `<profile_id>.md` | Only that profile (e.g. `easysociable-builder.md`) |
9
+
10
+ Registry / scan rules: `../WATCHLIST.md`.
@@ -0,0 +1,14 @@
1
+ # Watchlist — shared (`*`)
2
+
3
+ Rows here apply to **every** profile when scanning (merge with `topics/watchlists/<profile_id>.md`).
4
+
5
+ Use only for handles that are truly cross-positioning. Prefer putting niche-specific radars in the profile file.
6
+
7
+ | # | platform | handle | niche_tag | why_on_list | weight | status |
8
+ |---|----------|--------|-----------|-------------|--------|--------|
9
+
10
+ *(empty — add rows only when a handle should appear for all profiles)*
11
+
12
+ ## Id note
13
+
14
+ Use `#S-01`, `#S-02`, … so shared ids do not collide with profile-local `#1…`.
@@ -0,0 +1,6 @@
1
+ # Watchlist — profile `default`
2
+
3
+ Profile-scoped radar. Merge with `topics/watchlists/_shared.md` on every scan.
4
+
5
+ | # | platform | handle | niche_tag | why_on_list | weight | status |
6
+ |---|----------|--------|-----------|-------------|--------|--------|
@@ -0,0 +1,13 @@
1
+ # wiki/
2
+
3
+ Split library (option B):
4
+
5
+ | Path | What | Run selection |
6
+ |------|------|----------------|
7
+ | `atoms/` | Techniques per role (hook, cta, proof, …) | Match swipe beats / roles; **none OK** |
8
+ | `claims/` | Falsifiable angles / learned strategies | 0–1 claim; **none OK** |
9
+
10
+ Selection always starts at each folder’s `_index.md` (Approach B).
11
+ Filter rows by **platform** and **profiles** (`*` = all profiles) from the current account’s profile_id.
12
+ Drop atom `dead` and claim `retired`. Prefer atom `working`. Claim `status` is epistemology; rank claims by `win/n`.
13
+ Atom use history = `published/_index`. Claim proposition evidence = `## Evidence` in the claim file (not in atoms).
@@ -0,0 +1,23 @@
1
+ # Atoms index
2
+
3
+ Techniques per role. Global library; filter with **`profiles`** + **`platforms`** + **`type`**.
4
+
5
+ **Types:** `hook` | `reframe` | `proof` | `process` | `cta` | `other`
6
+ **Selection:** table first → drop `dead` → prefer `working` then higher `win/n` → 0–1 per needed type. **`none` allowed.**
7
+
8
+ ## Status (hit-rate, our posts)
9
+
10
+ `trial` | `working` | `dead` — same meaning as `swipe/_index.md`.
11
+ `n` / `win` / `loss` = our published cache. Do not share claim’s epistemic words.
12
+ **No Evidence table in atom files.** Use history = `published/_index` (column `atoms`).
13
+
14
+ ## Ingest
15
+
16
+ `CLAUDE.md` § Library ingest. Capture offer path A; publish path B + gates.
17
+
18
+ ## Catalog
19
+
20
+ | id | file | type | platforms | profiles | status | n | win | loss | one_liner |
21
+ |----|------|------|-----------|----------|--------|---|-----|------|-----------|
22
+
23
+ `profiles: *` = all profiles.
@@ -0,0 +1,31 @@
1
+ ---
2
+ id: A-NEW
3
+ type: hook # hook | reframe | proof | process | cta | other
4
+ status: trial # trial | working | dead
5
+ platforms: [x]
6
+ profiles: ["*"]
7
+ ---
8
+
9
+ # Title
10
+
11
+ ## Procedure (how to write this beat)
12
+
13
+ 1. …
14
+
15
+ ## Applies when
16
+
17
+ - …
18
+
19
+ ## Avoid when
20
+
21
+ - …
22
+
23
+ ## Examples (short; prefer paraphrase over full copy of others)
24
+
25
+ - …
26
+
27
+ ## Source
28
+
29
+ - capture / raw / run links if any
30
+
31
+ <!-- Use history: published/_index column atoms. Do not add ## Evidence here. -->
@@ -0,0 +1,26 @@
1
+ # Claims index
2
+
3
+ Falsifiable angles. Global library; filter with **`profiles`** + **`platforms`**.
4
+
5
+ **Selection:** 0–1 claim per run. Drop `retired`. **`hypothesis` is valid to pick** (that is the test). Rank remaining by `win/n`, not by epistemic status. **`none` allowed.**
6
+
7
+ ## Status (epistemology — “do we still assert this”)
8
+
9
+ `hypothesis` | `supported` | `weakened` | `retired`
10
+
11
+ This is **not** hit-rate. Proposition ledger = `## Evidence` in **this claim’s file**.
12
+
13
+ ## Hits (separate)
14
+
15
+ `n` / `win` / `loss` = our `published.result` when this claim was used. Updating hits **must not** auto-change `status`.
16
+
17
+ ## Ingest / promote
18
+
19
+ `CLAUDE.md` § Library ingest. No single-win → `supported`. `supported` = ≥3 runs that support the **proposition** + user 批准.
20
+
21
+ ## Catalog
22
+
23
+ | id | file | type | platforms | profiles | status | n | win | loss | one_liner |
24
+ |----|------|------|-----------|----------|--------|---|-----|------|-----------|
25
+
26
+ `profiles: *` = all profiles.
@@ -0,0 +1,38 @@
1
+ ---
2
+ id: C-NEW
3
+ version: 1
4
+ type: angle
5
+ status: hypothesis
6
+ platforms: [x]
7
+ profiles: ["*"]
8
+ related_swipe: []
9
+ related_atoms: []
10
+ primary_metric: replies
11
+ confidence: low
12
+ ---
13
+
14
+ # 主张(Objective)
15
+
16
+ One falsifiable sentence.
17
+
18
+ ## Applies when
19
+
20
+ - …
21
+
22
+ ## Avoid when
23
+
24
+ - …
25
+
26
+ ## Procedure (angle constraints for Writer)
27
+
28
+ 1. …
29
+
30
+ ## Evidence
31
+
32
+ | run | date | result | vs claim | note |
33
+ |-----|------|--------|----------|------|
34
+ | | | | | |
35
+
36
+ ## Source
37
+
38
+ - …
@@ -0,0 +1,17 @@
1
+ # workbench/
2
+
3
+ Read-only observatory. Source of truth remains the markdown indexes.
4
+
5
+ | File | Role |
6
+ |------|------|
7
+ | `template.html` | UI (do not overwrite on later skill updates if the user customized it) |
8
+ | `build.py` | Scan indexes → `index.html` |
9
+ | `serve.py` | `http://127.0.0.1:8765/workbench/` |
10
+ | `index.html` | Generated — safe to rebuild |
11
+
12
+ ```bash
13
+ python3 workbench/build.py
14
+ python3 workbench/serve.py
15
+ ```
16
+
17
+ If port 8765 is already serving this engine, do not start a second server. Rebuild after Agent writes markdown.