Surfaces actionable Wilma updates and keeps school exams and events aligned with Google Calendar.
Coding
wilma
Retrieve schedules, homework, grades, attendance notes, messages, and news from Wilma as JSON.
What it does
Retrieve student updates from Finland’s Wilma system through the `wilma`/`wilmai` CLI in non-interactive JSON mode. Get daily summaries, schedules, homework, exams, grades, lesson notes, messages, and news for one or all students. Read bulletin resources and attempt authenticated or isolated downloads while reporting files, web pages, and errors distinctly.
When to use it
- Preparing a parent’s daily school briefing
- Checking upcoming homework and exams
- Reviewing attendance and lesson notes
- Downloading resources linked from school news
The skill document
Wilma Skill
Overview
Wilma is the Finnish school information system used by schools and municipalities to share messages, news, exams, schedules, homework, and other student-related updates with parents/guardians.
Use the wilma / wilmai CLI in non-interactive mode to retrieve Wilma data for AI agents. Prefer --json outputs and avoid interactive prompts.
Quick start
Install
npm i -g @wilm-ai/wilma-cli
- Ensure the user has run the interactive CLI once to create
~/.config/wilmai/config.json. - Use non-interactive commands with
--json.
Core tasks
Daily briefing (start here)
wilma summary --student --json
wilma summary --all-students --json
Returns today's and tomorrow's schedule, upcoming exams, recent homework, recent news, and recent messages in one call. This is the best starting point for any parent-facing summary.
Schedule
wilma schedule list --when today --student --json
wilma schedule list --when tomorrow --student --json
wilma schedule list --when week --student --json
wilma schedule list --date 2026-03-10 --student --json
wilma schedule list --weekday thu --student --json
--weekday also accepts Finnish short forms: ma, ti, ke, to, pe, la, su. Use --date or --weekday, not both.
Homework
wilma homework list --student --json
Upcoming exams
wilma exams list --student --json
Exam grades
wilma grades list --student --json
Attendance / lesson notes (merkinnät)
wilma attendance list --student --json
wilma attendance list --date 2026-03-10 --student --json
wilma attendance list --all-students --json
Returns Wilma's per-lesson notes ("merkinnät") for a single day: positive feedback, behavioral remarks, missing materials, and absence categorizations (medical, explained, unexplained). Defaults to today if --date is omitted; teachers usually fill notes during or after class, so for a morning agent run prefer --date .
Each note has start/end times derived from Wilma's hour-grid headers — accurate to the lesson hour, with 45-minute period assumed. subject is the Wilma course code (e.g. MA_8LV = math, 8th grade), and typeLabel is the human-readable Finnish reason or remark.
List students
wilma kids list --json
News and messages
wilma news list --student --json
wilma news read --student --json
wilma messages list --student --folder inbox --json
wilma messages read --student --json
News resources and attachments
Always inspect the resources array returned by wilma news read --json. Each resource has:
id— stable within the bulletin (resource-1,resource-2, …); the download command also accepts the bare number (1).label— the link text from the bulletin.url— absolute URL.authContext—"wilma": a download uses the authenticated Wilma session."external": a download uses an isolated, unauthenticated fetch that never sends Wilma credentials (like opening the link in a signed-out browser).fileName— naming hint when the URL path looks like a file; may be null even for real files.
Any resource can be attempted with the download command. There is no reliable way to know in advance whether a URL serves a file publicly, requires sign-in, or is a plain web page — so the CLI does not guess: it attempts the download and reports what actually happened. When a document is relevant to the user's request, attempt it:
wilma news resource download --student --output --json
Handle the returned status:
downloaded— the file was written. Use the returned absolutepath, and trustcontentType/sizeBytesover any guess from the bulletin label.not_a_file— every attempt answered with a web page instead of a file. This usually means the document requires signing in (for example a private SharePoint or OneDrive sharing link), or the link is simply a web page. Report this to the user; if access matters, open theurlin a user-authorized browser session that has the external service's authentication. Never retry the download in a loop.error(exit code 1) — the attempt itself failed (HTTP error, network problem, size limit). Report themessage.
Keep downloads in a task-scoped directory via --output (defaults to the current working directory). Existing files are never overwritten — a numeric suffix is appended.
Prefer resource metadata over URLs embedded in content; content is prose and can be null for link-only bulletins.
Fetch data for all students
All list commands support --all-students:
wilma summary --all-students --json
wilma homework list --all-students --json
wilma exams list --all-students --json
You can also pass a name fragment for --student (fuzzy match).
MFA (Multi-Factor Authentication)
If the Wilma account has MFA/TOTP enabled:
Interactive setup (recommended): Run wilma interactively. When MFA is detected, choose "Save TOTP secret for automatic login" and paste your TOTP secret or otpauth:// URI. Future logins will auto-authenticate.
Non-interactive (one-off): Pass the TOTP secret directly:
wilma schedule list --totp-secret --student "Stella" --json
wilma schedule list --totp-secret 'otpauth://totp/...' --student "Stella" --json
If the TOTP secret has been saved via interactive setup, --totp-secret is not needed — the CLI auto-authenticates from the stored config.
Notes
- If no
--studentis provided, the CLI uses the last selected student from~/.config/wilmai/config.json(or$XDG_CONFIG_HOME/wilmai/config.json). - If multiple students exist and no default is set, the CLI will print a helpful error with the list of students.
- When the account has multiple students,
--studentis required for read commands. - If auth expires or the CLI says no saved profile, re-run
wilmainteractively or usewilma config clearto reset. - Run
wilma updateto update the CLI to the latest version.
Actionability guidance (for parents)
Wilma contains a mix of urgent items and general info. When summarizing for parents, prioritize actionable items:
Include items that:
- Require action or preparation (forms, replies, permissions, materials to bring).
- Announce a deadline or time-specific requirement.
- Describe a schedule deviation or noteworthy event (trips, themed days, school closures, exams).
- Mention homework, exams, or upcoming deadlines.
De-prioritize items that:
- Are purely informational with no action, deadline, or schedule impact.
- Are generic announcements unrelated to the target period.
When in doubt, include and let the parent decide. Prefer a short, structured summary with dates and IDs.
Scripts
Use scripts/wilma-cli.sh for a stable wrapper around the CLI.
Links
- GitHub: https://github.com/aikarjal/wilmai
- Website: https://wilm.ai
Questions people ask
- What does `wilma summary --json` return?
- It returns today’s and tomorrow’s schedules, upcoming exams, recent homework, recent news, and recent messages in one call. Use `--student` for one student or `--all-students` across the account.
- Can it retrieve news attachments and linked documents?
- Yes. Read a bulletin with `wilma news read <id> --json`, inspect its `resources` array, then use `wilma news resource download`. The command reports whether a file was downloaded, the link served a web page, or the attempt failed.
- What setup and authentication are required?
- Install `@wilm-ai/wilma-cli` and run the interactive CLI once to create the saved profile. MFA accounts can save a TOTP secret during setup or provide one with `--totp-secret` for a one-off non-interactive command.
Related skills
Research recent discussions across Reddit, X, YouTube, and the web, then synthesize cited findings.
Turn trip requirements and current travel research into a tailored itinerary in PDF, HTML, or Markdown.
Creates a morning briefing from sleep, biometrics, calendar, activity, and local weather data.
Create and export videos from scripts, URLs, documents, visuals, ideas, or speech.
Manage beehiiv publications, subscribers, fields, segments, tiers, and automations through a managed OAuth API.