name: feishu-deck-h5-designer description: | Subskill for the feishu-deck-h5 pipeline. Use after the controller routes a deck-generation request to design: turn user requirements plus local input/ knowledge and Feishu Base knowledge into a scenario, design_plan, and outline.json. This subskill does not render HTML or validate final visuals.
feishu-deck-h5-designer
Responsibility
Input: user brief, parsed input/runtime-library/source-dossier.json if present,
local files under runs/<...>/input/, and scoped records from the Feishu Base
knowledge library.
Output:
runs/<...>/output/DESIGN-PLAN.mdruns/<...>/output/outline.json
Do not write deck.json or index.html; that belongs to renderer.
Inline freshness rule: when this subskill is not running as a separate
multi-agent worker, reread the current upstream files before designing. Do not
rely on cached chat summaries or earlier reads of source-dossier.json, local
input/ files, Feishu Base query results, or user notes.
Required Design Flow
- Define
scenario: pitch goal, audience, decision context, setting, language, risk level, and proof requirements. - Query local knowledge first:
input/,input/runtime-library/source-dossier.json,input/runtime-library/assets/, and any user-provided notes. - Query the cloud Feishu Base only for relevant knowledge records. Use the
controller's Base URL/token/table/view and the
lark-baseskill. Cloud-dependency downgrade (F-268): iflark-cliis not installed, orlark-cli auth statusreports not-logged-in, do NOT block — enter local-only mode. Recordcloud_assets: unavailableinDESIGN-PLAN.md, draw assets only fromassets/shared/(the local products / clientlogo pools), and list any missing logos explicitly for the user to supply. Never fall back to hand-drawn shapes or emoji as a stand-in (forbidden inassets-and-files.md): make the degradation explicit instead of silently shipping a degraded deck. - Produce a narrative arc and slide outline. Default to Chinese-only unless the user explicitly asks for bilingual or external English-facing pitch.
- Apply the raw-first design stance: every slide defaults to
layout: "raw"when it later becomes DeckJSON. Inoutline.json, express that aslayout_intent: "raw:<pattern-or-intent>". Fall back to schema only for pure standard shapes — the single-source allowlist table is indesign-first.md(Decision rule — 白名单回退判定;deck-generation-policy.mdpoints to it). Give every raw slide Q0-Q4 plus a six-dimensional design spec before authoring. - For every slide, include a density budget: core block + supporting evidence <= layout capacity. If it will not fit, cut or split content instead of shrinking text below the ladder.
- Never fabricate attributed facts: no specific company numbers, named quotes, source claims, or future-roadmap commitments unless provided by user/local/cloud source. General industry/product knowledge is allowed only when labeled as such.
- If the brief is a one-pager customer case or a four-beat case story, read
one-pager-case.mdand default to a singlecontent/story-caseslide without a cover unless the user asks otherwise. - Write or update the run's
PROMPTS.mdalongsideDESIGN-PLAN.mdso the user's actual asks survive the design/render handoff. - After writing
outline.json, self-check it:python3 deck-json/outline-lint.py output/outline.json. This is a self-check, not a hard gate — render does not require anoutline.jsonand never runs the lint. It catches a half-filled outline before render: every top-level contract key and per-slide key present, and everyraw:slide carrying a non-emptydensity_budgetplus adesign_specthat covers all six dimensions (字号/容器/装饰/对齐/字距/字重, seedesign-first.md). Fix what it reports; the design intent still lives with you, the lint only checks the spec is actually filled in.
outline.json Contract
Write JSON with this shape:
{
"scenario": {
"goal": "",
"audience": "",
"setting": "",
"decision": "",
"language": "zh-only",
"source_summary": []
},
"design_plan": {
"title": "",
"narrative_arc": "",
"visual_direction": "",
"hero_pages": [],
"risks": [],
"open_questions": []
},
"slides": [
{
"key": "cover",
"role": "cover",
"layout_intent": "schema:cover",
"is_hero": true,
"single_focus": "",
"content": {},
"evidence": [],
"assets_needed": [],
"density_budget": "",
"design_spec": {}
}
]
}
Keys must be stable kebab-case semantic IDs, not positional names like
slide-01.
For layout_intent, use raw:<pattern-or-intent> by default. Use
schema:<layout> only when the slide is a pure standard shape and include the
reason in density_budget or design_spec.notes.
References To Load As Needed
../../references/design-phase.md../../references/deck-generation-policy.md../../references/design-first.md../../references/content-density.md../../references/narrative-patterns.md../../references/richness-primitives.md../../references/one-pager-case.md../../references/run-artifacts.md../../references/assets-and-files.md../../deck-json/deck-schema.json
If converting existing PDF/PPT/HTML/docs, also read
../../references/converting-existing-material.md.