{
  "schemaVersion": "1.0",
  "item": {
    "slug": "webnovel-serial-pipeline",
    "name": "Webnovel Serial Pipeline",
    "source": "tencent",
    "type": "skill",
    "category": "开发工具",
    "sourceUrl": "https://clawhub.ai/jeong-wooseok/webnovel-serial-pipeline",
    "canonicalUrl": "https://clawhub.ai/jeong-wooseok/webnovel-serial-pipeline",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/webnovel-serial-pipeline",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=webnovel-serial-pipeline",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "scripts/check_deps.sh",
      "scripts/lint_episode.py",
      "scripts/new_episode.py",
      "scripts/prepublish_check.py",
      "scripts/publish_episode.py"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-05-07T17:22:31.273Z",
      "expiresAt": "2026-05-14T17:22:31.273Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=afrexai-annual-report",
        "contentDisposition": "attachment; filename=\"afrexai-annual-report-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/webnovel-serial-pipeline"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/webnovel-serial-pipeline",
    "agentPageUrl": "https://openagent3.xyz/skills/webnovel-serial-pipeline/agent",
    "manifestUrl": "https://openagent3.xyz/skills/webnovel-serial-pipeline/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/webnovel-serial-pipeline/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "⚠️ Security Notice",
        "body": "This skill may trigger antivirus false positives due to:\n\nShell scripts (.sh): Used ONLY for ffmpeg image conversion and dependency checks\nsubprocess calls: Used ONLY to invoke Python linting scripts\nprepublish_check.py: Security scanner that looks for malicious patterns (ironically flagged by AV)\n\nContains regex patterns like curl, wget to DETECT (not execute) malicious code\nThis is a SECURITY FEATURE, not malware\n\nAll code is open source and auditable. No malicious behavior.\n\nThis skill documents the end-to-end workflow we used for Quartz-hosted Korean web-novel serials (e.g., Drama/야간조)."
      },
      {
        "title": "Quick Start (copy/paste)",
        "body": "From a terminal:\n\n# 1) Install\nclawhub install webnovel-serial-pipeline\n\n# 2) Go to the skill folder\ncd skills/webnovel-serial-pipeline\n\n# 3) Set your Quartz root (env var)\nexport WEBNOVEL_QUARTZ_ROOT=\"/absolute/path/to/8.quartz\"\n\n# 4) Verify deps\nbash scripts/check_deps.sh\n\n# 5) After you say “검수 완료”, publish + sync index\nbash scripts/publish_review_ok.sh --series \"야간조\" --episode 2 --slug \"불-꺼지면-가지-마세요\" --draft-file \"/path/to/draft.md\""
      },
      {
        "title": "Goals",
        "body": "Episodes are readable (no \"writer commentary\" tone)\nEvery episode has at least 1 image\nImages are lightweight for the web: 1K → webp (q 70~80, max 1200px)\nPublishing is safe: draft in archive → move to Quartz only after review"
      },
      {
        "title": "Design & Requirements (before writing)",
        "body": "This section captures the proposal + requirements analysis process we used (the part before the pipeline)."
      },
      {
        "title": "Kickoff 질문(한 번에 던지기, 선택형)",
        "body": "아래 질문을 한 메시지로 던지고, 사용자가 선택/응답하면 그걸로 톤을 고정한다.\n\n장르(선택): 드라마 / 오피스 스릴러 / 블랙코미디 / 로맨스(현실톤)\n레퍼런스(선택): (이게 KICK) 사용자가 이미 아는 드라마 톤을 고르면, 설명 없이도 문장/연출/감정선이 바로 고정된다.\n\n예시: 나의 아저씨 / 미생 / D.P. / 나의 해방일지 / 더 글로리(톤만) / 시그널 / 비밀의 숲 / 나쁜 녀석들 / 괴물 / 마이 네임\n추천 방식: 메인 1개 + 보조 1개 선택\n\n\n수위(선택): 12세 / 15세 / 청불\n에피소드 길이(선택): 35분 분량 / 510분 분량(웹소설 체감 길이)\n배경(선택): 구도심 / 강남 오피스 / 주거지 / 공공기관\n캐릭터(필수): 2~6명 (이름 + 한 줄 성격)"
      },
      {
        "title": "유치함 방지(기본값 8룰)",
        "body": "현실 기반 갈등(일/돈/윤리/관계). 초능력·과장 금지.\n밈/유행어/오글 멘트 금지.\n설명충 금지: “말로 설명” 대신 “행동/선택”으로 보여주기.\n서브텍스트(겉말≠속마음) 1~2번은 반드시 넣기.\n선악 이분법 금지: 결함+욕망+두려움 3요소로 캐릭터 설계.\n코미디는 ‘사람을 조롱’하지 말고 상황/아이러니로.\n과한 효과/폰트/감정 과장 금지(문장 톤도 포함).\n엔딩은 해피/불행보다 “후폭풍(대가)”를 남기기."
      },
      {
        "title": "성숙도(퀄리티) 루브릭 — 자동 체크",
        "body": "오글/밈 대사 0개\n설명 대사 비율 20% 이하(대부분 행동/선택)\n인물 2명 이상이 서로 다른 목표로 충돌\n사건의 결과(대가)가 최소 1개 남음(돈/관계/신뢰/평판)"
      },
      {
        "title": "시즌(10부작) 설계 템플릿",
        "body": "EP01: 훅/트리거(사건 씨앗을 “확정”으로 박기)\nEP02: 첫 사건(한 단계 전진)\nEP03~04: 구조/연결고리 드러남(우연→패턴)\nEP05: ‘왜 신고하지 못하는가’ 같은 현실적 제약 공개\nEP06~07: 선택 강요(관계/돈/윤리의 대가)\nEP08: 정체/구조의 윤곽(내부자/책임 전가)\nEP09: 한 번만(돌이킬 수 없는 선택)\nEP10: 해결보다 “이후”로 마무리(과장 없이)"
      },
      {
        "title": "관계 설계 규칙(절제된 애틋함)",
        "body": "“스몰토크로 친해지기” 금지 → 작은 빚 2번으로 관계를 앞으로 당긴다.\n\nA→B: 사소한 배려 1번(말보다 행동)\nB→A: 말 없는 현실 도움 1번(영웅 금지)\n\n\n호칭은 현실적으로:\n\n이름을 알기 전: 최소한(직업/기능 대사 위주)\n이름을 확인한 뒤: “아저씨” 같은 호칭은 피하고 **이름(도현 씨)**로."
      },
      {
        "title": "1) Set your Quartz root (deploy folder)",
        "body": "For distribution we do not hardcode machine-specific paths.\n\nRequired environment variable:\n\nWEBNOVEL_QUARTZ_ROOT = your Quartz vault root (published content folder)\n\nOptional:\n\nWEBNOVEL_DRAFT_ROOT = where you keep drafts\nNANO_BANANA_KEY (only if you generate covers using nano-banana-pro)\n\nExample:\n\nexport WEBNOVEL_QUARTZ_ROOT=\"/absolute/path/to/8.quartz\"\nexport WEBNOVEL_DRAFT_ROOT=\"/absolute/path/to/drafts\"   # optional"
      },
      {
        "title": "2) Dependency check",
        "body": "From inside this skill folder:\n\nbash scripts/check_deps.sh"
      },
      {
        "title": "3) Pre-publish safety check (ClawHub)",
        "body": "Before clawhub publish, run:\n\npython3 scripts/prepublish_check.py\n\nThis fails if obvious exfil/download markers are found."
      },
      {
        "title": "Folder convention",
        "body": "Quartz vault root (published):\n\n$WEBNOVEL_QUARTZ_ROOT (example: /path/to/8.quartz)\n\n\nExample series folder:\n\nDrama/<series>/index.md (landing + 제작 규칙)\nDrama/<series>/<series>-01-....md (published episodes)\nDrama/<series>/images/*.webp (covers)\n\n\nDrafts (NOT published):\n\n$WEBNOVEL_DRAFT_ROOT/<series>_serial_drafts/ (example: /path/to/drafts/yaganjo_serial_drafts/)"
      },
      {
        "title": "0) Decide the \"episode job\"",
        "body": "EP01: hook/trigger (plant the seed)\nEP02+: progress (one new event per episode)"
      },
      {
        "title": "1) Create an episode draft",
        "body": "Write the episode in the drafts folder first."
      },
      {
        "title": "2) Cover image (1K)",
        "body": "Generate cover PNG (1K) using Nano Banana Pro, then convert to WebP."
      },
      {
        "title": "3) Embed + tags",
        "body": "Ensure frontmatter tags include the 6-axis tags:\n\ndomain/topic/format/audience/intent/lang\n\n\nEmbed cover early in the episode body using a Quartz wikilink:\n\n![[Drama/<series>/images/<cover>.webp]]"
      },
      {
        "title": "4) Lint (style checks)",
        "body": "Before publishing, run a quick linter:\n\nban repetitive patterns: 같아서/것 같아서\navoid writer commentary tone: overuse of generalizations\nkeep dialogue natural and short"
      },
      {
        "title": "5) Publish (move to Quartz)",
        "body": "Only after the user says OK.\n\nRecommended publish command (copies draft into Quartz and normalizes filename):\n\npython3 scripts/publish_episode.py \\\n  --draft-file /path/to/draft.md \\\n  --quartz-root \"$WEBNOVEL_QUARTZ_ROOT\" \\\n  --series-dir \"$WEBNOVEL_QUARTZ_ROOT/Drama/<series>\" \\\n  --series \"<series>\" \\\n  --episode 2 \\\n  --slug \"불-꺼지면-가지-마세요\""
      },
      {
        "title": "6) Sync index.md episode list (optional, recommended)",
        "body": "Add markers once in Drama/<series>/index.md:\n\n## 에피소드\n<!-- episodes:start -->\n<!-- episodes:end -->\n\nThen run:\n\npython3 scripts/sync_index.py \\\n  --index-file \"$WEBNOVEL_QUARTZ_ROOT/Drama/<series>/index.md\" \\\n  --series-dir \"$WEBNOVEL_QUARTZ_ROOT/Drama/<series>\" \\\n  --series \"<series>\""
      },
      {
        "title": "One-shot publish workflow (ONLY after chat confirmation: “검수 완료”)",
        "body": "This is the recommended human-safe workflow: wait for the user to explicitly say 검수 완료, then run:\n\nbash scripts/publish_review_ok.sh \\\n  --series \"야간조\" \\\n  --episode 2 \\\n  --slug \"불-꺼지면-가지-마세요\" \\\n  --draft-file \"/path/to/drafts/yaganjo_serial_drafts/야간조-연재-02-불-꺼지면-가지-마세요.md\"\n\nIt will:\n\nlint + asset-check + copy into Quartz (public)\nsync Drama/<series>/index.md between episode markers"
      },
      {
        "title": "A) Create episode stub",
        "body": "python3 scripts/new_episode.py \\\n  --series \"야간조\" \\\n  --series-dir \"$WEBNOVEL_QUARTZ_ROOT/Drama/야간조\" \\\n  --episode 2 \\\n  --slug \"불-꺼지면-가지-마세요\" \\\n  --draft-dir \"/path/to/drafts/yaganjo_serial_drafts\""
      },
      {
        "title": "B) Convert PNG→WebP (fast)",
        "body": "bash scripts/to_webp.sh \\\n  /path/to/cover.png \\\n  /path/to/cover.webp"
      },
      {
        "title": "C) Lint an episode",
        "body": "python3 scripts/lint_episode.py \\\n  --file /path/to/episode.md"
      },
      {
        "title": "Production rules (the ones we actually used)",
        "body": "No writer commentary: remove lines like “그래서 더 진짜였다”\nShow, don’t explain: replace intention-explanations with actions\nNo pattern spam: especially ~같아서 chains\nRelationship progression: use two small debts (A→B and B→A), not long small talk\nHook: end every episode with a single, sharp next-step trigger"
      }
    ],
    "body": "WebNovel Serial Pipeline (Quartz)\n⚠️ Security Notice\n\nThis skill may trigger antivirus false positives due to:\n\nShell scripts (.sh): Used ONLY for ffmpeg image conversion and dependency checks\nsubprocess calls: Used ONLY to invoke Python linting scripts\nprepublish_check.py: Security scanner that looks for malicious patterns (ironically flagged by AV)\nContains regex patterns like curl, wget to DETECT (not execute) malicious code\nThis is a SECURITY FEATURE, not malware\n\nAll code is open source and auditable. No malicious behavior.\n\nThis skill documents the end-to-end workflow we used for Quartz-hosted Korean web-novel serials (e.g., Drama/야간조).\n\nQuick Start (copy/paste)\n\nFrom a terminal:\n\n# 1) Install\nclawhub install webnovel-serial-pipeline\n\n# 2) Go to the skill folder\ncd skills/webnovel-serial-pipeline\n\n# 3) Set your Quartz root (env var)\nexport WEBNOVEL_QUARTZ_ROOT=\"/absolute/path/to/8.quartz\"\n\n# 4) Verify deps\nbash scripts/check_deps.sh\n\n# 5) After you say “검수 완료”, publish + sync index\nbash scripts/publish_review_ok.sh --series \"야간조\" --episode 2 --slug \"불-꺼지면-가지-마세요\" --draft-file \"/path/to/draft.md\"\n\nGoals\nEpisodes are readable (no \"writer commentary\" tone)\nEvery episode has at least 1 image\nImages are lightweight for the web: 1K → webp (q 70~80, max 1200px)\nPublishing is safe: draft in archive → move to Quartz only after review\nDesign & Requirements (before writing)\n\nThis section captures the proposal + requirements analysis process we used (the part before the pipeline).\n\nKickoff 질문(한 번에 던지기, 선택형)\n\n아래 질문을 한 메시지로 던지고, 사용자가 선택/응답하면 그걸로 톤을 고정한다.\n\n장르(선택): 드라마 / 오피스 스릴러 / 블랙코미디 / 로맨스(현실톤)\n레퍼런스(선택): (이게 KICK) 사용자가 이미 아는 드라마 톤을 고르면, 설명 없이도 문장/연출/감정선이 바로 고정된다.\n예시: 나의 아저씨 / 미생 / D.P. / 나의 해방일지 / 더 글로리(톤만) / 시그널 / 비밀의 숲 / 나쁜 녀석들 / 괴물 / 마이 네임\n추천 방식: 메인 1개 + 보조 1개 선택\n수위(선택): 12세 / 15세 / 청불\n에피소드 길이(선택): 35분 분량 / 510분 분량(웹소설 체감 길이)\n배경(선택): 구도심 / 강남 오피스 / 주거지 / 공공기관\n캐릭터(필수): 2~6명 (이름 + 한 줄 성격)\n유치함 방지(기본값 8룰)\n현실 기반 갈등(일/돈/윤리/관계). 초능력·과장 금지.\n밈/유행어/오글 멘트 금지.\n설명충 금지: “말로 설명” 대신 “행동/선택”으로 보여주기.\n서브텍스트(겉말≠속마음) 1~2번은 반드시 넣기.\n선악 이분법 금지: 결함+욕망+두려움 3요소로 캐릭터 설계.\n코미디는 ‘사람을 조롱’하지 말고 상황/아이러니로.\n과한 효과/폰트/감정 과장 금지(문장 톤도 포함).\n엔딩은 해피/불행보다 “후폭풍(대가)”를 남기기.\n성숙도(퀄리티) 루브릭 — 자동 체크\n오글/밈 대사 0개\n설명 대사 비율 20% 이하(대부분 행동/선택)\n인물 2명 이상이 서로 다른 목표로 충돌\n사건의 결과(대가)가 최소 1개 남음(돈/관계/신뢰/평판)\n시즌(10부작) 설계 템플릿\nEP01: 훅/트리거(사건 씨앗을 “확정”으로 박기)\nEP02: 첫 사건(한 단계 전진)\nEP03~04: 구조/연결고리 드러남(우연→패턴)\nEP05: ‘왜 신고하지 못하는가’ 같은 현실적 제약 공개\nEP06~07: 선택 강요(관계/돈/윤리의 대가)\nEP08: 정체/구조의 윤곽(내부자/책임 전가)\nEP09: 한 번만(돌이킬 수 없는 선택)\nEP10: 해결보다 “이후”로 마무리(과장 없이)\n관계 설계 규칙(절제된 애틋함)\n“스몰토크로 친해지기” 금지 → 작은 빚 2번으로 관계를 앞으로 당긴다.\nA→B: 사소한 배려 1번(말보다 행동)\nB→A: 말 없는 현실 도움 1번(영웅 금지)\n호칭은 현실적으로:\n이름을 알기 전: 최소한(직업/기능 대사 위주)\n이름을 확인한 뒤: “아저씨” 같은 호칭은 피하고 **이름(도현 씨)**로.\nSetup for distribution (paths + optional APIs)\n1) Set your Quartz root (deploy folder)\n\nFor distribution we do not hardcode machine-specific paths.\n\nRequired environment variable:\n\nWEBNOVEL_QUARTZ_ROOT = your Quartz vault root (published content folder)\n\nOptional:\n\nWEBNOVEL_DRAFT_ROOT = where you keep drafts\nNANO_BANANA_KEY (only if you generate covers using nano-banana-pro)\n\nExample:\n\nexport WEBNOVEL_QUARTZ_ROOT=\"/absolute/path/to/8.quartz\"\nexport WEBNOVEL_DRAFT_ROOT=\"/absolute/path/to/drafts\"   # optional\n\n2) Dependency check\n\nFrom inside this skill folder:\n\nbash scripts/check_deps.sh\n\n3) Pre-publish safety check (ClawHub)\n\nBefore clawhub publish, run:\n\npython3 scripts/prepublish_check.py\n\n\nThis fails if obvious exfil/download markers are found.\n\nFolder convention\nQuartz vault root (published):\n$WEBNOVEL_QUARTZ_ROOT (example: /path/to/8.quartz)\nExample series folder:\nDrama/<series>/index.md (landing + 제작 규칙)\nDrama/<series>/<series>-01-....md (published episodes)\nDrama/<series>/images/*.webp (covers)\nDrafts (NOT published):\n$WEBNOVEL_DRAFT_ROOT/<series>_serial_drafts/ (example: /path/to/drafts/yaganjo_serial_drafts/)\nWorkflow (recommended)\n0) Decide the \"episode job\"\nEP01: hook/trigger (plant the seed)\nEP02+: progress (one new event per episode)\n1) Create an episode draft\n\nWrite the episode in the drafts folder first.\n\n2) Cover image (1K)\n\nGenerate cover PNG (1K) using Nano Banana Pro, then convert to WebP.\n\n3) Embed + tags\nEnsure frontmatter tags include the 6-axis tags:\ndomain/topic/format/audience/intent/lang\nEmbed cover early in the episode body using a Quartz wikilink:\n![[Drama/<series>/images/<cover>.webp]]\n4) Lint (style checks)\n\nBefore publishing, run a quick linter:\n\nban repetitive patterns: 같아서/것 같아서\navoid writer commentary tone: overuse of generalizations\nkeep dialogue natural and short\n5) Publish (move to Quartz)\n\nOnly after the user says OK.\n\nRecommended publish command (copies draft into Quartz and normalizes filename):\n\npython3 scripts/publish_episode.py \\\n  --draft-file /path/to/draft.md \\\n  --quartz-root \"$WEBNOVEL_QUARTZ_ROOT\" \\\n  --series-dir \"$WEBNOVEL_QUARTZ_ROOT/Drama/<series>\" \\\n  --series \"<series>\" \\\n  --episode 2 \\\n  --slug \"불-꺼지면-가지-마세요\"\n\n6) Sync index.md episode list (optional, recommended)\n\nAdd markers once in Drama/<series>/index.md:\n\n## 에피소드\n<!-- episodes:start -->\n<!-- episodes:end -->\n\n\nThen run:\n\npython3 scripts/sync_index.py \\\n  --index-file \"$WEBNOVEL_QUARTZ_ROOT/Drama/<series>/index.md\" \\\n  --series-dir \"$WEBNOVEL_QUARTZ_ROOT/Drama/<series>\" \\\n  --series \"<series>\"\n\nOne-shot publish workflow (ONLY after chat confirmation: “검수 완료”)\n\nThis is the recommended human-safe workflow: wait for the user to explicitly say 검수 완료, then run:\n\nbash scripts/publish_review_ok.sh \\\n  --series \"야간조\" \\\n  --episode 2 \\\n  --slug \"불-꺼지면-가지-마세요\" \\\n  --draft-file \"/path/to/drafts/yaganjo_serial_drafts/야간조-연재-02-불-꺼지면-가지-마세요.md\"\n\n\nIt will:\n\nlint + asset-check + copy into Quartz (public)\nsync Drama/<series>/index.md between episode markers\nScripts\nA) Create episode stub\npython3 scripts/new_episode.py \\\n  --series \"야간조\" \\\n  --series-dir \"$WEBNOVEL_QUARTZ_ROOT/Drama/야간조\" \\\n  --episode 2 \\\n  --slug \"불-꺼지면-가지-마세요\" \\\n  --draft-dir \"/path/to/drafts/yaganjo_serial_drafts\"\n\nB) Convert PNG→WebP (fast)\nbash scripts/to_webp.sh \\\n  /path/to/cover.png \\\n  /path/to/cover.webp\n\nC) Lint an episode\npython3 scripts/lint_episode.py \\\n  --file /path/to/episode.md\n\nProduction rules (the ones we actually used)\nNo writer commentary: remove lines like “그래서 더 진짜였다”\nShow, don’t explain: replace intention-explanations with actions\nNo pattern spam: especially ~같아서 chains\nRelationship progression: use two small debts (A→B and B→A), not long small talk\nHook: end every episode with a single, sharp next-step trigger"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/jeong-wooseok/webnovel-serial-pipeline",
    "publisherUrl": "https://clawhub.ai/jeong-wooseok/webnovel-serial-pipeline",
    "owner": "jeong-wooseok",
    "version": "0.1.4",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/webnovel-serial-pipeline",
    "downloadUrl": "https://openagent3.xyz/downloads/webnovel-serial-pipeline",
    "agentUrl": "https://openagent3.xyz/skills/webnovel-serial-pipeline/agent",
    "manifestUrl": "https://openagent3.xyz/skills/webnovel-serial-pipeline/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/webnovel-serial-pipeline/agent.md"
  }
}