[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6DFT6QFXGKN73GT1TS32WT2":3,"skill-same:01M6DFT6QFXGKN73GT1TS32WT2":152},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":23,"publishedAt":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":74,"commitSha":75,"skillDirectory":76,"forksCount":77,"repositoryHtmlUrl":78,"repositoryHomepageUrl":6,"ownerHtmlUrl":79,"ownerBlogUrl":6,"ownerDescription":80,"updatedAt":81,"install":82,"resources":95},"01M6DFT6QFXGKN73GT1TS32WT2","osint-fusion-operations",null,"Automated OSINT fusion reporting with multi-source intelligence platforms (World Monitor, Shinka, etc.) including tier selection, dependency management, scheduled delivery, and multi-channel distribution.","zapabob\u002FSkills","zapabob","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F130830376?v=4","01M6DBMYZAGRTFQDSQYW3W764P","峯岸 亮","01M6DBMZ3GKDSJ01NZ9XTZD7JD",2,"MIT","https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Farchive\u002Fskill-md-reviewed\u002Fsha256\u002F52\u002F52c4cd09baa917578be35658ee3b7568e8ae960da9421d6f44a91f531191c42b\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"osint fusion operations","osint","fusion","operations","reports","free","distribution","deep","delivery","intelligence","world","selection","google","telegram","dependency","cron","defense","reporting","genai","macos","2026-11-10 10:12:30",false,"---\r\nname: osint-fusion-operations\r\ndescription: Automated OSINT fusion reporting with multi-source intelligence platforms (World Monitor, Shinka, etc.) including tier selection, dependency management, scheduled delivery, and multi-channel distribution.\r\nversion: 1.0.0\r\nauthor: Hermes Agent\r\nlicense: MIT\r\nplatforms: [linux, macos, windows]\r\ntags: [osint, fusion, worldmonitor, shinka, cron, telegram, automated-reporting]\r\ncategory: research\r\nmetadata:\r\n  hermes:\r\n    tags: [osint, fusion, worldmonitor, shinka, cron, telegram, automated-reporting]\r\n    category: research\r\n    related_skills: [deep-research-specialist, deepresearch-defense-standard]\r\n    config:\r\n      osint.fusion.default_tier: free\r\n      osint.fusion.shinka_dependencies: [\"google-genai\"]\r\n      osint.fusion.report_dir: \"~\u002F.hermes\u002Fworldmonitor-osint\u002Freports\"\r\n      osint.fusion.default_schedule: [\"0 23 * * *\", \"0 3 * * *\", \"0 11 * * *\"]\r\n      osint.fusion.worldmonitor_sidecar: \"http:\u002F\u002F127.0.0.1:46123\"\r\n---\r\n\r\n# OSINT Fusion Operations\r\n\r\nThis skill covers automated OSINT (Open Source Intelligence) fusion reporting using multi-source intelligence platforms like **World Monitor** and **ShinkaEvolve**, including tier selection, dependency management, scheduled report generation, and multi-channel delivery (Telegram, LINE, Discord, etc.).\r\n\r\n## When to Use\r\n\r\n- Generating periodic OSINT fusion reports on geopolitical, security, or domain-specific topics\r\n- Configuring World Monitor + Shinka fusion pipelines with appropriate tier selection\r\n- Setting up cron jobs for automated report generation and delivery\r\n- Troubleshooting dependency issues in Shinka MILSPEC evaluation\r\n- Multi-channel report distribution via Hermes messaging gateway\r\n\r\n## Prerequisites\r\n\r\n- Hermes Agent with `worldmonitor-osint` command available (built-in)\r\n- **User-specific World Monitor boundary:** do not use the plain `worldmonitor` MCP server. Use the desktop shortcut\u002Fexe or approved non-MCP OSINT paths instead; see `references\u002Fworldmonitor-non-mcp.md`.\r\n- For Shinka MILSPEC evaluation (`--wm-tier auto` or `pro`): **`pip install google-genai`** (NOT `google-generativeai` — deprecated since 2024, end-of-life)\r\n  - **FIXED (2026-06-18)**: Local ShinkaEvolve-OSINT checkout at `~\u002FDesktop\u002FShinkaEvolve-OSINT-main` patched to use `google.genai` SDK\r\n  - Supports **multiple embedding providers**: Google (Gemini), NVIDIA, Codex, Nous, OpenRouter, OpenAI, Azure\r\n- World Monitor local sidecar running at `http:\u002F\u002F127.0.0.1:46123` for `--wm-tier auto` (Pro features via local API)\r\n- Configured messaging channels (Telegram, LINE, Discord) for `deliver: \"all\"`\r\n- `cron` toolset enabled for scheduled jobs\r\n\r\n## How to Run\r\n\r\n### Quick Report (Free Tier)\r\n\r\n```bash\r\nhermes worldmonitor-osint fusion \"日本の安全保障\" --wm-tier free --source-mode real --save\r\n```\r\n\r\n- Completes in ~30-60 seconds\r\n- Uses World Monitor Free tier (news digest, GPS jamming, OREF alerts)\r\n- Skips Shinka MILSPEC evaluation\r\n- Saves JSON report to `~\u002F.hermes\u002Fworldmonitor-osint\u002Freports\u002F`\r\n\r\n### Full Report (Auto\u002FPro Tier)\r\n\r\n```bash\r\nhermes worldmonitor-osint fusion \"経済安全保障\" --wm-tier auto --source-mode real --save\r\n```\r\n\r\n- Requires `google-generativeai` package for Shinka evaluation\r\n- Includes MILSPEC scoring and scenario evolution\r\n- Longer execution time (2-5 minutes typical)\r\n\r\n### Scheduled Reports (Cron)\r\n\r\n```bash\r\n# Morning, noon, evening delivery to all channels\r\nhermes cron create \\\r\n  --name \"OSINT融合レポート 日本の安全保障 08:00\" \\\r\n  --schedule \"0 8 * * *\" \\\r\n  --prompt 'hermes worldmonitor-osint fusion \"日本の安全保障\" --wm-tier free --source-mode real --save' \\\r\n  --deliver all\r\n\r\nhermes cron create \\\r\n  --name \"OSINT融合レポート 日本の安全保障 12:00\" \\\r\n  --schedule \"0 12 * * *\" \\\r\n  --prompt 'hermes worldmonitor-osint fusion \"日本の安全保障\" --wm-tier free --source-mode real --save' \\\r\n  --deliver all\r\n\r\nhermes cron create \\\r\n  --name \"OSINT融合レポート 日本の安全保障 20:00\" \\\r\n  --schedule \"0 20 * * *\" \\\r\n  --prompt 'hermes worldmonitor-osint fusion \"日本の安全保障\" --wm-tier free --source-mode real --save' \\\r\n  --deliver all\r\n```\r\n\r\n## Quick Reference\r\n\r\n| Command | Tier | Shinka | Time | Use Case |\r\n|---------|------|--------|------|----------|\r\n| `--wm-tier free` | Free | ❌ | ~30-60s | **Daily ops, quick briefings (RECOMMENDED for cron)** |\r\n| `--wm-tier auto` | Auto | ⚠️ HANGS | 2-5 min* | Deep analysis, MILSPEC scoring — **currently broken** |\r\n| `--wm-tier pro` | Pro | ✅ | 2-5 min | Full pro features (requires auth) |\r\n| `--source-mode mock` | Any | ❌ (bypassed) | ~30-60s | **Testing without API calls \u002F Shinka deps** |\r\n| `--llm-summary` | Any | Dependent | +10-30s | **Japanese executive summary — requires Shinka import chain healthy** |\r\n| `--llm-summary` (w\u002F Shinka broken) | Any | ❌ | ~same | **Silent no-op: `shinka_llm: {}` — no summary produced** |\r\n\r\n*\\*Auto tier currently hangs on Shinka import chain (`importable: false`). Use `mock` mode or `free` tier for reliable execution.*\r\n\r\n### Supported Embedding Providers (via `shinka\u002Fllm\u002Fembedding.py`)\r\n\r\n| Provider | Models | Auth Env Var |\r\n|----------|--------|--------------|\r\n| **Google (Gemini)** | `gemini-embedding-exp-03-07`, `gemini-embedding-001` | `GEMINI_API_KEY` \u002F `GOOGLE_API_KEY` |\r\n| **NVIDIA** | `nvidia\u002Fnv-embedqa-e5-v5`, `nvidia\u002Fnv-embedqa-mistral-7b-v2` | `NVIDIA_API_KEY` \u002F `NGC_API_KEY` |\r\n| **Codex** | `codex-embedding` | `CODEX_API_KEY` \u002F `OPENAI_API_KEY` |\r\n| **Nous** | `nous-embedding`, `nous-hermes-embedding` | `NOUS_API_KEY` |\r\n| **OpenRouter** | Any `\u002F` prefixed (e.g., `openai\u002Ftext-embedding-3-small`) | `OPENROUTER_API_KEY` |\r\n| **OpenAI** | `text-embedding-3-small`, `text-embedding-3-large` | `OPENAI_API_KEY` |\r\n| **Azure OpenAI** | `azure-text-embedding-3-small`, `azure-text-embedding-3-large` | `AZURE_OPENAI_API_KEY` |\r\n\r\n### ⚠️ Cron Timezone: Local Time (JST) — NOT UTC\r\n\r\n### About Path Size\r\n\r\n| JST Target | Cron Schedule (LOCAL) |\r\n|------------|----------------------|\r\n| 08:00 JST | `0 8 * * *` |\r\n| 12:00 JST | `0 12 * * *` |\r\n| 20:00 JST | `0 20 * * *` |\r\n\r\n**Evidence**: Cron jobs created with `0 8 * * *` show `next_run_at: \"2026-06-19T08:00:00+09:00\"` — matching JST exactly. The previous UTC conversion guidance was incorrect for Hermes cron.\r\n\r\n### Report Save Path: Profile-Dependent\r\n\r\nWhen running under a **named Hermes profile** (e.g., `--profile job-recruiter` or via `hermes cron` that uses a non-default profile), reports save to:\r\n\r\n```\r\n~\u002F.hermes\u002Fprofiles\u002F\u003Cprofile>\u002Fworldmonitor-osint\u002Freports\u002F\r\n```\r\n\r\nWhen running under the **default profile** (no `--profile` flag), reports save to:\r\n\r\n```\r\n~\u002F.hermes\u002Fworldmonitor-osint\u002Freports\u002F\r\n```\r\n\r\nBoth paths use the `YYYYMMDDTHHMMSSZ_\u003Ctopic>.json` naming convention. Cron jobs that verify saved output must check the correct path — checking the wrong one will show no new files and the agent may falsely conclude the run failed.\r\n\r\n## Procedure\r\n\r\n### 1. Verify Dependencies\r\n\r\n```bash\r\n# Check Shinka dependency (google-genai, NOT google-generativeai)\r\npy -3 -c \"import google.genai; print('OK: google-genai')\"\r\n# If ModuleNotFoundError:\r\npip install google-genai\r\n\r\n# Verify World Monitor local sidecar (for --wm-tier auto)\r\ncurl -s http:\u002F\u002F127.0.0.1:46123\u002Fhealth\r\n```\r\n\r\n### 2. Test Single Run\r\n\r\n```bash\r\n# Free tier (fast, no deps, real data)\r\nhermes worldmonitor-osint fusion \"your_topic\" --wm-tier free --source-mode real --save\r\n\r\n# Auto tier (full, needs google-genai, uses local sidecar)\r\nhermes worldmonitor-osint fusion \"your_topic\" --wm-tier auto --source-mode real --save\r\n\r\n# **Mock mode for testing (no API calls, fast)**\r\nhermes worldmonitor-osint fusion \"your_topic\" --wm-tier auto --source-mode mock --llm-summary --save\r\n\r\n# With Japanese LLM summary (uses Hermes LLM, not google-genai)\r\nhermes worldmonitor-osint fusion \"your_topic\" --wm-tier free --source-mode real --llm-summary --save\r\n```\r\n\r\n### 3. Configure Scheduled Delivery (LOCAL TIME = JST)\r\n\r\n```bash\r\n# List existing cron jobs before changing anything\r\nhermes cron list\r\n\r\n# For Telegram-first MILSPEC\u002FPDB reports, prefer ONE canonical morning+evening pair.\r\n# Avoid deliver=all unless the user explicitly wants multi-channel delivery.\r\n# 08:00 JST\r\nhermes cron create --name \"osint-agent-morning MILSPEC markdown to Telegram\" \\\r\n  --schedule \"0 8 * * *\" \\\r\n  --deliver telegram \\\r\n  --prompt '\u003Cself-contained prompt that calls shinka_osint_briefing + gov_feed_digest + mhlw_designated_check, saves .md, and returns Telegram-readable Markdown>'\r\n\r\n# 18:00 JST\r\nhermes cron create --name \"osint-agent-evening MILSPEC markdown to Telegram\" \\\r\n  --schedule \"0 18 * * *\" \\\r\n  --deliver telegram \\\r\n  --prompt '\u003Csame pattern, evening slot>'\r\n```\r\n\r\nWhen repairing existing OSINT cron, pause overlapping legacy jobs (`OSINT融合レポート`, `wm-osint-fusion-*`, `wm-osint-pdb-*`) so the user receives one clear morning\u002Fevening report instead of duplicate or conflicting outputs. See `references\u002Fmilspec-telegram-cron-remediation.md` for the full remediation pattern and prompt skeleton.\r\n\r\n### `worldmonitor_fusion_report` Tool (Working Primary Path)\r\n\r\nThe `worldmonitor_fusion_report` tool (from the `worldmonitor_osint` plugin) is the **working primary fusion tool** — it succeeded in this session where `osint_agent_brief` previously failed with AttributeError.\r\n\r\n**Verified invocation (2026-08-03 evening slot):**\r\n```json\r\n{\r\n  \"slot\": \"evening\",\r\n  \"topic\": \"日本の安全保障と世界情勢\",\r\n  \"wm_tier\": \"free\",\r\n  \"include_sitdeck\": true,\r\n  \"include_mhlw\": true,\r\n  \"include_wm_free\": true,\r\n  \"llm_summary\": true\r\n}\r\n```\r\n\r\n**Returned structure:**\r\n- `success: true`\r\n- `generated_at`: ISO timestamp\r\n- `worldmonitor`: { `success`, `tier: \"free_web\"`, `focus: \"japan_security\"`, `sections: {gpsjam, oref_alerts, version, app_shell}`, `errors: [news_digest 401]`, `pro_only_skipped: [country_risk, country_intel_brief, regional_brief, risk_scores]`, `news_headlines: []` }\r\n- `shinka_milspec`: { `success: true`, `scenario_count: 3`, `average_score: 0.0`, `runs: [...]` — **all blocked by policy** }\r\n- `shinka_llm`: provider resolution info (openai-codex\u002Fgpt-5.6-sol)\r\n- `primary_sources`: egov-law MCP hint\r\n- `methodology`: fusion description\r\n\r\n**Key findings:**\r\n- **World Monitor free tier**: GPSJAM (global, 1038 High hexes), OREF alerts (0 in 24h), app shell metadata. **news_digest returns 401 \"API key required\" even on free web endpoint** — treat as credentials constraint, not \"no news\".\r\n- **Shinka MILSPEC**: All 3 test scenarios (`japan_russia_military_overview`, `national_security_framework`, `cyber_defense_posture`) blocked with `\"scenario_id '...' is not in the permitted Shinka OSINT policy\"`. Permitted domains include `japan_russia`, `national_security`, `cyber_defense` but specific scenario IDs must be registered. `shinka_osint_list_scenarios` returns 0 scenarios for `milspec_security_jp` example.\r\n- **LLM summary**: `shinka_llm.resolved.provider_id: \"openai-codex\"`, `model: \"gpt-5.6-sol\"` — but `llm_summary: true` did not produce a `summary_ja` field in output (may require Shinka import chain healthy).\r\n- **Primary sources**: Points to `egov-law` MCP server for Japanese legal citations.\r\n\r\n### Direct `osint_agent_brief` Failure Fallback\r\n\r\nWhen the integrated `osint_agent_brief` plugin is exposed but fails at runtime (for example, a serialization error such as `AttributeError: 'NoneType' object has no attribute '__dict__'`), do not fabricate a merged report and do not silently retry indefinitely. **Do not re-call with identical arguments after the first TOOL_RUNTIME failure** (loop warning \u002F wasted turns). Preserve the failed call as a collection constraint, then use this bounded fallback:\r\n\r\n1. Call `osint_agent_status` if the deferred tool surface is healthy; if `tool_call` bridge also fails, skip and go to step 3. Note `reports_dir` when available — osint_agent plugin: `~\u002F.hermes\u002Fosint-agent\u002Fbriefs` (Windows: `C:\\\\Users\\\\\u003Cuser>\\\\.hermes\\\\osint-agent\\\\briefs`), **distinct** from `worldmonitor-osint\u002Freports`.\r\n2. Optional: `osint_agent_multilayer_collect` with the **same topic** (no `fetch_wm_free` argument). Expect WM Free **HTTP 401 \"API key required\"** often even on free web — credentials constraint, not \"no news\".\r\n3. Execute web-search queries in parallel: `site:mod.go.jp`, `site:mhlw.go.jp`, `site:npa.go.jp`, `site:jma.go.jp`, `site:mofa.go.jp`, `site:kantei.go.jp`.\r\n4. **Body fetch preference (2026-08-06 evening verified):**\r\n   - If `web_extract` returns `BILLING_ERROR` \u002F 402 → **stop extract retries**; use terminal `curl -sL -A \"Mozilla\u002F5.0\"` + HTML strip.\r\n   - **JMA \u002F NPA \u002F MHLW HTML** usually return real bodies via curl.\r\n   - **`mod.go.jp`** often hits Cloudflare (`Just a moment...`) → tag `WAF_CHALLENGE`; use search title\u002Fdate + secondary reprint (`j-defense.ikaros.jp\u002Fdocs\u002Fmod\u002F*`) labeled **代替取得** (統幕転載). Never present reprint as direct MOD HTML.\r\n   - MOFA\u002FMETI: Access Denied or stale 404 → rediscover URL; do not invent.\r\n5. Keep verified facts, analysis, and uncertainty in separate sections. Lead with a **収集ステータス** table listing TOOL_RUNTIME \u002F BILLING_ERROR \u002F WAF \u002F primary OK. Explicitly state which requested layers (SitDeck, MHLW, WM Free) returned no content or failed.\r\n6. Full curl\u002FWAF recipe: `references\u002Fevening-jp-gov-curl-waf-2026-08-06.md` (also see `references\u002Fjma-primary-curl-endpoints.md`).\r\n\r\nA configured credential or successful readiness check is not evidence that SitDeck or MHLW content was actually collected. Distinguish a World Monitor API-key\u002FHTTP error from an absence of news.\r\n\r\n**Verified end-to-end (2026-07-31, morning AND evening slots, topic=日本の安全保障と世界情勢):** `osint_agent_brief` failed with the AttributeError in both runs; the 5-step fallback above produced complete Telegram-ready Japanese Markdown briefs (収集ステータス表 → 確認済み事実 by agency → 分析 → 不確実性) saved to `~\u002F.hermes\u002Fosint-agent\u002Fbriefs\u002Fosint_brief_2026-07-31_morning.md` and `osint_brief_2026-07-31_evening_fallback.md`. This confirms the fallback is sufficient on its own without the integration tool.\r\n\r\nEvening-slot deltas (verified 2026-07-31 evening, both runs):\r\n1. CLI brief stdout piped through `tail` may show only the L1–L6 collection-plan block — the real report is the saved `\u003Cts>_evening_\u003Ctopic>.md` in the briefs dir. Verify via the file, never stdout. (Second run's `tail -60` did show the full brief — treat stdout as best-effort, the file as truth.)\r\n2. A sibling process may drop compose artifacts (`evening_YYYYMMDD.md`, `compose_evening.py`) into the same briefs dir — they are secondary-source leads (cite NHK\u002FYahoo) and must be verified before inclusion (e.g. 国家情報局 7\u002F31設置 was re-confirmed via NHK\u002Fmainichi\u002Fyomiuri\u002FTBS searches on the second run).\r\n3. JMA typhoon detail (`data.jma.go.jp\u002Fmulti\u002Fcyclone\u002Fcyclone_detail.html?id=NN&lang=jp`) yields exact 実況\u002F予報 tables (pressure, wind, track) and the JMA 熊本地震 portal (`jma.go.jp\u002Fjma\u002Fmenu\u002F\u003Cid>.html`) carries the official 地震概要 + 今後の見通し — both extract cleanly via web_extract. The generic quake index `jma.go.jp\u002Fjp\u002Fquake\u002F` is DEAD (auto-redirects to `jma.go.jp\u002Fbosai\u002F`); go straight to the portal\u002Fevent pages instead.\r\n4. Manual fallback brief filename convention: `osint_brief_YYYY-MM-DD_evening.md` (plain name, no `_fallback` suffix — an earlier run used `..._evening_fallback.md`; use the plain name going forward). Second evening run produced a full 6,994-byte brief plus a 1,004-char Telegram body (≤1200 target) from this recipe alone.\r\n\r\n**Second verification (same day, later run; third run = evening slot 18:41 JST):** the CLI `hermes osint-agent brief --slot morning|evening --topic ... --wm-tier free --source-mode real --cron-stdout` **succeeds even while the tool-side `osint_agent_brief` fails** (different code path) and saves `\u003Cts>_\u003Cslot>_\u003Ctopic>.json\u002F.md` to the same briefs dir. However its layers are mostly empty (WM Free 401, MHLW 新規項目なし, Shinka score 0.0, SitDeck skipped) — the report substance came from the parallel primary-source web harvest (mod.go.jp\u002Fjs\u002Fpress\u002F, kantei kaiken transcript, JMA earthquake\u002Ftyphoon pages, npa.go.jp\u002Fnewlyarrived). Treat the CLI output as a layer-provenance skeleton, not the finished brief. Full recipe: `references\u002Fmorning-brief-fallback-recipe.md`.\r\n\r\n### Agent-Cron CLI Fallback for MILSPEC\u002FPDB Markdown\r\n\r\nWhen the user asks a scheduled agent to call `shinka_osint_briefing`, `gov_feed_digest`, and `mhlw_designated_check`, but those plugin tools are not exposed in the current tool surface, use the Hermes CLI equivalents instead of stopping:\r\n\r\n```bash\r\n# Shinka briefing equivalent; bounded timeout recommended in cron\r\n.\u002F.venv\u002FScripts\u002Fpython.exe -m hermes_cli.main shinka-osint briefing '日本の安全保障と世界情勢' \\\r\n  --source-mode real --max-scenarios 3 --example milspec_security_jp --save\r\n\r\n# Fusion fallback that also saves a JSON report when Shinka real-mode is slow\u002Ffail-closed\r\n.\u002F.venv\u002FScripts\u002Fpython.exe -m hermes_cli.main worldmonitor-osint fusion '日本の安全保障と世界情勢' \\\r\n  --wm-tier free --source-mode real --max-scenarios 3 --save\r\n\r\n# Primary government RSS and MHLW designated-drug monitor\r\n# ⚠️ 'scrapling-feeds' is NOT a valid subcommand in this fork (\"invalid choice\" error, verified 2026-07-31).\r\n# Use the osint-agent CLI brief instead (verified working even when the osint_agent_brief TOOL fails):\r\n.\u002F.venv\u002FScripts\u002Fpython.exe -m hermes_cli.main osint-agent brief --slot morning --topic '日本の安全保障と世界情勢' \\\r\n  --wm-tier free --source-mode real --cron-stdout\r\n# Flags: --no-sitdeck \u002F --no-mhlw disable layers (defaults ON; there are NO --include-* flags),\r\n# --llm-summary optional, --source-mode {mock,real}, --cron-stdout prints markdown only.\r\n# Expect mostly empty layers (WM Free 401, MHLW 新規項目なし, Shinka 0.0) — supplement with primary-source web collection.\r\n# Full verified recipe: references\u002Fmorning-brief-fallback-recipe.md\r\n```\r\n\r\nIf Shinka real-mode fails with fail-closed source fetch errors, do **not** switch to mock scores silently. Include the failure under `検証上の制約`, report score as unavailable\u002F0-equivalent, and still save a concise Markdown artifact under `~\u002F.hermes\u002Fosint-agent\u002Fbriefs\u002F`. See `references\u002Fmilspec-evening-cron-cli-fallback.md` for the exact fallback recipe and Telegram compression pattern.\r\n\r\n**Direct tool path** (when plugin tools ARE available): see `references\u002Fmilspec-evening-cron-direct-pattern.md` for the gov_feed_digest → web_search supplement → shinka_osint_list_scenarios lightweight check → MHLW reporting → save workflow.\r\n\r\n### 4. Verify Delivery\r\n\r\n- Reports saved to `~\u002F.hermes\u002Fworldmonitor-osint\u002Freports\u002FYYYYMMDDTHHMMSSZ_\u003Ctopic>.json`\r\n- Delivered to all connected channels (Telegram, LINE, Discord) via `deliver: all`\r\n- Telegram requires at least one user message to bot for chat ID detection\r\n\r\n## Plugin Tool Invocation Pattern\r\n\r\nOSINT plugin tools (`gov_feed_digest`, `mhlw_designated_check`, `worldmonitor_snapshot`) are **plugin-provided** — they appear in `tool_search()` results but NOT as top-level tools. The agent MUST invoke them via `tool_call(name=..., arguments=...)` wrapper:\r\n\r\n```\r\ntool_call(name=\"gov_feed_digest\", arguments={\"hours\": 24, \"max_per_feed\": 5})\r\ntool_call(name=\"mhlw_designated_check\", arguments={\"record_baseline\": false, \"scan_enforcement\": true})\r\ntool_call(name=\"worldmonitor_snapshot\", arguments={\"country_code\": \"JP\", \"news_lang\": \"en\", \"news_limit\": 10, \"region_id\": \"east-asia\"})\r\n```\r\n\r\n**Do not** call them as bare function-call expressions — that will fail with \"tool does not exist\". Use `tool_call` with the name and arguments dictionary. If tool_call itself is not available, fall back to the Hermes CLI equivalents documented in `references\u002Fmilspec-evening-cron-cli-fallback.md`.\r\n\r\n### World Monitor Sidecar Resilience\r\n\r\nWorld Monitor's local sidecar (`http:\u002F\u002F127.0.0.1:46123`) may not be running. When it is down, `worldmonitor_snapshot` still succeeds and returns data via **free web backfill**:\r\n- News digest from Google News RSS (politics, security, military, crisis categories)\r\n- GPS jamming \u002F spoofing data from Wingbits\r\n- OREF rocket\u002Fmissile alerts\r\n\r\nThe sidecar-dependent endpoints (country_risk, country_intel_brief, regional_brief, risk_scores) will return connection-refused errors, but the tool's `success: true` and the obtained data is still usable for briefings. Report the sidecar failure under `## 検証上の制約` or a constraints section.\r\n\r\n### Telegram Character Limit (1200 Max)\r\n\r\nTelegram messages are capped at ~4096 chars but for concise daily briefings target **1200 chars or fewer**. Use this compression pattern:\r\n1. Write the full draft first, save to file.\r\n2. Check char count with `wc -m \u003Cfile>`.\r\n3. If >1200: strip tables (use inline `—` separators), compress multi-sentence items into single lines, remove redundant source citations, prefer `▶` headers over `##` for sub-sections.\r\n4. Save the compressed version; the file on disk carries the full detail.\r\n\r\nThis session's original draft was 1951 chars → compressed to 1059 chars.\r\n\r\n### CISA Feed 403 Block\r\n\r\nAll three CISA feeds (advisories, ICS, news) return HTTP 403 when fetched with polite `urllib`. Scrapling Fetcher (stealth HTTP) is not installed in this environment. Report this as a collection constraint in the briefing — do not claim \"no CISA advisories exist.\"\r\n\r\n**Recommended fix order:**\r\n1. Try CISA KEV JSON first — no auth, works with plain `urllib`, covers Known Exploited Vulnerabilities (most actionable for daily briefings). See `references\u002Fcisa-json-api-fallback.md` for exact endpoints and Python snippet.\r\n2. Install Scrapling Fetcher (`pip install scrapling-fetcher`) as a permanent stealth-HTTP solution for RSS feeds.\r\n3. As a last resort, register for a CISA API key at https:\u002F\u002Fapi.cisa.gov\u002Fregister for the full API surface.\r\n\r\n### Japanese Government Feed Patterns (Weekends & Holidays)\r\n\r\n防衛省 and デジタル庁 RSS feeds typically return **0 new entries** on weekends and Japanese national holidays. This is expected behavior — do not flag it as a collection failure. The report should note \"新規0件（日曜\u002F休日のため更新なし）\" and move on.\r\n\r\n### MHLW First-Run Flood\r\n\r\nThe first `mhlw_designated_check(record_baseline=false)` call returns **every known meeting notice and enforcement on the page** (observed: 40+ items, going back 2+ years). This is because no baseline ID is recorded to filter against. For initial cron setup, suppress historical clutter in the Telegram body by filtering to items within 90 days. For subsequent runs, set `record_baseline=true` on one dedicated run to capture the baseline, then the tool will only return genuinely new items.\r\n\r\n## Pitfalls\r\n\r\n### Shinka Hangs on Missing\u002FDeprecated Dependency — **MULTIPLE FAILURE MODES (2026-07-03)**\r\n\r\n**Symptom**: `hermes worldmonitor-osint fusion` runs >10 min with no output, or fails fast with a Python traceback in the report's `shinka_milspec.error`.\r\n\r\n**Failure Mode A: Deprecated `google.generativeai`** (observed 2026-06-18)\r\n\r\n**Symptom**: `FutureWarning: All support for the google.generativeai package has ended` or import error.\r\n**Cause**: Shinka MILSPEC evaluation tried to import deprecated `google.generativeai` (end-of-life, no updates since 2024).\r\n**Fix Applied**: Local checkout at `~\u002FDesktop\u002FShinkaEvolve-OSINT-main` patched to use `google.genai` SDK.\r\n\r\n**Failure Mode B: NumPy ≥2.5.0 + SciPy incompatibility** (observed 2026-07-03)\r\n\r\n**Symptom**: Shinka import chain fails with:\r\n```\r\nUserWarning: A NumPy version >=1.23.5 and \u003C2.5.0 is required for this version of SciPy (detected version 2.5.0)\r\n```\r\nThen cascades through `shinka\u002Fcore\u002Fconfig.py` → `shinka\u002Fllm\u002F__init__.py` → full eval failure.\r\n**Cause**: SciPy pinned to a version incompatible with NumPy 2.5.0 on this host.\r\n**Fix**: Downgrade NumPy:\r\n```bash\r\npip install \"numpy\u003C2.5\"\r\n```\r\n\r\n**Failure Mode C: General import chain failure** (intermittent)\r\n\r\n**Symptom**: `shinka_osint_status` shows `importable: false`, `tool_count: 0`.\r\n**Workaround**: Use `--wm-tier free` without `--llm-summary` for production cron jobs.\r\n\r\n**Critical interaction with `--llm-summary`**: Even `--wm-tier free --source-mode mock --llm-summary` triggers the Shinka import chain. The `--llm-summary` flag routes through Shinka's LLM provider layer, which pulls in the full `shinka.llm` module chain. If Shinka imports fail, `shinka_llm` will be empty `{}` and NO summary is generated — the flag is silently a no-op. To confirm Shinka is healthy enough for LLM summary:\r\n```bash\r\npy -3 -c \"import numpy; print(numpy.__version__)\"   # must be \u003C2.5\r\npy -3 -c \"from google import genai; print('genai OK')\"\r\n```\r\n\r\n**Workaround for reliable cron output without Shinka**:\r\n```bash\r\n# World Monitor data only, no Shinka import at all\r\nhermes worldmonitor-osint fusion \"topic\" --wm-tier free --source-mode real --save\r\n# ~30-60 seconds, includes: news_digest, GPS jamming, OREF alerts\r\n# No --llm-summary flag → no Shinka import attempted\r\n```\r\n\r\n---\r\n\r\n### Telegram Delivery Not Working\r\n\r\n**Cause**: `channel_readiness_check` shows `telegram.liveRoundtripReady: false` and `candidateTargets: {directChats: 0, groupChats: 0}`\r\n\r\n**Fix**: Send a message to the Telegram bot first (e.g., `\u002Fstart`) to register chat ID. Subsequent cron deliveries will work.\r\n\r\n### OSINT Cron Delivery Fails or Duplicates\r\n\r\n**Symptoms**:\r\n- `last_delivery_error` mentions a platform not configured, or `deliver: all` fans out to channels the user did not ask for.\r\n- Several OSINT jobs run around the same time and produce duplicate reports.\r\n- Direct script\u002Fno-agent jobs produce raw plugin output, hang, or fail to generate the requested Markdown structure.\r\n\r\n**Fix**:\r\n1. `hermes cron list` and identify all OSINT job families.\r\n2. Keep a single canonical pair for `osint-agent-morning` and `osint-agent-evening`.\r\n3. Set `deliver: telegram` for Telegram-requested reporting; do not use `all` unless explicitly requested.\r\n4. Prefer an agent-driven self-contained prompt that calls the OSINT tools, saves a `.md` artifact, and returns a concise Telegram Markdown summary.\r\n5. Pause overlapping legacy `worldmonitor-osint fusion`, `wm-osint-fusion-*`, and `wm-osint-pdb-*` jobs.\r\n\r\nSee `references\u002Fmilspec-telegram-cron-remediation.md`.\r\n\r\n### OSINT Cron Provider Timeout \u002F Free-Tier Rotation\r\n\r\nWhen a scheduled OSINT\u002FPDB job fails with provider timeout or exhausted fallback chain, first remove unnecessary LLM dependency from the cron path instead of only increasing retries. For routine WorldMonitor\u002FPDB reports, convert the job to `no_agent: true` and run a deterministic script that calls `worldmonitor-osint situation-report --slot \u003Cmorning|evening> --cron-stdout`; validate the script directly before reporting success. Route delivery to the requested concrete channel (usually `telegram:\u003Cchat_id>`) rather than `all`, so Discord\u002FLINE\u002FPhoton delivery failures do not mark a successful report as failed.\r\n\r\nIf the user asks that async subagents use free quota, configure delegation via `hermes config set delegation.provider opencode-zen` and `delegation.model auto-free` (do not patch `~\u002F.hermes\u002Fconfig.yaml` directly). Pin any remaining agent-driven OSINT cron jobs to `opencode-zen \u002F auto-free` with `cronjob(action=\"update\", model={...})`. Full runbook and script template: `references\u002Fosint-cron-timeout-and-free-rotation.md`.\r\n\r\n### Shinka LLM Summary Uses Unsupported Codex Model\r\n\r\n**Symptom**: `--llm-summary` returns `The 'gpt-5.2' model is not supported when using Codex with a ChatGPT account.`\r\n\r\n**Cause**: The Shinka OSINT provider bridge previously fell back to a stale hardcoded Codex model instead of Hermes Agent's configured provider\u002Fmodel.\r\n\r\n**Fix Applied (2026-06-25)**: `plugins\u002Fshinka-osint\u002Fproviders.py` now reads Hermes `model.provider` + `model.default`\u002F`model.model`, prioritizes the configured Hermes provider when supported, and falls back to `get_default_model_for_provider(\"openai-codex\")` \u002F `gpt-5.5` rather than `gpt-5.2`. Verify with:\r\n\r\n```bash\r\npython -m pytest tests\u002Fplugins\u002Ftest_shinka_osint_providers.py -q -o 'addopts='\r\npython -m hermes_cli.main worldmonitor-osint fusion '認知戦' --wm-tier free --source-mode mock --llm-summary --save\r\n```\r\n\r\nExpected verification: `shinka_milspec.executive_summary.success=true` and `shinka_llm.resolved.model` equals the Hermes configured model, e.g. `nvidia\u002Fnemotron-3-super-120b-a12b`.\r\n\r\n### Fusion Tool Output Truncation \u002F Unusable LLM Summary\r\n\r\n**Symptom**: `worldmonitor_fusion_report` or `hermes worldmonitor-osint fusion ... --llm-summary --save` succeeds, but the tool response is huge\u002Ftruncated, or `shinka_milspec.executive_summary.summary_ja` contains meta-prompt\u002Fprocess text instead of a clean user-facing Japanese briefing.\r\n\r\n**Fix**:\r\n1. Do not relay the raw truncated response or raw `summary_ja` blindly.\r\n2. Use the saved JSON report as the source of truth. Check BOTH possible paths:\r\n   - Default profile: `~\u002F.hermes\u002Fworldmonitor-osint\u002Freports\u002F`\r\n   - Named profile: `~\u002F.hermes\u002Fprofiles\u002F\u003Cprofile>\u002Fworldmonitor-osint\u002Freports\u002F`\r\n3. Extract structured fields: run metadata, World Monitor tier\u002Fsections, top news by `importanceScore`, GPSJam stats\u002Fregions, OREF status, and Shinka run scores\u002Ferrors.\r\n4. Reconstruct a concise Japanese report from those structured fields.\r\n5. Label constraints explicitly: `source_mode=mock`, `wm-tier=free`, sidecar\u002Fpro not used, and Shinka scenario validation errors such as allowlist failures or import errors.\r\n\r\nSee `references\u002Ffusion-report-json-postprocess.md` for the extraction checklist and minimal Python extractor.\r\n\r\n### Cron Job Output Truncation\r\n\r\n**Symptom**: Large JSON reports not fully delivered\r\n\r\n**Cause**: Messaging platforms have message size limits (Telegram: 4096 chars)\r\n\r\n**Fix**: Reports are saved as files; delivery sends summary. Access full report via saved JSON file at `~\u002F.hermes\u002Fworldmonitor-osint\u002Freports\u002F`.\r\n\r\n### World Monitor Local Sidecar Not Running\r\n\r\n**Symptom**: `--wm-tier auto` fails with connection refused to `http:\u002F\u002F127.0.0.1:46123`\r\n\r\n**Cause**: Auto tier requires World Monitor sidecar (koala73\u002Fworldmonitor) running locally for Pro features.\r\n\r\n**Fix**: Start sidecar before running auto tier, or use `--wm-tier free` which works without sidecar.\r\n\r\n## Verification\r\n\r\n```bash\r\n# Check report saved\r\nls -la ~\u002F.hermes\u002Fworldmonitor-osint\u002Freports\u002F\r\n\r\n# Verify cron jobs (times shown in LOCAL TZ)\r\nhermes cron list\r\n\r\n# Test channel readiness\r\nhermes channel-readiness-check\r\n\r\n# Verify Shinka dependency status\r\nhermes shinka-osint status\r\n# Check importable: true, tool_count > 0 for full Shinka eval\r\n\r\n# Verify World Monitor sidecar (for --wm-tier auto)\r\ncurl -s http:\u002F\u002F127.0.0.1:46123\u002Fhealth\r\n\r\n# Current Shinka status (2026-06-18): importable=false, tool_count=0\r\n# → Use --wm-tier free for production cron\r\n```\r\n\r\n### Mock Mode Quick Test (Bypasses Shinka Import Issues)\r\n\r\n```bash\r\n# Fast test without API keys or sidecar\r\nhermes worldmonitor-osint fusion \"テスト\" --wm-tier auto --source-mode mock --llm-summary --save\r\n# Completes in ~30s, generates report with mock risk scores + LLM Japanese summary\r\n# Use this to test fusion pipeline without Shinka dependency\r\n\r\n# Free tier real test\r\nhermes worldmonitor-osint fusion \"テスト\" --wm-tier free --source-mode real --save\r\n# Completes in ~30-60s, real World Monitor data, no Shinka\r\n```\r\n\r\n## Absorbed workflow map\r\n\r\nThis umbrella now covers the former morning\u002Fevening briefing, World Monitor wrapper, Shinka MILSPEC workflow\u002Ftroubleshooting, SitDeck digest, and Telegram news briefing classes. Their session-specific material is preserved in:\r\n\r\n- `references\u002Fosint-daily-morning-briefing.md`\r\n- `references\u002Fworldmonitor-osint-tool-wrapper.md`\r\n- `references\u002Fshinka-milspec-workflow.md`\r\n- `references\u002Fsitdeck-osint-digest.md`\r\n- `references\u002Fcron-news-briefing-telegram.md`\r\n- `references\u002Ffeed-fallback-patterns.md`, `references\u002Fshinka-milspec-policy.md`, and the re-homed templates\u002Fscripts\r\n\r\nSelect the relevant labeled reference rather than creating a new one-session OSINT skill.\r\n\r\n## References\r\n\r\n- `references\u002Fworldmonitor-non-mcp.md` — User-specific rule: World Monitor must not be used through plain MCP; use desktop\u002Fexe or approved non-MCP paths.\r\n- `references\u002Fevening-osint-fallback-web-browser-2026-08-07.md` — **Evening 2026-08-07**: `osint_agent_brief` AttributeError (4th reproduction), `web_extract` BILLING_ERROR → **web_search + curl** primary chain for government\u002FIntel agency sources. **NIDS\u002FNPA\u002F CIA Factbook direct curl 成功**、NIA発足(7\u002F31)主要紙クロスチェック確認、CIA Factbook 2\u002F4終了・アーカイブ化確認。Blocked: mod.go.jp\u002Fmofa.go.jp\u002Fmoj.go.jp\u002Fcas.go.jp\u002Fcyber.go.jp (WAF\u002F403\u002F404)。Failure tags: `TOOL_RUNTIME`、`BILLING_ERROR`、`WAF_CHALLENGE`、`HTTP_403`、`HTTP_404`、`STRUCTURE_CHANGED`。Telegram-ready report template with status table included. **WAFなしドメイン優先収集ルート確立** (NIDS\u002FNPA\u002FJMA)。\r\n- `references\u002Fevening-osint-fallback-web-browser-2026-08-06.md` — **Evening 2026-08-06**: `osint_agent_brief` TOOL_RUNTIME (AttributeError), `web_extract` BILLING_ERROR\u002F402 → **web_search + browser_navigate + browser_console** primary chain for government\u002FIntel agency sources. Verified working: Wikipedia (NCO), Tokyo portal (NISC 2025), DEFENSE NAVI (2026白書), CIA Factbook archive, NCSC\u002FDIA\u002FODNI PDFs, 国会API. Blocked: mod.go.jp\u002Fmofa.go.jp\u002Fmoj.go.jp\u002Fnisc.go.jp (WAF\u002F403), 官邸会見 (404). Failure tags: `TOOL_RUNTIME`, `BILLING_ERROR`, `WAF_CHALLENGE`, `HTTP_403`, `HTTP_404`. Telegram-ready report template with status table included.\r\n- `references\u002Fworldmonitor-tier-comparison.md` — Tier feature matrix and performance characteristics\r\n- `references\u002Fshinka-dependency-fix.md` — Shinka MILSPEC dependency resolution guide\r\n- `references\u002Fcron-delivery-patterns.md` — Multi-channel cron delivery configuration patterns\r\n- `templates\u002Fosint-fusion-cron.yaml` — Cron job template for common schedules\r\n- `scripts\u002Fverify-shinka-deps.py` — Quick dependency verification script\r\n- `references\u002Fmilspec-evening-cron-direct-pattern.md` — Direct tool-call MILSPEC evening briefing (primary path when plugin tools available)\r\n- `references\u002Fmilspec-evening-cron-cli-fallback.md` — CLI fallback for MILSPEC evening briefing (when tools not exposed)\r\n- `references\u002Fjma-primary-curl-endpoints.md` — curl-only JMA quake\u002Ftyphoon JSON + 概要PDF extraction, mod.go.jp Cloudflare workaround, and fork-venv `osint-agent` CLI notes. Use whenever `web_extract` is unavailable so the brief still rests on real primary data instead of nothing.\r\n- `references\u002Fevening-briefing-verified-2026-08-03.md` — **Verified evening cron output pattern**: complete JSON structure, 18 gov_feed entries (防衛省12\u002Fデジタル庁6), CISA 403, SitDeck skipped, Shinka blocked by policy, web_search fallback recipe, Telegram compression to 1059 chars.\r\n- `references\u002Fosint-agent-brief-failure-pattern.md` — **Verified failure pattern & fallback**: `osint_agent_brief` AttributeError reproduction, 5-step web_search fallback, osint-fallback-routes integration, CLI alternative path that works.\r\n- `references\u002Fosint-fallback-routes-applied-2026-08-04.md` — **Cross-skill integration record**: `osint-fallback-routes` skill failure tags (`AUTH_REQUIRED`, `STRUCTURE_CHANGED`, `BILLING_ERROR`) applied verbatim in morning briefing report; alternate route catalog mapped to each failed agency source; cron template protocol followed. (Note: osint-fallback-routes is user-owned, not curator-managed — cannot auto-patch; see this reference for integration evidence)\r\n- `references\u002Fosint-agent-brief-morning-verified-2026-08-05.md` — **3rd verified session**: `osint_agent_brief` tool direct call (slot=morning, wm_tier=free, include_sitdeck\u002Fmhlw\u002Fwm_free=true, llm_summary=true) → AttributeError 3rd occurrence + World Monitor 401 → osint_agent_multilayer_collect plan → web_search×12 parallel → SERIALIZATION_ERROR tag added to taxonomy → 10 primary sources verified → unified template report generated\r\n- `references\u002Fevening-jp-gov-curl-waf-2026-08-06.md` — **Evening 2026-08-06**: `osint_agent_brief` TOOL_RUNTIME (no identical retry), `web_extract` BILLING_ERROR → **curl primary** for JMA\u002FNPA\u002FMHLW; `mod.go.jp` Cloudflare WAF → Jディフェンス統幕転載を「代替取得」明記; SitDeck\u002FWM free 未達を収集ステータス表で分離。`osint-fallback-routes` は user-owned のため adopt 推奨\r\n\r\n---\r\n\r\n## 実戦検証済みフォールバックチェーン (2026-08-04 朝枠)\r\n\r\n本セッションで機能した完全な代替経路を再現可能な手順として記録:\r\n\r\n### 1. 統合ツール失敗時の即時フォールバック順序\r\n\r\n```\r\nosint_agent_brief (tool)\r\n  → 失敗: AttributeError: 'NoneType' object has no attribute '__dict__'\r\n  → osint_agent_multilayer_collect (plan取得成功、wm_freeブロックで401確認)\r\n  → web_search × Nクエリ並列実行 (site:go.jp OR site:mod.go.jp OR site:mofa.go.jp 等)\r\n  → 成果をMarkdownレポートへ合成\r\n```\r\n\r\n### 2. 各ツールの実測失敗モードと実効代替\r\n\r\n| ツール | 失敗モード | 代替手段 | 成果 |\r\n|--------|------------|----------|------|\r\n| `osint_agent_brief` | `AttributeError` (シリアライズエラー) | `osint_agent_multilayer_collect` → `web_search` 手動 | 収集計画取得成功、以降手動クエリで補完 |\r\n| `web_extract` (防衛省・警察庁) | `BILLING_ERROR: insufficient_funds` (402) | `web_search` スニペット + 公式サイト構造確認 | 概要事実確認可能、詳細PDF未取得 |\r\n| World Monitor Free API | `HTTP 401: API key required` | なし (Free tier応答なし) | 取得不能記録 |\r\n\r\n### 3. 失敗分類タグ実装検証 (osint-fallback-routesとの連携)\r\n\r\n実ジョブで以下タグが機能したことを確認:\r\n- `BILLING_ERROR` — スクレイピング課金不足 → 即座に `web_search` 代替へ切替有効\r\n- `HTTP_401` \u002F `AUTH_REQUIRED` — 認証必須API → 代替ルートなしで「取得不能」記録\r\n- `STRUCTURE_CHANGED` — 公式サイト構造変更 (MHLW PDF直リンク不明) → 検索経由で公式ページ存在確認のみ\r\n\r\n### 4. レポート出力テンプレート (Telegram向け簡潔版・1200字以内)\r\n\r\n```markdown\r\n# エグゼクティブサマリー\r\n- 3-5行で核心のみ\r\n\r\n## ?️ 政府・省庁一次情報（確認済み事実）\r\n| 項目 | 内容 | 出典 |\r\n|------|------|------|\r\n\r\n## ⚔️ 安全保障・地政学（分析・不確実性含む）\r\n| 観点 | 確認済み事実 | 分析・不確実性 |\r\n\r\n## ?️ 自然災害・レジリエンス（確認済み）\r\n| 現象 | 状況 | 対応 |\r\n\r\n## ? 情報収集ギャップ・代替ルート実績\r\n| 対象 | 正攻法失敗理由 | 代替ルート成果 |\r\n\r\n## ? 今後注視ポイント\r\n1. ...\r\n2. ...\r\n\r\n## ? 凡例\r\n- ✅ 確認済み事実\r\n- ? 分析・不確実性\r\n- ❌ 取得不能\r\n- **代替取得**: web_searchスニペット等で補完\r\n```\r\n\r\n### 次回適用すべき改善\r\n\r\n1. `osint_agent_brief` 呼び出し前にヘルスチェック的試行を入れ、失敗時即座に `osint_agent_multilayer_collect` へフォールバックするプロンプトテンプレート化\r\n2. `web_extract` 対象URLを事前に「課金発生しやすいドメイン」リスト (go.jp, mod.go.jp, npa.go.jp, mhlw.go.jp 等) と照合し、初めから `web_search` 併用を明示\r\n3. 失敗タグをレポートJSONに構造化して含め、後続の `cron_failure_patterns.py` 解析に直結させる\r\n4. `osint-fallback-routes` スキルの `AUTH_REQUIRED` \u002F `STRUCTURE_CHANGED` タグを本スキルのピットフォール節にもミラーし、クロス参照可能にする\r\n\r\n---\r\n\r\n### 実戦検証済みフォールバックチェーン (2026-08-05 朝枠・osint_agent_brief tool実行)\r\n\r\n本セッションで `osint_agent_brief` tool (slot=morning, topic=日本の安全保障と世界情勢, wm_tier=free, include_sitdeck=true, include_mhlw=true, include_wm_free=true, llm_summary=true) を直接実行し、以下の完全な代替経路を機能検証:\r\n\r\n#### 1. 統合ツール失敗時の即時フォールバック順序\r\n\r\n```\r\nosint_agent_brief (tool)\r\n  → 失敗: AttributeError: 'NoneType' object has no attribute '__dict__'\r\n  → osint_agent_multilayer_collect (plan取得成功、wm_freeブロックで401確認)\r\n  → web_search × 4クエリ並列実行 (site:go.jp OR site:mod.go.jp OR site:mofa.go.jp 等)\r\n  → 成果をMarkdownレポートへ合成\r\n```\r\n\r\n#### 2. 各ツールの実測失敗モードと実効代替\r\n\r\n| ツール | 失敗モード | 代替手段 | 成果 |\r\n|--------|------------|----------|------|\r\n| `osint_agent_brief` | `AttributeError` (シリアライズエラー) | `osint_agent_multilayer_collect` → `web_search` 手動 | 収集計画取得成功、以降手動クエリで補完 |\r\n| `osint_agent_multilayer_collect` (L1 wm_free) | `HTTP 401: API key required` | なし (Free tier応答なし) | 取得不能記録、planのみ活用 |\r\n| `web_search` (4クエリ) | なし | — | 20件の公式・準公式ソース取得成功 |\r\n\r\n#### 3. 失敗分類タグ実装検証 (osint-fallback-routesとの連携)\r\n\r\n実ジョブで以下タグが機能したことを確認:\r\n- `HTTP_401` \u002F `AUTH_REQUIRED` — World Monitor Free API認証必須 → 代替ルートなしで「取得不能」記録\r\n- `STRUCTURE_CHANGED` — 公式サイト構造変更 (MHLW PDF直リンク不明) → 検索経由で公式ページ存在確認のみ\r\n\r\n#### 4. レポート出力テンプレート (Telegram向け簡潔版・1200字以内) — 本セッション採用版\r\n\r\n```markdown\r\n# エグゼクティブサマリー\r\n- 3-5行で核心のみ\r\n\r\n## ?️ 政府・省庁一次情報（確認済み事実）\r\n| 項目 | 内容 | 出典 |\r\n|------|------|------|\r\n\r\n## ⚔️ 安全保障・地政学（分析・不確実性含む）\r\n| 観点 | 確認済み事実 | 分析・不確実性 |\r\n\r\n## ?️ 自然災害・レジリエンス（確認済み）\r\n| 現象 | 状況 | 対応 |\r\n\r\n## ? 情報収集ギャップ・代替ルート実績\r\n| 対象 | 正攻法失敗理由 | 代替ルート成果 |\r\n\r\n## ? 今後注視ポイント\r\n1. ...\r\n2. ...\r\n\r\n## ? 凡例\r\n- ✅ 確認済み事実\r\n- ? 分析・不確実性\r\n- ❌ 取得不能\r\n- **代替取得**: web_searchスニペット等で補完\r\n```\r\n\r\n#### 5. 本セッションで確認した一次ソース (検証用リンク集)\r\n\r\n| # | 機関 | ページ | 取得日 |\r\n|---|------|--------|--------|\r\n| 1 | 外務省 | https:\u002F\u002Fwww.mofa.go.jp\u002Fmofaj\u002Fgaiko\u002Fpage22_000407.html | 2026-08-05 |\r\n| 2 | 防衛省 | https:\u002F\u002Fwww.mod.go.jp\u002Fj\u002Fpress\u002Fwp\u002Findex.html | 2026-08-05 |\r\n| 3 | 防衛省 | https:\u002F\u002Fwww.mod.go.jp\u002Fj\u002Fsurround\u002FnorthKorea\u002Findex.html | 2026-08-05 |\r\n| 4 | 警察庁 | https:\u002F\u002Fwww.npa.go.jp\u002Fnews\u002Frelease\u002F2026\u002F20260716001.html | 2026-08-05 |\r\n| 5 | 気象庁 | https:\u002F\u002Fwww.data.jma.go.jp\u002Ftyphoon\u002Fposition_table\u002Ftable2026.html | 2026-08-05 |\r\n| 6 | 厚労省 | https:\u002F\u002Fwww.mhlw.go.jp\u002Fstf\u002Fseisakunitsuite\u002Fbunya\u002Fkenkou_iryou\u002Fkenkou\u002Fkekkaku-kansenshou\u002Fkiki_sonae.html | 2026-08-05 |\r\n| 7 | 内閣官房 | https:\u002F\u002Fwww.cas.go.jp\u002Fjp\u002Fseisakukaigi\u002Fanzenhosyoukaigi\u002Fkaisai.html | 2026-08-05 |\r\n| 8 | NISC | https:\u002F\u002Fwww.cyber.go.jp\u002Findex.html | 2026-08-05 |\r\n| 9 | JST-CRDS | https:\u002F\u002Fcrds.jst.go.jp\u002Fdw\u002F20260408\u002F2026040845034\u002F | 2026-08-05 |\r\n| 10 | 防衛省 | https:\u002F\u002Fwww.mod.go.jp\u002Fj\u002Fapproach\u002Fanpo\u002F2026\u002F0115a_usa-j.html | 2026-08-05 |\r\n\r\n#### 6. 次回適用すべき追加改善 (2026-08-05 朝枠追記)\r\n\r\n5. `osint_agent_brief` tool呼び出し時のパラメータ `slot=morning, wm_tier=free, include_sitdeck=true, include_mhlw=true, include_wm_free=true, llm_summary=true` を cronプロンプトにハードコード化し、失敗時即座に `osint_agent_multilayer_collect` → `web_search` 並列へ分岐するテンプレートを `templates\u002Fosint-agent-brief-fallback-prompt.md` として保存\r\n6. 失敗タグ (`HTTP_401`, `AUTH_REQUIRED`, `STRUCTURE_CHANGED`) をレポート本文の「情報収集ギャップ」セクションに構造化して含め、`scripts\u002Fcron_failure_patterns.py` 解析に直結\r\n7. `osint-fallback-routes` スキルの「省庁横断」カタログ (World Monitor, 防衛省・外務省・警察庁・気象庁・厚労省等) を本スキルの代替ルートカタログ節にミラー統合済み — クロス参照可能にする\r\n","# OSINT Fusion Operations\r\n\r\nThis skill covers automated OSINT (Open Source Intelligence) fusion reporting using multi-source intelligence platforms like **World Monitor** and **ShinkaEvolve**, including tier selection, dependency management, scheduled report generation, and multi-channel delivery (Telegram, LINE, Discord, etc.).\r\n\r\n## When to Use\r\n\r\n- Generating periodic OSINT fusion reports on geopolitical, security, or domain-specific topics\r\n- Configuring World Monitor + Shinka fusion pipelines with appropriate tier selection\r\n- Setting up cron jobs for automated report generation and delivery\r\n- Troubleshooting dependency issues in Shinka MILSPEC evaluation\r\n- Multi-channel report distribution via Hermes messaging gateway\r\n\r\n## Prerequisites\r\n\r\n- Hermes Agent with `worldmonitor-osint` command available (built-in)\r\n- **User-specific World Monitor boundary:** do not use the plain `worldmonitor` MCP server. Use the desktop shortcut\u002Fexe or approved non-MCP OSINT paths instead; see `references\u002Fworldmonitor-non-mcp.md`.\r\n- For Shinka MILSPEC evaluation (`--wm-tier auto` or `pro`): **`pip install google-genai`** (NOT `google-generativeai` — deprecated since 2024, end-of-life)\r\n  - **FIXED (2026-06-18)**: Local ShinkaEvolve-OSINT checkout at `~\u002FDesktop\u002FShinkaEvolve-OSINT-main` patched to use `google.genai` SDK\r\n  - Supports **multiple embedding providers**: Google (Gemini), NVIDIA, Codex, Nous, OpenRouter, OpenAI, Azure\r\n- World Monitor local sidecar running at `http:\u002F\u002F127.0.0.1:46123` for `--wm-tier auto` (Pro features via local API)\r\n- Configured messaging channels (Telegram, LINE, Discord) for `deliver: \"all\"`\r\n- `cron` toolset enabled for scheduled jobs\r\n\r\n## How to Run\r\n\r\n### Quick Report (Free Tier)\r\n\r\n```bash\r\nhermes worldmonitor-osint fusion \"日本の安全保障\" --wm-tier free --source-mode real --save\r\n```\r\n\r\n- Completes in ~30-60 seconds\r\n- Uses World Monitor Free tier (news digest, GPS jamming, OREF alerts)\r\n- Skips Shinka MILSPEC evaluation\r\n- Saves JSON report to `~\u002F.hermes\u002Fworldmonitor-osint\u002Freports\u002F`\r\n\r\n### Full Report (Auto\u002FPro Tier)\r\n\r\n```bash\r\nhermes worldmonitor-osint fusion \"経済安全保障\" --wm-tier auto --source-mode real --save\r\n```\r\n\r\n- Requires `google-generativeai` package for Shinka evaluation\r\n- Includes MILSPEC scoring and scenario evolution\r\n- Longer execution time (2-5 minutes typical)\r\n\r\n### Scheduled Reports (Cron)\r\n\r\n```bash\r\n# Morning, noon, evening delivery to all channels\r\nhermes cron create \\\r\n  --name \"OSINT融合レポート 日本の安全保障 08:00\" \\\r\n  --schedule \"0 8 * * *\" \\\r\n  --prompt 'hermes worldmonitor-osint fusion \"日本の安全保障\" --wm-tier free --source-mode real --save' \\\r\n  --deliver all\r\n\r\nhermes cron create \\\r\n  --name \"OSINT融合レポート 日本の安全保障 12:00\" \\\r\n  --schedule \"0 12 * * *\" \\\r\n  --prompt 'hermes worldmonitor-osint fusion \"日本の安全保障\" --wm-tier free --source-mode real --save' \\\r\n  --deliver all\r\n\r\nhermes cron create \\\r\n  --name \"OSINT融合レポート 日本の安全保障 20:00\" \\\r\n  --schedule \"0 20 * * *\" \\\r\n  --prompt 'hermes worldmonitor-osint fusion \"日本の安全保障\" --wm-tier free --source-mode real --save' \\\r\n  --deliver all\r\n```\r\n\r\n## Quick Reference\r\n\r\n| Command | Tier | Shinka | Time | Use Case |\r\n|---------|------|--------|------|----------|\r\n| `--wm-tier free` | Free | ❌ | ~30-60s | **Daily ops, quick briefings (RECOMMENDED for cron)** |\r\n| `--wm-tier auto` | Auto | ⚠️ HANGS | 2-5 min* | Deep analysis, MILSPEC scoring — **currently broken** |\r\n| `--wm-tier pro` | Pro | ✅ | 2-5 min | Full pro features (requires auth) |\r\n| `--source-mode mock` | Any | ❌ (bypassed) | ~30-60s | **Testing without API calls \u002F Shinka deps** |\r\n| `--llm-summary` | Any | Dependent | +10-30s | **Japanese executive summary — requires Shinka import chain healthy** |\r\n| `--llm-summary` (w\u002F Shinka broken) | Any | ❌ | ~same | **Silent no-op: `shinka_llm: {}` — no summary produced** |\r\n\r\n*\\*Auto tier currently hangs on Shinka import chain (`importable: false`). Use `mock` mode or `free` tier for reliable execution.*\r\n\r\n### Supported Embedding Providers (via `shinka\u002Fllm\u002Fembedding.py`)\r\n\r\n| Provider | Models | Auth Env Var |\r\n|----------|--------|--------------|\r\n| **Google (Gemini)** | `gemini-embedding-exp-03-07`, `gemini-embedding-001` | `GEMINI_API_KEY` \u002F `GOOGLE_API_KEY` |\r\n| **NVIDIA** | `nvidia\u002Fnv-embedqa-e5-v5`, `nvidia\u002Fnv-embedqa-mistral-7b-v2` | `NVIDIA_API_KEY` \u002F `NGC_API_KEY` |\r\n| **Codex** | `codex-embedding` | `CODEX_API_KEY` \u002F `OPENAI_API_KEY` |\r\n| **Nous** | `nous-embedding`, `nous-hermes-embedding` | `NOUS_API_KEY` |\r\n| **OpenRouter** | Any `\u002F` prefixed (e.g., `openai\u002Ftext-embedding-3-small`) | `OPENROUTER_API_KEY` |\r\n| **OpenAI** | `text-embedding-3-small`, `text-embedding-3-large` | `OPENAI_API_KEY` |\r\n| **Azure OpenAI** | `azure-text-embedding-3-small`, `azure-text-embedding-3-large` | `AZURE_OPENAI_API_KEY` |\r\n\r\n### ⚠️ Cron Timezone: Local Time (JST) — NOT UTC\r\n\r\n### About Path Size\r\n\r\n| JST Target | Cron Schedule (LOCAL) |\r\n|------------|----------------------|\r\n| 08:00 JST | `0 8 * * *` |\r\n| 12:00 JST | `0 12 * * *` |\r\n| 20:00 JST | `0 20 * * *` |\r\n\r\n**Evidence**: Cron jobs created with `0 8 * * *` show `next_run_at: \"2026-06-19T08:00:00+09:00\"` — matching JST exactly. The previous UTC conversion guidance was incorrect for Hermes cron.\r\n\r\n### Report Save Path: Profile-Dependent\r\n\r\nWhen running under a **named Hermes profile** (e.g., `--profile job-recruiter` or via `hermes cron` that uses a non-default profile), reports save to:\r\n\r\n```\r\n~\u002F.hermes\u002Fprofiles\u002F\u003Cprofile>\u002Fworldmonitor-osint\u002Freports\u002F\r\n```\r\n\r\nWhen running under the **default profile** (no `--profile` flag), reports save to:\r\n\r\n```\r\n~\u002F.hermes\u002Fworldmonitor-osint\u002Freports\u002F\r\n```\r\n\r\nBoth paths use the `YYYYMMDDTHHMMSSZ_\u003Ctopic>.json` naming convention. Cron jobs that verify saved output must check the correct path — checking the wrong one will show no new files and the agent may falsely conclude the run failed.\r\n\r\n## Procedure\r\n\r\n### 1. Verify Dependencies\r\n\r\n```bash\r\n# Check Shinka dependency (google-genai, NOT google-generativeai)\r\npy -3 -c \"import google.genai; print('OK: google-genai')\"\r\n# If ModuleNotFoundError:\r\npip install google-genai\r\n\r\n# Verify World Monitor local sidecar (for --wm-tier auto)\r\ncurl -s http:\u002F\u002F127.0.0.1:46123\u002Fhealth\r\n```\r\n\r\n### 2. Test Single Run\r\n\r\n```bash\r\n# Free tier (fast, no deps, real data)\r\nhermes worldmonitor-osint fusion \"your_topic\" --wm-tier free --source-mode real --save\r\n\r\n# Auto tier (full, needs google-genai, uses local sidecar)\r\nhermes worldmonitor-osint fusion \"your_topic\" --wm-tier auto --source-mode real --save\r\n\r\n# **Mock mode for testing (no API calls, fast)**\r\nhermes worldmonitor-osint fusion \"your_topic\" --wm-tier auto --source-mode mock --llm-summary --save\r\n\r\n# With Japanese LLM summary (uses Hermes LLM, not google-genai)\r\nhermes worldmonitor-osint fusion \"your_topic\" --wm-tier free --source-mode real --llm-summary --save\r\n```\r\n\r\n### 3. Configure Scheduled Delivery (LOCAL TIME = JST)\r\n\r\n```bash\r\n# List existing cron jobs before changing anything\r\nhermes cron list\r\n\r\n# For Telegram-first MILSPEC\u002FPDB reports, prefer ONE canonical morning+evening pair.\r\n# Avoid deliver=all unless the user explicitly wants multi-channel delivery.\r\n# 08:00 JST\r\nhermes cron create --name \"osint-agent-morning MILSPEC markdown to Telegram\" \\\r\n  --schedule \"0 8 * * *\" \\\r\n  --deliver telegram \\\r\n  --prompt '\u003Cself-contained prompt that calls shinka_osint_briefing + gov_feed_digest + mhlw_designated_check, saves .md, and returns Telegram-readable Markdown>'\r\n\r\n# 18:00 JST\r\nhermes cron create --name \"osint-agent-evening MILSPEC markdown to Telegram\" \\\r\n  --schedule \"0 18 * * *\" \\\r\n  --deliver telegram \\\r\n  --prompt '\u003Csame pattern, evening slot>'\r\n```\r\n\r\nWhen repairing existing OSINT cron, pause overlapping legacy jobs (`OSINT融合レポート`, `wm-osint-fusion-*`, `wm-osint-pdb-*`) so the user receives one clear morning\u002Fevening report instead of duplicate or conflicting outputs. See `references\u002Fmilspec-telegram-cron-remediation.md` for the full remediation pattern and prompt skeleton.\r\n\r\n### `worldmonitor_fusion_report` Tool (Working Primary Path)\r\n\r\nThe `worldmonitor_fusion_report` tool (from the `worldmonitor_osint` plugin) is the **working primary fusion tool** — it succeeded in this session where `osint_agent_brief` previously failed with AttributeError.\r\n\r\n**Verified invocation (2026-08-03 evening slot):**\r\n```json\r\n{\r\n  \"slot\": \"evening\",\r\n  \"topic\": \"日本の安全保障と世界情勢\",\r\n  \"wm_tier\": \"free\",\r\n  \"include_sitdeck\": true,\r\n  \"include_mhlw\": true,\r\n  \"include_wm_free\": true,\r\n  \"llm_summary\": true\r\n}\r\n```\r\n\r\n**Returned structure:**\r\n- `success: true`\r\n- `generated_at`: ISO timestamp\r\n- `worldmonitor`: { `success`, `tier: \"free_web\"`, `focus: \"japan_security\"`, `sections: {gpsjam, oref_alerts, version, app_shell}`, `errors: [news_digest 401]`, `pro_only_skipped: [country_risk, country_intel_brief, regional_brief, risk_scores]`, `news_headlines: []` }\r\n- `shinka_milspec`: { `success: true`, `scenario_count: 3`, `average_score: 0.0`, `runs: [...]` — **all blocked by policy** }\r\n- `shinka_llm`: provider resolution info (openai-codex\u002Fgpt-5.6-sol)\r\n- `primary_sources`: egov-law MCP hint\r\n- `methodology`: fusion description\r\n\r\n**Key findings:**\r\n- **World Monitor free tier**: GPSJAM (global, 1038 High hexes), OREF alerts (0 in 24h), app shell metadata. **news_digest returns 401 \"API key required\" even on free web endpoint** — treat as credentials constraint, not \"no news\".\r\n- **Shinka MILSPEC**: All 3 test scenarios (`japan_russia_military_overview`, `national_security_framework`, `cyber_defense_posture`) blocked with `\"scenario_id '...' is not in the permitted Shinka OSINT policy\"`. Permitted domains include `japan_russia`, `national_security`, `cyber_defense` but specific scenario IDs must be registered. `shinka_osint_list_scenarios` returns 0 scenarios for `milspec_security_jp` example.\r\n- **LLM summary**: `shinka_llm.resolved.provider_id: \"openai-codex\"`, `model: \"gpt-5.6-sol\"` — but `llm_summary: true` did not produce a `summary_ja` field in output (may require Shinka import chain healthy).\r\n- **Primary sources**: Points to `egov-law` MCP server for Japanese legal citations.\r\n\r\n### Direct `osint_agent_brief` Failure Fallback\r\n\r\nWhen the integrated `osint_agent_brief` plugin is exposed but fails at runtime (for example, a serialization error such as `AttributeError: 'NoneType' object has no attribute '__dict__'`), do not fabricate a merged report and do not silently retry indefinitely. **Do not re-call with identical arguments after the first TOOL_RUNTIME failure** (loop warning \u002F wasted turns). Preserve the failed call as a collection constraint, then use this bounded fallback:\r\n\r\n1. Call `osint_agent_status` if the deferred tool surface is healthy; if `tool_call` bridge also fails, skip and go to step 3. Note `reports_dir` when available — osint_agent plugin: `~\u002F.hermes\u002Fosint-agent\u002Fbriefs` (Windows: `C:\\\\Users\\\\\u003Cuser>\\\\.hermes\\\\osint-agent\\\\briefs`), **distinct** from `worldmonitor-osint\u002Freports`.\r\n2. Optional: `osint_agent_multilayer_collect` with the **same topic** (no `fetch_wm_free` argument). Expect WM Free **HTTP 401 \"API key required\"** often even on free web — credentials constraint, not \"no news\".\r\n3. Execute web-search queries in parallel: `site:mod.go.jp`, `site:mhlw.go.jp`, `site:npa.go.jp`, `site:jma.go.jp`, `site:mofa.go.jp`, `site:kantei.go.jp`.\r\n4. **Body fetch preference (2026-08-06 evening verified):**\r\n   - If `web_extract` returns `BILLING_ERROR` \u002F 402 → **stop extract retries**; use terminal `curl -sL -A \"Mozilla\u002F5.0\"` + HTML strip.\r\n   - **JMA \u002F NPA \u002F MHLW HTML** usually return real bodies via curl.\r\n   - **`mod.go.jp`** often hits Cloudflare (`Just a moment...`) → tag `WAF_CHALLENGE`; use search title\u002Fdate + secondary reprint (`j-defense.ikaros.jp\u002Fdocs\u002Fmod\u002F*`) labeled **代替取得** (統幕転載). Never present reprint as direct MOD HTML.\r\n   - MOFA\u002FMETI: Access Denied or stale 404 → rediscover URL; do not invent.\r\n5. Keep verified facts, analysis, and uncertainty in separate sections. Lead with a **収集ステータス** table listing TOOL_RUNTIME \u002F BILLING_ERROR \u002F WAF \u002F primary OK. Explicitly state which requested layers (SitDeck, MHLW, WM Free) returned no content or failed.\r\n6. Full curl\u002FWAF recipe: `references\u002Fevening-jp-gov-curl-waf-2026-08-06.md` (also see `references\u002Fjma-primary-curl-endpoints.md`).\r\n\r\nA configured credential or successful readiness check is not evidence that SitDeck or MHLW content was actually collected. Distinguish a World Monitor API-key\u002FHTTP error from an absence of news.\r\n\r\n**Verified end-to-end (2026-07-31, morning AND evening slots, topic=日本の安全保障と世界情勢):** `osint_agent_brief` failed with the AttributeError in both runs; the 5-step fallback above produced complete Telegram-ready Japanese Markdown briefs (収集ステータス表 → 確認済み事実 by agency → 分析 → 不確実性) saved to `~\u002F.hermes\u002Fosint-agent\u002Fbriefs\u002Fosint_brief_2026-07-31_morning.md` and `osint_brief_2026-07-31_evening_fallback.md`. This confirms the fallback is sufficient on its own without the integration tool.\r\n\r\nEvening-slot deltas (verified 2026-07-31 evening, both runs):\r\n1. CLI brief stdout piped through `tail` may show only the L1–L6 collection-plan block — the real report is the saved `\u003Cts>_evening_\u003Ctopic>.md` in the briefs dir. Verify via the file, never stdout. (Second run's `tail -60` did show the full brief — treat stdout as best-effort, the file as truth.)\r\n2. A sibling process may drop compose artifacts (`evening_YYYYMMDD.md`, `compose_evening.py`) into the same briefs dir — they are secondary-source leads (cite NHK\u002FYahoo) and must be verified before inclusion (e.g. 国家情報局 7\u002F31設置 was re-confirmed via NHK\u002Fmainichi\u002Fyomiuri\u002FTBS searches on the second run).\r\n3. JMA typhoon detail (`data.jma.go.jp\u002Fmulti\u002Fcyclone\u002Fcyclone_detail.html?id=NN&lang=jp`) yields exact 実況\u002F予報 tables (pressure, wind, track) and the JMA 熊本地震 portal (`jma.go.jp\u002Fjma\u002Fmenu\u002F\u003Cid>.html`) carries the official 地震概要 + 今後の見通し — both extract cleanly via web_extract. The generic quake index `jma.go.jp\u002Fjp\u002Fquake\u002F` is DEAD (auto-redirects to `jma.go.jp\u002Fbosai\u002F`); go straight to the portal\u002Fevent pages instead.\r\n4. Manual fallback brief filename convention: `osint_brief_YYYY-MM-DD_evening.md` (plain name, no `_fallback` suffix — an earlier run used `..._evening_fallback.md`; use the plain name going forward). Second evening run produced a full 6,994-byte brief plus a 1,004-char Telegram body (≤1200 target) from this recipe alone.\r\n\r\n**Second verification (same day, later run; third run = evening slot 18:41 JST):** the CLI `hermes osint-agent brief --slot morning|evening --topic ... --wm-tier free --source-mode real --cron-stdout` **succeeds even while the tool-side `osint_agent_brief` fails** (different code path) and saves `\u003Cts>_\u003Cslot>_\u003Ctopic>.json\u002F.md` to the same briefs dir. However its layers are mostly empty (WM Free 401, MHLW 新規項目なし, Shinka score 0.0, SitDeck skipped) — the report substance came from the parallel primary-source web harvest (mod.go.jp\u002Fjs\u002Fpress\u002F, kantei kaiken transcript, JMA earthquake\u002Ftyphoon pages, npa.go.jp\u002Fnewlyarrived). Treat the CLI output as a layer-provenance skeleton, not the finished brief. Full recipe: `references\u002Fmorning-brief-fallback-recipe.md`.\r\n\r\n### Agent-Cron CLI Fallback for MILSPEC\u002FPDB Markdown\r\n\r\nWhen the user asks a scheduled agent to call `shinka_osint_briefing`, `gov_feed_digest`, and `mhlw_designated_check`, but those plugin tools are not exposed in the current tool surface, use the Hermes CLI equivalents instead of stopping:\r\n\r\n```bash\r\n# Shinka briefing equivalent; bounded timeout recommended in cron\r\n.\u002F.venv\u002FScripts\u002Fpython.exe -m hermes_cli.main shinka-osint briefing '日本の安全保障と世界情勢' \\\r\n  --source-mode real --max-scenarios 3 --example milspec_security_jp --save\r\n\r\n# Fusion fallback that also saves a JSON report when Shinka real-mode is slow\u002Ffail-closed\r\n.\u002F.venv\u002FScripts\u002Fpython.exe -m hermes_cli.main worldmonitor-osint fusion '日本の安全保障と世界情勢' \\\r\n  --wm-tier free --source-mode real --max-scenarios 3 --save\r\n\r\n# Primary government RSS and MHLW designated-drug monitor\r\n# ⚠️ 'scrapling-feeds' is NOT a valid subcommand in this fork (\"invalid choice\" error, verified 2026-07-31).\r\n# Use the osint-agent CLI brief instead (verified working even when the osint_agent_brief TOOL fails):\r\n.\u002F.venv\u002FScripts\u002Fpython.exe -m hermes_cli.main osint-agent brief --slot morning --topic '日本の安全保障と世界情勢' \\\r\n  --wm-tier free --source-mode real --cron-stdout\r\n# Flags: --no-sitdeck \u002F --no-mhlw disable layers (defaults ON; there are NO --include-* flags),\r\n# --llm-summary optional, --source-mode {mock,real}, --cron-stdout prints markdown only.\r\n# Expect mostly empty layers (WM Free 401, MHLW 新規項目なし, Shinka 0.0) — supplement with primary-source web collection.\r\n# Full verified recipe: references\u002Fmorning-brief-fallback-recipe.md\r\n```\r\n\r\nIf Shinka real-mode fails with fail-closed source fetch errors, do **not** switch to mock scores silently. Include the failure under `検証上の制約`, report score as unavailable\u002F0-equivalent, and still save a concise Markdown artifact under `~\u002F.hermes\u002Fosint-agent\u002Fbriefs\u002F`. See `references\u002Fmilspec-evening-cron-cli-fallback.md` for the exact fallback recipe and Telegram compression pattern.\r\n\r\n**Direct tool path** (when plugin tools ARE available): see `references\u002Fmilspec-evening-cron-direct-pattern.md` for the gov_feed_digest → web_search supplement → shinka_osint_list_scenarios lightweight check → MHLW reporting → save workflow.\r\n\r\n### 4. Verify Delivery\r\n\r\n- Reports saved to `~\u002F.hermes\u002Fworldmonitor-osint\u002Freports\u002FYYYYMMDDTHHMMSSZ_\u003Ctopic>.json`\r\n- Delivered to all connected channels (Telegram, LINE, Discord) via `deliver: all`\r\n- Telegram requires at least one user message to bot for chat ID detection\r\n\r\n## Plugin Tool Invocation Pattern\r\n\r\nOSINT plugin tools (`gov_feed_digest`, `mhlw_designated_check`, `worldmonitor_snapshot`) are **plugin-provided** — they appear in `tool_search()` results but NOT as top-level tools. The agent MUST invoke them via `tool_call(name=..., arguments=...)` wrapper:\r\n\r\n```\r\ntool_call(name=\"gov_feed_digest\", arguments={\"hours\": 24, \"max_per_feed\": 5})\r\ntool_call(name=\"mhlw_designated_check\", arguments={\"record_baseline\": false, \"scan_enforcement\": true})\r\ntool_call(name=\"worldmonitor_snapshot\", arguments={\"country_code\": \"JP\", \"news_lang\": \"en\", \"news_limit\": 10, \"region_id\": \"east-asia\"})\r\n```\r\n\r\n**Do not** call them as bare function-call expressions — that will fail with \"tool does not exist\". Use `tool_call` with the name and arguments dictionary. If tool_call itself is not available, fall back to the Hermes CLI equivalents documented in `references\u002Fmilspec-evening-cron-cli-fallback.md`.\r\n\r\n### World Monitor Sidecar Resilience\r\n\r\nWorld Monitor's local sidecar (`http:\u002F\u002F127.0.0.1:46123`) may not be running. When it is down, `worldmonitor_snapshot` still succeeds and returns data via **free web backfill**:\r\n- News digest from Google News RSS (politics, security, military, crisis categories)\r\n- GPS jamming \u002F spoofing data from Wingbits\r\n- OREF rocket\u002Fmissile alerts\r\n\r\nThe sidecar-dependent endpoints (country_risk, country_intel_brief, regional_brief, risk_scores) will return connection-refused errors, but the tool's `success: true` and the obtained data is still usable for briefings. Report the sidecar failure under `## 検証上の制約` or a constraints section.\r\n\r\n### Telegram Character Limit (1200 Max)\r\n\r\nTelegram messages are capped at ~4096 chars but for concise daily briefings target **1200 chars or fewer**. Use this compression pattern:\r\n1. Write the full draft first, save to file.\r\n2. Check char count with `wc -m \u003Cfile>`.\r\n3. If >1200: strip tables (use inline `—` separators), compress multi-sentence items into single lines, remove redundant source citations, prefer `▶` headers over `##` for sub-sections.\r\n4. Save the compressed version; the file on disk carries the full detail.\r\n\r\nThis session's original draft was 1951 chars → compressed to 1059 chars.\r\n\r\n### CISA Feed 403 Block\r\n\r\nAll three CISA feeds (advisories, ICS, news) return HTTP 403 when fetched with polite `urllib`. Scrapling Fetcher (stealth HTTP) is not installed in this environment. Report this as a collection constraint in the briefing — do not claim \"no CISA advisories exist.\"\r\n\r\n**Recommended fix order:**\r\n1. Try CISA KEV JSON first — no auth, works with plain `urllib`, covers Known Exploited Vulnerabilities (most actionable for daily briefings). See `references\u002Fcisa-json-api-fallback.md` for exact endpoints and Python snippet.\r\n2. Install Scrapling Fetcher (`pip install scrapling-fetcher`) as a permanent stealth-HTTP solution for RSS feeds.\r\n3. As a last resort, register for a CISA API key at https:\u002F\u002Fapi.cisa.gov\u002Fregister for the full API surface.\r\n\r\n### Japanese Government Feed Patterns (Weekends & Holidays)\r\n\r\n防衛省 and デジタル庁 RSS feeds typically return **0 new entries** on weekends and Japanese national holidays. This is expected behavior — do not flag it as a collection failure. The report should note \"新規0件（日曜\u002F休日のため更新なし）\" and move on.\r\n\r\n### MHLW First-Run Flood\r\n\r\nThe first `mhlw_designated_check(record_baseline=false)` call returns **every known meeting notice and enforcement on the page** (observed: 40+ items, going back 2+ years). This is because no baseline ID is recorded to filter against. For initial cron setup, suppress historical clutter in the Telegram body by filtering to items within 90 days. For subsequent runs, set `record_baseline=true` on one dedicated run to capture the baseline, then the tool will only return genuinely new items.\r\n\r\n## Pitfalls\r\n\r\n### Shinka Hangs on Missing\u002FDeprecated Dependency — **MULTIPLE FAILURE MODES (2026-07-03)**\r\n\r\n**Symptom**: `hermes worldmonitor-osint fusion` runs >10 min with no output, or fails fast with a Python traceback in the report's `shinka_milspec.error`.\r\n\r\n**Failure Mode A: Deprecated `google.generativeai`** (observed 2026-06-18)\r\n\r\n**Symptom**: `FutureWarning: All support for the google.generativeai package has ended` or import error.\r\n**Cause**: Shinka MILSPEC evaluation tried to import deprecated `google.generativeai` (end-of-life, no updates since 2024).\r\n**Fix Applied**: Local checkout at `~\u002FDesktop\u002FShinkaEvolve-OSINT-main` patched to use `google.genai` SDK.\r\n\r\n**Failure Mode B: NumPy ≥2.5.0 + SciPy incompatibility** (observed 2026-07-03)\r\n\r\n**Symptom**: Shinka import chain fails with:\r\n```\r\nUserWarning: A NumPy version >=1.23.5 and \u003C2.5.0 is required for this version of SciPy (detected version 2.5.0)\r\n```\r\nThen cascades through `shinka\u002Fcore\u002Fconfig.py` → `shinka\u002Fllm\u002F__init__.py` → full eval failure.\r\n**Cause**: SciPy pinned to a version incompatible with NumPy 2.5.0 on this host.\r\n**Fix**: Downgrade NumPy:\r\n```bash\r\npip install \"numpy\u003C2.5\"\r\n```\r\n\r\n**Failure Mode C: General import chain failure** (intermittent)\r\n\r\n**Symptom**: `shinka_osint_status` shows `importable: false`, `tool_count: 0`.\r\n**Workaround**: Use `--wm-tier free` without `--llm-summary` for production cron jobs.\r\n\r\n**Critical interaction with `--llm-summary`**: Even `--wm-tier free --source-mode mock --llm-summary` triggers the Shinka import chain. The `--llm-summary` flag routes through Shinka's LLM provider layer, which pulls in the full `shinka.llm` module chain. If Shinka imports fail, `shinka_llm` will be empty `{}` and NO summary is generated — the flag is silently a no-op. To confirm Shinka is healthy enough for LLM summary:\r\n```bash\r\npy -3 -c \"import numpy; print(numpy.__version__)\"   # must be \u003C2.5\r\npy -3 -c \"from google import genai; print('genai OK')\"\r\n```\r\n\r\n**Workaround for reliable cron output without Shinka**:\r\n```bash\r\n# World Monitor data only, no Shinka import at all\r\nhermes worldmonitor-osint fusion \"topic\" --wm-tier free --source-mode real --save\r\n# ~30-60 seconds, includes: news_digest, GPS jamming, OREF alerts\r\n# No --llm-summary flag → no Shinka import attempted\r\n```\r\n\r\n---\r\n\r\n### Telegram Delivery Not Working\r\n\r\n**Cause**: `channel_readiness_check` shows `telegram.liveRoundtripReady: false` and `candidateTargets: {directChats: 0, groupChats: 0}`\r\n\r\n**Fix**: Send a message to the Telegram bot first (e.g., `\u002Fstart`) to register chat ID. Subsequent cron deliveries will work.\r\n\r\n### OSINT Cron Delivery Fails or Duplicates\r\n\r\n**Symptoms**:\r\n- `last_delivery_error` mentions a platform not configured, or `deliver: all` fans out to channels the user did not ask for.\r\n- Several OSINT jobs run around the same time and produce duplicate reports.\r\n- Direct script\u002Fno-agent jobs produce raw plugin output, hang, or fail to generate the requested Markdown structure.\r\n\r\n**Fix**:\r\n1. `hermes cron list` and identify all OSINT job families.\r\n2. Keep a single canonical pair for `osint-agent-morning` and `osint-agent-evening`.\r\n3. Set `deliver: telegram` for Telegram-requested reporting; do not use `all` unless explicitly requested.\r\n4. Prefer an agent-driven self-contained prompt that calls the OSINT tools, saves a `.md` artifact, and returns a concise Telegram Markdown summary.\r\n5. Pause overlapping legacy `worldmonitor-osint fusion`, `wm-osint-fusion-*`, and `wm-osint-pdb-*` jobs.\r\n\r\nSee `references\u002Fmilspec-telegram-cron-remediation.md`.\r\n\r\n### OSINT Cron Provider Timeout \u002F Free-Tier Rotation\r\n\r\nWhen a scheduled OSINT\u002FPDB job fails with provider timeout or exhausted fallback chain, first remove unnecessary LLM dependency from the cron path instead of only increasing retries. For routine WorldMonitor\u002FPDB reports, convert the job to `no_agent: true` and run a deterministic script that calls `worldmonitor-osint situation-report --slot \u003Cmorning|evening> --cron-stdout`; validate the script directly before reporting success. Route delivery to the requested concrete channel (usually `telegram:\u003Cchat_id>`) rather than `all`, so Discord\u002FLINE\u002FPhoton delivery failures do not mark a successful report as failed.\r\n\r\nIf the user asks that async subagents use free quota, configure delegation via `hermes config set delegation.provider opencode-zen` and `delegation.model auto-free` (do not patch `~\u002F.hermes\u002Fconfig.yaml` directly). Pin any remaining agent-driven OSINT cron jobs to `opencode-zen \u002F auto-free` with `cronjob(action=\"update\", model={...})`. Full runbook and script template: `references\u002Fosint-cron-timeout-and-free-rotation.md`.\r\n\r\n### Shinka LLM Summary Uses Unsupported Codex Model\r\n\r\n**Symptom**: `--llm-summary` returns `The 'gpt-5.2' model is not supported when using Codex with a ChatGPT account.`\r\n\r\n**Cause**: The Shinka OSINT provider bridge previously fell back to a stale hardcoded Codex model instead of Hermes Agent's configured provider\u002Fmodel.\r\n\r\n**Fix Applied (2026-06-25)**: `plugins\u002Fshinka-osint\u002Fproviders.py` now reads Hermes `model.provider` + `model.default`\u002F`model.model`, prioritizes the configured Hermes provider when supported, and falls back to `get_default_model_for_provider(\"openai-codex\")` \u002F `gpt-5.5` rather than `gpt-5.2`. Verify with:\r\n\r\n```bash\r\npython -m pytest tests\u002Fplugins\u002Ftest_shinka_osint_providers.py -q -o 'addopts='\r\npython -m hermes_cli.main worldmonitor-osint fusion '認知戦' --wm-tier free --source-mode mock --llm-summary --save\r\n```\r\n\r\nExpected verification: `shinka_milspec.executive_summary.success=true` and `shinka_llm.resolved.model` equals the Hermes configured model, e.g. `nvidia\u002Fnemotron-3-super-120b-a12b`.\r\n\r\n### Fusion Tool Output Truncation \u002F Unusable LLM Summary\r\n\r\n**Symptom**: `worldmonitor_fusion_report` or `hermes worldmonitor-osint fusion ... --llm-summary --save` succeeds, but the tool response is huge\u002Ftruncated, or `shinka_milspec.executive_summary.summary_ja` contains meta-prompt\u002Fprocess text instead of a clean user-facing Japanese briefing.\r\n\r\n**Fix**:\r\n1. Do not relay the raw truncated response or raw `summary_ja` blindly.\r\n2. Use the saved JSON report as the source of truth. Check BOTH possible paths:\r\n   - Default profile: `~\u002F.hermes\u002Fworldmonitor-osint\u002Freports\u002F`\r\n   - Named profile: `~\u002F.hermes\u002Fprofiles\u002F\u003Cprofile>\u002Fworldmonitor-osint\u002Freports\u002F`\r\n3. Extract structured fields: run metadata, World Monitor tier\u002Fsections, top news by `importanceScore`, GPSJam stats\u002Fregions, OREF status, and Shinka run scores\u002Ferrors.\r\n4. Reconstruct a concise Japanese report from those structured fields.\r\n5. Label constraints explicitly: `source_mode=mock`, `wm-tier=free`, sidecar\u002Fpro not used, and Shinka scenario validation errors such as allowlist failures or import errors.\r\n\r\nSee `references\u002Ffusion-report-json-postprocess.md` for the extraction checklist and minimal Python extractor.\r\n\r\n### Cron Job Output Truncation\r\n\r\n**Symptom**: Large JSON reports not fully delivered\r\n\r\n**Cause**: Messaging platforms have message size limits (Telegram: 4096 chars)\r\n\r\n**Fix**: Reports are saved as files; delivery sends summary. Access full report via saved JSON file at `~\u002F.hermes\u002Fworldmonitor-osint\u002Freports\u002F`.\r\n\r\n### World Monitor Local Sidecar Not Running\r\n\r\n**Symptom**: `--wm-tier auto` fails with connection refused to `http:\u002F\u002F127.0.0.1:46123`\r\n\r\n**Cause**: Auto tier requires World Monitor sidecar (koala73\u002Fworldmonitor) running locally for Pro features.\r\n\r\n**Fix**: Start sidecar before running auto tier, or use `--wm-tier free` which works without sidecar.\r\n\r\n## Verification\r\n\r\n```bash\r\n# Check report saved\r\nls -la ~\u002F.hermes\u002Fworldmonitor-osint\u002Freports\u002F\r\n\r\n# Verify cron jobs (times shown in LOCAL TZ)\r\nhermes cron list\r\n\r\n# Test channel readiness\r\nhermes channel-readiness-check\r\n\r\n# Verify Shinka dependency status\r\nhermes shinka-osint status\r\n# Check importable: true, tool_count > 0 for full Shinka eval\r\n\r\n# Verify World Monitor sidecar (for --wm-tier auto)\r\ncurl -s http:\u002F\u002F127.0.0.1:46123\u002Fhealth\r\n\r\n# Current Shinka status (2026-06-18): importable=false, tool_count=0\r\n# → Use --wm-tier free for production cron\r\n```\r\n\r\n### Mock Mode Quick Test (Bypasses Shinka Import Issues)\r\n\r\n```bash\r\n# Fast test without API keys or sidecar\r\nhermes worldmonitor-osint fusion \"テスト\" --wm-tier auto --source-mode mock --llm-summary --save\r\n# Completes in ~30s, generates report with mock risk scores + LLM Japanese summary\r\n# Use this to test fusion pipeline without Shinka dependency\r\n\r\n# Free tier real test\r\nhermes worldmonitor-osint fusion \"テスト\" --wm-tier free --source-mode real --save\r\n# Completes in ~30-60s, real World Monitor data, no Shinka\r\n```\r\n\r\n## Absorbed workflow map\r\n\r\nThis umbrella now covers the former morning\u002Fevening briefing, World Monitor wrapper, Shinka MILSPEC workflow\u002Ftroubleshooting, SitDeck digest, and Telegram news briefing classes. Their session-specific material is preserved in:\r\n\r\n- `references\u002Fosint-daily-morning-briefing.md`\r\n- `references\u002Fworldmonitor-osint-tool-wrapper.md`\r\n- `references\u002Fshinka-milspec-workflow.md`\r\n- `references\u002Fsitdeck-osint-digest.md`\r\n- `references\u002Fcron-news-briefing-telegram.md`\r\n- `references\u002Ffeed-fallback-patterns.md`, `references\u002Fshinka-milspec-policy.md`, and the re-homed templates\u002Fscripts\r\n\r\nSelect the relevant labeled reference rather than creating a new one-session OSINT skill.\r\n\r\n## References\r\n\r\n- `references\u002Fworldmonitor-non-mcp.md` — User-specific rule: World Monitor must not be used through plain MCP; use desktop\u002Fexe or approved non-MCP paths.\r\n- `references\u002Fevening-osint-fallback-web-browser-2026-08-07.md` — **Evening 2026-08-07**: `osint_agent_brief` AttributeError (4th reproduction), `web_extract` BILLING_ERROR → **web_search + curl** primary chain for government\u002FIntel agency sources. **NIDS\u002FNPA\u002F CIA Factbook direct curl 成功**、NIA発足(7\u002F31)主要紙クロスチェック確認、CIA Factbook 2\u002F4終了・アーカイブ化確認。Blocked: mod.go.jp\u002Fmofa.go.jp\u002Fmoj.go.jp\u002Fcas.go.jp\u002Fcyber.go.jp (WAF\u002F403\u002F404)。Failure tags: `TOOL_RUNTIME`、`BILLING_ERROR`、`WAF_CHALLENGE`、`HTTP_403`、`HTTP_404`、`STRUCTURE_CHANGED`。Telegram-ready report template with status table included. **WAFなしドメイン優先収集ルート確立** (NIDS\u002FNPA\u002FJMA)。\r\n- `references\u002Fevening-osint-fallback-web-browser-2026-08-06.md` — **Evening 2026-08-06**: `osint_agent_brief` TOOL_RUNTIME (AttributeError), `web_extract` BILLING_ERROR\u002F402 → **web_search + browser_navigate + browser_console** primary chain for government\u002FIntel agency sources. Verified working: Wikipedia (NCO), Tokyo portal (NISC 2025), DEFENSE NAVI (2026白書), CIA Factbook archive, NCSC\u002FDIA\u002FODNI PDFs, 国会API. Blocked: mod.go.jp\u002Fmofa.go.jp\u002Fmoj.go.jp\u002Fnisc.go.jp (WAF\u002F403), 官邸会見 (404). Failure tags: `TOOL_RUNTIME`, `BILLING_ERROR`, `WAF_CHALLENGE`, `HTTP_403`, `HTTP_404`. Telegram-ready report template with status table included.\r\n- `references\u002Fworldmonitor-tier-comparison.md` — Tier feature matrix and performance characteristics\r\n- `references\u002Fshinka-dependency-fix.md` — Shinka MILSPEC dependency resolution guide\r\n- `references\u002Fcron-delivery-patterns.md` — Multi-channel cron delivery configuration patterns\r\n- `templates\u002Fosint-fusion-cron.yaml` — Cron job template for common schedules\r\n- `scripts\u002Fverify-shinka-deps.py` — Quick dependency verification script\r\n- `references\u002Fmilspec-evening-cron-direct-pattern.md` — Direct tool-call MILSPEC evening briefing (primary path when plugin tools available)\r\n- `references\u002Fmilspec-evening-cron-cli-fallback.md` — CLI fallback for MILSPEC evening briefing (when tools not exposed)\r\n- `references\u002Fjma-primary-curl-endpoints.md` — curl-only JMA quake\u002Ftyphoon JSON + 概要PDF extraction, mod.go.jp Cloudflare workaround, and fork-venv `osint-agent` CLI notes. Use whenever `web_extract` is unavailable so the brief still rests on real primary data instead of nothing.\r\n- `references\u002Fevening-briefing-verified-2026-08-03.md` — **Verified evening cron output pattern**: complete JSON structure, 18 gov_feed entries (防衛省12\u002Fデジタル庁6), CISA 403, SitDeck skipped, Shinka blocked by policy, web_search fallback recipe, Telegram compression to 1059 chars.\r\n- `references\u002Fosint-agent-brief-failure-pattern.md` — **Verified failure pattern & fallback**: `osint_agent_brief` AttributeError reproduction, 5-step web_search fallback, osint-fallback-routes integration, CLI alternative path that works.\r\n- `references\u002Fosint-fallback-routes-applied-2026-08-04.md` — **Cross-skill integration record**: `osint-fallback-routes` skill failure tags (`AUTH_REQUIRED`, `STRUCTURE_CHANGED`, `BILLING_ERROR`) applied verbatim in morning briefing report; alternate route catalog mapped to each failed agency source; cron template protocol followed. (Note: osint-fallback-routes is user-owned, not curator-managed — cannot auto-patch; see this reference for integration evidence)\r\n- `references\u002Fosint-agent-brief-morning-verified-2026-08-05.md` — **3rd verified session**: `osint_agent_brief` tool direct call (slot=morning, wm_tier=free, include_sitdeck\u002Fmhlw\u002Fwm_free=true, llm_summary=true) → AttributeError 3rd occurrence + World Monitor 401 → osint_agent_multilayer_collect plan → web_search×12 parallel → SERIALIZATION_ERROR tag added to taxonomy → 10 primary sources verified → unified template report generated\r\n- `references\u002Fevening-jp-gov-curl-waf-2026-08-06.md` — **Evening 2026-08-06**: `osint_agent_brief` TOOL_RUNTIME (no identical retry), `web_extract` BILLING_ERROR → **curl primary** for JMA\u002FNPA\u002FMHLW; `mod.go.jp` Cloudflare WAF → Jディフェンス統幕転載を「代替取得」明記; SitDeck\u002FWM free 未達を収集ステータス表で分離。`osint-fallback-routes` は user-owned のため adopt 推奨\r\n\r\n---\r\n\r\n## 実戦検証済みフォールバックチェーン (2026-08-04 朝枠)\r\n\r\n本セッションで機能した完全な代替経路を再現可能な手順として記録:\r\n\r\n### 1. 統合ツール失敗時の即時フォールバック順序\r\n\r\n```\r\nosint_agent_brief (tool)\r\n  → 失敗: AttributeError: 'NoneType' object has no attribute '__dict__'\r\n  → osint_agent_multilayer_collect (plan取得成功、wm_freeブロックで401確認)\r\n  → web_search × Nクエリ並列実行 (site:go.jp OR site:mod.go.jp OR site:mofa.go.jp 等)\r\n  → 成果をMarkdownレポートへ合成\r\n```\r\n\r\n### 2. 各ツールの実測失敗モードと実効代替\r\n\r\n| ツール | 失敗モード | 代替手段 | 成果 |\r\n|--------|------------|----------|------|\r\n| `osint_agent_brief` | `AttributeError` (シリアライズエラー) | `osint_agent_multilayer_collect` → `web_search` 手動 | 収集計画取得成功、以降手動クエリで補完 |\r\n| `web_extract` (防衛省・警察庁) | `BILLING_ERROR: insufficient_funds` (402) | `web_search` スニペット + 公式サイト構造確認 | 概要事実確認可能、詳細PDF未取得 |\r\n| World Monitor Free API | `HTTP 401: API key required` | なし (Free tier応答なし) | 取得不能記録 |\r\n\r\n### 3. 失敗分類タグ実装検証 (osint-fallback-routesとの連携)\r\n\r\n実ジョブで以下タグが機能したことを確認:\r\n- `BILLING_ERROR` — スクレイピング課金不足 → 即座に `web_search` 代替へ切替有効\r\n- `HTTP_401` \u002F `AUTH_REQUIRED` — 認証必須API → 代替ルートなしで「取得不能」記録\r\n- `STRUCTURE_CHANGED` — 公式サイト構造変更 (MHLW PDF直リンク不明) → 検索経由で公式ページ存在確認のみ\r\n\r\n### 4. レポート出力テンプレート (Telegram向け簡潔版・1200字以内)\r\n\r\n```markdown\r\n# エグゼクティブサマリー\r\n- 3-5行で核心のみ\r\n\r\n## ?️ 政府・省庁一次情報（確認済み事実）\r\n| 項目 | 内容 | 出典 |\r\n|------|------|------|\r\n\r\n## ⚔️ 安全保障・地政学（分析・不確実性含む）\r\n| 観点 | 確認済み事実 | 分析・不確実性 |\r\n\r\n## ?️ 自然災害・レジリエンス（確認済み）\r\n| 現象 | 状況 | 対応 |\r\n\r\n## ? 情報収集ギャップ・代替ルート実績\r\n| 対象 | 正攻法失敗理由 | 代替ルート成果 |\r\n\r\n## ? 今後注視ポイント\r\n1. ...\r\n2. ...\r\n\r\n## ? 凡例\r\n- ✅ 確認済み事実\r\n- ? 分析・不確実性\r\n- ❌ 取得不能\r\n- **代替取得**: web_searchスニペット等で補完\r\n```\r\n\r\n### 次回適用すべき改善\r\n\r\n1. `osint_agent_brief` 呼び出し前にヘルスチェック的試行を入れ、失敗時即座に `osint_agent_multilayer_collect` へフォールバックするプロンプトテンプレート化\r\n2. `web_extract` 対象URLを事前に「課金発生しやすいドメイン」リスト (go.jp, mod.go.jp, npa.go.jp, mhlw.go.jp 等) と照合し、初めから `web_search` 併用を明示\r\n3. 失敗タグをレポートJSONに構造化して含め、後続の `cron_failure_patterns.py` 解析に直結させる\r\n4. `osint-fallback-routes` スキルの `AUTH_REQUIRED` \u002F `STRUCTURE_CHANGED` タグを本スキルのピットフォール節にもミラーし、クロス参照可能にする\r\n\r\n---\r\n\r\n### 実戦検証済みフォールバックチェーン (2026-08-05 朝枠・osint_agent_brief tool実行)\r\n\r\n本セッションで `osint_agent_brief` tool (slot=morning, topic=日本の安全保障と世界情勢, wm_tier=free, include_sitdeck=true, include_mhlw=true, include_wm_free=true, llm_summary=true) を直接実行し、以下の完全な代替経路を機能検証:\r\n\r\n#### 1. 統合ツール失敗時の即時フォールバック順序\r\n\r\n```\r\nosint_agent_brief (tool)\r\n  → 失敗: AttributeError: 'NoneType' object has no attribute '__dict__'\r\n  → osint_agent_multilayer_collect (plan取得成功、wm_freeブロックで401確認)\r\n  → web_search × 4クエリ並列実行 (site:go.jp OR site:mod.go.jp OR site:mofa.go.jp 等)\r\n  → 成果をMarkdownレポートへ合成\r\n```\r\n\r\n#### 2. 各ツールの実測失敗モードと実効代替\r\n\r\n| ツール | 失敗モード | 代替手段 | 成果 |\r\n|--------|------------|----------|------|\r\n| `osint_agent_brief` | `AttributeError` (シリアライズエラー) | `osint_agent_multilayer_collect` → `web_search` 手動 | 収集計画取得成功、以降手動クエリで補完 |\r\n| `osint_agent_multilayer_collect` (L1 wm_free) | `HTTP 401: API key required` | なし (Free tier応答なし) | 取得不能記録、planのみ活用 |\r\n| `web_search` (4クエリ) | なし | — | 20件の公式・準公式ソース取得成功 |\r\n\r\n#### 3. 失敗分類タグ実装検証 (osint-fallback-routesとの連携)\r\n\r\n実ジョブで以下タグが機能したことを確認:\r\n- `HTTP_401` \u002F `AUTH_REQUIRED` — World Monitor Free API認証必須 → 代替ルートなしで「取得不能」記録\r\n- `STRUCTURE_CHANGED` — 公式サイト構造変更 (MHLW PDF直リンク不明) → 検索経由で公式ページ存在確認のみ\r\n\r\n#### 4. レポート出力テンプレート (Telegram向け簡潔版・1200字以内) — 本セッション採用版\r\n\r\n```markdown\r\n# エグゼクティブサマリー\r\n- 3-5行で核心のみ\r\n\r\n## ?️ 政府・省庁一次情報（確認済み事実）\r\n| 項目 | 内容 | 出典 |\r\n|------|------|------|\r\n\r\n## ⚔️ 安全保障・地政学（分析・不確実性含む）\r\n| 観点 | 確認済み事実 | 分析・不確実性 |\r\n\r\n## ?️ 自然災害・レジリエンス（確認済み）\r\n| 現象 | 状況 | 対応 |\r\n\r\n## ? 情報収集ギャップ・代替ルート実績\r\n| 対象 | 正攻法失敗理由 | 代替ルート成果 |\r\n\r\n## ? 今後注視ポイント\r\n1. ...\r\n2. ...\r\n\r\n## ? 凡例\r\n- ✅ 確認済み事実\r\n- ? 分析・不確実性\r\n- ❌ 取得不能\r\n- **代替取得**: web_searchスニペット等で補完\r\n```\r\n\r\n#### 5. 本セッションで確認した一次ソース (検証用リンク集)\r\n\r\n| # | 機関 | ページ | 取得日 |\r\n|---|------|--------|--------|\r\n| 1 | 外務省 | https:\u002F\u002Fwww.mofa.go.jp\u002Fmofaj\u002Fgaiko\u002Fpage22_000407.html | 2026-08-05 |\r\n| 2 | 防衛省 | https:\u002F\u002Fwww.mod.go.jp\u002Fj\u002Fpress\u002Fwp\u002Findex.html | 2026-08-05 |\r\n| 3 | 防衛省 | https:\u002F\u002Fwww.mod.go.jp\u002Fj\u002Fsurround\u002FnorthKorea\u002Findex.html | 2026-08-05 |\r\n| 4 | 警察庁 | https:\u002F\u002Fwww.npa.go.jp\u002Fnews\u002Frelease\u002F2026\u002F20260716001.html | 2026-08-05 |\r\n| 5 | 気象庁 | https:\u002F\u002Fwww.data.jma.go.jp\u002Ftyphoon\u002Fposition_table\u002Ftable2026.html | 2026-08-05 |\r\n| 6 | 厚労省 | https:\u002F\u002Fwww.mhlw.go.jp\u002Fstf\u002Fseisakunitsuite\u002Fbunya\u002Fkenkou_iryou\u002Fkenkou\u002Fkekkaku-kansenshou\u002Fkiki_sonae.html | 2026-08-05 |\r\n| 7 | 内閣官房 | https:\u002F\u002Fwww.cas.go.jp\u002Fjp\u002Fseisakukaigi\u002Fanzenhosyoukaigi\u002Fkaisai.html | 2026-08-05 |\r\n| 8 | NISC | https:\u002F\u002Fwww.cyber.go.jp\u002Findex.html | 2026-08-05 |\r\n| 9 | JST-CRDS | https:\u002F\u002Fcrds.jst.go.jp\u002Fdw\u002F20260408\u002F2026040845034\u002F | 2026-08-05 |\r\n| 10 | 防衛省 | https:\u002F\u002Fwww.mod.go.jp\u002Fj\u002Fapproach\u002Fanpo\u002F2026\u002F0115a_usa-j.html | 2026-08-05 |\r\n\r\n#### 6. 次回適用すべき追加改善 (2026-08-05 朝枠追記)\r\n\r\n5. `osint_agent_brief` tool呼び出し時のパラメータ `slot=morning, wm_tier=free, include_sitdeck=true, include_mhlw=true, include_wm_free=true, llm_summary=true` を cronプロンプトにハードコード化し、失敗時即座に `osint_agent_multilayer_collect` → `web_search` 並列へ分岐するテンプレートを `templates\u002Fosint-agent-brief-fallback-prompt.md` として保存\r\n6. 失敗タグ (`HTTP_401`, `AUTH_REQUIRED`, `STRUCTURE_CHANGED`) をレポート本文の「情報収集ギャップ」セクションに構造化して含め、`scripts\u002Fcron_failure_patterns.py` 解析に直結\r\n7. `osint-fallback-routes` スキルの「省庁横断」カタログ (World Monitor, 防衛省・外務省・警察庁・気象庁・厚労省等) を本スキルの代替ルートカタログ節にミラー統合済み — クロス参照可能にする\r\n",{"name":5,"tags":49,"author":53,"license":15,"version":54,"category":55,"metadata":56,"platforms":71,"description":7},[25,26,50,51,39,37,52],"worldmonitor","shinka","automated-reporting","Hermes Agent","1.0.0","research",{"hermes":57},{"tags":58,"config":59,"category":55,"related_skills":68},[25,26,50,51,39,37,52],{"osint.fusion.report_dir":60,"osint.fusion.default_tier":29,"osint.fusion.default_schedule":61,"osint.fusion.shinka_dependencies":65,"osint.fusion.worldmonitor_sidecar":67},"~\u002F.hermes\u002Fworldmonitor-osint\u002Freports",[62,63,64],"0 23 * * *","0 3 * * *","0 11 * * *",[66],"google-genai","http:\u002F\u002F127.0.0.1:46123",[69,70],"deep-research-specialist","deepresearch-defense-standard",[72,43,73],"linux","windows","main","0d1434f89f4bc6b07e9d272accd8c1013768820f","archive\u002Fskill-md-reviewed\u002Fsha256\u002F52\u002F52c4cd09baa917578be35658ee3b7568e8ae960da9421d6f44a91f531191c42b",0,"https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills","https:\u002F\u002Fgithub.com\u002Fzapabob","The Open University of JAPAN　2019-now\r\n\r\nTokyo University of Science　2007-2010","2026-10-26 16:29:01",{"source":8,"skillName":5,"commands":83,"prompt":93,"zipAvailable":94},[84,87,90],{"tool":85,"command":86},"npx","npx skills add zapabob\u002FSkills --skill osint-fusion-operations",{"tool":88,"command":89},"bunx","bunx skills add zapabob\u002FSkills --skill osint-fusion-operations",{"tool":91,"command":92},"pnpm","pnpm dlx skills add zapabob\u002FSkills --skill osint-fusion-operations","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Farchive\u002Fskill-md-reviewed\u002Fsha256\u002F52\u002F52c4cd09baa917578be35658ee3b7568e8ae960da9421d6f44a91f531191c42b\u002FSKILL.md",true,[96,102,108,112,116,120,124,128,132,136,140,144,148],{"path":97,"resourceType":98,"resourceTypeDesc":99,"sizeBytes":100,"sourceHtmlUrl":101},"checklist.md","REFERENCE","参考文档",10101,"https:\u002F\u002Fgithub.com\u002Fdanielmtt9\u002Fbloomcornerkiddies\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-document-project\u002Fchecklist.md",{"path":103,"resourceType":104,"resourceTypeDesc":105,"sizeBytes":106,"sourceHtmlUrl":107},"documentation-requirements.csv","ASSET","资产文件",8076,"https:\u002F\u002Fgithub.com\u002Fdanielmtt9\u002Fbloomcornerkiddies\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-document-project\u002Fdocumentation-requirements.csv",{"path":109,"resourceType":98,"resourceTypeDesc":99,"sizeBytes":110,"sourceHtmlUrl":111},"instructions.md",5164,"https:\u002F\u002Fgithub.com\u002Fdanielmtt9\u002Fbloomcornerkiddies\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-document-project\u002Finstructions.md",{"path":113,"resourceType":98,"resourceTypeDesc":99,"sizeBytes":114,"sourceHtmlUrl":115},"templates\u002Fdeep-dive-template.md",5854,"https:\u002F\u002Fgithub.com\u002Fdanielmtt9\u002Fbloomcornerkiddies\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-document-project\u002Ftemplates\u002Fdeep-dive-template.md",{"path":117,"resourceType":98,"resourceTypeDesc":99,"sizeBytes":118,"sourceHtmlUrl":119},"templates\u002Findex-template.md",4510,"https:\u002F\u002Fgithub.com\u002Fdanielmtt9\u002Fbloomcornerkiddies\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-document-project\u002Ftemplates\u002Findex-template.md",{"path":121,"resourceType":98,"resourceTypeDesc":99,"sizeBytes":122,"sourceHtmlUrl":123},"templates\u002Fproject-overview-template.md",1951,"https:\u002F\u002Fgithub.com\u002Fdanielmtt9\u002Fbloomcornerkiddies\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-document-project\u002Ftemplates\u002Fproject-overview-template.md",{"path":125,"resourceType":98,"resourceTypeDesc":99,"sizeBytes":126,"sourceHtmlUrl":127},"templates\u002Fproject-scan-report-schema.json",4836,"https:\u002F\u002Fgithub.com\u002Fdanielmtt9\u002Fbloomcornerkiddies\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-document-project\u002Ftemplates\u002Fproject-scan-report-schema.json",{"path":129,"resourceType":98,"resourceTypeDesc":99,"sizeBytes":130,"sourceHtmlUrl":131},"templates\u002Fsource-tree-template.md",2160,"https:\u002F\u002Fgithub.com\u002Fdanielmtt9\u002Fbloomcornerkiddies\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-document-project\u002Ftemplates\u002Fsource-tree-template.md",{"path":133,"resourceType":98,"resourceTypeDesc":99,"sizeBytes":134,"sourceHtmlUrl":135},"workflow.md",719,"https:\u002F\u002Fgithub.com\u002Fdanielmtt9\u002Fbloomcornerkiddies\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-document-project\u002Fworkflow.md",{"path":137,"resourceType":98,"resourceTypeDesc":99,"sizeBytes":138,"sourceHtmlUrl":139},"workflows\u002Fdeep-dive-instructions.md",11909,"https:\u002F\u002Fgithub.com\u002Fdanielmtt9\u002Fbloomcornerkiddies\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-document-project\u002Fworkflows\u002Fdeep-dive-instructions.md",{"path":141,"resourceType":98,"resourceTypeDesc":99,"sizeBytes":142,"sourceHtmlUrl":143},"workflows\u002Fdeep-dive-workflow.md",979,"https:\u002F\u002Fgithub.com\u002Fdanielmtt9\u002Fbloomcornerkiddies\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-document-project\u002Fworkflows\u002Fdeep-dive-workflow.md",{"path":145,"resourceType":98,"resourceTypeDesc":99,"sizeBytes":146,"sourceHtmlUrl":147},"workflows\u002Ffull-scan-instructions.md",43200,"https:\u002F\u002Fgithub.com\u002Fdanielmtt9\u002Fbloomcornerkiddies\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-document-project\u002Fworkflows\u002Ffull-scan-instructions.md",{"path":149,"resourceType":98,"resourceTypeDesc":99,"sizeBytes":150,"sourceHtmlUrl":151},"workflows\u002Ffull-scan-workflow.md",970,"https:\u002F\u002Fgithub.com\u002Fdanielmtt9\u002Fbloomcornerkiddies\u002Fblob\u002Fmain\u002F.gemini\u002Fskills\u002Fbmad-document-project\u002Fworkflows\u002Ffull-scan-workflow.md",[153,184,219,246,273,289],{"skillNo":154,"name":155,"nameZh":6,"description":156,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":157,"categories":158,"keywords":168,"publishedAt":44},"01M6GJTE1GESGGF9K028Y7753E","xurl","X\u002FTwitter via xurl CLI: post, search, DM, media, v2 API.","https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fxurl\u002Fvariants\u002Fhermes-agent\u002FSKILL.md",[159,162,163],{"categoryNo":160,"categoryName":161,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":164,"categoryName":165,"taxonomyType":166,"taxonomyTypeDesc":167},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[155,169,43,170,171,72,73,172,173,174,175,176,177,178,179,180,74,181,182,183],"openclaw","cli","github","official","search","https","social-media","api","Media","hermes","hermes agent","twitter","social","via","post",{"skillNo":185,"name":186,"nameZh":6,"description":187,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":188,"categories":189,"keywords":201,"publishedAt":44},"01M6GJT8S1PXQ8WPXT1HSNBWH2","writing-plans","Write implementation plans: bite-sized tasks, paths, code.","https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fwriting-plans\u002Fvariants\u002Fhermes-agent\u002FSKILL.md",[190,193,196,197,198],{"categoryNo":191,"categoryName":192,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":194,"categoryName":195,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":164,"categoryName":165,"taxonomyType":166,"taxonomyTypeDesc":167},{"categoryNo":199,"categoryName":200,"taxonomyType":166,"taxonomyTypeDesc":167},"01JBSEEDCAT000000000000036","内容创作者",[202,203,204,205,43,206,72,207,73,208,209,210,211,212,213,214,215,216,217,218],"writing","writing plans","plans","design","review","workflow","documentation","tasks","development","code","planning","code-review","subagent","write","superpowers","paths","test-driven-development",{"skillNo":220,"name":221,"nameZh":6,"description":222,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":223,"categories":224,"keywords":228,"publishedAt":44},"01M6GJST0H5X7WHBJ3BZK0DVKH","whisper","OpenAI's general-purpose speech recognition model. Supports 99 languages, transcription, translation to English, and language identification. Six model sizes from tiny (39M params) to large (1550M params). Use for speech-to-text, podcast transcription, or multilingual audio processing. Best for robust, multilingual ASR.","https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fwhisper\u002Fvariants\u002Fhermes-agent-optional\u002FSKILL.md",[225],{"categoryNo":226,"categoryName":227,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000016","图像与多媒体",[221,43,72,229,230,231,232,233,234,235,236,237,238,239,240,241,242,243,244,245],"openai","speech","multimodal","Transformers","ASR","Audio","text","model","speech recognition","use","general","multilingual","translation","english","identification","processing","Audio Processing",{"skillNo":247,"name":248,"nameZh":6,"description":249,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":250,"categories":251,"keywords":255,"publishedAt":44},"01M6GJSMRQ8EETZTYMG72P70EA","weights-and-biases","W&B: log ML experiments, sweeps, model registry, dashboards.","https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fweights-and-biases\u002Fvariants\u002Fhermes-agent\u002FSKILL.md",[252],{"categoryNo":253,"categoryName":254,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000013","分析与可视化",[256,43,257,258,73,259,260,261,262,263,264,236,265,266,267,268,269,270,271,272],"weights and biases","tensorflow","experiments","pytorch","visualization","registry","real-time","tuning","dashboards","experiment","log","time","Experiment Tracking","Model Registry","Hyperparameter Tuning","WandB","Real-Time Visualization",{"skillNo":274,"name":275,"nameZh":6,"description":276,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":277,"categories":278,"keywords":280,"publishedAt":44},"01M6GJS19KDPRY112JTR326S06","watchers","Poll RSS, JSON APIs, and GitHub with watermark dedup.","https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fwatchers\u002Fvariants\u002Fhermes-agent-optional\u002FSKILL.md",[279],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},[275,43,281,171,72,282,283,284,39,285,286,178,179,287,288],"terminal","automation","http","monitoring","json","rss","devops","with",{"skillNo":290,"name":291,"nameZh":6,"description":292,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":293,"categories":294,"keywords":297,"publishedAt":44},"01M6GJRHJD2A6Q830SWF9W48BC","serving-llms-vllm","vLLM: high-throughput LLM serving, OpenAI API, quantization.","https:\u002F\u002Fgithub.com\u002Fzapabob\u002FSkills\u002Fblob\u002Fmain\u002Fregistry\u002Fskills\u002Fvllm\u002Fvariants\u002Fhermes-agent\u002FSKILL.md",[295,296],{"categoryNo":160,"categoryName":161,"taxonomyType":21,"taxonomyTypeDesc":22},{"categoryNo":164,"categoryName":165,"taxonomyType":166,"taxonomyTypeDesc":167},[298,299,300,72,55,229,301,302,303,232,304,176,305,306,307,308,309,310,311,312],"llms","vLLM","serving llms vllm","openai api","tensor","Inference Serving","Production","llm serving","High Throughput","PagedAttention","Continuous Batching","Quantization","Tensor Parallelism","high-throughput","throughput"]