@easysociable/cli 0.1.12 → 0.1.14

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.
@@ -1,99 +0,0 @@
1
- # Needs (audience quotes)
2
-
3
- Not a fourth skill. If the engine `CLAUDE.md` already has **§ Needs**, follow that section **unless this file is newer** — then this file wins for Needs-only rules.
4
-
5
- Do **not** invent quotes. Do **not** scan the watchlist to mint needs. Do **not** create a slideshow.
6
-
7
- ## Triggers
8
-
9
- - 记需求 / 用户原话 / 评论导出
10
- - 扫需求选题
11
- - 扫关键词 / 用关键词扫需求 / 扫 K-xx(research only — see **Keyword scan** below)
12
- - capture audience quotes / user needs
13
- - 调研需求 / 需求落库 / 重新调研并落库
14
-
15
- ## Research axis (easysociable-builder default)
16
-
17
- Product teaches **Content Engines**; EasySociable is the **visual layer**. When researching or screening needs for this profile:
18
-
19
- | Layer | Means | Default |
20
- |-------|--------|---------|
21
- | **L1** | System / sustainability — what to say, what to publish next, memory, pipeline, consistency | **Prefer** |
22
- | **L2** | Judgment / review / approval — AI polished but empty; bottleneck moved to human check | **Prefer** |
23
- | **L3** | Visual / tool friction — Canva, Figma, “looks AI”, brand kit paste | Keep only if user asks; else do not promote as primary |
24
-
25
- Put `layer=L1|L2|L3` in **`## Our gloss` only** — never in the index `quote` cell.
26
-
27
- **Reject:** course/toolkit CTAs, product demos dressed as pains, watchlist viral titles as quotes, Agent-paraphrased “quotes”, wrong-ICP “idk what to post” with no system angle.
28
-
29
- ## Rules
30
-
31
- - Quote cell = **verbatim**. Gloss goes in `## Our gloss`, never in the index `quote` column.
32
- - Status is only `captured` | `promoted` | `retired`. **Never** `clustered`. Merge is not a new status.
33
- - Synonym merge: propose, wait for user yes, then keep the surviving `N-` as `captured`, `frequency += 1`, append a sighting. Retire a mistaken duplicate and note it on the surviving sighting. No hosted clustering.
34
- - Do not mark `promoted` without a `T-` whose `need_ids` contain this `N-`. `topic_ids` non-empty ≡ `promoted`.
35
- - Never write `N-` into topic `capture_id`.
36
- - Hard gate (graphics): once `needs/` exists, `needs/_index.md` needs ≥ **3** `N-` rows. First-session **target** is **5** (under 5 still passes the hard gate). Do not invent quotes to hit the number.
37
- - Quotes may include DMs / students. Keep local. Redact PII if used as published copy.
38
- - After Needs writes: rebuild workbench (`python3 workbench/build.py` or `easysociable engine build`).
39
-
40
- ## Delete vs retire
41
-
42
- - `retired` = soft discard while the user may still want the row visible.
43
- - If the user says **删除 / 删掉 retired / 可以直接删了**: **delete** the entry file(s) and remove the index row(s). Do not leave ghost `retired` rows. Rebuild workbench.
44
- - Do not delete `captured` or `promoted` without an explicit ask.
45
-
46
- ## Keyword generate (from Needs)
47
-
48
- When user asks to generate keywords from needs: follow engine **§ Keywords · Generate**.
49
- Prefer `track=listen` seeds from verbatim Needs; propose in chat; write only on confirm with `seed_from=need:N-…`.
50
- Optional: derive `search` (SEO) or `ask` (GEO question) pairs — not for default social scan.
51
-
52
- ## Keyword / handle scan → Hits → route
53
-
54
- Load `profiles/<id>/keywords.md` (and/or `handles.md`).
55
- Default scan: up to **5** rows with **`track=listen` + `status=active`** (or named `K-xx` / `@handle`). Prefer L1/L2 `pain`/`question`.
56
-
57
- Meaningful hits → write `hits/` (`H-…`, `status=triage`, `keyword_id`, heat when known) + chat cards.
58
- **Needs / library only after route confirm** (engine **§ Hits**). Author posts are not Needs; comments may be. Structure/foil → library via Capture + ingest approval.
59
-
60
- On **X**: `x_*` first. Other platforms only with a working host backend; else ask for paste. Hits are never Topic inputs. Do not default-scan `search`/`ask` rows into Hits.
61
-
62
- ## Ingest paths
63
-
64
- 1. Pasted quote — 「记需求:……」 / “capture audience quotes: …”
65
- 2. Comment / DM export or screenshot — extract quotes; one `N-` each; confirm with the user when unsure.
66
- 3. URL / thread — fetch with host research tools; store the **commenter's** words, not the author's hook. On **X**: `x_*` first, then agent-reach if needed.
67
- 4. After a consult — 「刚才那通咨询记需求」.
68
- 5. Keyword / research pass — screen for L1/L2; **confirm** then write `N-` for verbatim hits; update `_index.md` research note briefly.
69
-
70
- Forbidden: Agent-rewritten sentences as quote; watchlist/keyword viral titles as need; FAQ templates with no original quote; silent batch write from a scan.
71
-
72
- ## Write
73
-
74
- 1. New `needs/entries/N-YYYYMMDD-XX.md` from `needs/_template.md`
75
- 2. New row at the top of `needs/_index.md`
76
- 3. Rebuild workbench
77
- 4. Chat card:
78
-
79
- ```text
80
- ✅ Need N-YYYYMMDD-XX
81
- 【Quote】 …
82
- 【Source】 comment | dm | consult | faq | student | other
83
- 【Layer】 L1 | L2 | L3
84
- 【Frequency】 1
85
- 【Stored】 needs/_index + needs/entries/N-….md
86
- 【Merge】 new | merged into N-… (frequency now k, status still captured)
87
- ```
88
-
89
- ## 扫需求选题
90
-
91
- Input set: `needs/_index.md` rows with `status=captured` (`topic_ids` empty). Max **5** `produce`. Prefer L1/L2 glosses for this profile unless the user asks otherwise.
92
-
93
- Then **§ Topics**: Input gate Need ID `N-…`; `source_type=need`; `need_ids` lists the `N-` (never in `capture_id`); default `scout_label=demand`. **Before any `produce` write, ask the user to choose `generation_mode`** (six modes; recommend `demand` when Need-led). Still run hard filters and that mode’s required-input gate.
94
-
95
- When `produce` creates a `T-` from an `N-`: update `needs/_index.md` + the entry to `status=promoted` and `topic_ids` containing that `T-`. Discard / library: leave `captured` or `retired` — do not mark `promoted` without a T-.
96
-
97
- Audience exception (first activation): `source_type=need` **and** `need_ids` non-empty → matching at least one need gloss counts as one strong audience check; do **not** require a full ICP from `audience.md` / `pillars.md`. `ready` still needs `opp_score ≥ 7.5` **and** `audience ≥ 6`.
98
-
99
- Prefer scanning needs before inbox. Inbox is structure / competitor context.