Imported from xtone/ai_development_tools (
knowledge_sharing/skills/knowledge-synthesis/SKILL.md). Install upstream withnpx skills add xtone/ai_development_tools --skill knowledge-synthesis. Copyright stays with the author.
Knowledge Synthesis
é±ããšã«éãŸã£ããã¬ããžã«ãŒããæãã察ç«ããææ¡ãåºããæ¬¡ã®åããæ±ºãããæé ã®æ ¹æ ãšå€æåºæºã¯ references/synthesis-method.md ã«ããããã®ã¹ãã«ã¯ãã®æé ãå®è¡ãããv0 ã¯é±æ¬¡ã®åæã ããæ±ãïŒææ¬¡ã® P2ã»Q6ã»Q8 ãšãããžã§ã¯ããããã¯å¯Ÿè±¡å€ïŒã
ææç©ã¯ 3 ã€ã
- NotionãåæããŒããDB ã®è¡ïŒ1 ããŒã 1 è¡ãæ¡åŠ = æ€èšäžïŒ
- é±ã®è¡ã®é äžã®ããŸãšãïŒ<é±>ïŒãããŒãž
- é±ã®è¡ã®ã¹ããŒã¿ã¹ = åææžã¿
å®ãããš
- å人å¥ã®ä»¶æ°ã©ã³ãã³ã°ããã誰ãäœã倱æãããã¯æžããªãã代衚ã«ãŒãã®åŒçšã¯ claim ãšãããžã§ã¯ããŸã§ã«ãããæçš¿è ã¯å¿åã®ã©ãã«ïŒp1ãp2 âŠïŒã§æž¡ãããã©ãã«ãæ¬æã«æžããªã
- ã«ãŒãã«ç¡ãäºå®ãè¶³ããªããæšå®ã¯æšå®ãšæžã
- 人äºè©äŸ¡ã»åŠéãšçµå¶ã«é¢ãã話é¡ïŒknowledge-cards ã®
confidential_topics.jsonïŒã¯æžããªãã匷ãèªã«åœããã«ãŒãã¯ãèªã¿èŸŒã¿ã®æ®µéã§åæããå€ãã - Notion ãžã®æžã蟌ã¿ã¯ããŸãšãã®äžæžãããŠãŒã¶ãŒã確èªããŠããè¡ã
åŒæ°
$ARGUMENTS ãæ¬¡ã®ããã«è§£éããã
| åŒæ° | æ¢å® | æå³ |
|---|---|---|
--week |
åã® ISO é± | åæããé±ã2026-W43 åœ¢åŒ |
--out |
~/.claude/knowledge-cards/synthesis/<week>/ |
ãã®åã®ææç©ãã£ã¬ã¯ããªãæå®ãããšãã¯æžã蟌ã¿åŸãæ¶ããªã |
--dry-run |
ãªã | Notion ã«æžããªããæžã蟌ãå 容ã衚瀺ããŠçµãã |
以äžããã®ã¹ãã«ã®ãã£ã¬ã¯ããªã <skill-dir>ãknowledge-cards ã®ã¹ã¯ãªããã <cards-scripts>ïŒ<skill-dir>/../knowledge-cards/scriptsïŒããã©ã°ã€ã³ã®ãã£ã¬ã¯ããªã <plugin-dir>ïŒ<skill-dir>/../..ïŒãšæžããã¹ã¯ãªããã¯ãã¹ãŠ python3 -I ã§å®è¡ããããã®ã¹ãã«ã¯ knowledge-cards ã®æ©å¯ã¹ãã£ããšè©±é¡å€å®ããã®ãŸãŸäœ¿ãã®ã§ãåããã©ã°ã€ã³ã® knowledge-cards ãå¿
èŠã
äœæ¥ãã¡ã€ã«ã¯å®è¡ãããã£ã¬ã¯ããªïŒæ¡ä»¶ã®ãªããžããªãããããªãïŒã«ã¯äœããªãã<run> 㯠~/.claude/knowledge-cards/synthesis/<week>/ïŒãŸãšãã®äžæžã summary-<week>.mdïŒã<work> 㯠<run>/.work/ïŒã«ãŒãã®å
šæãããŒããNotion ã«éãå
容ïŒã--out ãæå®ãããšã㯠<run> ããã®ãã£ã¬ã¯ããªã<work> ã <out>/.work/ ã«ãªãã
Phase 0: æºå
- 察象é±ã決ãã:
python3 -I <cards-scripts>/cards.py week [--week <week>]ãweekãštitleã以éã§äœ¿ã - äœæ¥ãã£ã¬ã¯ããªãäœã:
python3 -I <cards-scripts>/cards.py workdir --kind synthesis --week <week> [--out <out>]ãåºåã®runãšworkã<run>ãš<work>ã«äœ¿ã <plugin-dir>/notion.jsonããã鱿¬¡ Tipsã»ãã¬ããžã«ãŒãã»åæããŒãã® data source ãèªã- Notion MCP ã® query-data-sources ã§é±ã®è¡ãæ¢ãïŒ
"é±" LIKE '<week>%'ïŒãurlãã¹ããŒã¿ã¹ãæ§ãã- é±ã®è¡ãç¡ããã°ãåæããã«ãŒããç¡ãã®ã§ããã®æšãäŒããŠçµãã
ã¹ããŒã¿ã¹ãåææžã¿ãå ±ææžã¿ãªããæ¢ã«åæãããŠããããã®ãŸãŸé²ãããšåæããŒããéè€ããã®ã§ãAskUserQuestion ã§ãäžæ¢ããïŒæšå¥šïŒ/ dry-run ã§å 容ã ãèŠãããèããæ¢åã®è¡ãæ¶ãããæžãæãããã¯ããªã
- 段åãã 1 è¡ã§äŒããïŒå¯Ÿè±¡é±ãdry-run ãã©ããïŒ
Phase 1: ã«ãŒãã®èªã¿åºã
references/synthesis-method.md ã®æé 1 ã® SQL ã§ãé±ã®è¡ã®ããŒãž IDïŒURL ã®æ«å°Ÿ 32 æ¡ïŒã LIKE ã§å«ãã«ãŒããå
šä»¶èªããçµæã¯ãMCP ãè¿ãã JSON ããã®ãŸãŸ <work>/query-1.json ã«ä¿åããïŒ100 ä»¶ãè¶
ããã query-2.json 以éã«åããïŒã
python3 -I <skill-dir>/scripts/load_cards.py <work>/query-*.json --week <week> --out <work>/cards-<week>.json
åºåã«ã¯ãææšïŒåå è
æ°ãåãã»æ¥µæ§ããšã®ææ°ãobserved ã®æ°ïŒãäºå®ã«ãŒããæèŠã«ãŒããå
¥ããæçš¿è
ã¯å¿åã®ã©ãã«ã«çœ®ãæãã£ãŠãããéè€ã¯ä»£è¡šã«ãŒãã® duplicates ã«æããããã匷ãèªã«åœããã«ãŒãã¯å€ããexcluded.confidential ã«ä»¶æ°ã ããå
¥ããææšãšé€å€ã®ä»¶æ°ããŠãŒã¶ãŒã«äŒãããæèŠã«ãŒãã 0 æãªããäºå®ã«ãŒãã®è¡šã ãã®ãŸãšãã«ãªããšäŒããŠããé²ãã
Phase 2: åæïŒClaude ã倿ããïŒ
references/synthesis-method.md ã®æé 4ã7 ã«åŸãã<work>/cards-<week>.json ã®æèŠã«ãŒããèªãã§ã<work>/themes-<week>.json ãæžãã
{"week": "<week>",
"themes": [{"title": "çµè«ã®äžæïŒ10ã60 åïŒ", "cards": ["<ã«ãŒãã® url>"],
"proposal": "äœããããã®äžæïŒ80 åãŸã§ãåè©ã§çµããïŒ", "kinds": ["æ¡ä»¶åã", "ä»çµã¿å"],
"split": "æ£ãšåã®åããç®ã®äžæïŒ80 åãŸã§ïŒã察ç«ãç¡ããã°ç©º",
"limits": "å蚌ã»éçïŒ100 åãŸã§ïŒ",
"decision": "å
±æäŒã§æ±ºããåãïŒ60 åãŸã§ãããããŸããïŒãã§çµããïŒ"}],
"next_questions": [{"id": "Q4", "reason": "ãªã次ã«èãã"}, {"text": "æ°ããåãã®æ¡", "reason": "..."}]}
- æèŠã«ãŒãã¯åãããŸããã§æããããã¹ãŠã®æèŠã«ãŒãããã©ãã 1 ã€ã®ããŒãã«å ¥ããïŒ1 æã ãã®ããŒããæ®ãïŒ
kindsã¯ãäž¡ç«æ¡ããæ¡ä»¶åãããä»çµã¿åãããéžã¶ãä»çµã¿åãªãéå å ïŒã¹ãã«ãhookãCLAUDE.mdããã©ã°ã€ã³èšå®ãªã©ïŒãåæããã- ããŒãã®åãã»æ ¹æ ã®åŒ·ãïŒäººæ°ã»ãããžã§ã¯ãæ°ã»ææ°ïŒã¯ã¹ã¯ãªãããæ°ããã®ã§æžããªã
- 察ç«ã®åããç®ãåã¯ãã«ãŒãã®æèãšæ ¹æ ããèšããããšã«éã
- æ£ãšåã®ã«ãŒãã® claim ã¯æžãåããªãããŸãšããšåæããŒãã®æ¬æã«ãã¹ã¯ãªãããã«ãŒããã䞊ã¹ã
- èªã¿æã¯ Web å¶äœäŒç€Ÿã®ãšã³ãžãã¢ã§ãéçºã®é²ãæ¹ãè°è«ããããã«èªããçµè«ããæžãã1 é
ç® 1 æã«ãããæžãæ¹ã®èŠåã¯
references/synthesis-method.mdã®ããŸãšãã®èªãŸãæ¹ã
æ€æ»ããŠããšã©ãŒã 0 ã«ãªããŸã§çŽãã
python3 -I <skill-dir>/scripts/synth.py validate <work>/themes-<week>.json --cards <work>/cards-<week>.json
worked ãš failed ãåãããŒãã«ããã®ã«åããç®ã空ãããŒãã«å ¥ã£ãŠããªãæèŠã«ãŒããäºå®ã«ãŒãã®æ··å ¥ãåãéçã®ç©ºæ¬ãåæ°ã®è¶ éã 2 æä»¥äžã®é ç®ããããïŒãã§çµãããªãåããæçš¿è ã©ãã«ã®èšèŒã¯ãšã©ãŒã«ãªãã
Phase 3: ãŸãšãã®äžæžããšæ©å¯ã®å確èª
python3 -I <skill-dir>/scripts/synth.py render <work>/themes-<week>.json --cards <work>/cards-<week>.json --out <run>/summary-<week>.md
python3 -I <skill-dir>/scripts/synth.py check <run>/summary-<week>.md --cards <work>/cards-<week>.json
check ã¯ãä»é±ã®ã«ãŒããžã®ã¡ã³ã·ã§ã³ã ããé€ããæ¬æã«ãæ©å¯ã¹ãã£ããšã«ãŒãã«ããªã話é¡ã®å€å®ãããããè¡ããšãšãæ¹è¡ãã€ãªãã å
šæã®äž¡æ¹ãèŠãïŒæ¹è¡ãèŠããªãæåã§åããèªãæ¢ãŸãïŒã
- 匷ãèªã»ç§å¯æ
å ±:
themes-<week>.jsonã®è©²åœç®æãæ¶ããŠãrender ããããçŽã - èŠç¢ºèªã®èªïŒææ Œãéè·ãªã©ïŒ: ã«ãŒãã«å«ãŸããŠããŠãèªåã§ã¯éããªããåœãã£ãèªãšè¡ããŠãŒã¶ãŒã«ç€ºããAskUserQuestion ã§ã人äºè©äŸ¡ã»åŠéãçµå¶ã®è©±ã§ã¯ãªãããšç¢ºèªã§ããèªã ãã
--allow-term <èª>ãä»ã㊠check ãããçŽãã確èªã§ããªããã°ããã®æãæ¶ããéããèªã¯ä»¥éã®to-notionãšå確èªã«ãåã--allow-termãä»ãã
åé¡ã 0 ä»¶ã«ãªããŸã§ Phase 4 ã«é²ãŸãªãã
Phase 4: 確èª
- ããŒãã®äžèЧïŒããŒãåã察ç«ã®æç¡ãåã®äžæãæ ¹æ ã®åŒ·ãïŒã𿬡ã®åãã衚瀺ããã
<run>/summary-<week>.mdãéãã°å šæãèªãããšäŒãã - AskUserQuestion ã§èã: ãNotion ã«æžã蟌ãããthemes ãçŽããã®ã§èªã¿çŽãããæžã蟌ãŸãã«çµããã
- ãèªã¿çŽãããªã Phase 2 ã® validate ããããçŽã
--dry-run ã®ãšãã¯ã次㮠synth.py to-notion ã®åºåãšããŸãšãã®æ¬æã衚瀺ããŠå®äºå ±åã«é²ãã
Phase 5: æžã蟌ã¿
- åæããŒã DB ã«ãåãé±ã®è¡ãæ¢ã«ç¡ããã query-data-sources ã§ç¢ºãããïŒ
"é±" LIKE '%<é±ã®è¡ã®ããŒãž ID>%'ïŒãããã°æžã蟌ãŸãã«æ¢ãããŠãŒã¶ãŒã«äŒãã - åæããŒããäœã
python3 -I <skill-dir>/scripts/synth.py to-notion <work>/themes-<week>.json --cards <work>/cards-<week>.json --week-url <é±ã®è¡ã® URL> [--allow-term <ç¢ºèªæžã¿ã®èª> ...] > <work>/theme-pages.json
to-notion ã¯ãããŒãã®æç« ã check ãšåãå€å®ãéããªããšãåºåããã«ãšã©ãŒã§æ¢ãŸããåèŠçŽ ã® properties ãš content ã create-pages ã® pages[] ã«å
¥ããïŒparent ã¯åæããŒãã® data sourceãallow_async: falseïŒãè¿ã£ãŠãã URL ã title ãšçµã«ã㊠<work>/theme-urls.jsonïŒ[{"title": "...", "url": "..."}]ïŒã«æžãã
- ããŒããžã®ã¡ã³ã·ã§ã³ä»ãã§ããŸãšããäœãçŽããŠå確èªãã
python3 -I <skill-dir>/scripts/synth.py render <work>/themes-<week>.json --cards <work>/cards-<week>.json --theme-urls <work>/theme-urls.json --out <run>/summary-<week>.md
python3 -I <skill-dir>/scripts/synth.py check <run>/summary-<week>.md --cards <work>/cards-<week>.json --theme-urls <work>/theme-urls.json [--allow-term <ç¢ºèªæžã¿ã®èª> ...]
--theme-urls ãæž¡ããšãäœã£ãããŒãã®ããŒãžãžã®ã¡ã³ã·ã§ã³ãæ€æ»ããé€ãããã以å€ã®ã¡ã³ã·ã§ã³ã¯ URL ããšæ€æ»ãããã
- é±ã®è¡ã®é
äžã«ããŸãšããããŒãžã create-pages ã§äœãïŒparent ã¯
{"type": "page_id", "page_id": "<é±ã®è¡ã®ããŒãž ID>"}ãproperties ã¯{"title": "ãŸãšãïŒ<week>ïŒ"}ãicon 㯠ð§ãcontent ã¯<run>/summary-<week>.mdã®äžèº«ïŒ - fetch ã§ãŸãšãããŒãžãèªã¿è¿ãã厩ãïŒãã¡ã€ã«åã®èªåãªã³ã¯ãªã©ïŒãç¡ãã確ããããããã° update-page ã®
update_contentã§çŽã - é±ã®è¡ã®
ã¹ããŒã¿ã¹ã update-pageïŒupdate_propertiesïŒã§åææžã¿ã«ãã
Phase 6: åŸçä»ã
Phase 5 ã® 6ïŒé±ã®è¡ã åææžã¿ïŒãŸã§çµãã£ããããã®åã®äœæ¥ãã£ã¬ã¯ããªãæ¶ããã«ãŒãã®å
šæãæå
ã«æ®ããªãããã«ããããã
python3 -I <cards-scripts>/cards.py cleanup <run>
--dry-runã確èªã§ãæžã蟌ãŸãã«çµããããéžãã ãšããéäžã§æ¢ãŸã£ããšãã--out ãæå®ãããšãïŒcleanup ãæåŠããïŒã¯æ¶ããã«æ®ããå®äºå ±åã§ <run> ã®ãã¹ãäŒããã
å®äºå ±å
- 察象é±ãåå è æ°ãã«ãŒãææ°ïŒåãå¥ïŒãé€å€ããä»¶æ°ïŒéè€ã»ã«ãŒãã«ããªã話é¡ïŒ
- ããŒãæ°ã»å¯Ÿç«æ°ã»ææ¡æ°ãšãããŒãåã®äžèЧ
- 次ã®åã
- ãŸãšãããŒãžãšåæããŒãã® URLïŒ
--dry-runã®ãšãã¯ãã®æšïŒ - å
±æäŒã§æ¡åŠã決ããããšïŒåæããŒãã®
æ¡åŠãå ±æäŒã§æŽæ°ããïŒ
äœæ¥ãã£ã¬ã¯ããªãæ¶ããããäŒãããæ®ãããšãã¯ãã®ãã¹ãšãã«ãŒãã®å šæãå«ãã®ã§å ±æãªããžããªã«ã³ãããããªãããšãäŒããã
