From dvar-torah-plugin
Compose a dvar torah, post, or shiur by orchestrating research, analysis, and writing agents. Use when writing a dvar torah, preparing a Torah lecture, or composing a Jewish thought piece.
How this skill is triggered — by the user, by Claude, or both
Slash command
/dvar-torah-plugin:composesonnetThis skill is limited to the following tools:
The summary Claude sees in its skill listing — used to decide when to auto-load this skill
This skill is an **orchestrator** — it dispatches specialized agents in parallel, then feeds results to the writer. It does NOT do research or writing itself.
This skill is an orchestrator — it dispatches specialized agents in parallel, then feeds results to the writer. It does NOT do research or writing itself.
Phase 1 — Research (parallel, haiku)
├── previous-analyzer ← scan output/ for patterns
├── source-researcher ← Sefaria lookups
├── historical-researcher ← if topic.type == "research" or orientation == "modern"
└── source-researcher ← mussar sources (if mussar requested)
Phase 2 — Analysis + Verification (parallel)
├── philosophical-analyzer ← sonnet: deep reasoning with Phase 1 sources
└── source-verifier ← haiku: verify all Phase 1 citations
Phase 3 — Writing (opus)
└── torah-writer ← opus: compose final piece from all results
config:
language: "he" | "en" | "bilingual"
orientation: "philosophy" | "kabbalah" | "hasidut" | "hazal" | "modern" | "custom"
format: "dvar-torah" | "post" | "shiur"
length: "short" | "medium" | "long" | "shiur"
topic:
type: "parsha" | "philosophical" | "research"
value: "..."
sub_topic: "..." | null
thinkers: [...]
context:
type: "birth" | "brit_milah" | "bar_bat_mitzvah" | "wedding" | "shabbat" | "holiday" | "shiva" | "yahrzeit" | "general"
description: "from contexts-guide.md"
previous_patterns:
mode: "avoid" | "base_on"
base_documents: [...]
template_guidance: {...}
include_mussar: true | false
For full thinker profiles, works, and Sefaria references, see
references/thinkers-guide.md. The table below is a quick routing summary only.
| Orientation | Key Thinkers | Primary Sefaria Texts |
|---|---|---|
| philosophy | רמב״ם, רס״ג, רלב״ג, קרשקש, אלבו, ר״י הלוי, אבן עזרא | Guide for the Perplexed, Emunot veDeot, Milhamot HaShem, Or Hashem, Kuzari |
| kabbalah | זוהר, רמ״ק, האר״י, רמח״ל | Zohar, Pardes Rimonim, Etz Chaim, Daat Tevunot |
| hasidut | בעש״ט, מגיד, תניא, ברסלב, קדושת לוי | Tanya, Likkutei Moharan, Keter Shem Tov |
| hazal | תנאים, אמוראים, מדרשים | Talmud Bavli, Jerusalem Talmud, Bereishit Rabbah, Midrash Tanchuma |
| modern | קאופמן, קסוטו, פינס, אלטמן + ANE texts | (historical-researcher agent) |
get_text_or_category_shape(path="Kabbalah")get_text_or_category_shape(path="Chasidut")If the user did not provide full config — invoke wizard skill to collect parameters. Once config is complete, proceed to orchestration.
If topic.type == "parsha" and no specific parsha given:
mcp__claude_ai_Sefaria__get_current_calendar()
# or faster: python scripts/sefaria_api.py get-calendar
Set topic.value from the calendar result.
<use_parallel_tool_calls> If you intend to call multiple tools and there are no dependencies between the tool calls, make all of the independent tool calls in parallel. Prioritize calling tools simultaneously whenever the actions can be done in parallel rather than sequentially. Maximize use of parallel tool calls where possible to increase speed and efficiency. However, if some tool calls depend on previous calls to inform dependent values, do NOT call these tools in parallel.
Agent dispatch pattern:
Launch ALL of these agents in a single message with background: true:
Agent(
subagent_type: "dvar-torah:previous-analyzer",
model: "haiku",
background: true,
prompt: """
MODE: {previous_patterns.mode}
{if mode == "base_on": "SELECTED_FILES: {previous_patterns.base_documents}"}
Scan output/divrei-torah/ and return analysis per your instructions.
"""
)
Agent(
subagent_type: "dvar-torah:source-researcher",
model: "haiku",
background: true,
prompt: """
TOPIC: {topic.value} ({topic.type})
ORIENTATION: {orientation}
THINKERS: {thinkers}
CONTEXT: {context.type}
Search Sefaria for sources relevant to this topic.
IMPORTANT: When the source is Talmudic or has Steinsaltz commentary available,
FIRST read Steinsaltz for pshat understanding:
get_text("Steinsaltz on <reference>")
This gives you the baseline meaning before philosophical analysis.
For orientation={orientation}, focus on:
- philosophy: Guide for the Perplexed, Emunot veDeot, Milhamot HaShem, Or Hashem, Kuzari
- kabbalah: Zohar, Pardes Rimonim, Etz Chaim, Daat Tevunot
- hasidut: Tanya, Likkutei Moharan, Keter Shem Tov
- hazal: Talmud Bavli, Bereishit Rabbah, Midrash Tanchuma
- modern: academic scholarship + ANE parallels
Search at least 3 different books. Find connections between sources.
Return structured YAML with sources, quotes, and sefaria_refs.
"""
)
Only launch if topic.type == "research" OR orientation == "modern":
Agent(
subagent_type: "dvar-torah:historical-researcher",
model: "haiku",
background: true,
prompt: """
TOPIC: {topic.value}
VERSE/TEXT: {topic.sub_topic or topic.value}
Research the historical and cultural context of this text.
Find ANE parallels, archaeological evidence, and classical commentary.
Return structured YAML.
"""
)
Only launch if include_mussar == true:
Agent(
subagent_type: "dvar-torah:source-researcher",
model: "haiku",
background: true,
prompt: """
TOPIC: {topic.value}
ORIENTATION: mussar
TASK: Search ONLY mussar literature for sources related to this topic.
Search in:
- Mesillat Yesharim
- Chovot HaLevavot
- Shaarei Teshuvah
- Shemonah Perakim
Identify which middah/virtue is relevant and find 2-3 mussar sources.
Return structured YAML with sources, quotes, and practical applications.
"""
)
Wait for all Phase 1 agents to complete before proceeding.
Launch BOTH agents in a single message with background: true:
Agent(
subagent_type: "dvar-torah:philosophical-analyzer",
model: "sonnet",
background: true,
prompt: """
TOPIC: {topic.value}
ORIENTATION: {orientation}
THINKERS: {thinkers}
CONTEXT: {context.type}
SOURCES FROM PHASE 1:
{source_researcher_results}
{if historical: "HISTORICAL CONTEXT: {historical_researcher_results}"}
{if mussar: "MUSSAR SOURCES: {mussar_researcher_results}"}
Build a philosophical analysis:
1. Identify the core philosophical question
2. Map each thinker's position using the sources provided
3. Build critical dialogue between positions
4. Synthesize conclusions
If sources are insufficient, you may search Sefaria for additional texts.
Return structured YAML with question, positions, dialogue, synthesis.
"""
)
Agent(
subagent_type: "dvar-torah:source-verifier",
model: "haiku",
background: true,
prompt: """
CITATIONS TO VERIFY:
{all citations from Phase 1 agents}
Verify each citation through Sefaria MCP.
Format all references uniformly.
Build bibliography: תנ״ך → חז״ל → ראשונים → אחרונים → מחקר
"""
)
Wait for both Phase 2 agents to complete.
Launch the writer with ALL collected results:
Agent(
subagent_type: "dvar-torah:torah-writer",
model: "opus",
prompt: """
WRITE a {format} in {language}.
CONFIG:
- Format: {format}
- Length: {length}
- Language: {language}
- Orientation: {orientation}
- Context: {context.type} — {context.description}
- Thinkers: {thinkers}
RESEARCH BUNDLE:
================
PREVIOUS ANALYSIS:
{previous_analyzer_results}
SOURCES:
{source_researcher_results}
{if historical: "HISTORICAL CONTEXT:\n{historical_researcher_results}"}
{if mussar: "MUSSAR:\n{mussar_researcher_results}"}
PHILOSOPHICAL ANALYSIS:
{philosophical_analyzer_results}
VERIFIED CITATIONS:
{source_verifier_results}
{if base_on: "TEMPLATE GUIDANCE (FOLLOW STRICTLY):\n{template_guidance}"}
INSTRUCTIONS:
1. Read references/templates.md for the {format}/{length} template
2. Read references/contexts-guide.md for {context.type} guidance
3. Use ONLY verified citations (status: verified or corrected)
4. Write the complete piece
5. Save to: output/divrei-torah/{format_dir}/YYYY-MM-DD-{topic_slug}.md
6. Include frontmatter with all metadata
"""
)
This agent runs in FOREGROUND — wait for it to complete.
Read references/contexts-guide.md per context.type:
If previous_patterns.mode == "base_on" and template_guidance exists:
template_guidance.strict_instructions to torah-writerFinal output saved by torah-writer to:
output/divrei-torah/
├── dvar-torah/YYYY-MM-DD-<topic>.md
├── posts/YYYY-MM-DD-<topic>.md
└── shiurim/YYYY-MM-DD-<topic>.md
Frontmatter:
---
date: YYYY-MM-DD
format: dvar-torah | post | shiur
length: short | medium | long | shiur
language: he | en | bilingual
orientation: philosophy | kabbalah | hasidut | hazal | modern | custom
context: general | wedding | shabbat | shiva | ...
parsha: שם הפרשה (if relevant)
topic: הנושא
thinkers: [רמב״ם, רס״ג]
sources_count: N
agents_used: [source-researcher, philosophical-analyzer, torah-writer, ...]
---
Research agents use tools in this order:
english_semantic_search — primary discoveryget_links_between_texts — connections & commentaryget_text — exact text (or: python scripts/sefaria_api.py get-text "<ref>")get_text_catalogue_info — metadataget_text_or_category_shape — structureget_topic_details — topic contextsearch_in_book — focused book searchsearch_in_dictionaries — term definitionstext_search — general fallbackThis orchestrator uses only get_current_calendar (Step 1) or python scripts/sefaria_api.py get-calendar.
npx claudepluginhub yodem/dvar-torah-plugin --plugin dvar-torah-pluginComposes full personal essays from structured notes in user's voice using persistent style profile, calibrated to platform and word count.
Prepares anthropology conference materials: abstracts for papers/sessions/roundtables/posters/workshops, slide decks for 15-20min talks, academic posters with visual hierarchy, and speaker notes for oral delivery.
Crafts long-form prose like blog posts, founder essays, build-in-public updates, About pages, and newsletter intros in authentic voice using voice cards, outlines, and anti-AI editing workflow.