
Rq Report Renderer
Turn quant research or backtest output into polished, print-ready HTML reports with RiceQuant-style typography and layout.
Overview
rq-report-renderer is an agent skill most often used in Grow (also Build/docs, Operate/iterate) that applies a RiceQuant-style HTML/CSS report shell to quant and finance outputs.
Install
npx skills add https://github.com/ricequant/ricequant-skills --skill rq-report-rendererWhat is this skill?
- CSS design tokens for paper, accent, and table-head styling suited to financial write-ups
- Two-column layout with sticky sidebar for section navigation in long reports
- Noto Serif SC / sans pairing tuned for bilingual quant narratives
- Radial and linear page backgrounds for a distinct branded report shell
- Scroll-smooth anchors for in-document section jumps
Adoption & trust: 1 installs on skills.sh; 26 GitHub stars; 3/3 security scanners passed (skills.sh audits); trending (+100% hot-view momentum).
What problem does it solve?
You have backtest tables and narrative analysis but no consistent, professional report layout to share with stakeholders.
Who is it for?
Indie quant developers and small funds who publish recurring strategy or performance write-ups in HTML.
Skip if: Teams that only need Jupyter PDF export or who want interactive charting libraries without a fixed document template.
When should I use this skill?
You need a styled HTML report shell for quant or finance content after data and copy exist.
What do I get? / Deliverables
You get a styled, navigable HTML report page ready to fill with sections, metrics, and commentary.
- Styled HTML report page structure with sidebar and typography tokens
Recommended Skills
Journey fit
Spans multiple journey phases - primary shelf plus alternate fits below.
Report rendering is where analytics and research become shareable artifacts—canonical shelf is grow/analytics even when the data was produced during build or operate. analytics fits recurring performance summaries, strategy reviews, and stakeholder-facing metrics decks solo quants ship after running models.
Where it fits
Wrap monthly factor attribution tables in a navigable report before sending to LPs.
Document a new strategy spec with the same visual system as live performance reports.
Publish a post-incident or model-drift review using the sticky TOC sidebar for long narratives.
How it compares
Use as a presentation template skill rather than bolting charts into a generic docs generator or Markdown-to-PDF alone.
Common Questions / FAQ
Who is rq-report-renderer for?
Solo and indie builders in quantitative finance who want agent-assisted HTML reports with a consistent RiceQuant-like visual identity.
When should I use rq-report-renderer?
After analytics or backtests in grow/analytics, when documenting strategies in build/docs, or when iterating operational reviews in operate/iterate—whenever you need a polished report frame.
Is rq-report-renderer safe to install?
Review the Security Audits panel on this Prism page and inspect the skill source in your repo before granting filesystem or network access to your agent.
SKILL.md
READMESKILL.md - Rq Report Renderer
:root { --paper: #fbf8f1; --surface: #fffdf8; --ink: #1d2430; --muted: #5e6875; --line: #d7d4ca; --accent: #a6482f; --accent-deep: #6b2f21; --accent-soft: #efe2d7; --table-head: #293241; --code-bg: #f3efe8; --quote-bg: #f5ede4; --shadow: 0 24px 80px rgba(24, 31, 42, 0.12); } * { box-sizing: border-box; } html { scroll-behavior: smooth; } body { margin: 0; background: radial-gradient(circle at top left, rgba(166, 72, 47, 0.10), transparent 32%), linear-gradient(180deg, #f3ecdf 0%, var(--paper) 18%, #f7f4ee 100%); color: var(--ink); font-family: "Noto Serif SC", "Source Han Serif SC", "Songti SC", "STSong", serif; line-height: 1.75; } a { color: inherit; } .page { width: min(1200px, calc(100vw - 32px)); margin: 24px auto 64px; display: grid; grid-template-columns: 280px minmax(0, 1fr); gap: 24px; } .sidebar { position: sticky; top: 24px; align-self: start; background: rgba(255, 253, 248, 0.94); border: 1px solid rgba(107, 47, 33, 0.10); border-radius: 20px; padding: 24px 22px; box-shadow: var(--shadow); backdrop-filter: blur(16px); } .eyebrow { font-family: "Noto Sans SC", "PingFang SC", "Microsoft YaHei", sans-serif; font-size: 12px; letter-spacing: 0.18em; text-transform: uppercase; color: var(--accent); margin-bottom: 10px; } .sidebar-title { margin: 0; font-size: 28px; line-height: 1.25; } .meta-list { list-style: none; margin: 18px 0 0; padding: 0; font-family: "Noto Sans SC", "PingFang SC", "Microsoft YaHei", sans-serif; font-size: 13px; color: var(--muted); } .meta-list li + li { margin-top: 8px; } .toc { margin-top: 24px; border-top: 1px solid var(--line); padding-top: 20px; } .toc-title { margin: 0 0 10px; font-family: "Noto Sans SC", "PingFang SC", "Microsoft YaHei", sans-serif; font-size: 12px; letter-spacing: 0.14em; text-transform: uppercase; color: var(--muted); } .toc ul { list-style: none; margin: 0; padding: 0; } .toc li + li { margin-top: 8px; } .toc a { display: block; text-decoration: none; color: var(--ink); padding: 6px 8px; border-radius: 8px; transition: background-color 120ms ease, transform 120ms ease; } .toc a:hover { background: var(--accent-soft); transform: translateX(2px); } .toc .level-3 a, .toc .level-4 a { padding-left: 18px; color: var(--muted); } .report { background: var(--surface); border: 1px solid rgba(41, 50, 65, 0.08); border-radius: 28px; overflow: hidden; box-shadow: var(--shadow); } .cover { padding: 56px 56px 44px; background: linear-gradient(135deg, rgba(166, 72, 47, 0.96), rgba(76, 33, 24, 0.95)), linear-gradient(180deg, #784032 0%, #3d1e17 100%); color: #fffaf3; } .cover-kicker { margin: 0 0 10px; font-family: "Noto Sans SC", "PingFang SC", "Microsoft YaHei", sans-serif; letter-spacing: 0.16em; text-transform: uppercase; font-size: 12px; opacity: 0.8; } .cover-title { margin: 0; font-size: clamp(32px, 4vw, 48px); line-height: 1.18; } .cover-subtitle { margin: 16px 0 0; font-size: 17px; line-height: 1.6; max-width: 56ch; opacity: 0.92; } .cover-meta { margin-top: 24px; display: flex; flex-wrap: wrap; gap: 12px; font-family: "Noto Sans SC", "PingFang SC", "Microsoft YaHei", sans-serif; font-size: 13px; } .chip { border: 1px solid rgba(255, 250, 243, 0.24); border-radius: 999px; padding: 6px 12px; background: rgba(255, 250, 243, 0.08); } .content { padding: 40px 56px 56px; } .content h1, .content h2, .content h3, .content h4 { scroll-margin-top: 24px; } .content h1 { margin: 32px 0 16px; font-size: 30px; line-height: 1.28; color: var(--accent-deep); } .content h2 { margin: 36px 0 14px; padding-bottom: 8px; border-bottom: 1px solid rgba(166, 72, 47, 0.22); font-size: 24px; line-height: 1.3; color: var(--accent-deep); } .content h3 { margin: 26px 0 10px; font-size: 19px; line-height: 1.35; } .content h4 {