$npx -y skills add MagicCube/agentara --skill article-posterGenerate a beautifully designed infographic poster from an article URL or text content. Trigger when user says "article poster", "文章海报", "infographic", "信息图", "make a poster", "生成海报", "visual summary", or requests to convert an article/blog into a shareable image. NOT for generic
| 1 | # Article Poster |
| 2 | |
| 3 | Converts an article (URL or pasted text) into a beautifully designed infographic poster image. |
| 4 | |
| 5 | ## How It Works |
| 6 | |
| 7 | 1. **Read the article** — Fetch URL via `web_fetch` or use provided text |
| 8 | 2. **Summarize into JSON** — Output a compact JSON data structure (see schema below) |
| 9 | 3. **Render & screenshot** — Run `render.py` which injects JSON into `template.html` and screenshots to PNG |
| 10 | |
| 11 | This design minimizes token cost: the HTML/CSS template is a static asset (~0 generation tokens). You only generate the JSON content. |
| 12 | |
| 13 | ## Step 1: Read the Article |
| 14 | |
| 15 | - If given a URL: use `web_fetch` to retrieve content |
| 16 | - If given textual or image content: use it directly |
| 17 | - Read and deeply understand the article before summarizing |
| 18 | |
| 19 | ## Step 2: Save Poster Data as JSON |
| 20 | |
| 21 | Write the poster data to `workspace/outputs/posters/poster_data.json` using the Write tool. Do NOT generate a Python script — just write the JSON file directly. |
| 22 | |
| 23 | > **IMPORTANT**: Do NOT create a `gen_poster.py` or any intermediate HTML generation script. render.py handles template injection internally. Your only job is to write `poster_data.json`. |
| 24 | |
| 25 | Follow this schema **exactly**: |
| 26 | |
| 27 | ```json |
| 28 | { |
| 29 | "source": "ANTHROPIC ENGINEERING", |
| 30 | "category": "HARNESS DESIGN", |
| 31 | "title": "Harness 设计:突破 Agent 编码前沿的关键架构", |
| 32 | "subtitle": "Anthropic 用一套受 GAN 启发的多智能体架构……核心不是更聪明的单 Agent,而是如何为强模型设计正确的 harness。", |
| 33 | "layout": "single", |
| 34 | "sections": [ |
| 35 | { |
| 36 | "number": 1, |
| 37 | "color": "brown", |
| 38 | "title": "为什么简单方案会失效?", |
| 39 | "cards": [ |
| 40 | { |
| 41 | "type": "text", |
| 42 | "heading": "上下文焦虑", |
| 43 | "body": "上下文一满,模型就会倾向于提前结束工作……" |
| 44 | }, |
| 45 | { |
| 46 | "type": "text", |
| 47 | "heading": "自我评估偏差", |
| 48 | "body": "让模型评价自己的产出时……" |
| 49 | } |
| 50 | ] |
| 51 | }, |
| 52 | { |
| 53 | "number": 2, |
| 54 | "color": "olive", |
| 55 | "title": "架构核心:生成器 / 评估器分离", |
| 56 | "cards": [ |
| 57 | { |
| 58 | "type": "highlight", |
| 59 | "heading": "受 GAN 启发,但不只是`多加一个 Agent`", |
| 60 | "body": "Anthropic 把`创造`与`评判`彻底解耦……" |
| 61 | } |
| 62 | ] |
| 63 | }, |
| 64 | { |
| 65 | "number": 4, |
| 66 | "color": "teal", |
| 67 | "title": "全栈开发 V1:三智能体分工", |
| 68 | "cards": [ |
| 69 | { |
| 70 | "type": "tags", |
| 71 | "items": [ |
| 72 | { "tag": "Planner", "text": "把 1-4 句需求扩展成完整产品规格……" }, |
| 73 | { "tag": "Generator", "text": "按 Sprint 逐步实现……" }, |
| 74 | { "tag": "Evaluator", "text": "通过 Playwright 测运行中的应用……" } |
| 75 | ] |
| 76 | } |
| 77 | ] |
| 78 | }, |
| 79 | { |
| 80 | "number": 5, |
| 81 | "color": "amber", |
| 82 | "title": "架构演进:从复杂到精简", |
| 83 | "cards": [ |
| 84 | { |
| 85 | "type": "compare", |
| 86 | "left": { "heading": "V1:重型评估架构", "body": "单个 DAW 应用约 6 小时 / $200……" }, |
| 87 | "right": { "heading": "V2:Claude 4.6 后减负", "body": "去掉 Sprint、把评估器后置……" } |
| 88 | } |
| 89 | ] |
| 90 | }, |
| 91 | { |
| 92 | "number": 6, |
| 93 | "color": "sage", |
| 94 | "title": "深层方法论", |
| 95 | "cards": [ |
| 96 | { |
| 97 | "type": "bullets", |
| 98 | "items": [ |
| 99 | "**主观质量的可操作化:** 把`这设计好吗`转成`是否符合设计原则`。", |
| 100 | "**结构化产物传递:** 重置上下文时,用文件而不是对话历史传状态。", |
| 101 | "**持续压力测试:** 每个组件都编码了对模型能力的假设,而这些假设会随新模型迭代失效。" |
| 102 | ] |
| 103 | }, |
| 104 | { |
| 105 | "type": "callout", |
| 106 | "label": "关键洞察", |
| 107 | "body": "评估器是否必要,不取决于`它是不是好设计`,而取决于任务是否仍处在模型能力边界之外。" |
| 108 | } |
| 109 | ] |
| 110 | } |
| 111 | ] |
| 112 | } |
| 113 | ``` |
| 114 | |
| 115 | ### JSON Schema Rules |
| 116 | |
| 117 | **`layout`** (optional) — Layout mode: |
| 118 | - `"single"`: Single column layout (default) |
| 119 | - `"double"`: Two column layout (odd sections left, even sections right) |
| 120 | |
| 121 | **`sections[]`** — Any number of sections based on content needs. Each section has: |
| 122 | - `number`: Display number (1-based) |
| 123 | - `color`: One of `brown`, `olive`, `terracotta`, `teal`, `amber`, `sage`, `slate`, `rose` |
| 124 | - `title`: Section heading (concise, < 20 chars ideal) |
| 125 | - `cards[]`: Array of cards. Card types: |
| 126 | |
| 127 | | type | fields | description | |
| 128 | |------|--------|-------------| |
| 129 | | `text` | `heading`, `body` | Simple card with title + paragraph | |
| 130 | | `highlight` | `heading`, `body` | Card with colored left border accent | |
| 131 | | `tags` | `items[{tag, text}]` | Labeled tag + description list (like Planner/Generator/Evaluator) | |
| 132 | | `compare` | `left{heading,body}`, `right{heading,body}` | Side-by-side comparison boxes | |
| 133 | | `bullets` | `items[]` | Bullet list (supports **bold:** prefix) | |
| 134 | | `callout` | `label`, `body` | Highlighted callout box with label badge | |
| 135 | |
| 136 | ### Content Guidelines |
| 137 | |
| 138 | - **Language**: Match the user's language. Default Chinese for Chinese users. |
| 139 | - **Conciseness**: Each `body` should be 1-3 sentences. This is a poster, not a blog. |
| 140 | - **Bold keywords**: Use `**keyword**` for emphasis in body text. |
| 141 | - **Section count**: Use as many sections as needed to cover the content effectively (typically 3-10). |
| 142 | - **Layout**: Choose "single" for focused content or |