#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.

Compare on GitHub

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.

Compare on GitHub

View on GitHubAdd to my skills

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>/
1.4kGitHub stars
46stars in 7 days
1skill in this repository
81commits in 30 days

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

Oct 11, 2026Nov 6, 20261,434

30-day change not yet available: not enough history.

Individual skills in this repository

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 tokens

Always available to the agent

SKILL.md

12,958 tokens

When the skill is activated

Reference documents

2,031 tokens

Loaded on request

Token counts are estimates. Scripts run separately; they are not counted as reference context.

The playbook

  1. なぜこの形か(先に読む)
  2. 置き場
  3. 検索役のサブエージェント
  4. 流れ
  5. 見張る(watch モード)
  6. map.md の書式
  7. 道具
  8. 境界

Scripts executed separately

  • scripts/chain.py
  • scripts/dashboard.py
  • scripts/digest.py
  • scripts/fetch.py
  • scripts/make_guide_shots.py
  • scripts/make_textures.py
  • scripts/palette.py
  • scripts/report.py
  • scripts/skin.py
  • scripts/watch.py

Files

  • ../../.claude-plugin/marketplace.jsonasset617 bytes
  • ../../.claude-plugin/plugin.jsonasset484 bytes
  • SKILL.mdcore44,407 bytes
  • assets/apple-touch-icon.pngasset14,034 bytes
  • assets/cork.pngasset51,288 bytes
  • assets/favicon.pngasset4,443 bytes
  • assets/guide-pc-doc.webpasset34,310 bytes
  • assets/guide-pc-home.webpasset16,360 bytes
  • assets/guide-pc-side.webpasset46,196 bytes
  • assets/guide-pc-topic.webpasset35,516 bytes
  • assets/guide-sp-doc.webpasset19,040 bytes
  • assets/guide-sp-home.webpasset6,754 bytes
  • assets/guide-sp-side.webpasset10,570 bytes
  • assets/guide-sp-topic.webpasset17,722 bytes
  • assets/icon-192.pngasset15,207 bytes
  • assets/icon-512.pngasset51,053 bytes
  • assets/logo-light.svgasset59,864 bytes
  • assets/logo.svgasset59,864 bytes
  • assets/paper.pngasset28,128 bytes
  • references/theory.mddoc6,341 bytes
  • scripts/chain.pyruns12,568 bytes
  • scripts/dashboard.pyruns199,426 bytes
  • scripts/digest.pyruns25,468 bytes
  • scripts/fetch.pyruns70,289 bytes
  • scripts/make_guide_shots.pyruns13,483 bytes
  • scripts/make_textures.pyruns4,626 bytes
  • scripts/palette.pyruns6,863 bytes
  • scripts/report.pyruns23,993 bytes
  • scripts/skin.pyruns21,573 bytes
  • scripts/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 GitHub

Skills 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

  1. #671 from Oct 30 to Oct 31
  2. #669 on Nov 1
  3. #668 on Nov 2
  4. #672 on Nov 3
  5. #670 on Nov 4
  6. #668 since Nov 5
16 earlier periods
  1. #946 on Oct 11
  2. #971 on Oct 13
  3. #990 on Oct 14
  4. #972 on Oct 15
  5. #978 on Oct 16
  6. #955 on Oct 17
  7. #930 on Oct 18
  8. #807 on Oct 19
  9. #750 on Oct 20
  10. #736 on Oct 21
  11. #689 on Oct 22
  12. #666 on Oct 23
  13. #634 on Oct 24
  14. #712 on Oct 25
  15. #677 on Oct 28
  16. #673 on Oct 29

Before you install

Network or broad shell

Automated 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:1 Analysis incomplete: physical or joined line exceeds character limit
  • skills/imozuru/assets/logo.svg:1 Analysis incomplete: physical or joined line exceeds character limit
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://&lt;PC の名前&gt;.&lt;tailnet&gt;.ts.net/?k=&lt;合言葉&gt;</code> を開きます</li>"              "
  • Network accessline 2007
    "<li>スマホで <code>https://&lt;PC の名前&gt;.&lt;tailnet&gt;.ts.net/?k=&lt;合言葉&gt;</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
Signal confidence: 166 facts

and 116 more

Works with

Agent compatibility, from the files in this repository
AgentStatusEvidenceInstall to
Claude CodeNativeManifest .claude-plugin/marketplace.json.claude/skills/<skill-name>/
CodexCompatibleStandard SKILL.md skills/imozuru/SKILL.md.agents/skills/<skill-name>/
CursorCompatibleStandard SKILL.md skills/imozuru/SKILL.md.cursor/skills/<skill-name>/
Gemini CLICompatibleStandard SKILL.md skills/imozuru/SKILL.md.gemini/skills/<skill-name>/
GitHub CopilotCompatibleStandard SKILL.md skills/imozuru/SKILL.md.github/skills/<skill-name>/
OpenCodeCompatibleStandard 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.

MaryCache/imozuru: #668 on hotskills, 1.4k stars

[![MaryCache/imozuru on hotskills](https://hotskills.dev/badge/marycache-imozuru.svg)](https://hotskills.dev/skill/marycache-imozuru/)