{
  "schemaVersion": "1.0",
  "item": {
    "slug": "hn-daily-brief",
    "name": "HN Daily Brief",
    "source": "tencent",
    "type": "skill",
    "category": "内容创作",
    "sourceUrl": "https://clawhub.ai/liu7yong/hn-daily-brief",
    "canonicalUrl": "https://clawhub.ai/liu7yong/hn-daily-brief",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/hn-daily-brief",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=hn-daily-brief",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md",
      "scripts/generate_hn_daily.py",
      "scripts/validate_report.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-04-23T16:43:11.935Z",
      "expiresAt": "2026-04-30T16:43:11.935Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
        "contentDisposition": "attachment; filename=\"4claw-imageboard-1.0.1.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/hn-daily-brief"
    },
    "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/hn-daily-brief",
    "agentPageUrl": "https://openagent3.xyz/skills/hn-daily-brief/agent",
    "manifestUrl": "https://openagent3.xyz/skills/hn-daily-brief/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/hn-daily-brief/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": "Release Notes",
        "body": "v0.7.0: Add concurrent retry profile for schedule reliability (primary run + immediate retry + delayed retry) with idempotent completion checks to avoid timeout-caused misses.\nv0.6.0: Brand rename for distribution as \"HN Daily Brief\" + full copy cleanup to English-only wording.\nv0.5.1: Language cleanup for public distribution (English-first docs; localized markers still supported).\nv0.5.0: First public release."
      },
      {
        "title": "Parameters",
        "body": "language: output language (default: current user conversation language)\ntopN: number of items (default: 10)\nstyle: strict | lite (default: strict)\noutputDir: output directory (default: /home/ubuntu/.openclaw/workspace/output/hn-daily/)\npersist: whether to save file + update index (default: true)\nreminderTime: cron time in user timezone, or off"
      },
      {
        "title": "First-load behavior",
        "body": "On first load (or when user changes params), show effective params once and confirm.\nOtherwise, reuse last confirmed params."
      },
      {
        "title": "Mandatory execution order",
        "body": "Retry preflight check (required for retry jobs):\n\nIf this run is a retry/compensation run, first check whether today's report already exists and is complete (at minimum includes ## Top 10).\nIf already complete, return NO_REPLY and stop (idempotent exit).\n\n\nAlways fetch fresh inputs for this run (required):\n\nRe-pull current HN Top-N items, article snippets, and comments at run time.\nDo not reuse previous report body as source input.\n\n\nCollect materials via script (data collection only, never user-facing):\n\nscripts/generate_hn_daily.py --style <style> --top <topN> --language <language> --outdir /tmp/hn-daily-draft --materials /tmp/hn-daily-draft/HN-materials.json\nScript must only output HN-materials.json (no user-facing report body).\nUse HN-materials.json as the only source for final writing.\n\n\nLLM generation (required, prompt-driven quality):\n\nUse a single strict prompt template to generate final report in selected language.\nAll content quality constraints (summary depth, comment synthesis style, anti-template wording) must be enforced by prompt, not by script templates.\nNo “summarize then translate”; generate directly in target language.\n\n\nRe-check completion before send (required for retry jobs):\n\nIf another concurrent run has already persisted a complete report, do not send duplicate content; return NO_REPLY.\n\n\nSend full final report body to current chat.\nIf persist=true, write final report to <outputDir>/HN-daily-YYYY-MM-DD.md and update <outputDir>/HN_DAILY_INDEX.md."
      },
      {
        "title": "Success criteria (strict)",
        "body": "persist=false: success = full report body delivered in chat.\npersist=true: success = chat delivery + file write + index update.\nUnder concurrent retry profile: success can be achieved by primary run or any retry run; retries must skip if the report is already complete.\nIf any required condition fails, treat run as failed (do not claim completion)."
      },
      {
        "title": "Output rules",
        "body": "Send only report body to user (no receipts/status metadata).\nNever send script draft markdown directly; user-facing report must come from LLM rewrite over materials JSON.\nOutput must use one language only: the selected language for the run (no bilingual/mixed-language output).\nReal markdown newlines only; never output literal \\n in user-visible content.\nTop-N structure per item:\n\nTitle\nLink\nHN link\nHeat\nSource summary\nComment viewpoint synthesis"
      },
      {
        "title": "Length rules (by selected language)",
        "body": "Default hard rule: source summary must be >=300 chars in zh (>=200 words in en; equivalent depth for others).\nElastic exception: only when source content is genuinely short/information-limited, summary may be shorter than default target.\nComment viewpoint summary target: zh>=80 chars (equivalent depth for others), with the same short-source exception.\nWhen exception is used, explicitly mark \"source is short / info limited\" (or equivalent in selected language), prioritize verifiable facts + discussion context + actionable implications, and keep concise but information-dense output.\nNever inflate length with generic filler text."
      },
      {
        "title": "Comment synthesis rules",
        "body": "Must be in selected language.\nMulti-perspective (not binary pro/con).\nPer item, output 5 comment viewpoints when available.\nIf username exists in source comment, it must be preserved in output.\nOnly use \"insufficient comments\" when no usable comments are available.\nSummarize viewpoints; do not paste long raw quotes."
      },
      {
        "title": "Scheduling rules (concurrent retry profile)",
        "body": "If reminderTime != off, create/update a 3-job retry ladder automatically (no duplicates):\n\nPrimary run at reminderTime (e.g. HN Daily 06:50)\nImmediate retry at reminderTime + 1m (e.g. HN Daily 06:51 Retry)\nDelayed retry at reminderTime + 15m (e.g. HN Daily 07:05 Retry)\n\n\nAll retry jobs must be idempotent via completion checks (see Mandatory execution order step 1 and step 5).\nKeep job names aligned with schedule and retry role.\nCron payload must be execution-oriented (not passive reminder).\nRationale: cron has no built-in on-failure callback; this retry ladder is the required equivalent for timeout/failure recovery."
      },
      {
        "title": "Prompt template requirements (must include)",
        "body": "Generate directly in selected language.\nSource summary length must meet selected-language threshold.\nEach comment viewpoint summary must meet selected-language threshold.\nSummaries must be article-specific and fact-based; avoid reusable boilerplate.\nComment section must synthesize viewpoints (not raw quote dumping), with usernames when available."
      },
      {
        "title": "Pre-send quality gate (mandatory)",
        "body": "Validate final report before sending:\n\nzh summary default >=300 chars per item;\nzh comment viewpoint default >=80 chars per viewpoint.\n\n\nRecommended command:\n\nscripts/validate_report.py --report <final_report_path> --language <language>\n\n\nIf an item/viewpoint is below default threshold, it must explicitly include a short-source marker (e.g. source is short / info limited).\nIf gate fails, rewrite and re-check; do not send failing report."
      },
      {
        "title": "Guardrail",
        "body": "If prompt-driven LLM generation path is not available/validated, keep cron disabled until fixed.\nIf primary + both retries all fail on the same day, send a concise failure alert to the current chat with the first actionable error cause (do not silently drop the run)."
      }
    ],
    "body": "HN Daily\nRelease Notes\nv0.7.0: Add concurrent retry profile for schedule reliability (primary run + immediate retry + delayed retry) with idempotent completion checks to avoid timeout-caused misses.\nv0.6.0: Brand rename for distribution as \"HN Daily Brief\" + full copy cleanup to English-only wording.\nv0.5.1: Language cleanup for public distribution (English-first docs; localized markers still supported).\nv0.5.0: First public release.\nParameters\nlanguage: output language (default: current user conversation language)\ntopN: number of items (default: 10)\nstyle: strict | lite (default: strict)\noutputDir: output directory (default: /home/ubuntu/.openclaw/workspace/output/hn-daily/)\npersist: whether to save file + update index (default: true)\nreminderTime: cron time in user timezone, or off\nFirst-load behavior\nOn first load (or when user changes params), show effective params once and confirm.\nOtherwise, reuse last confirmed params.\nMandatory execution order\nRetry preflight check (required for retry jobs):\nIf this run is a retry/compensation run, first check whether today's report already exists and is complete (at minimum includes ## Top 10).\nIf already complete, return NO_REPLY and stop (idempotent exit).\nAlways fetch fresh inputs for this run (required):\nRe-pull current HN Top-N items, article snippets, and comments at run time.\nDo not reuse previous report body as source input.\nCollect materials via script (data collection only, never user-facing):\nscripts/generate_hn_daily.py --style <style> --top <topN> --language <language> --outdir /tmp/hn-daily-draft --materials /tmp/hn-daily-draft/HN-materials.json\nScript must only output HN-materials.json (no user-facing report body).\nUse HN-materials.json as the only source for final writing.\nLLM generation (required, prompt-driven quality):\nUse a single strict prompt template to generate final report in selected language.\nAll content quality constraints (summary depth, comment synthesis style, anti-template wording) must be enforced by prompt, not by script templates.\nNo “summarize then translate”; generate directly in target language.\nRe-check completion before send (required for retry jobs):\nIf another concurrent run has already persisted a complete report, do not send duplicate content; return NO_REPLY.\nSend full final report body to current chat.\nIf persist=true, write final report to <outputDir>/HN-daily-YYYY-MM-DD.md and update <outputDir>/HN_DAILY_INDEX.md.\nSuccess criteria (strict)\npersist=false: success = full report body delivered in chat.\npersist=true: success = chat delivery + file write + index update.\nUnder concurrent retry profile: success can be achieved by primary run or any retry run; retries must skip if the report is already complete.\nIf any required condition fails, treat run as failed (do not claim completion).\nOutput rules\nSend only report body to user (no receipts/status metadata).\nNever send script draft markdown directly; user-facing report must come from LLM rewrite over materials JSON.\nOutput must use one language only: the selected language for the run (no bilingual/mixed-language output).\nReal markdown newlines only; never output literal \\n in user-visible content.\nTop-N structure per item:\nTitle\nLink\nHN link\nHeat\nSource summary\nComment viewpoint synthesis\nLength rules (by selected language)\nDefault hard rule: source summary must be >=300 chars in zh (>=200 words in en; equivalent depth for others).\nElastic exception: only when source content is genuinely short/information-limited, summary may be shorter than default target.\nComment viewpoint summary target: zh>=80 chars (equivalent depth for others), with the same short-source exception.\nWhen exception is used, explicitly mark \"source is short / info limited\" (or equivalent in selected language), prioritize verifiable facts + discussion context + actionable implications, and keep concise but information-dense output.\nNever inflate length with generic filler text.\nComment synthesis rules\nMust be in selected language.\nMulti-perspective (not binary pro/con).\nPer item, output 5 comment viewpoints when available.\nIf username exists in source comment, it must be preserved in output.\nOnly use \"insufficient comments\" when no usable comments are available.\nSummarize viewpoints; do not paste long raw quotes.\nScheduling rules (concurrent retry profile)\nIf reminderTime != off, create/update a 3-job retry ladder automatically (no duplicates):\nPrimary run at reminderTime (e.g. HN Daily 06:50)\nImmediate retry at reminderTime + 1m (e.g. HN Daily 06:51 Retry)\nDelayed retry at reminderTime + 15m (e.g. HN Daily 07:05 Retry)\nAll retry jobs must be idempotent via completion checks (see Mandatory execution order step 1 and step 5).\nKeep job names aligned with schedule and retry role.\nCron payload must be execution-oriented (not passive reminder).\nRationale: cron has no built-in on-failure callback; this retry ladder is the required equivalent for timeout/failure recovery.\nPrompt template requirements (must include)\nGenerate directly in selected language.\nSource summary length must meet selected-language threshold.\nEach comment viewpoint summary must meet selected-language threshold.\nSummaries must be article-specific and fact-based; avoid reusable boilerplate.\nComment section must synthesize viewpoints (not raw quote dumping), with usernames when available.\nPre-send quality gate (mandatory)\nValidate final report before sending:\nzh summary default >=300 chars per item;\nzh comment viewpoint default >=80 chars per viewpoint.\nRecommended command:\nscripts/validate_report.py --report <final_report_path> --language <language>\nIf an item/viewpoint is below default threshold, it must explicitly include a short-source marker (e.g. source is short / info limited).\nIf gate fails, rewrite and re-check; do not send failing report.\nGuardrail\nIf prompt-driven LLM generation path is not available/validated, keep cron disabled until fixed.\nIf primary + both retries all fail on the same day, send a concise failure alert to the current chat with the first actionable error cause (do not silently drop the run)."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/liu7yong/hn-daily-brief",
    "publisherUrl": "https://clawhub.ai/liu7yong/hn-daily-brief",
    "owner": "liu7yong",
    "version": "0.7.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/hn-daily-brief",
    "downloadUrl": "https://openagent3.xyz/downloads/hn-daily-brief",
    "agentUrl": "https://openagent3.xyz/skills/hn-daily-brief/agent",
    "manifestUrl": "https://openagent3.xyz/skills/hn-daily-brief/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/hn-daily-brief/agent.md"
  }
}