#668 by GitHub stars
MaryCache/imozuru
知らない分野にキャッチアップするとき、汎用的な言葉から界隈の用語・中心の人・媒体(学会・雑誌・個人ブログ・動画・リポジトリ・一覧)を特定し、 引用・リンク・著者を芋づる式にたどって、目当ての原文(論文も個人の記事や動画の字幕も)を要約せずそのまま ~/research/{話題}/sources/ に保存する。 周ごとに map.md(用語・人・媒体・原文の一覧)を書き足し、調査の論点の全部に原文が付くか飽和したら止める。 見張りのモードでは、map.md の媒体(Qiita・Zenn のタグ、note、YouTube、ブログ、arXiv)の新着を RSS で引いて原文の冒頭つきで並べる。 以下
History
Review weekly changes to SKILL.md before updating. Dates mark the weeks in which we observed each version; checks apply to the recorded commits.
View weekly changes
skills/imozuru/SKILL.md
Week of Nov 2, 2026 · +2 / −2 lines
Before Not checked yet → After Network or broad shell
659f46cdd25a → 808407e501bc
Diff text is unavailable under the recorded licenses. Line counts and the GitHub link remain available.
Week of Oct 26, 2026 · Line counts unavailable
Before Not checked yet → After Not checked yet
First observation → 659f46cdd25a
No earlier version was observed for comparison.
Verified commit 808407e501bc5a1e596655b0a6d62e1f3b20ba1b
git clone --filter=blob:none --no-checkout https://github.com/MaryCache/imozuru.git .hotskills/marycache-imozuru && git -C .hotskills/marycache-imozuru checkout --detach 808407e501bc5a1e596655b0a6d62e1f3b20ba1b
# Copy each selected skill directory from .hotskills/marycache-imozuru into .claude/skills/<skill-name>/Heat
8.1- Star growth, last 7 daysAhead of 95% of tracked repositories
- Star growth, last 24 hoursAhead of 93% of tracked repositories
- Rank movement, last 7 daysAhead of 87% of tracked repositories
- Commits, last 30 daysAhead of 93% of tracked repositories
- Accounts asking about it through MCP, last 7 daysNot available
- Hot votes this weekAhead of 0% of tracked repositories
Heat never changes the order by stars, and sponsorship never touches it. How heat works
Stars over time
30-day change not yet available: not enough history.
Individual skills in this repository
- imozuru
skills/imozuru
How it works
imozuru
When your agent uses it
知らない分野にキャッチアップするとき、汎用的な言葉から界隈の用語・中心の人・媒体(学会・雑誌・個人ブログ・動画・リポジトリ・一覧)を特定し、 引用・リンク・著者を芋づる式にたどって、目当ての原文(論文も個人の記事や動画の字幕も)を要約せずそのまま ~/research/{話題}/sources/ に保存する。 周ごとに map.md(用語・人・媒体・原文の一覧)を書き足し、調査の論点の全部に原文が付くか飽和したら止める。 見張りのモードでは、map.md の媒体(Qiita・Zenn のタグ、note、YouTube、ブログ、arXiv)の新着を RSS で引いて原文の冒頭つきで並べる。 以下で使用:「芋づる式に調べて」「この分野をキャッチアップしたい」「界隈の用語と人から掘って」 「論文とか先行研究を漁って」「既存の技術を真似したいから元ネタを探して」「上手い人のやり方を集めて」「原文で落として」「/imozuru」 「〇〇って研究あるの?原典ほしい」「全然わからないから流れを掘って」「どういう界隈でどう呼ばれてるか知りたい」 「〇〇の新着見て」「今週の〇〇の記事まとめて」「キャッチアップ」「/imozuru watch」 "dig into this field", "find the canonical papers on X", "literature dive", "what's new in X this week"。 以下には使用しない: 答えが1つの事実の確認(年・有無だけ・仕様1つ → そのまま検索)/ 手元の PC の中の資料を探す/読んだ資料の要約や解説を書く。
What it loads into context
Frontmatter
487 tokensAlways available to the agent
SKILL.md
12,958 tokensWhen the skill is activated
Reference documents
2,031 tokensLoaded on request
Token counts are estimates. Scripts run separately; they are not counted as reference context.
The playbook
- なぜこの形か(先に読む)
- 置き場
- 検索役のサブエージェント
- 流れ
- 見張る(watch モード)
- map.md の書式
- 道具
- 境界
Scripts executed separately
scripts/chain.pyscripts/dashboard.pyscripts/digest.pyscripts/fetch.pyscripts/make_guide_shots.pyscripts/make_textures.pyscripts/palette.pyscripts/report.pyscripts/skin.pyscripts/watch.py
Files
../../.claude-plugin/marketplace.jsonasset617 bytes../../.claude-plugin/plugin.jsonasset484 bytesSKILL.mdcore44,407 bytesassets/apple-touch-icon.pngasset14,034 bytesassets/cork.pngasset51,288 bytesassets/favicon.pngasset4,443 bytesassets/guide-pc-doc.webpasset34,310 bytesassets/guide-pc-home.webpasset16,360 bytesassets/guide-pc-side.webpasset46,196 bytesassets/guide-pc-topic.webpasset35,516 bytesassets/guide-sp-doc.webpasset19,040 bytesassets/guide-sp-home.webpasset6,754 bytesassets/guide-sp-side.webpasset10,570 bytesassets/guide-sp-topic.webpasset17,722 bytesassets/icon-192.pngasset15,207 bytesassets/icon-512.pngasset51,053 bytesassets/logo-light.svgasset59,864 bytesassets/logo.svgasset59,864 bytesassets/paper.pngasset28,128 bytesreferences/theory.mddoc6,341 bytesscripts/chain.pyruns12,568 bytesscripts/dashboard.pyruns199,426 bytesscripts/digest.pyruns25,468 bytesscripts/fetch.pyruns70,289 bytesscripts/make_guide_shots.pyruns13,483 bytesscripts/make_textures.pyruns4,626 bytesscripts/palette.pyruns6,863 bytesscripts/report.pyruns23,993 bytesscripts/skin.pyruns21,573 bytesscripts/watch.pyruns29,957 bytes
Read SKILL.md
# imozuru
知らない分野を、言葉を知らないところから原文にたどりつくまで調べる。
大事な決まりは2つ。**調べている間は原文を要約せずに保存する**ことと、**止めどきを確信度ではなく証拠で決める**こと。
## なぜこの形か(先に読む)
- **要約しない理由**: 調べ始めの混乱した段階で詳しくまとめると、早すぎる結論(premature closure)を招いて、調べる過程を妨げる(Kuhlthau 1991)。エージェントが早い周で要約すると、エージェントの見方で結論が固まり、ユーザーが判断に使う細部が抜ける。このスキルは「自分の感覚と AI の調査結果がかみあわない」という経験から生まれた。判断するのは原文を読むユーザーで、エージェントは原文の場所を指すだけ。要約を止めるのは調べている間だけで、止めたあとは詳細レポート(下の節)で解説を書く。止める判定が出たあとなら、要約しても調べる過程を妨げない
- **決め打ちしない理由**: AI の検索は、方向がいくつもありうる段階で1つを選び、その後の検索も同じ方向へ重ねて失敗する(Zhou ら 2026 HypoSearch)。迷ったら仮説ごとに調べを分けて並べ、比べてから進む
- **検索語が無いとき**: 引用をたどる方法は、主題を言葉で言い表す問題を避けられる(Bates 1989)。検索語が出てこないときは引用と著者でたどる
- 理論と原文の場所は `references/theory.md`
## 置き場
View the complete source on GitHubSkills included
- imozuru
Repository facts
- License
- MIT
- Created
- Oct 13, 2026
- Last pushed
- Oct 28, 2026
- Forks
- 66
- Open issues
- 1
- Project activity
- Active
Rank over the last 12 weeks
Now #668 · best #634
- #671 from Oct 30 to Oct 31
- #669 on Nov 1
- #668 on Nov 2
- #672 on Nov 3
- #670 on Nov 4
- #668 since Nov 5
16 earlier periods
- #946 on Oct 11
- #971 on Oct 13
- #990 on Oct 14
- #972 on Oct 15
- #978 on Oct 16
- #955 on Oct 17
- #930 on Oct 18
- #807 on Oct 19
- #750 on Oct 20
- #736 on Oct 21
- #689 on Oct 22
- #666 on Oct 23
- #634 on Oct 24
- #712 on Oct 25
- #677 on Oct 28
- #673 on Oct 29
Before you install
Network or broad shellAutomated signals, not a guarantee
Checked Nov 3, 2026
Changed on Nov 3, 2026
No longer found: Possible obfuscation
Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.
Show 2 notes
skills/imozuru/assets/logo-light.svg:1Analysis incomplete: physical or joined line exceeds character limitskills/imozuru/assets/logo.svg:1Analysis incomplete: physical or joined line exceeds character limit
- No broad tool permissions
- 1 dangerous shell commandin 1 file: imozuru/scripts/fetch.py:490
- 157 network referencesin 12 files: imozuru/scripts/watch.py:28 imozuru/scripts/dashboard.py:462 imozuru/scripts/fetch.py:21 and 9 more
- No hidden or obfuscated text
- No instruction overrides
- 10 executable scriptsin 10 files: imozuru/scripts/chain.py:1 imozuru/scripts/dashboard.py:1 imozuru/scripts/digest.py:1 and 7 more
- 12 references to secretsin 4 files: imozuru/scripts/dashboard.py:372 imozuru/scripts/fetch.py:151 imozuru/scripts/watch.py:99 and 1 more
- No requests to vote in Hot
Show all 180 signals by file
.claude-plugin/marketplace.json
- Network accessline 1
{ "$schema": "https://anthropic.com/claude-code/marketplace.schema.json", - Network accessline 2
"$schema": "https://anthropic.com/claude-code/marketplace.schema.json", - Network accessline 15
"source": "./", "category": "productivity", "homepage": "https://github.com/MaryCache/imozuru", - Network accessline 16
"category": "productivity", "homepage": "https://github.com/MaryCache/imozuru", "repository": "https://github.com/MaryCache/imozuru", - Network accessline 17
"homepage": "https://github.com/MaryCache/imozuru", - Network accessline 18
"repository": "https://github.com/MaryCache/imozuru",
.claude-plugin/plugin.json
- Network accessline 6
"author": { "name": "MaryCache", "url": "https://github.com/MaryCache" - Network accessline 7
"name": "MaryCache", "url": "https://github.com/MaryCache" }, - Network accessline 8
"url": "https://github.com/MaryCache" - Network accessline 9
}, "homepage": "https://github.com/MaryCache/imozuru", "repository": "https://github.com/MaryCache/imozuru", - Network accessline 10
"homepage": "https://github.com/MaryCache/imozuru", - Network accessline 11
"repository": "https://github.com/MaryCache/imozuru",
skills/imozuru/SKILL.md
- Network accessline 74
- 報告は「見つけた/探したが無い/探していない」の3つに分けてもらう。「探していない」がそのまま次の手がかりになる - **要約は頼まない**。名前と URL を正確に拾うことを優先させる - **ファイルを書かせない**。ダウンロードは親の仕事。試行で検索役が curl で一時ファイルを書いた - Network accessline 75
- **要約は頼まない**。名前と URL を正確に拾うことを優先させる - **ファイルを書かせない**。ダウンロードは親の仕事。試行で検索役が curl で一時ファイルを書いた - **検索語ごとのヒットを、報告の末尾に JSON で全件返させる**。形は `[{"query": "<検索語>", "method": "WebSearch", "hits": [{"title": "…", "url": "…"}]}]`。ヒットが無かった検索語も `"hits": []` - Network accessline 76
- **ファイルを書かせない**。ダウンロードは親の仕事。試行で検索役が curl で一時ファイルを書いた - Network accessline 206
- **急ぐとき(既定)**: 定番の場所をそのまま足して先に見張る。公式のブログ・GitHub の releases、Qiita のタグ、Zenn のトピック、名前の知れた個人ブログ。map.md は問い・媒体・人だけで作り、あとで書き足す。React の試行では 0周目の検索役2本に約2分かかり、結果は定番を直接足したのとほぼ同じだった - **場所の見当がつかない分野**: 上の「1. map.md を作る(0周目)」だけ回して媒体を作ってから見張る 2. **見 - Network accessline 207
- **場所の見当がつかない分野**: 上の「1. map.md を作る(0周目)」だけ回して媒体を作ってから見張る 2. **見張る先を足す**。map.md の「媒体」と「人」から、新着を出す場所を選んで `scripts/watch.py add <topic_dir> <url>` で足す。Qiita のタグ・ユーザー、Zenn のトピック・ユーザー、note のユーザー、Reddit、YouTube のチャンネル、RSS を出しているブログ、arXiv の検索(`h - Network accessline 208
2. **見張る先を足す**。map.md の「媒体」と「人」から、新着を出す場所を選んで `scripts/watch.py add <topic_dir> <url>` で足す。Qiita のタグ・ユーザー、Zenn のトピック・ユーザー、note のユーザー、Reddit、YouTube のチャンネル、RSS を出しているブログ、arXiv の検索(`http://export.arxiv.org/api/query?search_query=...&sortBy=su - Network accessline 275
- `scripts/fetch.py <sources_dir> <name> <url>`: ダウンロードして本物か確かめる。PDF は .pdf と .txt(`pdftotext -layout`・poppler か Xpdf。無ければ pdfminer.six)、HTML は .md、YouTube は字幕を `[分:秒] 文` の .md(`yt-dlp`・動画は保存しない)。文字の層が無い PDF は `pdftoppm` と `tesseract` で OCR
skills/imozuru/assets/logo-light.svg
- Network accessline 1
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 4128 1254"><g id="symbol"><path d="M76.50 597.00C76.50 634.34 77.58 670.33 83.66 707.08C113.88 889.83 252.39 1058.93 424.81 1126.10C467.57 1142.75 510.95 1152.37 555.93 1159.65C588.07 116
skills/imozuru/assets/logo.svg
- Network accessline 1
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 4128 1254"><g id="symbol"><path d="M76.50 597.00C76.50 634.34 77.58 670.33 83.66 707.08C113.88 889.83 252.39 1058.93 424.81 1126.10C467.57 1142.75 510.95 1152.37 555.93 1159.65C588.07 116
skills/imozuru/references/theory.md
- Network accessline 10
| ファイル名 | URL | |---|---| | `bates-1989-berrypicking` | https://www.pages.gseis.ucla.edu/faculty/bates/articles/berrypicking.pdf | - Network accessline 11
|---|---| | `bates-1989-berrypicking` | https://www.pages.gseis.ucla.edu/faculty/bates/articles/berrypicking.pdf | | `ellis-1987-phd-behavioural-model` | https://etheses.whiterose.ac.uk/id/eprint/2975/1/DX093006.pdf | - Network accessline 12
| `bates-1989-berrypicking` | https://www.pages.gseis.ucla.edu/faculty/bates/articles/berrypicking.pdf | - Network accessline 13
| `ellis-1987-phd-behavioural-model` | https://etheses.whiterose.ac.uk/id/eprint/2975/1/DX093006.pdf | - Network accessline 14
| `kuhlthau-1991-inside-search-process` | https://tefkos.rutgers-sci.domains/Courses/612/Articles/Kuhlthau_Inside_91.pdf | - Network accessline 15
| `arxiv-2609.01294-explore-before-committing` | https://arxiv.org/pdf/2609.01294 | - Network accessline 16
| `arxiv-2608.02009-halt` | https://arxiv.org/pdf/2608.02009 | - Network accessline 17
| `arxiv-2602.03304-to-search-or-not` | https://arxiv.org/pdf/2602.03304 | - Network accessline 18
| `kastner-2007-horizon-estimate` | https://pmc.ncbi.nlm.nih.gov/articles/PMC2655834/ | - Network accessline 19
| `eumesy-unknown-terms` | https://speakerdeck.com/eumesy/examine-the-meaning-of-unknown-terms | - Network accessline 20
| `arxiv-2505.09316-scent-of-knowledge` | https://arxiv.org/pdf/2505.09316 |
skills/imozuru/scripts/chain.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 26
API = "https://api.openalex.org" - Network accessline 38
"""転送は API と同じ場所(https://api.openalex.org)の中だけたどる。 - Network accessline 56
if params: url += "?" + urllib.parse.urlencode(params) req = urllib.request.Request(url, headers={"User-Agent": "imozuru (mailto omitted)"}) - Network accessline 57
url += "?" + urllib.parse.urlencode(params) req = urllib.request.Request(url, headers={"User-Agent": "imozuru (mailto omitted)"}) with _OPENER.open(req, timeout=60) as res: - Network accessline 58
req = urllib.request.Request(url, headers={"User-Agent": "imozuru (mailto omitted)"})
skills/imozuru/scripts/dashboard.py
- Executable scriptline 1
#!/usr/bin/env python3 - Access to secretsline 372
[Credential-related source omitted] - Access to secretsline 457
[Credential-related source omitted] - Network accessline 462
[Credential-related source omitted] - Network accessline 463
server = ThreadingHTTPServer(("127.0.0.1", port), make_handler(root, runs, token)) print(f"→ http://127.0.0.1:{port}/?k={token}", flush=True) print("この PC の中だけで開いている。スマホへは Tailscale serve で中継する(SKILL.md)。止めるときは Ctrl+C", flush=True) - Network accessline 464
print(f"→ http://127.0.0.1:{port}/?k={token}", flush=True) - Access to secretsline 579
[Credential-related source omitted] - Network accessline 622
FEEDBACK_FORM = ("https://docs.google.com/forms/d/e/1FAIpQLScmjsJ363aHtpUVy6-cDxQ_OnwAcQE0hp7CjigMFG57c-OjJA/viewform?usp=pp_url" - Access to secretsline 630
[Credential-related source omitted] - Network accessline 636
return None fields = {"BODY": "body", "VERSION": "version", "ENV": "env", "5": "rating"} out = {"action": f"https://docs.google.com/forms/d/e/{m.group(1)}/formResponse"} - Network accessline 637
fields = {"BODY": "body", "VERSION": "version", "ENV": "env", "5": "rating"} out = {"action": f"https://docs.google.com/forms/d/e/{m.group(1)}/formResponse"} for k, v in parse_qsl(u.query): - Network accessline 638
out = {"action": f"https://docs.google.com/forms/d/e/{m.group(1)}/formResponse"} - Network accessline 655
def steps(values): return "".join(f"<feFunc{c} type='discrete' tableValues='{values}'/>" for c in "RGB") svg = ("<svg xmlns='http://www.w3.org/2000/svg' width='240' height='240'>" - Network accessline 656
return "".join(f"<feFunc{c} type='discrete' tableValues='{values}'/>" for c in "RGB") svg = ("<svg xmlns='http://www.w3.org/2000/svg' width='240' height='240'>" "<filter id='c' x='0' y='0' width='100%' height='100%' color-int - Network accessline 657
svg = ("<svg xmlns='http://www.w3.org/2000/svg' width='240' height='240'>" - Network accessline 676
return ("<svg xmlns='http://www.w3.org/2000/svg' width='180' height='180'><filter id='f'>" - Network accessline 1406
// quiet は何もせず、slow は文だけ替える。確かめている間に文書が読み終わっていたら何もしない function dwask(q,url,mode){var c=window.AbortController?new AbortController():null,tm=setTimeout(function(){if(c)c.abort()},6000); fetch(url,{cache:'no-store',credentials:'same-origin',s - Network accessline 1407
function dwask(q,url,mode){var c=window.AbortController?new AbortController():null,tm=setTimeout(function(){if(c)c.abort()},6000); fetch(url,{cache:'no-store',credentials:'same-origin',signal:c?c.signal:undefined}).then(function(r){return r - Network accessline 1408
fetch(url,{cache:'no-store',credentials:'same-origin',signal:c?c.signal:undefined}).then(function(r){return r.status},function(){return 0}).then(function(st){clearTimeout(tm); - Network accessline 1719
"function check(){if(busy)return;busy=true;var c=window.AbortController?new AbortController():null," "t=setTimeout(function(){if(c)c.abort()},4000);" "fetch(document.body.getAttribute('data-scope')+'manifest.webm - Network accessline 1720
"t=setTimeout(function(){if(c)c.abort()},4000);" "fetch(document.body.getAttribute('data-scope')+'manifest.webmanifest',{cache:'no-store',credentials:'same-origin',signal:c?c.signal:undefined})" ".then(function(r - Network accessline 1721
"fetch(document.body.getAttribute('data-scope')+'manifest.webmanifest',{cache:'no-store',credentials:'same-origin',signal:c?c.signal:undefined})" - Network accessline 1728
js_hash = "'sha256-" + base64.b64encode(hashlib.sha256(OFFLINE_JS.encode()).digest()).decode() + "'" csp = ("default-src 'none'; style-src 'unsafe-inline' https://fonts.googleapis.com; font-src https://fonts.gstatic.com; " - Network accessline 1729
csp = ("default-src 'none'; style-src 'unsafe-inline' https://fonts.googleapis.com; font-src https://fonts.gstatic.com; " - Network accessline 1758
f'<meta http-equiv="Content-Security-Policy" content="{csp}">\n' f'<title>imozuru 調査記録</title>{skin.HEAD_META}' f'<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Noto+Serif+JP:wght@400;600&famil - Network accessline 1759
f'<title>imozuru 調査記録</title>{skin.HEAD_META}' f'<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Noto+Serif+JP:wght@400;600&family={THEME["font"]}&display=swap">' f'<style>{css}</style></head>\n - Network accessline 1760
f'<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Noto+Serif+JP:wght@400;600&family={THEME["font"]}&display=swap">' - Network accessline 1779
// 窓口が動いていれば大きいページでも10秒はかからない。502・503・504 は手前の中継(Tailscale)がサーバーに届かなかった答え function load(r){var t,late=new Promise(function(res){t=setTimeout(function(){res(null)},10000)}); return Promise.race([fetch(r).catch(function(){return null}),late]) - Network accessline 1780
function load(r){var t,late=new Promise(function(res){t=setTimeout(function(){res(null)},10000)}); return Promise.race([fetch(r).catch(function(){return null}),late]).then(function(x){clearTimeout(t); if(x&&[502,503,504].indexOf(x.status)<0 - Network accessline 1781
return Promise.race([fetch(r).catch(function(){return null}),late]).then(function(x){clearTimeout(t); - Network accessline 2005
phone = ("<ol><li>PC で <code>dashboard.py --serve</code> を実行します。合言葉付きの URL が表示されます</li>" "<li>PC とスマホに Tailscale(自分の機器同士だけを接続する VPN)を導入して同じアカウントで接続し、PC で <code>tailscale serve --bg 8765</code> を実行します</li>" "<li>スマホ - Network accessline 2006
"<li>PC とスマホに Tailscale(自分の機器同士だけを接続する VPN)を導入して同じアカウントで接続し、PC で <code>tailscale serve --bg 8765</code> を実行します</li>" "<li>スマホで <code>https://<PC の名前>.<tailnet>.ts.net/?k=<合言葉></code> を開きます</li>" " - Network accessline 2007
"<li>スマホで <code>https://<PC の名前>.<tailnet>.ts.net/?k=<合言葉></code> を開きます</li>" - Access to secretsline 2130
[Credential-related source omitted] - Access to secretsline 2131
[Credential-related source omitted] - Network accessline 2194
csp = (f"default-src 'none'; style-src 'unsafe-inline' https://fonts.googleapis.com; font-src https://fonts.gstatic.com; img-src data:; " - Network accessline 2195
f"frame-src 'self' file:; script-src {hashes}; form-action {'https://docs.google.com' if form else chr(39) + 'none' + chr(39)}" - Network accessline 2205
<meta http-equiv="Content-Security-Policy" content="{csp}"> <title>imozuru 調査記録</title>{skin.HEAD_META}{icon_link} <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=EB+Garamond:wght@400;500&family=Noto+Serif+JP:wght@400; - Network accessline 2206
<title>imozuru 調査記録</title>{skin.HEAD_META}{icon_link} <link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=EB+Garamond:wght@400;500&family=Noto+Serif+JP:wght@400;600&family={THEME["font"]}&display=swap"> <style>{CSS}{hud_c - Network accessline 2207
<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=EB+Garamond:wght@400;500&family=Noto+Serif+JP:wght@400;600&family={THEME["font"]}&display=swap">
skills/imozuru/scripts/digest.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/imozuru/scripts/fetch.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 21
import contextlib import functools import http.client - Network accessline 22
import functools import http.client import io - Network accessline 23
import http.client - Network accessline 135
return socket.create_connection((ip, port), timeout, source_address) - Access to secretsline 151
[Credential-related source omitted] - Network accessline 192
def _pinned_create(self, address, timeout=socket._GLOBAL_DEFAULT_TIMEOUT, source_address=None): if self._tunnel_host: return socket.create_connection(address, timeout, source_address) - Network accessline 193
if self._tunnel_host: return socket.create_connection(address, timeout, source_address) return _pinned_connection(address[0], address[1], timeout, source_address) - Network accessline 194
return socket.create_connection(address, timeout, source_address) - Network accessline 198
class _PinnedHTTPConnection(_PinnedMixin, http.client.HTTPConnection): - Network accessline 202
class _PinnedHTTPSConnection(_PinnedMixin, http.client.HTTPSConnection): - Network accessline 207
def http_open(self, req): if req.has_proxy(): return self.do_open(http.client.HTTPConnection, req) - Network accessline 208
if req.has_proxy(): return self.do_open(http.client.HTTPConnection, req) return self.do_open(_PinnedHTTPConnection, req) - Network accessline 209
return self.do_open(http.client.HTTPConnection, req) - Access to secretsline 264
[Credential-related source omitted] - Network accessline 327
if problem: raise UnsafeURL(problem) req = urllib.request.Request(ascii_url(url), headers={"User-Agent": user_agent}) - Network accessline 328
raise UnsafeURL(problem) req = urllib.request.Request(ascii_url(url), headers={"User-Agent": user_agent}) with _OPENER.open(req, timeout=90) as res: - Network accessline 329
req = urllib.request.Request(ascii_url(url), headers={"User-Agent": user_agent}) - Dangerous shell operationline 490
poppler を入れられない環境(sudo が使えない WSL など)でも、pip で入る pdfminer.six なら - Access to secretsline 537
[Credential-related source omitted] - Network accessline 768
URL のどこかに「youtu.be/」があれば YouTube と見なしていたので、 https://evil.example/?next=youtu.be/ のような他人のページまで yt-dlp に渡っていた - Network accessline 769
https://evil.example/?next=youtu.be/ のような他人のページまで yt-dlp に渡っていた - Network accessline 874
EUROPE_PMC_XML = "https://www.ebi.ac.uk/europepmc/webservices/rest/{}/fullTextXML" - Network accessline 876
JATS_MAX_ELEMENTS = 200_000 JATS_MAX_DEPTH = 200 _XLINK_HREF = "{http://www.w3.org/1999/xlink}href" - Network accessline 878
_XLINK_HREF = "{http://www.w3.org/1999/xlink}href" - Network accessline 955
and p.get("pub-id-type") == "doi" and p.text), None) if doi and f"doi.org/{doi.strip()}" not in text: text += f" https://doi.org/{doi.strip()}" - Network accessline 956
if doi and f"doi.org/{doi.strip()}" not in text: text += f" https://doi.org/{doi.strip()}" out.append(" ".join(filter(None, [f"[{label}]" if label else "", text]))) - Network accessline 957
text += f" https://doi.org/{doi.strip()}" - Network accessline 1010
out = [f"# {_jats_flat(meta.find('title-group/article-title')) or url}", "", url, f"本文: Europe PMC の全文 XML({xml_url})", " / ".join(filter(None, [journal, year, ids.get("doi") and f"https://doi.org/{ids['doi']}", - Network accessline 1011
f"本文: Europe PMC の全文 XML({xml_url})", " / ".join(filter(None, [journal, year, ids.get("doi") and f"https://doi.org/{ids['doi']}", ids.get("pmcid")])), - Network accessline 1012
" / ".join(filter(None, [journal, year, ids.get("doi") and f"https://doi.org/{ids['doi']}", - Network accessline 1215
trial = sources / f".{name}-arxiv.md" try: html_text = html_to_md(f"https://arxiv.org/html/{paper}", trial) - Network accessline 1216
try: html_text = html_to_md(f"https://arxiv.org/html/{paper}", trial) except Exception: # HTML 版が無い論文もある。そのときは元のまま下限で判定する - Network accessline 1217
html_text = html_to_md(f"https://arxiv.org/html/{paper}", trial)
skills/imozuru/scripts/make_guide_shots.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 25
MOCK = [ ("sunset-red", "夕焼けはなぜ赤いか", "夕方の空が赤く見えるのは、光のどんな性質によるのか", "論点6/6に原文", 2, ["https://journals.example.org/a", "https://www.example.edu/b", "https://ja.example.org/c"]), - Network accessline 26
("sunset-red", "夕焼けはなぜ赤いか", "夕方の空が赤く見えるのは、光のどんな性質によるのか", "論点6/6に原文", 2, ["https://journals.example.org/a", "https://www.example.edu/b", "https://ja.example.org/c"]), ("tea-ceremony", "茶の湯の作法の由来", "茶の湯の作法は、いつ誰が決めたのか", "1周目まで(論点3/5に原 - Network accessline 27
["https://journals.example.org/a", "https://www.example.edu/b", "https://ja.example.org/c"]), - Network accessline 28
("tea-ceremony", "茶の湯の作法の由来", "茶の湯の作法は、いつ誰が決めたのか", "1周目まで(論点3/5に原文)", 1, ["https://archive.example.jp/a", "https://www.example.ac.jp/b"]), ("bird-songs", "鳥のさえずりの方言", "同じ種の鳥でも、地域でさえずりが違うのはなぜか", "飽和した(挙がった14件中11件が既知)", 3, - Network accessline 29
["https://archive.example.jp/a", "https://www.example.ac.jp/b"]), - Network accessline 30
("bird-songs", "鳥のさえずりの方言", "同じ種の鳥でも、地域でさえずりが違うのはなぜか", "飽和した(挙がった14件中11件が既知)", 3, ["https://journals.example.org/c", "https://www.example.edu/d"]), ("bread-yeast", "天然酵母のパンの失敗", "天然酵母のパンが膨らまない原因は何か", "約束で打ち切り", 1, ["https://blog.ex - Network accessline 31
["https://journals.example.org/c", "https://www.example.edu/d"]), - Network accessline 32
("bread-yeast", "天然酵母のパンの失敗", "天然酵母のパンが膨らまない原因は何か", "約束で打ち切り", 1, ["https://blog.example.net/a"]), - Network accessline 33
("type-history", "明朝体の成り立ち", "明朝体の形は、どこから来たのか", "要の原典が有料で取れない", 2, ["https://archive.example.jp/b", "https://www.example.ac.jp/c"]), ("moss-garden", "苔庭の手入れ", "苔庭を枯らさずに保つには何をするか", "論点4/4に原文", 2, ["https://blog.example.net/b"]), - Network accessline 34
["https://archive.example.jp/b", "https://www.example.ac.jp/c"]), - Network accessline 35
("moss-garden", "苔庭の手入れ", "苔庭を枯らさずに保つには何をするか", "論点4/4に原文", 2, ["https://blog.example.net/b"]), - Network accessline 36
("old-maps", "古地図の読み方", "江戸の古地図の記号は、何を表すのか", "4周たどって区切った", 4, ["https://archive.example.jp/c", "https://ja.example.org/d"]), ("glass-color", "ガラスの色の出し方", "色ガラスの色は、何を混ぜて出すのか", "論点5/5に原文", 2, ["https://www.example.edu/e"]), - Network accessline 37
["https://archive.example.jp/c", "https://ja.example.org/d"]), - Network accessline 38
("glass-color", "ガラスの色の出し方", "色ガラスの色は、何を混ぜて出すのか", "論点5/5に原文", 2, ["https://www.example.edu/e"]), - Network accessline 41
MOCK += [(f"extra-{i}", title, f"{title}は、どう調べればよいか", reason, 1, ["https://blog.example.net/c"]) - Network accessline 133
[Credential-related source omitted] - Access to secretsline 133
[Credential-related source omitted]
skills/imozuru/scripts/make_textures.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/imozuru/scripts/palette.py
- Executable scriptline 1
Executable file
skills/imozuru/scripts/report.py
- Executable scriptline 1
#!/usr/bin/env python3
skills/imozuru/scripts/skin.py
- Executable scriptline 1
Executable file - Network accessline 22
FONT_LINK = ('<link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=EB+Garamond:wght@400;500' - Network accessline 24
CSP_FONTS = "style-src 'unsafe-inline' https://fonts.googleapis.com; font-src https://fonts.gstatic.com; img-src data:"
skills/imozuru/scripts/watch.py
- Executable scriptline 1
#!/usr/bin/env python3 - Network accessline 28
import email.utils import html import http.client - Network accessline 29
import html import http.client import ipaddress - Network accessline 30
import http.client - Network accessline 44
UA = {"User-Agent": "Mozilla/5.0 imozuru-watch"} ATOM = "{http://www.w3.org/2005/Atom}" - Network accessline 45
ATOM = "{http://www.w3.org/2005/Atom}" - Access to secretsline 99
[Credential-related source omitted] - Network accessline 174
return socket.create_connection((ip, port), timeout, source_address) - Access to secretsline 190
[Credential-related source omitted] - Network accessline 231
def _pinned_create(self, address, timeout=socket._GLOBAL_DEFAULT_TIMEOUT, source_address=None): if self._tunnel_host: return socket.create_connection(address, timeout, source_address) - Network accessline 232
if self._tunnel_host: return socket.create_connection(address, timeout, source_address) return _pinned_connection(address[0], address[1], timeout, source_address) - Network accessline 233
return socket.create_connection(address, timeout, source_address) - Network accessline 237
class _PinnedHTTPConnection(_PinnedMixin, http.client.HTTPConnection): - Network accessline 241
class _PinnedHTTPSConnection(_PinnedMixin, http.client.HTTPSConnection): - Network accessline 246
def http_open(self, req): if req.has_proxy(): return self.do_open(http.client.HTTPConnection, req) - Network accessline 247
if req.has_proxy(): return self.do_open(http.client.HTTPConnection, req) return self.do_open(_PinnedHTTPConnection, req) - Network accessline 248
return self.do_open(http.client.HTTPConnection, req) - Network accessline 266
if problem: raise UnsafeURL(problem) req = urllib.request.Request(url, headers=UA) - Network accessline 267
raise UnsafeURL(problem) req = urllib.request.Request(url, headers=UA) with _OPENER.open(req, timeout=60) as res: - Network accessline 268
req = urllib.request.Request(url, headers=UA) - Network accessline 299
def fetch(url: str) -> tuple[bytes, str]: - Network accessline 306
rules = [ (r"^https?://qiita\.com/tags/([^/?#]+)", "qiita-tag", "https://qiita.com/tags/{0}/feed"), - Network accessline 307
(r"^https?://qiita\.com/tags/([^/?#]+)", "qiita-tag", "https://qiita.com/tags/{0}/feed"), - Network accessline 308
(r"^https?://zenn\.dev/topics/([^/?#]+)", "zenn-topic", "https://zenn.dev/topics/{0}/feed"), - Network accessline 309
(r"^https?://zenn\.dev/([^/?#]+)/?$", "zenn-user", "https://zenn.dev/{0}/feed"), - Network accessline 310
(r"^https?://note\.com/([^/?#]+)/?$", "note-user", "https://note.com/{0}/rss"), - Network accessline 311
(r"^https?://qiita\.com/([^/?#]+)/?$", "qiita-user", "https://qiita.com/{0}/feed"), - Network accessline 312
(r"^https?://(?:www\.|old\.)?reddit\.com/r/([^/?#]+)", "reddit", "https://www.reddit.com/r/{0}/.rss"), - Network accessline 375
try: scheme = urllib.parse.urlsplit(url).scheme.lower() except ValueError: # 「http://[」のような URL で、check 全体を止めない - Network accessline 376
scheme = urllib.parse.urlsplit(url).scheme.lower() except ValueError: # 「http://[」のような URL で、check 全体を止めない return "" - Network accessline 377
except ValueError: # 「http://[」のような URL で、check 全体を止めない - Network accessline 438
"title": plain(it.findtext("title")), "link": (it.findtext("link") or "").strip(), "date": parse_date(it.findtext("pubDate") or it.findtext("{http://purl.org/dc/elements/1.1/}date")), - Network accessline 439
"link": (it.findtext("link") or "").strip(), "date": parse_date(it.findtext("pubDate") or it.findtext("{http://purl.org/dc/elements/1.1/}date")), "head": plain(it.findtext("description")), - Network accessline 440
"date": parse_date(it.findtext("pubDate") or it.findtext("{http://purl.org/dc/elements/1.1/}date")), - Network accessline 448
break head = en.findtext(f"{ATOM}summary") or en.findtext(f"{ATOM}content") \ or en.findtext("{http://search.yahoo.com/mrss/}group/{http://search.yahoo.com/mrss/}description") - Network accessline 449
head = en.findtext(f"{ATOM}summary") or en.findtext(f"{ATOM}content") or en.findtext("{http://search.yahoo.com/mrss/}group/{http://search.yahoo.com/mrss/}description") - Network accessline 450
or en.findtext("{http://search.yahoo.com/mrss/}group/{http://search.yahoo.com/mrss/}description") - Network accessline 481
try: kind, feed = discover(url) found = items(fetch(feed)[0]) # 引けないフィードは足さない - Network accessline 482
kind, feed = discover(url) found = items(fetch(feed)[0]) # 引けないフィードは足さない except SystemExit as e: - Network accessline 483
found = items(fetch(feed)[0]) # 引けないフィードは足さない - Network accessline 535
for kind, label, feed, *_ in rows: try: got = items(fetch(feed)[0]) - Network accessline 536
try: got = items(fetch(feed)[0]) except Exception as e: # 1つのフィードが落ちても他は見る - Network accessline 537
got = items(fetch(feed)[0])
How the signals fit together
Facts from a static read of the files at the pinned commit. They describe what the code does, not why.
Some files could not be read; the facts below still hold.
Declared and executed: 18 facts
- Contacts docs.google.com, which SKILL.md, the README and the plugin manifest do not mentionimozuru/scripts/dashboard.py:622High confidence
- Contacts www.w3.org, which SKILL.md, the README and the plugin manifest do not mentionimozuru/scripts/dashboard.py:657High confidence
- Contacts fonts.googleapis.com, which SKILL.md, the README and the plugin manifest do not mentionimozuru/scripts/dashboard.py:1760High confidence
- Contacts www.ebi.ac.uk, which SKILL.md, the README and the plugin manifest do not mentionimozuru/scripts/fetch.py:874High confidence
- Contacts www.w3.org, which SKILL.md, the README and the plugin manifest do not mentionimozuru/scripts/fetch.py:878High confidence
- Contacts doi.org, which SKILL.md, the README and the plugin manifest do not mentionimozuru/scripts/fetch.py:957High confidence
- Contacts www.example.edu, which SKILL.md, the README and the plugin manifest do not mentionimozuru/scripts/make_guide_shots.py:27High confidence
- Contacts archive.example.jp, which SKILL.md, the README and the plugin manifest do not mentionimozuru/scripts/make_guide_shots.py:29High confidence
- Contacts www.example.ac.jp, which SKILL.md, the README and the plugin manifest do not mentionimozuru/scripts/make_guide_shots.py:29High confidence
- Contacts docs.google.com, which SKILL.md, the README and the plugin manifest do not mentionimozuru/scripts/make_guide_shots.py:133High confidence
- Contacts fonts.googleapis.com, which SKILL.md, the README and the plugin manifest do not mentionimozuru/scripts/skin.py:22High confidence
- Contacts www.w3.org, which SKILL.md, the README and the plugin manifest do not mentionimozuru/scripts/watch.py:45High confidence
- Contacts qiita.com, which SKILL.md, the README and the plugin manifest do not mentionimozuru/scripts/watch.py:307High confidence
- Contacts zenn.dev, which SKILL.md, the README and the plugin manifest do not mentionimozuru/scripts/watch.py:308High confidence
- Contacts note.com, which SKILL.md, the README and the plugin manifest do not mentionimozuru/scripts/watch.py:310High confidence
- Contacts www.reddit.com, which SKILL.md, the README and the plugin manifest do not mentionimozuru/scripts/watch.py:312High confidence
- Contacts purl.org, which SKILL.md, the README and the plugin manifest do not mentionimozuru/scripts/watch.py:440High confidence
- Contacts search.yahoo.com, which SKILL.md, the README and the plugin manifest do not mentionimozuru/scripts/watch.py:450High confidence
Signal confidence: 166 facts
- Network access in prose of the SKILL.mdimozuru/SKILL.md:74Low confidence
- Network access in prose of the SKILL.mdimozuru/SKILL.md:75Low confidence
- Network access in prose of the SKILL.mdimozuru/SKILL.md:76Low confidence
- Network access in prose of the SKILL.mdimozuru/SKILL.md:206Low confidence
- Network access in prose of the SKILL.mdimozuru/SKILL.md:207Low confidence
- Network access in prose of the SKILL.mdimozuru/SKILL.md:208Low confidence
- Network access in prose of the SKILL.mdimozuru/SKILL.md:275Low confidence
- Network access in prose of documentationimozuru/references/theory.md:10Low confidence
- Network access in prose of documentationimozuru/references/theory.md:11Low confidence
- Network access in prose of documentationimozuru/references/theory.md:12Low confidence
- Network access in prose of documentationimozuru/references/theory.md:13Low confidence
- Network access in prose of documentationimozuru/references/theory.md:14Low confidence
- Network access in prose of documentationimozuru/references/theory.md:15Low confidence
- Network access in prose of documentationimozuru/references/theory.md:16Low confidence
- Network access in prose of documentationimozuru/references/theory.md:17Low confidence
- Network access in prose of documentationimozuru/references/theory.md:18Low confidence
- Network access in prose of documentationimozuru/references/theory.md:19Low confidence
- Network access in prose of documentationimozuru/references/theory.md:20Low confidence
- Executable script in code of a file that runsimozuru/scripts/chain.py:1High confidence
- Network access in code of a file that runsimozuru/scripts/chain.py:26High confidence
- Network access in prose of a file that runsimozuru/scripts/chain.py:38Low confidence
- Network access in code of a file that runsimozuru/scripts/chain.py:56High confidence
- Network access in code of a file that runsimozuru/scripts/chain.py:57High confidence
- Network access in code of a file that runsimozuru/scripts/chain.py:58High confidence
- Executable script in code of a file that runsimozuru/scripts/dashboard.py:1High confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valueimozuru/scripts/dashboard.py:372Low confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valueimozuru/scripts/dashboard.py:457Low confidence
- Network access in code of a file that runsimozuru/scripts/dashboard.py:462High confidence
- Network access in code of a file that runsimozuru/scripts/dashboard.py:463High confidence
- Network access in code of a file that runsimozuru/scripts/dashboard.py:464High confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valueimozuru/scripts/dashboard.py:579Low confidence
- Network access in code of a file that runsimozuru/scripts/dashboard.py:622High confidence
- Access to secrets in code of a file that runs: a variable, placeholder or call, not a stored valueimozuru/scripts/dashboard.py:630Low confidence
- Network access in code of a file that runsimozuru/scripts/dashboard.py:636High confidence
- Network access in code of a file that runsimozuru/scripts/dashboard.py:637High confidence
- Network access in code of a file that runsimozuru/scripts/dashboard.py:638High confidence
- Network access in code of a file that runsimozuru/scripts/dashboard.py:655High confidence
- Network access in code of a file that runsimozuru/scripts/dashboard.py:656High confidence
- Network access in code of a file that runsimozuru/scripts/dashboard.py:657High confidence
- Network access in code of a file that runsimozuru/scripts/dashboard.py:676High confidence
- Network access in code of a file that runsimozuru/scripts/dashboard.py:1406High confidence
- Network access in code of a file that runsimozuru/scripts/dashboard.py:1407High confidence
- Network access in code of a file that runsimozuru/scripts/dashboard.py:1408High confidence
- Network access in code of a file that runsimozuru/scripts/dashboard.py:1719High confidence
- Network access in code of a file that runsimozuru/scripts/dashboard.py:1720High confidence
- Network access in code of a file that runsimozuru/scripts/dashboard.py:1721High confidence
- Network access in code of a file that runsimozuru/scripts/dashboard.py:1728High confidence
- Network access in code of a file that runsimozuru/scripts/dashboard.py:1729High confidence
- Network access in code of a file that runsimozuru/scripts/dashboard.py:1758High confidence
- Network access in code of a file that runsimozuru/scripts/dashboard.py:1759High confidence
and 116 more
Works with
| Agent | Status | Evidence | Install to |
|---|---|---|---|
| Claude Code | Native | Manifest .claude-plugin/marketplace.json | .claude/skills/<skill-name>/ |
| Codex | Compatible | Standard SKILL.md skills/imozuru/SKILL.md | .agents/skills/<skill-name>/ |
| Cursor | Compatible | Standard SKILL.md skills/imozuru/SKILL.md | .cursor/skills/<skill-name>/ |
| Gemini CLI | Compatible | Standard SKILL.md skills/imozuru/SKILL.md | .gemini/skills/<skill-name>/ |
| GitHub Copilot | Compatible | Standard SKILL.md skills/imozuru/SKILL.md | .github/skills/<skill-name>/ |
| OpenCode | Compatible | Standard SKILL.md skills/imozuru/SKILL.md | .opencode/skills/<skill-name>/ |
- Native The repository ships a manifest, folder or frontmatter field for this agent.
- Compatible A standard SKILL.md that this agent can read.
- Unknown No evidence either way.
Derived automatically from paths, manifests and frontmatter. Not tested on each agent.
Explore alternatives and comparisons
Add this badge to your README
It updates every night and links to this page.
[](https://hotskills.dev/skill/marycache-imozuru/)