Not in the top 1,000 by GitHub stars

bpawnzZ/lemonwrench

A skill for AI coding Agents; Free OEM service manuals -> procedure, torque table, labelled figures. 69 makes, 1960-2025. Agent skill + stdlib navigator.

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

SKILL.md

Week of Nov 2, 2026 · Line counts unavailable

Before Not checked yet → After Network or broad shell

First observation → 39e0e4a73e5e

No earlier version was observed for comparison.

Compare on GitHub

View on GitHubAdd to my skills

Verified commit 39e0e4a73e5ec116c1aa47de4e61021001615a4f

21GitHub stars
0stars in 7 days
1skill in this repository
9commits in 30 days

Heat

1.5
  • Star growth, last 7 daysNot available
  • Star growth, last 24 hoursNot available
  • Rank movement, last 7 daysNot available
  • Commits, last 30 daysNot available
  • Accounts asking about it through MCP, last 7 daysNot available
  • Hot votes this weekNot available

Heat never changes the order by stars, and sponsorship never touches it. How heat works

Stars over time

Oct 25, 2026Oct 27, 202621

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

Individual skills in this repository

How it works

lemonwrench

When your agent uses it

Use when looking up car repair procedures, torque specs, diagrams or service-manual steps. Scrapes free OEM manuals by vehicle, resolves the exact trim/engine, and cross-checks parts catalogs and field sources.

What it loads into context

Frontmatter

127 tokens

Always available to the agent

SKILL.md

4,700 tokens

When the skill is activated

Reference documents

15,635 tokens

Loaded on request

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

The playbook

  1. The three-source rule
  2. The tool
  3. Workflow
  4. Figures
  5. Beyond the manual
  6. User photos of the car
  7. Orientation: engine frame vs car frame
  8. Answering rules
  9. Deliverable
  10. Gotchas
  11. Verify

Scripts executed separately

  • examples/fetch-figures.sh
  • scripts/lemon.py

Files

  • .github/workflows/ci.ymlasset509 bytes
  • .gitignoreasset45 bytes
  • AGENT.mddoc4,150 bytes
  • LICENSEasset1,081 bytes
  • README.mddoc8,698 bytes
  • SKILL.mdcore18,274 bytes
  • SKILL.mdcore18,274 bytes
  • SKILL.mdcore18,274 bytes
  • SKILL.mdcore18,274 bytes
  • SKILL.mdcore18,274 bytes
  • SKILL.mdcore18,274 bytes
  • SKILL.mdcore18,274 bytes
  • examples/2007-pontiac-g6-3.9l-valve-cover-gaskets.mddoc18,408 bytes
  • examples/2011-dodge-nitro-3.7l-drive-belt.mddoc12,695 bytes
  • examples/fetch-figures.shruns591 bytes
  • examples/figures/GC0085898.jpgasset18,533 bytes
  • examples/figures/GC0085899.jpgasset16,171 bytes
  • examples/figures/GC0086435.jpgasset21,499 bytes
  • examples/figures/GC0127923.jpgasset20,001 bytes
  • examples/figures/GM1239042.pngasset14,785 bytes
  • examples/figures/GM1239046.pngasset14,876 bytes
  • examples/figures/GM1239067.pngasset21,355 bytes
  • examples/figures/GM1556824.pngasset12,380 bytes
  • examples/figures/GM1557668.pngasset15,762 bytes
  • examples/figures/GM1557694.pngasset9,442 bytes
  • examples/figures/GM1582009.pngasset7,668 bytes
  • examples/figures/GM1582011.pngasset18,005 bytes
  • examples/figures/GM1582012.pngasset11,269 bytes
  • examples/figures/GM1582091.pngasset10,247 bytes
  • examples/figures/GM1584086.pngasset15,298 bytes
  • examples/figures/GM1584684.pngasset21,901 bytes
  • examples/figures/GM1584686.pngasset15,273 bytes
  • examples/figures/GM1584688.pngasset16,140 bytes
  • examples/figures/GM1587660.pngasset14,458 bytes
  • examples/figures/GM1608911.pngasset17,792 bytes
  • examples/figures/GM1774493.pngasset36,198 bytes
  • examples/figures/GM1776914.pngasset52,579 bytes
  • examples/figures/GM190588.pngasset8,636 bytes
  • openspec/changes/archive/.gitkeepasset0 bytes
  • openspec/changes/archive/2026-10-29-robust-transport-fallback/design.mddoc2,227 bytes
  • openspec/changes/archive/2026-10-29-robust-transport-fallback/proposal.mddoc2,101 bytes
  • openspec/changes/archive/2026-10-29-robust-transport-fallback/specs/transport/spec.mddoc2,065 bytes
  • openspec/changes/archive/2026-10-29-robust-transport-fallback/tasks.mddoc1,156 bytes
  • openspec/config.yamlasset998 bytes
  • openspec/specs/.gitkeepasset0 bytes
  • openspec/specs/transport/spec.mddoc2,165 bytes
  • references/repair-writeup.mddoc4,314 bytes
  • scripts/lemon.pyruns25,660 bytes
Read SKILL.md

# LemonWrench — automotive repair research

Turns "how do I replace X on <car>" into a **procedure, a torque table, and labelled
figures** — then cross-checks it against a parts catalog and real-world field notes
so you don't chase a step the manual left out.

Primary source: **https://lemon-manuals.la** — ~10,000 US/Canada vehicles across **69 makes, 1960–2025**, free, no login. Domestic, import, orphan brands (Pontiac, Oldsmobile, Saturn, Saab, AMC, Geo, Mercury, Suzuki), Euro exotics, trucks/commercial, and modern EVs (Tesla 2012→, Rivian 2022→). Years run deep, not just recent: Toyota and Ford carry 66 straight model years. Real HTML text (torque tables, capacities, step-by-step), figures at `/images25/`. Not scanned PDFs.

Two databases per model year:

| DB | Source | Use it for |
|---|---|---|
| **LEMON** | 2025 capture | 2010+, current TSBs, complete trees, figure captions |
| **CHARM** | 2013 DVDs | 1990s–2000s, finer detail, trees truncated at depth |
View the complete source on GitHub

Skills included

  • lemonwrench

Repository facts

License
MIT
Created
Oct 19, 2026
Last pushed
Oct 29, 2026
Forks
0
Open issues
0
Project activity
Active

Before you install

Network or broad shell

Automated signals, not a guarantee

Checked Nov 6, 2026

Not fully analyzed: some files were too long, unreadable or missing. This never lowers the level.

Show 6 notes
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
  • SKILL.md:1 Analysis incomplete: Referenced executable target unavailable; not analyzed
Show all 132 signals by file

AGENT.md

  • Network accessline 64
    # failover still works: pin a dead host, expect a real page back (~45-90 s) rm -f ~/.cache/lemon/hosts.json LEMON_BASE=https://lemon-manuals.invalid LEMON_NOCACHE=1 python3 scripts/lemon.py get \
  • Dangerous shell operationline 65
    rm -f ~/.cache/lemon/hosts.json
  • Network accessline 65
    rm -f ~/.cache/lemon/hosts.json LEMON_BASE=https://lemon-manuals.invalid LEMON_NOCACHE=1 python3 scripts/lemon.py get \   "/Pontiac/2007/G6%20V6-3.5L/Repair%20and%20Diagnosis/Starting%20and%20Charging/Charging%20System/Alternator/Service%20
  • Network accessline 66
    LEMON_BASE=https://lemon-manuals.invalid LEMON_NOCACHE=1 python3 scripts/lemon.py get \

README.md

  • Network accessline 7
    Named for [lemon-manuals.la](https://lemon-manuals.la), the source it scrapes: ~10,000 US/Canada vehicles, 1960–2025, free, no login. Two databases per year — a 2025 capture (`LEMON`) for modern cars and 2013 DVD dumps (`CHARM`) for 90s/200
  • Network accessline 17
    $ python3 scripts/lemon.py torque "Pontiac/2007/G6 V6-3.9L" valve cover -p 1 ## Valve Rocker Arm Cover Replacement - Left Side https://lemon-manuals.la/Pontiac/2007/G6%20V6-3.9L/.../Valve%20Rocker%20Arm%20Cover%20Replacement%20-%20Left%20Si
  • Network accessline 18
    ## Valve Rocker Arm Cover Replacement - Left Side https://lemon-manuals.la/Pontiac/2007/G6%20V6-3.9L/.../Valve%20Rocker%20Arm%20Cover%20Replacement%20-%20Left%20Side/ Tighten the bolts to 10 N.m (89 lb in).
  • Network accessline 19
    https://lemon-manuals.la/Pontiac/2007/G6%20V6-3.9L/.../Valve%20Rocker%20Arm%20Cover%20Replacement%20-%20Left%20Side/
  • Network accessline 66
    git clone https://github.com/bpawnzZ/lemonwrench.git ~/.myagent/skills/lemonwrench
  • Network accessline 88
    python3 scripts/lemon.py find "Chevrolet/2007/Impala V6-3.9L" generator bracket   # local grep python3 scripts/lemon.py sub  "https://lemon-manuals.la/.../Alternator/"          # reveal children
  • Network accessline 89
    python3 scripts/lemon.py sub  "https://lemon-manuals.la/.../Alternator/"          # reveal children
  • Network accessline 90
    python3 scripts/lemon.py get  "https://lemon-manuals.la/.../Service%20and%20Repair/"
  • Network accessline 100
    python3 scripts/lemon.py pic  https://lemon-manuals.la/images25/GM1557668/
  • Network accessline 101
    python3 scripts/lemon.py note https://lemon-manuals.la/images25/GM1557668/ "right rocker cover: 6-bolt ring, coil bracket above, MAP connector"

SKILL.md

  • Network accessline 20
    Primary source: **https://lemon-manuals.la** — ~10,000 US/Canada vehicles across **69 makes, 1960–2025**, free, no login. Domestic, import, orphan brands (Pontiac, Oldsmobile, Saturn, Saab, AMC, Geo, Mercury, Suzuki), Euro exotics, trucks/c
  • Network accessline 91
    `read`/`get` emit `[FIGURE https://lemon-manuals.la/images25/XXXX/]` lines, with a
  • Network accessline 95
    python3 $S pic https://lemon-manuals.la/images25/GM1557668/   # -> ~/.cache/lemon/img/GM1557668.png
  • Network accessline 97
    python3 $S note https://lemon-manuals.la/images25/GM1557668/ "right rocker cover, bolt ring, coil bracket above"
  • Network accessline 250
    - URLs are case-sensitive and the make spelling is the site's (`Dodge and Ram`,   `Mercedes Benz`); `canon_make` handles it, manual curl does not.
  • Network accessline 251
    `Mercedes Benz`); `canon_make` handles it, manual curl does not.
  • Network accessline 260
    - Mirrors: `charm.li` (Operation CHARM — separate host *and* corpus, tried second),   then `lemon-manuals.org.ua`, `lemon-manuals.gy`, `lemon.dogeware.me`. The script   fails over automatically on a timeout, 404 or 429/5xx; `LEMON_BASE=http
  • Network accessline 261
    then `lemon-manuals.org.ua`, `lemon-manuals.gy`, `lemon.dogeware.me`. The script   fails over automatically on a timeout, 404 or 429/5xx; `LEMON_BASE=https://…` puts   one host first without disabling the rest.
  • Network accessline 262
    fails over automatically on a timeout, 404 or 429/5xx; `LEMON_BASE=https://…` puts
  • Network accessline 264
    - **A reply that isn't a page is a failed host, not an answer.** 404 bodies and   Cloudflare challenge pages become `NotFound`/`Blocked` inside `_get()`, are skipped   per host, and are never written to the page cache. `fetch()` only return
  • Network accessline 265
    Cloudflare challenge pages become `NotFound`/`Blocked` inside `_get()`, are skipped   per host, and are never written to the page cache. `fetch()` only returns the   `Page Not Found` sentinel when *every* host 404s — before 2.2 the first ho
  • Network accessline 266
    per host, and are never written to the page cache. `fetch()` only returns the
  • Network accessline 273
    before a host loses its turn, so a slow host that keeps sending bytes is never cut   off. - If every host errors, `fetch()` tries an Internet Archive snapshot
  • Network accessline 274
    off. - If every host errors, `fetch()` tries an Internet Archive snapshot   (`archive.org/wayback/available`, fetched with the `if_` modifier). archive.org
  • Network accessline 275
    - If every host errors, `fetch()` tries an Internet Archive snapshot
  • Network accessline 281
    path and no 2010+ manuals — a 404 from it is normal and costs one round trip.   When `index` is crawling at a few KB/s, don't wait it out: `get` the charm.li tree   (`http://charm.li/<Make>/<Year>/<Vehicle>/Repair and Diagnosis/`, ~2.9 MB i
  • Network accessline 282
    When `index` is crawling at a few KB/s, don't wait it out: `get` the charm.li tree   (`http://charm.li/<Make>/<Year>/<Vehicle>/Repair and Diagnosis/`, ~2.9 MB in   seconds) and grep it locally, then fetch only the winning pages by their abs
  • Network accessline 283
    (`http://charm.li/<Make>/<Year>/<Vehicle>/Repair and Diagnosis/`, ~2.9 MB in   seconds) and grep it locally, then fetch only the winning pages by their absolute   URLs.

examples/fetch-figures.sh

  • Executable scriptline 1
    #!/usr/bin/env bash
  • Network accessline 11
    | sed 's|figures/||' | sort -u | while read -r file; do     id="${file%.*}"     path=$(python3 "$LEMON" pic "https://lemon-manuals.la/images25/$id/" | tail -1)
  • Network accessline 12
    id="${file%.*}"     path=$(python3 "$LEMON" pic "https://lemon-manuals.la/images25/$id/" | tail -1)     cp "$path" "figures/$file"
  • Network accessline 13
    path=$(python3 "$LEMON" pic "https://lemon-manuals.la/images25/$id/" | tail -1)

openspec/changes/archive/2026-10-29-robust-transport-fallback/design.md

  • Network accessline 5
    Every request in the script already goes through `fetch()`, and every URL is
  • Network accessline 28
    cached for 7 days. Both now raise inside `_get()`, are skipped per host, and are never written to the page cache. Callers that already test for `Page Not Found` in the body keep working: `fetch()` returns that sentinel only
  • Network accessline 29
    never written to the page cache. Callers that already test for `Page Not Found` in the body keep working: `fetch()` returns that sentinel only when every host 404s.
  • Network accessline 30
    `Page Not Found` in the body keep working: `fetch()` returns that sentinel only

openspec/changes/archive/2026-10-29-robust-transport-fallback/proposal.md

  • Network accessline 5
    `fetch()` walks a fixed mirror list and treats the *first* host that answers
  • Network accessline 24
    - Add `http://charm.li` (Operation CHARM, the upstream of LEMON's CHARM set) to

openspec/changes/archive/2026-10-29-robust-transport-fallback/tasks.md

  • Network accessline 5
    - [x] 1.1 Add `http://charm.li` to the mirror list.
  • Network accessline 8
    - [x] 1.3 Raise on 404 and on Cloudflare challenge bodies inside `_get()`; treat       both as "this host is no use for this page". - [x] 1.4 `fetch()`: only return the `Page Not Found` sentinel when **every**
  • Network accessline 9
    both as "this host is no use for this page". - [x] 1.4 `fetch()`: only return the `Page Not Found` sentinel when **every**       host 404s; never cache a 404 or a challenge page.
  • Network accessline 10
    - [x] 1.4 `fetch()`: only return the `Page Not Found` sentinel when **every**

scripts/lemon.py

  • Executable scriptline 1
    #!/usr/bin/env python3
  • Network accessline 25
    [Credential-related source omitted]
  • Access to secretsline 25
    [Credential-related source omitted]
  • Network accessline 26
    MIRRORS = ["https://lemon-manuals.la",
  • Network accessline 27
    "http://charm.li",              # Operation CHARM: separate host + corpus
  • Network accessline 28
    "https://lemon-manuals.org.ua", "https://lemon-manuals.gy",
  • Network accessline 29
    "https://lemon.dogeware.me"]
  • Access to secretsline 33
    [Credential-related source omitted]
  • Access to secretsline 34
    [Credential-related source omitted]
  • Network accessline 37
    HOSTS = os.path.join(CACHE, "hosts.json")   # sticky host + cooldowns DOWN_FOR = 900                              # a failed host sorts last for 15 min WAYBACK = "https://archive.org/wayback/available?url="
  • Network accessline 38
    DOWN_FOR = 900                              # a failed host sorts last for 15 min WAYBACK = "https://archive.org/wayback/available?url=" CHALLENGE = "cdn-cgi/challenge-platform"    # Cloudflare JS wall, not a page
  • Network accessline 39
    WAYBACK = "https://archive.org/wayback/available?url="
  • Access to secretsline 42
    [Credential-related source omitted]
  • Access to secretsline 91
    [Credential-related source omitted]
  • Network accessline 121
    def _get(url, timeout):     req = urllib.request.Request(url, headers={"User-Agent": UA})
  • Network accessline 122
    req = urllib.request.Request(url, headers={"User-Agent": UA})
  • Network accessline 123
    try:         with urllib.request.urlopen(req, timeout=timeout, context=_ctx()) as r:             body = r.read().decode("utf-8", "replace")
  • Network accessline 124
    with urllib.request.urlopen(req, timeout=timeout, context=_ctx()) as r:
  • Network accessline 164
    try:         q = urllib.request.Request(WAYBACK + urllib.parse.quote(url, safe=""),
  • Network accessline 165
    q = urllib.request.Request(WAYBACK + urllib.parse.quote(url, safe=""),
  • Network accessline 166
    headers={"User-Agent": UA})         with urllib.request.urlopen(q, timeout=30, context=_ctx()) as r:             snap = json.load(r).get("archived_snapshots", {}).get("closest") or {}
  • Network accessline 167
    with urllib.request.urlopen(q, timeout=30, context=_ctx()) as r:
  • Network accessline 169
    if snap.get("status") != "200" or not snap.get("url"):             return None         with urllib.request.urlopen(
  • Network accessline 170
    return None         with urllib.request.urlopen(                 urllib.request.Request(_if_raw(snap["url"]), headers={"User-Agent": UA}),
  • Network accessline 171
    with urllib.request.urlopen(
  • Network accessline 172
    urllib.request.Request(_if_raw(snap["url"]), headers={"User-Agent": UA}),
  • Network accessline 179
    def fetch(url, timeout=None, nocache=False):
  • Network accessline 235
    names = open(path, encoding="utf-8").read().split("\n")     else:         body = fetch(BASE + "/")
  • Network accessline 236
    else:         body = fetch(BASE + "/")         names = [urllib.parse.unquote(u[len(BASE) + 1:].strip("/"))
  • Network accessline 237
    body = fetch(BASE + "/")
  • Network accessline 310
    v + "Repair%20and%20Diagnosis/"):         try:             body = fetch(BASE + urllib.parse.quote(cand, safe="/%"), nocache=refresh)
  • Network accessline 311
    try:             body = fetch(BASE + urllib.parse.quote(cand, safe="/%"), nocache=refresh)         except Exception:
  • Network accessline 312
    body = fetch(BASE + urllib.parse.quote(cand, safe="/%"), nocache=refresh)
  • Network accessline 322
    try:         lt = BASE + v + "Labor%20Times/"         body = fetch(lt, nocache=refresh)
  • Network accessline 323
    lt = BASE + v + "Labor%20Times/"         body = fetch(lt, nocache=refresh)         if "Page Not Found" not in body[:600] and "Labor times are only available" not in body:
  • Network accessline 324
    body = fetch(lt, nocache=refresh)
  • Network accessline 369
    def render(url, body=None):     body = body if body is not None else fetch(url)
  • Network accessline 370
    body = body if body is not None else fetch(url)
  • Network accessline 388
    body = fetch(url)
  • Network accessline 470
    continue         seen.add(label)         body = fetch(url)
  • Network accessline 471
    seen.add(label)         body = fetch(url)         lines, target = torque_lines(text_of(body)), (url, label)
  • Network accessline 472
    body = fetch(url)
  • Network accessline 474
    for sub_url, sub_label in ([] if lines else sublinks(url, body)[:4]):             if not lines:                 lines, target = (torque_lines(text_of(fetch(sub_url))),
  • Network accessline 475
    if not lines:                 lines, target = (torque_lines(text_of(fetch(sub_url))),                                  (sub_url, sub_label))
  • Network accessline 476
    lines, target = (torque_lines(text_of(fetch(sub_url))),
  • Network accessline 492
    '<li><a href="X/">X</a></li><img alt="a" src="/images25/A/">'          '<img src="/icons/wrench.svg">')     assert imgs_of(h) == ["https://lemon-manuals.la/images25/A/"]
  • Network accessline 493
    '<img src="/icons/wrench.svg">')     assert imgs_of(h) == ["https://lemon-manuals.la/images25/A/"]     assert "LEMON Manuals" not in text_of(h) and "X" in text_of(h)
  • Network accessline 494
    assert imgs_of(h) == ["https://lemon-manuals.la/images25/A/"]
  • Network accessline 496
    assert score("Torque Specifications", "/v/x/Torque/", ["torque"], 1) is not None     assert score("Torque", "/v/x/Y/", ["brake"], 1) is None     assert _swap_base("https://lemon-manuals.la/v/x/", "https://lemon.dogeware.me") \
  • Network accessline 497
    assert score("Torque", "/v/x/Y/", ["brake"], 1) is None     assert _swap_base("https://lemon-manuals.la/v/x/", "https://lemon.dogeware.me") \         == "https://lemon.dogeware.me/v/x/"
  • Network accessline 498
    assert _swap_base("https://lemon-manuals.la/v/x/", "https://lemon.dogeware.me") \
  • Network accessline 499
    == "https://lemon.dogeware.me/v/x/"
  • Network accessline 501
    assert "http://charm.li" in _bases()
  • Network accessline 502
    assert _swap_base("http://charm.li/v/x/", "https://lemon-manuals.la") \
  • Network accessline 503
    == "https://lemon-manuals.la/v/x/"
  • Network accessline 504
    assert _ours("http://charm.li/v/x/")
  • Network accessline 510
    global _ST     _ST = {"prefer": "http://charm.li", "down": {"https://lemon-manuals.la": time.time() + 60}}
  • Network accessline 511
    _ST = {"prefer": "http://charm.li", "down": {"https://lemon-manuals.la": time.time() + 60}}
  • Network accessline 512
    [Credential-related source omitted]
  • Access to secretsline 512
    [Credential-related source omitted]
  • Network accessline 513
    b = _bases()         assert b[0] == "http://charm.li" and b[-1] == "https://lemon-manuals.la", b     _ST = {}
  • Network accessline 514
    assert b[0] == "http://charm.li" and b[-1] == "https://lemon-manuals.la", b
  • Network accessline 515
    _ST = {}     assert "http://charm.li" in imgs_of('<img src="/images/X/1/">', "http://charm.li/p/")[0]     assert _if_raw("http://web.archive.org/web/20190101/https://x/y/") \
  • Network accessline 516
    assert "http://charm.li" in imgs_of('<img src="/images/X/1/">', "http://charm.li/p/")[0]
  • Network accessline 517
    assert _if_raw("http://web.archive.org/web/20190101/https://x/y/") \
  • Network accessline 518
    == "http://web.archive.org/web/20190101/if_/https://x/y/"
  • Network accessline 519
    assert _if_raw("http://web.archive.org/web/20190101/http://x/y/") \
  • Network accessline 520
    == "http://web.archive.org/web/20190101/if_/http://x/y/"
  • Network accessline 525
    assert len(torque_lines(t)) == 2, torque_lines(t)     assert torque_lines("no numbers here at all") == []     b = "https://lemon-manuals.la/v/x/"
  • Network accessline 526
    assert torque_lines("no numbers here at all") == []     b = "https://lemon-manuals.la/v/x/"     assert [u for u, _ in sublinks(b, '<a href="y/">Y</a><a href="/v/x/">self</a>')] == [b + "y/"]
  • Network accessline 527
    b = "https://lemon-manuals.la/v/x/"
  • Network accessline 541
    elif cmd == "years":         make = urllib.parse.quote(canon_make(args[0]), safe="/%")         for u, label in links(BASE + f"/{make}/", fetch(BASE + f"/{make}/")):
  • Network accessline 542
    make = urllib.parse.quote(canon_make(args[0]), safe="/%")         for u, label in links(BASE + f"/{make}/", fetch(BASE + f"/{make}/")):             if re.fullmatch(r"\d{4}", label):
  • Network accessline 543
    for u, label in links(BASE + f"/{make}/", fetch(BASE + f"/{make}/")):
  • Network accessline 548
    pat = re.compile(args[2], re.I) if len(args) > 2 else None         url = BASE + f"/{make}/{year}/"         body = fetch(url)
  • Network accessline 550
    body = fetch(url)
  • Network accessline 607
    print(render(args[0]))     elif cmd == "sub":         body = fetch(args[0])
  • Network accessline 608
    elif cmd == "sub":         body = fetch(args[0])         for u, l in sublinks(args[0], body):
  • Network accessline 609
    body = fetch(args[0])
  • Network accessline 611
    print(f"{u}\t{l}")     elif cmd == "imgs":         print("\n".join(imgs_of(fetch(args[0]), args[0])))
  • Network accessline 612
    elif cmd == "imgs":         print("\n".join(imgs_of(fetch(args[0]), args[0])))     elif cmd == "pic":
  • Network accessline 613
    print("\n".join(imgs_of(fetch(args[0]), args[0])))
  • Network accessline 615
    u = args[0]         os.makedirs(IMG_DIR, exist_ok=True)         req = urllib.request.Request(u, headers={"User-Agent": UA})
  • Network accessline 616
    os.makedirs(IMG_DIR, exist_ok=True)         req = urllib.request.Request(u, headers={"User-Agent": UA})         with urllib.request.urlopen(req, timeout=120, context=_ctx()) as r:
  • Network accessline 617
    req = urllib.request.Request(u, headers={"User-Agent": UA})
  • Network accessline 618
    with urllib.request.urlopen(req, timeout=120, context=_ctx()) as r:

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.

Signal confidence: 132 facts

and 82 more

Works with

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