@lifeaitools/rdc-skills 0.20.5 → 0.21.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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rdc",
3
- "version": "0.20.5",
3
+ "version": "0.21.0",
4
4
  "description": "RDC typed-agent dispatch skill suite for Claude Code — plan, build, review, overnight unattended builds with work-item tracking and TDD enforcement.",
5
5
  "author": {
6
6
  "name": "LIFEAI",
@@ -30,6 +30,31 @@
30
30
  "codeflow_required": "bool — true if the skill MUST consult CodeFlow before acting on the codebase"
31
31
  },
32
32
  "skills_meta": {
33
+ "channel-formatter": {
34
+ "name": "channel-formatter",
35
+ "slash": "rdc:channel-formatter",
36
+ "category": "tooling",
37
+ "usage": "rdc:channel-formatter <channel> [content]",
38
+ "args": {
39
+ "positional": [
40
+ {
41
+ "name": "channel",
42
+ "required": false,
43
+ "description": "Target channel: linkedin | twitter | slack | email-ext | email-int | pitch-deck | word | pdf-report | web. Inferred from the request if omitted.",
44
+ "accepts": "string"
45
+ },
46
+ {
47
+ "name": "content",
48
+ "required": false,
49
+ "description": "Text/content to format. If omitted, formats content from the surrounding conversation.",
50
+ "accepts": "string"
51
+ }
52
+ ],
53
+ "flags": []
54
+ },
55
+ "requires": [],
56
+ "produces": []
57
+ },
33
58
  "brochure": {
34
59
  "name": "brochure",
35
60
  "slash": "rdc:brochure",
package/CHANGELOG.md CHANGED
@@ -7,6 +7,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ---
9
9
 
10
+ ## v0.21.0 — channel-formatter skill
11
+
12
+ ### Added
13
+ - `rdc:channel-formatter` — channel-native output formatting for LinkedIn, Twitter/X,
14
+ Slack/Teams, Email (external/internal), Pitch Deck, Word/DOCX, PDF Report, and
15
+ Web/Landing Page. Ported from the `output-channel-formatter` claude.ai skill and
16
+ **inlined into a single self-contained SKILL.md** (no `references/` files) so it works
17
+ identically across the CLI plugin, the claude.ai web client (via `rdc_skill_get`, which
18
+ serves only SKILL.md), and Codex.
19
+
20
+ ---
21
+
10
22
  ## v0.9.38 — Clean-box npm install hardening
11
23
 
12
24
  ### Fixed
package/git-sha.json CHANGED
@@ -1,3 +1,3 @@
1
1
  {
2
- "sha": "564ace3c41ccf10d58d8c0cc8c0709d7574b653d"
2
+ "sha": "e772addf91d7db4eff73fb14b43977f1aa578c26"
3
3
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lifeaitools/rdc-skills",
3
- "version": "0.20.5",
3
+ "version": "0.21.0",
4
4
  "description": "RDC typed-agent dispatch skill suite for Claude Code - plan, build, review, overnight builds",
5
5
  "keywords": [
6
6
  "claude-code",
@@ -0,0 +1,299 @@
1
+ ---
2
+ name: rdc:channel-formatter
3
+ description: "Usage `rdc:channel-formatter <channel> [content]` — Apply precise, channel-native formatting to any output: LinkedIn, Twitter/X, Slack/Teams, Email (external/internal), Pitch Deck slides, Word/DOCX, PDF Report, and Web/Landing Page. Use EVERY TIME the user names an output channel/platform/document type, or asks to 'write a post', 'draft an email', 'format this for', 'make this a slide', 'send to LinkedIn', 'write a tweet', 'social media post', or 'reformat this for [channel]'. Each channel has its own Unicode strategy, emphasis system, length limits, and structure — never apply generic markdown to channel-specific output. Self-contained: all channel 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 output precisely for the target channel. This skill is **self-contained** —
17
+ every channel's rules are inlined below. Detect the channel, jump to its section,
18
+ apply its rules exactly. Never apply generic markdown to a channel that doesn't render it.
19
+
20
+ ---
21
+
22
+ ## Channel Detection
23
+
24
+ | If user says / context is... | Channel | Go to section |
25
+ |-------------------------------------------------------|------------------|--------------------------|
26
+ | LinkedIn, post, share on LinkedIn | LinkedIn | [§ LinkedIn](#-linkedin) |
27
+ | Tweet, Twitter, X post, thread | Twitter/X | [§ Twitter / X](#-twitter--x) |
28
+ | Slack, Teams, Discord, chat message | Slack/Teams | [§ Slack / Teams](#-slack--teams) |
29
+ | Email to client/investor/external, cold outreach | Email (External) | [§ Email — External](#-email--external) |
30
+ | Email to team, internal, Slack alternative | Email (Internal) | [§ Email — Internal](#-email--internal) |
31
+ | Pitch deck, slide, investor slide, one-pager slide | Pitch Deck | [§ Pitch Deck](#-pitch-deck) |
32
+ | Word, DOCX, document, report, memo, letter, contract | Word/DOCX | [§ Word / DOCX](#-word--docx) |
33
+ | PDF report, annual report, white paper | PDF Report | [§ PDF Report](#-pdf-report) |
34
+ | Website, landing page, web copy | Web/Landing Page | [§ Web / Landing Page](#-web--landing-page) |
35
+ | Artifact, JSX, React component, Claude artifact | Artifact/JSX | → use the `jsx-author` / `impeccable` skill instead |
36
+
37
+ ---
38
+
39
+ ## Workflow
40
+
41
+ 1. **Detect channel** from the request using the table above.
42
+ 2. **Jump to that channel's section** below and apply all rules exactly — do not rely on memory.
43
+ 3. **Never mix** markdown conventions across channels.
44
+ 4. If the channel is ambiguous, ask once: "Is this for [Channel A] or [Channel B]?"
45
+ 5. Produce the formatted output directly as the deliverable.
46
+
47
+ ## Hard Rules (all channels)
48
+
49
+ - Never apply generic markdown (`##`, `**`, `-`, etc.) to LinkedIn, Email, Slack, or Twitter output.
50
+ - Never use raw LaTeX in LinkedIn, Email, Slack, or Twitter — use Unicode math symbols.
51
+ - Never use Word Styles notation in plain-text channels.
52
+ - Always match the tone register of the channel (formal ≠ casual ≠ punchy).
53
+ - For LIFEAI/PRT/RDC content, maintain REGEN-MODE voice unless Author-Mode is active.
54
+
55
+ ---
56
+
57
+ ## § LinkedIn
58
+
59
+ ### Core Principles
60
+ - No markdown whatsoever — LinkedIn renders it as raw symbols.
61
+ - Unicode is the ONLY way to achieve bold, italic, and special emphasis.
62
+ - Emoticons are structural tools, not decoration — use them as bullet replacements and section markers.
63
+ - Hook in line 1 — LinkedIn truncates after ~2 lines before "see more".
64
+ - White space is content — single-line breaks create rhythm and readability.
65
+
66
+ ### Unicode Character Sets
67
+ **Bold (Mathematical Bold)** — key terms, company names, headlines, CTAs:
68
+ ```
69
+ 𝗔𝗕𝗖𝗗𝗘𝗙𝗚𝗛𝗜𝗝𝗞𝗟𝗠𝗡𝗢𝗣𝗤𝗥𝗦𝗧𝗨𝗩𝗪𝗫𝗬𝗭
70
+ 𝗮𝗯𝗰𝗱𝗲𝗳𝗴𝗵𝗶𝗷𝗸𝗹𝗺𝗻𝗼𝗽𝗾𝗿𝘀𝘁𝘂𝘃𝘄𝘅𝘆𝘇
71
+ 𝟬𝟭𝟮𝟯𝟰𝟱𝟲𝟳𝟴𝟵
72
+ ```
73
+ **Italic (Mathematical Italic)** — emphasis, quotes, sub-themes:
74
+ ```
75
+ 𝘈𝘉𝘊𝘋𝘌𝘍𝘎𝘏𝘐𝘑𝘒𝘓𝘔𝘕𝘖𝘗𝘘𝘙𝘚𝘛𝘜𝘝𝘞𝘟𝘠𝘡
76
+ 𝘢𝘣𝘤𝘥𝘦𝘧𝘨𝘩𝘪𝘫𝘬𝘭𝘮𝘯𝘰𝘱𝘲𝘳𝘴𝘵𝘶𝘷𝘸𝘹𝘺𝘻
77
+ ```
78
+ **Bold Italic:**
79
+ ```
80
+ 𝘼𝘽𝘾𝘿𝙀𝙁𝙂𝙃𝙄𝙅𝙆𝙇𝙈𝙉𝙊𝙋𝙌𝙍𝙎𝙏𝙐𝙑𝙒𝙓𝙔𝙕
81
+ 𝙖𝙗𝙘𝙙𝙚𝙛𝙜𝙝𝙞𝙟𝙠𝙡𝙢𝙣𝙤𝙥𝙦𝙧𝙨𝙩𝙪𝙫𝙬𝙭𝙮𝙯
82
+ ```
83
+ **Math / Equations** — Unicode symbols, never LaTeX: `× ÷ ± ≠ ≤ ≥ ≈ ∴ ∵ Σ Δ α β ∞ √ ² CO₂ H₂O → ← ⟺ % °`
84
+ Example: instead of `E = mc^2` write `E = mc²`; instead of `\alpha_{PRT}` write `αPRT`.
85
+
86
+ ### Emoticons as Structure
87
+ Section openers / bullets: 🔹 primary · 🔸 secondary · ▸ tertiary · ✅ result · ❌ contrast · ⚡ urgency · 🌱 regenerative (LIFEAI/PRT) · 💡 insight · 📌 takeaway · 🔑 key · 📊 data · 🏗️ development · 🤝 partnership · 💰 capital · 🌍 planetary.
88
+ Dividers: `——————————————` · `▬▬▬▬▬▬▬▬▬▬▬▬▬▬▬` · `· · · · · · · · · · · · · ·`
89
+
90
+ ### Post Structure
91
+ **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.
92
+ **Announcement:** bold Unicode headline → what it is (2 sentences) → 🔹×3 key points → why it matters → CTA/link → 1-2 tags.
93
+ **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`.
94
+
95
+ ### Length
96
+ Thought leadership 900–1300 chars · Announcement 400–700 · Hot take 200–400 · Long-form native 1200–2000 words.
97
+
98
+ ### Do NOT
99
+ ❌ `**bold**` (literal asterisks) · ❌ `# Heading` (literal hash) · ❌ `-`/`•` bullets (use emoticons) · ❌ LaTeX · ❌ >5 hashtags · ❌ tagging people unless asked · ❌ walls of text (max 3 lines/paragraph).
100
+
101
+ ---
102
+
103
+ ## § Twitter / X
104
+
105
+ ### Core Principles
106
+ - 280 characters hard limit per tweet. Hook is everything — first 5 words decide readership.
107
+ - Threads are for depth; single tweets for punchy takes. No markdown renders — plain text only.
108
+ - Minimal hashtags (1-2 max, only if genuinely searchable). End with a provocation/question when possible.
109
+
110
+ ### Character Counting
111
+ - 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.
112
+
113
+ ### Single Tweet Structure
114
+ **Hot take:** provocative opener (≤10 words) → the turn/evidence (1-2 lines) → the landing.
115
+ **Announcement:** bold claim first → why it matters (1 line) → link/CTA.
116
+ **Regenerative (Dave):** manifesto line → old way vs new way → the invitation.
117
+
118
+ ### Thread Structure
119
+ 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.
120
+
121
+ ### Hook Formulas
122
+ 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:").
123
+
124
+ ### Hashtags & Emoji
125
+ 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.
126
+
127
+ ### Do NOT
128
+ ❌ 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).
129
+
130
+ ---
131
+
132
+ ## § Slack / Teams
133
+
134
+ ### Core Principles
135
+ - Brevity is respect (people read on their phone). One message = one thought. Use threads. Emoji are punctuation, not decoration.
136
+
137
+ ### Slack Markdown (actually renders)
138
+ Bold `*bold*` · Italic `_italic_` · Strikethrough `~strike~` · Inline code `` `code` `` · Code block ```` ``` ```` · Blockquote `> text` · Bullets `• item`.
139
+ Note: `**bold**` (double asterisk) does NOT render in Slack — use single `*bold*`.
140
+
141
+ ### Length
142
+ 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.
143
+
144
+ ### Structure by Type
145
+ **Question:** `Quick question on [topic] — [one-sentence question]?`
146
+ **Status update:** `*[Project]* update:` then `• Done: …` `• In progress: …` `• Blocked on: … — need [thing] from [person]`.
147
+ **Decision needed:** `Need a call on [topic] by [time].` → `Context: …` → `Options: A) … B) …` → `My lean: …` → `[@person] — your call.`
148
+ **Async FYI:** `FYI: [what happened] — no action needed. [link]`
149
+
150
+ ### Emoji as Punctuation
151
+ ✅ done/approved · ❌ no/blocked · 🔁 in progress · 👀 reviewing · 🙋 I'll take it · 📌 important · ⚡ urgent · 🤔 needs discussion · 💬 let's talk · 🔗 link follows.
152
+
153
+ ### Do NOT
154
+ ❌ 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.
155
+
156
+ ---
157
+
158
+ ## § Email — External
159
+
160
+ ### Core Principles
161
+ - 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.
162
+
163
+ ### Structure
164
+ `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.
165
+
166
+ ### Subject Lines
167
+ 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.
168
+
169
+ ### Tone by Recipient
170
+ 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.
171
+
172
+ ### Openers (use/adapt)
173
+ "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…".
174
+
175
+ ### Closings & Sign-offs
176
+ "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).
177
+ LIFEAI signature: `Dave Ladouceur` / `Founder, LIFEAI | Place Regeneration Trust` / `dave@life.ai | lifeai.com` / `Life before Profits.`
178
+
179
+ ### Length
180
+ Cold outreach 150–250 words · Follow-up 80–150 · Proposal intro 250–400 · Investor update 300–500.
181
+
182
+ ### Do NOT
183
+ ❌ markdown · ❌ walls of text · ❌ >1 ask · ❌ passive voice on the ask · ❌ sycophantic openers/closers · ❌ unspecified attachments.
184
+
185
+ ---
186
+
187
+ ## § Email — Internal
188
+
189
+ ### Core Principles
190
+ - Short, direct, action-oriented. Bullets fine and often preferred. Scannable subject. One topic per email. No pleasantries unless warranted.
191
+
192
+ ### Structure
193
+ `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).
194
+
195
+ ### Subject Prefixes (use consistently)
196
+ `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`.
197
+
198
+ ### Bullets & Tone
199
+ 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.
200
+
201
+ ### Length
202
+ Quick update 3-6 lines · Task assignment 6-12 · Internal brief ≤12-20 (longer → a doc).
203
+
204
+ ### Do NOT
205
+ ❌ markdown · ❌ long preambles · ❌ CC-ing everyone · ❌ "as per my previous email" · ❌ formal sign-offs internally.
206
+
207
+ ---
208
+
209
+ ## § Pitch Deck
210
+
211
+ ### Core Principles
212
+ - 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.
213
+
214
+ ### Slide Anatomy
215
+ 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).
216
+
217
+ ### Headlines Are Assertions, Not Labels
218
+ ❌ "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".
219
+
220
+ ### Standard Deck Architecture (PRT/LIFEAI)
221
+ 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.
222
+
223
+ ### Visual & Bullet Style
224
+ 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.
225
+ Speaker notes: full conversational sentences expanding the slide — `[SPEAKER NOTE: …]`.
226
+ 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.
227
+
228
+ ### Do NOT
229
+ ❌ prose on slides · ❌ >3 bullets · ❌ label headlines · ❌ >2 font sizes in bullet area · ❌ generic stock-photo descriptions · ❌ animations unless requested.
230
+
231
+ ---
232
+
233
+ ## § Word / DOCX
234
+
235
+ ### Core Principles
236
+ - 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).
237
+
238
+ ### Style Hierarchy
239
+ `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`.
240
+
241
+ ### Document Types
242
+ **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.
243
+ **Memo:** Title "MEMORANDUM" → bold-label TO/FROM/DATE/RE → rule → H2 Purpose / Background / Recommendation (List Bullet) → sign-off.
244
+ **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.
245
+ **Letter (formal):** sender block → date → recipient block → `Dear [Name],` → opening (purpose) → body → closing (next steps) → `Sincerely,` → signature.
246
+
247
+ ### Tables, Equations, Page Setup
248
+ 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.
249
+
250
+ ### Do NOT
251
+ ❌ 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.
252
+
253
+ ---
254
+
255
+ ## § PDF Report
256
+
257
+ ### Core Principles
258
+ - 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.
259
+
260
+ ### Structure
261
+ 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…).
262
+ Section numbering: hierarchical decimal, max 3 levels (1.1.1), never 4.
263
+
264
+ ### Tables, Figures, Equations
265
+ 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.
266
+ 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`.
267
+ Confidentiality labels: `CONFIDENTIAL` · `CONFIDENTIAL — For Recipient Only` · `FOR DISCUSSION PURPOSES ONLY` · `NOT FOR DISTRIBUTION` · (none = public).
268
+
269
+ ### Do NOT
270
+ ❌ markdown in final content · ❌ unnumbered sections · ❌ tables without titles/sources · ❌ figures without captions · ❌ invented data (mark "Illustrative") · ❌ exec summaries over one page · ❌ incomplete citations.
271
+
272
+ ---
273
+
274
+ ## § Web / Landing Page
275
+
276
+ ### Core Principles
277
+ - 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).
278
+
279
+ ### Page Structure
280
+ 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.
281
+
282
+ ### Headlines & Body
283
+ 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.
284
+ 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".
285
+
286
+ ### CTA & SEO
287
+ 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.
288
+
289
+ ### Do NOT
290
+ ❌ 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).
291
+
292
+ ---
293
+
294
+ ## Provenance
295
+
296
+ Ported into rdc-skills from the `output-channel-formatter` claude.ai skill (frontend-design-skills pack).
297
+ Originally a multi-file skill (SKILL.md + `references/*.md`); inlined into this single self-contained
298
+ SKILL.md so it works identically across the CLI plugin, the claude.ai web client (via `rdc_skill_get`),
299
+ and Codex — the rdc-skills MCP serves only SKILL.md, so all channel rules must live here.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: rdc:convert
3
- description: "Usage `rdc:convert <input> [--out <dir>] [--to markdown|word] [--images assets|base64|s3]` — Convert .docx/.pptx/.ppt → Markdown (Word OMML equations as KaTeX TeX, tables, images) or Markdown → Word via the build-corpus CLI (PyPI `build-corpus`, npm `regen-mde`). Portable: runs in any session that can reach npm or PyPI — Claude Code CLI and claude.ai both fetch + run it. Use whenever the user asks to convert an Office document, build a Markdown corpus from .docx/.pptx, turn Markdown into a .docx, or 'open the report' in the regen-mde editor (Windows)."
3
+ description: "Usage `rdc:convert <input> [--out <dir>] [--to markdown|word] [--images assets|base64|s3]` — Convert .docx/.pptx/.ppt → Markdown (Word OMML equations as KaTeX TeX, tables, images) or Markdown → Word via the build-corpus CLI (npm `regen.mde`, or pip from GitHub). Portable: runs in any session that can reach npm or PyPI — Claude Code CLI and claude.ai both fetch + run it. Use whenever the user asks to convert an Office document, build a Markdown corpus from .docx/.pptx, turn Markdown into a .docx, or 'open the report' in the regen-mde editor (Windows)."
4
4
  ---
5
5
 
6
6
  # rdc:convert — Office ↔ Markdown conversion (build-corpus) + regen-mde editor
@@ -35,15 +35,15 @@ The command is always `build-corpus <input> [flags]`. Resolve the binary like th
35
35
  equations, the fidelity report, and the escaped-currency fix; the PyPI/npm packages
36
36
  below currently LAG GitHub):
37
37
  ```bash
38
- pip install "git+https://github.com/LIFEAI/build-corpus.git@feat/dual-package-ubuntu"
39
- # once merged to main, drop the @branch:
40
- # pip install "git+https://github.com/LIFEAI/build-corpus.git"
38
+ pip install "git+https://github.com/LIFEAI/build-corpus.git"
39
+ # (the feat/dual-package-ubuntu branch is kept in sync with main as an alias)
41
40
  ```
42
- This installs the `build-corpus` CLI and its deps (latex2mathml, mathml2omml,
43
- python-docx, Pillow, omml2latex). On Debian/Ubuntu externally-managed Python, add
44
- `--break-system-packages`, use a venv, or `pipx install "git+https://github.com/LIFEAI/build-corpus.git@feat/dual-package-ubuntu"`.
45
- 3. **PyPI / npm (only if you do NOT need the latest fixes — these lag GitHub):**
46
- `pipx install build-corpus` · `npx -y -p regen-mde build-corpus <input> [flags]`
41
+ This installs the `build-corpus` CLI and its deps (latex2mathml, python-docx,
42
+ Pillow, omml2latex). The MathML→OMML step is an OWNED converter — there is NO
43
+ `mathml2omml` dependency. On Debian/Ubuntu externally-managed Python, add
44
+ `--break-system-packages`, use a venv, or `pipx install "git+https://github.com/LIFEAI/build-corpus.git"`.
45
+ 3. **npm (only if you do NOT need the latest fixes — lags GitHub; `build-corpus` is
46
+ NOT on PyPI):** `npx -y -p regen.mde build-corpus <input> [flags]`
47
47
  4. **Legacy `.ppt` input** additionally needs LibreOffice (`soffice`) on PATH
48
48
  (`sudo apt install libreoffice`). `.docx`/`.pptx` need nothing extra.
49
49
  5. **S3/R2 image upload** needs the extra: append `[s3]` to the package spec.
@@ -123,8 +123,8 @@ build-corpus report.md --inline-images # → report.inli
123
123
  build-corpus input.docx --images s3 --config build-corpus.config.json
124
124
 
125
125
  # portable one-offs when build-corpus is not yet installed:
126
- pipx run build-corpus input.docx --out out
127
- npx -y -p regen-mde build-corpus input.docx --out out
126
+ pipx run --spec "git+https://github.com/LIFEAI/build-corpus.git" build-corpus input.docx --out out
127
+ npx -y -p regen.mde build-corpus input.docx --out out
128
128
  ```
129
129
 
130
130
  ## Boundaries
@@ -134,5 +134,7 @@ npx -y -p regen-mde build-corpus input.docx --out out
134
134
  - The `regen-mde` GUI is Windows-only; do not attempt to launch it on Linux/macOS.
135
135
 
136
136
  ## Reference
137
- - Package: PyPI `build-corpus`, npm `regen-mde` (version-locked, dual-channel).
137
+ - Package: npm `regen.mde` (CLI bin `build-corpus`, editor bin `regen-mde`). NOT on
138
+ PyPI — install the Python CLI from GitHub (step 2). MathML→OMML is an owned converter
139
+ (no `mathml2omml` dependency).
138
140
  - Source: `github.com/LIFEAI/build-corpus` (`C:/Dev/build-corpus` locally).