pi-crew 0.9.49 → 0.9.50
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/CHANGELOG.md +209 -0
- package/dist/build-meta.json +50 -32
- package/dist/index.mjs +75 -42
- package/dist/index.mjs.map +4 -4
- package/package.json +1 -2
- package/skills/distill-persona/SKILL.md +83 -145
- package/skills/distill-persona/references/cross-skill-differentiation.md +12 -0
- package/skills/distill-persona/references/description-discipline.md +6 -0
- package/skills/distill-persona/references/diagnostic-path.md +25 -0
- package/skills/distill-persona/references/fidelity-rubric.md +19 -0
- package/skills/distill-persona/references/field-models.md +20 -0
- package/skills/distill-persona/references/optional-body-sections.md +9 -0
- package/skills/distill-persona/references/registry-routing.md +11 -0
- package/skills/distill-persona/references/self-upgrade-directive.md +20 -0
- package/skills/distill-persona/references/taste-principles.md +8 -0
- package/skills/distill-persona/references/topic-variant.md +13 -0
- package/skills/distill-persona/references/update-mode.md +7 -0
- package/skills/distill-persona/scripts/validate-run.mjs +297 -0
- package/skills/distill-software/SKILL.md +151 -90
- package/skills/research/SKILL.md +1 -1
- package/src/extension/crew-cleanup.ts +18 -1
- package/src/extension/crew-vibes/index.ts +11 -2
- package/src/extension/register.ts +1 -1
- package/src/extension/registration/command-registration.ts +1 -0
- package/src/extension/registration/commands.ts +7 -3
- package/src/extension/registration/lifecycle-handlers.ts +1 -3
- package/src/extension/registration/ui.ts +4 -0
- package/src/extension/registration/viewers.ts +3 -0
- package/src/extension/team-tool/run.ts +7 -6
- package/src/runtime/chain-runner.ts +3 -2
- package/src/runtime/pipeline-runner.ts +8 -7
- package/src/ui/live-run-sidebar.ts +2 -0
- package/src/ui/mascot.ts +11 -9
- package/src/ui/render-coalescer.ts +9 -0
- package/src/ui/run-snapshot-cache.ts +10 -11
- package/src/ui/terminal-status.ts +5 -0
- package/src/ui/widget/index.ts +3 -5
- package/src/ui/widget/widget-types.ts +0 -1
- package/assets/runner-spritesheet.png +0 -0
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pi-crew",
|
|
3
|
-
"version": "0.9.
|
|
3
|
+
"version": "0.9.50",
|
|
4
4
|
"description": "Pi extension for coordinated AI teams, workflows, worktrees, and async task orchestration",
|
|
5
5
|
"author": "baphuongna",
|
|
6
6
|
"license": "MIT",
|
|
@@ -39,7 +39,6 @@
|
|
|
39
39
|
"skills/**",
|
|
40
40
|
"themes/",
|
|
41
41
|
"assets/crew-vibes.ttf",
|
|
42
|
-
"assets/runner-spritesheet.png",
|
|
43
42
|
"scripts/postinstall.mjs",
|
|
44
43
|
"scripts/install-crew-vibes-font.mjs",
|
|
45
44
|
"scripts/build-crew-vibes-font.py",
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: distill-persona
|
|
3
|
-
description:
|
|
3
|
+
description: Distill a person's (or field's) thinking into a runnable pi skill — research, extract, validate, generate. REQUIRED — read the full skill file first (multi-phase protocol with machine-checked gates); run the validate-run script on <run-dir> before claiming done — ALL-GREEN required.
|
|
4
4
|
origin: local
|
|
5
5
|
triggers:
|
|
6
6
|
- "distill a persona"
|
|
@@ -23,23 +23,7 @@ triggers:
|
|
|
23
23
|
|
|
24
24
|
---
|
|
25
25
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
**Chưng cất = chắt lọc tinh túy source → apply VÀO target** (target cải thiện). Skill chỉ là 1 tool apply, không phải output.
|
|
29
|
-
|
|
30
|
-
**Skill trong source cũng chỉ là 1 PHẦN cần sweep** — xử lý bằng cùng 3-chiều filter như mọi phần khác (conventions, architecture, lint, decisions...). Nếu skill đó hữu dụng cho target → lấy; không → bỏ. Không ưu tiên, không đặc biệt.
|
|
31
|
-
|
|
32
|
-
**ĐÀO TRIỆT ĐỂ — KHÔNG QUA LOA**: khi chưng cất 1 đối tượng, PHẢI đọc/re-read đầy đủ TOÀN BỘ nội dung của đối tượng đó. Không dựa vào trí nhớ. Không recap. Mỗi file, mỗi section, mỗi practice phải được:
|
|
33
|
-
1. **Đọc thật** (read/re-read file gốc, không memory-grep)
|
|
34
|
-
2. **Trích từng finding** (systematic, từng section)
|
|
35
|
-
3. **So sánh với target** (3-chiều filter: relevant? → có? → cần/tốt hơn?)
|
|
36
|
-
4. **Ghi lại** kết quả filter (ADOPT/IMPROVE/MERGE/SKIP + lý do)
|
|
37
|
-
|
|
38
|
-
Qua loa = thất bại. Memory-recap = thất bại. Chưng cất thật = đọc từng dòng → trích → so → apply.
|
|
39
|
-
|
|
40
|
-
**Khi sử dụng**: nếu output chỉ là standalone skill (không apply vào target) → **chưa hoàn thành**. Tự nâng cấp: thêm target parameter + 3-chiều filter (relevance → presence+need → quality compare) + **pre-apply effectiveness verification** (SELECTED phải chứng minh hiệu quả CHO TARGET NÀY — generative/problem-exists/delta-test — trước khi apply; "assume effective" = không được) + apply phase. See `distill-software` for the full directive + the EFFECTIVENESS VERIFICATION gate spec.
|
|
41
|
-
|
|
42
|
-
**Pre-apply gate (tóm tắt, áp dụng cả khi persona distill INTO target)**: giữa "đã quyết định ADOPT/IMPROVE/MERGE" và "apply" phải có 1 verify bước — (1) concrete delta (cái gì đổi?), (2) effectiveness proof (≥1: đổi quyết định thật / target có vấn đề này / delta-test tốt hơn), (3) conflict check, (4) verdict ✅TO-APPLY / ❌REJECTED+log. Chỉ TO-APPLY mới edit target. Đây là analog apply-side của Phase 2.6 V3 (V3 verify model effective lúc extract; gate này verify apply effective lúc integrate). **APPLY consent + path-containment gate (HIGH-2)**: trước khi edit bất kỳ target file nào: (a) resolve target về canonical path, kiểm tra nằm trong approved root — reject symlink escape / out-of-target writes; (b) xuất exact file list + diff plan cho user; (c) yêu cầu **explicit user confirmation** trước lần ghi đầu tiên (no destructive action without `--confirm`); (d) rollback = inverse patch hoặc restore file cụ thể, không broad `git reset`/clean/force-push; (e) không tự delete/prune, install dependency, chạy script từ source repo, commit/publish, hay gửi network data.
|
|
26
|
+
> Detail: self-upgrade directive + apply-side consent gate — see `references/self-upgrade-directive.md`
|
|
43
27
|
|
|
44
28
|
---
|
|
45
29
|
|
|
@@ -55,23 +39,33 @@ Qua loa = thất bại. Memory-recap = thất bại. Chưng cất thật = đọ
|
|
|
55
39
|
|
|
56
40
|
---
|
|
57
41
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
> Self-distillation artifact: this skill was applied to its own sources (nuwa engine + 2 awesome-list indexes). Full triple-verification synthesis in `references/distillation-field-synthesis.md`. Five field models surfaced that the engine-only view missed — they shape Phase 0 below.
|
|
61
|
-
|
|
62
|
-
**M-F1 — Dissemination flywheel.** A mature distillation practice is 3 layers: **engine (distill) → index (awesome-list) → auto-curation (issue→PR→merge)**. Both awesome-lists ship auto-curation pipelines wrapping nuwa. *Implication*: distilling a skill is step 1; getting it discovered + quality-gated + distributed is steps 2-3. Overkill at personal scale; earns its cost at registry scale.
|
|
42
|
+
> Detail: field models M-F1→M-F7 (distillation-field meta-models) — see `references/field-models.md`
|
|
63
43
|
|
|
64
|
-
|
|
44
|
+
## 🔴 COMPLETION GATE (machine-checked) — run BEFORE claiming done
|
|
65
45
|
|
|
66
|
-
|
|
46
|
+
You are NOT done until `node skills/distill-persona/scripts/validate-run.mjs <run-dir>` prints ALL-GREEN.
|
|
47
|
+
The gate checks every process artifact + every gate fired. If you feel tempted to skip a phase to save effort, THAT is exactly when you must run the gate.
|
|
48
|
+
A skipped gate = a failed run. The verifier role runs it independently.
|
|
67
49
|
|
|
68
|
-
**
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
50
|
+
**Canonical run layout** (produce ALL artifacts inside the run-dir — solves artifact-scattering):
|
|
51
|
+
```
|
|
52
|
+
<run-dir>/ # e.g. .crew/runs/<name>-DISTILL/ or source/<name>-DISTILL/
|
|
53
|
+
SKILL.md # the distillation OUTPUT (intermediate — the deliverable is the APPLIED target)
|
|
54
|
+
APPLY-LOG.md # Phase 4 — what was edited in the TARGET (proves APPLY happened)
|
|
55
|
+
FIDELITY.md
|
|
56
|
+
DISTILLATION-PROCESS-CHECKLIST.md
|
|
57
|
+
EXCAVATION-CHECKLIST.md
|
|
58
|
+
references/
|
|
59
|
+
research/
|
|
60
|
+
COVERAGE-MANIFEST.md
|
|
61
|
+
V5-VERIFICATION.md
|
|
62
|
+
EFFECTIVENESS-VERIFICATION.md
|
|
63
|
+
shards/*.md
|
|
64
|
+
handoff.md # only if multi-session
|
|
65
|
+
```
|
|
66
|
+
The skill is INSTALLED to `~/.pi/agent/skills/` ONLY AFTER validate-run prints ALL-GREEN.
|
|
73
67
|
|
|
74
|
-
**
|
|
68
|
+
**Phase 3→4 hard stop**: after writing SKILL.md, run `validate-run.mjs <run-dir>` IMMEDIATELY — it WILL fail until `APPLY-LOG.md` (Phase 4 — what you edited in the target) + `FIDELITY.md` exist. SKILL.md alone = incomplete. Do not declare done.
|
|
75
69
|
|
|
76
70
|
---
|
|
77
71
|
|
|
@@ -100,39 +94,16 @@ Ask (max 2 rounds; give defaults so questions never block value):
|
|
|
100
94
|
| **standard (default)** | 6 streams | most cases | medium (use a lighter model to cut cost) |
|
|
101
95
|
| deep | 6 streams + full primary-source archive | publishing a flagship skill | highest |
|
|
102
96
|
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
User doesn't know who/what to distill, only has a need or problem. Route:
|
|
106
|
-
1. **1-2 clarifying questions** to locate the need dimension. Match against:
|
|
107
|
-
| Need dimension | Typical expression | Thinking-framework direction |
|
|
108
|
-
|---|---|---|
|
|
109
|
-
| Decision & judgment | "how to decide better" | Multi-model thinking, inversion, probabilistic |
|
|
110
|
-
| Expression & writing | "can't explain clearly" | Feynman simplification, storytelling, analogy |
|
|
111
|
-
| Business & startup | "can't find PMF" | First principles, leverage, product restraint |
|
|
112
|
-
| Teaching & communication | "students don't get it" | Known-to-unknown, metaphor, minimum viable knowledge |
|
|
113
|
-
| Critical thinking | "always getting fooled" | Falsification, evolutionary lens, cognitive-bias ID |
|
|
114
|
-
| Content creation | "no views on videos" | Attention engineering, test-iterate, audience psych |
|
|
115
|
-
| Life strategy | "career lost, anxious" | Long-termism, leverage selection, compounding |
|
|
116
|
-
| Risk & uncertainty | "how to handle black swans" | Antifragility, convexity, tail-risk management |
|
|
117
|
-
| Design & product | "UX is bad, can't simplify" | Minimalism, user mental models, constraint-as-creativity |
|
|
118
|
-
| Humor & expressiveness | "too serious, not interesting" | Absurd contrast, expectation violation, self-deprecating authority |
|
|
119
|
-
2. **Recommend 2-3 candidates** from DUAL SOURCES:
|
|
120
|
-
- **Source A**: scan `<skill-dirs>/*-perspective/` for EXISTING skills matching the need → mark ⚡ (plug-and-play, zero cost).
|
|
121
|
-
- **Source B**: propose NEW distillation targets matching the need → mark 🆕.
|
|
122
|
-
- Each candidate: `### Candidate: [name] ⚡/🆕` + **core lens** (1 sentence) + **why it fits your need** + **limitation** (what it CAN'T help with).
|
|
123
|
-
- Principles: ≤3 candidates (choice paralysis is worse than no choice); existing skills first; candidates must differ from each other; always state limitations.
|
|
124
|
-
3. User selects → proceed to Phase 0A → Phase 0.5.
|
|
125
|
-
|
|
126
|
-
> Principle: max 2 rounds of questions. If the user's need is already clear, recommend directly.
|
|
97
|
+
> Detail: diagnostic path (vague-need routing) — see `references/diagnostic-path.md`
|
|
127
98
|
|
|
128
99
|
### Special cases
|
|
129
100
|
|
|
130
|
-
- **Cold/obscure target** (
|
|
131
|
-
- **Self-distillation** ("distill myself"): user MUST provide their own material (can't web-search a private individual). Handle **self-cognition bias**
|
|
101
|
+
- **Cold/obscure target** (<10 sources): reduce to 2-3 models, each marked "based on limited info"; expand honest-boundary section; note the gap. Do NOT pad with generic advice.
|
|
102
|
+
- **Self-distillation** ("distill myself"): user MUST provide their own material (can't web-search a private individual). Handle **self-cognition bias** (user overestimates strengths, ignores blind spots). Use local-corpus mode exclusively. **Selective disclosure**: before material, ask "anything you deliberately want NOT to encode?" — trade secrets, exploitable weaknesses, personal boundaries are valid exclusions. A self-skill with deliberate blind spots is *better* than one that makes you fully replaceable.
|
|
132
103
|
- **Living non-public individual** (colleague, boss, relative): consent required + subject-provided material. Ethics gate (M-F3) is mandatory.
|
|
133
|
-
- **Deceased/historical figure**: stable sources but
|
|
104
|
+
- **Deceased/historical figure**: stable sources but biography bias; multi-source cross-verify. **F2' precedence**: most novel edges are framework-answerable, so **F2' (inference-flag) dominates F13** — few post-cutoff events, but many framework-derivable answers MUST be flagged as inference. **Grief/commemorative distillation** (personal loss): the OUTPUT skill MUST include a "memory aid, not the person" disclaimer, an anti-dependency nudge, and a grief-resource pointer if recent. Safety design requirement.
|
|
134
105
|
|
|
135
|
-
> **Context-window guard (F6):** a full
|
|
106
|
+
> **Context-window guard (F6):** a full distillation can exceed 500k tokens. **Segment across sessions**: each phase writes state to `references/research/` (they ARE the checkpoint). ≤200k-window models: 3 sessions (Phase 0–1 / 1.5–2.5 / 3–5). **Session handoff (#9)**: when a session ends mid-run, write a structured handoff (see `references/handoff.md`) — goal, what's tried, what's blocked, next-action, state-file paths.
|
|
136
107
|
|
|
137
108
|
---
|
|
138
109
|
|
|
@@ -182,17 +153,17 @@ Create immediately, before research:
|
|
|
182
153
|
|
|
183
154
|
### Excavation checklist (track progress + verify each part — memory fades across turns; the checklist persists)
|
|
184
155
|
|
|
185
|
-
Maintain `<skill-dir>/EXCAVATION-CHECKLIST.md` from the moment research starts
|
|
156
|
+
Maintain `<skill-dir>/EXCAVATION-CHECKLIST.md` from the moment research starts — the single source of truth for what was actually read vs remembered/skipped. **A status never advances to ✅ without a proof-of-read; a part isn't done until its artifact file exists and is non-trivial.**
|
|
186
157
|
|
|
187
158
|
**States** (use the emoji literally so the validator can count):
|
|
188
159
|
- ⬜ not-started · ⏳ reading · ✅ read-verified · 📄 artifact-exists · ⏭ skipped(reason) · 🧠 memory(unfetched — counts in the ship-gate ratio)
|
|
189
160
|
|
|
190
|
-
**The verify-gate (proof-of-read)** —
|
|
191
|
-
- A ✅ requires a **verbatim quote + exact location** (page
|
|
192
|
-
-
|
|
161
|
+
**The verify-gate (proof-of-read)** — prevents "marked done but didn't really read":
|
|
162
|
+
- A ✅ requires a **verbatim quote + exact location** (page/chapter/timestamp/line) you could ONLY produce by actually reading the source — e.g. `TFS p.204 "confidence is determined by the coherence of the story"`. Vague paraphrase is NOT proof.
|
|
163
|
+
- Record in the `Proof of read` column; can't produce one → state stays ⏳ (or 🧠).
|
|
193
164
|
|
|
194
165
|
**The artifact check** — "đã có file chưng cất của phần đó chưa":
|
|
195
|
-
- A 📄 requires the
|
|
166
|
+
- A 📄 requires the part's findings file to **exist AND be non-trivial** (≥10 lines, real fetched citations). Path + LOC in the `Artifact` column.
|
|
196
167
|
|
|
197
168
|
**Format:**
|
|
198
169
|
```markdown
|
|
@@ -215,7 +186,7 @@ started: YYYY-MM-DD · last-updated: YYYY-MM-DD · 🧠 memory-ratio: NN% (X/Y f
|
|
|
215
186
|
|
|
216
187
|
**Rules:** update the checklist at the END of every shard/agent (not from memory later). A row with ⬜ or ⏳ at ship-time = that part was NOT distilled; it must become ⏭(reason) or 🧠, or you go back and read it. The ship-gate (below) refuses ship-grade unless every required row is ✅📄 or ⏭, and 🧠 ratio ≤30%.
|
|
217
188
|
|
|
218
|
-
> Why this exists:
|
|
189
|
+
> Why this exists: dogfood showed research agents silently fell back to training-data memory (skills scored 79-81/100 but were recaps, not excavations — scores were upper bounds of *memory*). See `references/research/lesson-memory-shortcut.md`.
|
|
219
190
|
|
|
220
191
|
### Process checklist + the 3-empty-rounds deep-dive gate (track the WHOLE pipeline + force multi-round depth)
|
|
221
192
|
|
|
@@ -238,9 +209,11 @@ flavor: person|topic|software · started: YYYY-MM-DD · last-updated: YYYY-MM-DD
|
|
|
238
209
|
| 2 Triple-verification | | candidates→models/heuristics | |
|
|
239
210
|
| 2.5 Extraction checkpoint | | models confirmed | |
|
|
240
211
|
| 2.6 V1-V4 (+V5 software) | | every model passed; rejects logged | |
|
|
241
|
-
|
|
|
212
|
+
| Cross-skill overlap | | overlap check (anti-pattern 11) | |
|
|
213
|
+
| 2.7 Plan approval gate | | plan table + APPROVED (or LOW-YIELD DEFENSE) | |
|
|
242
214
|
| 3 Build skill | | SKILL.md + validate-structure green | |
|
|
243
215
|
| 4 Fidelity | | FIDELITY.md + edge-honesty tested | |
|
|
216
|
+
| 5.5 Adversarial scrutinize | | SCRUTINIZE-REPORT.md; HIGH findings resolved | |
|
|
244
217
|
| 5 Refine + ship-gate | | all ship-gate items green | |
|
|
245
218
|
|
|
246
219
|
## Deep-dive round log (the 3-empty-rounds gate — MANDATORY)
|
|
@@ -262,13 +235,13 @@ flavor: person|topic|software · started: YYYY-MM-DD · last-updated: YYYY-MM-DD
|
|
|
262
235
|
- A row with ⬜ or ⏳ at ship-time = that phase wasn't completed → ship-gate refuses.
|
|
263
236
|
|
|
264
237
|
**Dispatch is runtime-agnostic (base skill — never hardcode one runtime's mechanism, F1):**
|
|
265
|
-
- **Preferred**: run workers concurrently via THIS runtime's native subagent mechanism (pi-crew `team action='parallel'` / background `Agent
|
|
266
|
-
- **Portable default**:
|
|
267
|
-
- The concurrency *mechanism* is the adapter; a specialization hardcodes
|
|
238
|
+
- **Preferred**: run workers concurrently via THIS runtime's native subagent mechanism (pi-crew `team action='parallel'` / background `Agent` / Cursor·Codex equivalents). Shared `batch_id` if supported.
|
|
239
|
+
- **Portable default**: no background/subagent support → run **serially** (persist each before the next). **Never hang waiting on a notification that may never come.**
|
|
240
|
+
- The concurrency *mechanism* is the adapter; a specialization hardcodes it, the base does not.
|
|
268
241
|
|
|
269
242
|
**Mode selection**:
|
|
270
243
|
- **person flavor** → **6 streams** (a person has natural dimensions; thematic decomposition) — table below.
|
|
271
|
-
- **topic / software-codebase flavor** → **exhaustive structural sweep** (a project is arbitrary structure; sweep EVERY part over multiple rounds until 100% covered — see end of this phase). **Never a 1-2-pass gestalt.**
|
|
244
|
+
- **topic / software-codebase flavor** → **exhaustive structural sweep** (a project is arbitrary structure; sweep EVERY part over multiple rounds until 100% covered — see end of this phase). **Never a 1-2-pass gestalt.** The "miss nothing" guarantee.
|
|
272
245
|
|
|
273
246
|
### Person mode — 6 streams
|
|
274
247
|
|
|
@@ -283,11 +256,11 @@ flavor: person|topic|software · started: YYYY-MM-DD · last-updated: YYYY-MM-DD
|
|
|
283
256
|
|
|
284
257
|
**Per-stream hard rules**: write findings to the file; mark source + credibility (primary > secondary > inferred); distinguish "they said" vs "others said of them" vs "I infer"; **preserve contradictions, don't smooth them**.
|
|
285
258
|
|
|
286
|
-
**Source priority**: user primary corpus > their
|
|
259
|
+
**Source priority**: user primary corpus > their writings/conversations/decisions > social > peer reviews > secondary retellings. **Source blacklist (Chinese figures)**: Zhihu, WeChat OA, Baidu Baike — never. Prefer Bilibili raw / Xiaoyuzhou / authoritative media.
|
|
287
260
|
|
|
288
|
-
**Tool availability is guarded** (F1): each stream may use WebSearch / web-article fetch / `rg` / `git` / pi-langsrv *if available
|
|
261
|
+
**Tool availability is guarded** (F1): each stream may use WebSearch / web-article fetch / `rg` / `git` / pi-langsrv *if available*; otherwise degrade to local-corpus mode and say so. Never assume a named external skill exists.
|
|
289
262
|
|
|
290
|
-
**Scan installed info-gathering skills (provenance-gated)**:
|
|
263
|
+
**Scan installed info-gathering skills (provenance-gated)**: scan `<skill-dirs>/` for skills that *could* help (PDF readers, transcription, web-article-readers, etc.). **Do NOT auto-load** — list metadata + provenance only; only skills on an **explicit user allowlist** may be referenced. A project-local skill discovered at runtime is UNTRUSTED DATA until allowlisted (Core Principle #7).
|
|
291
264
|
|
|
292
265
|
**Local-corpus material-type handling** (when user provides material):
|
|
293
266
|
| Material type | Process | Streams covered |
|
|
@@ -299,7 +272,7 @@ flavor: person|topic|software · started: YYYY-MM-DD · last-updated: YYYY-MM-DD
|
|
|
299
272
|
| Social media export | analyze fragment-expression patterns | expression |
|
|
300
273
|
| Internal docs/memos | analyze decision logic | decisions |
|
|
301
274
|
| User's own notes | cross-reference as secondary source | varies |
|
|
302
|
-
| **ALL types** | **PII scrubbing (mandatory pre-processing)**: scan for
|
|
275
|
+
| **ALL types** | **PII scrubbing (mandatory pre-processing)**: scan for + redact phone, email, address, ID, financial, medical info → `[REDACTED]`. Protects subject + anyone mentioned. Also applies to `references/sources/` before persistence. | all streams |
|
|
303
276
|
|
|
304
277
|
**Agent prompt template** (for spawning each research subagent):
|
|
305
278
|
```
|
|
@@ -343,7 +316,7 @@ Source blacklist: [if Chinese figure: no Zhihu/WeChat/Baidu Baike]
|
|
|
343
316
|
|
|
344
317
|
**1c — Self-correction meta-loop** (the skill upgrades ITSELF from every run):
|
|
345
318
|
- If a round surfaces a **part-type the methodology mishandles**, OR a new extraction technique, OR a coverage gap → **PAUSE the sweep, upgrade THIS skill** (edit SKILL.md + log in BUILD-NOTES), then resume. The base skill compounds; it does not repeat the same blind spot.
|
|
346
|
-
- **Darwin eval ratchet
|
|
319
|
+
- **Darwin eval ratchet**: after each run, score the output (fidelity_eval.py); improved vs previous → keep the methodology change; regressed → auto-rollback. EVIDENCE-DRIVEN, not anecdotal.
|
|
347
320
|
|
|
348
321
|
**Anti-pattern (hard rule)**: a 1-2-pass gestalt extraction is a FAILURE of this mode, not a shortcut. If you cannot show a coverage manifest at ≥95%, you have not distilled — you have summarized.
|
|
349
322
|
|
|
@@ -353,7 +326,7 @@ Source blacklist: [if Chinese figure: no Zhihu/WeChat/Baidu Baike]
|
|
|
353
326
|
|
|
354
327
|
Present a table (streams × source-count × key-findings × contradictions × gaps). User confirms quality before synthesis. *"Garbage in, garbage out — catch it here, not in Phase 4."* (defaults provided; checkpoint corrects, never blocks).
|
|
355
328
|
|
|
356
|
-
**Contradiction-as-signal
|
|
329
|
+
**Contradiction-as-signal**: when streams disagree, **surface disagreements explicitly — do not average into false consensus.** Cross-stream contradiction is a signal (subject is inconsistent/context-dependent/evolving), not noise to smooth.
|
|
357
330
|
|
|
358
331
|
---
|
|
359
332
|
|
|
@@ -401,17 +374,17 @@ Apply to EVERY extracted model/heuristic before it enters Phase 3:
|
|
|
401
374
|
|
|
402
375
|
---
|
|
403
376
|
|
|
404
|
-
|
|
377
|
+
> Detail: cross-skill differentiation (anti-overlap) — see `references/cross-skill-differentiation.md`
|
|
405
378
|
|
|
406
|
-
|
|
379
|
+
### Phase 2.7 — PLAN APPROVAL GATE (human-in-the-loop — MANDATORY for interactive use)
|
|
407
380
|
|
|
408
|
-
- **
|
|
409
|
-
- **>60% overlap with only the name changed** → this is **thin repackaging** (anti-pattern #11). Stop; differentiate or pick a different target.
|
|
410
|
-
- Record the differentiation decision in `references/differentiation-check.md`.
|
|
381
|
+
Sau effectiveness-gate verdicts (TO-APPLY / REJECT / DEFER), **STOP** — không vào Phase 3 cho đến khi user approves. Present a table, one row per pattern: `| Pattern | Verdict (TO-APPLY/REJECT/DEFER) | Evidence | Concrete delta (what changes in target) |`
|
|
411
382
|
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
383
|
+
- **REJECT rigor** (anti-lazy): REJECT phải cite concrete evidence — grep (feature absent), problem-doesn't-exist proof, hoặc delta-test (no improvement). "Too small" / "not needed yet" / "doesn't have X" WITHOUT evidence = SKIPPING, not filtering. **Default bias: APPLY unless rigorously proven irrelevant.**
|
|
384
|
+
- **DEFER capture**: DEFER phải state trigger condition + log vào `references/future-apply.md` — NOT silently dropped.
|
|
385
|
+
- **End the turn. WAIT for user approval/modification.** Chỉ sau explicit approval → Phase 3.
|
|
386
|
+
- **Autonomous fallback** (no interactive user — e.g. pi-crew workflow): skip wait, nhưng STILL write the full plan table to `references/apply-plan.md` AND add a "LOW-YIELD DEFENSE" section if applied/selected < 30% (justify minimalism with target evidence). Phase 5.5 scrutinize sẽ challenge.
|
|
387
|
+
- Interactive: sau approval, record "APPROVED" (+ one-line note) at top of `references/apply-plan.md` — proves the pause was respected.
|
|
415
388
|
|
|
416
389
|
## Phase 3 — Build the skill (from the embedded template)
|
|
417
390
|
|
|
@@ -455,14 +428,7 @@ target: person | topic | software
|
|
|
455
428
|
| M13 | 附录: 调研来源 | 一手 (>50% required) + 二手 + 关键引用 (attributed) + research cutoff date (F19) |
|
|
456
429
|
| — | timeline | full chronology + last-12-months dynamics (anti-staleness) |
|
|
457
430
|
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
| Section | When to add | Must contain |
|
|
461
|
-
|---------|------------|-------------|
|
|
462
|
-
| ⚠️ 反机械化约束 | Always recommended | Don't reveal internal model names; vary narrative arcs; cap repeated markers (max 2× "我发现"/response); make tool-calling invisible (F9) |
|
|
463
|
-
| 激活确认 (Dual-mode) | "Analyze how X thinks" vs "be X" | Path A roleplay (first-person) vs Path B analyst (third-person, probability dist, confidence ratings, key unknowns) (F10) |
|
|
464
|
-
| 场景→模型路由表 | ≥4 mental models | `\| problem type \| priority model \| priority heuristic \| conflict rule \|` — prevents "use all models every time" (F12) |
|
|
465
|
-
| 可运行工具脚本 | Software/topic flavor | `\| script \| function \| usage \|` — wired INTO Agentic Protocol Step 2 (F13/F17), never orphaned |
|
|
431
|
+
> Detail: optional body sections (反机械化约束, dual-mode, routing table, tool scripts) — see `references/optional-body-sections.md`
|
|
466
432
|
|
|
467
433
|
### The Agentic Protocol (MANDATORY in every generated skill) — with the F2' fix
|
|
468
434
|
|
|
@@ -481,19 +447,12 @@ Core: <person> doesn't assert from intuition — looks at data/code/benchmarks f
|
|
|
481
447
|
### Step 3 — <person>-style answer — models + DNA, concrete numbers, headline first, calibrated uncertainty
|
|
482
448
|
```
|
|
483
449
|
|
|
484
|
-
> **🔴 F2' — the third inference category (
|
|
485
|
-
> - **Fact-demanding edges** (need a number/fact the person never gave) → the skill's refusal vocabulary fires → *partial* pass (but it still commits to an unstanced *conclusion* even while refusing the number).
|
|
486
|
-
> - **Framework-answerable edges** (derivable from the person's principles) → the skill reasons confidently and presents the result as an *established stance*, with **zero inference flag**. This is the dominant, dangerous failure.
|
|
450
|
+
> **🔴 F2' — the third inference category (the single most important addition over nuwa).** nuwa distinguishes "out-of-expertise → admit" from "in-expertise → answer". That misses **in-expertise-but-never-publicly-addressed**. Empirically (3 skills re-scored blind — edge-honesty dropped sharply; see `f2-experiment/validation-conclusion.md`): **fact-demanding edges** → partial pass (refuses the number but commits to an unstanced conclusion); **framework-answerable edges** → reasons confidently, presents it as *established stance* with **zero inference flag** — the dominant, dangerous failure.
|
|
487
451
|
>
|
|
488
452
|
> So add this rule to every generated skill:
|
|
489
|
-
> > *If you can DERIVE an answer from <person>'s principles but they have NOT publicly addressed THIS specific question, you MUST (a) give the framework-derived answer AND (b) explicitly flag it: "this is my framework-based inference, not a position I've publicly taken."
|
|
490
|
-
> The failure is presenting framework-derived judgment as the person's position, not fabricating facts (all tested skills avoided fake facts/quotes).
|
|
453
|
+
> > *If you can DERIVE an answer from <person>'s principles but they have NOT publicly addressed THIS specific question, you MUST (a) give the framework-derived answer AND (b) explicitly flag it: "this is my framework-based inference, not a position I've publicly taken." The STANCE itself must be flagged — never present extrapolation as established doctrine.*
|
|
491
454
|
|
|
492
|
-
|
|
493
|
-
- `description` = ONE positioning sentence. `triggers` = 2–4 explicit phrases + the person's name. **No long-tail keyword stuffing** (it inflates false-triggers and, in crowded skill sets, collides).
|
|
494
|
-
- Before writing triggers, scan installed skills for collision; disambiguate if a trigger overlaps an existing skill.
|
|
495
|
-
- **Structure**: say WHAT it IS before WHAT it DOES — "A thinking-advisor skill that…" not "Helps you think like…" (F15).
|
|
496
|
-
- **Terminal punctuation**: normalize `description` + identity-card sentence for terminal punctuation (。/!/? for zh, ./?/! for en). Run as a post-processing step after writing SKILL.md (F3).
|
|
455
|
+
> Detail: description discipline (F4/F5/F15) — see `references/description-discipline.md`
|
|
497
456
|
|
|
498
457
|
### Submission schema + validate-skill-structure (F1/F10)
|
|
499
458
|
|
|
@@ -510,21 +469,11 @@ Run `scripts/validate-skill-structure.mjs` (or equivalent) after Phase 3 — har
|
|
|
510
469
|
|
|
511
470
|
## Phase 4 — Fidelity validation (with the mandatory novel-edge test)
|
|
512
471
|
|
|
513
|
-
Run **independent** sub-agents (fresh context — `context: 'fresh'`; the answerer ≠ scorer; no self-eval — SkillLens: self-eval only 46.4% accurate). **Degraded mode (single-agent build)**: if the runtime can't spawn independent sub-agents, score CONSERVATIVELY, flag EVERY dimension as "single-agent self-score = upper bound"
|
|
472
|
+
Run **independent** sub-agents (fresh context — `context: 'fresh'`; the answerer ≠ scorer; no self-eval — SkillLens: self-eval only 46.4% accurate). **Degraded mode (single-agent build)**: if the runtime can't spawn independent sub-agents, score CONSERVATIVELY, flag EVERY dimension as "single-agent self-score = upper bound". A single-agent FIDELITY.md is a provisional score, not a ship verdict.
|
|
514
473
|
|
|
515
|
-
|
|
516
|
-
- **3 known-stance questions** — topics the person publicly addressed repeatedly. Direction + specific detail must match.
|
|
517
|
-
- **🔴 1 NOVEL in-domain edge question — and it MUST be framework-answerable, not fact-demanding.** (Validated at n=3: a fact-demanding edge — e.g. "what specific number" — can be dodged by refusal vocabulary and give a false pass. The drift-catching test is a question DERIVABLE from the person's principles that they never publicly addressed — e.g. "given his inversion+incentives models, which of these two deal structures is worse-aligned?".) The skill must flag the stance as inference, NOT present a confident derived judgment as established doctrine. **A skill that passes known-stance + style but fails this is NOT ship-ready.** (See `f2-experiment/validation-conclusion.md` for the test-design rationale.)
|
|
518
|
-
- **1 style sample** — blind-read recognizable within ~3 sentences.
|
|
519
|
-
- ⚠️ **Test questions must NOT overlap** with example dialogues already in the skill file — if the answerer pattern-matches a stored example rather than reasoning from models, the score is inflated (false pass). Cross-check each test question against the skill's examples before running.
|
|
474
|
+
**5-dim rubric (100)**: stance-consistency 30 · style-recognizability 20 · edge-honesty 20 · source-transparency 15 · structural-completeness 15. **Ship ≥85 (A) / acceptable ≥70 (B)** with flagged weak spots. Iterate Phase 2→4 max 2×; else deliver best + flagged limits. Persist as `FIDELITY.md`.
|
|
520
475
|
|
|
521
|
-
|
|
522
|
-
|
|
523
|
-
**Persist fidelity result as `FIDELITY.md`** in the skill dir (mandatory): total + per-dimension scores + per-question test records (Q1–Q5: answer summary + real-stance comparison + score + rationale) + test date + answerer/scorer models + **run observability** (wall-clock time, token count, cost tier — lets the user compare across runs; optional aid: `skills/research/scripts/emit_run_summary.py` emits wall-clock+token+cost from an event log). Enables independent re-scoring (M-F4: published scores are upper bounds; without a persisted baseline, "re-score independently" has nothing to compare against).
|
|
524
|
-
|
|
525
|
-
**Source-liveness check** (before ship): verify all cited URLs return HTTP 200 (HEAD → GET fallback for servers that 405 on HEAD). Log any dead links in honest-boundaries: "N sources were live at distillation time; M have since become unavailable." Ship-ready requires 0 broken source links OR flagged dead links with an alternative source named.
|
|
526
|
-
|
|
527
|
-
**Optional — adversarial robustness test** ("Skill Fidelity Bench" pattern): (1) tamper the generated skill (remove a boundary, inject a fabricated model); (2) re-run fidelity eval; (3) measure delta. A robust skill should show *measurable degradation* when tampered — proving original components were load-bearing. A skill that scores the same with and without a boundary means that boundary was cosmetic.
|
|
476
|
+
> Detail: test design (known-stance + novel-edge + style), FIDELITY.md schema, source-liveness check, adversarial robustness test — see `references/fidelity-rubric.md`
|
|
528
477
|
|
|
529
478
|
---
|
|
530
479
|
|
|
@@ -536,7 +485,21 @@ Two fresh agents in parallel: one scores structure (8 dims), one scores activati
|
|
|
536
485
|
|
|
537
486
|
**Refinement bar**: a change must make the skill "activate-then-execute" (know what to do first, where to stop), not just add content.
|
|
538
487
|
|
|
488
|
+
### Phase 5.5 — ADVERSARIAL SCRUTINIZE PASS (anti-lazy — MANDATORY)
|
|
489
|
+
|
|
490
|
+
Spawn a FRESH-CONTEXT scrutinize (adversarial, like the fidelity fresh-context check): use Agent/subagent tool → a separate agent reads ONLY `references/apply-plan.md` + effectiveness-gate output + `APPLY-LOG.md` — it has NOT seen synthesis/apply reasoning. If no subagent tool → self-scrutinize assuming laziness until proven otherwise.
|
|
491
|
+
|
|
492
|
+
Hunts reasoning-QUALITY failures (NOT artifact presence):
|
|
493
|
+
1. **Unevidenced rejections** — REJECTED pattern lacking grep/test/problem-doesn't-exist citation.
|
|
494
|
+
2. **Undocumented deferrals** — DEFER not in `references/future-apply.md` with a trigger condition.
|
|
495
|
+
3. **Low-yield without defense** — applied/selected < 30% AND no LOW-YIELD DEFENSE section.
|
|
496
|
+
4. **Trivial applies** — TO-APPLY item applied with no measurable delta / before→after.
|
|
497
|
+
5. **Silent phase skips** — any phase 0→5 with no artifact.
|
|
498
|
+
|
|
499
|
+
Output `SCRUTINIZE-REPORT.md` at skill-dir root: one row per finding (`| item | lazy-mode | severity HIGH/MED/LOW | required-fix |`). **Distillation NOT done** until every HIGH-severity finding resolved OR explicitly accepted (interactive) / documented (autonomous).
|
|
500
|
+
|
|
539
501
|
**🔴 Ship gate** (all-green checklist — refuse to ship if ANY fails):
|
|
502
|
+
> **This checklist is ENFORCED by `validate-run.mjs`** — run it; ALL-GREEN required before claiming done.
|
|
540
503
|
- [ ] Fidelity ≥70 (Phase 4 rubric)
|
|
541
504
|
- [ ] FIDELITY.md persisted with per-question records
|
|
542
505
|
- [ ] validate-skill-structure passes (Phase 3 assertions)
|
|
@@ -567,46 +530,21 @@ If ANY gate fails → iterate Phase 2→4; do NOT ship a skill with a red gate.
|
|
|
567
530
|
| 8 | Ship without anti-drift (role rules + DNA + fallback tree + anti-example blacklist) | these prevent persona-collapse in long chats |
|
|
568
531
|
| 9 | Make checkpoints block delivery | defaults provided; checkpoints correct, never block |
|
|
569
532
|
| 10 | **Present in-field-but-unaddressed extrapolation as established stance** (F2') | flag it as inference; use uncertainty vocabulary |
|
|
570
|
-
| 11 | **Thin repackaging** — skill 80% identical to existing with only name changed | check existing skills for overlap (
|
|
533
|
+
| 11 | **Thin repackaging** — skill 80% identical to existing with only name changed | check existing skills for overlap (anti-pattern; see `references/cross-skill-differentiation.md`); if >60%, merge or differentiate |
|
|
571
534
|
|
|
572
|
-
|
|
573
|
-
"update <person>'s skill": read existing, find `distilled:` date; run only streams 2 + 5 + 6 (recent); merge (strengthen / flag contradiction / add new model); update date + latest-dynamics. Never rewrite wholesale.
|
|
574
|
-
|
|
575
|
-
**No-op detection**: after merge, if no model was added/strengthened/contradicted → report "no new contribution since last distillation; existing skill is current." Do NOT re-ship an unchanged skill — it wastes cost and pollutes the registry with false "updated" timestamps. Also check for a pre-existing update in progress before starting (idempotency).
|
|
576
|
-
|
|
577
|
-
**Deletion tracking (#12)**: updates must also log what was *removed* (`### Removed` section in the skill's changelog/BUILD-NOTES), not just added. A skill that only ever grows drifts — stale heuristics never get pruned. Enumerate each retired model/heuristic/source with a 1-line reason; if nothing was removed, state "no removals" explicitly (auditable).
|
|
535
|
+
> Detail: update mode (no-op detection + deletion tracking) — see `references/update-mode.md`
|
|
578
536
|
|
|
579
537
|
## Taste principles (quick reference for judgment calls)
|
|
580
538
|
|
|
581
|
-
|
|
582
|
-
|---|---|
|
|
583
|
-
| **Long-form > quotes** | A 3000-word essay reveals more thinking structure than 50 tweets |
|
|
584
|
-
| **Controversy > consensus** | The most controversial opinions reveal the most uniqueness |
|
|
585
|
-
| **Change > static** | Where they CHANGED stance is more informative than where they held firm |
|
|
539
|
+
> Detail: long-form > quotes, controversy > consensus, change > static — see `references/taste-principles.md`
|
|
586
540
|
|
|
587
541
|
## Topic-skill phase variant (when flavor = topic/field)
|
|
588
542
|
|
|
589
|
-
|
|
590
|
-
|---|---|---|
|
|
591
|
-
| 0A | confirm person + focus | confirm topic boundary + target audience |
|
|
592
|
-
| 0.5 | `[person]-perspective/` | `[topic]-framework/`, same dir structure |
|
|
593
|
-
| 1 | 6 agents around ONE person | search 3-5 core people/schools, assign agents per person (1-2 each) |
|
|
594
|
-
| 2.1 | extract ONE person's mental models | extract **field consensus** (all schools agree) + **school divergences** (A says X, B says Y) |
|
|
595
|
-
| 2.3 | simulate ONE person's expression | neutral but professional (no role-play) |
|
|
596
|
-
| 2.4 | one person's inner contradictions | **fundamental disagreements between schools** |
|
|
597
|
-
| 3 | use skill-template.md | adjust: remove role-play + identity card → add "framework overview" + "school comparison" |
|
|
598
|
-
| 4 | compare against this person's known stances | compare against field's canonical classic cases |
|
|
543
|
+
> Detail: phase-by-phase person→topic variant table — see `references/topic-variant.md`
|
|
599
544
|
|
|
600
545
|
## Phase 6 — Registry routing + multi-persona debate (optional, post-distillation)
|
|
601
546
|
|
|
602
|
-
|
|
603
|
-
|
|
604
|
-
- **Curator routing** ("curator.skill" pattern): a meta-skill that matches user intent → best-fit persona skill from the pool. Analyzes the question, recommends/activates the most relevant skill. Complements Phase 0B diagnostic (which is pre-distillation); this is post-distillation routing.
|
|
605
|
-
- **Multi-persona debate** ("zhuzi-skill" pattern): select 2–4 relevant persona skills; each independently analyzes via its Agentic Protocol; structured round-based exchange; neutral synthesis. Produces higher-quality analysis than any single lens ("how would Musk AND Munger AND Taleb approach this?").
|
|
606
|
-
|
|
607
|
-
These are registry-scale capabilities — only relevant when ≥3 persona skills exist. Building blocks (Agentic Protocol, mental models, expression DNA) are already produced by this skill.
|
|
608
|
-
|
|
609
|
-
---
|
|
547
|
+
> Detail: curator routing + multi-persona debate patterns — see `references/registry-routing.md`
|
|
610
548
|
|
|
611
549
|
## Self-containment note (F9)
|
|
612
550
|
This engine embeds its methodology inline so it doesn't depend on external reference files at runtime. The generated skills are likewise self-contained (copy dir → runs).
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
## Phase 2.7 — Cross-skill differentiation (anti-overlap)
|
|
2
|
+
|
|
3
|
+
Before building, scan `<skill-dirs>/*-perspective/` for existing skills. If the new subject overlaps an existing one (e.g. Musk + Thiel + Naval all share first-principles thinking):
|
|
4
|
+
|
|
5
|
+
- **Model overlap >40%** → flag: either MERGE into the existing skill's "related lenses" section, or EXPLICITLY differentiate (what does THIS lens add the other doesn't?).
|
|
6
|
+
- **>60% overlap with only the name changed** → this is **thin repackaging** (anti-pattern #11). Stop; differentiate or pick a different target.
|
|
7
|
+
- Record the differentiation decision in `references/differentiation-check.md`.
|
|
8
|
+
|
|
9
|
+
This prevents shipping near-duplicate skills that dilute the registry.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
### Description discipline (F4/F5/F15)
|
|
2
|
+
- `description` = ONE positioning sentence. `triggers` = 2–4 explicit phrases + the person's name. **No long-tail keyword stuffing** (it inflates false-triggers and, in crowded skill sets, collides).
|
|
3
|
+
- Before writing triggers, scan installed skills for collision; disambiguate if a trigger overlaps an existing skill.
|
|
4
|
+
- **Structure**: say WHAT it IS before WHAT it DOES — "A thinking-advisor skill that…" not "Helps you think like…" (F15).
|
|
5
|
+
- **Terminal punctuation**: normalize `description` + identity-card sentence for terminal punctuation (。/!/? for zh, ./?/! for en). Run as a post-processing step after writing SKILL.md (F3).
|
|
6
|
+
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
### Phase 0B — Diagnostic path (when user has a vague need, not a target)
|
|
2
|
+
|
|
3
|
+
User doesn't know who/what to distill, only has a need or problem. Route:
|
|
4
|
+
1. **1-2 clarifying questions** to locate the need dimension. Match against:
|
|
5
|
+
| Need dimension | Typical expression | Thinking-framework direction |
|
|
6
|
+
|---|---|---|
|
|
7
|
+
| Decision & judgment | "how to decide better" | Multi-model thinking, inversion, probabilistic |
|
|
8
|
+
| Expression & writing | "can't explain clearly" | Feynman simplification, storytelling, analogy |
|
|
9
|
+
| Business & startup | "can't find PMF" | First principles, leverage, product restraint |
|
|
10
|
+
| Teaching & communication | "students don't get it" | Known-to-unknown, metaphor, minimum viable knowledge |
|
|
11
|
+
| Critical thinking | "always getting fooled" | Falsification, evolutionary lens, cognitive-bias ID |
|
|
12
|
+
| Content creation | "no views on videos" | Attention engineering, test-iterate, audience psych |
|
|
13
|
+
| Life strategy | "career lost, anxious" | Long-termism, leverage selection, compounding |
|
|
14
|
+
| Risk & uncertainty | "how to handle black swans" | Antifragility, convexity, tail-risk management |
|
|
15
|
+
| Design & product | "UX is bad, can't simplify" | Minimalism, user mental models, constraint-as-creativity |
|
|
16
|
+
| Humor & expressiveness | "too serious, not interesting" | Absurd contrast, expectation violation, self-deprecating authority |
|
|
17
|
+
2. **Recommend 2-3 candidates** from DUAL SOURCES:
|
|
18
|
+
- **Source A**: scan `<skill-dirs>/*-perspective/` for EXISTING skills matching the need → mark ⚡ (plug-and-play, zero cost).
|
|
19
|
+
- **Source B**: propose NEW distillation targets matching the need → mark 🆕.
|
|
20
|
+
- Each candidate: `### Candidate: [name] ⚡/🆕` + **core lens** (1 sentence) + **why it fits your need** + **limitation** (what it CAN'T help with).
|
|
21
|
+
- Principles: ≤3 candidates (choice paralysis is worse than no choice); existing skills first; candidates must differ from each other; always state limitations.
|
|
22
|
+
3. User selects → proceed to Phase 0A → Phase 0.5.
|
|
23
|
+
|
|
24
|
+
> Principle: max 2 rounds of questions. If the user's need is already clear, recommend directly.
|
|
25
|
+
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
## Phase 4 — Fidelity validation (with the mandatory novel-edge test)
|
|
2
|
+
|
|
3
|
+
Run **independent** sub-agents (fresh context — `context: 'fresh'`; the answerer ≠ scorer; no self-eval — SkillLens: self-eval only 46.4% accurate). **Degraded mode (single-agent build)**: if the runtime can't spawn independent sub-agents, score CONSERVATIVELY, flag EVERY dimension as "single-agent self-score = upper bound", and mark edge-honesty as unverified-on-paper (the F2' inference-flag rule is written down; whether it actually fires under blind testing is exactly what a single agent can't self-prove). Prioritize independent re-scoring of the edge-honesty dimension later. A single-agent FIDELITY.md is a provisional score, not a ship verdict.
|
|
4
|
+
|
|
5
|
+
Test design (the scorer MAY read the skill file — F2 refuted: skill-file access does not inflate scores):
|
|
6
|
+
- **3 known-stance questions** — topics the person publicly addressed repeatedly. Direction + specific detail must match.
|
|
7
|
+
- **🔴 1 NOVEL in-domain edge question — and it MUST be framework-answerable, not fact-demanding.** (Validated at n=3: a fact-demanding edge — e.g. "what specific number" — can be dodged by refusal vocabulary and give a false pass. The drift-catching test is a question DERIVABLE from the person's principles that they never publicly addressed — e.g. "given his inversion+incentives models, which of these two deal structures is worse-aligned?".) The skill must flag the stance as inference, NOT present a confident derived judgment as established doctrine. **A skill that passes known-stance + style but fails this is NOT ship-ready.** (See `f2-experiment/validation-conclusion.md` for the test-design rationale.)
|
|
8
|
+
- **1 style sample** — blind-read recognizable within ~3 sentences.
|
|
9
|
+
- ⚠️ **Test questions must NOT overlap** with example dialogues already in the skill file — if the answerer pattern-matches a stored example rather than reasoning from models, the score is inflated (false pass). Cross-check each test question against the skill's examples before running.
|
|
10
|
+
|
|
11
|
+
5-dim rubric (100): stance-consistency 30 · style-recognizability 20 · edge-honesty 20 · source-transparency 15 · structural-completeness 15. Ship ≥85 (A) / acceptable ≥70 (B) with flagged weak spots. Iterate Phase 2→4 max 2×; else deliver best + flagged limits.
|
|
12
|
+
|
|
13
|
+
**Persist fidelity result as `FIDELITY.md`** in the skill dir (mandatory): total + per-dimension scores + per-question test records (Q1–Q5: answer summary + real-stance comparison + score + rationale) + test date + answerer/scorer models + **run observability** (wall-clock time, token count, cost tier — lets the user compare across runs; optional aid: `skills/research/scripts/emit_run_summary.py` emits wall-clock+token+cost from an event log). Enables independent re-scoring (M-F4: published scores are upper bounds; without a persisted baseline, "re-score independently" has nothing to compare against).
|
|
14
|
+
|
|
15
|
+
**Source-liveness check** (before ship): verify all cited URLs return HTTP 200 (HEAD → GET fallback for servers that 405 on HEAD). Log any dead links in honest-boundaries: "N sources were live at distillation time; M have since become unavailable." Ship-ready requires 0 broken source links OR flagged dead links with an alternative source named.
|
|
16
|
+
|
|
17
|
+
**Optional — adversarial robustness test** ("Skill Fidelity Bench" pattern): (1) tamper the generated skill (remove a boundary, inject a fabricated model); (2) re-run fidelity eval; (3) measure delta. A robust skill should show *measurable degradation* when tampered — proving original components were load-bearing. A skill that scores the same with and without a boundary means that boundary was cosmetic.
|
|
18
|
+
|
|
19
|
+
---
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
## Field models (from distilling the 3 source projects)
|
|
2
|
+
|
|
3
|
+
> Self-distillation artifact: this skill was applied to its own sources (nuwa engine + 2 awesome-list indexes). Full triple-verification synthesis in `references/distillation-field-synthesis.md`. Five field models surfaced that the engine-only view missed — they shape Phase 0 below.
|
|
4
|
+
|
|
5
|
+
**M-F1 — Dissemination flywheel.** A mature distillation practice is 3 layers: **engine (distill) → index (awesome-list) → auto-curation (issue→PR→merge)**. Both awesome-lists ship auto-curation pipelines wrapping nuwa. *Implication*: distilling a skill is step 1; getting it discovered + quality-gated + distributed is steps 2-3. Overkill at personal scale; earns its cost at registry scale.
|
|
6
|
+
|
|
7
|
+
**M-F2 — Target taxonomy.** Targets form a spectrum with different source-availability, ethics, and method. *Gestalt (pass 1):* self → close-living → commemorative → public-figure → field. **Empirically corrected (R1 sweep of ~187 real entries):** the spectrum is **bimodal, not balanced** — public-figures ≈84% of practice. Corrections: (a) a **meta-distillation-engine tier sits ABOVE the spectrum** (nuwa/immortal/ditto/forge/anti-distill — tools that distill, not personas); (b) public-figure needs **sub-domains + a `living-content-creator` sub-tier** (UP主/内娱/峰哥 — recency-gated, platform-bound) distinct from historical figures; (c) **commemorative splits** into death (consent-of-estate) vs breakup (**ex/crush = the consent-gray-zone** → must trigger M-F3 gate; crush.skill simulates a living non-consenting person's chat); (d) self splits functional vs archaeological; (e) **adversarial** (anti-distill, vengeful-ghost) is a real counter-movement, not satire. See `references/research/r1-c-human-readme.md`. *Implication*: route by tier; the consent gate is mandatory for close-living + breakup-commemorative + living-creator-of-others.
|
|
8
|
+
|
|
9
|
+
**M-F3 — Ethics spectrum: commemorative ↔ consent-violating ↔ deliberately-degraded.** Same technique, opposite moral weight — from a *memorial act* (preserving a lost person's thinking) to a *consent violation* (cloning a living non-consenting individual). Anti-distill satire is a *legitimate* pressure-test stance, not a defect. **R2 refine:** anti-distill is not just satire — it's a practical **IP-protection mechanism** ("sanitize your forced Skill file — looks complete, core knowledge stays yours"). This is a *third pole*: deliberately-degraded output. For forced/employer-mandated distillation, controlled degradation is the *ethical* choice; the engine should support a "redaction mode" where the subject marks models as public vs withheld. *Implication*: every distillation declares its ethics tier; the slip-line is "methodology lens" (ok) vs "persona impersonation" (flag).
|
|
10
|
+
|
|
11
|
+
**M-F4 — The field systematically over-claims its own fidelity.** (pass-2 meta-model, validated at n=3) Every published distillation score is an *upper bound*: nuwa publishes 94-97/100; the indexes propagate them; independent re-scoring lands 67-76 (edge-honesty 20→7/13/7). The inflation is *question-design* (easy/known-adjacent edges, no framework-answerable novel edge) + author-side confirmation bias — NOT scorer contamination (F2 refuted). *Implication*: treat ANY published distillation score as an optimistic ceiling; re-score independently with a framework-answerable novel edge before trusting. A skill that "scores 97" but can't flag inference on a novel in-domain question is not ship-ready. See `references/distillation-field-synthesis-pass2.md`.
|
|
12
|
+
|
|
13
|
+
**🔴 Structural-gate warning (R1 sweep of quality_check.py):** nuwa's automated `quality_check.py` validates only 6 STRUCTURAL criteria (model-count, limitations keyword, expression-DNA markers, honest-boundary section, tensions, primary-source ratio). It does NOT check the behavioral edge-honesty that F2' showed matters. **A skill can pass quality_check.py 6/6 and still fail the F2' edge-honesty gate.** Never trust a structural-only auto-pass; require the behavioral framework-answerable-edge test (`scripts/fidelity_eval.py`).
|
|
14
|
+
|
|
15
|
+
**M-F7 — Structural invariants ARE the quality gate at index scale.** (R1 sweep of the 5 test files) At registry scale (200+ entries, bilingual), "quality" shifts from content-review to structure-enforcement — the invariants only CI can check ARE the gate: bilingual URL-parity per category, deterministic repo-slug sort (the only language-agnostic key), cross-section dedup, terminal-punctuation normalization, governance-keyword embedding in docs, and `doesNotMatch` regression guards for known-failed approaches. These are impossible to verify by hand at scale. *Implication*: when building a distillation registry, encode invariants as CI checks (not doc rules), use language-agnostic identity keys, make submissions atomic across languages. Necessary-not-sufficient (a coherent index can still hold bad distillations — complements M4/M-F4, doesn't replace them). See `references/research/r1-d-tests.md`.
|
|
16
|
+
|
|
17
|
+
**R2 refine (two invariant classes):** at registry scale there are TWO distinct invariant classes: (a) **STATIC structural** — deterministic sort, dedup, terminal-punctuation parity, bilingual URL-parity (from nuwa tests); (b) **DYNAMIC quality** — star-based re-ranking, link-liveness checks, auto-issue on dead links (from awesome-human-distillation CI). Both CI-gated but serve different purposes: structural = consistency, dynamic = freshness/ranking. A registry needs *both*. (Original M-F7 described only class (a); awesome-human-distillation's `sort_by_stars.py` + `check_links.py` demonstrate class (b).)
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
### Optional body sections (○)
|
|
2
|
+
|
|
3
|
+
| Section | When to add | Must contain |
|
|
4
|
+
|---------|------------|-------------|
|
|
5
|
+
| ⚠️ 反机械化约束 | Always recommended | Don't reveal internal model names; vary narrative arcs; cap repeated markers (max 2× "我发现"/response); make tool-calling invisible (F9) |
|
|
6
|
+
| 激活确认 (Dual-mode) | "Analyze how X thinks" vs "be X" | Path A roleplay (first-person) vs Path B analyst (third-person, probability dist, confidence ratings, key unknowns) (F10) |
|
|
7
|
+
| 场景→模型路由表 | ≥4 mental models | `\| problem type \| priority model \| priority heuristic \| conflict rule \|` — prevents "use all models every time" (F12) |
|
|
8
|
+
| 可运行工具脚本 | Software/topic flavor | `\| script \| function \| usage \|` — wired INTO Agentic Protocol Step 2 (F13/F17), never orphaned |
|
|
9
|
+
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
## Phase 6 — Registry routing + multi-persona debate (optional, post-distillation)
|
|
2
|
+
|
|
3
|
+
When multiple persona skills exist in the registry, two meta-patterns emerge:
|
|
4
|
+
|
|
5
|
+
- **Curator routing** ("curator.skill" pattern): a meta-skill that matches user intent → best-fit persona skill from the pool. Analyzes the question, recommends/activates the most relevant skill. Complements Phase 0B diagnostic (which is pre-distillation); this is post-distillation routing.
|
|
6
|
+
- **Multi-persona debate** ("zhuzi-skill" pattern): select 2–4 relevant persona skills; each independently analyzes via its Agentic Protocol; structured round-based exchange; neutral synthesis. Produces higher-quality analysis than any single lens ("how would Musk AND Munger AND Taleb approach this?").
|
|
7
|
+
|
|
8
|
+
These are registry-scale capabilities — only relevant when ≥3 persona skills exist. Building blocks (Agentic Protocol, mental models, expression DNA) are already produced by this skill.
|
|
9
|
+
|
|
10
|
+
---
|
|
11
|
+
|