@lifeaitools/rdc-skills 0.25.4 → 0.25.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.
Files changed (71) hide show
  1. package/.claude-plugin/plugin.json +1574 -1528
  2. package/.github/workflows/self-test.yml +34 -34
  3. package/CHANGELOG.md +326 -313
  4. package/MANIFEST.md +224 -224
  5. package/README.md +372 -369
  6. package/RELEASE.md +26 -2
  7. package/commands/build.md +181 -181
  8. package/commands/collab.md +180 -180
  9. package/commands/deploy.md +148 -148
  10. package/commands/fixit.md +150 -150
  11. package/commands/handoff.md +173 -173
  12. package/commands/overnight.md +220 -220
  13. package/commands/plan.md +158 -158
  14. package/commands/preplan.md +131 -131
  15. package/commands/prototype.md +145 -145
  16. package/commands/report.md +99 -99
  17. package/commands/review.md +120 -120
  18. package/commands/status.md +86 -86
  19. package/commands/workitems.md +127 -127
  20. package/git-sha.json +1 -1
  21. package/guides/agent-bootstrap.md +195 -195
  22. package/guides/agents/backend.md +102 -102
  23. package/guides/agents/content.md +94 -94
  24. package/guides/agents/cs2.md +56 -56
  25. package/guides/agents/data.md +86 -86
  26. package/guides/agents/design.md +77 -77
  27. package/guides/agents/frontend.md +91 -91
  28. package/guides/agents/infrastructure.md +81 -81
  29. package/guides/agents/setup.md +272 -272
  30. package/guides/agents/verify.md +119 -119
  31. package/guides/agents/viz.md +106 -106
  32. package/hooks/check-rdc-environment.js +318 -164
  33. package/hooks/lib/box-lock.js +186 -0
  34. package/package.json +1 -1
  35. package/scripts/install-rdc-skills.js +1474 -1400
  36. package/scripts/local-install-with-stop.sh +41 -0
  37. package/scripts/probe-box-lock.mjs +179 -0
  38. package/scripts/probe-installed-hooks.mjs +60 -0
  39. package/scripts/probe-lock-holders.mjs +36 -0
  40. package/scripts/self-test.mjs +1459 -1459
  41. package/scripts/validate-publish-manifests.js +502 -502
  42. package/skills/build/SKILL.md +578 -578
  43. package/skills/channel-formatter/SKILL.md +538 -538
  44. package/skills/collab/SKILL.md +239 -239
  45. package/skills/convert/SKILL.md +150 -161
  46. package/skills/deploy/SKILL.md +541 -541
  47. package/skills/design/SKILL.md +205 -205
  48. package/skills/env/SKILL.md +139 -139
  49. package/skills/fixit/SKILL.md +203 -203
  50. package/skills/handoff/SKILL.md +236 -236
  51. package/skills/housekeeping/SKILL.md +189 -189
  52. package/skills/new-model/SKILL.md +14 -3
  53. package/skills/onramp/SKILL.md +1459 -1459
  54. package/skills/overnight/SKILL.md +251 -251
  55. package/skills/plan/SKILL.md +345 -345
  56. package/skills/preplan/SKILL.md +90 -90
  57. package/skills/prototype/SKILL.md +150 -150
  58. package/skills/regen-media/SKILL.md +94 -94
  59. package/skills/release/SKILL.md +140 -140
  60. package/skills/report/SKILL.md +100 -100
  61. package/skills/review/SKILL.md +151 -151
  62. package/skills/self-test/SKILL.md +108 -108
  63. package/skills/status/SKILL.md +99 -99
  64. package/skills/tests/MATRIX.md +55 -55
  65. package/skills/tests/onramp.test.json +87 -87
  66. package/skills/tests/rdc-regen-media.test.json +29 -29
  67. package/skills/watch/SKILL.md +84 -84
  68. package/skills/workitems/SKILL.md +151 -151
  69. package/tests/curl-surface.test.mjs +4 -2
  70. package/tests/help-surface.test.mjs +1 -1
  71. package/tests/install-rdc-skills.test.mjs +1 -1
@@ -1,538 +1,538 @@
1
- ---
2
- name: rdc:channel-formatter
3
- description: "Usage `rdc:channel-formatter <channel|pack> [content]` — Apply precise, channel-native formatting and content repurposing to any output: LinkedIn, Twitter/X, Slack/Teams, Email (external/internal), Pitch Deck slides, Word/DOCX, PDF Report, Web/Landing Page, and multi-output content packs. Use EVERY TIME the user names an output channel/platform/document type, asks to 'write a post', 'draft an email', 'format this for', 'make this a slide', 'send to LinkedIn', 'write a tweet', 'social media post', 'turn this article into posts', 'make a content pack', 'make a social pack', or 'repurpose this article'. Each channel has its own Unicode strategy, emphasis system, length limits, and structure — never apply generic markdown to channel-specific output. This skill FORMATS, STRUCTURES, and REPURPOSES text only — for actual .docx/.pptx ↔ Markdown FILE conversion (either direction) use `rdc:convert` (build-corpus), not this skill. Self-contained: all channel and pack rules are inlined below (no external reference files)."
4
- ---
5
-
6
- > **⚠️ OUTPUT CONTRACT (READ FIRST):** `guides/output-contract.md`
7
- > The formatted deliverable IS the output. Produce the channel-correct text directly.
8
- > No tool-call narration, no raw markdown wrappers around channel output, no log dumps.
9
-
10
- > If dispatching subagents or running as a subagent: read `{PROJECT_ROOT}/.rdc/guides/agent-bootstrap.md` first.
11
-
12
- > **Sandbox contract:** This skill honors `RDC_TEST=1` per `guides/agent-bootstrap.md` § RDC_TEST Sandbox Contract. It writes no files and makes no external calls; under `RDC_TEST=1` behavior is unchanged (pure text transform).
13
-
14
- # Channel Formatter
15
-
16
- Format or repurpose output precisely for the target channel. This skill is
17
- **self-contained** — every channel and pack rule is inlined below. Detect the
18
- channel or pack, jump to its section, apply its rules exactly. Never apply
19
- generic markdown to a channel that doesn't render it.
20
-
21
- ---
22
-
23
- ## When to Use
24
-
25
- Use this skill whenever the user asks to write, format, adapt, or repurpose
26
- content for a specific channel, platform, document type, or output pack.
27
-
28
- Common triggers:
29
- - "write a LinkedIn post"
30
- - "turn this article into social posts"
31
- - "make a content pack"
32
- - "make a social pack"
33
- - "repurpose this article"
34
- - "write a tweet/thread"
35
- - "draft an email"
36
- - "format this for Slack"
37
- - "make this a slide"
38
- - "write landing-page copy"
39
-
40
- Do not use this skill for binary file conversion, PDF rendering, Brochurify
41
- orchestration, or brochure JSX authoring; delegate those to the specialist
42
- skills named in the scope boundary.
43
-
44
- ## Arguments
45
-
46
- `rdc:channel-formatter <channel|pack> [content]`
47
-
48
- - `<channel|pack>`: optional target such as `linkedin`, `twitter`,
49
- `twitter-thread`, `slack`, `email-ext`, `email-int`, `pitch-deck`, `word`,
50
- `pdf-report`, `web`, `strict-format`, `social-pack`, `campaign-pack`,
51
- `exec-pack`, or `launch-pack`.
52
- - `[content]`: optional source text, path reference, article, report, transcript,
53
- rough draft, or surrounding conversation content.
54
-
55
- ## Channel Detection
56
-
57
- | If user says / context is... | Channel | Go to section |
58
- |-------------------------------------------------------|------------------|--------------------------|
59
- | LinkedIn, post, share on LinkedIn | LinkedIn | [§ LinkedIn](#-linkedin) |
60
- | Tweet, Twitter, X post, thread | Twitter/X | [§ Twitter / X](#-twitter--x) |
61
- | Slack, Teams, Discord, chat message | Slack/Teams | [§ Slack / Teams](#-slack--teams) |
62
- | Email to client/investor/external, cold outreach | Email (External) | [§ Email — External](#-email--external) |
63
- | Email to team, internal, Slack alternative | Email (Internal) | [§ Email — Internal](#-email--internal) |
64
- | Pitch deck, slide, investor slide, one-pager slide | Pitch Deck | [§ Pitch Deck](#-pitch-deck) |
65
- | Word, DOCX, document, report, memo, letter, contract | Word/DOCX | [§ Word / DOCX](#-word--docx) |
66
- | PDF report, annual report, white paper | PDF Report | [§ PDF Report](#-pdf-report) |
67
- | Website, landing page, web copy | Web/Landing Page | [§ Web / Landing Page](#-web--landing-page) |
68
- | Artifact, JSX, React component, Claude artifact | Artifact/JSX | → use the `jsx-author` / `impeccable` skill instead |
69
-
70
- ### Pack Detection
71
-
72
- | If user says / context is... | Mode | Go to section |
73
- |-------------------------------------------------------|------------------|-------------------------------|
74
- | social pack, content pack, posts from this, repurpose this article for social | `social-pack` | [§ Content Repurposing Packs](#-content-repurposing-packs) |
75
- | campaign pack, launch campaign, article into email + social + web | `campaign-pack` | [§ Content Repurposing Packs](#-content-repurposing-packs) |
76
- | exec pack, executive pack, leadership summary, internal briefing | `exec-pack` | [§ Content Repurposing Packs](#-content-repurposing-packs) |
77
- | launch pack, announce this, launch posts | `launch-pack` | [§ Content Repurposing Packs](#-content-repurposing-packs) |
78
- | strict format, preserve wording, do not rewrite | `strict-format` | [§ Repurposing Modes](#-repurposing-modes) |
79
-
80
- ---
81
-
82
- ## Workflow
83
-
84
- 1. **Detect channel or pack mode** from the request using the tables above.
85
- 2. **Classify the source**: already-drafted copy, long article/report, transcript, notes, or brief.
86
- 3. **For thin or under-specified long sources**, enrich before writing instead
87
- of inventing context:
88
- - If the source names a corpus path, read it.
89
- - Otherwise search/read the approved corpus first when available. Resolve
90
- `CORPUS_ROOT` (usually `H:/My Drive/global-corpus`) and
91
- `LOCAL_CORPUS_ROOT` (usually `C:/Dev/local-corpus`) before searching the
92
- repo. If environment variables are not visible, try those default paths.
93
- - The corpus search must use an explicit corpus path in the tool arguments
94
- (`H:/My Drive/global-corpus` or `C:/Dev/local-corpus`). A relative repo
95
- search does not count as enrichment.
96
- - Use `Grep`/`Glob`/`Read` or the environment's equivalent tools so the
97
- transcript records what was consulted.
98
- - Use web search only when the requested output needs current/public facts,
99
- the user asks for external context, or corpus context is absent and network
100
- search is allowed. Cite/use only what the search actually supports.
101
- - Searching only the project repo is not enough for enrichment unless the
102
- source itself points to a repo-local corpus file.
103
- - If neither corpus nor web context is available, keep the output sparse and
104
- mark missing context in assumptions; do not fill gaps creatively.
105
- 4. **For long sources**, extract thesis, audience, proof points, CTA, constraints, and factual risks before writing.
106
- 5. **Jump to the target channel or pack section** below and apply all rules exactly — do not rely on memory.
107
- 6. **Never mix** markdown conventions across channels.
108
- 7. If the channel or pack is ambiguous, ask once: "Is this for [Channel A] or [Channel B]?"
109
- 8. Produce the formatted or repurposed output directly as the deliverable.
110
- 9. Treat extraction notes and source-fidelity guardrails as internal scratchwork.
111
- Do not print a "Long-Source Extraction Checklist", factual guardrail list, or
112
- absent-topic list unless the user explicitly asks for analysis.
113
-
114
- ## Hard Rules (all channels)
115
-
116
- - Never apply generic markdown (`##`, `**`, `-`, etc.) to LinkedIn, Email, Slack, or Twitter output.
117
- - Never use raw LaTeX in LinkedIn, Email, Slack, or Twitter — use Unicode math symbols.
118
- - Never use Word Styles notation in plain-text channels.
119
- - Always match the tone register of the channel (formal ≠ casual ≠ punchy).
120
- - For LIFEAI/PRT/RDC content, maintain REGEN-MODE voice unless Author-Mode is active.
121
- - When repurposing a long source, preserve the source thesis and never invent unsupported statistics, quotes, names, dates, citations, results, or commitments.
122
- - If the source lacks a needed CTA, audience, proof point, or date, either use a clearly generic placeholder or state the assumption before the polished output.
123
-
124
- > ## ⛔ Scope boundary — this skill FORMATS text; it does NOT convert files
125
- > This skill governs **how to structure and format content** for a channel. It never
126
- > reads or writes binary office files. For the actual **Word ↔ Markdown (and .pptx/.ppt)
127
- > file conversion — in either direction — use `build-corpus` / the `rdc:convert` skill**,
128
- > never this one. So: "convert this .docx to markdown" / "turn this markdown into a Word
129
- > doc" → **`rdc:convert`**. "format this content the Word way / write it for LinkedIn" →
130
- > this skill. The Word/DOCX and PDF sections below describe target structure only; producing
131
- > the actual `.docx`/`.pdf` artifact is `rdc:convert` / `rdc:brochure`, not channel-formatter.
132
- >
133
- > **Work in Markdown, materialize at the end.** Draft and format everything as Markdown
134
- > ("MD time" — cheap tokens, clean diffs); only hand off to `rdc:convert` to emit the
135
- > `.docx`/`.pptx` as the last step. build-corpus round-trips losslessly, so this costs
136
- > no fidelity. See the build-corpus agent primer (`AGENTS.md`).
137
- >
138
- > Specialist routing:
139
- > - Office/Markdown file conversion → `rdc:convert`
140
- > - HTML/folder/zip/URL to PDF brochure rendering → `rdc:brochure`
141
- > - Brochurify orchestration jobs → `rdc:brochurify`
142
- > - Brochure JSX using `@lifeai/brochure-kit` → `lifeai-brochure-author`
143
-
144
- ---
145
-
146
- ## § Repurposing Modes
147
-
148
- Use these modes when the input is longer than the requested output, such as an
149
- article, memo, transcript, report, rough draft, or notes.
150
-
151
- ### `strict-format`
152
- Preserve the source wording and argument as much as the channel allows. Use this
153
- when the user says "format only", "do not rewrite", "preserve wording", or when
154
- legal/compliance precision matters. You may adjust line breaks, headings,
155
- emphasis, bullet symbols, and channel-specific structure, but do not add new
156
- claims or reframe the argument.
157
-
158
- ### `single-channel`
159
- Repurpose the source into one target channel. Extract the usable argument,
160
- choose the strongest hook for that channel, compress or expand to the channel's
161
- native length, and produce one finished output.
162
-
163
- ### `social-pack`
164
- Repurpose one source into a coordinated set of social outputs:
165
- - LinkedIn thought-leadership post
166
- - Short LinkedIn announcement or teaser variant
167
- - Twitter/X single post
168
- - Twitter/X thread
169
- - Slack/Teams internal share
170
-
171
- ### `campaign-pack`
172
- Repurpose one source into a small campaign kit:
173
- - Everything in `social-pack`
174
- - External email intro/blurb
175
- - Web excerpt
176
- - SEO meta title and meta description
177
- - 3 CTA variants
178
-
179
- ### `exec-pack`
180
- Repurpose one source for internal leadership alignment:
181
- - Internal email summary
182
- - Slack/Teams update
183
- - Executive-summary paragraph
184
- - 3 talking points
185
- - Decision/ask line if the source supports one
186
-
187
- ### `launch-pack`
188
- Repurpose one source for an announcement:
189
- - LinkedIn launch post
190
- - Twitter/X launch post
191
- - Slack/Teams launch note
192
- - External email blurb
193
- - Web hero headline/subheadline/CTA
194
- - 3 CTA variants
195
-
196
- ### Long-Source Extraction Checklist
197
- Before writing from a long source, identify internally:
198
- - **Thesis:** the central argument or announcement
199
- - **Audience:** who this is for
200
- - **Proof:** facts, examples, data, names, dates, or quotes explicitly present
201
- - **CTA:** what the reader should do next
202
- - **Tone:** formal, conversational, punchy, executive, regenerative, etc.
203
- - **Constraints:** length, compliance, brand voice, channel quirks
204
- - **Gaps:** missing proof, missing CTA, unsupported claims, unclear audience
205
-
206
- ### Source-Fidelity Rules
207
- - Do not invent statistics, dates, quotes, citations, partnerships, revenue,
208
- legal claims, customer names, or outcomes.
209
- - Do not infer adjacent finance/reporting concepts that sound plausible but are
210
- absent from the source, such as pro forma assumptions, reporting cadence,
211
- offset mechanisms, governance structures, verification status, or portfolio
212
- implications.
213
- - If corpus or web context was consulted, use it only for facts it directly
214
- supports. Do not blend generic domain knowledge into the source as if it were
215
- documented.
216
- - If the source provides a theme label without an explanation, keep the theme
217
- label or paraphrase it conservatively. Do not add explanatory clauses that
218
- define how it works, who governs it, how it is verified, how often it reports,
219
- or what financial model it opposes unless those details are explicit.
220
- - Do not contrast patient capital with quarters, earnings calls, fund cycles,
221
- exits, venture speed, or portfolio management unless those words or concepts
222
- appear in the source or consulted corpus/web material.
223
- - Do not upgrade tentative language into certainty.
224
- - Do not turn illustrative examples into facts.
225
- - Preserve caveats when they affect meaning.
226
- - If a stronger hook needs a proof point the source does not provide, write a
227
- proof-neutral hook instead.
228
- - If the source says a topic is absent, excluded, or not mentioned, treat that
229
- as an internal guardrail. Do not repeat the absent topic in public-facing
230
- channel copy, assumptions, caveats, notes, headings, or summaries unless the
231
- user explicitly asks for a contrast, compliance note, or risk disclosure.
232
- Strip absent-topic lists from the deliverable entirely.
233
- - When assumptions are material, include a short "Assumptions:" line before the
234
- deliverable rather than burying uncertainty in polished copy.
235
- - Do not output your extraction checklist. The deliverable should start with the
236
- requested channel/pack output, except for a brief "Assumptions:" line when a
237
- material gap affects the copy.
238
- - If you include an "Assumptions:" line, limit it to missing useful inputs such
239
- as org name, audience, location, date, CTA, or link. Never list absent,
240
- excluded, or not-mentioned topics in the assumptions line. If the only
241
- uncertainty is an absent-topic guardrail, omit the assumptions line.
242
-
243
- ---
244
-
245
- ## § Content Repurposing Packs
246
-
247
- When a pack is requested, label each output clearly and make every item
248
- channel-native. A pack is not a generic summary repeated in several lengths.
249
-
250
- ### `social-pack` Output Shape
251
- 1. `LinkedIn thought-leadership post` — 900-1300 characters, hook-first, white space, Unicode emphasis only when useful, up to 3 hashtags.
252
- 2. `LinkedIn short variant` — 400-700 characters, announcement or teaser style.
253
- 3. `Twitter/X single post` — 265 characters or fewer unless the user asks otherwise.
254
- 4. `Twitter/X thread` — 5-7 tweets, each self-contained and below 280 characters.
255
- 5. `Slack/Teams internal share` — 3-6 lines, direct, with a clear FYI/action/decision framing.
256
-
257
- ### `campaign-pack` Output Shape
258
- 1. Full `social-pack`
259
- 2. `External email intro` — subject line plus 80-150 word blurb with one ask
260
- 3. `Web excerpt` — 80-120 words, scannable, CTA-ready
261
- 4. `Meta title` — 50-60 characters
262
- 5. `Meta description` — 150-160 characters
263
- 6. `CTA variants` — 3 verb-led CTAs
264
-
265
- ### `exec-pack` Output Shape
266
- 1. `Internal email summary` — subject plus 6-12 lines
267
- 2. `Slack/Teams update` — 3-5 lines
268
- 3. `Executive summary paragraph` — 100-150 words
269
- 4. `Talking points` — 3 concise bullets/fragments
270
- 5. `Decision or ask` — one line, only if supported by source
271
-
272
- ### `launch-pack` Output Shape
273
- 1. `LinkedIn launch post` — announcement structure
274
- 2. `Twitter/X launch post` — single post
275
- 3. `Slack/Teams launch note` — internal update
276
- 4. `External email blurb` — subject plus short body
277
- 5. `Web hero` — headline, subheadline, CTA
278
- 6. `CTA variants` — 3 options
279
-
280
- ### Pack Quality Rules
281
- - Vary hooks by channel; do not repeat the same first sentence everywhere.
282
- - Keep the source thesis consistent across all outputs.
283
- - Adapt CTA strength to the channel: softer on thought leadership, direct in
284
- email/web, concise in Slack.
285
- - Use channel-specific formatting rules from the sections below.
286
- - If source proof is weak, use curiosity and framing instead of inflated claims.
287
- - Do not include extraction notes, guardrail notes, or absent-topic caveats in
288
- the pack. Those are reasoning aids, not channel outputs.
289
-
290
- ---
291
-
292
- ## § LinkedIn
293
-
294
- ### Core Principles
295
- - No markdown whatsoever — LinkedIn renders it as raw symbols.
296
- - Unicode is the ONLY way to achieve bold, italic, and special emphasis.
297
- - Emoticons are structural tools, not decoration — use them as bullet replacements and section markers.
298
- - Hook in line 1 — LinkedIn truncates after ~2 lines before "see more".
299
- - White space is content — single-line breaks create rhythm and readability.
300
-
301
- ### Unicode Character Sets
302
- **Bold (Mathematical Bold)** — key terms, company names, headlines, CTAs:
303
- ```
304
- 𝗔𝗕𝗖𝗗𝗘𝗙𝗚𝗛𝗜𝗝𝗞𝗟𝗠𝗡𝗢𝗣𝗤𝗥𝗦𝗧𝗨𝗩𝗪𝗫𝗬𝗭
305
- 𝗮𝗯𝗰𝗱𝗲𝗳𝗴𝗵𝗶𝗷𝗸𝗹𝗺𝗻𝗼𝗽𝗾𝗿𝘀𝘁𝘂𝘃𝘄𝘅𝘆𝘇
306
- 𝟬𝟭𝟮𝟯𝟰𝟱𝟲𝟳𝟴𝟵
307
- ```
308
- **Italic (Mathematical Italic)** — emphasis, quotes, sub-themes:
309
- ```
310
- 𝘈𝘉𝘊𝘋𝘌𝘍𝘎𝘏𝘐𝘑𝘒𝘓𝘔𝘕𝘖𝘗𝘘𝘙𝘚𝘛𝘜𝘝𝘞𝘟𝘠𝘡
311
- 𝘢𝘣𝘤𝘥𝘦𝘧𝘨𝘩𝘪𝘫𝘬𝘭𝘮𝘯𝘰𝘱𝘲𝘳𝘴𝘵𝘶𝘷𝘸𝘹𝘺𝘻
312
- ```
313
- **Bold Italic:**
314
- ```
315
- 𝘼𝘽𝘾𝘿𝙀𝙁𝙂𝙃𝙄𝙅𝙆𝙇𝙈𝙉𝙊𝙋𝙌𝙍𝙎𝙏𝙐𝙑𝙒𝙓𝙔𝙕
316
- 𝙖𝙗𝙘𝙙𝙚𝙛𝙜𝙝𝙞𝙟𝙠𝙡𝙢𝙣𝙤𝙥𝙦𝙧𝙨𝙩𝙪𝙫𝙬𝙭𝙮𝙯
317
- ```
318
- **Math / Equations** — Unicode symbols, never LaTeX: `× ÷ ± ≠ ≤ ≥ ≈ ∴ ∵ Σ Δ α β ∞ √ ² CO₂ H₂O → ← ⟺ % °`
319
- Example: instead of `E = mc^2` write `E = mc²`; instead of `\alpha_{PRT}` write `αPRT`.
320
-
321
- ### Emoticons as Structure
322
- Section openers / bullets: 🔹 primary · 🔸 secondary · ▸ tertiary · ✅ result · ❌ contrast · ⚡ urgency · 🌱 regenerative (LIFEAI/PRT) · 💡 insight · 📌 takeaway · 🔑 key · 📊 data · 🏗️ development · 🤝 partnership · 💰 capital · 🌍 planetary.
323
- Dividers: `——————————————` · `▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬` · `· · · · · · · · · · · · · ·`
324
-
325
- ### Post Structure
326
- **Standard (thought leadership):** hook line (no period, open loop) → blank → 3-6 short paragraphs (1-3 lines), emoticons as bullets → blank → insight/contrast line → blank → CTA (question/invitation) → blank → up to 3 hashtags.
327
- **Announcement:** bold Unicode headline → what it is (2 sentences) → 🔹×3 key points → why it matters → CTA/link → 1-2 tags.
328
- **Regenerative / LIFEAI (Dave voice):** manifesto opener (one line) → blank → problem with the old way (2-3 lines) → blank → 🌱 what we're building / how it differs / who it serves → blank → the stakes (one line) → blank → direct personal invitation → blank → `𝗗𝗮𝘃𝗲 𝗟𝗮𝗱𝗼𝘂𝗰𝗲𝘂𝗿 | LIFEAI | 𝘓𝘪𝘧𝘦 𝘣𝘦𝘧𝘰𝘳𝘦 𝘗𝘳𝘰𝘧𝘪𝘵𝘴` → `#RegenerativeCapital #PlaceRegeneration #LIFEAI`.
329
-
330
- ### Length
331
- Thought leadership 900–1300 chars · Announcement 400–700 · Hot take 200–400 · Long-form native 1200–2000 words.
332
-
333
- ### Do NOT
334
- ❌ `**bold**` (literal asterisks) · ❌ `# Heading` (literal hash) · ❌ `-`/`•` bullets (use emoticons) · ❌ LaTeX · ❌ >5 hashtags · ❌ tagging people unless asked · ❌ walls of text (max 3 lines/paragraph).
335
-
336
- ---
337
-
338
- ## § Twitter / X
339
-
340
- ### Core Principles
341
- - 280 characters hard limit per tweet. Hook is everything — first 5 words decide readership.
342
- - Threads are for depth; single tweets for punchy takes. No markdown renders — plain text only.
343
- - Minimal hashtags (1-2 max, only if genuinely searchable). End with a provocation/question when possible.
344
-
345
- ### Character Counting
346
- - URLs always count as 23 chars (t.co). Media doesn't count. Line breaks = 1 char each. Leave a 10-15 char buffer — aim for 265 max.
347
-
348
- ### Single Tweet Structure
349
- **Hot take:** provocative opener (≤10 words) → the turn/evidence (1-2 lines) → the landing.
350
- **Announcement:** bold claim first → why it matters (1 line) → link/CTA.
351
- **Regenerative (Dave):** manifesto line → old way vs new way → the invitation.
352
-
353
- ### Thread Structure
354
- Tweet 1 = strongest hook (number `(1/7)` or use 🧵) → tweet 2 = context → tweets 3-n = one idea each → last tweet = recap + CTA/question. Each tweet must stand alone. Max 7-10 tweets — longer = blog post.
355
-
356
- ### Hook Formulas
357
- Contrarian ("Most investors are wrong about regenerative land.") · Hard number ("We just unlocked $40M in stranded rural capital.") · Open loop ("Something broke in ESG investing. Here's what it missed:") · Bold declaration · Question · List tease ("3 things institutional capital gets wrong about place:").
358
-
359
- ### Hashtags & Emoji
360
- Max 2 hashtags, end of tweet only, active communities only. Preferred LIFEAI tags: `#RegenerativeCapital #PlaceRegeneration #ImpactInvesting #RegenFinance`. Emoji 1-2 max as punctuation: 🌱 regen · 💰 capital · 🏗️ development · ⚡ urgency.
361
-
362
- ### Do NOT
363
- ❌ markdown · ❌ hashtag spam · ❌ "RT if you agree" · ❌ threads >10 tweets · ❌ passive openers ("I wanted to share…") · ❌ tagging without reason · ❌ ever exceed 280 chars (always count).
364
-
365
- ---
366
-
367
- ## § Slack / Teams
368
-
369
- ### Core Principles
370
- - Brevity is respect (people read on their phone). One message = one thought. Use threads. Emoji are punctuation, not decoration.
371
-
372
- ### Slack Markdown (actually renders)
373
- Bold `*bold*` · Italic `_italic_` · Strikethrough `~strike~` · Inline code `` `code` `` · Code block ```` ``` ```` · Blockquote `> text` · Bullets `• item`.
374
- Note: `**bold**` (double asterisk) does NOT render in Slack — use single `*bold*`.
375
-
376
- ### Length
377
- Quick question 1-2 lines · Status update 3-5 lines (bullets if 3+ items) · Decision request 5-8 lines · anything longer → thread or doc link.
378
-
379
- ### Structure by Type
380
- **Question:** `Quick question on [topic] — [one-sentence question]?`
381
- **Status update:** `*[Project]* update:` then `• Done: …` `• In progress: …` `• Blocked on: … — need [thing] from [person]`.
382
- **Decision needed:** `Need a call on [topic] by [time].` → `Context: …` → `Options: A) … B) …` → `My lean: …` → `[@person] — your call.`
383
- **Async FYI:** `FYI: [what happened] — no action needed. [link]`
384
-
385
- ### Emoji as Punctuation
386
- ✅ done/approved · ❌ no/blocked · 🔁 in progress · 👀 reviewing · 🙋 I'll take it · 📌 important · ⚡ urgent · 🤔 needs discussion · 💬 let's talk · 🔗 link follows.
387
-
388
- ### Do NOT
389
- ❌ walls of text (use a doc) · ❌ `**double asterisk bold**` · ❌ formal greetings ("Hi team, I hope everyone…") · ❌ passive asks ("Would anyone be able to…" → "Can you [name]…") · ❌ emoji overload (max 2-3) · ❌ cross-posting the same message.
390
-
391
- ---
392
-
393
- ## § Email — External
394
-
395
- ### Core Principles
396
- - Plain prose, no markdown. Subject line determines open rate. First sentence justifies the email. One ask per email. Short paragraphs (2-4 sentences). Formal but human.
397
-
398
- ### Structure
399
- `Subject:` → greeting (`Dear [First Name],`) → opening (1 sentence: context/connection) → body (¶1 reason, ¶2 value/evidence, ¶3 the one ask) → forward-looking closing line → sign-off, full name, title, org, 2-3 contact lines.
400
-
401
- ### Subject Lines
402
- 6-10 words; personalize. Cold: `[hook] — [value]` ("Regenerative capital for [Property]"). Follow-up: `Following up — [topic]`. Intro: `Introduction: [name] — [relevance]`. Request: `[Action] request — [context]`. Never use "Quick question" / "Checking in" / "Hope you're well" as a subject; never all caps.
403
-
404
- ### Tone by Recipient
405
- Institutional/Family Office → formal, precise, lead with thesis + data · Foundation → warm, lead with impact · Government → neutral, process-oriented · Legal → exact, every claim qualified · Peer → professional, warmer · Media → newsworthy first.
406
-
407
- ### Openers (use/adapt)
408
- "I'm reaching out because [specific reason tied to them]." · "We met at [event] — following up on [topic]." · "[Mutual contact] suggested I reach out regarding [topic]." Never open with "I hope this email finds you well." / "My name is X and I work at Y." / "I wanted to reach out to…".
409
-
410
- ### Closings & Sign-offs
411
- "I'd welcome a 20-minute call at your convenience." / "Would you be open to a brief call this week or next?" Sign-offs: Respectfully / Yours sincerely (most formal) · Kind regards / Best regards (standard) · Warm regards (warm) · "In service of place," / "Regeneratively," (LIFEAI/Dave).
412
- LIFEAI signature: `Dave Ladouceur` / `Founder, LIFEAI | Place Regeneration Trust` / `dave@life.ai | lifeai.com` / `Life before Profits.`
413
-
414
- ### Length
415
- Cold outreach 150–250 words · Follow-up 80–150 · Proposal intro 250–400 · Investor update 300–500.
416
-
417
- ### Do NOT
418
- ❌ markdown · ❌ walls of text · ❌ >1 ask · ❌ passive voice on the ask · ❌ sycophantic openers/closers · ❌ unspecified attachments.
419
-
420
- ---
421
-
422
- ## § Email — Internal
423
-
424
- ### Core Principles
425
- - Short, direct, action-oriented. Bullets fine and often preferred. Scannable subject. One topic per email. No pleasantries unless warranted.
426
-
427
- ### Structure
428
- `Subject: [Action word] — [Topic]` (e.g. "Decision needed — Supabase migration") → optional 1-line context → direct body (2-4 short paragraphs or bullets) → clear next step on its own line → casual sign-off (Thanks / Dave / —D).
429
-
430
- ### Subject Prefixes (use consistently)
431
- `ACTION:` recipient must do something · `DECISION:` approval/choice needed · `FYI:` informational · `URGENT:` same-day · `QUESTION:` single question · `UPDATE:` status. Example: `ACTION: Review PRT NAV calc before Friday`.
432
-
433
- ### Bullets & Tone
434
- One idea per bullet, max 1 line, lead with the verb (Review… / Confirm… / Send…), no sub-bullets unless necessary. Direct without blunt; no "per my last email" energy; emoji sparingly.
435
-
436
- ### Length
437
- Quick update 3-6 lines · Task assignment 6-12 · Internal brief ≤12-20 (longer → a doc).
438
-
439
- ### Do NOT
440
- ❌ markdown · ❌ long preambles · ❌ CC-ing everyone · ❌ "as per my previous email" · ❌ formal sign-offs internally.
441
-
442
- ---
443
-
444
- ## § Pitch Deck
445
-
446
- ### Core Principles
447
- - One slide, one job. Headline IS the message (a statement, not a label). 3 bullets max. No prose on slides (sentences → speaker notes). Visual-first language. Investor slides lead with thesis, support with evidence.
448
-
449
- ### Slide Anatomy
450
- Headline (full sentence takeaway, 12-15 words) → visual/data area (chart/diagram/table) → ≤3 bullets (fragments, not sentences) → source/footnote if cited (small, bottom-right).
451
-
452
- ### Headlines Are Assertions, Not Labels
453
- ❌ "Market Opportunity" → ✅ "A $4T regenerative land market with no institutional gateway" · ❌ "Our Solution" → ✅ "PRT converts stranded land assets into regenerative yield" · ❌ "The Team" → ✅ "30 years of place-based development across 3 continents" · ❌ "Financial Returns" → ✅ "8–12% cash yield with embedded ecological appreciation".
454
-
455
- ### Standard Deck Architecture (PRT/LIFEAI)
456
- 1 Cover · 2 The Problem · 3 The Opportunity (market + gap) · 4 Our Solution · 5 How It Works (process diagram) · 6 Traction/Proof · 7 Market/TAM · 8 Business Model · 9 Financial Projections · 10 Capital Structure (A/B/C sleeves) · 11 The Team · 12 The Ask (amount, use of funds, timeline) · 13 Appendix.
457
-
458
- ### Visual & Bullet Style
459
- Describe visuals explicitly, e.g. `[VISUAL: horizontal capital-stack diagram — Lane A Senior Secured $Xm 6% DAF | Lane B Mezz $Xm 9% Family Office | Lane C Equity $Xm carry GP]`. Bullets: fragments, no periods, lead with metric ("8–12% cash yield") or verb ("Converts stranded assets…"), max 8 words.
460
- Speaker notes: full conversational sentences expanding the slide — `[SPEAKER NOTE: …]`.
461
- Typography (for JSX/design): Headline 28-36pt bold · Bullets 18-22pt · Data labels 14-16pt accent · Source 10-11pt gray · Section label 11-12pt caps.
462
-
463
- ### Do NOT
464
- ❌ prose on slides · ❌ >3 bullets · ❌ label headlines · ❌ >2 font sizes in bullet area · ❌ generic stock-photo descriptions · ❌ animations unless requested.
465
-
466
- ---
467
-
468
- ## § Word / DOCX
469
-
470
- > **This section = how to STRUCTURE Word content (Styles, hierarchy, tables).** To
471
- > generate an actual `.docx` file, or convert `.docx ↔ .md`, hand off to **`rdc:convert`
472
- > (build-corpus)** — channel-formatter does not produce or parse binary files.
473
-
474
- ### Core Principles
475
- - All formatting via **Word Styles** (never raw bold alone). Heading hierarchy is semantic (Heading 1/2/3, not font size). Tables use Word Table Styles, not markdown. Equations via Equation Editor (OMML). Explicit page structure (section breaks, headers/footers, page numbers).
476
-
477
- ### Style Hierarchy
478
- `Title` (one, top) · `Subtitle` · `Heading 1/2/3/4` · `Normal` / `Body Text` · `List Bullet` / `List Bullet 2` · `List Number` / `List Number 2` · `Quote`/`Block Text` · `Caption` · `Table Grid` · `Intense Quote` (callouts) · `Header`/`Footer`.
479
-
480
- ### Document Types
481
- **Executive Report/White Paper:** Title + Subtitle → page break → H1 Executive Summary → H1 TOC (auto field) → page break → numbered H1/H2 sections with `Table Grid` tables + captions → H1 References (APA) → H1 Appendices.
482
- **Memo:** Title "MEMORANDUM" → bold-label TO/FROM/DATE/RE → rule → H2 Purpose / Background / Recommendation (List Bullet) → sign-off.
483
- **Investment/Deal Doc (PRT/RDC):** Title + Subtitle "Confidential | Prepared by LIFEAI | Date" → page break → H1 Executive Summary → H1 Investment Thesis (H2 Market Opportunity, H2 Regenerative Framework + Five Capitals `Table Grid`) → H1 Financial Structure (H2 Capital Stack tranche table, H2 NAV Architecture w/ Equation objects) → H1 Risk Framework (risk matrix) → H1 Governance → H1 Appendices.
484
- **Letter (formal):** sender block → date → recipient block → `Dear [Name],` → opening (purpose) → body → closing (next steps) → `Sincerely,` → signature.
485
-
486
- ### Tables, Equations, Page Setup
487
- Tables: `Table Grid`, bold shaded header (`#F2F2F2`), left-align text / right-align numbers, `Caption` below ("Table X: …"). Equations: specify as Equation Editor objects, e.g. `[EQUATION OBJECT: αPRT = (regen_yield − WACC_conventional) + Σ(stewardship_delta)]` with caption. Page setup: Letter/A4, 1" margins, Calibri 11 / Times 12 body, 1.15–1.5 spacing, header (title left, page# right), footer (org left, date right), numbering from page 2.
488
-
489
- ### Do NOT
490
- ❌ manual bold instead of a Style for headings · ❌ tabs/spaces for indentation · ❌ `Shift+Enter` between paragraphs (use spacing) · ❌ markdown tables · ❌ inline LaTeX · ❌ >3 heading levels without justification.
491
-
492
- ---
493
-
494
- ## § PDF Report
495
-
496
- ### Core Principles
497
- - Final, fixed, reader-facing. Structure non-negotiable: executive summary → body → references. All sections numbered; all tables/figures captioned. Formal prose (no bullets as primary structure). Page numbers, headers, footers required.
498
-
499
- ### Structure
500
- Cover (title, type, org+logo, date | version | confidentiality) → Executive Summary (≤1 page: what it is, 3-5 findings, recommendations) → TOC (auto, clickable) → numbered body (1 Introduction/Context · 2-4 core · 5 Conclusions) → References (APA 7th, numbered) → Appendices (A, B, C…).
501
- Section numbering: hierarchical decimal, max 3 levels (1.1.1), never 4.
502
-
503
- ### Tables, Figures, Equations
504
- Tables: title above (`Table X: …`), bold shaded header, `Source:` below if external, `Note:` if needed. Figures: caption below (`Figure X: …`), source, bracketed alt-text. Equations: labeled `(Equation 1)` with a `Where:` variable key.
505
- Typography: Georgia 11 / Garamond 12 body; H1 18 bold, H2 14 bold, H3 12 bold italic; 1.5 body spacing; 1.25" binding margin; page numbers bottom-center from page 2; footer `Org | Confidential | Date`.
506
- Confidentiality labels: `CONFIDENTIAL` · `CONFIDENTIAL — For Recipient Only` · `FOR DISCUSSION PURPOSES ONLY` · `NOT FOR DISTRIBUTION` · (none = public).
507
-
508
- ### Do NOT
509
- ❌ markdown in final content · ❌ unnumbered sections · ❌ tables without titles/sources · ❌ figures without captions · ❌ invented data (mark "Illustrative") · ❌ exec summaries over one page · ❌ incomplete citations.
510
-
511
- ---
512
-
513
- ## § Web / Landing Page
514
-
515
- ### Core Principles
516
- - Scannable first, readable second. Above the fold is everything. One page = one conversion goal. SEO-aware without keyword stuffing. CTA appears at least twice (above fold + bottom). Mobile-first (short paragraphs/sentences).
517
-
518
- ### Page Structure
519
- Hero (H1 value prop 6-10 words · subheadline 1-2 sentences · CTA button verb+object · optional hero media) → Social proof/trust bar → Problem (name the pain, 2-3 short paragraphs or 3 cards) → Solution (the shift; icon + headline + 1-2 sentences feature/benefit pairs) → How It Works (3-4 numbered steps, 1 sentence each) → Proof/Results (large number + short label: "340 acres restored") → CTA section (urgency headline + friction-reducer subtext + button) → Footer.
520
-
521
- ### Headlines & Body
522
- H1 ≤8 words (benefit, not feature, active voice, power words: transform/unlock/regenerate/built/proven) · H2 ≤12 · H3 ≤6. Body: paragraphs ≤3 sentences/50 words, sentences ≤20 words, second person ("you/your"), grade 8-10 reading level.
523
- LIFEAI/PRT examples: H1 "The Capital Stack for Regenerative Land" · H2 "How PRT Turns Stranded Assets Into Living Investments" · H3 "Place Readiness" / "Covenant-Protected Yield" / "Verified Impact".
524
-
525
- ### CTA & SEO
526
- CTA copy: verb + specific object ("Book Your 20-Minute Call", "See the Capital Structure", "Download the Investment Brief") — never "Submit"/"Click here"/"Learn more". SEO: primary keyword in H1 + first paragraph, secondary in H2s/body naturally, meta title 50-60 chars, meta description 150-160 chars, descriptive alt text on all images.
527
-
528
- ### Do NOT
529
- ❌ paragraphs >3 sentences above the fold · ❌ passive-voice CTAs · ❌ jargon without translation · ❌ carousels/sliders above the fold · ❌ >2 CTAs per section · ❌ generic headlines ("Welcome to Our Website") · ❌ markdown in final web copy (deliver clean prose with labeled sections).
530
-
531
- ---
532
-
533
- ## Provenance
534
-
535
- Ported into rdc-skills from the `output-channel-formatter` claude.ai skill (frontend-design-skills pack).
536
- Originally a multi-file skill (SKILL.md + `references/*.md`); inlined into this single self-contained
537
- SKILL.md so it works identically across the CLI plugin, the claude.ai web client (via `rdc_skill_get`),
538
- and Codex — the rdc-skills MCP serves only SKILL.md, so all channel rules must live here.
1
+ ---
2
+ name: rdc:channel-formatter
3
+ description: "Usage `rdc:channel-formatter <channel|pack> [content]` — Apply precise, channel-native formatting and content repurposing to any output: LinkedIn, Twitter/X, Slack/Teams, Email (external/internal), Pitch Deck slides, Word/DOCX, PDF Report, Web/Landing Page, and multi-output content packs. Use EVERY TIME the user names an output channel/platform/document type, asks to 'write a post', 'draft an email', 'format this for', 'make this a slide', 'send to LinkedIn', 'write a tweet', 'social media post', 'turn this article into posts', 'make a content pack', 'make a social pack', or 'repurpose this article'. Each channel has its own Unicode strategy, emphasis system, length limits, and structure — never apply generic markdown to channel-specific output. This skill FORMATS, STRUCTURES, and REPURPOSES text only — for actual .docx/.pptx ↔ Markdown FILE conversion (either direction) use `rdc:convert` (build-corpus), not this skill. Self-contained: all channel and pack rules are inlined below (no external reference files)."
4
+ ---
5
+
6
+ > **⚠️ OUTPUT CONTRACT (READ FIRST):** `guides/output-contract.md`
7
+ > The formatted deliverable IS the output. Produce the channel-correct text directly.
8
+ > No tool-call narration, no raw markdown wrappers around channel output, no log dumps.
9
+
10
+ > If dispatching subagents or running as a subagent: read `{PROJECT_ROOT}/.rdc/guides/agent-bootstrap.md` first.
11
+
12
+ > **Sandbox contract:** This skill honors `RDC_TEST=1` per `guides/agent-bootstrap.md` § RDC_TEST Sandbox Contract. It writes no files and makes no external calls; under `RDC_TEST=1` behavior is unchanged (pure text transform).
13
+
14
+ # Channel Formatter
15
+
16
+ Format or repurpose output precisely for the target channel. This skill is
17
+ **self-contained** — every channel and pack rule is inlined below. Detect the
18
+ channel or pack, jump to its section, apply its rules exactly. Never apply
19
+ generic markdown to a channel that doesn't render it.
20
+
21
+ ---
22
+
23
+ ## When to Use
24
+
25
+ Use this skill whenever the user asks to write, format, adapt, or repurpose
26
+ content for a specific channel, platform, document type, or output pack.
27
+
28
+ Common triggers:
29
+ - "write a LinkedIn post"
30
+ - "turn this article into social posts"
31
+ - "make a content pack"
32
+ - "make a social pack"
33
+ - "repurpose this article"
34
+ - "write a tweet/thread"
35
+ - "draft an email"
36
+ - "format this for Slack"
37
+ - "make this a slide"
38
+ - "write landing-page copy"
39
+
40
+ Do not use this skill for binary file conversion, PDF rendering, Brochurify
41
+ orchestration, or brochure JSX authoring; delegate those to the specialist
42
+ skills named in the scope boundary.
43
+
44
+ ## Arguments
45
+
46
+ `rdc:channel-formatter <channel|pack> [content]`
47
+
48
+ - `<channel|pack>`: optional target such as `linkedin`, `twitter`,
49
+ `twitter-thread`, `slack`, `email-ext`, `email-int`, `pitch-deck`, `word`,
50
+ `pdf-report`, `web`, `strict-format`, `social-pack`, `campaign-pack`,
51
+ `exec-pack`, or `launch-pack`.
52
+ - `[content]`: optional source text, path reference, article, report, transcript,
53
+ rough draft, or surrounding conversation content.
54
+
55
+ ## Channel Detection
56
+
57
+ | If user says / context is... | Channel | Go to section |
58
+ |-------------------------------------------------------|------------------|--------------------------|
59
+ | LinkedIn, post, share on LinkedIn | LinkedIn | [§ LinkedIn](#-linkedin) |
60
+ | Tweet, Twitter, X post, thread | Twitter/X | [§ Twitter / X](#-twitter--x) |
61
+ | Slack, Teams, Discord, chat message | Slack/Teams | [§ Slack / Teams](#-slack--teams) |
62
+ | Email to client/investor/external, cold outreach | Email (External) | [§ Email — External](#-email--external) |
63
+ | Email to team, internal, Slack alternative | Email (Internal) | [§ Email — Internal](#-email--internal) |
64
+ | Pitch deck, slide, investor slide, one-pager slide | Pitch Deck | [§ Pitch Deck](#-pitch-deck) |
65
+ | Word, DOCX, document, report, memo, letter, contract | Word/DOCX | [§ Word / DOCX](#-word--docx) |
66
+ | PDF report, annual report, white paper | PDF Report | [§ PDF Report](#-pdf-report) |
67
+ | Website, landing page, web copy | Web/Landing Page | [§ Web / Landing Page](#-web--landing-page) |
68
+ | Artifact, JSX, React component, Claude artifact | Artifact/JSX | → use the `jsx-author` / `impeccable` skill instead |
69
+
70
+ ### Pack Detection
71
+
72
+ | If user says / context is... | Mode | Go to section |
73
+ |-------------------------------------------------------|------------------|-------------------------------|
74
+ | social pack, content pack, posts from this, repurpose this article for social | `social-pack` | [§ Content Repurposing Packs](#-content-repurposing-packs) |
75
+ | campaign pack, launch campaign, article into email + social + web | `campaign-pack` | [§ Content Repurposing Packs](#-content-repurposing-packs) |
76
+ | exec pack, executive pack, leadership summary, internal briefing | `exec-pack` | [§ Content Repurposing Packs](#-content-repurposing-packs) |
77
+ | launch pack, announce this, launch posts | `launch-pack` | [§ Content Repurposing Packs](#-content-repurposing-packs) |
78
+ | strict format, preserve wording, do not rewrite | `strict-format` | [§ Repurposing Modes](#-repurposing-modes) |
79
+
80
+ ---
81
+
82
+ ## Workflow
83
+
84
+ 1. **Detect channel or pack mode** from the request using the tables above.
85
+ 2. **Classify the source**: already-drafted copy, long article/report, transcript, notes, or brief.
86
+ 3. **For thin or under-specified long sources**, enrich before writing instead
87
+ of inventing context:
88
+ - If the source names a corpus path, read it.
89
+ - Otherwise search/read the approved corpus first when available. Resolve
90
+ `CORPUS_ROOT` (usually `H:/My Drive/global-corpus`) and
91
+ `LOCAL_CORPUS_ROOT` (usually `C:/Dev/local-corpus`) before searching the
92
+ repo. If environment variables are not visible, try those default paths.
93
+ - The corpus search must use an explicit corpus path in the tool arguments
94
+ (`H:/My Drive/global-corpus` or `C:/Dev/local-corpus`). A relative repo
95
+ search does not count as enrichment.
96
+ - Use `Grep`/`Glob`/`Read` or the environment's equivalent tools so the
97
+ transcript records what was consulted.
98
+ - Use web search only when the requested output needs current/public facts,
99
+ the user asks for external context, or corpus context is absent and network
100
+ search is allowed. Cite/use only what the search actually supports.
101
+ - Searching only the project repo is not enough for enrichment unless the
102
+ source itself points to a repo-local corpus file.
103
+ - If neither corpus nor web context is available, keep the output sparse and
104
+ mark missing context in assumptions; do not fill gaps creatively.
105
+ 4. **For long sources**, extract thesis, audience, proof points, CTA, constraints, and factual risks before writing.
106
+ 5. **Jump to the target channel or pack section** below and apply all rules exactly — do not rely on memory.
107
+ 6. **Never mix** markdown conventions across channels.
108
+ 7. If the channel or pack is ambiguous, ask once: "Is this for [Channel A] or [Channel B]?"
109
+ 8. Produce the formatted or repurposed output directly as the deliverable.
110
+ 9. Treat extraction notes and source-fidelity guardrails as internal scratchwork.
111
+ Do not print a "Long-Source Extraction Checklist", factual guardrail list, or
112
+ absent-topic list unless the user explicitly asks for analysis.
113
+
114
+ ## Hard Rules (all channels)
115
+
116
+ - Never apply generic markdown (`##`, `**`, `-`, etc.) to LinkedIn, Email, Slack, or Twitter output.
117
+ - Never use raw LaTeX in LinkedIn, Email, Slack, or Twitter — use Unicode math symbols.
118
+ - Never use Word Styles notation in plain-text channels.
119
+ - Always match the tone register of the channel (formal ≠ casual ≠ punchy).
120
+ - For LIFEAI/PRT/RDC content, maintain REGEN-MODE voice unless Author-Mode is active.
121
+ - When repurposing a long source, preserve the source thesis and never invent unsupported statistics, quotes, names, dates, citations, results, or commitments.
122
+ - If the source lacks a needed CTA, audience, proof point, or date, either use a clearly generic placeholder or state the assumption before the polished output.
123
+
124
+ > ## ⛔ Scope boundary — this skill FORMATS text; it does NOT convert files
125
+ > This skill governs **how to structure and format content** for a channel. It never
126
+ > reads or writes binary office files. For the actual **Word ↔ Markdown (and .pptx/.ppt)
127
+ > file conversion — in either direction — use `build-corpus` / the `rdc:convert` skill**,
128
+ > never this one. So: "convert this .docx to markdown" / "turn this markdown into a Word
129
+ > doc" → **`rdc:convert`**. "format this content the Word way / write it for LinkedIn" →
130
+ > this skill. The Word/DOCX and PDF sections below describe target structure only; producing
131
+ > the actual `.docx`/`.pdf` artifact is `rdc:convert` / `rdc:brochure`, not channel-formatter.
132
+ >
133
+ > **Work in Markdown, materialize at the end.** Draft and format everything as Markdown
134
+ > ("MD time" — cheap tokens, clean diffs); only hand off to `rdc:convert` to emit the
135
+ > `.docx`/`.pptx` as the last step. build-corpus round-trips losslessly, so this costs
136
+ > no fidelity. See the build-corpus agent primer (`AGENTS.md`).
137
+ >
138
+ > Specialist routing:
139
+ > - Office/Markdown file conversion → `rdc:convert`
140
+ > - HTML/folder/zip/URL to PDF brochure rendering → `rdc:brochure`
141
+ > - Brochurify orchestration jobs → `rdc:brochurify`
142
+ > - Brochure JSX using `@lifeai/brochure-kit` → `lifeai-brochure-author`
143
+
144
+ ---
145
+
146
+ ## § Repurposing Modes
147
+
148
+ Use these modes when the input is longer than the requested output, such as an
149
+ article, memo, transcript, report, rough draft, or notes.
150
+
151
+ ### `strict-format`
152
+ Preserve the source wording and argument as much as the channel allows. Use this
153
+ when the user says "format only", "do not rewrite", "preserve wording", or when
154
+ legal/compliance precision matters. You may adjust line breaks, headings,
155
+ emphasis, bullet symbols, and channel-specific structure, but do not add new
156
+ claims or reframe the argument.
157
+
158
+ ### `single-channel`
159
+ Repurpose the source into one target channel. Extract the usable argument,
160
+ choose the strongest hook for that channel, compress or expand to the channel's
161
+ native length, and produce one finished output.
162
+
163
+ ### `social-pack`
164
+ Repurpose one source into a coordinated set of social outputs:
165
+ - LinkedIn thought-leadership post
166
+ - Short LinkedIn announcement or teaser variant
167
+ - Twitter/X single post
168
+ - Twitter/X thread
169
+ - Slack/Teams internal share
170
+
171
+ ### `campaign-pack`
172
+ Repurpose one source into a small campaign kit:
173
+ - Everything in `social-pack`
174
+ - External email intro/blurb
175
+ - Web excerpt
176
+ - SEO meta title and meta description
177
+ - 3 CTA variants
178
+
179
+ ### `exec-pack`
180
+ Repurpose one source for internal leadership alignment:
181
+ - Internal email summary
182
+ - Slack/Teams update
183
+ - Executive-summary paragraph
184
+ - 3 talking points
185
+ - Decision/ask line if the source supports one
186
+
187
+ ### `launch-pack`
188
+ Repurpose one source for an announcement:
189
+ - LinkedIn launch post
190
+ - Twitter/X launch post
191
+ - Slack/Teams launch note
192
+ - External email blurb
193
+ - Web hero headline/subheadline/CTA
194
+ - 3 CTA variants
195
+
196
+ ### Long-Source Extraction Checklist
197
+ Before writing from a long source, identify internally:
198
+ - **Thesis:** the central argument or announcement
199
+ - **Audience:** who this is for
200
+ - **Proof:** facts, examples, data, names, dates, or quotes explicitly present
201
+ - **CTA:** what the reader should do next
202
+ - **Tone:** formal, conversational, punchy, executive, regenerative, etc.
203
+ - **Constraints:** length, compliance, brand voice, channel quirks
204
+ - **Gaps:** missing proof, missing CTA, unsupported claims, unclear audience
205
+
206
+ ### Source-Fidelity Rules
207
+ - Do not invent statistics, dates, quotes, citations, partnerships, revenue,
208
+ legal claims, customer names, or outcomes.
209
+ - Do not infer adjacent finance/reporting concepts that sound plausible but are
210
+ absent from the source, such as pro forma assumptions, reporting cadence,
211
+ offset mechanisms, governance structures, verification status, or portfolio
212
+ implications.
213
+ - If corpus or web context was consulted, use it only for facts it directly
214
+ supports. Do not blend generic domain knowledge into the source as if it were
215
+ documented.
216
+ - If the source provides a theme label without an explanation, keep the theme
217
+ label or paraphrase it conservatively. Do not add explanatory clauses that
218
+ define how it works, who governs it, how it is verified, how often it reports,
219
+ or what financial model it opposes unless those details are explicit.
220
+ - Do not contrast patient capital with quarters, earnings calls, fund cycles,
221
+ exits, venture speed, or portfolio management unless those words or concepts
222
+ appear in the source or consulted corpus/web material.
223
+ - Do not upgrade tentative language into certainty.
224
+ - Do not turn illustrative examples into facts.
225
+ - Preserve caveats when they affect meaning.
226
+ - If a stronger hook needs a proof point the source does not provide, write a
227
+ proof-neutral hook instead.
228
+ - If the source says a topic is absent, excluded, or not mentioned, treat that
229
+ as an internal guardrail. Do not repeat the absent topic in public-facing
230
+ channel copy, assumptions, caveats, notes, headings, or summaries unless the
231
+ user explicitly asks for a contrast, compliance note, or risk disclosure.
232
+ Strip absent-topic lists from the deliverable entirely.
233
+ - When assumptions are material, include a short "Assumptions:" line before the
234
+ deliverable rather than burying uncertainty in polished copy.
235
+ - Do not output your extraction checklist. The deliverable should start with the
236
+ requested channel/pack output, except for a brief "Assumptions:" line when a
237
+ material gap affects the copy.
238
+ - If you include an "Assumptions:" line, limit it to missing useful inputs such
239
+ as org name, audience, location, date, CTA, or link. Never list absent,
240
+ excluded, or not-mentioned topics in the assumptions line. If the only
241
+ uncertainty is an absent-topic guardrail, omit the assumptions line.
242
+
243
+ ---
244
+
245
+ ## § Content Repurposing Packs
246
+
247
+ When a pack is requested, label each output clearly and make every item
248
+ channel-native. A pack is not a generic summary repeated in several lengths.
249
+
250
+ ### `social-pack` Output Shape
251
+ 1. `LinkedIn thought-leadership post` — 900-1300 characters, hook-first, white space, Unicode emphasis only when useful, up to 3 hashtags.
252
+ 2. `LinkedIn short variant` — 400-700 characters, announcement or teaser style.
253
+ 3. `Twitter/X single post` — 265 characters or fewer unless the user asks otherwise.
254
+ 4. `Twitter/X thread` — 5-7 tweets, each self-contained and below 280 characters.
255
+ 5. `Slack/Teams internal share` — 3-6 lines, direct, with a clear FYI/action/decision framing.
256
+
257
+ ### `campaign-pack` Output Shape
258
+ 1. Full `social-pack`
259
+ 2. `External email intro` — subject line plus 80-150 word blurb with one ask
260
+ 3. `Web excerpt` — 80-120 words, scannable, CTA-ready
261
+ 4. `Meta title` — 50-60 characters
262
+ 5. `Meta description` — 150-160 characters
263
+ 6. `CTA variants` — 3 verb-led CTAs
264
+
265
+ ### `exec-pack` Output Shape
266
+ 1. `Internal email summary` — subject plus 6-12 lines
267
+ 2. `Slack/Teams update` — 3-5 lines
268
+ 3. `Executive summary paragraph` — 100-150 words
269
+ 4. `Talking points` — 3 concise bullets/fragments
270
+ 5. `Decision or ask` — one line, only if supported by source
271
+
272
+ ### `launch-pack` Output Shape
273
+ 1. `LinkedIn launch post` — announcement structure
274
+ 2. `Twitter/X launch post` — single post
275
+ 3. `Slack/Teams launch note` — internal update
276
+ 4. `External email blurb` — subject plus short body
277
+ 5. `Web hero` — headline, subheadline, CTA
278
+ 6. `CTA variants` — 3 options
279
+
280
+ ### Pack Quality Rules
281
+ - Vary hooks by channel; do not repeat the same first sentence everywhere.
282
+ - Keep the source thesis consistent across all outputs.
283
+ - Adapt CTA strength to the channel: softer on thought leadership, direct in
284
+ email/web, concise in Slack.
285
+ - Use channel-specific formatting rules from the sections below.
286
+ - If source proof is weak, use curiosity and framing instead of inflated claims.
287
+ - Do not include extraction notes, guardrail notes, or absent-topic caveats in
288
+ the pack. Those are reasoning aids, not channel outputs.
289
+
290
+ ---
291
+
292
+ ## § LinkedIn
293
+
294
+ ### Core Principles
295
+ - No markdown whatsoever — LinkedIn renders it as raw symbols.
296
+ - Unicode is the ONLY way to achieve bold, italic, and special emphasis.
297
+ - Emoticons are structural tools, not decoration — use them as bullet replacements and section markers.
298
+ - Hook in line 1 — LinkedIn truncates after ~2 lines before "see more".
299
+ - White space is content — single-line breaks create rhythm and readability.
300
+
301
+ ### Unicode Character Sets
302
+ **Bold (Mathematical Bold)** — key terms, company names, headlines, CTAs:
303
+ ```
304
+ 𝗔𝗕𝗖𝗗𝗘𝗙𝗚𝗛𝗜𝗝𝗞𝗟𝗠𝗡𝗢𝗣𝗤𝗥𝗦𝗧𝗨𝗩𝗪𝗫𝗬𝗭
305
+ 𝗮𝗯𝗰𝗱𝗲𝗳𝗴𝗵𝗶𝗷𝗸𝗹𝗺𝗻𝗼𝗽𝗾𝗿𝘀𝘁𝘂𝘃𝘄𝘅𝘆𝘇
306
+ 𝟬𝟭𝟮𝟯𝟰𝟱𝟲𝟳𝟴𝟵
307
+ ```
308
+ **Italic (Mathematical Italic)** — emphasis, quotes, sub-themes:
309
+ ```
310
+ 𝘈𝘉𝘊𝘋𝘌𝘍𝘎𝘏𝘐𝘑𝘒𝘓𝘔𝘕𝘖𝘗𝘘𝘙𝘚𝘛𝘜𝘝𝘞𝘟𝘠𝘡
311
+ 𝘢𝘣𝘤𝘥𝘦𝘧𝘨𝘩𝘪𝘫𝘬𝘭𝘮𝘯𝘰𝘱𝘲𝘳𝘴𝘵𝘶𝘷𝘸𝘹𝘺𝘻
312
+ ```
313
+ **Bold Italic:**
314
+ ```
315
+ 𝘼𝘽𝘾𝘿𝙀𝙁𝙂𝙃𝙄𝙅𝙆𝙇𝙈𝙉𝙊𝙋𝙌𝙍𝙎𝙏𝙐𝙑𝙒𝙓𝙔𝙕
316
+ 𝙖𝙗𝙘𝙙𝙚𝙛𝙜𝙝𝙞𝙟𝙠𝙡𝙢𝙣𝙤𝙥𝙦𝙧𝙨𝙩𝙪𝙫𝙬𝙭𝙮𝙯
317
+ ```
318
+ **Math / Equations** — Unicode symbols, never LaTeX: `× ÷ ± ≠ ≤ ≥ ≈ ∴ ∵ Σ Δ α β ∞ √ ² CO₂ H₂O → ← ⟺ % °`
319
+ Example: instead of `E = mc^2` write `E = mc²`; instead of `\alpha_{PRT}` write `αPRT`.
320
+
321
+ ### Emoticons as Structure
322
+ Section openers / bullets: 🔹 primary · 🔸 secondary · ▸ tertiary · ✅ result · ❌ contrast · ⚡ urgency · 🌱 regenerative (LIFEAI/PRT) · 💡 insight · 📌 takeaway · 🔑 key · 📊 data · 🏗️ development · 🤝 partnership · 💰 capital · 🌍 planetary.
323
+ Dividers: `——————————————` · `▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬` · `· · · · · · · · · · · · · ·`
324
+
325
+ ### Post Structure
326
+ **Standard (thought leadership):** hook line (no period, open loop) → blank → 3-6 short paragraphs (1-3 lines), emoticons as bullets → blank → insight/contrast line → blank → CTA (question/invitation) → blank → up to 3 hashtags.
327
+ **Announcement:** bold Unicode headline → what it is (2 sentences) → 🔹×3 key points → why it matters → CTA/link → 1-2 tags.
328
+ **Regenerative / LIFEAI (Dave voice):** manifesto opener (one line) → blank → problem with the old way (2-3 lines) → blank → 🌱 what we're building / how it differs / who it serves → blank → the stakes (one line) → blank → direct personal invitation → blank → `𝗗𝗮𝘃𝗲 𝗟𝗮𝗱𝗼𝘂𝗰𝗲𝘂𝗿 | LIFEAI | 𝘓𝘪𝘧𝘦 𝘣𝘦𝘧𝘰𝘳𝘦 𝘗𝘳𝘰𝘧𝘪𝘵𝘴` → `#RegenerativeCapital #PlaceRegeneration #LIFEAI`.
329
+
330
+ ### Length
331
+ Thought leadership 900–1300 chars · Announcement 400–700 · Hot take 200–400 · Long-form native 1200–2000 words.
332
+
333
+ ### Do NOT
334
+ ❌ `**bold**` (literal asterisks) · ❌ `# Heading` (literal hash) · ❌ `-`/`•` bullets (use emoticons) · ❌ LaTeX · ❌ >5 hashtags · ❌ tagging people unless asked · ❌ walls of text (max 3 lines/paragraph).
335
+
336
+ ---
337
+
338
+ ## § Twitter / X
339
+
340
+ ### Core Principles
341
+ - 280 characters hard limit per tweet. Hook is everything — first 5 words decide readership.
342
+ - Threads are for depth; single tweets for punchy takes. No markdown renders — plain text only.
343
+ - Minimal hashtags (1-2 max, only if genuinely searchable). End with a provocation/question when possible.
344
+
345
+ ### Character Counting
346
+ - URLs always count as 23 chars (t.co). Media doesn't count. Line breaks = 1 char each. Leave a 10-15 char buffer — aim for 265 max.
347
+
348
+ ### Single Tweet Structure
349
+ **Hot take:** provocative opener (≤10 words) → the turn/evidence (1-2 lines) → the landing.
350
+ **Announcement:** bold claim first → why it matters (1 line) → link/CTA.
351
+ **Regenerative (Dave):** manifesto line → old way vs new way → the invitation.
352
+
353
+ ### Thread Structure
354
+ Tweet 1 = strongest hook (number `(1/7)` or use 🧵) → tweet 2 = context → tweets 3-n = one idea each → last tweet = recap + CTA/question. Each tweet must stand alone. Max 7-10 tweets — longer = blog post.
355
+
356
+ ### Hook Formulas
357
+ Contrarian ("Most investors are wrong about regenerative land.") · Hard number ("We just unlocked $40M in stranded rural capital.") · Open loop ("Something broke in ESG investing. Here's what it missed:") · Bold declaration · Question · List tease ("3 things institutional capital gets wrong about place:").
358
+
359
+ ### Hashtags & Emoji
360
+ Max 2 hashtags, end of tweet only, active communities only. Preferred LIFEAI tags: `#RegenerativeCapital #PlaceRegeneration #ImpactInvesting #RegenFinance`. Emoji 1-2 max as punctuation: 🌱 regen · 💰 capital · 🏗️ development · ⚡ urgency.
361
+
362
+ ### Do NOT
363
+ ❌ markdown · ❌ hashtag spam · ❌ "RT if you agree" · ❌ threads >10 tweets · ❌ passive openers ("I wanted to share…") · ❌ tagging without reason · ❌ ever exceed 280 chars (always count).
364
+
365
+ ---
366
+
367
+ ## § Slack / Teams
368
+
369
+ ### Core Principles
370
+ - Brevity is respect (people read on their phone). One message = one thought. Use threads. Emoji are punctuation, not decoration.
371
+
372
+ ### Slack Markdown (actually renders)
373
+ Bold `*bold*` · Italic `_italic_` · Strikethrough `~strike~` · Inline code `` `code` `` · Code block ```` ``` ```` · Blockquote `> text` · Bullets `• item`.
374
+ Note: `**bold**` (double asterisk) does NOT render in Slack — use single `*bold*`.
375
+
376
+ ### Length
377
+ Quick question 1-2 lines · Status update 3-5 lines (bullets if 3+ items) · Decision request 5-8 lines · anything longer → thread or doc link.
378
+
379
+ ### Structure by Type
380
+ **Question:** `Quick question on [topic] — [one-sentence question]?`
381
+ **Status update:** `*[Project]* update:` then `• Done: …` `• In progress: …` `• Blocked on: … — need [thing] from [person]`.
382
+ **Decision needed:** `Need a call on [topic] by [time].` → `Context: …` → `Options: A) … B) …` → `My lean: …` → `[@person] — your call.`
383
+ **Async FYI:** `FYI: [what happened] — no action needed. [link]`
384
+
385
+ ### Emoji as Punctuation
386
+ ✅ done/approved · ❌ no/blocked · 🔁 in progress · 👀 reviewing · 🙋 I'll take it · 📌 important · ⚡ urgent · 🤔 needs discussion · 💬 let's talk · 🔗 link follows.
387
+
388
+ ### Do NOT
389
+ ❌ walls of text (use a doc) · ❌ `**double asterisk bold**` · ❌ formal greetings ("Hi team, I hope everyone…") · ❌ passive asks ("Would anyone be able to…" → "Can you [name]…") · ❌ emoji overload (max 2-3) · ❌ cross-posting the same message.
390
+
391
+ ---
392
+
393
+ ## § Email — External
394
+
395
+ ### Core Principles
396
+ - Plain prose, no markdown. Subject line determines open rate. First sentence justifies the email. One ask per email. Short paragraphs (2-4 sentences). Formal but human.
397
+
398
+ ### Structure
399
+ `Subject:` → greeting (`Dear [First Name],`) → opening (1 sentence: context/connection) → body (¶1 reason, ¶2 value/evidence, ¶3 the one ask) → forward-looking closing line → sign-off, full name, title, org, 2-3 contact lines.
400
+
401
+ ### Subject Lines
402
+ 6-10 words; personalize. Cold: `[hook] — [value]` ("Regenerative capital for [Property]"). Follow-up: `Following up — [topic]`. Intro: `Introduction: [name] — [relevance]`. Request: `[Action] request — [context]`. Never use "Quick question" / "Checking in" / "Hope you're well" as a subject; never all caps.
403
+
404
+ ### Tone by Recipient
405
+ Institutional/Family Office → formal, precise, lead with thesis + data · Foundation → warm, lead with impact · Government → neutral, process-oriented · Legal → exact, every claim qualified · Peer → professional, warmer · Media → newsworthy first.
406
+
407
+ ### Openers (use/adapt)
408
+ "I'm reaching out because [specific reason tied to them]." · "We met at [event] — following up on [topic]." · "[Mutual contact] suggested I reach out regarding [topic]." Never open with "I hope this email finds you well." / "My name is X and I work at Y." / "I wanted to reach out to…".
409
+
410
+ ### Closings & Sign-offs
411
+ "I'd welcome a 20-minute call at your convenience." / "Would you be open to a brief call this week or next?" Sign-offs: Respectfully / Yours sincerely (most formal) · Kind regards / Best regards (standard) · Warm regards (warm) · "In service of place," / "Regeneratively," (LIFEAI/Dave).
412
+ LIFEAI signature: `Dave Ladouceur` / `Founder, LIFEAI | Place Regeneration Trust` / `dave@life.ai | lifeai.com` / `Life before Profits.`
413
+
414
+ ### Length
415
+ Cold outreach 150–250 words · Follow-up 80–150 · Proposal intro 250–400 · Investor update 300–500.
416
+
417
+ ### Do NOT
418
+ ❌ markdown · ❌ walls of text · ❌ >1 ask · ❌ passive voice on the ask · ❌ sycophantic openers/closers · ❌ unspecified attachments.
419
+
420
+ ---
421
+
422
+ ## § Email — Internal
423
+
424
+ ### Core Principles
425
+ - Short, direct, action-oriented. Bullets fine and often preferred. Scannable subject. One topic per email. No pleasantries unless warranted.
426
+
427
+ ### Structure
428
+ `Subject: [Action word] — [Topic]` (e.g. "Decision needed — Supabase migration") → optional 1-line context → direct body (2-4 short paragraphs or bullets) → clear next step on its own line → casual sign-off (Thanks / Dave / —D).
429
+
430
+ ### Subject Prefixes (use consistently)
431
+ `ACTION:` recipient must do something · `DECISION:` approval/choice needed · `FYI:` informational · `URGENT:` same-day · `QUESTION:` single question · `UPDATE:` status. Example: `ACTION: Review PRT NAV calc before Friday`.
432
+
433
+ ### Bullets & Tone
434
+ One idea per bullet, max 1 line, lead with the verb (Review… / Confirm… / Send…), no sub-bullets unless necessary. Direct without blunt; no "per my last email" energy; emoji sparingly.
435
+
436
+ ### Length
437
+ Quick update 3-6 lines · Task assignment 6-12 · Internal brief ≤12-20 (longer → a doc).
438
+
439
+ ### Do NOT
440
+ ❌ markdown · ❌ long preambles · ❌ CC-ing everyone · ❌ "as per my previous email" · ❌ formal sign-offs internally.
441
+
442
+ ---
443
+
444
+ ## § Pitch Deck
445
+
446
+ ### Core Principles
447
+ - One slide, one job. Headline IS the message (a statement, not a label). 3 bullets max. No prose on slides (sentences → speaker notes). Visual-first language. Investor slides lead with thesis, support with evidence.
448
+
449
+ ### Slide Anatomy
450
+ Headline (full sentence takeaway, 12-15 words) → visual/data area (chart/diagram/table) → ≤3 bullets (fragments, not sentences) → source/footnote if cited (small, bottom-right).
451
+
452
+ ### Headlines Are Assertions, Not Labels
453
+ ❌ "Market Opportunity" → ✅ "A $4T regenerative land market with no institutional gateway" · ❌ "Our Solution" → ✅ "PRT converts stranded land assets into regenerative yield" · ❌ "The Team" → ✅ "30 years of place-based development across 3 continents" · ❌ "Financial Returns" → ✅ "8–12% cash yield with embedded ecological appreciation".
454
+
455
+ ### Standard Deck Architecture (PRT/LIFEAI)
456
+ 1 Cover · 2 The Problem · 3 The Opportunity (market + gap) · 4 Our Solution · 5 How It Works (process diagram) · 6 Traction/Proof · 7 Market/TAM · 8 Business Model · 9 Financial Projections · 10 Capital Structure (A/B/C sleeves) · 11 The Team · 12 The Ask (amount, use of funds, timeline) · 13 Appendix.
457
+
458
+ ### Visual & Bullet Style
459
+ Describe visuals explicitly, e.g. `[VISUAL: horizontal capital-stack diagram — Lane A Senior Secured $Xm 6% DAF | Lane B Mezz $Xm 9% Family Office | Lane C Equity $Xm carry GP]`. Bullets: fragments, no periods, lead with metric ("8–12% cash yield") or verb ("Converts stranded assets…"), max 8 words.
460
+ Speaker notes: full conversational sentences expanding the slide — `[SPEAKER NOTE: …]`.
461
+ Typography (for JSX/design): Headline 28-36pt bold · Bullets 18-22pt · Data labels 14-16pt accent · Source 10-11pt gray · Section label 11-12pt caps.
462
+
463
+ ### Do NOT
464
+ ❌ prose on slides · ❌ >3 bullets · ❌ label headlines · ❌ >2 font sizes in bullet area · ❌ generic stock-photo descriptions · ❌ animations unless requested.
465
+
466
+ ---
467
+
468
+ ## § Word / DOCX
469
+
470
+ > **This section = how to STRUCTURE Word content (Styles, hierarchy, tables).** To
471
+ > generate an actual `.docx` file, or convert `.docx ↔ .md`, hand off to **`rdc:convert`
472
+ > (build-corpus)** — channel-formatter does not produce or parse binary files.
473
+
474
+ ### Core Principles
475
+ - All formatting via **Word Styles** (never raw bold alone). Heading hierarchy is semantic (Heading 1/2/3, not font size). Tables use Word Table Styles, not markdown. Equations via Equation Editor (OMML). Explicit page structure (section breaks, headers/footers, page numbers).
476
+
477
+ ### Style Hierarchy
478
+ `Title` (one, top) · `Subtitle` · `Heading 1/2/3/4` · `Normal` / `Body Text` · `List Bullet` / `List Bullet 2` · `List Number` / `List Number 2` · `Quote`/`Block Text` · `Caption` · `Table Grid` · `Intense Quote` (callouts) · `Header`/`Footer`.
479
+
480
+ ### Document Types
481
+ **Executive Report/White Paper:** Title + Subtitle → page break → H1 Executive Summary → H1 TOC (auto field) → page break → numbered H1/H2 sections with `Table Grid` tables + captions → H1 References (APA) → H1 Appendices.
482
+ **Memo:** Title "MEMORANDUM" → bold-label TO/FROM/DATE/RE → rule → H2 Purpose / Background / Recommendation (List Bullet) → sign-off.
483
+ **Investment/Deal Doc (PRT/RDC):** Title + Subtitle "Confidential | Prepared by LIFEAI | Date" → page break → H1 Executive Summary → H1 Investment Thesis (H2 Market Opportunity, H2 Regenerative Framework + Five Capitals `Table Grid`) → H1 Financial Structure (H2 Capital Stack tranche table, H2 NAV Architecture w/ Equation objects) → H1 Risk Framework (risk matrix) → H1 Governance → H1 Appendices.
484
+ **Letter (formal):** sender block → date → recipient block → `Dear [Name],` → opening (purpose) → body → closing (next steps) → `Sincerely,` → signature.
485
+
486
+ ### Tables, Equations, Page Setup
487
+ Tables: `Table Grid`, bold shaded header (`#F2F2F2`), left-align text / right-align numbers, `Caption` below ("Table X: …"). Equations: specify as Equation Editor objects, e.g. `[EQUATION OBJECT: αPRT = (regen_yield − WACC_conventional) + Σ(stewardship_delta)]` with caption. Page setup: Letter/A4, 1" margins, Calibri 11 / Times 12 body, 1.15–1.5 spacing, header (title left, page# right), footer (org left, date right), numbering from page 2.
488
+
489
+ ### Do NOT
490
+ ❌ manual bold instead of a Style for headings · ❌ tabs/spaces for indentation · ❌ `Shift+Enter` between paragraphs (use spacing) · ❌ markdown tables · ❌ inline LaTeX · ❌ >3 heading levels without justification.
491
+
492
+ ---
493
+
494
+ ## § PDF Report
495
+
496
+ ### Core Principles
497
+ - Final, fixed, reader-facing. Structure non-negotiable: executive summary → body → references. All sections numbered; all tables/figures captioned. Formal prose (no bullets as primary structure). Page numbers, headers, footers required.
498
+
499
+ ### Structure
500
+ Cover (title, type, org+logo, date | version | confidentiality) → Executive Summary (≤1 page: what it is, 3-5 findings, recommendations) → TOC (auto, clickable) → numbered body (1 Introduction/Context · 2-4 core · 5 Conclusions) → References (APA 7th, numbered) → Appendices (A, B, C…).
501
+ Section numbering: hierarchical decimal, max 3 levels (1.1.1), never 4.
502
+
503
+ ### Tables, Figures, Equations
504
+ Tables: title above (`Table X: …`), bold shaded header, `Source:` below if external, `Note:` if needed. Figures: caption below (`Figure X: …`), source, bracketed alt-text. Equations: labeled `(Equation 1)` with a `Where:` variable key.
505
+ Typography: Georgia 11 / Garamond 12 body; H1 18 bold, H2 14 bold, H3 12 bold italic; 1.5 body spacing; 1.25" binding margin; page numbers bottom-center from page 2; footer `Org | Confidential | Date`.
506
+ Confidentiality labels: `CONFIDENTIAL` · `CONFIDENTIAL — For Recipient Only` · `FOR DISCUSSION PURPOSES ONLY` · `NOT FOR DISTRIBUTION` · (none = public).
507
+
508
+ ### Do NOT
509
+ ❌ markdown in final content · ❌ unnumbered sections · ❌ tables without titles/sources · ❌ figures without captions · ❌ invented data (mark "Illustrative") · ❌ exec summaries over one page · ❌ incomplete citations.
510
+
511
+ ---
512
+
513
+ ## § Web / Landing Page
514
+
515
+ ### Core Principles
516
+ - Scannable first, readable second. Above the fold is everything. One page = one conversion goal. SEO-aware without keyword stuffing. CTA appears at least twice (above fold + bottom). Mobile-first (short paragraphs/sentences).
517
+
518
+ ### Page Structure
519
+ Hero (H1 value prop 6-10 words · subheadline 1-2 sentences · CTA button verb+object · optional hero media) → Social proof/trust bar → Problem (name the pain, 2-3 short paragraphs or 3 cards) → Solution (the shift; icon + headline + 1-2 sentences feature/benefit pairs) → How It Works (3-4 numbered steps, 1 sentence each) → Proof/Results (large number + short label: "340 acres restored") → CTA section (urgency headline + friction-reducer subtext + button) → Footer.
520
+
521
+ ### Headlines & Body
522
+ H1 ≤8 words (benefit, not feature, active voice, power words: transform/unlock/regenerate/built/proven) · H2 ≤12 · H3 ≤6. Body: paragraphs ≤3 sentences/50 words, sentences ≤20 words, second person ("you/your"), grade 8-10 reading level.
523
+ LIFEAI/PRT examples: H1 "The Capital Stack for Regenerative Land" · H2 "How PRT Turns Stranded Assets Into Living Investments" · H3 "Place Readiness" / "Covenant-Protected Yield" / "Verified Impact".
524
+
525
+ ### CTA & SEO
526
+ CTA copy: verb + specific object ("Book Your 20-Minute Call", "See the Capital Structure", "Download the Investment Brief") — never "Submit"/"Click here"/"Learn more". SEO: primary keyword in H1 + first paragraph, secondary in H2s/body naturally, meta title 50-60 chars, meta description 150-160 chars, descriptive alt text on all images.
527
+
528
+ ### Do NOT
529
+ ❌ paragraphs >3 sentences above the fold · ❌ passive-voice CTAs · ❌ jargon without translation · ❌ carousels/sliders above the fold · ❌ >2 CTAs per section · ❌ generic headlines ("Welcome to Our Website") · ❌ markdown in final web copy (deliver clean prose with labeled sections).
530
+
531
+ ---
532
+
533
+ ## Provenance
534
+
535
+ Ported into rdc-skills from the `output-channel-formatter` claude.ai skill (frontend-design-skills pack).
536
+ Originally a multi-file skill (SKILL.md + `references/*.md`); inlined into this single self-contained
537
+ SKILL.md so it works identically across the CLI plugin, the claude.ai web client (via `rdc_skill_get`),
538
+ and Codex — the rdc-skills MCP serves only SKILL.md, so all channel rules must live here.