Generates a curated supplementary reading list from any course syllabus using Consensus academic search.

MITAuto-check passedEducation

Install Syllabus

skills CLI
$ npx skills add alirezarezvani/claude-skills --skill syllabus -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install alirezarezvani/claude-skills syllabus --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/alirezarezvani/claude-skills.git skills-src && mkdir -p .claude/skills && cp -r skills-src/research/syllabus/skills/syllabus .claude/skills/syllabus && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
syllabus
GitHub stars
28k
Used in
1 other repo
Token cost
~3.1k tokens
SKILL.md length
1,200 words
Files
8 (incl. scripts, references)
Skills in repo
342
Repo updated
First seen
Licence
MIT

At a glance

Generates a curated supplementary reading list from any course syllabus using Consensus academic search.

  • Works in 7 steps: Grill-Me Intake (3 forcing questions) → Parse the Syllabus → Group Topics + Confirm with User → …
  • The user uploads a syllabus
  • SKILL.md covers Architectural Pattern: Bundled…, Agent Integrity Rules…, Phase 0: Grill-Me Intake (3… and Phase 1: Parse the Syllabus, plus 9 more sections
  • Runs Python and JavaScript scripts from its folder; calls node, python3 and npm

What it does

Syllabus is an agent skill from alirezarezvani/claude-skills. Generates a curated supplementary reading list from any course syllabus using Consensus academic search. Grill-me intake (syllabus input format + course audience + year range) plus a grouping forcing-options checkpoint before any search runs — so the reading list matches the course's level and recency need. Parses the syllabus to extract topics and learning outcomes, searches Consensus for recent peer-reviewed papers per topic, and produces a professionally formatted .docx with clickable Consensus links…

Its SKILL.md is about 3.1k tokens, which your agent loads only when the skill is triggered. The skill folder holds 9 other files, including scripts and reference files (for example `references/applied_domain_weaving.md`, `references/audience_calibration.md` and `references/bundled_script_pattern.md`).

It sits in Education, covering Curriculum and course design. It works with Microsoft Word. The repository describes itself as: 380 Claude Code skills & agent skills & plugins (30+ Agents, 70+ custom commands, 380+ skills, customizable references, scripts)for Claude Code, Codex, Gemini CLI, Cursor, and 8… The licence is MIT.

When your agent uses it

  • The user uploads a syllabus
  • Curriculum document and wants supplementary readings (e.g.
  • Create a reading list from this syllabus
  • Find recent papers for my course) — even casual mentions with a syllabus attached should trigger this skill

Example prompts

  • “create a reading list from this syllabus”
  • “find recent papers for my course”
  • “Use the syllabus skill to generate a curated supplementary reading list from any course syllabus using Consensus academic search”
  • “/syllabus”

Requirements

  • Python 3
  • Node.js

Workflow steps

7 steps, taken from the step headings in SKILL.md.

  1. Grill-Me Intake (3 forcing questions)
  2. Parse the Syllabus
  3. Group Topics + Confirm with User
  4. Search Consensus per Section
  5. Write Summaries + Discussion Questions
  6. Generate .docx via Bundled Script
  7. Deliver

What it can do on your machine

Read from SKILL.md and the folder at commit 19392f7. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Ships 4 files in scripts/ (Python and JavaScript), which the agent can run.

    Shell commands in SKILL.md call:

    • node
    • python3
    • npm

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    No URLs in SKILL.md. Its commands use npm, which can reach the network depending on how they are called.

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names no API keys, tokens, secrets or passwords.

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Syllabus loads about 3.1k tokens when it runs, and up to ~9.6k if it reads all its reference files. Until then it costs about 230 tokens; SKILL.md has 1,200 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~230
When it runs · the whole SKILL.md, loaded when a task matches
~3.1k
With references · SKILL.md plus every file in references/, read only if the agent opens them
~9.6k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); the scripts in this folder are not scanned.

SKILL.md

The full file from alirezarezvani/claude-skills at commit 19392f7, republished under its MIT licence (© alirezarezvani). 1,200 words, ~3,125 tokens.

Download SKILL.mdSave it as .claude/skills/syllabus/SKILL.md (or your agent's skills folder). This skill also uses 7 other files; get the full folder from GitHub.
name
syllabus
description
Generates a curated supplementary reading list from any course syllabus using Consensus academic search. Grill-me intake (syllabus input format + course audience + year range) plus a grouping forcing-options checkpoint before any search runs — so the reading list matches the course's level and recency need. Parses the syllabus to extract topics and learning outcomes, searches Consensus for recent peer-reviewed papers per topic, and produces a professionally formatted .docx with clickable Consensus links, plain-language summaries calibrated to audience level, and Bloom-higher-order discussion questions tied to course learning goals. Use when the user uploads a syllabus, course outline, or curriculum document and wants supplementary readings (e.g., 'create a reading list from this syllabus', 'find recent papers for my course') — even casual mentions with a syllabus attached should trigger this skill.
license
MIT
metadata.source_spec
megaprompts/10-syllabus-megaprompt.md
metadata.build_pattern
Path B (direct conversion)
metadata.research_pack_convention
Agent Integrity Rules verbatim per PR #657 audit; bundled-JS-DOCX-generator variant
metadata.version
1.0.0

Syllabus — Course Supplementary Reading List

Portability: Requires a Consensus MCP connection, Node.js with docx package, and file reading capability for the syllabus. Works in Claude Code CLI natively. In Claude.ai with Consensus MCP + Code Execution + file upload, the workflow is supported.

For an instructor or student with a course syllabus, produce a professional supplementary reading list as .docx containing recent peer-reviewed papers per course section.

Architectural Pattern: Bundled Script

This skill uses a bundled JavaScript helper script for DOCX generation rather than inlining the 300+ lines of layout code:

  • DOCX generation logic is reusable + complex
  • Better separation of concerns: skill = orchestration + intelligence; script = mechanical document assembly
  • Token-efficient: skill doesn't re-derive layout each run
  • Easier to maintain and version

The bundled script is at scripts/generate_reading_list.js. The skill orchestrates the pipeline + invokes the script with JSON input.

Agent Integrity Rules (Research-Pack Convention)

Locked verbatim per PR #657 audit.

  • Only use what Consensus returns. Every paper title, author, journal, year, URL must come from this session's tool calls. Training-knowledge papers labeled [Not from Consensus — model knowledge] and excluded.
  • Confirm before moving on. A search isn't complete until response received and inspected.
  • Track three counts. Queries sent / papers received / papers cited. Surface in audit summary.
  • Surface gaps, don't fill them. Section with one paper + note about limited results > section padded with fabrications.

Phase 0: Grill-Me Intake (3 forcing questions)

Q1 (root) — Syllabus input

Provide the syllabus — pick one:

  1. File path (PDF, DOCX, text) — I'll read it
  2. Pasted content — paste below
  3. Image of a printed syllabus — attach the image

Why I'm asking: Each format needs a different reader (PDF / DOCX parser / vision). Picking upfront prevents wasted attempts.

Forcing choice. Refuse to start without a syllabus.

Q2 (depends on Q1) — Course audience

Course audience — pick one:

  1. Undergraduate (intro level)
  2. Undergraduate (advanced / upper division)
  3. Graduate (Masters / early PhD)
  4. Graduate (doctoral / advanced)
  5. Professional / continuing education
  6. Mixed

Why I'm asking: Audience dictates summary jargon level and discussion-question complexity. Undergrad summaries define every term; grad summaries assume technical fluency. Discussion questions for undergrads test analysis; for grads test critique and extension.

See references/audience_calibration.md for the canon.

Q3 (depends on Q1) — Year range

Year range for papers — pick one:

  1. Last 1 year (most recent only)
  2. Last 2 years (default — recent + a year of context)
  3. Last 5 years (broader, includes foundational recent work)

Why I'm asking: Reading lists go stale fast. 1-year filters keep things fresh; 5-year filters surface foundational recent work that's already standard. Drives the year_min parameter on every Consensus search.

Forcing choice with default (last 2 years).

Stop condition: 3 questions max before Phase 1. The post-Phase-2 group-and-confirm checkpoint is its own grill-me moment.

Phase 1: Parse the Syllabus

Per Q1 input format:

  • PDF: use PDF reader; extract text
  • DOCX: use pandoc or DOCX parser; extract text
  • Text/pasted: read directly
  • Image: use vision; extract text

From extracted text:

  1. Course title + instructor + term
  2. Topic list (lecture titles, week-by-week breakdown, etc.)
  3. Learning outcomes (if explicit; if missing, infer 3-5 from description)

Mark inferred learning outcomes as [inferred] in the DOCX.

Phase 2: Group Topics + Confirm with User

Group via topic_grouper.py

Use scripts/topic_grouper.py to cluster related topics into 6-12 sections. Heuristic: closely-related topics merge; cross-cutting topics get their own section.

Group-and-Confirm Checkpoint (Forcing Options)

After grouping, present:

Proposed sections: [list with item counts]. Pick one:

  1. "Looks good — proceed with these sections"
  2. "Merge sections [X] and [Y]"
  3. "Split section [X] into two"
  4. "Add a section for [topic]"
  5. "Remove section [X]"

Why I'm asking: Grouping drives search allocation. Wrong grouping wastes the search budget on bad clusters. This is the last cheap moment to correct course before searches consume Consensus calls.

Refuse to start Phase 3 without explicit user choice.

Phase 3: Search Consensus per Section

Sequential, 1 q/sec. 1-2 queries per section.

Applied-Domain Weaving (Critical)

Don't just search the topic — search the topic + applied domain:

❌ Generic✅ Applied-domain
"enzyme kinetics""enzyme kinetics food processing applications"
"machine learning""machine learning clinical decision support"
"thermodynamics""thermodynamics renewable energy systems"
"social network analysis""social network analysis public health interventions"

Boosts paper relevance dramatically. See references/applied_domain_weaving.md for the canon.

Per-Section Pattern
For each section:
  1. Construct query: "{topic-keywords} {applied-domain-angle}" + year_min from Q3
  2. Submit to Consensus (sequential, 1 q/sec gap enforced by citation_tracker)
  3. Receive results
  4. (If thin) submit one fallback query without applied-domain angle
  5. Select 1-3 papers per section (15-25 total across all sections)
Selection Priorities
  1. Relevance — paper directly addresses the section topic
  2. Reviews / meta-analyses — synthesize the field
  3. Citation count — established work
  4. Applied-domain connection — tied to the course's domain (e.g., engineering vs theory)
Show full SKILL.md (474 more words)Show less

Phase 4: Write Summaries + Discussion Questions

Summary writing

Per paper:

  • Plain language (calibrated to audience from Q2)
  • 2-3 sentences
  • Define jargon if undergraduate audience; assume fluency if graduate
Quality bars
✅ Good summary❌ Bad summary
"This review maps how different diets — Mediterranean, Nordic, vegetarian — reshape the types of fat molecules circulating in your blood, with implications for heart disease risk.""This paper reviews lipidomic profiles across dietary interventions and their cardiometabolic implications."
Discussion question writing

Per paper:

  • Bloom higher-order (apply / analyze / evaluate)
  • Tied to a specific course learning outcome
  • Promotes discussion, not just recall
✅ Good question❌ Bad question
"If dietary fat quality can reshape your lipoprotein lipidome, what does this suggest about the biochemical basis for dietary guidelines recommending unsaturated over saturated fats?""What did the authors find?" (Just recall)

Use scripts/discussion_question_validator.py to flag recall-only questions.

Phase 5: Generate .docx via Bundled Script

bash
node scripts/generate_reading_list.js \
  --input /tmp/syllabus_data.json \
  --output /path/to/reading_list_<course>_<date>.docx

The script accepts JSON with this schema:

json
{
  "courseTitle": "string",
  "courseSubtitle": "string",
  "generatedDate": "string",
  "yearRange": "string",
  "introText": "string",
  "learningOutcomes": ["string", ...],
  "sections": [
    {
      "heading": "string",
      "papers": [
        {
          "title": "string",
          "authors": "string",
          "journal": "string",
          "year": number,
          "url": "string",
          "summary": "string",
          "question": "string"
        }
      ]
    }
  ],
  "auditLog": {
    "totalQueriesSent": number,
    "totalPapersReceived": number,
    "totalPapersCited": number,
    "toolConstraints": "string",
    "searchDetails": [
      {
        "section": "string",
        "query": "string",
        "papersReturned": number,
        "papersSelected": number,
        "status": "string"
      }
    ],
    "failures": []
  }
}

The script handles:

  • docx package require with multi-location fallback
  • Title page, intro with Consensus link, learning outcomes box, numbered papers per section
  • ExternalHyperlink with full Consensus URLs (never truncated)
  • LevelFormat.BULLET for lists (not unicode bullets)
  • Footer with generation metadata
  • Input validation (missing fields → graceful error)

See references/bundled_script_pattern.md for why bundled vs inline.

Phase 6: Deliver

  • File path
  • Audit summary in chat: "Saved {file}. {N} sections × {M} papers / {K} cited. Plan tier: {tier}."
  • Validate: check zip integrity with python3 -c "import zipfile,sys; zipfile.ZipFile(sys.argv[1]).testzip()" <docx> (no output = intact), then confirm the required sections are present

Tooling

ScriptRole
scripts/citation_tracker.pyConsensus three-count audit + 1s sequential discipline at ~/.syllabus_sessions/<session>.json
scripts/topic_grouper.pyHeuristic 6-12 section grouping from extracted topics
scripts/discussion_question_validator.pyBloom higher-order quality check; flags recall-only questions
scripts/generate_reading_list.jsBundled Node.js DOCX generator — JSON input → .docx output

References

Error Handling

FailureBehavior
Consensus rate-limit hitWait 3s, retry once, log
Search returns 0 for a sectionNote section as "limited results — consider manual supplementation"
3 consecutive failuresStop, alert user, share collected so far
docx package not installedScript attempts npm install; if still failing, fail with clear message
DOCX validation failsUnpack XML, log issue, ask user to retry
Syllabus format unsupportedList supported formats, ask user to convert
Learning outcomes can't be extractedInfer 3-5 from course description; mark as inferred in document

Anti-Patterns To Reject

  • Parallelizing Consensus calls (rate limit)
  • Searching topics without applied-domain angle (poor relevance)
  • Padding sections with fabricated entries when Consensus returns thin
  • Generic discussion questions ("What did the authors find?")
  • Jargon-heavy summaries unsuitable for the course's audience level
  • Skipping the group-and-confirm step (wastes searches)
  • Truncating Consensus URLs in hyperlinks
  • Inlining 300 lines of docx-generation JavaScript in the skill body (use bundled script)

Version: 1.0.0 Source spec: megaprompts/10-syllabus-megaprompt.md (maintainer-local draft spec — gitignored, not present in the public repository) Build pattern: Path B (direct conversion). Bundled-JS-DOCX-generator variant.

© alirezarezvani, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

SKILL.md and 7 other files (scripts, references) in research/syllabus/skills/syllabus of alirezarezvani/claude-skills.

  • SKILL.md
  • references/applied_domain_weaving.md
  • references/audience_calibration.md
  • references/bundled_script_pattern.md
  • scripts/citation_tracker.py
  • scripts/discussion_question_validator.py
  • scripts/generate_reading_list.js
  • scripts/topic_grouper.py

Open the folder on GitHubat commit 19392f7

Used in 1 other repository

We found 2 copies of this SKILL.md (exact, near-identical or edited) in other folders, from 1 other GitHub owner. This page covers the copy in alirezarezvani/claude-skills, which our catalogue first saw on October 7, 2026.

Compare with similar skills

Syllabus next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Syllabus compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Syllabus this skillalirezarezvani/claude-skills28k1 repos~3.1kAutomated safety check: PassMIT
Knowledge Framework Builderinfometa/workbuddyskills344—~3.8kAutomated safety check: PassNone
AI Engineering Placement Quizrohitg00/ai-engineering-from-scratch66k—~2kAutomated safety check: PassMIT
K-12 Core Literacy Lesson DesignTHU-MAIC/OpenMAIC40k—~2.4kAutomated safety check: PassMIT
AnythingAtlasLiuziyu77/AnythingAtlas195—~3.6kAutomated safety check: PassApache-2.0
Codex Skill Self-AssessmentFlorianBruniaux/claude-code-ultimate-guide6.1k—~2.3kAutomated safety check: PassCC-BY-SA-4.0

Similar skills

  • Knowledge Framework Builder

    infometa/workbuddyskills

    课程知识框架梳理工具 — 把课程主题或教材资料提炼成结构化知识脉络图,支持三档深度输出与多格式导出. An agent skill from infometa/workbuddyskills.

    344 GitHub stars~3.8k tokensUpdated yesterday
    EducationAuto-check passed
  • AI Engineering Placement Quiz

    rohitg00/ai-engineering-from-scratch

    Runs a 10-question quiz across five areas to place a learner in the AI Engineering from Scratch curriculum, so they skip what they already know.

    66k GitHub stars~2k tokensUpdated 2 days ago
    EducationAuto-check passed
  • Designs a Chinese K-12 classroom for one OpenMAIC stage around the core-literacy model, using authentic tasks, performance assessment and observable evidence.

    40k GitHub stars~2.4k tokensUpdated today
    EducationAuto-check passed
  • AnythingAtlas

    Liuziyu77/AnythingAtlas

    Researches an unfamiliar topic and delivers a verified resource guide and a staged, timed learning roadmap as matching Markdown and HTML files.

    195 GitHub stars~3.6k tokensUpdated 1 mo ago
    EducationAuto-check passed
  • Codex Skill Self-Assessment

    FlorianBruniaux/claude-code-ultimate-guide

    Runs an interactive quiz in a quick or comprehensive mode, scores your skill level by topic and generates a personalized learning path with practice projects.

    6.1k GitHub stars~2.3k tokensUpdated yesterday
    EducationAuto-check passed
  • Thesis Creator

    Stars-OC/thesis-creator

    Walks Chinese undergraduates through writing a graduation thesis from topic to Word export, with text-similarity reduction and AI-text rate rewriting and checks.

    228 GitHub stars~2.8k tokensUpdated 4 mo ago
    EducationAuto-check passed

More from alirezarezvani/claude-skills

All 342 skills in this repo
  • Agile Product Owner

    alirezarezvani/claude-skills

    Writes INVEST-checked user stories with acceptance criteria, splits epics, plans sprints from velocity and ranks the backlog with a weighted score.

    28k GitHub starsUsed in 3 repos~3.2k tokens
    Auto-check passed
  • Product Strategist

    alirezarezvani/claude-skills

    OKR cascade toolkit for product leaders: generates aligned company-to-team OKRs from five strategy types and scores how well they line up.

    28k GitHub starsUsed in 2 repos~1.8k tokens
    Auto-check passed
  • App Store Optimization

    alirezarezvani/claude-skills

    App Store Optimization (ASO) toolkit for researching keywords, analyzing competitor rankings, generating metadata suggestions, and improving app visibility on Apple App Store and Google Play Store.

    28k GitHub starsUsed in 1 repo~4.2k tokens
    Auto-check passed
  • AWS Solution Architect

    alirezarezvani/claude-skills

    Design AWS architectures for startups using serverless patterns and IaC templates.

    28k GitHub starsUsed in 1 repo~2.5k tokens
    Auto-check passed
  • Campaign Analytics

    alirezarezvani/claude-skills

    Calculates attribution, funnel and ROI figures for marketing campaigns with three Python scripts that need only the standard library.

    28k GitHub starsUsed in 1 repo~2.1k tokens
    Auto-check passed
  • Code to PRD

    alirezarezvani/claude-skills

    Reverse-engineers a frontend, backend or fullstack codebase into a product requirements document with per-page docs, an enum dictionary and an API inventory.

    28k GitHub starsUsed in 1 repo~4.9k tokens
    Auto-check passed

Works with

Categories

Questions about Syllabus

What does Syllabus do?

Generates a curated supplementary reading list from any course syllabus using Consensus academic search. Syllabus is an agent skill from alirezarezvani/claude-skills. Generates a curated supplementary reading list from any course syllabus using Consensus academic search.

When should I use Syllabus?

Syllabus fits situations like: the user uploads a syllabus; curriculum document and wants supplementary readings (e.g; create a reading list from this syllabus; find recent papers for my course) — even casual mentions with a syllabus attached should trigger this skill.

How do I install Syllabus in Claude Code?

Run `npx skills add alirezarezvani/claude-skills --skill syllabus -a claude-code`. Or copy the skill folder (research/syllabus/skills/syllabus in alirezarezvani/claude-skills) into .claude/skills/syllabus in your project. Claude Code loads it when a task matches its description.

How do I install Syllabus in Codex?

Run `npx skills add alirezarezvani/claude-skills --skill syllabus -a codex`. Or copy the skill folder (research/syllabus/skills/syllabus in alirezarezvani/claude-skills) into .agents/skills/syllabus in your project. Codex loads it when a task matches its description.

Can I use Syllabus in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add alirezarezvani/claude-skills --skill syllabus -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/syllabus, .gemini/skills/syllabus, .github/skills/syllabus and .opencode/skills/syllabus in your project.

What does Syllabus need to run?

Going by SKILL.md and its folder, Syllabus needs Python and JavaScript for the scripts in its folder and the command-line tools its instructions call (node, python3 and npm). Our summary lists: Python 3; Node.js.

Does Syllabus access the network?

SKILL.md contains no URLs. Its commands use npm, which can reach the network depending on how they are called. This is read from the text; nothing was executed.

Is Syllabus safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. The check reads SKILL.md only: the scripts in the folder are not scanned, so read them before running anything.

What licence does Syllabus use?

Syllabus is published under the MIT licence (declared in SKILL.md). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Syllabus use?

About 3.1k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 6.4k tokens, read only when the agent opens those files.

What are the alternatives to Syllabus?

Skills that share tags, products or a category with Syllabus: Knowledge Framework Builder (infometa/workbuddyskills, 344 stars), AI Engineering Placement Quiz (rohitg00/ai-engineering-from-scratch, 66k stars), K-12 Core Literacy Lesson Design (THU-MAIC/OpenMAIC, 40k stars) and AnythingAtlas (Liuziyu77/AnythingAtlas, 195 stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Syllabus?

alirezarezvani (a GitHub user) maintains it in alirezarezvani/claude-skills, which has 27,829 GitHub stars. The repository holds 342 skills in this directory. The repository was last updated on August 30, 2026.

Source: alirezarezvani/claude-skills on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.