{"id":49940971,"url":"https://github.com/ozzy-labs/feedradar","last_synced_at":"2026-05-23T01:11:22.526Z","repository":{"id":357024600,"uuid":"1234433893","full_name":"ozzy-labs/feedradar","owner":"ozzy-labs","description":"Multi-agent CLI that watches blogs and release feeds, then turns keyword hits into Markdown research reports","archived":false,"fork":false,"pushed_at":"2026-05-17T10:32:34.000Z","size":620,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-17T10:32:41.991Z","etag":null,"topics":["agentic","ai","ai-agents","claude","claude-code","cli","codex","copilot","gemini","markdown","multi-agent","news","release-notes","research","rss","web-scraping"],"latest_commit_sha":null,"homepage":null,"language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ozzy-labs.png","metadata":{"files":{"readme":"README.ja.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-05-10T07:16:26.000Z","updated_at":"2026-05-17T10:32:30.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/ozzy-labs/feedradar","commit_stats":null,"previous_names":["ozzy-labs/agentic-watch","ozzy-labs/feedradar"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/ozzy-labs/feedradar","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ozzy-labs%2Ffeedradar","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ozzy-labs%2Ffeedradar/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ozzy-labs%2Ffeedradar/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ozzy-labs%2Ffeedradar/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ozzy-labs","download_url":"https://codeload.github.com/ozzy-labs/feedradar/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ozzy-labs%2Ffeedradar/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33136090,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-17T09:28:26.183Z","status":"ssl_error","status_checked_at":"2026-05-17T09:27:52.702Z","response_time":107,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["agentic","ai","ai-agents","claude","claude-code","cli","codex","copilot","gemini","markdown","multi-agent","news","release-notes","research","rss","web-scraping"],"created_at":"2026-05-17T11:05:02.197Z","updated_at":"2026-05-23T01:11:22.520Z","avatar_url":"https://github.com/ozzy-labs.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"[English](README.md) | 日本語\n\n# FeedRadar\n\nブログ・公式アップデート・リリースフィードを監視し、キーワードヒットを 4 種の AI エージェント (Claude Code / Codex / Gemini / Copilot) に渡して **Markdown 調査レポートを書かせる CLI**。\n\n## 解決する課題\n\n複数の公式ブログ・ドキュメント・リリースノートを横断的に追い、変更点を要約する作業は AI エージェントとの相性が良いが、ソース管理・差分検出・テンプレート適用・複数エージェントへの委譲を毎回手作業で組むのは煩雑になる。`radar` はこのループを CLI として固定化し、ユーザーの調査ディレクトリに Markdown レポートを蓄積する。\n\n## 主な特徴\n\n- **多エージェント対応**: Claude Code / Codex CLI / Gemini CLI / GitHub Copilot CLI を adapter 経由で切り替え。\n- **複数フィード種別**: RSS / HTML / **HTML (JS rendered)** / GitHub Releases / npm registry / **JSON Feed (1.0 / 1.1)** / **JSON API (recipe ベース、過去全件取り込みの `--backfill` 対応)** を同一の `Source` 抽象で扱う ([ADR-0012](./docs/adr/0012-json-api-adapter-and-recipe-strategy.md))。\n- **バンドル recipe**: `radar source recipes` で同梱済み YAML recipe (例: AWS What's New / dev.to) を一覧、`radar source add \u003cid\u003e --recipe \u003cname\u003e` で 1 行で source 化 ([ADR-0012 §D3](./docs/adr/0012-json-api-adapter-and-recipe-strategy.md))。\n- **Digest モード**: 短期間に複数ヒットした item や、複数 feed に跨る同テーマの item を 1 本の横断レポートにまとめる ([ADR-0011](./docs/adr/0011-digest-research-output.md))。\n- **ユーザー側データ管理**: `sources/` `items/` `state/` `research/` `templates/` は **ユーザーの任意ディレクトリ** に置き、本パッケージは engine のみを提供する。\n- **定期実行 workflow 後追い生成**: `radar workflow generate watch` / `combined` で GitHub Actions YAML を CLI から後追い生成。`combined` は watch + 自動 research を `--max-items` ハードキャップ付きで実行し、暴走 feed による LLM cost 爆発を設計レベルで遮断 ([ADR-0014](./docs/adr/0014-workflow-generate-and-auto-research-safety.md))。\n- **進捗表示と verbose mode**: 長時間実行コマンド (`research` / `review` / `update` / `watch run --backfill` / html-js fetch / `source test`) が phase markers + spinner + 副次メトリクス (`stdout` / `output` / `page x/N`) を stderr に出力する。`--verbose` で agent CLI の stdout/stderr を pass-through、`--quiet`（CI なら `RADAR_NO_PROGRESS=1`）で reporter を完全に黙らせる ([ADR-0015](./docs/adr/0015-progress-reporting-ux.md))。\n- **npm 単体配布**: OIDC Trusted Publishers で `@ozzylabs/feedradar` を npm 配布。\n\n## インストール\n\n```bash\nnpm i -g @ozzylabs/feedradar\n```\n\n`kind: html-js` adapter（JS 実行後に DOM が組み立てられる SPA / CSR ページ向け）を使う場合は Playwright を別途 install する。Playwright は **optional peer dep** として宣言されているため、RSS / static HTML のみ使うユーザーには ~300MB の Chromium footprint を強いない（[ADR-0010](./docs/adr/0010-html-js-adapter-and-distribution.md)）:\n\n```bash\nnpm i -g playwright\nnpx playwright install chromium\n```\n\n`html-js` source を追加する前に `radar doctor` で Playwright / Chromium が検出できるか確認できる。CI で使う場合の具体例は [docs/user-guide.md → `--kind html-js` → CI で使う](./docs/user-guide.md#ci-で使う) を参照。\n\n開発中は本リポを clone し、`pnpm install \u0026\u0026 pnpm run build` で `dist/index.js` を生成して `node dist/index.js \u003ccommand\u003e` で起動する。\n\n## 企業プロキシ環境\n\n社内 HTTP / HTTPS プロキシ越しでも、標準の env var を export して `radar` を\n起動するだけで自動検出されて動く（CLI フラグ / 設定ファイルの編集は不要）。\nTLS 中継プロキシ (Zscaler / Netskope 等) では証明書検証を切るのではなく\n`NODE_EXTRA_CA_CERTS` を設定する:\n\n```bash\nexport HTTPS_PROXY=http://proxy.corp.example.com:8080\nexport NODE_EXTRA_CA_CERTS=/path/to/corp-ca.pem   # TLS 中継時のみ\nradar doctor                                      # 動作確認\n```\n\nNTLM / Kerberos プロキシは直接対応しない（`cntlm` / `Px` / `Authoxy` で\nローカル変換）。WSL2 から Windows ホストのプロキシを参照する場合、\n`npm install` 自体のプロキシ設定、`radar doctor` の live healthcheck の\n詳細は [docs/user-guide/proxy-setup.ja.md](./docs/user-guide/proxy-setup.ja.md) を参照。\n\n## 使い方\n\n```bash\n# クイックスタート (anthropics/anthropic-sdk-python の GitHub Releases を監視)\nradar init\nradar source add anthropic-sdk \\\n  --kind github-releases \\\n  --url https://github.com/anthropics/anthropic-sdk-python \\\n  --keywords \"feat,fix,release\"\nradar watch run\nradar research \u003citem-id\u003e\n\n# その他のサブコマンド\nradar source list             # ソース一覧\nradar source test \u003cid\u003e        # ソースをドライラン実行（state/items を書き換えない）\nradar research --digest \u003cid1\u003e \u003cid2\u003e ...  # 複数 item を 1 つの digest レポートに束ねる（ADR-0011）\nradar dismiss \u003citem-id\u003e       # 不要 item を dismissed に遷移（LLM 不要）\nradar review \u003cresearch-id\u003e    # レポートを別エージェントで相互レビュー\nradar update \u003cresearch-id\u003e    # 既存レポートを最新 item で更新（v+1）\nradar doctor                  # workspace / agent CLI / Playwright / proxy / TLS の health check\n                              #   --no-proxy-check で live proxy round-trip をスキップ (offline 環境向け)\nradar workflow generate watch     # GitHub Actions watch workflow を後追い生成 (ADR-0014)\nradar workflow generate combined  # watch + 自動 research を --max-items ハードキャップ付きで生成 (ADR-0014)\nradar --help                  # ヘルプ\n```\n\n全 9 サブコマンド (`init` / `source` / `watch` / `research` / `dismiss` / `review` / `update` / `doctor` / `workflow`) が実装済み。詳細は [docs/user-guide.md](./docs/user-guide.md) を参照。\n\n## 開発\n\n```bash\npnpm install            # 依存関係インストール\npnpm run build          # tsc でビルド（dist/）\npnpm run typecheck      # 型チェック\npnpm run test           # vitest run\n\n# ローカルで CLI を呼ぶ場合 (build 後)\npnpm radar --help        # = node dist/index.js --help (package.json scripts の alias)\nnode dist/index.js --help        # 等価\n```\n\n\u003e ローカルの `pnpm radar \u003ccmd\u003e` は `package.json` の `scripts.radar`（`node dist/index.js`）を呼ぶ alias で、事前に `pnpm run build` で `dist/index.js` を生成しておく必要がある。配布版 (`npm i -g @ozzylabs/feedradar`) でユーザーが直接叩く `radar \u003ccmd\u003e` は `package.json` の `bin.radar` 経由で、こちらは publish 済み `dist/` を参照するため build 不要。両者は同名だがレイヤーが違う。なお `pnpm --prefix \u003cpath\u003e radar \u003ccmd\u003e` は CWD を `\u003cpath\u003e` に切り替えてから scripts を実行する仕様なので、別ディレクトリ（例えば smoke test 用の空ワークスペース）で scripts alias を呼びたい場合は `pnpm --prefix` ではなく `node \u003crepo-root\u003e/dist/index.js \u003ccmd\u003e` を直接呼ぶこと（前者はリポ root に対して `init` 等が走る事故になる）。\n\n## アーキテクチャ概要\n\n```text\nsrc/\n  index.ts              CLI entry point (#!/usr/bin/env node)\n  cli/                  init / source / watch / research / dismiss / review / update / doctor / workflow\n  core/\n    watcher.ts          source → adapter → items\n    filter.ts           keyword / excludeKeyword\n    items.ts            items の load / save\n    templates.ts        research テンプレートの読み込み\n    state.ts            state/\u003csourceId\u003e.yaml の load / save\n    config.ts           radar.config.yaml の load / 検証\n    injection-detector.ts  prompt injection regex pre-filter (ADR-0009 M1a)\n    feeds/              rss / html / html-js / github-releases / npm-registry / json-feed / json-api\n  agents/               4 CLI adapters（claude-code / codex-cli / gemini-cli / copilot）\n  schemas/              Zod スキーマ（Source / Item / State / Research）\n  skills/               engine SKILL bundle (research / review / update; init で .agents/skills/ に配布)\n  claude-skills/        Claude Code 用 slash-command 雛形 (init で .claude/skills/ に配布)\n  gemini-commands/      Gemini CLI 用 TOML slash-command 雛形 (init で .gemini/commands/ に配布)\n  templates/            workspace 既定テンプレート (init で templates/ に配布)\n```\n\n## ドキュメント\n\n- [docs/architecture.md](./docs/architecture.md) — システム全体図 / モジュール責務 / データフロー / Phase 別スコープ\n- [docs/user-guide.md](./docs/user-guide.md) — インストール / クイックスタート / コマンド仕様\n- [docs/user-guide/proxy-setup.ja.md](./docs/user-guide/proxy-setup.ja.md) — 企業プロキシ / TLS 中継 / NTLM ブリッジ / WSL2 環境のセットアップ\n- [docs/release.md](./docs/release.md) — リリース手順（初回手動 publish + Trusted Publisher 登録 + 以降の OIDC 自動化）\n- [docs/adr/](./docs/adr/README.md) — FeedRadar 内部の設計判断記録（Agent / Source / Output / Schedule / User Data / Filter / Skill Bundling / Status State Machine / Untrusted External Content Handling / html-js Adapter / Digest Research / JSON API \u0026 Recipes / Workflow Generate / Progress Reporting）\n\n## 規約\n\n- **言語**: TypeScript ESM / Node.js 22+ / pnpm\n- **コミット**: Conventional Commits（`commitlint` で強制）\n- **ブランチ**: GitHub Flow（`main` + feature branch、squash merge のみ）\n- **配布**: npm `@ozzylabs/feedradar`、OIDC Trusted Publishers（`NPM_TOKEN` は使わない）\n- **共通設定**: [`ozzy-labs/commons`](https://github.com/ozzy-labs/commons) から `sync.sh` で配布。\n- **共通スキル**: [`ozzy-labs/skills`](https://github.com/ozzy-labs/skills) を `@ozzylabs/skills` Renovate preset で取り込み。\n\n## License\n\nMIT — see [LICENSE](./LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fozzy-labs%2Ffeedradar","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fozzy-labs%2Ffeedradar","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fozzy-labs%2Ffeedradar/lists"}