@lifeaitools/rdc-skills 0.24.41 → 0.25.0

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 (198) hide show
  1. package/.claude/settings.json +15 -15
  2. package/.claude-plugin/marketplace.json +21 -21
  3. package/.claude-plugin/plugin.json +1518 -1371
  4. package/.github/workflows/publish.yml +34 -34
  5. package/.github/workflows/self-test.yml +58 -58
  6. package/CHANGELOG.md +310 -310
  7. package/LICENSE +21 -21
  8. package/MANIFEST.md +221 -221
  9. package/README.md +375 -376
  10. package/README.sandbox.md +3 -3
  11. package/assets/watcher/viewer.html +164 -164
  12. package/bin/rdc-skills-mcp.mjs +316 -316
  13. package/commands/build.md +183 -183
  14. package/commands/collab.md +180 -180
  15. package/commands/deploy.md +152 -152
  16. package/commands/design.md +31 -31
  17. package/commands/edit.md +28 -28
  18. package/commands/fixit.md +150 -124
  19. package/commands/handoff.md +173 -173
  20. package/commands/help.md +95 -95
  21. package/commands/overnight.md +220 -220
  22. package/commands/plan.md +158 -158
  23. package/commands/preplan.md +131 -131
  24. package/commands/prototype.md +145 -145
  25. package/commands/release.md +49 -49
  26. package/commands/report.md +99 -99
  27. package/commands/review.md +120 -120
  28. package/commands/self-test.md +113 -113
  29. package/commands/status.md +86 -86
  30. package/commands/watch.md +98 -98
  31. package/commands/workitems.md +137 -137
  32. package/git-sha.json +1 -1
  33. package/guides/agent-bootstrap.md +295 -295
  34. package/guides/agents/backend.md +104 -104
  35. package/guides/agents/content.md +94 -94
  36. package/guides/agents/cs2.md +56 -56
  37. package/guides/agents/data.md +87 -87
  38. package/guides/agents/design.md +77 -77
  39. package/guides/agents/frontend.md +92 -92
  40. package/guides/agents/infrastructure.md +81 -81
  41. package/guides/agents/setup.md +281 -281
  42. package/guides/agents/verify.md +151 -151
  43. package/guides/agents/viz.md +106 -106
  44. package/guides/backend.md +146 -146
  45. package/guides/content.md +147 -147
  46. package/guides/cs2.md +190 -190
  47. package/guides/data.md +123 -123
  48. package/guides/design.md +116 -116
  49. package/guides/engineering-behavior.md +43 -43
  50. package/guides/escalation-protocol.md +125 -125
  51. package/guides/frontend.md +151 -151
  52. package/guides/history-md-spec.md +297 -297
  53. package/guides/infrastructure.md +179 -179
  54. package/guides/lessons-learned-spec.md +145 -151
  55. package/guides/output-contract.md +108 -108
  56. package/guides/publish-md-spec.md +289 -289
  57. package/guides/rdc-skills-startup.md +30 -30
  58. package/guides/verify.md +11 -11
  59. package/hooks/check-cwd.js +31 -31
  60. package/hooks/check-rdc-environment.js +164 -164
  61. package/hooks/check-services.js +6 -6
  62. package/hooks/check-stale-work-items.js +19 -19
  63. package/hooks/foreground-process-gate.js +128 -128
  64. package/hooks/gate-watchdog-selfcheck.js +257 -257
  65. package/hooks/hook-logger.js +25 -25
  66. package/hooks/lib/run-evidence-gate.mjs +241 -241
  67. package/hooks/no-stop-open-epics.js +127 -127
  68. package/hooks/post-tool-batch-gate.js +203 -203
  69. package/hooks/post-work-check.js +21 -21
  70. package/hooks/postcompact-log.js +13 -13
  71. package/hooks/precompact-log.js +13 -13
  72. package/hooks/rate-limit-retry.js +46 -46
  73. package/hooks/rdc-invocation-marker.js +157 -157
  74. package/hooks/rdc-output-contract-gate.js +94 -94
  75. package/hooks/require-work-item-on-commit.js +294 -294
  76. package/hooks/restart-brief.js +19 -19
  77. package/hooks/run-hidden-hook.ps1 +47 -47
  78. package/hooks/task-completed-gate.js +274 -274
  79. package/hooks/work-item-exit-gate.js +944 -944
  80. package/lib/catalog.mjs +236 -236
  81. package/lib/cloud-rewrite.mjs +155 -155
  82. package/package.json +57 -57
  83. package/rules/work-items-rpc.md +520 -520
  84. package/scaffold/templates/HISTORY.md.template +39 -39
  85. package/scaffold/templates/PUBLISH.md.template +21 -21
  86. package/scaffold/templates/brochure-studio-default.html +70 -70
  87. package/scripts/acceptance.mjs +502 -502
  88. package/scripts/fixtures/guides/bad-guide.md +15 -15
  89. package/scripts/fixtures/guides-clean/good-guide.md +16 -16
  90. package/scripts/install-rdc-skills.js +1289 -1289
  91. package/scripts/install.ps1 +202 -202
  92. package/scripts/install.sh +132 -132
  93. package/scripts/lib/assertions.mjs +287 -287
  94. package/scripts/lib/manifest-schema.mjs +754 -754
  95. package/scripts/lib/runner.mjs +465 -465
  96. package/scripts/lib/sandbox.mjs +435 -435
  97. package/scripts/prepack.mjs +32 -32
  98. package/scripts/rdc-brochure.mjs +482 -482
  99. package/scripts/rdc-design-cli.mjs +134 -134
  100. package/scripts/rebuild-mcp.mjs +107 -107
  101. package/scripts/self-test.mjs +1460 -1460
  102. package/scripts/stamp-git-sha.mjs +29 -29
  103. package/scripts/test-guide-validator.mjs +196 -196
  104. package/scripts/test-rdc-hooks.mjs +145 -145
  105. package/scripts/uninstall.ps1 +77 -77
  106. package/scripts/uninstall.sh +69 -69
  107. package/scripts/update.ps1 +43 -43
  108. package/scripts/update.sh +43 -43
  109. package/scripts/validate-place-histories.js +461 -461
  110. package/scripts/validate-publish-manifests.js +502 -424
  111. package/scripts/watch-init.mjs +100 -100
  112. package/skills/brochure/SKILL.md +107 -107
  113. package/skills/build/SKILL.md +563 -563
  114. package/skills/channel-formatter/SKILL.md +538 -533
  115. package/skills/co-develop/SKILL.md +196 -196
  116. package/skills/collab/SKILL.md +239 -239
  117. package/skills/convert/SKILL.md +167 -140
  118. package/skills/deploy/SKILL.md +541 -541
  119. package/skills/design/SKILL.md +211 -211
  120. package/skills/design/reference/ownership.md +16 -16
  121. package/skills/design/reference/rampa.md +92 -92
  122. package/skills/design/reference/studio-model.md +153 -153
  123. package/skills/edit/SKILL.md +98 -98
  124. package/skills/fixit/SKILL.md +203 -165
  125. package/skills/fs-mcp/SKILL.md +148 -148
  126. package/skills/handoff/SKILL.md +236 -236
  127. package/skills/help/SKILL.md +143 -143
  128. package/skills/housekeeping/SKILL.md +160 -219
  129. package/skills/lifeai-brochure-author/SKILL.md +340 -340
  130. package/skills/onramp/SKILL.md +248 -0
  131. package/skills/overnight/SKILL.md +251 -251
  132. package/skills/plan/SKILL.md +345 -345
  133. package/skills/preplan/SKILL.md +90 -90
  134. package/skills/prototype/SKILL.md +150 -150
  135. package/skills/rdc-brochurify/SKILL.md +245 -245
  136. package/skills/rdc-extract-verifier-rules/SKILL.md +191 -191
  137. package/skills/release/SKILL.md +140 -140
  138. package/skills/report/SKILL.md +100 -100
  139. package/skills/review/SKILL.md +152 -152
  140. package/skills/rpms-filemap/SKILL.cloud.md +111 -111
  141. package/skills/rpms-filemap/SKILL.md +111 -111
  142. package/skills/self-test/SKILL.md +132 -132
  143. package/skills/status/SKILL.md +99 -99
  144. package/skills/terminal-config/SKILL.md +62 -62
  145. package/skills/tests/MATRIX.md +54 -54
  146. package/skills/tests/README.md +47 -47
  147. package/skills/tests/onramp.test.json +87 -0
  148. package/skills/tests/rdc-brochure.test.json +34 -34
  149. package/skills/tests/rdc-build.test.json +36 -36
  150. package/skills/tests/rdc-channel-formatter.test.json +45 -45
  151. package/skills/tests/rdc-co-develop.test.json +29 -29
  152. package/skills/tests/rdc-collab.test.json +29 -29
  153. package/skills/tests/rdc-convert.test.json +35 -35
  154. package/skills/tests/rdc-deploy.test.json +30 -30
  155. package/skills/tests/rdc-design.test.json +27 -27
  156. package/skills/tests/rdc-edit.test.json +29 -29
  157. package/skills/tests/rdc-fixit.test.json +36 -36
  158. package/skills/tests/rdc-fs-mcp.test.json +36 -36
  159. package/skills/tests/rdc-handoff.test.json +28 -28
  160. package/skills/tests/rdc-help.test.json +29 -29
  161. package/skills/tests/rdc-housekeeping.test.json +28 -32
  162. package/skills/tests/rdc-lifeai-brochure-author.test.json +35 -35
  163. package/skills/tests/rdc-overnight.test.json +37 -37
  164. package/skills/tests/rdc-plan.test.json +27 -27
  165. package/skills/tests/rdc-preplan.test.json +31 -31
  166. package/skills/tests/rdc-prototype.test.json +28 -28
  167. package/skills/tests/rdc-rdc-brochurify.test.json +23 -23
  168. package/skills/tests/rdc-rdc-extract-verifier-rules.test.json +34 -34
  169. package/skills/tests/rdc-release.test.json +29 -29
  170. package/skills/tests/rdc-report.test.json +28 -28
  171. package/skills/tests/rdc-review.test.json +29 -29
  172. package/skills/tests/rdc-rpms-filemap.test.json +28 -28
  173. package/skills/tests/rdc-self-test.test.json +24 -24
  174. package/skills/tests/rdc-status.test.json +29 -29
  175. package/skills/tests/rdc-terminal-config.test.json +29 -29
  176. package/skills/tests/rdc-watch.test.json +24 -24
  177. package/skills/tests/rdc-workitems.test.json +27 -27
  178. package/skills/watch/SKILL.md +97 -97
  179. package/skills/workitems/SKILL.md +151 -151
  180. package/tests/acceptance.test.mjs +59 -59
  181. package/tests/channel-formatter.contract.test.mjs +251 -251
  182. package/tests/curl-surface.test.mjs +289 -289
  183. package/tests/harness-gates.test.mjs +325 -325
  184. package/tests/help-surface.test.mjs +61 -61
  185. package/tests/install-rdc-skills.test.mjs +49 -49
  186. package/tests/manifest-contract-fields.test.mjs +78 -78
  187. package/tests/mcp.test.mjs +271 -271
  188. package/tests/rdc-brochure.test.mjs +125 -125
  189. package/tests/require-work-item-on-commit.test.mjs +162 -162
  190. package/tests/run-evidence-gate.test.mjs +82 -82
  191. package/tests/skill-test-matrix.test.mjs +66 -66
  192. package/tests/validate-skills.js +27 -27
  193. package/tests/work-item-exit-gate-l2.test.mjs +368 -368
  194. package/tests/work-item-exit-gate-l3.test.mjs +197 -197
  195. package/RELEASE.md +0 -42
  196. package/tests/housekeeping-lessons-triage.test.mjs +0 -49
  197. package/tests/lessons-pipeline-contract.test.mjs +0 -26
  198. package/tests/release-contract.test.mjs +0 -16
@@ -1,533 +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
- > Specialist routing:
134
- > - Office/Markdown file conversion `rdc:convert`
135
- > - HTML/folder/zip/URL to PDF brochure rendering `rdc:brochure`
136
- > - Brochurify orchestration jobs `rdc:brochurify`
137
- > - Brochure JSX using `@lifeai/brochure-kit` → `lifeai-brochure-author`
138
-
139
- ---
140
-
141
- ## § Repurposing Modes
142
-
143
- Use these modes when the input is longer than the requested output, such as an
144
- article, memo, transcript, report, rough draft, or notes.
145
-
146
- ### `strict-format`
147
- Preserve the source wording and argument as much as the channel allows. Use this
148
- when the user says "format only", "do not rewrite", "preserve wording", or when
149
- legal/compliance precision matters. You may adjust line breaks, headings,
150
- emphasis, bullet symbols, and channel-specific structure, but do not add new
151
- claims or reframe the argument.
152
-
153
- ### `single-channel`
154
- Repurpose the source into one target channel. Extract the usable argument,
155
- choose the strongest hook for that channel, compress or expand to the channel's
156
- native length, and produce one finished output.
157
-
158
- ### `social-pack`
159
- Repurpose one source into a coordinated set of social outputs:
160
- - LinkedIn thought-leadership post
161
- - Short LinkedIn announcement or teaser variant
162
- - Twitter/X single post
163
- - Twitter/X thread
164
- - Slack/Teams internal share
165
-
166
- ### `campaign-pack`
167
- Repurpose one source into a small campaign kit:
168
- - Everything in `social-pack`
169
- - External email intro/blurb
170
- - Web excerpt
171
- - SEO meta title and meta description
172
- - 3 CTA variants
173
-
174
- ### `exec-pack`
175
- Repurpose one source for internal leadership alignment:
176
- - Internal email summary
177
- - Slack/Teams update
178
- - Executive-summary paragraph
179
- - 3 talking points
180
- - Decision/ask line if the source supports one
181
-
182
- ### `launch-pack`
183
- Repurpose one source for an announcement:
184
- - LinkedIn launch post
185
- - Twitter/X launch post
186
- - Slack/Teams launch note
187
- - External email blurb
188
- - Web hero headline/subheadline/CTA
189
- - 3 CTA variants
190
-
191
- ### Long-Source Extraction Checklist
192
- Before writing from a long source, identify internally:
193
- - **Thesis:** the central argument or announcement
194
- - **Audience:** who this is for
195
- - **Proof:** facts, examples, data, names, dates, or quotes explicitly present
196
- - **CTA:** what the reader should do next
197
- - **Tone:** formal, conversational, punchy, executive, regenerative, etc.
198
- - **Constraints:** length, compliance, brand voice, channel quirks
199
- - **Gaps:** missing proof, missing CTA, unsupported claims, unclear audience
200
-
201
- ### Source-Fidelity Rules
202
- - Do not invent statistics, dates, quotes, citations, partnerships, revenue,
203
- legal claims, customer names, or outcomes.
204
- - Do not infer adjacent finance/reporting concepts that sound plausible but are
205
- absent from the source, such as pro forma assumptions, reporting cadence,
206
- offset mechanisms, governance structures, verification status, or portfolio
207
- implications.
208
- - If corpus or web context was consulted, use it only for facts it directly
209
- supports. Do not blend generic domain knowledge into the source as if it were
210
- documented.
211
- - If the source provides a theme label without an explanation, keep the theme
212
- label or paraphrase it conservatively. Do not add explanatory clauses that
213
- define how it works, who governs it, how it is verified, how often it reports,
214
- or what financial model it opposes unless those details are explicit.
215
- - Do not contrast patient capital with quarters, earnings calls, fund cycles,
216
- exits, venture speed, or portfolio management unless those words or concepts
217
- appear in the source or consulted corpus/web material.
218
- - Do not upgrade tentative language into certainty.
219
- - Do not turn illustrative examples into facts.
220
- - Preserve caveats when they affect meaning.
221
- - If a stronger hook needs a proof point the source does not provide, write a
222
- proof-neutral hook instead.
223
- - If the source says a topic is absent, excluded, or not mentioned, treat that
224
- as an internal guardrail. Do not repeat the absent topic in public-facing
225
- channel copy, assumptions, caveats, notes, headings, or summaries unless the
226
- user explicitly asks for a contrast, compliance note, or risk disclosure.
227
- Strip absent-topic lists from the deliverable entirely.
228
- - When assumptions are material, include a short "Assumptions:" line before the
229
- deliverable rather than burying uncertainty in polished copy.
230
- - Do not output your extraction checklist. The deliverable should start with the
231
- requested channel/pack output, except for a brief "Assumptions:" line when a
232
- material gap affects the copy.
233
- - If you include an "Assumptions:" line, limit it to missing useful inputs such
234
- as org name, audience, location, date, CTA, or link. Never list absent,
235
- excluded, or not-mentioned topics in the assumptions line. If the only
236
- uncertainty is an absent-topic guardrail, omit the assumptions line.
237
-
238
- ---
239
-
240
- ## § Content Repurposing Packs
241
-
242
- When a pack is requested, label each output clearly and make every item
243
- channel-native. A pack is not a generic summary repeated in several lengths.
244
-
245
- ### `social-pack` Output Shape
246
- 1. `LinkedIn thought-leadership post` — 900-1300 characters, hook-first, white space, Unicode emphasis only when useful, up to 3 hashtags.
247
- 2. `LinkedIn short variant` 400-700 characters, announcement or teaser style.
248
- 3. `Twitter/X single post` 265 characters or fewer unless the user asks otherwise.
249
- 4. `Twitter/X thread` — 5-7 tweets, each self-contained and below 280 characters.
250
- 5. `Slack/Teams internal share` 3-6 lines, direct, with a clear FYI/action/decision framing.
251
-
252
- ### `campaign-pack` Output Shape
253
- 1. Full `social-pack`
254
- 2. `External email intro` — subject line plus 80-150 word blurb with one ask
255
- 3. `Web excerpt` — 80-120 words, scannable, CTA-ready
256
- 4. `Meta title` — 50-60 characters
257
- 5. `Meta description` 150-160 characters
258
- 6. `CTA variants` — 3 verb-led CTAs
259
-
260
- ### `exec-pack` Output Shape
261
- 1. `Internal email summary` — subject plus 6-12 lines
262
- 2. `Slack/Teams update` — 3-5 lines
263
- 3. `Executive summary paragraph` — 100-150 words
264
- 4. `Talking points` — 3 concise bullets/fragments
265
- 5. `Decision or ask` one line, only if supported by source
266
-
267
- ### `launch-pack` Output Shape
268
- 1. `LinkedIn launch post` — announcement structure
269
- 2. `Twitter/X launch post` — single post
270
- 3. `Slack/Teams launch note` — internal update
271
- 4. `External email blurb` — subject plus short body
272
- 5. `Web hero` headline, subheadline, CTA
273
- 6. `CTA variants` — 3 options
274
-
275
- ### Pack Quality Rules
276
- - Vary hooks by channel; do not repeat the same first sentence everywhere.
277
- - Keep the source thesis consistent across all outputs.
278
- - Adapt CTA strength to the channel: softer on thought leadership, direct in
279
- email/web, concise in Slack.
280
- - Use channel-specific formatting rules from the sections below.
281
- - If source proof is weak, use curiosity and framing instead of inflated claims.
282
- - Do not include extraction notes, guardrail notes, or absent-topic caveats in
283
- the pack. Those are reasoning aids, not channel outputs.
284
-
285
- ---
286
-
287
- ## § LinkedIn
288
-
289
- ### Core Principles
290
- - No markdown whatsoever — LinkedIn renders it as raw symbols.
291
- - Unicode is the ONLY way to achieve bold, italic, and special emphasis.
292
- - Emoticons are structural tools, not decoration — use them as bullet replacements and section markers.
293
- - Hook in line 1 — LinkedIn truncates after ~2 lines before "see more".
294
- - White space is content — single-line breaks create rhythm and readability.
295
-
296
- ### Unicode Character Sets
297
- **Bold (Mathematical Bold)**key terms, company names, headlines, CTAs:
298
- ```
299
- 𝗔𝗕𝗖𝗗𝗘𝗙𝗚𝗛𝗜𝗝𝗞𝗟𝗠𝗡𝗢𝗣𝗤𝗥𝗦𝗧𝗨𝗩𝗪𝗫𝗬𝗭
300
- 𝗮𝗯𝗰𝗱𝗲𝗳𝗴𝗵𝗶𝗷𝗸𝗹𝗺𝗻𝗼𝗽𝗾𝗿𝘀𝘁𝘂𝘃𝘄𝘅𝘆𝘇
301
- 𝟬𝟭𝟮𝟯𝟰𝟱𝟲𝟳𝟴𝟵
302
- ```
303
- **Italic (Mathematical Italic)** — emphasis, quotes, sub-themes:
304
- ```
305
- 𝘈𝘉𝘊𝘋𝘌𝘍𝘎𝘏𝘐𝘑𝘒𝘓𝘔𝘕𝘖𝘗𝘘𝘙𝘚𝘛𝘜𝘝𝘞𝘟𝘠𝘡
306
- 𝘢𝘣𝘤𝘥𝘦𝘧𝘨𝘩𝘪𝘫𝘬𝘭𝘮𝘯𝘰𝘱𝘲𝘳𝘴𝘵𝘶𝘷𝘸𝘹𝘺𝘻
307
- ```
308
- **Bold Italic:**
309
- ```
310
- 𝘼𝘽𝘾𝘿𝙀𝙁𝙂𝙃𝙄𝙅𝙆𝙇𝙈𝙉𝙊𝙋𝙌𝙍𝙎𝙏𝙐𝙑𝙒𝙓𝙔𝙕
311
- 𝙖𝙗𝙘𝙙𝙚𝙛𝙜𝙝𝙞𝙟𝙠𝙡𝙢𝙣𝙤𝙥𝙦𝙧𝙨𝙩𝙪𝙫𝙬𝙭𝙮𝙯
312
- ```
313
- **Math / Equations** — Unicode symbols, never LaTeX: `× ÷ ± ≠ ≤ ≥ ≈ ∴ ∵ Σ Δ α β ∞ √ ² CO₂ H₂O → ← ⟺ % °`
314
- Example: instead of `E = mc^2` write `E = mc²`; instead of `\alpha_{PRT}` write `αPRT`.
315
-
316
- ### Emoticons as Structure
317
- Section openers / bullets: 🔹 primary · 🔸 secondary · ▸ tertiary · ✅ result · ❌ contrast · ⚡ urgency · 🌱 regenerative (LIFEAI/PRT) · 💡 insight · 📌 takeaway · 🔑 key · 📊 data · 🏗️ development · 🤝 partnership · 💰 capital · 🌍 planetary.
318
- Dividers: `——————————————` · `▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬` · · · · · · · · · · · · · ·`
319
-
320
- ### Post Structure
321
- **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.
322
- **Announcement:** bold Unicode headline what it is (2 sentences) 🔹×3 key points why it matters CTA/link 1-2 tags.
323
- **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`.
324
-
325
- ### Length
326
- Thought leadership 900–1300 chars · Announcement 400–700 · Hot take 200–400 · Long-form native 1200–2000 words.
327
-
328
- ### Do NOT
329
- ❌ `**bold**` (literal asterisks) · ❌ `# Heading` (literal hash) · ❌ `-`/`•` bullets (use emoticons) · ❌ LaTeX · ❌ >5 hashtags · ❌ tagging people unless asked · ❌ walls of text (max 3 lines/paragraph).
330
-
331
- ---
332
-
333
- ## § Twitter / X
334
-
335
- ### Core Principles
336
- - 280 characters hard limit per tweet. Hook is everything — first 5 words decide readership.
337
- - Threads are for depth; single tweets for punchy takes. No markdown renders — plain text only.
338
- - Minimal hashtags (1-2 max, only if genuinely searchable). End with a provocation/question when possible.
339
-
340
- ### Character Counting
341
- - 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.
342
-
343
- ### Single Tweet Structure
344
- **Hot take:** provocative opener (≤10 words) → the turn/evidence (1-2 lines) → the landing.
345
- **Announcement:** bold claim first → why it matters (1 line) → link/CTA.
346
- **Regenerative (Dave):** manifesto line old way vs new way the invitation.
347
-
348
- ### Thread Structure
349
- 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.
350
-
351
- ### Hook Formulas
352
- 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:").
353
-
354
- ### Hashtags & Emoji
355
- 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.
356
-
357
- ### Do NOT
358
- ❌ 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).
359
-
360
- ---
361
-
362
- ## § Slack / Teams
363
-
364
- ### Core Principles
365
- - Brevity is respect (people read on their phone). One message = one thought. Use threads. Emoji are punctuation, not decoration.
366
-
367
- ### Slack Markdown (actually renders)
368
- Bold `*bold*` · Italic `_italic_` · Strikethrough `~strike~` · Inline code `` `code` `` · Code block ```` ``` ```` · Blockquote `> text` · Bullets `• item`.
369
- Note: `**bold**` (double asterisk) does NOT render in Slack — use single `*bold*`.
370
-
371
- ### Length
372
- 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.
373
-
374
- ### Structure by Type
375
- **Question:** `Quick question on [topic] — [one-sentence question]?`
376
- **Status update:** `*[Project]* update:` then `• Done: …` `• In progress: …` `• Blocked on: … — need [thing] from [person]`.
377
- **Decision needed:** `Need a call on [topic] by [time].` `Context: …` `Options: A) B) …` `My lean: …` `[@person] your call.`
378
- **Async FYI:** `FYI: [what happened] — no action needed. [link]`
379
-
380
- ### Emoji as Punctuation
381
- done/approved · no/blocked · 🔁 in progress · 👀 reviewing · 🙋 I'll take it · 📌 important · ⚡ urgent · 🤔 needs discussion · 💬 let's talk · 🔗 link follows.
382
-
383
- ### Do NOT
384
- ❌ 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.
385
-
386
- ---
387
-
388
- ## § Email — External
389
-
390
- ### Core Principles
391
- - 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.
392
-
393
- ### Structure
394
- `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.
395
-
396
- ### Subject Lines
397
- 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.
398
-
399
- ### Tone by Recipient
400
- 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.
401
-
402
- ### Openers (use/adapt)
403
- "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…".
404
-
405
- ### Closings & Sign-offs
406
- "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).
407
- LIFEAI signature: `Dave Ladouceur` / `Founder, LIFEAI | Place Regeneration Trust` / `dave@life.ai | lifeai.com` / `Life before Profits.`
408
-
409
- ### Length
410
- Cold outreach 150–250 words · Follow-up 80–150 · Proposal intro 250–400 · Investor update 300–500.
411
-
412
- ### Do NOT
413
- ❌ markdown · ❌ walls of text · ❌ >1 ask · ❌ passive voice on the ask · ❌ sycophantic openers/closers · ❌ unspecified attachments.
414
-
415
- ---
416
-
417
- ## § Email — Internal
418
-
419
- ### Core Principles
420
- - Short, direct, action-oriented. Bullets fine and often preferred. Scannable subject. One topic per email. No pleasantries unless warranted.
421
-
422
- ### Structure
423
- `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).
424
-
425
- ### Subject Prefixes (use consistently)
426
- `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`.
427
-
428
- ### Bullets & Tone
429
- 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.
430
-
431
- ### Length
432
- Quick update 3-6 lines · Task assignment 6-12 · Internal brief ≤12-20 (longer → a doc).
433
-
434
- ### Do NOT
435
- ❌ markdown · ❌ long preambles · ❌ CC-ing everyone · ❌ "as per my previous email" · ❌ formal sign-offs internally.
436
-
437
- ---
438
-
439
- ## § Pitch Deck
440
-
441
- ### Core Principles
442
- - 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.
443
-
444
- ### Slide Anatomy
445
- 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).
446
-
447
- ### Headlines Are Assertions, Not Labels
448
- ❌ "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".
449
-
450
- ### Standard Deck Architecture (PRT/LIFEAI)
451
- 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.
452
-
453
- ### Visual & Bullet Style
454
- 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.
455
- Speaker notes: full conversational sentences expanding the slide — `[SPEAKER NOTE: …]`.
456
- 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.
457
-
458
- ### Do NOT
459
- prose on slides · >3 bullets · label headlines · >2 font sizes in bullet area · generic stock-photo descriptions · animations unless requested.
460
-
461
- ---
462
-
463
- ## § Word / DOCX
464
-
465
- > **This section = how to STRUCTURE Word content (Styles, hierarchy, tables).** To
466
- > generate an actual `.docx` file, or convert `.docx ↔ .md`, hand off to **`rdc:convert`
467
- > (build-corpus)** — channel-formatter does not produce or parse binary files.
468
-
469
- ### Core Principles
470
- - 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).
471
-
472
- ### Style Hierarchy
473
- `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`.
474
-
475
- ### Document Types
476
- **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.
477
- **Memo:** Title "MEMORANDUM" → bold-label TO/FROM/DATE/RE → rule → H2 Purpose / Background / Recommendation (List Bullet) → sign-off.
478
- **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.
479
- **Letter (formal):** sender block → date → recipient block → `Dear [Name],` → opening (purpose) → body → closing (next steps) → `Sincerely,` → signature.
480
-
481
- ### Tables, Equations, Page Setup
482
- 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.
483
-
484
- ### Do NOT
485
- ❌ 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.
486
-
487
- ---
488
-
489
- ## § PDF Report
490
-
491
- ### Core Principles
492
- - 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.
493
-
494
- ### Structure
495
- 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…).
496
- Section numbering: hierarchical decimal, max 3 levels (1.1.1), never 4.
497
-
498
- ### Tables, Figures, Equations
499
- 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.
500
- 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`.
501
- Confidentiality labels: `CONFIDENTIAL` · `CONFIDENTIAL For Recipient Only` · `FOR DISCUSSION PURPOSES ONLY` · `NOT FOR DISTRIBUTION` · (none = public).
502
-
503
- ### Do NOT
504
- markdown in final content · unnumbered sections · tables without titles/sources · figures without captions · invented data (mark "Illustrative") · exec summaries over one page · ❌ incomplete citations.
505
-
506
- ---
507
-
508
- ## § Web / Landing Page
509
-
510
- ### Core Principles
511
- - 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).
512
-
513
- ### Page Structure
514
- 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.
515
-
516
- ### Headlines & Body
517
- 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.
518
- 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".
519
-
520
- ### CTA & SEO
521
- 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.
522
-
523
- ### Do NOT
524
- ❌ 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).
525
-
526
- ---
527
-
528
- ## Provenance
529
-
530
- Ported into rdc-skills from the `output-channel-formatter` claude.ai skill (frontend-design-skills pack).
531
- Originally a multi-file skill (SKILL.md + `references/*.md`); inlined into this single self-contained
532
- SKILL.md so it works identically across the CLI plugin, the claude.ai web client (via `rdc_skill_get`),
533
- 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 longerthread 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.