Initial skills documentation — 25 categories, all SKILL.md + references + scripts
This commit is contained in:
@@ -0,0 +1,14 @@
|
||||
# Consolidated Signature Reference
|
||||
|
||||
The master reference for Sho'Nuff's email signature lives at:
|
||||
`/root/.hermes/references/shonuff-signature.py`
|
||||
|
||||
This module exports:
|
||||
- `TITLES` (list) — 13 randomized title options
|
||||
- `CLOSINGS` (list) — 8 randomized closing quote options
|
||||
- `build_signature_block()` — returns full HTML signature with random title + closing
|
||||
|
||||
The badge image is at `https://core.itpropartner.com/shonuff-signature.png`.
|
||||
Must be a valid PNG (not a JPEG with .png extension).
|
||||
|
||||
Do NOT use the legacy files `shonuff-titles.py` or `shonuff-closings.py` — they are superseded.
|
||||
@@ -0,0 +1,38 @@
|
||||
# HTML Email Rendering Order
|
||||
|
||||
## CRITICAL: Regex substitution order
|
||||
|
||||
When converting Markdown email body to HTML, the order of operations matters:
|
||||
|
||||
**WRONG (produces literal `## Title` in HTML):**
|
||||
1. Convert `\n` to `<br>` FIRST
|
||||
2. Then try to match `^## (.+)$` — FAILS because lines are now `<br>`-delimited
|
||||
|
||||
**RIGHT (renders styled `<h2>` in HTML):**
|
||||
1. Regex-substitute headers FIRST (`^## (.+)$` → `<h2>\1</h2>` with `re.MULTILINE`)
|
||||
2. Regex-substitute horizontal rules (`^---$` → `<hr>`)
|
||||
3. Convert bold (`**text**` → `<strong>`)
|
||||
4. Convert newlines LAST (`\n` → `<br>`)
|
||||
|
||||
```python
|
||||
import re
|
||||
|
||||
html = body
|
||||
html = re.sub(r'^## (.+)$', r'<h2 style="...">\1</h2>', html, flags=re.MULTILINE)
|
||||
html = re.sub(r'^### (.+)$', r'<h3 style="...">\1</h3>', html, flags=re.MULTILINE)
|
||||
html = re.sub(r'^---$', r'<hr style="...">', html, flags=re.MULTILINE)
|
||||
html = re.sub(r'\*\*(.+?)\*\*', r'<strong>\1</strong>', html)
|
||||
html = html.replace('\n', '<br>')
|
||||
```
|
||||
|
||||
## Always use multipart/alternative
|
||||
|
||||
- Plain text part first (keeps raw markdown — degrades gracefully)
|
||||
- HTML part second (email clients render the last part they understand)
|
||||
- Wrapped in full `<!DOCTYPE html>` with inline `<style>` block
|
||||
|
||||
## Common failure modes
|
||||
|
||||
- **Literal `##` in output** — newlines converted to `<br>` before header regex. Fix: reorder steps.
|
||||
- **Raw `---` visible** — `^---$` regex didn't match because line is not at line start after `<br>` conversion.
|
||||
- **`**text**` visible** — bold regex ran before or without proper newline handling.
|
||||
@@ -0,0 +1,52 @@
|
||||
# HTML Email Table Patterns
|
||||
|
||||
When sending structured/tabular data by email (fee schedules, pricing, comparisons, timelines):
|
||||
|
||||
## CRITICAL: Never regex-convert markdown tables
|
||||
|
||||
Email clients (Gmail, Outlook, Yahoo) strip `<style>` blocks and misrender complex markdown-to-HTML conversions. **Build tables by hand in Python string interpolation.**
|
||||
|
||||
## Correct pattern (hand-crafted HTML)
|
||||
|
||||
```python
|
||||
rows = [
|
||||
("Tier 1", "$3,300 (22%)", "$11,700", "2-14 days"),
|
||||
("Tier 2", "$4,500 (30%)", "$10,500", "15-30 days"),
|
||||
]
|
||||
html = '<table cellpadding="6" cellspacing="0" border="0" style="font-size:13px;color:#333;">'
|
||||
html += '<tr style="background:#f5f5f5;"><td style="border:1px solid #ddd;padding:6px 12px;"><b>Scenario</b></td>... </tr>'
|
||||
for r in rows:
|
||||
html += f'<tr><td style="border:1px solid #ddd;padding:6px 12px;">{r[0]}</td>...'
|
||||
html += '</table>'
|
||||
```
|
||||
|
||||
## Cell styling
|
||||
|
||||
| Attribute | Value |
|
||||
|-----------|-------|
|
||||
| `cellpadding` | `"6"` |
|
||||
| `cellspacing` | `"0"` |
|
||||
| `border` | `"0"` |
|
||||
| Individual cell style | `border:1px solid #ddd;padding:6px 12px;` |
|
||||
| Header row | `<tr style="background:#f5f5f5;">` |
|
||||
| Merged cells | `rowspan="2"` with `vertical-align:middle` |
|
||||
|
||||
## Multi-part message construction
|
||||
|
||||
```python
|
||||
msg = MIMEMultipart('alternative')
|
||||
plain = MIMEText(markdown_text, 'plain')
|
||||
html_part = MIMEText(full_html_doc, 'html')
|
||||
msg.attach(plain) # plain text first
|
||||
msg.attach(html_part) # HTML second (client picks last understood)
|
||||
```
|
||||
|
||||
## Common failure: misplaced closing quote
|
||||
|
||||
The Sho'Nuff closing quote goes between the last body paragraph and the signature `<hr>` divider, NOT inside the signature table block. Pattern:
|
||||
|
||||
```python
|
||||
full_html = body_content + f'<p><em>{closing}</em></p>' + sig_html
|
||||
```
|
||||
|
||||
Not `body_content + sig_html_with_quote_buried_inside`.
|
||||
@@ -0,0 +1,46 @@
|
||||
# Sho'Nuff Email Signature — Canonical Format
|
||||
## Established Jul 7, 2026
|
||||
|
||||
### Order
|
||||
1. Closing quote
|
||||
2. Red divider bar
|
||||
3. Signature block (badge + name/title/company/email)
|
||||
|
||||
### Closing quote
|
||||
Randomly selected from `/root/.hermes/references/shonuff-closings.py` (8 Sho'Nuff quotes from The Last Dragon).
|
||||
|
||||
### Red divider
|
||||
```html
|
||||
<hr style="border:none;height:2px;width:40px;background:#cc0000;margin:0 0 12px 0;border-radius:2px;">
|
||||
```
|
||||
|
||||
### Signature block (table layout)
|
||||
```html
|
||||
<table cellpadding="0" cellspacing="0" border="0" style="font-family:'Inter',-apple-system,BlinkMacSystemFont,'Segoe UI',Roboto,sans-serif;color:#2c2c2c;font-size:13px;line-height:1.6;">
|
||||
<tr>
|
||||
<td style="padding-right:14px;vertical-align:middle;width:80px;">
|
||||
<img src="..." alt="SB" width="72" height="auto" style="border-radius:50%;display:block;max-width:72px;">
|
||||
</td>
|
||||
<td style="vertical-align:middle;">
|
||||
<div style="font-size:15px;font-weight:700;color:#1a1a1a;letter-spacing:-0.2px;">Sho'Nuff Brown</div>
|
||||
<div style="font-size:12px;color:#888888;margin-bottom:1px;">{title}</div>
|
||||
<div style="font-size:12px;color:#aaaaaa;margin-bottom:6px;">iAmGMB</div>
|
||||
<table cellpadding="0" cellspacing="0" border="0" style="font-size:12px;color:#999999;line-height:1.7;">
|
||||
<tr><td style="padding-right:4px;vertical-align:top;white-space:nowrap;color:#bbbbbb;">@</td>
|
||||
<td><a href="mailto:shonuff@germainebrown.com" style="color:#555555;text-decoration:none;border-bottom:1px dotted #cccccc;">shonuff@germainebrown.com</a></td></tr>
|
||||
</table>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
```
|
||||
|
||||
### Key formatting rules
|
||||
- FROM address: shonuff@germainebrown.com
|
||||
- Title: random from 13 options in shonuff-titles.py
|
||||
- Closing: random from 8 options in shonuff-closings.py
|
||||
- Company: "iAmGMB" (placeholder — may change)
|
||||
- Badge image: `https://core.itpropartner.com/shonuff-signature.png`
|
||||
- For emails: embed as base64 JPEG for maximum Gmail compatibility
|
||||
- Local copy at /var/www/static/shonuff-signature.png
|
||||
- Reference files at /root/.hermes/references/
|
||||
- NEVER use send-shonuff.py for structured HTML emails — build HTML manually
|
||||
@@ -0,0 +1,35 @@
|
||||
# Welcome Email Pattern
|
||||
|
||||
When drafting a welcome/onboarding email for a new Hermes user, **first load the `email-style-guide` skill** for the full formatting rules. The welcome email follows the Gemini-derived style rules.
|
||||
|
||||
## Formatting requirements
|
||||
|
||||
- `## Title` + `---` divider (per style guide)
|
||||
- `###` section headers only -- no H4+
|
||||
- **Bold lead-ins** for paragraph context
|
||||
- **Ordered lists** (1. 2. 3.) for accomplishments -- NOT bullet dashes, NOT em dashes
|
||||
- **Unordered lists** (hyphens) for simple groupings
|
||||
- Hyphens not em dashes, full words not contractions, "example:" not "e.g."
|
||||
- No raw URLs -- all links in `[Action Description](URL)` format
|
||||
- H2 rendered as `<h2>` in HTML, H3 as `<h3>`, `---` as the red accent `<hr>`
|
||||
|
||||
## Section structure (in order)
|
||||
|
||||
1. **Heading + divider:** `## Welcome to Hermes, [Name].` then `---`
|
||||
2. **What Hermes Is:** paragraph explaining Hermes as a personal AI agent on a private server
|
||||
3. **What We've Built:** ordered list (1. 2. 3.) of real accomplishments the main user has achieved with their agent. Each item: bold lead-in + hyphen + description. Example: "1. **Task name** - What was accomplished."
|
||||
4. **Email:** two bold lead-in paragraphs. First asks if they want their email set up ("Yahoo access."). Second states the permission policy: Sho'Nuff will not act without explicit approval.
|
||||
5. **Backup & Safety:** unordered list (hyphens) of backup layers: live sync, daily backup, provider snapshots, standby recovery, model fallback.
|
||||
6. **Getting Started with Telegram:** three numbered steps. Step 1 = create bot via BotFather. Step 2 = get user ID via userinfobot. Step 3 = reply with token + ID + email decision.
|
||||
7. **Commands:** unordered list of useful Hermes commands (/queue, /retry, /undo, /clear, /title, /goal, /compress).
|
||||
8. **Server Details:** minimal -- primary model (provided by main user) and backup model (built in). No IPs, no SSH, no local model address.
|
||||
9. **Close:** Sho'Nuff signature with random closing quote (no "Thanks" or "Regards").
|
||||
|
||||
## Delivery workflow
|
||||
|
||||
1. Draft the full email with body + signature
|
||||
2. Send draft to Germaine (g@germainebrown.com) for approval, BCC him
|
||||
3. After approval, send to the recipient (e.g. browo955@yahoo.com), BCC Germaine
|
||||
4. From: `shonuff@germainebrown.com`
|
||||
|
||||
The style guide (`email-style-guide` skill) has the definitive rules for HTML rendering, closing quotes, rotating titles, and signature anatomy. Load it before composing the email.
|
||||
Reference in New Issue
Block a user