@easysociable/cli 0.1.8 → 0.1.9
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 +29 -9
- package/dist/easysociable.js +111 -100
- package/dist/easysociable.js.map +1 -1
- package/package.json +2 -2
- package/scripts/engine/migrate-split-vault.py +75 -0
- package/skills/ONBOARDING.md +19 -4
- package/skills/easysociable-content/SKILL.md +25 -9
- package/content-engine/scripts/fixture.test.mjs +0 -24
- package/content-engine/scripts/starter.mjs +0 -58
- package/content-engine/scripts/validate.test.mjs +0 -101
- package/content-engine/scripts/workbench.mjs +0 -140
- package/content-engine/starter/CLAUDE.md +0 -908
- package/content-engine/starter/accounts/README.md +0 -9
- package/content-engine/starter/accounts/_index.md +0 -31
- package/content-engine/starter/accounts/overrides/README.md +0 -3
- package/content-engine/starter/engine.json +0 -23
- package/content-engine/starter/exports/README.md +0 -28
- package/content-engine/starter/hits/README.md +0 -5
- package/content-engine/starter/hits/_index.md +0 -30
- package/content-engine/starter/hits/_template.md +0 -46
- package/content-engine/starter/hits/entries/README.md +0 -3
- package/content-engine/starter/inbox/README.md +0 -9
- package/content-engine/starter/inbox/_index.md +0 -24
- package/content-engine/starter/inbox/entries/README.md +0 -3
- package/content-engine/starter/needs/README.md +0 -38
- package/content-engine/starter/needs/_index.md +0 -31
- package/content-engine/starter/needs/_template.md +0 -24
- package/content-engine/starter/needs/entries/README.md +0 -5
- package/content-engine/starter/platforms/README.md +0 -19
- package/content-engine/starter/platforms/ig.md +0 -69
- package/content-engine/starter/platforms/instagram.md +0 -5
- package/content-engine/starter/platforms/linkedin.md +0 -72
- package/content-engine/starter/platforms/threads.md +0 -69
- package/content-engine/starter/platforms/tiktok.md +0 -71
- package/content-engine/starter/platforms/x.md +0 -78
- package/content-engine/starter/platforms/xiaohongshu.md +0 -19
- package/content-engine/starter/products/README.md +0 -38
- package/content-engine/starter/products/_index.md +0 -25
- package/content-engine/starter/products/_template.md +0 -56
- package/content-engine/starter/products/entries/P-001-easysociable.md +0 -150
- package/content-engine/starter/products/entries/P-002-content-engine.md +0 -136
- package/content-engine/starter/profiles/_index.md +0 -16
- package/content-engine/starter/profiles/default/README.md +0 -17
- package/content-engine/starter/profiles/default/audience.md +0 -38
- package/content-engine/starter/profiles/default/boundaries.md +0 -14
- package/content-engine/starter/profiles/default/expression.md +0 -18
- package/content-engine/starter/profiles/default/handles.md +0 -8
- package/content-engine/starter/profiles/default/keywords.md +0 -31
- package/content-engine/starter/profiles/default/lanes.md +0 -12
- package/content-engine/starter/profiles/default/pillars.md +0 -33
- package/content-engine/starter/profiles/default/stories.md +0 -15
- package/content-engine/starter/profiles/default/voice.md +0 -38
- package/content-engine/starter/published/_index.md +0 -20
- package/content-engine/starter/raw/README.md +0 -4
- package/content-engine/starter/raw/_index.md +0 -12
- package/content-engine/starter/recommendations/README.md +0 -21
- package/content-engine/starter/recommendations/_index.md +0 -21
- package/content-engine/starter/recommendations/_template.md +0 -44
- package/content-engine/starter/runs/README.md +0 -22
- package/content-engine/starter/runs/_index.md +0 -41
- package/content-engine/starter/runs/_template/brief.md +0 -76
- package/content-engine/starter/runs/_template/draft.md +0 -11
- package/content-engine/starter/runs/_template/editor.md +0 -18
- package/content-engine/starter/runs/_template/feedback.md +0 -15
- package/content-engine/starter/runs/_template/idea.md +0 -27
- package/content-engine/starter/runs/_template/pack.md +0 -55
- package/content-engine/starter/runs/_template/packet.md +0 -31
- package/content-engine/starter/runs/_template/rubric.md +0 -19
- package/content-engine/starter/swipe/_index.md +0 -27
- package/content-engine/starter/swipe/_template.md +0 -36
- package/content-engine/starter/topics/README.md +0 -21
- package/content-engine/starter/topics/_index.md +0 -51
- package/content-engine/starter/topics/_template-item.md +0 -106
- package/content-engine/starter/topics/items/README.md +0 -4
- package/content-engine/starter/topics/scoring.md +0 -255
- package/content-engine/starter/wiki/README.md +0 -13
- package/content-engine/starter/wiki/atoms/_index.md +0 -23
- package/content-engine/starter/wiki/atoms/_template.md +0 -31
- package/content-engine/starter/wiki/claims/_index.md +0 -26
- package/content-engine/starter/wiki/claims/_template.md +0 -38
- package/content-engine/starter/workbench/README.md +0 -17
- package/content-engine/workbench/__pycache__/build.cpython-310.pyc +0 -0
- package/content-engine/workbench/build.py +0 -1467
- package/content-engine/workbench/serve.py +0 -53
- package/content-engine/workbench/template.html +0 -2683
- /package/{content-engine/scripts → scripts/engine}/contracts.mjs +0 -0
- /package/{content-engine/scripts → scripts/engine}/export-contracts.mjs +0 -0
- /package/{content-engine → scripts/engine}/fixtures/golden-run-en/draft.md +0 -0
- /package/{content-engine → scripts/engine}/fixtures/golden-run-en/idea.md +0 -0
- /package/{content-engine → scripts/engine}/fixtures/golden-run-en/pack-tiktok.json +0 -0
- /package/{content-engine/scripts → scripts/engine}/validate-export.mjs +0 -0
- /package/{content-engine/scripts → scripts/engine}/validate-pack.mjs +0 -0
- /package/{content-engine/scripts → scripts/engine}/validate-run.mjs +0 -0
|
@@ -1,78 +0,0 @@
|
|
|
1
|
-
# Platform: X (Twitter)
|
|
2
|
-
|
|
3
|
-
**Scope:** How to *write* for X — length, rhythm, quality bars.
|
|
4
|
-
**Not in this file:** Who you are, product story, pillars, voice, audience.
|
|
5
|
-
Those live under `profiles/<id>/` (via account → profile resolve).
|
|
6
|
-
**Pixels / canvas:** Optional; if images, EasySociable `PLATFORM_SPECS` for **x** (often wide ~1200×675 or `1:1` for multi-image).
|
|
7
|
-
|
|
8
|
-
Agent: before drafting any X post, read this file for craft. For topics/tone/readers, use resolved profile files.
|
|
9
|
-
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
## Defaults
|
|
13
|
-
|
|
14
|
-
- Language: English (unless user asks otherwise)
|
|
15
|
-
- Default unit: **1 short post** (not a thread), unless user asks for a thread
|
|
16
|
-
- Assume timeline scroll: **first line** does most of the work
|
|
17
|
-
- Success for easysociable-builder: **qualified replies / DMs**, not raw impressions
|
|
18
|
-
- Pack: **optional**. Text-first; add carousel/images when showing the visual production layer
|
|
19
|
-
|
|
20
|
-
## Length & shape
|
|
21
|
-
|
|
22
|
-
| Form | Guidance |
|
|
23
|
-
|------|----------|
|
|
24
|
-
| Single post | Prefer **1–3 short sentences** or tight line breaks. Rarely fill the full character limit. |
|
|
25
|
-
| Thread | Only if user asks. Tweet 1 = hook only; each next tweet = one idea; end without a summary paragraph that restates everything. |
|
|
26
|
-
| Reply | Add information or a precise question. Avoid “Great point!” / empty agreement. |
|
|
27
|
-
| Media | Optional. If used, text should still stand alone if the image fails. Carousel images = proof of system, not the default body. |
|
|
28
|
-
|
|
29
|
-
## Hooks (mechanics only — not your brand story)
|
|
30
|
-
|
|
31
|
-
A strong first line usually does **one** of:
|
|
32
|
-
|
|
33
|
-
- Names a **concrete mistake** or false belief
|
|
34
|
-
- States a **sharp contrast** (X vs Y)
|
|
35
|
-
- Opens a **gap** the rest of the post closes
|
|
36
|
-
- Gives a **specific** observation (not “in today’s world…”)
|
|
37
|
-
|
|
38
|
-
Avoid first lines that only announce a topic list (“Here are 3 tips to…”).
|
|
39
|
-
|
|
40
|
-
## Craft rules
|
|
41
|
-
|
|
42
|
-
1. **One idea per post** (or per thread tweet).
|
|
43
|
-
2. Prefer concrete nouns and verbs over abstract “value / leverage / unlock”.
|
|
44
|
-
3. Cut filler and restatements. No closing that only summarizes what was already said.
|
|
45
|
-
4. Line breaks are for rhythm, not for fake drama on every word.
|
|
46
|
-
5. Questions: use when you want replies; make them answerable, not vague (“thoughts?”).
|
|
47
|
-
6. Links: prefer zero or one; if needed, put after the point lands — not as the whole post.
|
|
48
|
-
7. Optimize for **classifiable takes** and conversation — authority/signal, not soft lifestyle chatter (that’s closer to Threads).
|
|
49
|
-
8. EasySociable only when earned; frame as **visual production layer**, never as full content OS.
|
|
50
|
-
|
|
51
|
-
## Anti-slop (X)
|
|
52
|
-
|
|
53
|
-
Do **not** default to:
|
|
54
|
-
|
|
55
|
-
- “In a world where…” / “Here’s the thing:” / “Let’s dive in”
|
|
56
|
-
- “It’s not X, it’s Y” as empty cadence with no substance
|
|
57
|
-
- Engagement bait with no point (“Who’s still awake?” / “Like if you agree”)
|
|
58
|
-
- Wall of hashtags
|
|
59
|
-
- Corporate intern tone or fake guru certainty without a claim the user owns
|
|
60
|
-
- Comment-gate lead magnets (“Comment SLIDES”) as the primary CTA
|
|
61
|
-
- **RIP Canva** / “AI replaced your designer” as the main hook
|
|
62
|
-
- Empty praise replies when engaging others’ posts
|
|
63
|
-
|
|
64
|
-
## Quality self-check (before showing draft to user)
|
|
65
|
-
|
|
66
|
-
- [ ] First line works without the rest?
|
|
67
|
-
- [ ] Would a stranger understand the claim in one read?
|
|
68
|
-
- [ ] Any sentence pure filler? Delete it.
|
|
69
|
-
- [ ] Does this match **pillars.md** (topic allowed), not only “sounds like a tweet”?
|
|
70
|
-
- [ ] Would the right ICP reply “we have this problem” / ask how — or only react with emoji?
|
|
71
|
-
- [ ] No invented metrics, customers, or results?
|
|
72
|
-
- [ ] If media: still makes sense as text-only?
|
|
73
|
-
|
|
74
|
-
## Out of scope here
|
|
75
|
-
|
|
76
|
-
- Carousel / slideshow page structure → run `pack` + EasySociable skills; see also `linkedin.md` / `ig.md` / `tiktok.md` for visual-native networks
|
|
77
|
-
- Learned strategies → `wiki/claims/`; techniques → `wiki/atoms/`
|
|
78
|
-
- Multi-platform native rules → other `platforms/*.md` files (do **not** paste X copy into Threads/LI/IG/TT unchanged)
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
# Platform: Xiaohongshu (小红书)
|
|
2
|
-
|
|
3
|
-
**Scope:** How to *write* for Xiaohongshu notes.
|
|
4
|
-
**Not in this file:** Who you are, pillars, voice, audience.
|
|
5
|
-
|
|
6
|
-
## Defaults
|
|
7
|
-
|
|
8
|
-
- Language: follow the account; many notes mix 中文 body + English product names
|
|
9
|
-
- Default unit: **single image note** in V1 (slideshow not a Content Pack route yet)
|
|
10
|
-
- Pack: **no** for V1 — hand off to **easysociable-template** fill-slots
|
|
11
|
-
- Canvas: often **3:4 @ 1080×1440** — see Template `PLATFORM_SPECS`
|
|
12
|
-
|
|
13
|
-
## Craft
|
|
14
|
-
|
|
15
|
-
- Cover must stop the thumb; one idea per note
|
|
16
|
-
- Caption: concrete, saveable, not empty lifestyle filler
|
|
17
|
-
- Do not invent personal metrics or “爆款” proof
|
|
18
|
-
|
|
19
|
-
Missing more specific house rules → stop and ask; do not invent craft.
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
# products/
|
|
2
|
-
|
|
3
|
-
First-class **product facts library**. Products describe what the creator
|
|
4
|
-
offers; they are not audience needs, topics, or published claims.
|
|
5
|
-
|
|
6
|
-
| Path | Role |
|
|
7
|
-
|------|------|
|
|
8
|
-
| `_index.md` | Product registry and lifecycle |
|
|
9
|
-
| `entries/P-*.md` | Product facts, boundaries, pricing, proof and claims |
|
|
10
|
-
| `_template.md` | Product entry shape |
|
|
11
|
-
|
|
12
|
-
## Relationship to the content engine
|
|
13
|
-
|
|
14
|
-
```text
|
|
15
|
-
Needs (demand evidence) + Profile (identity)
|
|
16
|
-
→ Topic (editorial judgment)
|
|
17
|
-
→ optional Product fit (offer context)
|
|
18
|
-
→ Run
|
|
19
|
-
```
|
|
20
|
-
|
|
21
|
-
- A `Need` records what an audience member actually said.
|
|
22
|
-
- A `Product` records what is currently offered and what it does not promise.
|
|
23
|
-
- A `Topic` decides whether something is worth saying. It may cite zero, one, or
|
|
24
|
-
several products.
|
|
25
|
-
- Product fit never makes a Topic `ready` by itself, and a product description
|
|
26
|
-
never becomes a Need quote.
|
|
27
|
-
|
|
28
|
-
## Rules
|
|
29
|
-
|
|
30
|
-
- Keep product facts current. Prices and entitlements must include an
|
|
31
|
-
`effective_from` date and a source of truth.
|
|
32
|
-
- Do not invent customers, outcomes, metrics, testimonials or proof.
|
|
33
|
-
- Mark a product `retired` instead of silently deleting a product used by a
|
|
34
|
-
Topic or Run.
|
|
35
|
-
- Use `product_fit: none` for useful education that does not need a product
|
|
36
|
-
connection. Do not force a CTA into every Topic.
|
|
37
|
-
- Product claims here describe the offer. The `wiki/claims/` catalog tracks
|
|
38
|
-
propositions tested through published content; they are different objects.
|
|
@@ -1,25 +0,0 @@
|
|
|
1
|
-
# Products index
|
|
2
|
-
|
|
3
|
-
Newest rows on top. This is the registry; product facts live in the entry
|
|
4
|
-
file.
|
|
5
|
-
|
|
6
|
-
| id | name | status | audience | price | effective_from | file |
|
|
7
|
-
|----|------|--------|----------|-------|----------------|------|
|
|
8
|
-
| P-002 | Content Engine | active | AI-native creators and small content teams building repeatable content workflows | free local install; hosted features not included | 2026-09-16 | products/entries/P-002-content-engine.md |
|
|
9
|
-
| P-001 | EasySociable | active | creators and teams producing branded multi-page social visuals | see entry | 2026-09-04 | products/entries/P-001-easysociable.md |
|
|
10
|
-
|
|
11
|
-
## Status values
|
|
12
|
-
|
|
13
|
-
| status | Meaning |
|
|
14
|
-
|--------|---------|
|
|
15
|
-
| `draft` | Being defined; do not use for product claims |
|
|
16
|
-
| `active` | Current offer; may be cited by Topics and Runs |
|
|
17
|
-
| `retired` | No longer offered; retained for historical references |
|
|
18
|
-
|
|
19
|
-
## Agent rules
|
|
20
|
-
|
|
21
|
-
- Read the product entry before making a product claim.
|
|
22
|
-
- `price` is a lookup hint only; use the dated entry for exact pricing and
|
|
23
|
-
entitlements.
|
|
24
|
-
- A Topic may cite `product_ids: none` even when the account has active
|
|
25
|
-
products.
|
|
@@ -1,56 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
id: P-YYYYMMDD-XX
|
|
3
|
-
name:
|
|
4
|
-
status: draft
|
|
5
|
-
effective_from: YYYY-MM-DD
|
|
6
|
-
source_of_truth:
|
|
7
|
-
---
|
|
8
|
-
|
|
9
|
-
# Product name
|
|
10
|
-
|
|
11
|
-
## Product promise
|
|
12
|
-
|
|
13
|
-
One sentence describing the customer change. Do not promise an outcome the
|
|
14
|
-
product cannot control.
|
|
15
|
-
|
|
16
|
-
## What it is
|
|
17
|
-
|
|
18
|
-
## Best for
|
|
19
|
-
|
|
20
|
-
## Not for
|
|
21
|
-
|
|
22
|
-
## Problem
|
|
23
|
-
|
|
24
|
-
## Mechanism
|
|
25
|
-
|
|
26
|
-
How the product addresses the problem.
|
|
27
|
-
|
|
28
|
-
## Not solving
|
|
29
|
-
|
|
30
|
-
Explicit exclusions and limitations.
|
|
31
|
-
|
|
32
|
-
## Pricing and entitlements
|
|
33
|
-
|
|
34
|
-
Include currency, billing period, limits and plan differences. Record the
|
|
35
|
-
effective date above.
|
|
36
|
-
|
|
37
|
-
## Proof
|
|
38
|
-
|
|
39
|
-
Named evidence only. Empty is valid.
|
|
40
|
-
|
|
41
|
-
## Objections
|
|
42
|
-
|
|
43
|
-
## Claims
|
|
44
|
-
|
|
45
|
-
### Safe to say
|
|
46
|
-
|
|
47
|
-
### Say carefully
|
|
48
|
-
|
|
49
|
-
### Do not say
|
|
50
|
-
|
|
51
|
-
## CTA
|
|
52
|
-
|
|
53
|
-
When to educate, mention, invite, or sell.
|
|
54
|
-
|
|
55
|
-
## Version notes
|
|
56
|
-
|
|
@@ -1,150 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
id: P-001
|
|
3
|
-
name: EasySociable
|
|
4
|
-
status: active
|
|
5
|
-
effective_from: 2026-09-04
|
|
6
|
-
source_of_truth:
|
|
7
|
-
- docs/prd.md
|
|
8
|
-
- docs/pricing-v1.md
|
|
9
|
-
- apps/easysociable/app/routes/home.tsx
|
|
10
|
-
---
|
|
11
|
-
|
|
12
|
-
# EasySociable
|
|
13
|
-
|
|
14
|
-
## Product promise
|
|
15
|
-
|
|
16
|
-
Turn an agent-produced content argument into a reusable, branded,
|
|
17
|
-
reviewable, multi-page social visual pack.
|
|
18
|
-
|
|
19
|
-
## What it is
|
|
20
|
-
|
|
21
|
-
EasySociable is the hosted visual production layer for an external Agent. It
|
|
22
|
-
provides reusable Page Templates, Brands, durable Slideshow Runs, Studio
|
|
23
|
-
review/editing, and browser Download of the reviewed PNG pack.
|
|
24
|
-
|
|
25
|
-
The Agent supplies the content reasoning and page structure. EasySociable does
|
|
26
|
-
not write the content or provide a hosted LLM.
|
|
27
|
-
|
|
28
|
-
## Best for
|
|
29
|
-
|
|
30
|
-
- Creators who already use Codex, Claude Code, or a comparable Agent for
|
|
31
|
-
content reasoning.
|
|
32
|
-
- Creators and teams producing branded carousels across TikTok, Instagram,
|
|
33
|
-
LinkedIn, or Threads.
|
|
34
|
-
- Operators who need reusable visual systems, role-specific layouts, and a
|
|
35
|
-
review step before download.
|
|
36
|
-
|
|
37
|
-
## Not for
|
|
38
|
-
|
|
39
|
-
- Users looking for a browser-only content writing assistant.
|
|
40
|
-
- Users who want a general-purpose freeform design editor instead of a
|
|
41
|
-
constrained reusable visual system.
|
|
42
|
-
- Users who want EasySociable to manage their social accounts or publish
|
|
43
|
-
automatically.
|
|
44
|
-
|
|
45
|
-
## Problem
|
|
46
|
-
|
|
47
|
-
An Agent can produce the argument, but the visual production context is often
|
|
48
|
-
lost: each carousel starts from a blank design, brand instructions are
|
|
49
|
-
repeated, and a small revision can require regeneration.
|
|
50
|
-
|
|
51
|
-
When one idea must become several platform deliverables, the operator also has
|
|
52
|
-
to repeat layout and export work while checking platform-specific canvases.
|
|
53
|
-
|
|
54
|
-
## Mechanism
|
|
55
|
-
|
|
56
|
-
- Page Templates are discoverable by layout role such as `cover`, `hook`,
|
|
57
|
-
`value`, `steps`, `proof`, and `cta`, so a content structure can be matched
|
|
58
|
-
to an appropriate visual layout.
|
|
59
|
-
- A Brand and reusable templates persist visual decisions across future Runs.
|
|
60
|
-
- Studio keeps the complete Run reviewable and allows supported text and image
|
|
61
|
-
slot edits before Download.
|
|
62
|
-
- Platform-specific Layout Family variants and exports adapt the same
|
|
63
|
-
structured content to supported canvas presets.
|
|
64
|
-
|
|
65
|
-
## Not solving
|
|
66
|
-
|
|
67
|
-
- Content strategy, audience research, or the quality of the Agent's thesis.
|
|
68
|
-
- Guaranteed reach, engagement, conversions, or viral performance.
|
|
69
|
-
- Automatic social posting or social-account connection.
|
|
70
|
-
- A hosted LLM or a replacement for the user's Agent.
|
|
71
|
-
- Unlimited arbitrary canvas editing or unrestricted template composition.
|
|
72
|
-
|
|
73
|
-
## Pricing and entitlements
|
|
74
|
-
|
|
75
|
-
Early-access prices; list prices and free limits may change.
|
|
76
|
-
|
|
77
|
-
| Plan | Monthly | Annual | Slideshow Download | Brands | Image library |
|
|
78
|
-
|------|---------|--------|--------------------|--------|---------------|
|
|
79
|
-
| Free | $0 | — | 3/month, 1 platform per pack | 1 | 2 GB |
|
|
80
|
-
| Creator | $19 | $190/year | Unlimited, all selected V1 platforms | 5 | 50 GB |
|
|
81
|
-
| Pro | $39 | $390/year | Unlimited, all selected V1 platforms | 25 | 200 GB |
|
|
82
|
-
| Agency | Sales-led | Contract | Contract | >25 | >200 GB |
|
|
83
|
-
|
|
84
|
-
Paid plans include the full system-template catalog, up to 20 pages per
|
|
85
|
-
Slideshow Run, private drafts, three API keys, no overage and no watermark.
|
|
86
|
-
Pixels leave the product through Studio Download; CLI/MCP is not a final PNG
|
|
87
|
-
factory.
|
|
88
|
-
|
|
89
|
-
## Proof
|
|
90
|
-
|
|
91
|
-
No customer proof is recorded here. Do not invent testimonials, adoption
|
|
92
|
-
metrics or performance improvements.
|
|
93
|
-
|
|
94
|
-
## Objections
|
|
95
|
-
|
|
96
|
-
### “Canva already does this.”
|
|
97
|
-
|
|
98
|
-
Canva is the broader freeform design workspace. EasySociable is for an
|
|
99
|
-
Agent-first, repeatable visual production workflow with role-aware templates,
|
|
100
|
-
durable Runs and Studio review.
|
|
101
|
-
|
|
102
|
-
### “Can the Agent write my post?”
|
|
103
|
-
|
|
104
|
-
The Agent can do that outside EasySociable. EasySociable owns the visual
|
|
105
|
-
production layer.
|
|
106
|
-
|
|
107
|
-
### “Can I publish directly?”
|
|
108
|
-
|
|
109
|
-
V1 produces a reviewed Download from Studio. It does not connect social
|
|
110
|
-
accounts or publish posts.
|
|
111
|
-
|
|
112
|
-
## Claims
|
|
113
|
-
|
|
114
|
-
### Safe to say
|
|
115
|
-
|
|
116
|
-
- Reuse saved Brands and Page Templates.
|
|
117
|
-
- Select layouts by supported page role.
|
|
118
|
-
- Review and edit supported slots in Studio before Download.
|
|
119
|
-
- Create platform-specific variants for supported V1 platforms and canvases.
|
|
120
|
-
|
|
121
|
-
### Say carefully
|
|
122
|
-
|
|
123
|
-
- “One idea, multiple platforms” means the structured Run is adapted and
|
|
124
|
-
exported for supported platform formats; it does not mean one identical file
|
|
125
|
-
is valid everywhere.
|
|
126
|
-
- “Faster” requires a user-specific baseline. Do not claim a universal time
|
|
127
|
-
saving.
|
|
128
|
-
- “Branded” means the configured Brand and selected templates are applied; it
|
|
129
|
-
does not mean every creative decision is automatically correct.
|
|
130
|
-
|
|
131
|
-
### Do not say
|
|
132
|
-
|
|
133
|
-
- “Guaranteed higher engagement.”
|
|
134
|
-
- “One-click automatic publishing.”
|
|
135
|
-
- “AI writes all your content.”
|
|
136
|
-
- “No review is needed.”
|
|
137
|
-
- “Every platform receives the same file.”
|
|
138
|
-
|
|
139
|
-
## CTA
|
|
140
|
-
|
|
141
|
-
- `educate`: explain the Agent-to-visual production gap.
|
|
142
|
-
- `mention`: show how a role-specific template or Brand persists.
|
|
143
|
-
- `invite`: ask users to try a real content Run and review it in Studio.
|
|
144
|
-
- `sell`: use only when the audience has a validated need for repeated
|
|
145
|
-
branded visual production.
|
|
146
|
-
|
|
147
|
-
## Version notes
|
|
148
|
-
|
|
149
|
-
- 2026-09-04: early-access pricing and V1 entitlements from
|
|
150
|
-
`docs/pricing-v1.md`.
|
|
@@ -1,136 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
id: P-002
|
|
3
|
-
name: Content Engine
|
|
4
|
-
status: active
|
|
5
|
-
effective_from: 2026-09-16
|
|
6
|
-
source_of_truth:
|
|
7
|
-
- apps/cli/README.md
|
|
8
|
-
- apps/cli/package.json
|
|
9
|
-
- apps/cli/content-engine/starter/CLAUDE.md
|
|
10
|
-
- apps/cli/content-engine/starter/engine.json
|
|
11
|
-
---
|
|
12
|
-
|
|
13
|
-
# Content Engine
|
|
14
|
-
|
|
15
|
-
## Product promise
|
|
16
|
-
|
|
17
|
-
Give AI-native creators and small content teams a local, repeatable workflow
|
|
18
|
-
from audience signals to topics, briefs, drafts, review, feedback, and
|
|
19
|
-
publishable content.
|
|
20
|
-
|
|
21
|
-
## What it is
|
|
22
|
-
|
|
23
|
-
Content Engine is a local-first content system installed and operated through
|
|
24
|
-
the `easysociable` command-line tool. It provides a structured local vault,
|
|
25
|
-
profile and audience context, needs, topics, product facts, drafts, runs,
|
|
26
|
-
feedback, and a workbench for inspecting the engine.
|
|
27
|
-
|
|
28
|
-
It does not require Obsidian. The engine can be initialized and served from a
|
|
29
|
-
workspace directory.
|
|
30
|
-
|
|
31
|
-
## Best for
|
|
32
|
-
|
|
33
|
-
- AI-native creators building a repeatable publishing workflow.
|
|
34
|
-
- Agency-of-one operators and small content teams managing recurring content
|
|
35
|
-
decisions and review.
|
|
36
|
-
- Users who want local files and Agent-assisted workflows instead of a
|
|
37
|
-
browser-only content writing assistant.
|
|
38
|
-
|
|
39
|
-
## Not for
|
|
40
|
-
|
|
41
|
-
- Users looking for guaranteed reach, engagement, conversions, or virality.
|
|
42
|
-
- Users who want an AI model to invent their audience, point of view, proof,
|
|
43
|
-
or customer results.
|
|
44
|
-
- Users who want a hosted LLM or automatic social-account publishing.
|
|
45
|
-
- Users who only want one prompt or one generated post without a repeatable
|
|
46
|
-
workflow.
|
|
47
|
-
|
|
48
|
-
## Problem
|
|
49
|
-
|
|
50
|
-
AI makes drafting easier, but a blank prompt does not preserve the audience,
|
|
51
|
-
point of view, editorial judgment, review standards, or feedback from the last
|
|
52
|
-
piece. Content Engine turns those decisions into explicit local objects that
|
|
53
|
-
an Agent can use again.
|
|
54
|
-
|
|
55
|
-
## Mechanism
|
|
56
|
-
|
|
57
|
-
- Local profile, audience, voice, boundaries, and pillar files provide durable
|
|
58
|
-
context.
|
|
59
|
-
- Needs and source material become evaluated Topics rather than immediate
|
|
60
|
-
drafts.
|
|
61
|
-
- Brief, draft, editor, rubric, run, and feedback stages make review and
|
|
62
|
-
publishing decisions explicit.
|
|
63
|
-
- Product and recommendation libraries keep owned-offer facts separate from
|
|
64
|
-
audience demand and third-party research.
|
|
65
|
-
- The CLI can initialize, validate, build, serve, and detect local engines.
|
|
66
|
-
|
|
67
|
-
## Installation
|
|
68
|
-
|
|
69
|
-
The CLI and local Content Engine are free to install:
|
|
70
|
-
|
|
71
|
-
```bash
|
|
72
|
-
curl -fsSL https://easysociable.com/install.sh | bash
|
|
73
|
-
easysociable install --skills content,template,slideshow --yes
|
|
74
|
-
easysociable engine init --root /workspace --yes
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
The installer requires Node.js 20 or newer. The Content Engine workbench also
|
|
78
|
-
requires `python3`. The default CLI skill set currently includes Template and
|
|
79
|
-
Slideshow; the `content` skill is enabled explicitly above.
|
|
80
|
-
|
|
81
|
-
## Pricing and entitlements
|
|
82
|
-
|
|
83
|
-
Content Engine and its CLI installation path are free to install. This entry
|
|
84
|
-
does not claim paid hosted features, managed storage, or a hosted LLM.
|
|
85
|
-
|
|
86
|
-
## Proof
|
|
87
|
-
|
|
88
|
-
No customer proof, adoption metrics, or performance improvements are recorded.
|
|
89
|
-
|
|
90
|
-
## Boundaries
|
|
91
|
-
|
|
92
|
-
- Content Engine owns local content knowledge, editorial workflow, and
|
|
93
|
-
production tracking.
|
|
94
|
-
- EasySociable is a separate visual production layer for branded templates,
|
|
95
|
-
slideshow runs, Studio review, and PNG download.
|
|
96
|
-
- The Agent remains responsible for reasoning, content judgment, and supplied
|
|
97
|
-
evidence.
|
|
98
|
-
- The system does not guarantee that generated content is correct, useful, or
|
|
99
|
-
successful.
|
|
100
|
-
|
|
101
|
-
## Claims
|
|
102
|
-
|
|
103
|
-
### Safe to say
|
|
104
|
-
|
|
105
|
-
- Install the CLI from the public installer or npm package.
|
|
106
|
-
- Initialize a local Content Engine with `easysociable engine init`.
|
|
107
|
-
- Use local files to preserve profile, audience, needs, topics, briefs, and
|
|
108
|
-
feedback.
|
|
109
|
-
- Validate and serve the engine through CLI commands.
|
|
110
|
-
|
|
111
|
-
### Say carefully
|
|
112
|
-
|
|
113
|
-
- “One-command install” refers to installing the CLI; enabling the Content
|
|
114
|
-
skill and initializing the engine are additional CLI commands.
|
|
115
|
-
- “Free” refers to the local Content Engine and CLI installation path, not to
|
|
116
|
-
hosted EasySociable plans or hosted usage.
|
|
117
|
-
- “Gets better” means decisions and feedback persist for the next run; it does
|
|
118
|
-
not mean the Agent learns autonomously from every review.
|
|
119
|
-
|
|
120
|
-
### Do not say
|
|
121
|
-
|
|
122
|
-
- “AI writes and publishes everything automatically.”
|
|
123
|
-
- “The Content Engine guarantees better performance.”
|
|
124
|
-
- “Obsidian is required.”
|
|
125
|
-
- “The hosted EasySociable app is the Content Engine.”
|
|
126
|
-
|
|
127
|
-
## CTA
|
|
128
|
-
|
|
129
|
-
- `educate`: explain why content needs durable decisions before generation.
|
|
130
|
-
- `invite`: install the CLI and initialize a local engine.
|
|
131
|
-
- `mention`: show how a Topic, Brief, or review gate survives into the next
|
|
132
|
-
run.
|
|
133
|
-
|
|
134
|
-
## Version notes
|
|
135
|
-
|
|
136
|
-
- 2026-09-16: Added as the local-first Content Engine product.
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
# Profiles index
|
|
2
|
-
|
|
3
|
-
Reusable **content profiles**: pillars + audience + voice.
|
|
4
|
-
Accounts point here; do not copy profile bodies into account files.
|
|
5
|
-
|
|
6
|
-
| id | path | voice | one_liner | accounts | product_ids | recommendation_scope |
|
|
7
|
-
|----|------|-------|-----------|----------|-------------|---------------------|
|
|
8
|
-
| default | profiles/default/ | `profiles/default/voice.md` | Replace this one-liner with the profile’s job | your-handle | none | none |
|
|
9
|
-
|
|
10
|
-
## Voice column
|
|
11
|
-
|
|
12
|
-
- Empty or `profile` → load `profiles/<id>/voice.md`
|
|
13
|
-
- Explicit path → load that file instead
|
|
14
|
-
|
|
15
|
-
`profiles/<id>/lanes.md` describes publishing lanes such as teaching, building,
|
|
16
|
-
reviewing and comparing. A lane is not a replacement for a pillar.
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
# Profile: default
|
|
2
|
-
|
|
3
|
-
Replace this starter profile before the first serious draft.
|
|
4
|
-
|
|
5
|
-
| File | Role |
|
|
6
|
-
|------|------|
|
|
7
|
-
| `pillars.md` | Topics this profile may cover |
|
|
8
|
-
| `audience.md` | Readers + per-platform emphasis |
|
|
9
|
-
| `voice.md` | Identity + Experience + Values + Persona |
|
|
10
|
-
| `stories.md` | Story inventory (cite or none) |
|
|
11
|
-
| `boundaries.md` | Creator must-avoid (Not covering / Never claim) |
|
|
12
|
-
| `expression.md` | Expression likes / dislikes |
|
|
13
|
-
| `lanes.md` | Publishing lanes |
|
|
14
|
-
| `keywords.md` | Three-track: listen→Hits, search=SEO, ask=GEO |
|
|
15
|
-
| `handles.md` | ≤8 ally/foil/competitor handles |
|
|
16
|
-
|
|
17
|
-
Accounts: see `accounts/_index.md`.
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
# Audience — profile `default`
|
|
2
|
-
|
|
3
|
-
**Role:** Who this profile writes for.
|
|
4
|
-
**Not:** Platform craft (`platforms/*.md`).
|
|
5
|
-
|
|
6
|
-
## Cross-platform core
|
|
7
|
-
|
|
8
|
-
### Primary readers
|
|
9
|
-
|
|
10
|
-
1. (fill)
|
|
11
|
-
|
|
12
|
-
### Not for
|
|
13
|
-
|
|
14
|
-
- (fill)
|
|
15
|
-
|
|
16
|
-
### Jobs to be done
|
|
17
|
-
|
|
18
|
-
1. (fill)
|
|
19
|
-
|
|
20
|
-
## Per-platform emphasis
|
|
21
|
-
|
|
22
|
-
Fill the section for **this run’s platform** before drafting. Sibling platforms get their own run.
|
|
23
|
-
|
|
24
|
-
### x
|
|
25
|
-
|
|
26
|
-
- (fill)
|
|
27
|
-
|
|
28
|
-
### linkedin
|
|
29
|
-
|
|
30
|
-
- (fill)
|
|
31
|
-
|
|
32
|
-
### ig
|
|
33
|
-
|
|
34
|
-
- (fill)
|
|
35
|
-
|
|
36
|
-
### tiktok
|
|
37
|
-
|
|
38
|
-
- (fill)
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
# Boundaries — profile `default`
|
|
2
|
-
|
|
3
|
-
**Role:** Topics, audiences, and claims this creator will not write.
|
|
4
|
-
**Not:** Audience “Not for” (`./audience.md`) — that excludes readers.
|
|
5
|
-
|
|
6
|
-
Missing this file is a **hard-gate fail**. Write this starter, then interview. Never invent boundaries.
|
|
7
|
-
|
|
8
|
-
## Not covering
|
|
9
|
-
|
|
10
|
-
- (fill)
|
|
11
|
-
|
|
12
|
-
## Never claim
|
|
13
|
-
|
|
14
|
-
- (fill)
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
# Expression — profile `default`
|
|
2
|
-
|
|
3
|
-
**Role:** Concrete likes and dislikes (phrases, structures, clichés).
|
|
4
|
-
**Not:** Hype bans (`./voice.md` Do not say).
|
|
5
|
-
|
|
6
|
-
Missing this file = `profile: partial`, not a hard-gate fail.
|
|
7
|
-
|
|
8
|
-
## Likes
|
|
9
|
-
|
|
10
|
-
1. (fill)
|
|
11
|
-
2. (fill)
|
|
12
|
-
3. (fill)
|
|
13
|
-
|
|
14
|
-
## Dislikes
|
|
15
|
-
|
|
16
|
-
1. (fill)
|
|
17
|
-
2. (fill)
|
|
18
|
-
3. (fill)
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
# Handles — profile `default`
|
|
2
|
-
|
|
3
|
-
**Role:** Small ally / foil / competitor list (≤8). Not a topic radar. Demand language → `./keywords.md`.
|
|
4
|
-
|
|
5
|
-
| # | platform | handle | niche_tag | why_on_list | weight | status |
|
|
6
|
-
|---|----------|--------|-----------|-------------|--------|--------|
|
|
7
|
-
|
|
8
|
-
Zero starter rows. Add only with a concrete ally/foil/competitor reason.
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
# Keywords — profile `default`
|
|
2
|
-
|
|
3
|
-
**Role:** Three-track recipes — **listen** (social), **search** (SEO), **ask** (GEO). Not topics.
|
|
4
|
-
|
|
5
|
-
| track | Means | Default use |
|
|
6
|
-
|-------|--------|-------------|
|
|
7
|
-
| `listen` | Social search strings | 「扫关键词」→ Hits |
|
|
8
|
-
| `search` | Google/SEO phrases | Content map; volume optional; not default social scan |
|
|
9
|
-
| `ask` | 15–25 word AI-engine questions | GEO coverage; not social scan |
|
|
10
|
-
|
|
11
|
-
**Scan rule:** 「扫关键词」→ `track=listen` + `active` only → Hits. Never scan → Topic.
|
|
12
|
-
|
|
13
|
-
| id | track | query | platform | intent | layer | pillar | why | weight | status | seed_from | pair_id | volume | kd | serp_intent | volume_source | volume_at | ask_engines | last_scanned |
|
|
14
|
-
|----|-------|-------|----------|--------|-------|--------|-----|--------|--------|-----------|---------|--------|----|-------------|---------------|-----------|-------------|--------------|
|
|
15
|
-
| K-01 | listen | (fill audience pain phrase) | x | pain | L1 | P1 | (why) | 1.0 | paused | manual | | | | | | | | |
|
|
16
|
-
|
|
17
|
-
Replace fill rows after interview / first needs. Prefer 8–12 active **listen** seeds before routine scans.
|
|
18
|
-
|
|
19
|
-
## Column notes
|
|
20
|
-
|
|
21
|
-
| Column | Meaning |
|
|
22
|
-
|--------|---------|
|
|
23
|
-
| `track` | `listen` \| `search` \| `ask` |
|
|
24
|
-
| `seed_from` | `need:N-…` / `hit:H-…` / `audience` / `pillar:P…` / `manual` |
|
|
25
|
-
| `volume` / `kd` | search annotations; empty OK |
|
|
26
|
-
|
|
27
|
-
## Agent rules
|
|
28
|
-
|
|
29
|
-
- Default scan: listen + active only; max 5
|
|
30
|
-
- Propose new rows in chat; write after confirm
|
|
31
|
-
- Do not invent Need quotes from keywords
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
# Content lanes
|
|
2
|
-
|
|
3
|
-
Lanes describe how this profile publishes, not what the profile is about.
|
|
4
|
-
Pillars remain the durable subjects.
|
|
5
|
-
|
|
6
|
-
| id | name | purpose | status |
|
|
7
|
-
|----|------|---------|--------|
|
|
8
|
-
| teach | Teaching | Explain systems, mechanisms and workflows | active |
|
|
9
|
-
| build | Building in public | Share implementation decisions and lessons | active |
|
|
10
|
-
| review | Tool review | Review third-party AI products with evidence | active |
|
|
11
|
-
| compare | Tool comparison | Compare options by a stated user job | active |
|
|
12
|
-
| offer | Product education | Explain owned product mechanisms and limits | active |
|