---
name: output-formatting
description: "Reusable Discord-safe output formatting for cron briefings and reports — emoji section headers, box-drawing separators, color-coded tables, tone tags, and a structural recipe that makes any data dump scannable. Drop into any agent's skills folder."
version: 1.0.0
author: PaperAgent
tags: [formatting, discord, briefings, cron, reports, markdown, tables, emoji]
platforms: [discord, telegram, slack, terminal]
---

# Output Formatting — Cron Briefing & Report Recipe

Make cron jobs, briefings, and reports **scannable in under 5 seconds**. This skill encodes a structural recipe (not just a style) for delivering dense data in Discord/Telegram/Slack without the reader having to hunt for the important parts.

Built from PaperAgent's daily market briefing format, generalized for any domain (markets, ops, CI, devops alerts, financial reports, project status).

## When to use

Load this skill whenever you:
- Deliver a **cron-scheduled briefing** (pre-market, end-of-day, weekly summary)
- Send a **status report** (system health, sprint recap, ops dashboard)
- Format **multi-section data** (alerts + levels + drivers + read)
- Need to fit **a lot of information in a small Discord message** without losing scannability

If the output is a single fact ("the build passed"), you don't need this skill. If the output has **3+ sections or 2+ tables**, you do.

## The Recipe — 7 Layers

Every briefing should layer these in order. Skip a layer only if the data doesn't support it.

### 1. Title Bar (1 line)

Pattern: `<emoji> <TYPE> — <DATE> | <Status>`

Examples:
- `📊 MIDDAY BRIEF — 2026-06-03 | Market Open`
- `🚨 OPS ALERT — 2026-06-03 14:23 CST | 3 incidents`
- `🏛 PRE-MARKET BRIEF — Wed Jun 3 | 30 min to open`
- `📈 EARNINGS RECAP — NVDA Q1 FY27 | Beat + raised guidance`

The title bar answers "what is this, when, and what's the overall state" in one line. The emoji is the visual anchor — pick from a small consistent set (see emoji palette below).

### 2. Box-Drawing Separators

Use `━━━` (U+2501 BOX DRAWINGS HEAVY HORIZONTAL) between sections. Never use `---` or `===` — they read as horizontal rules and don't visually group sections.

```
━━━━━━━━━━━━━━━━━━━━
📈 INDICES
━━━━━━━━━━━━━━━━━━━━
```

Width: 20 chars is the default. Match it to your section length — longer section names get longer separators.

### 3. Emoji Section Headers

Each section gets one emoji + ALL-CAPS label. Keep section names short (1-3 words).

| Emoji | Use for |
|-------|---------|
| 📊 | Data, numbers, summary stats |
| 📈 | Bullish / up / gainers / leaders |
| 📉 | Bearish / down / losers / decliners |
| 🔑 | Key levels, watch points, thresholds |
| 🔥 | Hot / breaking / top priority |
| ⚠️ | Warnings, risks, things to watch out for |
| 🚨 | Alerts, incidents, things needing action |
| 🌙 | After-hours / overnight / pre-market |
| 🏛 | Macro / institutional / pre-market |
| 🎯 | Read, summary, takeaway, conclusion |
| 💡 | Insight, tip, educational note |
| ✅ | Checked / passed / complete |
| ❌ | Failed / blocked / error |
| 🟢 | Positive / up / healthy |
| 🔴 | Negative / down / critical |

Don't use more than 8 different emojis per briefing. Repetition is fine.

### 4. Bullet Points, Always

- Every data point is a bullet
- One fact per bullet
- Lead with the subject (ticker, service, repo), then the value
- Format: `• <SUBJECT>: <value> — <optional context>`

```
• SPX: 5,234.50 (+0.42%)
• AAPL: $214.30 — earnings beat, raised FY guidance
• db-prod-east: 247ms p99 — up from 89ms baseline
```

Never write prose paragraphs in a briefing. Bullets only. Prose is for chat replies; bullets are for scheduled reports.

### 5. Tone Tags (when there's a directional read)

For data with bullish/bearish/neutral or healthy/degraded/down semantics, lead the section with the tag:

```
🎯 MARKET READ
Bullish — breadth improving, VIX compressing, futures green.
```

```
🚨 SERVICE STATUS
Degraded — db-prod-east p99 latency 2.7x baseline.
```

Tone tags go on their own line, bolded or with the emoji prefix, never inline with data.

### 6. Color Coding (Discord-safe)

Discord markdown doesn't support true colors, but these three signals read as "color" in chat:

- **🔴 / ❌** = red = bad, down, failed
- **🟢 / ✅** = green = good, up, passed
- **🟡 / ⚠️** = yellow = caution, watch, mixed

For richer color, **bold the magnitude** (`**-7.3%**`) and use the emoji as the color signal. The eye reads emoji → magnitude together.

### 7. Closing Read (optional but recommended)

End with a one-line takeaway under `🎯 <READ>` or `🎯 TAKEAWAY`. This is where you earn the right to have sent the message — if the reader only reads the title and the read, they got the point.

```
🎯 TAKEAWAY
Hold the line — infra stable, one yellow flag on db latency worth a look before close.
```

---

## Format Templates

### Trading / Market Briefing

```
📊 MIDDAY BRIEF — 2026-06-03 | Market Open

━━━━━━━━━━━━━━━━━━━━
📈 INDICES (REGULAR CLOSE)
━━━━━━━━━━━━━━━━━━━━
• SPX: 5,234.50 (+0.42%) — 2-day: 5,212 → 5,234
• NDX: 18,456.20 (+0.61%)
• DJI: 39,128.45 (+0.18%)
• RUT: 2,089.10 (-0.22%)
• VIX: 13.42 (-2.1%) 🟢 compressing

━━━━━━━━━━━━━━━━━━━━
🌙 AFTER HOURS MOVERS
━━━━━━━━━━━━━━━━━━━━
🔴 BIG DIPS:
• TICKER: $XXX.XX (-X.XX%)

🟢 LEADERS:
• TICKER: $XXX.XX (+X.XX%)

━━━━━━━━━━━━━━━━━━━━
🔑 KEY LEVELS TO WATCH
━━━━━━━━━━━━━━━━━━━━
• SPX: R 5,250 | S 5,200
• NDX: R 18,500 | S 18,400
• VIX: 13 — compressing, watch 12 break

━━━━━━━━━━━━━━━━━━━━
🔥 TOP NEWS DRIVERS
━━━━━━━━━━━━━━━━━━━━
1. [Headline — source]
2. [Earnings — TICKER beat/miss detail]
3. [Fed/macro]
4. [Geopolitical]

━━━━━━━━━━━━━━━━━━━━
🎯 MARKET READ
━━━━━━━━━━━━━━━━━━━━
Bullish — breadth positive, VIX cooling, futures green into close.
```

### Ops / DevOps Alert

```
🚨 OPS ALERT — 2026-06-03 14:23 CST | 3 incidents

━━━━━━━━━━━━━━━━━━━━
🔥 ACTIVE INCIDENTS
━━━━━━━━━━━━━━━━━━━━
🔴 P1: db-prod-east — p99 latency 247ms (baseline 89ms)
🔴 P1: api-gateway — 5xx rate 2.3% (baseline 0.4%)
🟡 P3: cdn-eu-west — cache hit rate down to 78% (baseline 91%)

━━━━━━━━━━━━━━━━━━━━
📊 SYSTEM HEALTH
━━━━━━━━━━━━━━━━━━━━
🟢 web-tier: nominal
🟢 worker-pool: nominal
🟢 auth-service: nominal
🟡 cdn-eu-west: degraded
🔴 db-prod-east: critical
🔴 api-gateway: critical

━━━━━━━━━━━━━━━━━━━━
🔑 IMMEDIATE ACTIONS
━━━━━━━━━━━━━━━━━━━━
1. Failover db-prod-east → db-prod-west
2. Roll back api-gateway deploy #4521
3. Page on-call for db investigation

━━━━━━━━━━━━━━━━━━━━
🎯 READ
━━━━━━━━━━━━━━━━━━━━
Degraded — 2 P1s in core path, both have known mitigations queued.
```

### Project Status / Sprint Recap

```
📊 WEEKLY STATUS — W22 2026-06-03

━━━━━━━━━━━━━━━━━━━━
🎯 HEADLINE
━━━━━━━━━━━━━━━━━━━━
On track — sprint goal met, 1 carryover, no blockers.

━━━━━━━━━━━━━━━━━━━━
✅ SHIPPED THIS WEEK
━━━━━━━━━━━━━━━━━━━━
• Feature: dark mode (PR #234 merged)
• Feature: export to CSV (PR #231 merged)
• Fix: login redirect loop (PR #229 merged)

━━━━━━━━━━━━━━━━━━━━
📊 VELOCITY
━━━━━━━━━━━━━━━━━━━━
• Committed: 42 pts
• Delivered: 38 pts (90%)
• Carryover: 4 pts (1 story)

━━━━━━━━━━━━━━━━━━━━
⚠️ RISKS / BLOCKERS
━━━━━━━━━━━━━━━━━━━━
• Staging env flakiness slowing QA — investigating
• Vendor API deprecation hits in 3 weeks — spike scheduled

━━━━━━━━━━━━━━━━━━━━
🔑 NEXT WEEK
━━━━━━━━━━━━━━━━━━━━
• Carryover: export-to-PDF story
• New: onboarding flow v2 (8 pts)
• Spike: vendor migration path
```

---

## Discord-Specific Pitfalls

These break the format. Don't do them.

- **Don't use `#` headings** (`# Title`, `## Subtitle`). Discord renders them as plain text in some clients, and they look like comments. Use emoji + ALL-CAPS instead.
- **Don't use `|` tables**. Discord shows the literal pipes, not a table. Tables in code blocks are fine (see below).
- **Don't use `>` blockquotes** for emphasis. They render as gray italics and disappear visually.
- **Triple-backtick code blocks** are the ONLY way to get a real rendered table in Discord. Use them for multi-column data.
- **Box drawing chars** (`━`, `┃`, `┏`) work in Discord, Telegram, and Slack. They're the visual separator. Don't substitute ASCII (`-`, `=`, `|`).
- **Emojis are part of the content** — don't strip them for "minimalism." They're load-bearing for scannability.
- **Message length** — Discord hard-caps at 4000 chars per message. If your briefing is longer, split it: title + first 2 sections in message 1, then continue with `(continued)` in message 2.

### Tables: when to use code blocks

Markdown tables in Discord render as raw text. For 2+ columns of structured data, wrap in a code block:

```
┌──────────────┬────────┬────────┬────────┐
│ TICKER       │  PRICE │  %CHG  │  VOL   │
├──────────────┼────────┼────────┼────────┤
│ AAPL         │ $214.3 │ +1.2%  │  42.1M │
│ NVDA         │ $912.4 │ +3.4%  │  88.7M │
│ TSLA         │ $178.9 │ -0.8%  │  61.3M │
└──────────────┴────────┴────────┴────────┘
```

Or for a tighter look without vertical bars:

```
TICKER    PRICE     %CHG     VOL
AAPL      $214.3    +1.2%    42.1M
NVDA      $912.4    +3.4%    88.7M
TSLA      $178.9    -0.8%    61.3M
```

The second form is more compact. Use the first when the data is complex (5+ columns, mixed types).

---

## The 5-Second Test

Before sending any briefing, read it once and ask: "If the reader skims for 5 seconds, do they get the title, the state, and the takeaway?"

If yes → ship.
If no → the structure is wrong, not the data. Add separators, tighten bullets, lead with the read.

---

## Reuse / Share

This skill is intentionally self-contained — no dependencies, no API calls, no env vars. To share with another agent:

1. Copy the `output-formatting/` folder into their `skills/` directory
2. They call `skill_view(name='output-formatting')` once to load it
3. They follow the 7-layer recipe on their own cron outputs

**Compatible with:** any Hermes agent profile, any agent that reads SKILL.md frontmatter, any cron job that delivers to Discord/Telegram/Slack.

**Incompatible with:** plain-text-only outputs (email-only agents with no markdown rendering), agents that strip emoji, agents that hard-wrap at 80 chars (breaks box-drawing alignment).

---

## How to use this skill from a cron job

In your `cronjob` `prompt=`, add a line like:

```
Follow the output-formatting skill recipe for structure. Title bar, box-drawing separators, emoji section headers, bullets only, closing read.
```

Or attach the skill directly via `skills=['output-formatting']` on `cronjob` create. The cron run will load it before executing the prompt.

## See also

- `references/emoji-palette.md` — full emoji vocabulary grouped by semantic domain (markets, ops, dev, finance, alerts)
- `templates/trading-brief.md` — full pre-market brief template
- `templates/ops-alert.md` — full ops alert template with severity levels
- `templates/project-status.md` — weekly project status template
