jerusalem-council-meetings
Skill2 starsChanged 25 days agoMITView on GitHub
Use when the user wants to browse, list, or download protocols (meeting minutes) from Jerusalem Municipality council committee sittings (ישיבות ועדות מועצת העיר ירושלים). Navigates the official archive at https://www.jerusalem.muni.il/he/city/council/committeesmeetings/, opens a specific committee meeting detail page (CommitteeMeeting?term=<N>&id=<GUID>), pulls the section-by-section agenda outline, and downloads the full protocol PDF linked under פרוטוקול. The site is fronted by Akamai and blocks plain curl/fetch, so this skill drives a real browser (Playwright). Trigger phrases: "Jerusalem city council minutes", "committee meeting protocol", "פרוטוקול ועדה ירושלים", "download Jerusalem municipality sitting", "Jerusalem council meeting agenda", "ישיבת ועדה עיריית ירושלים", "get the protocol PDF for meeting X".
In this repository20 other files it gives its agents.
- add-skill-to-pluginSkill
- ben-gurion-flight-boardSkill
- discover-israel-skillsSkill
- drug-co-il-lookupSkill
- environment-checkSkill
- fiber-availability-checkSkill
- home-front-command-guidelinesSkill
- install-israel-pluginsSkill
- israel-conferencesSkill
- israel-drugs-registry-lookupSkill
- israel-news-rssSkill
- jerusalem-municipality-reportSkill
- kol-zchut-lookupSkill
- list-skillsSkill
- maccabi-medicine-lookupSkill
- medicine-availability-checkSkill
- miklatim-lookupSkill
- nsc-travel-threatSkill
- salary-conversionSkill
- update-plugin-readmeSkill
The file
We split this skill into the rules it gives an agent
4 rules. About 0 are common, 2 are distinctive, and 2 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈2
Distinctive · estimate
This author's own choices. Worth a look.
2
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 22
Geo: not confirmed as strictly IL-geo-restricted — the 403 is bot-detection, not geo.
- Distinctive: line 46
Open the detail page with Playwright: Default to headless Chromium.
- Very specific: line 48
Find the protocol link: Look for an anchor whose visible text contains פרוטוקול (or an href ending in .pdf near that label).
- Very specific: line 49
Download the PDF: Use the same browser context (cookies/session) — page.request.get(pdf_url) in Playwright, or click-and-capture-download.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Jerusalem Municipality — Council Committee Meetings
Access archived committee sittings (ישיבות ועדה) of Jerusalem City Council: list meetings, open a specific meeting's agenda, and download the protocol PDF.
URLs
- Archive / landing page — list of committees and their meetings:
https://www.jerusalem.muni.il/he/city/council/committeesmeetings/ - Single meeting detail page — query-string driven:
https://www.jerusalem.muni.il/he/city/council/CommitteesMeetings/CommitteeMeeting?term=<TERM>&id=<GUID>term— council term number (e.g.17).id— meeting GUID (e.g.85cf59bc-f6d0-f011-bbd3-7ced8d49cdf0).
Access notes
- Akamai edge protection: plain
curl/fetchreturns HTTP 403 ("Access Denied" fromerrors.edgesuite.net) even with a browser User-Agent. Use a real browser — Playwright (headless is usually fine; fall back to headed if Akamai challenges). - Geo: not confirmed as strictly IL-geo-restricted — the 403 is bot-detection, not geo. Treat as tier 2 (remote headless browser) preferred, tier 3 (local Playwright) as fallback.
- Language: Hebrew (RTL). No login required for public protocols.
What to extract from a meeting detail page
From CommitteeMeeting?term=<N>&id=<GUID>:
| Field (HE) | English | Notes |
| שם הוועדה | Committee name | Page heading |
| תאריך הישיבה | Meeting date | Usually near title |
| מספר ישיבה | Meeting number | Within the term |
| סדר יום / נושאים | Agenda / topics | Section-by-section outline — the main body of the page |
| פרוטוקול | Protocol (minutes) | PDF link — the full meeting minutes. Primary artefact this skill downloads. |
| החלטות | Decisions | Sometimes a separate linked doc |
| הקלטה / וידאו | Audio / video recording | If present, link to media |
The agenda outline on the page is the cheap summary; the פרוטוקול PDF is the authoritative record.
Procedure
- Resolve target meeting. User supplies either:
- A full
CommitteeMeeting?term=…&id=…URL, or - A description ("latest finance committee", "planning committee from March 2026") — in which case start at the archive landing page and pick the matching row.
- A full
- Open the detail page with Playwright. Default to headless Chromium. If the page renders "Access Denied" or a challenge, retry headed.
- Extract the agenda — grab the section headings and any bullet items under סדר יום / נושאים. Preserve Hebrew verbatim.
- Find the protocol link. Look for an anchor whose visible text contains
פרוטוקול(or anhrefending in.pdfnear that label). Resolve to an absolute URL. - Download the PDF. Use the same browser context (cookies/session) —
page.request.get(pdf_url)in Playwright, or click-and-capture-download. Save to the user's requested path, defaulting to:~/jerusalem-council-meetings/<term>-<short-id>-<YYYY-MM-DD>.pdf - Report back — committee name, date, meeting number, agenda outline, and the saved PDF path.
Playwright sketch
from playwright.sync_api import sync_playwright
from pathlib import Path
URL = "https://www.jerusalem.muni.il/he/city/council/CommitteesMeetings/CommitteeMeeting?term=17&id=85cf59bc-f6d0-f011-bbd3-7ced8d49cdf0"
with sync_playwright() as p:
browser = p.chromium.launch(headless=True)
ctx = browser.new_context(locale="he-IL")
page = ctx.new_page()
page.goto(URL, wait_until="domcontentloaded")
# Agenda
agenda = page.locator("main").inner_text()
# Protocol PDF — anchor with text containing פרוטוקול, or href ending .pdf
pdf_link = page.locator("a:has-text('פרוטוקול')").first
pdf_url = pdf_link.get_attribute("href")
if pdf_url and pdf_url.startswith("/"):
pdf_url = "https://www.jerusalem.muni.il" + pdf_url
# Download through the browser context so cookies/Akamai tokens are reused
resp = ctx.request.get(pdf_url)
out = Path.home() / "jerusalem-council-meetings" / "17-85cf59bc.pdf"
out.parent.mkdir(parents=True, exist_ok=True)
out.write_bytes(resp.body())
browser.close()Selectors above are best-effort from the described structure — verify on first run and adjust if the markup differs (especially the פרוטוקול anchor and any cookie/consent banner that may intercept clicks).
Output format
Committee: <HE name> (<English gloss if obvious>)
Date: <YYYY-MM-DD>
Term: <N> Meeting #: <M>
Agenda:
1. <section heading>
- <bullet>
- <bullet>
2. ...
Protocol PDF saved to: <absolute path> (<size>, <n> pages)Out of scope
- Solving Akamai CAPTCHA / challenges (if one appears, surface it to the user in a headed browser).
- Parsing the PDF contents — this skill only fetches the file. Combine with a separate PDF-reading step for content extraction.
- Non-committee council outputs (full council votes, budget documents) — those live on other sections of the site.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

