Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
skills-il avatar

Shabbat Aware Scheduler

  • 62 installs
  • 21 repo stars
  • Updated August 3, 2026
  • skills-il/localization

Shabbat-aware Scheduler is an agent skill that integrates Hebcal Shabbat and holiday windows so automations pause and resume at correct candle lighting and Havdalah times.

About

Shabbat-aware Scheduler is a localization skill for solo builders shipping software to Israeli users who must not fire cron jobs, marketing pushes, or support bots during Shabbat and linked holidays. It packages verified Hebcal claims—candle-lighting offsets that vary by city, Havdalah tied to star visibility or fixed-minute customs, and API parameters builders often get wrong—so agents implement schedulers against primary sources instead of hard-coded Friday guesses. Use it when wiring notification windows, SLA timers, or agent reminders that respect religious observance. The skill ties documentation across SKILL.md, Hebrew variants, reference calendars, and a Python checker script, making it a multi-phase companion: integrate during Build, validate timing in Ship testing, and tune live jobs in Operate. It does not replace legal compliance review for every jurisdiction, but it sharply reduces embarrassing Saturday deploys or autoresponders for indie SaaS and internal tools.

  • Documents Hebcal Shabbat times REST behavior with sourced claim IDs in SKILL metadata
  • Default candle lighting 18 minutes before sunset; Jerusalem 40 minutes; Haifa and Zikhron Ya'akov 30 minutes
  • Havdalah defaults to Tzeit HaKochavim (sun 8.5° below horizon) with m=42, m=50, m=72 minute alternatives
  • References Israeli holiday calendar docs and scripts/check_shabbat.py for enforcement
  • Localization-focused skill from skills-il for builders serving Israeli users

Shabbat Aware Scheduler by the numbers

  • 62 all-time installs (skills.sh)
  • Ranked #984 of 2,715 Automation & Workflows skills by installs in the Skillselion catalog
  • Security screen: MEDIUM risk (skills.sh audit)
  • Data as of Aug 4, 2026 (Skillselion catalog sync)
npx skills add https://github.com/skills-il/localization --skill shabbat-aware-scheduler

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs62
repo stars21
Security audit2 / 3 scanners passed
Last updatedAugust 3, 2026
Repositoryskills-il/localization

What it does

Schedule jobs, notifications, and automations around Israeli Shabbat and holidays using Hebcal-accurate candle lighting and Havdalah times.

Who is it for?

SaaS, community apps, and agent automations targeting Israel with real cron, email, or push schedules tied to the Jewish calendar.

Skip if: Products with no Israeli audience, teams unwilling to maintain Hebcal API dependencies, or flows that need rabbinic authority beyond documented API parameters without local review.

When should I use this skill?

User builds or fixes schedulers, crons, or agents that must respect Israeli Shabbat, candle lighting, Havdalah, or holiday blackout windows.

What you get

Your scheduler and agent workflows use documented Hebcal defaults and city offsets, with a check script path to validate windows before production traffic hits forbidden hours.

  • Hebcal-backed Shabbat and holiday window logic in app or agent workflows
  • Validated blackout checks via documented script and reference calendar notes

By the numbers

  • Default candle lighting is 18 minutes before sunset; Jerusalem uses 40 minutes; Haifa and Zikhron Ya'akov use 30 minutes
  • Havdalah minute alternatives documented: m=42, m=50, m=72 (Rabbeinu Tam)

Files

SKILL.mdMarkdownGitHub ↗

Shabbat-Aware Scheduler

Instructions

Step 1: Determine Scheduling Context

ContextKey ConstraintsExamples
Meeting schedulingIsraeli business hours (Sun-Thu), Shabbat, chagim"Schedule a team meeting next week"
Deployment planningNo deploys during Shabbat, chagim, or Erev Chag"When can we deploy this release?"
Event planningHebrew calendar restrictions, venue availability"Plan a product launch event"
Cron/automationSkip Shabbat and holidays for recurring tasks"Run this job daily except Shabbat"
Notification timingDon't send during Shabbat or late hours"Schedule push notification campaign"

Step 2: Get Zmanim and Holiday Data

Use the HebCal API to retrieve Shabbat times and holiday data. See scripts/check_shabbat.py for a ready-to-use utility.

Query HebCal API for Shabbat times:

import requests
from datetime import datetime, timedelta

# Candle-lighting minutes before sunset by city minhag.
# Jerusalem uses 40 min, Haifa and Zikhron Ya'akov use 30 min, elsewhere 18 min.
CANDLE_LIGHTING_MIN = {
    "jerusalem": 40,
    "haifa": 30,
    "zikhron_yaakov": 30,
    "default": 18,
}

def get_shabbat_times(date=None, latitude=31.7683, longitude=35.2137,
                      tzid="Asia/Jerusalem", city="jerusalem"):
    """Get Shabbat candle lighting and havdalah times.
    Default location: Jerusalem (40 min candle-lighting custom).
    """
    if date is None:
        date = datetime.now()

    # Find next Friday
    days_until_friday = (4 - date.weekday()) % 7
    friday = date + timedelta(days=days_until_friday)

    b = CANDLE_LIGHTING_MIN.get(city, CANDLE_LIGHTING_MIN["default"])

    response = requests.get("https://www.hebcal.com/shabbat", params={
        "cfg": "json",
        "gy": friday.year,
        "gm": friday.month,
        "gd": friday.day,
        "latitude": latitude,
        "longitude": longitude,
        "tzid": tzid,
        "b": b,       # Candle lighting min before sunset (city-aware)
        "M": "on",    # Havdalah at Tzeit HaKochavim (sun 8.5 deg below horizon)
        # Alternative: use m=42 / m=50 / m=72 for fixed minutes after sunset
    })

    data = response.json()
    times = {}
    for item in data.get("items", []):
        if item["category"] == "candles":
            times["candle_lighting"] = item["date"]
        elif item["category"] == "havdalah":
            times["havdalah"] = item["date"]

    return times

Get all Israeli holidays for a year:

def get_holidays(year):
    """Get all Israeli holidays for a given year."""
    response = requests.get("https://www.hebcal.com/hebcal", params={
        "v": 1,
        "cfg": "json",
        "year": year,
        "month": "x",  # All months
        "maj": "on",   # Major holidays
        "min": "on",   # Minor holidays
        "mod": "on",   # Modern holidays
        "i": "on",     # Israeli holidays (1-day yom tov)
        "nx": "off",
        "ss": "off"
    })

    data = response.json()
    holidays = []
    for item in data.get("items", []):
        if item["category"] in ["holiday", "roshchodesh"]:
            holidays.append({
                "title": item["title"],
                "date": item["date"],
                "category": item.get("subcat", item["category"]),
                "yomtov": item.get("yomtov", False),
                "memo": item.get("memo", "")
            })

    return holidays

Step 3: Implement Scheduling Logic

Israeli business hours:

DayHoursNotes
Sunday08:00-18:00First day of Israeli workweek
Monday08:00-18:00Regular business day
Tuesday08:00-18:00Regular business day
Wednesday08:00-18:00Regular business day
Thursday08:00-18:00Regular business day
Friday08:00-13:00Half day (closes before Shabbat)
SaturdayClosedShabbat (no business)

Core scheduling function:

from datetime import datetime, timedelta, time
import pytz

IL_TZ = pytz.timezone("Asia/Jerusalem")

BUSINESS_HOURS = {
    6: (time(8, 0), time(18, 0)),  # Sunday
    0: (time(8, 0), time(18, 0)),  # Monday
    1: (time(8, 0), time(18, 0)),  # Tuesday
    2: (time(8, 0), time(18, 0)),  # Wednesday
    3: (time(8, 0), time(18, 0)),  # Thursday
    4: (time(8, 0), time(13, 0)),  # Friday (half day)
    5: None,                        # Saturday (Shabbat)
}

def is_business_day(date, holidays_cache=None):
    """Check if a date is a valid Israeli business day."""
    if date.weekday() == 5:  # Saturday
        return False
    if holidays_cache:
        date_str = date.strftime("%Y-%m-%d")
        for h in holidays_cache:
            if h["date"].startswith(date_str) and h["yomtov"]:
                return False
    return True

Step 4: Holiday-Aware Cron Jobs

def should_run_today(holidays_cache=None, skip_friday=False, skip_erev_chag=False):
    """Determine if a scheduled job should run today."""
    today = datetime.now(IL_TZ).date()

    # Never run on Shabbat
    if today.weekday() == 5:
        return False, "Shabbat"

    # Check holidays
    if holidays_cache:
        date_str = today.strftime("%Y-%m-%d")
        for h in holidays_cache:
            if h["date"].startswith(date_str):
                if h["yomtov"]:
                    return False, f"Yom Tov: {h['title']}"

        # Check if tomorrow is Yom Tov (today is Erev Chag)
        if skip_erev_chag:
            tomorrow = today + timedelta(days=1)
            tomorrow_str = tomorrow.strftime("%Y-%m-%d")
            for h in holidays_cache:
                if h["date"].startswith(tomorrow_str) and h["yomtov"]:
                    return False, f"Erev Chag: {h['title']} tomorrow"

    if skip_friday and today.weekday() == 4:
        return False, "Friday (half day)"

    return True, "Business day"

Step 5: Pre-Holiday and Seasonal Awareness

PeriodDates (approx.)Impact on Scheduling
Erev Shabbat (Friday)Every weekClose by 13:00-15:00 depending on season
Erev Rosh Hashanah~SepBusinesses close by noon
Rosh Hashanah + Yom Kippur seasonTishrei 1-1010 days of reduced availability
Sukkot weekTishrei 15-22Many on vacation, chol ha-moed
Pre-Pesach weekBefore Nisan 15Extremely busy, cleaning/shopping
Pesach weekNisan 15-22Many on vacation, chol ha-moed
Three Weeks (Bein HaMetzarim)17 Tammuz to 9 Av (around Jul-early Aug)No weddings or celebratory events; corporate parties typically deferred
Tisha B'Av9 Av (around late Jul / early Aug)Fast day; many treat as half-day or off
Summer (Jul-Aug)July-AugustSchool vacation, reduced business
Winter ShabbatNov-FebEarly Shabbat (Friday closes earlier)
Summer ShabbatMay-AugLate Shabbat (more Friday availability)

Key 2026 holiday dates to plan around (Israel observance):

HolidayGregorian (around)Workdays lost
PesachApril 1 to April 8, 2026First and seventh days are Yom Tov; middle is chol ha-moed
Yom HaShoahApril 13 to April 14, 2026 (evening to evening)Memorial; entertainment closed
Yom HaZikaronApril 20 to April 21, 2026Memorial; restricted commerce
Yom HaAtzmautApril 21 to April 22, 2026Independence Day; most businesses closed
ShavuotMay 21 to May 22, 2026 (evening to evening)One day Yom Tov in Israel
Tisha B'AvJuly 22 to July 23, 2026 (evening to evening)Fast day
Rosh HashanaSeptember 11 to September 13, 2026Two-day Yom Tov + Shabbat = three-day no-work span
Yom KippurSeptember 20 to September 21, 2026 (evening to evening)Country shuts down
SukkotSeptember 25 to October 2, 2026First and last days Yom Tov; middle is chol ha-moed
Shemini Atzeret / Simchat TorahOctober 2 to October 3, 2026One day in Israel, falls on Friday-Shabbat

Dates verified against Hebcal 2026 (Israeli observance). Always re-check the calendar each year; the Hebrew calendar slides against the Gregorian by 11 to 19 days. In 2026, Yom HaAtzmaut is postponed by one day (nidcheh) because the natural date would have triggered Yom HaZikaron on a problematic day.

Examples

Example 1: Schedule a Meeting

User says: "Schedule a team meeting for next week" Result: Check Israeli business hours (Sun-Thu), verify no chagim, suggest available slots. Avoid Friday unless morning and confirm it is not Erev Chag.

Example 2: Deployment Window

User says: "When is the safest time to deploy this week?" Result: Find a Tuesday or Wednesday slot (mid-week, maximum buffer from Shabbat), during business hours, not before a holiday. Recommend morning deployment for maximum rollback time before Shabbat.

Example 3: Holiday-Aware Cron

User says: "Set up a daily report that skips Shabbat and holidays" Result: Provide cron configuration with should_run_today() check, pre-loaded holiday cache for the year, with logging for skipped days.

Bundled Resources

Scripts

  • scripts/check_shabbat.py: standalone utility to query Shabbat times, Israeli holidays, and business-day status via the HebCal API. Supports checking whether a date is Shabbat/Yom Tov, listing all holidays for a year, and finding the next available Israeli business slot with configurable duration, location, and city minhag. Run: python scripts/check_shabbat.py --help

References

  • references/israeli-holiday-calendar.md: complete Israeli holiday calendar with Hebrew dates, Gregorian approximations, scheduling impact levels (high/medium/low), mourning period restrictions, seasonal Shabbat candle-lighting times by month for Jerusalem, 2026 key dates, and HebCal API endpoint reference. Consult when planning around chagim, determining seasonal Friday closing times, or checking if an event conflicts with a mourning period.

Recommended MCP Servers

For live Hebrew calendar data, pair this skill with:

MCP ServerWhat it providesInstall
hebcalJewish holidays, Shabbat candle lighting times, Havdalah times, Torah readings, and Hebrew-Gregorian date conversion via the official Hebcal APIInstall hebcal

When the hebcal MCP is available, use its tools for accurate Shabbat times and holiday dates instead of hardcoded values. The MCP provides location-aware candle lighting times for any Israeli city.

Offline Libraries

If you cannot reach the Hebcal API at runtime (CI, airgapped, rate-limited at 90 req/10s), use a local library and skip the HTTP call:

LibraryLanguageNotes
@hebcal/coreJavaScript / TypeScriptActively maintained (v6.x as of May 2026). Pure JS, no network. Install: npm i @hebcal/core
pyluachPythonHebrew calendar arithmetic and Hebrew/Gregorian conversion. Stable but low-activity (v2.3.0); fine for date conversion but no built-in candle-lighting times. Pair with a sunset/zmanim library or cache pre-computed times
hebcal-goGoMaintained by the Hebcal team

The deprecated hebcal-js package (NPM hebcal) is the predecessor of @hebcal/core; do not start new work on it.

Gotchas

  • Shabbat candle-lighting differs by city in Israel. Jerusalem uses 40 minutes before sunset, Haifa and Zikhron Ya'akov use 30 minutes, and most other cities use 18 minutes. Using one b= value for all of Israel will under- or over-shoot Friday cutoffs by 10 to 22 minutes. Pass the city-specific offset to the Hebcal API.
  • Israeli holidays (chagim) have different work restrictions than Shabbat. Most holidays are one day in Israel but two days in the diaspora (Rosh Hashana is two days in both). Using a diaspora holiday calendar for Israeli scheduling will block extra workdays that are actually chol ha-moed in Israel.
  • The Hebrew calendar has leap years with an extra month (Adar II), occurring 7 times in a 19-year cycle. Agents may calculate dates using the Gregorian calendar and miss this month entirely.
  • Business hours in Israel run Sunday to Thursday, with Friday a half-day (until early afternoon). Saturday is the weekly rest day, not Sunday. Agents may schedule Friday afternoon meetings or Monday-morning deadlines.
  • Yom HaAtzmaut and Yom HaZikaron can be postponed (nidcheh) when their natural date would conflict with Shabbat. In 2026 the dates shift accordingly. Always trust the Hebcal i=on flag rather than computing Iyar 5 directly.
  • Havdalah default in Hebcal is now Tzeit HaKochavim (sun 8.5 degrees below the horizon, around 40 to 50 minutes after sunset in Israel). Stricter Rabbeinu Tam observers use 72 minutes. Pick the right m= value if your audience is not the default.
  • Yom Kippur is treated as Shabbat for scheduling purposes (full shutdown, including secular businesses, transit, and broadcast media in Israel). Do not deploy or schedule anything inside the 25-hour window.
  • The Three Weeks (17 Tammuz to 9 Av) is a mourning period; weddings, concerts, and corporate celebration events are typically deferred. The Nine Days (1 to 9 Av) is stricter. Treat as a "no launch parties" window even though it is not a Yom Tov.

Troubleshooting

Error: "Meeting scheduled during Shabbat"

Cause: Timezone mismatch, server in UTC, Shabbat times in local Solution: Always convert to Asia/Jerusalem timezone before checking. Shabbat times vary by season and location.

Error: "Holiday not detected"

Cause: Using Gregorian-only calendar without Hebrew date mapping Solution: Use HebCal API which handles Hebrew-Gregorian conversion. Cache holiday data annually and refresh at Rosh Hashanah.

Error: "Friday meeting too late"

Cause: Fixed 17:00 Friday cutoff regardless of season Solution: In winter, Shabbat can start as early as 16:00. Always check actual candle lighting time for the specific Friday.

Error: "Wrong candle-lighting time for Jerusalem"

Cause: Passing b=18 (the Hebcal default) with Jerusalem coordinates instead of the Jerusalem custom of 40 minutes. Solution: Always pass b=40 when the user is in Jerusalem, b=30 for Haifa and Zikhron Ya'akov, b=18 everywhere else. Hebcal exposes the same convention.

Error: "Havdalah time looks off by 8-30 minutes"

Cause: Mixing M=on (Tzeit HaKochavim, sun 8.5 degrees below horizon, around 42 to 50 min after sunset) with a hardcoded "42 minutes" or "72 minutes" assumption. Solution: Pick one method explicitly. Use M=on for the Hebcal default, m=42 for medium stars, m=50 for small stars, or m=72 for the stricter Rabbeinu Tam custom. Document which one your scheduler uses so downstream agents do not double-shift.

Related skills

How it compares

Use instead of naive UTC Friday blocks or static offsets that ignore Jerusalem 40-minute candle lighting and configurable Havdalah modes.

FAQ

Who is shabbat-aware-scheduler for?

Developers and small teams localizing automation, CRM sequences, or agent tasks for Israeli users who observe Shabbat and need API-backed times, not guesses.

When should I use shabbat-aware-scheduler?

Use it in Build when integrating Hebcal into your app; in Ship when testing that jobs suppress during candle lighting through Havdalah; and in Operate when adjusting cron or on-call bots after daylight or location rule changes.

Is shabbat-aware-scheduler safe to install?

Review the Security Audits panel on this Prism page and treat Hebcal API calls and any scheduler scripts as network-facing code you audit before production.

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.