From israel-agent-skills
Use when the user wants to check the next available appointment, book an appointment, or cancel an appointment at an Israel Post branch (דואר ישראל, doar) — e.g. for package pickup (מסירת דואר ללקוח), general counter service (אשנב כל), foreign currency (מטבע חוץ), or vehicle ownership transfer (העברת בעלות רכב). Resolves the target branch by name / city / address against a bundled dataset of 314 booking-capable branches (each with its `branchnumber`), constructs the direct booking URL, and drives the headless Playwright flow. The booking flow requires only a mobile phone number entered twice — no ID (teudat zehut), no SMS OTP, no captcha, no login. Trigger phrases - "book a post office appointment", "kavia tor b-doar", "schedule appointment at doar", "check next post office slot", "is there a post office appointment today", "post office near me with appointments", "cancel my post office appointment", "find the branch number for [post office name]".
npx claudepluginhub danielrosehill/claude-code-plugins --plugin israel-agent-skillsThis skill uses the workspace's default tool permissions.
Three sub-flows:
Mandates invoking relevant skills via tools before any response in coding sessions. Covers access, priorities, and adaptations for Claude Code, Copilot CLI, Gemini CLI.
Share bugs, ideas, or general feedback.
Three sub-flows:
data/branches.json)Bundled dataset of 314 booking-capable branches (Israel Post has ~1,524 branches total; only those with counter-appointment support are shipped here).
Each branch has: branchnumber, branchname, branchtypename, city, street, house, zip, area, region, telephone, geocode_latitude, geocode_longitude, ExtraServices.
Lookup pattern:
branches by city + fuzzy match on branchname / street.branchnumber to construct the booking URL.Do NOT ask the user for the branch number — resolve it from the name or address.
The URL-encoded template is bundled in data/branches.json under booking_url_template. Substitute {branchnumber} with the target branch's branchnumber field. Example:
https://israelpost.co.il/{encoded-hebrew-path}?no=101
Four service types are exposed as buttons on the picker page:
| Service key | Hebrew label | Notes |
|---|---|---|
general | אשנב כל | General counter, up to 10 slips per appointment |
forex | מטבע חוץ | Foreign currency |
package_pickup | מסירת דואר ללקוח | Package / mail pickup — the most common |
vehicle_transfer | העברת בעלות רכב | Vehicle ownership transfer |
Not every branch offers every service — the buttons render per branch.
goto the booking URL with ?no={branchnumber}.role=button[name="סגירה"] (visible text הבנתי)..LeadAppt-services-item).#LeadAppt-datepick-time-dayparts button[data-for="noon"] and button[data-for="afterNoon"]. The .active one is currently shown; the default is the afternoon tab if it has slots.HH:MM, inside the active daypart only.#LeadAppt-datepick-btn-next (fires LeadApptSubmit()).#leadmobilerole=textbox[name="*הקלדה חוזרת של מספר טלפון סלולארי"]פגישתך נקבעה בהצלחה ("your appointment has been successfully booked"). Read back:
0501****76)From the confirmation page:
role=button[name="בטל תור"] on the confirmation card.האם ברצונך לבטל את התור?, buttons בטל תור (confirm) / לא (abort).בטל תור.פגישתך בוטלה בהצלחה. A חזור button closes it.Cross-session cancel by phone lookup is not currently supported by this skill — the cancel button only appears on the in-session confirmation page.
~/.config/israel-agent-skills/preferences.yaml)User values are read from a local, gitignored config — never hardcode in the skill.
israel_post:
default_branch_no: 101 # e.g. 101 = מרכזי ירושלים, יפו 23
default_service: package_pickup # one of: general | forex | package_pickup | vehicle_transfer
default_phone: "05XXXXXXXX" # treated as a secret
If the config is missing or default_phone is absent, the book flow must fail with a clear "run the onboard step first" message rather than prompting or defaulting.
check-next: stop after the daypart/slot tabs render. Extract the first day-tab label + first enabled slot button under the first non-empty daypart. Do not click anything further — avoids any risk of triggering a booking.book: perform the full flow. Require an explicit user confirmation of the summary (branch, service, day/date/time, phone tail digits) before clicking the final continue button. Verify פגישתך נקבעה בהצלחה before reporting success.cancel: run from the confirmation page only. Verify פגישתך בוטלה בהצלחה before reporting success.data/branches.jsonThe bundled dataset can go stale (branches added, renumbered, or decommissioned). Refresh is a maintainer task; the upstream source and refresh script are maintained in the skill's development repo, not in this public plugin. If a branch lookup fails or the dataset is older than ~6 months, flag it to the user rather than silently returning stale data.