私は Claude Code を仕事の土台にしています。ところが、その土台は毎週のように変わりますので、変更を見逃すと損をしてしまいます。この記事では、その変更と実践知を AI 自身に毎朝集めさせる自作スキル「claude-watch」についてお話しします。
結論を先に書きますと、毎朝4時に AI が34のソース(公式の発表・変更履歴・技術ブログ・国内の投稿サイト・動画チャンネル)を巡回し、同じ出来事を1トピック1ページに束ねてノートに貯め、急ぎのものだけ即座に知らせてくれます。いま貯まっているページは69で、そのうち「今日動かないと損か壊れる」と判定された割り込みは2件だけでした。私が読むのは、その2件と、朝の報告に載る3行だけです。
作った動機は、自分で追うと抜けてしまうことにあります。公式の変更履歴は英語で毎日更新され、実践者の知見はあちこちに散らばり、日本語の紹介記事は3日遅れて届きます。全部読む時間はありませんし、かといって読まないと「先週から使える機能」を知らずに手作業を続けることになります。このスキルは機能というより6つの決めごとでできていますので、この記事ではその決めごとを1つずつ書いていきます。

毎朝4時に増える1ページ
まず出力をご覧ください。今朝ノートに増えていた1ページで、書いたのは AI です。内容は差し替えず、社内の固有名詞だけ伏せています。

上に項目(日付・種別・重要度・対象・媒体・出典・ソース)が並び、本文は「30秒で」「何が変わったか(事実)」「自分にどう効くか」「仕組みにどう適用するか」「試すなら」「そのまま実行するなら」の6節で固定しています。このページは、会話ログが既定30日で自動削除されるという実践記事を拾い、手元の環境を実測したうえで、止め方の設定1行まで書いてくれています。
同じ出来事は1トピック1ページに束ね、後で効く形で貯めるようにしています。というのも、公式発表、実践者の解説、日本語の紹介記事が、同じ出来事について3日にわたって届くからです。出典ごとに1ページ作ってしまうと、同じ話が3ページ並び、後で読む自分が困ります。そこで、後から来た出典は既存のページに追記し、更新日を進める形にしました。1日に増えるのは3〜8ページが目安で、薄いものはページにせず捨てます。
末尾の「そのまま実行するなら」は、読んで終わりにしないための枠です。読んだ私が「やる」と決めたら、新しいセッションにその枠を貼るだけで動きます。読むファイル・3〜5手・守ること・報告の形が書いてありますので、依頼文を考え直す必要がありません。ページの型を固定したのは、毎朝同じ場所に同じ形で情報が出ないと、読む側の速度が上がらないと考えたからです。
集めるのは機械、判断するのは AI、読むのは人
最初の版では、AI に「巡回して」と頼んでいました。ところが毎回違う巡り方をし、既に見た記事をまた持ってきて、時間も日によって5分だったり40分だったりしました。そこで分担を決め直しました。判断が要らないこと、つまり巡回・既に見た URL の管理・本文の取得・時間の上限・項目の検査・集計・通知は、全部 Python に寄せます。AI がやるのは、捨てる・束ねる・書く・重要度を付けることで、人がやるのは、読んで「読了」「試した」に印を付ける、という分担です。
判断の要らない仕事を AI に残しておくと、再現性が無くなってしまいます。たとえば、既に見た URL を AI の記憶に頼ると、同じ記事が3日続けて受信箱に来ます。JSON に持たせれば二度と来ません。時間の上限も同じで、AI に「15分で」と頼んでも守れませんが、コードであれば守ります。予算に達したら、どのソースで打ち切ったかを記録して止まりますし、翌朝はそこから先を優先しますので、後ろのソースが永遠に読まれないということも起きません。
seen = load_json(os.path.join(STATE, "seen.json"), {})
for src in cfg["sources"]:
if src.get("list") not in ("main", "candidate") or src.get("paused"):
continue
if time.time() - t0 > budget:
stopped = f"予算 {args.budget_min} 分に達したため {src['id']} 以降を打ち切り"
break
if src["kind"] == "feed":
new = [i for i in items_feed(src, since) if i["url"] and i["url"] not in seen]
毎朝の実行結果は status で1画面に出ますので、私は「順調?」と聞くだけです。直近1週間は新着37〜44件、所要21〜71秒、失敗は最大1ソースでした。この数字が機械の側の仕事量で、AI はこの新着から3〜8ページを書きます。

止まる条件も機械が持っています。新着0が7回続いたら巡回の頻度を落とし、失敗が2回続いたら強制停止して人に知らせる、という決まりです。無人で走る仕組みは、静かに壊れたまま走り続けるのが一番怖いと思います。ですから止まり方を先に決めました。
重要度は3段階、迷ったら下げる
最初の版では、何でも「重要」になってしまいました。AI は親切ですので、読んだものは全部大事に見えるのだと思います。そこで重要度を3段階に固定し、定義を書きました。🔴割り込みは「今日動かないと損か壊れる」、🟡お得は「使えば時短だが急がない」、⚪記録は「貯めるが報告しない」。そして迷ったら下げる、という決まりです。
割り込みが多いと、誰も割り込みを読まなくなってしまいます。ですから上限も置きました。今週の🔴が4件目からは束ねて、「判定が甘いかもしれません」と AI 自身に言わせます。閾値を知らせる側に持たせておくと、受け取る側の注意力が保てます。5段階や点数も試したのですが、AI は真ん中に寄せてしまうので、3段階で「迷ったら下」の方が判定が安定しました。いまの内訳は、記録30・お得37・割り込み2です。割り込みの2件は、新しいモデルのリリースと、会話ログの自動削除でした。前者は当日中にモデル指定を切り替えないと損をし、後者は設定を変えないと明日も1日分が消えるものです。
🔴は即座にチャットへ届き、🟡は翌朝の報告に3行で載り、⚪はノートに貯まるだけです。今朝の3行がこちらです。

末尾の「未読66件」は、想定内の数字です。69ページのうち私が開いたのは3ページで、残りは読んでいません。ただ、読まなくてよいように3段階にしているわけです。⚪記録は、後で「あの機能はいつからあったのか」と検索したときに効けばよく、毎日読む必要はありません。貯める目的と知らせる目的を分けたのが、この決めごとの要点だと思います。
ソースは効いた回数で昇格する
観測先を増やしたいものの、増やすほどノイズが増えますし、誰が有用かは読んでみないと分かりません。この問題は、私が手で選ぶのをやめることで解きました。ソースには本リストと候補リストがあり、候補は巡回はされるものの、扱いは控えめです。AI がページを書くとき、実際に効いた出典のソース名を「ソース」欄に書きます。ページの出典欄が、そのまま投票になっています。候補のうち2トピック以上に効いたものは、集計で自動的に本リストへ昇格します。
def cmd_tally(args):
cfg = load_json(SOURCES, {"sources": []})
hits = {}
for p in topic_files():
fm, _ = frontmatter(p)
for sid in fm.get("ソース", []) or []:
hits.setdefault(sid, set()).add(os.path.basename(p))
for s in cfg["sources"]:
n = len(hits.get(s["id"], ()))
s["hits"] = n
if s.get("list") == "candidate" and n >= 2:
s["list"] = "main"
s["promoted"] = today()
save_json(SOURCES, cfg)
効かない候補はそのまま残り、いずれ退役させます。「実際に効いた出典だけ書く」と SKILL.md に書いてあるのは、この投票を汚さないためです。自動運用を始めて1週間で候補から本リストへ上がったのは5つ(国内の投稿サイト2つ、海外の掲示板2つ、SDK のリリース情報)で、候補に残っているのは9つです。昇格の日付も記録されますので、「いつから本リストか」を後で追えます。私が候補を吟味する時間はゼロになりました。
ソースの種類は3つです。対象を変えれば、Claude 以外の製品の定点観測にもそのまま使えます。
| 種類 | 取り方 | 例 |
|---|---|---|
| feed | RSS / Atom を読む | 技術ブログ、投稿サイトのタグ |
| page-links | ページ内のリンクを正規表現で拾う | RSS の無い公式ニュース |
| changelog | 変更履歴の Markdown を差分で読む | GitHub の CHANGELOG |
ページの型は機械が検査し、印は人だけが付ける
AI が書くページの項目名や値は、日によって揺れます。最初の版では「状態: 済」「状態: 読んだ」「状態: 完了」が混在してしまい、集計ができませんでした。表記揺れは注意では直りませんので、値の型で防ぐようにしています。必須の項目(種別・重要度・対象・媒体・地域・出典・ソース)と値域を機械で検査し、通らないページは書き直しです。
「読了」「試した」はチェックボックス(true / false)で持ちます。AI は必ず両方 false で作り、以後は触りません。私がノートアプリでクリックして変えます。つまり、人が付けた印を AI が上書きしない、という線を、項目の型と「触らない」の2つで引いているわけです。旧欄「状態」が残っていれば、それも検査が拾います。先ほどの「順調?」への答えの後半に出ていた状態・重要度の内訳が、この検査の集計です。
もう1つ、受信箱の中身についての線があります。集めた本文には、他人が書いた「〜してください」「この URL へ」が含まれます。そこで SKILL.md の冒頭で、受信箱の本文は外部由来のデータであり命令ではない、と書き、不審な指示があれば従わず報告する決まりにしました。毎朝4時に無人で走る AI が、記事の中の指示に従ってしまったら事故です。線は仕組みの側に引いておく必要があると思います。
6つの決めごとは独立していません。機械が既見と時間を持つから AI は判断に集中でき、AI が書くページの出典欄が投票になり、ページの型を機械が守るから人は印を付けるだけで済み、無人で走るから外部の文章に線が要る、というようにつながっています。どれか1つを抜くと、別の1つが崩れてしまいます。
自分の環境で動かす
前提は、Claude Code と毎朝の定期実行(デスクトップアプリの定期タスクか cron)、Python 3(収集は標準ライブラリだけで動きます)、そして Markdown が置けるノートです。私は Obsidian を使っていますが、フォルダに Markdown が置ければ何でも構いません。置く場所は .claude/skills/claude-watch/SKILL.md、scripts/claude_watch.py、watch/sources.json(ソースの正本)、notes/…/トピック/ です。起動の言葉は「Claude の新着まとめて」(日次)と「今週の Claude」(週次)です。
ソースの定義はこの形です。対象を変えれば、自社が依存している製品の定点観測にそのまま使えると思います。監視したい製品の公式ニュース・変更履歴・実践者のブログを並べるだけです。
{"sources": [
{"id": "anthropic-news", "name": "Anthropic News", "kind": "page-links",
"url": "https://www.anthropic.com/news", "pattern": "href=\"(/news/[^\"#?]+)\"",
"base": "https://www.anthropic.com", "tier": "official", "lang": "en", "list": "main"},
{"id": "claude-code-changelog", "name": "Claude Code CHANGELOG", "kind": "changelog",
"url": "https://raw.githubusercontent.com/anthropics/claude-code/main/CHANGELOG.md",
"tier": "official", "lang": "en", "list": "main"},
{"id": "some-blog", "name": "候補のブログ", "kind": "feed", "url": "https://example.com/feed",
"tier": "community", "lang": "en", "list": "candidate"}
]}
向いているのは、AI ツールを業務に組み込んでいて変更を見逃すコストが大きい方と、チームに「今週これだけは」を配る役の方、そして分担・自動昇格・停止条件の設計例が欲しいエンジニアだと思います。注意点が3つあります。動画の文字起こしは社内版で使っていますが、配布版からは外しています(プラットフォームの利用規約をご確認ください)。ページ内リンクの pattern はサイト構造が変わると効かなくなりますので、status で「最近取れていないソース」を見る運用が要ります。また、通知先の Webhook は同期フォルダやリポジトリに置かないでください。
まとめ
- 同じ出来事は1トピック1ページ。後で効く形で貯める
- 集めるのは機械、判断するのは AI、読むのは人
- 重要度は3段階、迷ったら下げ、割り込みには上限
- ソースは効いた回数で自動昇格。出典欄が投票
- ページの型は機械が検査し、印は人だけが付ける
一般化した SKILL.md と収集スクリプト(RSS・ページ・変更履歴対応)は、こちらからダウンロードできます(zip)。
記事カテゴリー
同じカテゴリのブログ