@easysociable/cli 0.1.3 → 0.1.5
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.
- package/README.md +13 -10
- package/content-engine/scripts/starter.mjs +3 -1
- package/content-engine/scripts/workbench.mjs +13 -8
- package/content-engine/starter/CLAUDE.md +217 -128
- package/content-engine/starter/engine.json +3 -0
- package/content-engine/starter/needs/README.md +38 -0
- package/content-engine/starter/needs/_index.md +31 -0
- package/content-engine/starter/needs/_template.md +24 -0
- package/content-engine/starter/needs/entries/README.md +5 -0
- package/content-engine/starter/products/README.md +38 -0
- package/content-engine/starter/products/_index.md +24 -0
- package/content-engine/starter/products/_template.md +56 -0
- package/content-engine/starter/products/entries/P-001-easysociable.md +150 -0
- package/content-engine/starter/profiles/_index.md +6 -3
- package/content-engine/starter/profiles/default/README.md +4 -1
- package/content-engine/starter/profiles/default/boundaries.md +14 -0
- package/content-engine/starter/profiles/default/expression.md +18 -0
- package/content-engine/starter/profiles/default/lanes.md +12 -0
- package/content-engine/starter/profiles/default/stories.md +15 -0
- package/content-engine/starter/profiles/default/voice.md +14 -0
- package/content-engine/starter/recommendations/README.md +21 -0
- package/content-engine/starter/recommendations/_index.md +21 -0
- package/content-engine/starter/recommendations/_template.md +44 -0
- package/content-engine/starter/runs/_template/brief.md +1 -1
- package/content-engine/starter/runs/_template/pack.md +15 -7
- package/content-engine/starter/runs/_template/packet.md +6 -0
- package/content-engine/starter/swipe/_template.md +3 -1
- package/content-engine/starter/topics/README.md +4 -8
- package/content-engine/starter/topics/_index.md +12 -5
- package/content-engine/starter/topics/_template-item.md +64 -51
- package/content-engine/starter/topics/scoring.md +55 -4
- package/content-engine/workbench/build.py +315 -97
- package/content-engine/workbench/serve.py +0 -0
- package/content-engine/workbench/template.html +172 -94
- package/dist/easysociable.js +191 -133
- package/dist/easysociable.js.map +1 -1
- package/package.json +13 -14
- package/skills/ONBOARDING.md +14 -15
- package/skills/easysociable-content/SKILL.md +100 -19
- package/skills/easysociable-content/workflows/INTERVIEW.md +70 -0
- package/skills/easysociable-content/workflows/NEEDS.md +82 -0
- package/skills/easysociable-slideshow/SKILL.md +79 -45
- package/skills/easysociable-slideshow/references/ARC.md +44 -0
- package/skills/easysociable-slideshow/references/CONTENT_PACK.md +34 -6
- package/skills/easysociable-slideshow/workflows/CREATE_RUN.md +24 -5
- package/skills/easysociable-slideshow/workflows/OUT_OF_SCOPE.md +3 -0
- package/skills/easysociable-template/SKILL.md +13 -16
- package/skills/easysociable-template/references/CATALOG_METADATA.md +21 -18
- package/skills/easysociable-template/scripts/generate-theme-from-hex.mjs +0 -0
- package/skills/easysociable-template/workflows/FILL_AND_RENDER.md +4 -83
- package/skills/easysociable-template/workflows/OUT_OF_SCOPE.md +3 -2
- package/content-engine/starter/discovery/README.md +0 -18
- package/content-engine/starter/discovery/_index.md +0 -27
- package/content-engine/starter/discovery/_template.md +0 -41
- package/content-engine/starter/topics/WATCHLIST.md +0 -65
- package/content-engine/starter/topics/watchlists/README.md +0 -10
- package/content-engine/starter/topics/watchlists/_shared.md +0 -14
- package/content-engine/starter/topics/watchlists/default.md +0 -6
|
@@ -1,25 +1,21 @@
|
|
|
1
1
|
# topics/
|
|
2
2
|
|
|
3
|
-
Topic system: **what to produce next**, after an
|
|
3
|
+
Topic system: **what to produce next**, after an explicit need, offer, review subject, or profile thesis has been judged as an opportunity.
|
|
4
4
|
|
|
5
5
|
| Path | Role |
|
|
6
6
|
|------|------|
|
|
7
7
|
| `_index.md` | Queue registry (one row per topic + `item` link + source engagement) |
|
|
8
|
-
| `items/T-*.md` | One file per opportunity
|
|
9
|
-
| `WATCHLIST.md` | Watchlist router (per-profile scheme B) |
|
|
10
|
-
| `watchlists/<profile_id>.md` | Profile-scoped radar |
|
|
11
|
-
| `watchlists/_shared.md` | Shared radar for all profiles |
|
|
8
|
+
| `items/T-*.md` | One file per opportunity: decision summary + readable judgment, then Score/Trace/Constraints appendix |
|
|
12
9
|
| `scoring.md` | Opportunity dimensions and dual gate |
|
|
13
10
|
| `_template-item.md` | Template for new items |
|
|
14
11
|
|
|
15
12
|
Flow:
|
|
16
13
|
|
|
17
14
|
```text
|
|
18
|
-
|
|
19
|
-
→ user explicitly promotes
|
|
15
|
+
explicit input → editorial judgment
|
|
20
16
|
→ `_index` + `items/T-…` (opportunity 5-dim)
|
|
21
17
|
→ ready only if opp≥7.5 and audience≥6
|
|
22
18
|
→ user opens run → `status=promoted`
|
|
23
19
|
```
|
|
24
20
|
|
|
25
|
-
|
|
21
|
+
The item file is a **decision card**. A content owner who skips YAML and the appendix must still answer: what problem we address, who it serves, what we will say, why now, what should change, and whether to open a run. Five-dim scores stay in the appendix as a gate, not as the reading surface.
|
|
@@ -6,8 +6,8 @@ Statuses live here and in the item—**not** folder names.
|
|
|
6
6
|
|
|
7
7
|
Newest on top.
|
|
8
8
|
|
|
9
|
-
| id | date | opp | aud | status | purpose | scout | platform | pillar | one_liner | item | source_type | src_url | src_handle | src_likes | src_replies | src_bookmarks | engagement_at | capture_id | run |
|
|
10
|
-
| -- | ---- | --- | --- | ------ | ------- | ----- | -------- | ------ | --------- | ---- | ----------- | ------- | ---------- | --------- | ----------- | ------------- | ------------- | ---------- | --- |
|
|
9
|
+
| id | date | opp | aud | status | purpose | scout | platform | pillar | lane | generation_mode | one_liner | item | source_type | src_url | src_handle | src_likes | src_replies | src_bookmarks | engagement_at | capture_id | need_ids | product_ids | product_fit | recommendation_ids | run |
|
|
10
|
+
| -- | ---- | --- | --- | ------ | ------- | ----- | -------- | ------ | --------- | ---- | ----------- | ------- | ---------- | --------- | ----------- | ------------- | ------------- | ---------- | --- | --- | --- | --- |
|
|
11
11
|
|
|
12
12
|
## Status values
|
|
13
13
|
|
|
@@ -29,16 +29,23 @@ Newest on top.
|
|
|
29
29
|
| `opp` | Opportunity score (weighted 5-dim: context/audience/conflict/insight/evidence) |
|
|
30
30
|
| `aud` | Audience dimension score (hard floor ≥ 6 for ready) |
|
|
31
31
|
| `item` | Wikilink to `topics/items/T-….md` |
|
|
32
|
-
| `
|
|
32
|
+
| `lane` | Publishing lane: teach, build, review, compare, offer, or profile-defined |
|
|
33
|
+
| `generation_mode` | How the Topic was formed; see `topics/_template-item.md` |
|
|
34
|
+
| `source_type` | `inbox` \| `user` \| `need` \| `product` \| `recommendation` |
|
|
33
35
|
| `src_*` | **Source post** engagement snapshot — not your publish metrics |
|
|
34
|
-
| `capture_id` | Set only if linked to inbox `C
|
|
36
|
+
| `capture_id` | Set only if linked to inbox `C-…`. **Never** put `N-` here; needs live on the item as `need_ids` |
|
|
37
|
+
| `need_ids` | Audience evidence cited by the Topic; demand evidence, not product proof |
|
|
38
|
+
| `product_ids` | Optional product facts cited by the Topic |
|
|
39
|
+
| `product_fit` | `direct` \| `adjacent` \| `none`; editorial relevance only |
|
|
40
|
+
| `recommendation_ids` | Optional third-party subjects used for review or comparison |
|
|
35
41
|
| `run` | One or more `RUN-…` ids after open (comma-separated if multi-platform siblings) |
|
|
36
42
|
|
|
37
43
|
## Rules
|
|
38
44
|
|
|
39
45
|
- Max **5** new **`produce`** topics per promotion session
|
|
40
|
-
-
|
|
46
|
+
- Topics require an explicit user, need, product, recommendation, or profile input.
|
|
41
47
|
- Scout first; never `ready` on high `src_*` or opp_score alone (need audience ≥ 6 too)
|
|
42
48
|
- Scoring: `topics/scoring.md` (opportunity dimensions)
|
|
49
|
+
- Product fit is optional and never replaces Need evidence or opportunity scoring.
|
|
43
50
|
- `记一下` + URL: **inbox first**, not topics, unless user also asks to score as topic
|
|
44
51
|
- On 开一单: append all new run ids to `run`
|
|
@@ -6,85 +6,98 @@ account: your-handle
|
|
|
6
6
|
profile: default
|
|
7
7
|
platform: x
|
|
8
8
|
pillar: P1
|
|
9
|
-
|
|
9
|
+
lane: teach
|
|
10
|
+
generation_mode: demand
|
|
11
|
+
source_type: inbox | user | need | product | recommendation
|
|
10
12
|
purpose: produce | library | discard
|
|
11
13
|
scout_label: demand | ally | foil | craft_only
|
|
14
|
+
capture_id:
|
|
15
|
+
need_ids:
|
|
16
|
+
product_ids: none
|
|
17
|
+
product_fit: none
|
|
18
|
+
recommendation_ids: none
|
|
12
19
|
---
|
|
13
20
|
|
|
14
|
-
#
|
|
21
|
+
# 选题判断卡
|
|
15
22
|
|
|
16
|
-
|
|
23
|
+
> 这是一条准备讨论的内容机会,不是最终发布标题。
|
|
17
24
|
|
|
18
|
-
|
|
25
|
+
**结论:** ready | backlog | parked
|
|
26
|
+
**状态原因:** 一句话说明为什么得到这个结论
|
|
27
|
+
**适合谁:** 一句话说明具体受众和场景
|
|
28
|
+
**核心判断:** 一句话说明这条内容真正要讨论什么
|
|
29
|
+
**下一步:** 开始生成 / 补需求 / 补证据 / 修改角度 / 放弃
|
|
30
|
+
**产品连接:** none | P-… · direct | adjacent · 一句话说明连接方式
|
|
31
|
+
**生成路径:** demand | demand_to_offer | demand_to_review | review | offer_education | profile_thesis
|
|
19
32
|
|
|
20
|
-
|
|
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
|
|
33
|
+
## 这条内容要解决什么问题?
|
|
27
34
|
|
|
28
|
-
|
|
35
|
+
用 2–4 句话说明现实问题。不要复述标题。
|
|
29
36
|
|
|
30
|
-
|
|
31
|
-
- **scout_label:** demand | ally | foil | craft_only
|
|
32
|
-
- **scout_note:** (one line — why not discard)
|
|
37
|
+
## 他们现在相信什么?
|
|
33
38
|
|
|
34
|
-
|
|
39
|
+
写出受众当前的错误判断或困惑。
|
|
35
40
|
|
|
36
|
-
|
|
37
|
-
- **why_now:**
|
|
41
|
+
## 我们准备讲哪一刀?
|
|
38
42
|
|
|
39
|
-
|
|
43
|
+
说明我们的独特角度,不写完整标题,也不要把来源内容改写成我们的观点。
|
|
40
44
|
|
|
41
|
-
|
|
42
|
-
- **current_belief:**
|
|
43
|
-
- **icp_checks:** (pain / buyer shape / wedge — note which hit, from profile)
|
|
45
|
+
## 为什么现在值得讲?
|
|
44
46
|
|
|
45
|
-
|
|
47
|
+
说明发生了什么变化,以及为什么当前受众需要面对它。不是新闻摘要。
|
|
46
48
|
|
|
47
|
-
|
|
48
|
-
- **new_reality:**
|
|
49
|
-
- **belief_gap:**
|
|
49
|
+
## 看完后应该改变什么?
|
|
50
50
|
|
|
51
|
-
|
|
51
|
+
用“之前 → 之后”表达用户认知或行动上的变化。
|
|
52
52
|
|
|
53
|
-
|
|
54
|
-
- **why_nonobvious:**
|
|
53
|
+
## 凭什么这么判断?
|
|
55
54
|
|
|
56
|
-
|
|
55
|
+
用人话列出 Needs、Product、Recommendation、Capture 或其他依据。
|
|
57
56
|
|
|
58
|
-
|
|
59
|
-
- **type:** data | example | case | mechanism | expert | observation
|
|
60
|
-
- **gaps:**
|
|
57
|
+
## 当前缺口
|
|
61
58
|
|
|
62
|
-
|
|
59
|
+
还缺什么需求证据、案例、用户反馈或产品事实。没有缺口就写“无”。
|
|
63
60
|
|
|
64
|
-
|
|
65
|
-
|-----|------------|------|
|
|
66
|
-
| context | | |
|
|
67
|
-
| audience | | |
|
|
68
|
-
| conflict | | |
|
|
69
|
-
| insight | | |
|
|
70
|
-
| evidence | | |
|
|
61
|
+
## 建议形式
|
|
71
62
|
|
|
72
|
-
|
|
73
|
-
**audience_floor:** (hard check ≥ 6)
|
|
63
|
+
平台、Lane 和推荐内容形式。暂时不写完整脚本。
|
|
74
64
|
|
|
75
|
-
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## 评分与追踪附录
|
|
68
|
+
|
|
69
|
+
以下内容服务于复核、机器读取和后续交接,不是主阅读面。
|
|
70
|
+
|
|
71
|
+
### Score
|
|
72
|
+
|
|
73
|
+
Numbers only. Do not repeat the card above in a note column.
|
|
74
|
+
|
|
75
|
+
| dim | 0–10 |
|
|
76
|
+
|-----|------|
|
|
77
|
+
| context | |
|
|
78
|
+
| audience | |
|
|
79
|
+
| conflict | |
|
|
80
|
+
| insight | |
|
|
81
|
+
| evidence | |
|
|
76
82
|
|
|
77
|
-
|
|
78
|
-
- audience_pain:
|
|
79
|
-
- risk:
|
|
83
|
+
**opp:** · **aud:** · **verdict:**
|
|
80
84
|
|
|
81
|
-
|
|
85
|
+
### Trace
|
|
82
86
|
|
|
87
|
+
- source:
|
|
88
|
+
- capture_id: (inbox `C-…` only)
|
|
89
|
+
- need_ids:
|
|
90
|
+
- product_ids:
|
|
91
|
+
- product_fit:
|
|
92
|
+
- recommendation_ids:
|
|
93
|
+
- lane:
|
|
94
|
+
- generation_mode:
|
|
95
|
+
- raw:
|
|
96
|
+
- src: likes / replies / bookmarks / views @ time
|
|
83
97
|
- swipe: none | S…
|
|
84
98
|
- atoms: none | …
|
|
85
99
|
- claim: none | C…
|
|
86
100
|
|
|
87
|
-
|
|
101
|
+
### Constraints
|
|
88
102
|
|
|
89
|
-
-
|
|
90
|
-
- run_id: (filled when promoted)
|
|
103
|
+
Writer must-nots. Keep short. Empty is allowed.
|
|
@@ -14,7 +14,9 @@ Scores whether a topic **deserves to exist as content**, not whether it can be w
|
|
|
14
14
|
## Pipeline (do not skip)
|
|
15
15
|
|
|
16
16
|
```text
|
|
17
|
-
|
|
17
|
+
Needs / Products / Recommendations → editorial judgment
|
|
18
|
+
→ user accepts
|
|
19
|
+
inbox / url / need / user idea
|
|
18
20
|
→ 0) Hard filters
|
|
19
21
|
→ 1) Scout gate (purpose + label) ← most signals die here
|
|
20
22
|
→ 2) Opportunity five-dim score ← only for produce candidates
|
|
@@ -24,7 +26,23 @@ watchlist / inbox / url / discovery signal
|
|
|
24
26
|
|
|
25
27
|
Library-only signals may skip (2)–(3) — see Scout purposes below.
|
|
26
28
|
|
|
27
|
-
|
|
29
|
+
Topic scoring runs only after an explicit input and editorial judgment. Product or recommendation fit is context, not evidence of audience demand.
|
|
30
|
+
|
|
31
|
+
Need match (`need_ids` non-empty) → default `scout_label=demand`. Do not create an `N-` from a product claim or headline.
|
|
32
|
+
|
|
33
|
+
Product fit is a separate optional annotation:
|
|
34
|
+
|
|
35
|
+
```text
|
|
36
|
+
Needs = demand evidence
|
|
37
|
+
Products = offer facts
|
|
38
|
+
Topics = editorial judgment over the evidence
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
Use `product_ids` only when the Topic honestly connects to an active product
|
|
42
|
+
entry. Use `product_fit=direct` when the Topic addresses a problem the product
|
|
43
|
+
solves, `adjacent` when it builds context without being a pitch, and `none`
|
|
44
|
+
when no product connection is needed. Product fit does not increase a score,
|
|
45
|
+
replace `need_ids`, or make a Topic `ready`.
|
|
28
46
|
|
|
29
47
|
---
|
|
30
48
|
|
|
@@ -33,7 +51,6 @@ Watchlist scans create **Discovery** records first. Topic scoring runs only afte
|
|
|
33
51
|
- Off **profile pillars** (unless user override)
|
|
34
52
|
- Hits audience **Not for** (F4F, pure crypto shill, comment-gate junk as the only substance, etc.)
|
|
35
53
|
- Requires invented personal metrics/experience to write honestly
|
|
36
|
-
- Wrong network for the watchlist row (e.g. X tools on a `tiktok` handle)
|
|
37
54
|
|
|
38
55
|
---
|
|
39
56
|
|
|
@@ -84,6 +101,8 @@ Only required for `purpose: produce`. Optional brief notes for `library`.
|
|
|
84
101
|
**Principle:** these five dimensions answer **"is this worth saying?"** — not "can it be written well?"
|
|
85
102
|
Presentation concerns (framework, structure, format) belong at Brief stage.
|
|
86
103
|
|
|
104
|
+
Write reasons in the topic's **readable judgment layer**. The `## Score` table is numbers only — do not duplicate the card in a note column. Verdict (`ready` / `backlog` / `parked`) belongs in the decision summary, then echoed as one line under Score.
|
|
105
|
+
|
|
87
106
|
| Key | Name | What to judge | Weight |
|
|
88
107
|
|-----|------|---------------|--------|
|
|
89
108
|
| `context` | Context | What changed? Why now? Timing, freshness, relevance to the audience's world | **15%** |
|
|
@@ -116,6 +135,15 @@ Score using these checks (note which hit):
|
|
|
116
135
|
2. **Buyer shape** — who buys/acts matches audience buyer as defined there
|
|
117
136
|
3. **Wedge land** — can honestly teach or contrast toward this account’s product/wedge without inventing claims
|
|
118
137
|
|
|
138
|
+
If product fit is `direct`, load the cited product entry and verify that the
|
|
139
|
+
Topic's problem and proposed CTA are inside its `Problem`, `Mechanism`, and
|
|
140
|
+
`Not solving` sections. If the product is not needed, score the Topic on its
|
|
141
|
+
audience and wedge without forcing a mention.
|
|
142
|
+
|
|
143
|
+
**Need-source exception:** when `source_type=need` **and** `need_ids` is non-empty, matching **at least one need gloss** counts as one strong audience check. Do **not** require a full ICP (`audience.md` / `pillars.md` may still be hypothesis). Non-need sources do not get this exception. `ready` is still `opp_score ≥ 7.5` **and** `audience ≥ 6`.
|
|
144
|
+
|
|
145
|
+
Needs default `scout_label=demand`. Still pass hard filters. `frequency ≥ 3` may strengthen context `why_now`; do **not** fold it into `src_*`.
|
|
146
|
+
|
|
119
147
|
| Range | Guide |
|
|
120
148
|
|-------|-------|
|
|
121
149
|
| 8–10 | ≥2 checks strong; clear buyer + pain |
|
|
@@ -131,7 +159,7 @@ Score using these checks (note which hit):
|
|
|
131
159
|
| 5–7 | Some tension but the gap is soft or already widely acknowledged |
|
|
132
160
|
| 0–4 | No real conflict; topic is an observation or list with nothing to challenge |
|
|
133
161
|
|
|
134
|
-
When scoring,
|
|
162
|
+
When scoring, write the false belief and the gap once under 「他们现在相信什么」 — not just a score, and not a second time in the Score table. If you can't articulate what the audience currently believes wrong, the conflict score cannot be above 5.
|
|
135
163
|
|
|
136
164
|
**Insight (25%)**
|
|
137
165
|
|
|
@@ -149,6 +177,29 @@ When scoring, the agent must write the `current_belief` and `belief_gap` on the
|
|
|
149
177
|
| 5–7 | Evidence exists but generic or secondhand |
|
|
150
178
|
| 0–4 | No evidence beyond assertion; "experts say" with no expert named |
|
|
151
179
|
|
|
180
|
+
A verbatim need quote is `observation` evidence. List the quote (or a paraphrase **and** the `N-` id) under `## Evidence.available`. Without an `N-` / `C-` / user-lived experience, evidence cannot be above 5. Mechanism / lived experience is still required to reach 8–10.
|
|
181
|
+
|
|
182
|
+
Product documentation is evidence of what the product does, not evidence that
|
|
183
|
+
the audience wants it. Do not use a product entry to manufacture a Need or to
|
|
184
|
+
raise the audience score.
|
|
185
|
+
|
|
186
|
+
### Generation-mode gates
|
|
187
|
+
|
|
188
|
+
Before scoring, set the smallest honest `generation_mode`:
|
|
189
|
+
|
|
190
|
+
| mode | Required |
|
|
191
|
+
|------|----------|
|
|
192
|
+
| `demand` | `need_ids` + Profile |
|
|
193
|
+
| `demand_to_offer` | `need_ids` + `product_ids` + Profile |
|
|
194
|
+
| `demand_to_review` | `need_ids` + `recommendation_ids` + Profile |
|
|
195
|
+
| `review` | `recommendation_ids` + named evidence + Profile |
|
|
196
|
+
| `offer_education` | `product_ids` + product mechanism + Profile |
|
|
197
|
+
| `profile_thesis` | Profile + Pillar |
|
|
198
|
+
|
|
199
|
+
Do not use `review` when the only evidence is vendor marketing. Review entries
|
|
200
|
+
must state limitations, research date, and commercial disclosure where
|
|
201
|
+
relevant. Product-only and recommendation-only inputs do not imply demand.
|
|
202
|
+
|
|
152
203
|
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
204
|
|
|
154
205
|
---
|