@easysociable/cli 0.1.2 → 0.1.4
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 +32 -21
- package/{skills/easysociable-content → content-engine}/scripts/starter.mjs +3 -1
- package/{skills/easysociable-content → content-engine}/scripts/workbench.mjs +13 -8
- package/{skills/easysociable-content → content-engine}/starter/CLAUDE.md +217 -128
- package/{skills/easysociable-content → 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 +16 -0
- package/{skills/easysociable-content → 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/{skills/easysociable-content → 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/{skills/easysociable-content → content-engine}/starter/runs/_template/brief.md +1 -1
- package/{skills/easysociable-content → content-engine}/starter/runs/_template/pack.md +15 -7
- package/{skills/easysociable-content → content-engine}/starter/runs/_template/packet.md +6 -0
- package/{skills/easysociable-content → content-engine}/starter/swipe/_template.md +3 -1
- package/content-engine/starter/topics/README.md +21 -0
- package/{skills/easysociable-content → content-engine}/starter/topics/_index.md +12 -5
- package/content-engine/starter/topics/_template-item.md +103 -0
- package/{skills/easysociable-content → content-engine}/starter/topics/scoring.md +55 -4
- package/content-engine/workbench/__pycache__/build.cpython-310.pyc +0 -0
- package/{skills/easysociable-content → content-engine}/workbench/build.py +306 -97
- package/{skills/easysociable-content → content-engine}/workbench/serve.py +0 -0
- package/{skills/easysociable-content → content-engine}/workbench/template.html +173 -27
- package/dist/easysociable.js +629 -142
- package/dist/easysociable.js.map +1 -1
- package/package.json +15 -15
- package/skills/ONBOARDING.md +21 -18
- package/skills/easysociable-content/SKILL.md +104 -98
- 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 -44
- 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 +29 -30
- package/skills/easysociable-template/references/CATALOG_METADATA.md +23 -20
- package/skills/easysociable-template/references/DESIGN_V2_1.md +53 -2
- package/skills/easysociable-template/references/GATEWAY.md +7 -2
- package/skills/easysociable-template/references/PLATFORM_SPECS.md +11 -3
- package/skills/easysociable-template/references/THEME_TOKENS.md +1 -1
- package/skills/easysociable-template/references/fixtures/image-reference.design-plan.json +74 -0
- package/skills/easysociable-template/references/fixtures/image-reference.visual-qa.json +28 -0
- package/skills/easysociable-template/scripts/generate-theme-from-hex.mjs +0 -0
- package/skills/easysociable-template/scripts/validate-design-v2.mjs +97 -0
- package/skills/easysociable-template/workflows/ASSET_PLAN.md +2 -1
- package/skills/easysociable-template/workflows/AUTHORING_FROM_BRIEF.md +4 -4
- package/skills/easysociable-template/workflows/AUTHORING_FROM_IMAGE.md +66 -16
- package/skills/easysociable-template/workflows/AUTHORING_STUDIO.md +28 -15
- package/skills/easysociable-template/workflows/DESIGN_BRIEF.md +4 -3
- package/skills/easysociable-template/workflows/FILL_AND_RENDER.md +4 -83
- package/skills/easysociable-template/workflows/MULTI_PLATFORM_FAMILY.md +81 -0
- package/skills/easysociable-template/workflows/OUT_OF_SCOPE.md +3 -2
- package/skills/easysociable-template/workflows/PUBLISH_FROM_DRAFT.md +1 -1
- package/skills/easysociable-template/workflows/VISUAL_QA.md +10 -0
- package/skills/easysociable-content/INSTALL.md +0 -60
- package/skills/easysociable-content/platforms/claude.md +0 -4
- package/skills/easysociable-content/platforms/codex.md +0 -4
- package/skills/easysociable-content/platforms/hermes.md +0 -4
- package/skills/easysociable-content/platforms/openclaw.md +0 -4
- package/skills/easysociable-content/references/CLI.md +0 -40
- package/skills/easysociable-content/references/CONTRACT_SYNC.md +0 -42
- package/skills/easysociable-content/references/MCP.md +0 -15
- package/skills/easysociable-content/references/PAGE_PACK.md +0 -129
- package/skills/easysociable-content/references/PLATFORM_GUIDE.md +0 -36
- package/skills/easysociable-content/references/RUN_LAYOUT.md +0 -73
- package/skills/easysociable-content/references/TROUBLESHOOTING.md +0 -13
- package/skills/easysociable-content/references/VAULT.md +0 -40
- package/skills/easysociable-content/references/VOICE.md +0 -16
- package/skills/easysociable-content/scripts/package-skill.mjs +0 -49
- package/skills/easysociable-content/scripts/setup.mjs +0 -200
- package/skills/easysociable-content/scripts/setup.test.mjs +0 -82
- package/skills/easysociable-content/starter/discovery/README.md +0 -18
- package/skills/easysociable-content/starter/discovery/_index.md +0 -27
- package/skills/easysociable-content/starter/discovery/_template.md +0 -41
- package/skills/easysociable-content/starter/profiles/_index.md +0 -13
- package/skills/easysociable-content/starter/topics/README.md +0 -25
- package/skills/easysociable-content/starter/topics/WATCHLIST.md +0 -65
- package/skills/easysociable-content/starter/topics/_template-item.md +0 -90
- package/skills/easysociable-content/starter/topics/watchlists/README.md +0 -10
- package/skills/easysociable-content/starter/topics/watchlists/_shared.md +0 -14
- package/skills/easysociable-content/starter/topics/watchlists/default.md +0 -6
- package/skills/easysociable-content/workflows/ANALYSIS_AND_COVERAGE.md +0 -17
- package/skills/easysociable-content/workflows/CONTENT_EXPORT.md +0 -24
- package/skills/easysociable-content/workflows/GETTING_STARTED.md +0 -40
- package/skills/easysociable-content/workflows/MCP_FIRST.md +0 -5
- package/skills/easysociable-content/workflows/OUT_OF_SCOPE.md +0 -18
- package/skills/easysociable-content/workflows/PACK_AUTHORING.md +0 -42
- package/skills/easysociable-content/workflows/SWIPE_CAPTURE.md +0 -18
- package/skills/easysociable-content/workflows/TOPIC_DRAFT.md +0 -29
- package/skills/easysociable-content/workflows/WORKING_DRAFT.md +0 -19
- /package/{skills/easysociable-content → content-engine}/fixtures/golden-run-en/draft.md +0 -0
- /package/{skills/easysociable-content → content-engine}/fixtures/golden-run-en/idea.md +0 -0
- /package/{skills/easysociable-content → content-engine}/fixtures/golden-run-en/pack-tiktok.json +0 -0
- /package/{skills/easysociable-content → content-engine}/scripts/contracts.mjs +0 -0
- /package/{skills/easysociable-content → content-engine}/scripts/export-contracts.mjs +0 -0
- /package/{skills/easysociable-content → content-engine}/scripts/fixture.test.mjs +0 -0
- /package/{skills/easysociable-content → content-engine}/scripts/validate-export.mjs +0 -0
- /package/{skills/easysociable-content → content-engine}/scripts/validate-pack.mjs +0 -0
- /package/{skills/easysociable-content → content-engine}/scripts/validate-run.mjs +0 -0
- /package/{skills/easysociable-content → content-engine}/scripts/validate.test.mjs +0 -0
- /package/{skills/easysociable-content → content-engine}/starter/accounts/README.md +0 -0
- /package/{skills/easysociable-content → content-engine}/starter/accounts/_index.md +0 -0
- /package/{skills/easysociable-content → content-engine}/starter/accounts/overrides/README.md +0 -0
- /package/{skills/easysociable-content → content-engine}/starter/exports/README.md +0 -0
- /package/{skills/easysociable-content → content-engine}/starter/inbox/README.md +0 -0
- /package/{skills/easysociable-content → content-engine}/starter/inbox/_index.md +0 -0
- /package/{skills/easysociable-content → content-engine}/starter/inbox/entries/README.md +0 -0
- /package/{skills/easysociable-content → content-engine}/starter/platforms/README.md +0 -0
- /package/{skills/easysociable-content → content-engine}/starter/platforms/ig.md +0 -0
- /package/{skills/easysociable-content → content-engine}/starter/platforms/instagram.md +0 -0
- /package/{skills/easysociable-content → content-engine}/starter/platforms/linkedin.md +0 -0
- /package/{skills/easysociable-content → content-engine}/starter/platforms/threads.md +0 -0
- /package/{skills/easysociable-content → content-engine}/starter/platforms/tiktok.md +0 -0
- /package/{skills/easysociable-content → content-engine}/starter/platforms/x.md +0 -0
- /package/{skills/easysociable-content → content-engine}/starter/platforms/xiaohongshu.md +0 -0
- /package/{skills/easysociable-content → content-engine}/starter/profiles/default/audience.md +0 -0
- /package/{skills/easysociable-content → content-engine}/starter/profiles/default/pillars.md +0 -0
- /package/{skills/easysociable-content → content-engine}/starter/published/_index.md +0 -0
- /package/{skills/easysociable-content → content-engine}/starter/raw/README.md +0 -0
- /package/{skills/easysociable-content → content-engine}/starter/raw/_index.md +0 -0
- /package/{skills/easysociable-content → content-engine}/starter/runs/README.md +0 -0
- /package/{skills/easysociable-content → content-engine}/starter/runs/_index.md +0 -0
- /package/{skills/easysociable-content → content-engine}/starter/runs/_template/draft.md +0 -0
- /package/{skills/easysociable-content → content-engine}/starter/runs/_template/editor.md +0 -0
- /package/{skills/easysociable-content → content-engine}/starter/runs/_template/feedback.md +0 -0
- /package/{skills/easysociable-content → content-engine}/starter/runs/_template/idea.md +0 -0
- /package/{skills/easysociable-content → content-engine}/starter/runs/_template/rubric.md +0 -0
- /package/{skills/easysociable-content → content-engine}/starter/swipe/_index.md +0 -0
- /package/{skills/easysociable-content → content-engine}/starter/topics/items/README.md +0 -0
- /package/{skills/easysociable-content → content-engine}/starter/wiki/README.md +0 -0
- /package/{skills/easysociable-content → content-engine}/starter/wiki/atoms/_index.md +0 -0
- /package/{skills/easysociable-content → content-engine}/starter/wiki/atoms/_template.md +0 -0
- /package/{skills/easysociable-content → content-engine}/starter/wiki/claims/_index.md +0 -0
- /package/{skills/easysociable-content → content-engine}/starter/wiki/claims/_template.md +0 -0
- /package/{skills/easysociable-content → content-engine}/starter/workbench/README.md +0 -0
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@easysociable/cli",
|
|
3
|
-
"version": "0.1.
|
|
4
|
-
"description": "Agent-first CLI
|
|
3
|
+
"version": "0.1.4",
|
|
4
|
+
"description": "Agent-first CLI for EasySociable: Content Engine, Template, Slideshow, and MCP",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
7
7
|
"author": "EasySociable",
|
|
@@ -33,16 +33,10 @@
|
|
|
33
33
|
"bin",
|
|
34
34
|
"dist",
|
|
35
35
|
"skills",
|
|
36
|
+
"content-engine",
|
|
36
37
|
"LICENSE",
|
|
37
38
|
"README.md"
|
|
38
39
|
],
|
|
39
|
-
"scripts": {
|
|
40
|
-
"typecheck": "tsc --noEmit",
|
|
41
|
-
"test": "vitest run",
|
|
42
|
-
"build": "tsup",
|
|
43
|
-
"prepack": "node scripts/prepack.mjs && pnpm build",
|
|
44
|
-
"pack:check": "npm pack --dry-run"
|
|
45
|
-
},
|
|
46
40
|
"publishConfig": {
|
|
47
41
|
"access": "public",
|
|
48
42
|
"registry": "https://registry.npmjs.org/"
|
|
@@ -51,13 +45,19 @@
|
|
|
51
45
|
"commander": "^11.1.0"
|
|
52
46
|
},
|
|
53
47
|
"devDependencies": {
|
|
54
|
-
"@easysociable/mcp-server": "workspace:*",
|
|
55
|
-
"@easysociable/template-gateway-client": "workspace:*",
|
|
56
|
-
"@easysociable/tsconfig": "workspace:*",
|
|
57
|
-
"@easysociable/vitest-config": "workspace:*",
|
|
58
48
|
"@types/node": "^22.14.0",
|
|
59
49
|
"tsup": "^8.0.2",
|
|
60
50
|
"typescript": "^5.8.3",
|
|
61
|
-
"vitest": "^1.3.1"
|
|
51
|
+
"vitest": "^1.3.1",
|
|
52
|
+
"@easysociable/mcp-server": "0.0.0",
|
|
53
|
+
"@easysociable/tsconfig": "0.0.0",
|
|
54
|
+
"@easysociable/template-gateway-client": "0.0.0",
|
|
55
|
+
"@easysociable/vitest-config": "0.0.0"
|
|
56
|
+
},
|
|
57
|
+
"scripts": {
|
|
58
|
+
"typecheck": "tsc --noEmit",
|
|
59
|
+
"test": "vitest run",
|
|
60
|
+
"build": "tsup",
|
|
61
|
+
"pack:check": "npm pack --dry-run"
|
|
62
62
|
}
|
|
63
|
-
}
|
|
63
|
+
}
|
package/skills/ONBOARDING.md
CHANGED
|
@@ -1,35 +1,38 @@
|
|
|
1
1
|
# EasySociable agent-first onboarding
|
|
2
2
|
|
|
3
|
-
V1 expects Codex
|
|
4
|
-
workspace.
|
|
3
|
+
V1 expects an Agent (Grok Bot, Codex, Claude Code, …) to drive setup. The website is not the primary workspace.
|
|
5
4
|
|
|
6
|
-
## User steps
|
|
5
|
+
## User steps
|
|
7
6
|
|
|
8
7
|
1. **Install CLI**
|
|
9
8
|
|
|
10
9
|
```bash
|
|
11
10
|
curl -fsSL https://easysociable.com/install.sh | bash
|
|
11
|
+
# or: npm i -g @easysociable/cli
|
|
12
12
|
```
|
|
13
13
|
|
|
14
|
-
2. **Install
|
|
14
|
+
2. **Install Skills + MCP** (Template + Slideshow by default; for Codex / Claude Code)
|
|
15
15
|
|
|
16
16
|
```bash
|
|
17
17
|
easysociable install --yes
|
|
18
18
|
```
|
|
19
19
|
|
|
20
|
-
|
|
21
|
-
hosted operation requires authentication.
|
|
20
|
+
Default skills:
|
|
22
21
|
|
|
23
|
-
|
|
22
|
+
- `easysociable-slideshow` — turns a draft into slideshow pages you preview and download in the dashboard
|
|
23
|
+
- `easysociable-template` — creates page templates
|
|
24
24
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
```
|
|
25
|
+
Optional Content Engine skill (pointer only — operations live in `Content Engine/CLAUDE.md`):
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
easysociable install --skills content,template,slideshow --yes
|
|
29
|
+
easysociable engine init --root /workspace --yes
|
|
30
|
+
easysociable engine serve --engine /workspace/Content Engine --no-open
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
On a laptop, use any parent path instead of `/workspace` for `engine init` / `serve`.
|
|
28
34
|
|
|
29
|
-
|
|
30
|
-
Engine). For a private copy to another machine, see
|
|
31
|
-
`skills/easysociable-content/INSTALL.md`. Skipping Content does **not** block
|
|
32
|
-
single-page or Slideshow renders.
|
|
35
|
+
3. **Ask the Agent to create graphics** — account creation is deferred until a hosted operation requires authentication. If you installed the content skill: interview and write the profile first, then capture audience quotes into `needs/` (at least 3, aim for 5); do not create a slideshow yet.
|
|
33
36
|
|
|
34
37
|
## Lazy auth (Agent script)
|
|
35
38
|
|
|
@@ -37,8 +40,7 @@ When a Gateway call returns `AUTH_REQUIRED`, `API_KEY_INVALID`, or the CLI says
|
|
|
37
40
|
`Run easysociable auth login`, respond with:
|
|
38
41
|
|
|
39
42
|
```text
|
|
40
|
-
EasySociable needs a workspace API key before it can
|
|
41
|
-
Gateway.
|
|
43
|
+
EasySociable needs a workspace API key before it can create Brands, images, drafts or Slideshow Runs on the Gateway.
|
|
42
44
|
|
|
43
45
|
1. Open https://my.easysociable.com/auth/signup (or sign in with Google).
|
|
44
46
|
2. Verify your email if you used password signup (required before API keys).
|
|
@@ -54,10 +56,11 @@ idempotency key when applicable.
|
|
|
54
56
|
## What works without auth
|
|
55
57
|
|
|
56
58
|
- `easysociable install` / `update`
|
|
59
|
+
- `easysociable engine init` / `serve` / `build` / `validate`
|
|
57
60
|
- Reading installed Skill instructions
|
|
58
61
|
- Public template catalog in the browser (`/templates`)
|
|
59
62
|
|
|
60
63
|
## What requires auth
|
|
61
64
|
|
|
62
|
-
-
|
|
63
|
-
-
|
|
65
|
+
- Brands, Themes, images, drafts, Slideshow Runs
|
|
66
|
+
- Studio preview and Studio Download (Free: 3 Downloads/month)
|
|
@@ -1,126 +1,132 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: easysociable-content
|
|
3
3
|
description: >
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
Operate the EasySociable Content Engine (profile, needs, products, recommendations, topics, runs, workbench).
|
|
5
|
+
Triggers: 采访我, 完善人设, interview me, who am I as a creator, 建立 profile
|
|
6
|
+
— follow workflows/INTERVIEW.md (engine CLAUDE.md § Interview wins if present).
|
|
7
|
+
Triggers: 记需求, 扫需求选题, capture audience quotes, user needs, 调研需求, 需求落库
|
|
8
|
+
— follow workflows/NEEDS.md (engine CLAUDE.md § Needs wins if present).
|
|
9
|
+
Triggers: 更新产品, 产品库, product facts, product pricing, product offer
|
|
10
|
+
— follow the engine CLAUDE.md § Products and edit `products/`.
|
|
11
|
+
Triggers: 推荐产品, 评测工具, compare tools, review an AI product
|
|
12
|
+
— edit `recommendations/`; do not treat third-party subjects as owned Products.
|
|
13
|
+
Triggers: 做成选题, 开一单, 出图
|
|
14
|
+
— follow engine CLAUDE.md (§ Topics / § Open a run / § PagePack).
|
|
15
|
+
If no engine exists, run `easysociable engine init`. Then follow
|
|
16
|
+
Content Engine/CLAUDE.md. Render handoff: easysociable-template (1 page) or
|
|
17
|
+
easysociable-slideshow (2+). Never publish or post.
|
|
9
18
|
---
|
|
10
19
|
|
|
11
|
-
# EasySociable Content
|
|
12
|
-
|
|
13
|
-
This Skill owns the user's local knowledge base. The Agent writes Markdown
|
|
14
|
-
under `Content Engine/`. After writes, rebuild the workbench. Hosted Template
|
|
15
|
-
and Slideshow operations stay with the unified `easysociable` CLI/MCP.
|
|
16
|
-
|
|
17
|
-
**Operating manual lives in the engine:** `Content Engine/CLAUDE.md`. Follow it
|
|
18
|
-
for capture, discovery, topics, 开一单, ingest, ship, and catalog evidence. This
|
|
19
|
-
file is setup, routing, and hosted handoff only.
|
|
20
|
-
|
|
21
|
-
## Non-negotiable rules
|
|
22
|
-
|
|
23
|
-
1. English tree only: `Content Engine/`. Do not ask language.
|
|
24
|
-
2. Obsidian is **not** required. Do not detect, install, or open it.
|
|
25
|
-
3. Ask for a parent directory (or an existing `Content Engine/` path). Never create the engine silently in a random folder.
|
|
26
|
-
4. Existing engine files are read-only during setup. Never overwrite user content, especially `workbench/template.html`.
|
|
27
|
-
5. One platform = one Run (one folder). Same Topic, native rewrite for another network → **N runs**, shared `topic_id`.
|
|
28
|
-
6. On **开一单**: **ask platform(s)** if unset. Multi-select → N runs. Do **not** silent-default to `x`.
|
|
29
|
-
7. Before brief / draft / editor / pack: **read** `platforms/<platform>.md` (`instagram` → `ig.md`).
|
|
30
|
-
8. Write selection into `idea.md` (`swipe_id` / `atoms` / `claim_id`). Chat cards are not citations.
|
|
31
|
-
9. Pack JSON (`content-pack.v1`) only at **handoff to render**. Until then the run uses `pack.md` (slideshow platforms after SHIP).
|
|
32
|
-
10. Final PNGs live under `exports/<run-slug>/`, never inside the run folder. V1 output is PNG only.
|
|
33
|
-
11. Do not start a Local API, open SQLite, call a Content MCP, or call private Directus/R2/Stripe endpoints.
|
|
34
|
-
12. Do not create a hosted Brand Profile during setup.
|
|
35
|
-
|
|
36
|
-
## When this skill runs
|
|
37
|
-
|
|
38
|
-
1. Resolve the engine (`--root` parent, or existing `Content Engine/`).
|
|
39
|
-
2. If missing files: `node scripts/setup.mjs --root <path> --apply --json` (never overwrites).
|
|
40
|
-
3. Ensure `workbench/` exists (copy skill `workbench/` files **only if missing**).
|
|
41
|
-
4. `python3` is required. If missing, stop and tell the user.
|
|
42
|
-
5. Run `python3 workbench/build.py`.
|
|
43
|
-
6. If port **8765** is free: start `workbench/serve.py`. If it is already listening, reuse it — do not start a second server.
|
|
44
|
-
7. Open `http://127.0.0.1:8765/workbench/`.
|
|
45
|
-
8. After Agent writes markdown: run `build.py` again (leave serve running).
|
|
20
|
+
# EasySociable Content
|
|
46
21
|
|
|
47
|
-
|
|
48
|
-
node scripts/setup.mjs --root <parent-or-engine> --preview --json
|
|
49
|
-
node scripts/setup.mjs --root <parent-or-engine> --apply --json
|
|
50
|
-
node scripts/workbench.mjs start --engine "<path>/Content Engine" --json
|
|
51
|
-
node scripts/workbench.mjs build --engine "<path>/Content Engine" --json
|
|
52
|
-
```
|
|
53
|
-
|
|
54
|
-
`--no-open` skips the browser / server start.
|
|
55
|
-
|
|
56
|
-
## Intent routing
|
|
22
|
+
Entry card for agents. **Do not invent a parallel workflow.** Instance SoT is that engine’s `Content Engine/CLAUDE.md`. Workflows here fill gaps or win when newer than the matching § in CLAUDE.md.
|
|
57
23
|
|
|
58
|
-
|
|
24
|
+
## Product boundary
|
|
59
25
|
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
| capture / 记一下 | Engine `CLAUDE.md` § Capture |
|
|
64
|
-
| Watchlist add | Engine `CLAUDE.md` § Topics (watchlist files) |
|
|
65
|
-
| 扫 watchlist / 发现内容 | Engine `CLAUDE.md` § Discovery — Source Digest only; no Topics |
|
|
66
|
-
| 选题 / score topics | Engine `CLAUDE.md` § Topics — explicit input; Scout→opportunity 5-dim; ready=opp≥7.5 and aud≥6; cap=5 produce |
|
|
67
|
-
| 开一单 / open a run | Engine `CLAUDE.md` § Open a run — **ask platforms**; N platforms → N folders |
|
|
68
|
-
| 收成 swipe/atom/claim | Engine `CLAUDE.md` § Library ingest |
|
|
69
|
-
| Ship + URL + result | Engine `CLAUDE.md` § Published index + Catalog evidence |
|
|
70
|
-
| 出图 / pack + render | Engine `CLAUDE.md` § PagePack, then handoff below |
|
|
71
|
-
| Platform craft | `Content Engine/platforms/<platform>.md` + `references/PLATFORM_GUIDE.md` |
|
|
72
|
-
| Single-page image | Hand off → **easysociable-template** |
|
|
73
|
-
| Multi-page slideshow | Hand off → **easysociable-slideshow** (Pack JSON at this step) |
|
|
74
|
-
| Export PNGs | `workflows/CONTENT_EXPORT.md` |
|
|
75
|
-
| Hosted CLI/MCP | `workflows/MCP_FIRST.md` |
|
|
76
|
-
| Out of scope | `workflows/OUT_OF_SCOPE.md` |
|
|
26
|
+
- Teach a **Content Engine** (signal → decision → draft → review → reusable learning).
|
|
27
|
+
- **EasySociable** is the **visual production layer** inside that engine — not the content brain, not the whole system.
|
|
28
|
+
- For `easysociable-builder` needs research, prefer **L1 system / L2 judgment-review** pains (sustainable publishing) over **L3 visual-tool** friction, unless the user asks for L3.
|
|
77
29
|
|
|
78
|
-
|
|
30
|
+
## Pipeline (do not collapse stages)
|
|
79
31
|
|
|
80
32
|
```text
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
33
|
+
Profile / Audience
|
|
34
|
+
→ Needs (verbatim audience quotes)
|
|
35
|
+
→ optional Product (owned offer facts) or Recommendation (third-party review subject)
|
|
36
|
+
→ Pillar (what this profile discusses) + Lane (how it publishes)
|
|
37
|
+
→ Topic (decision summary + readable judgment + Score appendix)
|
|
38
|
+
→ Run → Pack → Publish / feedback
|
|
84
39
|
```
|
|
85
40
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
41
|
+
| Stage | Owns | Does not |
|
|
42
|
+
|-------|------|----------|
|
|
43
|
+
| Needs `N-` | Verbatim reader/operator quotes | Watchlist hooks, Agent rewrites |
|
|
44
|
+
| Products `P-` | Owned offer facts, pricing, boundaries | Audience demand or third-party reviews |
|
|
45
|
+
| Recommendations `R-` | Third-party subject, evidence, limits, disclosure | Owned product claims |
|
|
46
|
+
| Pillars / lanes | Durable subject / publishing mode | A replacement for Needs or evidence |
|
|
47
|
+
| Topic `T-` | Human judgment card + opp gate | Being auto-created from heat |
|
|
48
|
+
| Workbench | Read-only observatory | Source of truth (markdown indexes are) |
|
|
49
|
+
|
|
50
|
+
## Hard rules
|
|
51
|
+
|
|
52
|
+
1. **No invented quotes** — Needs quote cell = verbatim only. Gloss is separate (`layer=L1|L2|L3` allowed in gloss).
|
|
53
|
+
2. **Heat ≠ topic** — External source metrics never make `ready`.
|
|
54
|
+
3. **Never invent `N-` from a product, vendor claim, or headline.** Match captured needs only.
|
|
55
|
+
4. **Topic decision card first** — start with 结论 / 状态原因 / 适合谁 / 核心判断 / 下一步, then explain the problem, current belief, angle, timing, expected belief change, evidence gap, and recommended form. Keep scores and IDs in the appendix. Chat output is the readable decision card, not a score walkthrough.
|
|
56
|
+
5. **`N-` never in `capture_id`** — needs go in `need_ids` only.
|
|
57
|
+
6. **Rebuild workbench** after markdown writes in the engine vault.
|
|
58
|
+
7. **Keep ownership explicit** — `products/` is for offers we own or provide;
|
|
59
|
+
`recommendations/` is for third-party tools and products. A Topic may cite
|
|
60
|
+
`product_ids`, `recommendation_ids`, both, or neither.
|
|
61
|
+
8. **Use the smallest honest Topic mode** — demand-led is the default;
|
|
62
|
+
product/recommendation inputs do not prove audience demand.
|
|
63
|
+
|
|
64
|
+
Topic modes:
|
|
89
65
|
|
|
90
66
|
```text
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
67
|
+
demand = Needs + Profile
|
|
68
|
+
demand_to_offer = Needs + Product + Profile
|
|
69
|
+
demand_to_review = Needs + Recommendation + Profile
|
|
70
|
+
review = Recommendation + evidence + Profile
|
|
71
|
+
offer_education = Product + mechanism + Profile
|
|
72
|
+
profile_thesis = Profile + Pillar
|
|
96
73
|
```
|
|
97
74
|
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
Validate before slideshow handoff:
|
|
75
|
+
## Create / serve / build
|
|
101
76
|
|
|
102
77
|
```bash
|
|
103
|
-
|
|
104
|
-
|
|
78
|
+
easysociable engine init --root <parent-or-engine> --yes
|
|
79
|
+
easysociable engine serve --engine <parent>/Content Engine --no-open
|
|
80
|
+
easysociable engine build --engine <parent>/Content Engine
|
|
81
|
+
# or, inside the vault:
|
|
82
|
+
python3 workbench/build.py
|
|
105
83
|
```
|
|
106
84
|
|
|
107
|
-
|
|
85
|
+
On a dedicated agent computer (e.g. Grok Bot), prefer `--root /workspace`.
|
|
86
|
+
|
|
87
|
+
Existing files are never overwritten. `python3` is required for the workbench. Observatory: `http://127.0.0.1:8765/workbench/` — top tabs include **需求库 / Needs**. If `serve.py` is already up, do not start a second server; rebuild only.
|
|
88
|
+
|
|
89
|
+
`engine init` adds missing `products/` and `recommendations/` starter files to
|
|
90
|
+
older vaults without overwriting user files. It does not invent recommendation
|
|
91
|
+
entries or migrate existing product notes.
|
|
108
92
|
|
|
109
|
-
|
|
93
|
+
## Operate
|
|
110
94
|
|
|
111
|
-
1.
|
|
112
|
-
2.
|
|
113
|
-
3.
|
|
114
|
-
4.
|
|
95
|
+
1. Resolve account → profile (engine `CLAUDE.md`).
|
|
96
|
+
2. Route by intent (table below). Prefer engine `CLAUDE.md` sections; use `workflows/*` when that file is newer or the § is missing.
|
|
97
|
+
3. Always return the structured chat card the section defines.
|
|
98
|
+
4. Rebuild workbench after writes.
|
|
99
|
+
|
|
100
|
+
| Intent | Action |
|
|
101
|
+
|--------|--------|
|
|
102
|
+
| 采访我 / interview me / 完善人设 / 建立 profile | **workflows/INTERVIEW.md** (not a render) |
|
|
103
|
+
| 记需求 / 用户原话 / capture audience quotes / 调研需求 / 需求落库 | **workflows/NEEDS.md** (not a render) |
|
|
104
|
+
| 更新产品 / 产品库 / product facts | Engine **§ Products** — update owned offer facts and dated pricing |
|
|
105
|
+
| 推荐产品 / 评测工具 / compare or review | `recommendations/` — collect evidence and disclosure before Topic |
|
|
106
|
+
| 扫需求选题 | **NEEDS.md** then Topics from `needs/` `status=captured` |
|
|
107
|
+
| 做成选题 / 生成 topic | engine **§ Topics** — explicit input |
|
|
108
|
+
| 开一单 / 用 T-… 开一单 | engine **§ Open a run** (ask platform; multi → N runs) |
|
|
109
|
+
| 1 page image | **easysociable-template** (after hard gate) |
|
|
110
|
+
| 2+ pages on tiktok / instagram / linkedin / threads | **easysociable-slideshow** (after hard gate) |
|
|
111
|
+
| x / xiaohongshu images | **easysociable-template** only (after hard gate) |
|
|
112
|
+
|
|
113
|
+
## Render hard gate
|
|
114
|
+
|
|
115
|
+
**Before any template/slideshow call:** Identity in `profiles/<active>/voice.md` — Role / What I build / Point of view — no `(fill)` and non-empty; `boundaries.md` exists with Not covering and Never claim both non-empty. If `needs/` exists, `needs/_index.md` ≥ **3** `N-` rows; if `needs/` is absent, skip that count. Public handle MAY stay `(fill)`.
|
|
116
|
+
|
|
117
|
+
On fail: **stay in this skill**. List missing files. Do not call template or slideshow. User must say **强制继续** / **force continue** to proceed.
|
|
118
|
+
|
|
119
|
+
```bash
|
|
120
|
+
easysociable engine validate --run <run-dir> --require-pack --require-knowledge
|
|
121
|
+
```
|
|
115
122
|
|
|
116
|
-
**
|
|
123
|
+
Slideshow packs need an **Arc** line first. Do not default Cover → Point → Steps → Recap → CTA. Page 1 is not automatically `cover`. Handoff: **easysociable-slideshow** (`references/ARC.md`).
|
|
117
124
|
|
|
118
|
-
|
|
125
|
+
## Research (Needs)
|
|
119
126
|
|
|
120
|
-
|
|
127
|
+
- Prefer host research tools. On **X**: built-in `x_*` first; fall back to agent-reach / `twitter` only if insufficient.
|
|
128
|
+
- Store **commenter** words when scraping threads. Do not invent `N-` when a platform tool is missing—stop and ask for paste.
|
|
121
129
|
|
|
122
|
-
##
|
|
130
|
+
## Out of scope
|
|
123
131
|
|
|
124
|
-
|
|
125
|
-
`references/PLATFORM_GUIDE.md`. Load `GETTING_STARTED` on first install,
|
|
126
|
-
`PACK_AUTHORING` / `CONTENT_EXPORT` / `MCP_FIRST` only at render handoff.
|
|
132
|
+
No social posting, Content MCP, Local API, or SQLite content library.
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
# Interview (creator profile)
|
|
2
|
+
|
|
3
|
+
Not a fourth skill. If the engine `CLAUDE.md` already has **§ Interview**, follow that section. Otherwise follow this file.
|
|
4
|
+
|
|
5
|
+
Do **not** ingest needs / quotes here. Do **not** scan the watchlist. Do **not** create a slideshow or call template/slideshow.
|
|
6
|
+
|
|
7
|
+
## Triggers
|
|
8
|
+
|
|
9
|
+
- 采访我
|
|
10
|
+
- 完善人设
|
|
11
|
+
- interview me
|
|
12
|
+
- who am I as a creator
|
|
13
|
+
- 建立 profile
|
|
14
|
+
|
|
15
|
+
## Rules
|
|
16
|
+
|
|
17
|
+
- Ask **one dimension at a time**. Persist that dimension **before** asking the next. Do not batch seven dimensions to the end.
|
|
18
|
+
- Resume by reading files. Skip Public handle `(fill)` (done unless the user wants a handle). Continue from the first gated empty Identity cell (Role / What I build / Point of view) or the next unfinished dimension. Do not re-ask filled Identity rows.
|
|
19
|
+
- Existing `voice.md` with Identity filled but no `## Experience` / `## Values`: **append those headings at the end**. Do not rewrite filled Identity rows.
|
|
20
|
+
- Missing `boundaries.md`: write the empty starter (headings only), then interview. **Never invent boundaries.**
|
|
21
|
+
- Missing `stories.md` / `expression.md`: create the starter file, mark `profile: partial`, continue.
|
|
22
|
+
- `audience.md` / `pillars.md` in this workflow are **drafts only** (hypothesis). Do not invent a full ICP.
|
|
23
|
+
- Never invent bio facts, stories, or values that the user did not say.
|
|
24
|
+
|
|
25
|
+
## Dimensions → files (8–12 questions)
|
|
26
|
+
|
|
27
|
+
| # | Dimension | Questions | Persist immediately to |
|
|
28
|
+
|---|-----------|-----------|------------------------|
|
|
29
|
+
| 1 | Identity (2) | 你对外是谁、做什么?你希望别人记住的那句 point of view 是什么? | `voice.md` `## Identity` — Role / What I build / Point of view. Public handle MAY stay `(fill)`. |
|
|
30
|
+
| 2 | Experience (1–2) | 文案可以引用的 2–3 件事实(年份、角色、做过的事)。没有的就写「not claiming」。 | `voice.md` `## Experience` (append heading if missing) |
|
|
31
|
+
| 3 | Style (1–2) | 想听起来像谁;最讨厌的 AI 腔 / 营销腔。 | `voice.md` `## Persona` + `## Do not say` |
|
|
32
|
+
| 4 | Values (1) | 你一定会说 / 一定不说的主张。 Repeatable topics → `pillars.md` names later, not a copy of this table. | `voice.md` `## Values` (append heading if missing) |
|
|
33
|
+
| 5 | Boundaries (1) | 哪些话题、人群、承诺碰不得。 | `profiles/<id>/boundaries.md`. If the file is missing, write empty starter first, then fill. Never invent. |
|
|
34
|
+
| 6 | Expression (1) | 举三个你喜欢的表达、三个你看到就烦的。 | `profiles/<id>/expression.md` |
|
|
35
|
+
| 7 | Stories (1, skippable) | 一则你常讲、且愿意公开的故事(情境 → 选择 → 教训)。 | `profiles/<id>/stories.md` |
|
|
36
|
+
| 8 | Audience draft (1) | 你以为在写给谁? Mark `status: hypothesis`. | `audience.md` Primary readers |
|
|
37
|
+
|
|
38
|
+
## Persist card (after each dimension)
|
|
39
|
+
|
|
40
|
+
```text
|
|
41
|
+
✅ Profile · Identity
|
|
42
|
+
【File】 profiles/default/voice.md
|
|
43
|
+
【Wrote】 Role … · POV …
|
|
44
|
+
【Missing】 Experience, Values, stories.md
|
|
45
|
+
【Next】 经历(2–3 条可引用事实)
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### Example — boundaries file missing
|
|
49
|
+
|
|
50
|
+
```text
|
|
51
|
+
✅ Profile · Boundaries
|
|
52
|
+
【File】 profiles/default/boundaries.md
|
|
53
|
+
【Wrote】 empty starter (## Not covering / ## Never claim). Did not invent boundaries.
|
|
54
|
+
【Missing】 Not covering, Never claim
|
|
55
|
+
【Next】 边界(哪些话题、人群、承诺碰不得)
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
## Completion (single table — do not invent other numbers)
|
|
59
|
+
|
|
60
|
+
| Level | Condition | Behavior |
|
|
61
|
+
|-------|-----------|----------|
|
|
62
|
+
| **Hard gate** (refuse slideshow handoff / `create_run`) | Identity **only** Role / What I build / Point of view have no `(fill)` and are non-empty (Public handle and Not claiming MAY stay `(fill)` / starter copy) **and** `boundaries.md` exists with Not covering **and** Never claim both non-empty. If `needs/` exists, also `needs/_index.md` ≥ 3 `N-` rows; if `needs/` is absent, skip that count. | Refuse 出图 / PagePack handoff / `slideshows create`. List missing files. User must say **强制继续** / **force continue** to proceed. |
|
|
63
|
+
| **First-session goal** | Hard gate **and** Persona has at least one personalized line **and** needs **target 5** (under 5 still passes the hard gate) **and** `stories.md` may be 0–1 | Open card `profile: partial`. May 扫需求选题. Still no graphics unless forced. |
|
|
64
|
+
| **Complete seven dimensions** | Identity + Experience (≥2) + Values (≥3) + Persona/Do not say + `stories.md` ≥1 + `boundaries.md` + `expression.md` likes/dislikes ≥3 each + needs ≥5 | Open card `profile: complete`. Remaining gaps are draft reminders only — **not** a hard-stop on graphics. |
|
|
65
|
+
|
|
66
|
+
Experience / Values / expression are **not** the hard gate. Missing `stories.md` / `expression.md` = partial. Missing `boundaries.md` file = hard-gate fail.
|
|
67
|
+
|
|
68
|
+
## Open card
|
|
69
|
+
|
|
70
|
+
After the session (or on resume): `profile: partial | complete` from the table above.
|
|
@@ -0,0 +1,82 @@
|
|
|
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
|
+
- capture audience quotes / user needs
|
|
12
|
+
- 调研需求 / 需求落库 / 重新调研并落库
|
|
13
|
+
|
|
14
|
+
## Research axis (easysociable-builder default)
|
|
15
|
+
|
|
16
|
+
Product teaches **Content Engines**; EasySociable is the **visual layer**. When researching or screening needs for this profile:
|
|
17
|
+
|
|
18
|
+
| Layer | Means | Default |
|
|
19
|
+
|-------|--------|---------|
|
|
20
|
+
| **L1** | System / sustainability — what to say, what to publish next, memory, pipeline, consistency | **Prefer** |
|
|
21
|
+
| **L2** | Judgment / review / approval — AI polished but empty; bottleneck moved to human check | **Prefer** |
|
|
22
|
+
| **L3** | Visual / tool friction — Canva, Figma, “looks AI”, brand kit paste | Keep only if user asks; else do not promote as primary |
|
|
23
|
+
|
|
24
|
+
Put `layer=L1|L2|L3` in **`## Our gloss` only** — never in the index `quote` cell.
|
|
25
|
+
|
|
26
|
+
**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.
|
|
27
|
+
|
|
28
|
+
## Rules
|
|
29
|
+
|
|
30
|
+
- Quote cell = **verbatim**. Gloss goes in `## Our gloss`, never in the index `quote` column.
|
|
31
|
+
- Status is only `captured` | `promoted` | `retired`. **Never** `clustered`. Merge is not a new status.
|
|
32
|
+
- 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.
|
|
33
|
+
- Do not mark `promoted` without a `T-` whose `need_ids` contain this `N-`. `topic_ids` non-empty ≡ `promoted`.
|
|
34
|
+
- Never write `N-` into topic `capture_id`.
|
|
35
|
+
- 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.
|
|
36
|
+
- Quotes may include DMs / students. Keep local. Redact PII if used as published copy.
|
|
37
|
+
- After Needs writes: rebuild workbench (`python3 workbench/build.py` or `easysociable engine build`).
|
|
38
|
+
|
|
39
|
+
## Delete vs retire
|
|
40
|
+
|
|
41
|
+
- `retired` = soft discard while the user may still want the row visible.
|
|
42
|
+
- If the user says **删除 / 删掉 retired / 可以直接删了**: **delete** the entry file(s) and remove the index row(s). Do not leave ghost `retired` rows. Rebuild workbench.
|
|
43
|
+
- Do not delete `captured` or `promoted` without an explicit ask.
|
|
44
|
+
|
|
45
|
+
## Ingest paths
|
|
46
|
+
|
|
47
|
+
1. Pasted quote — 「记需求:……」 / “capture audience quotes: …”
|
|
48
|
+
2. Comment / DM export or screenshot — extract quotes; one `N-` each; confirm with the user when unsure.
|
|
49
|
+
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.
|
|
50
|
+
4. After a consult — 「刚才那通咨询记需求」.
|
|
51
|
+
5. Research pass — screen for L1/L2; write `N-` only for verbatim hits; update `_index.md` research note briefly.
|
|
52
|
+
|
|
53
|
+
Forbidden: Agent-rewritten sentences as quote; watchlist viral titles as need; FAQ templates with no original quote.
|
|
54
|
+
|
|
55
|
+
## Write
|
|
56
|
+
|
|
57
|
+
1. New `needs/entries/N-YYYYMMDD-XX.md` from `needs/_template.md`
|
|
58
|
+
2. New row at the top of `needs/_index.md`
|
|
59
|
+
3. Rebuild workbench
|
|
60
|
+
4. Chat card:
|
|
61
|
+
|
|
62
|
+
```text
|
|
63
|
+
✅ Need N-YYYYMMDD-XX
|
|
64
|
+
【Quote】 …
|
|
65
|
+
【Source】 comment | dm | consult | faq | student | other
|
|
66
|
+
【Layer】 L1 | L2 | L3
|
|
67
|
+
【Frequency】 1
|
|
68
|
+
【Stored】 needs/_index + needs/entries/N-….md
|
|
69
|
+
【Merge】 new | merged into N-… (frequency now k, status still captured)
|
|
70
|
+
```
|
|
71
|
+
|
|
72
|
+
## 扫需求选题
|
|
73
|
+
|
|
74
|
+
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.
|
|
75
|
+
|
|
76
|
+
Then **§ Topics**: Input gate Need ID `N-…`; `source_type=need`; `need_ids` lists the `N-` (never in `capture_id`); default `scout_label=demand`. Still run hard filters.
|
|
77
|
+
|
|
78
|
+
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-.
|
|
79
|
+
|
|
80
|
+
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`.
|
|
81
|
+
|
|
82
|
+
Prefer scanning needs before inbox. Inbox is structure / competitor context.
|