# AI Daily Card

> Generate a fixed daily Markdown and 1500px PNG AI news card from the AI Hot public API when the user asks for today's AI daily card or invokes $ai-daily-card. Keeps source-level provenance and never sends the result to a group.

- Skill: `siyuanailab/ai-daily-card` (Agent Skill, multi-file: 16 files)
- Install (CLI): `npx skillmds@latest add siyuanailab/ai-daily-card`
- Raw SKILL.md: https://api.skillmd.com/api/skills/siyuanailab/ai-daily-card/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Docs & Writing
- Author: SiyuanAiLab (https://skillmd.com/u/siyuanailab)
- Updated: 2026-09-22
- Page: https://skillmd.com/skills/siyuanailab/ai-daily-card

---


# AI Daily Card (Beta)

Create the two fixed deliverables for the current `Asia/Shanghai` day:

- `output/AI日报-今日.md`
- `output/AI日报-今日.png`

The project containing this file is the canonical Skill root. Resolve paths from
that root even when the Skill was discovered through a symlink.

## Idempotency gate

Before any network request or write, read only the Markdown frontmatter. If
`date` equals today in `Asia/Shanghai` and `status` is `success`, stop silently.
Do not invoke the collector, renderer, package manager, or any network tool.

If the file is missing, stale, or not successful, run the complete workflow.

## Complete workflow

1. Ensure dependencies were installed with `npm ci` and
   `npx playwright install chromium`. Do not silently install during a Scheduled
   run; report the missing dependency.
2. Collect the previous 24 hours into `.runtime/raw.json`:

   ```bash
   python3 scripts/fetch_aihot.py \
     --state-dir .runtime \
     --output .runtime/raw.json
   ```

   A cache hit is allowed. An empty result, missing field, or interrupted page is
   a hard failure.
3. Read `.runtime/raw.json` and curate by judgment, not score alone:
   deduplicate the same event, choose two headlines, then target 15–18 unique
   items across the configured sections. A weak section may be empty or omitted.
4. Write `.runtime/curated.json` using
   [the curated contract](references/curated-schema.md). Follow these evidence
   rules:
   - Keep each selected item's `display_title` exactly equal to one source title.
   - Build `note` only by joining one or two exact, contiguous excerpts from the
     source summaries; list the same excerpts in `note_evidence`.
   - Never add text for an empty summary.
   - Preserve the canonical source item's exact `url`, `source`, `publishedAt`,
     and `score`; include every merged source in `source_urls`.
   - Do not repeat a headline in a section. Do not invent a category, fact, or
     number. If traceability is uncertain, omit the item.
5. Render and validate. The renderer verifies the raw SHA, exact source fields,
   evidence excerpts, every displayed numeric token, unique counts, contrast,
   required Noto Sans SC font, 750px CSS width, 1500px PNG width, and horizontal
   overflow before replacing fixed outputs:

   ```bash
   node scripts/render_card.mjs \
     --input .runtime/curated.json \
     --template templates/card.html \
     --state-dir .runtime \
     --output-dir output
   ```
6. Report both fixed paths and the renderer result. Leave human review and group
   sending to the user.

## Curation shape

- Default sections: `模型与产品`, `芯片与算力`, `商业与资本`, `研究与观点`,
  `机器人与硬件`.
- The target is two headlines plus 13–16 section items, 15–18 total.
- Merge duplicate coverage by keeping one displayed item and attaching all
  relevant `source_urls`; never combine unsupported claims.

## Customization

Set `brand.name`, `theme.accent`, `theme.background`, and `sections[].name` in
the curated JSON. Contrast checks still apply. To replace AI Hot, provide a JSON
source conforming to [the input contract](references/input-schema.md) and keep
equivalent raw provenance.

## Boundaries and attribution

- Footer attribution must include `AI Hot 聚合（aihot.virxact.com）`.
- Never use `aihot-skill/*` as the User-Agent.
- Never read or modify CC `daily-startup`, the knowledge-incubation pipeline,
  `~/.claude/skills/`, Slack, WeChat, or any group-send automation.
- Do not push, publish, deploy, or create a remote repository.
- This beta Skill is licensed under CC BY 4.0.

