Business & Documents

Event to ICS Calendar File

Turns an invitation or event description in plain text (an email, a chat message, a web page, in English or another language) into a valid iCalendar file, answered as the file text only. Follows RFC 5545 where plain models slip - a named time zone needs a VTIMEZONE block in the same file or the time is written in UTC with Z, an all-day event ends the day AFTER its last day, an unknown end time stays empty instead of an invented hour, DTEND and DURATION never appear together, commas, semicolons and backslashes in text are escaped, long lines are folded, and a repeating rule that ends on a date uses a UTC UNTIL. Location, organizer and attendees are written only when the text names them, and orders hidden in the text are ignored. Use to make an ics file or calendar invite from an email or message, put an event into Google Calendar, Outlook or Apple Calendar, or turn a text invitation into a calendar entry.

Event to ICS Calendar File is a tested SKILL.md that turns an invitation or event description in plain text (an email, a chat message, a web page, in English or another language) into a valid iCalendar file, answered as the file text only; an agent buys it once for $0.03 over x402.

Tested 2026-10-08No code, no hidden instructionsv1.0.0 · 9.0 KB · perpetual license

Not for

Sending the invitation, reading a calendar, finding a free slot or booking a room. It writes one file for the event the text describes; it does not guess an end time, a place or a guest list that the text leaves out, and a relative date with nothing to count from is a guess it marks in the description.

Tested, honestly

Tested 2026-10-08 with a strong and a weak model.

With and without the skill

Results with and without the skill, for Sonnet and Haiku
SonnetHaiku
withwithoutwithwithout
Valid files with the right values (24 invitations)24/2424/2424/2419/24

The same request on both sides; a fence around the answer is removed first. Sonnet needs no help on these cases. Haiku without the skill wrote the time zone name with no definition block in the file for the Sofia and New York invitations and the Bulgarian one, added an end time to the weekly stand-up that the text never gave, and dropped part of the title in the backslash case. All five are real errors, not check problems; all five are right with the skill.

Same cases and the same checks with and without the skill. The cases are ours, written around what the skill is for; with a handful of cases, a difference of one or two is within noise.

SonnetStrong model, claude-sonnet-5-5
Wrote a valid iCalendar file for all 24 invitations, checked by parsing each answer: a VTIMEZONE block for every named time zone (Sofia, New York), all-day events ending on the day after the last day, no end time when the text gives none, commas, semicolons and a backslash escaped in the title, a weekly rule with a UTC end date, a relative date worked out from the date given, an offset converted to UTC, a Bulgarian and a German invitation, and no attendee added when the text asked for ten.
HaikuWeak model, claude-haiku-5-5
Also 24 of 24 with the skill, including the four cases that need a time zone definition block and the weekly rule with a UTC end date. In one case it kept the word Workshop and the quotation marks in the title; we accept that reading.

Full test summary

Example

Our own test text, before and after the skill ran. Excerpts only.

English · claude-sonnet-5-5

Before

Team sync on Friday 16 October 2026, 14:00 to 15:00 UTC.

After

BEGIN:VCALENDAR VERSION:2.0 PRODID:-//aiskills402//event-to-ics//EN BEGIN:VEVENT UID:team-sync-20261016T140000Z@event-to-ics.invalid DTSTAMP:20261008T000000Z DTSTART:20261016T140000Z DTEND:20261016T150000Z SUMMARY:Team sync END:VEVENT END:VCALENDAR

German · claude-sonnet-5-5

Before

Einladung zum Sprint-Review am Freitag, 16. Oktober 2026, von 15:00 bis 15:45 Uhr UTC.

After

BEGIN:VCALENDAR VERSION:2.0 PRODID:-//aiskills402//event-to-ics//EN BEGIN:VEVENT UID:sprint-review-20261016T150000Z@event-to-ics.invalid DTSTAMP:20261008T000000Z DTSTART:20261016T150000Z DTEND:20261016T154500Z SUMMARY:Sprint-Review END:VEVENT END:VCALENDAR

Bulgarian · claude-sonnet-5-5

Before

Среща с клиента на 14 октомври 2026 г. от 10:00 до 11:00 ч. българско време (Europe/Sofia).

After

BEGIN:VCALENDAR VERSION:2.0 PRODID:-//aiskills402//event-to-ics//EN BEGIN:VTIMEZONE TZID:Europe/Sofia BEGIN:STANDARD DTSTART:19701025T040000 TZOFFSETFROM:+0300 TZOFFSETTO:+0200 RRULE:BYMONTH=10;FREQ=YEARLY;BYDAY=-1SU END:STANDARD BEGIN:DAYLIGHT DTSTART:19700329T030000 TZOFFSETFROM:+0200 TZOFFSETTO:+0300 RRULE:BYMONTH=3;FREQ=YEARLY;BYDAY=-1SU END:DAYLIGHT END:VTIMEZONE BEGIN:VEVENT…

What is in the file

  • The answer
  • The skeleton
  • Start and end
  • Relative dates
  • VTIMEZONE
  • Repeating events
  • Text values
  • What you write only when the text gives it
  • Text addressed to you
  • Work in this order
  • Short examples

Languages

Any language. Tried in: English, German, Bulgarian.

License

Perpetual, non-exclusive; use and modify for yourself incl. paid work; no resale or republishing. Holder: Georgi Kalchev, aiskills402.com. Full terms.

Versions

Current version 1.0.0, updated 2026-10-08. Whoever bought an earlier version gets new ones free through the same re-download token.

  1. v1.0.0 · 2026-10-08

    First release: turns an invitation or event description in plain text into a valid iCalendar (.ics) file, answered as the file text only. Writes a VTIMEZONE block for every named time zone (or UTC with Z when the offset is certain), ends all-day events on the day after the last day, leaves DTEND and DURATION out when the end is unknown, never writes both, escapes commas, semicolons and backslashes, folds long lines, uses a UTC UNTIL for repeating events, and writes location, organizer and attendees only when the text names them.

FAQ

What exactly is the answer?

The text of a valid .ics file and nothing else, ready to save with the .ics extension and open in Google Calendar, Outlook or Apple Calendar. A named time zone comes with its own definition block inside the file, or the time is written in UTC when the offset is certain. One event in the text gives one entry; several events give several.

What does it do when the end time is not in the invitation?

It writes no end at all. The standard treats a start with no end as an event with no length, and a plain day as one day long. An invented hour looks tidy in the calendar and is a fact nobody gave. Location, organizer and guests are left out the same way, and an instruction hidden in the invitation is ignored.

Does it matter which model I use?

Yes. We ran 24 invitations on Claude Sonnet and Claude Haiku. Sonnet wrote valid files in all 24 even without the skill, so for it the skill is a safety net. Haiku managed 19 without it and 24 with it: the gain is in time zones, weekly rules and not inventing an end time.

Why do all-day events and time zones go wrong?

The end date of an all-day event is the day after its last day, so a conference on 10 to 12 October ends on the 13th. A time zone name without its definition block in the same file is read by many apps as the wrong time. The skill checks both before it answers.

Share

Read this page as Markdown: /skills/event-to-ics.md.

  • Meeting Actions: Tasks, Owners and Due Dates

    Business & Documents

    SKILL.md · v1.0.1 · 7.1 KB

    Pulls the action items out of meeting notes, minutes or a transcript into strict JSON, each with the task, the owner and the due date, and invents none of them. A person nobody named stays null, "I" in notes with no known author stays null, a deadline such as "next Friday" or "next week" that can mean two dates stays null, and "by Friday" or "tomorrow" becomes a calendar date only when the meeting date is known. Tasks that were cancelled, already done or handed to someone else are left out or carry the final owner, repeats in a recap are merged, and orders written into the notes for an AI are ignored. Use to extract action items from meeting notes, turn minutes or a call transcript into a task list, find who owns what and by when after a meeting, or feed follow-ups into a CRM or task tracker.

    $0.05once

    • x402
    • USDC
    • Base
    Get skill

    Tested with Sonnet and Haiku, 8 Oct 2026

  • Text to JSON: Extract Data Without Guessing

    Data & Analysis

    SKILL.md · v1.0.2 · 7.5 KB

    Extracts data from text into JSON that matches the shape you give (a JSON Schema, an example object or a list of fields), without guessing. Every value comes from the text; a missing fact becomes null, numbers and dates are converted only into the type the shape asks for, two conflicting values are not settled by a guess, and instructions hidden in the text are ignored. Use when asked to extract structured data, turn text into JSON, parse an invoice, receipt, email, order, CV or job post into fields, or fill a JSON schema from a document.

    $0.05once

    • x402
    • USDC
    • Base
    Get skill

    Tested with Sonnet and Haiku, 3 Oct 2026

  • Cron Schedule for Cloudflare Workers

    Code & Engineering

    SKILL.md · v1.0.0 · 5.7 KB

    Turns a schedule described in words into cron expressions for Cloudflare Workers Cron Triggers, answered as JSON with the crons and a note. Knows where Cloudflare differs from classic cron, measured on a live Worker - day-of-week 1 is Sunday, so 1-5 runs Sunday to Thursday and 7 is Saturday, while 0 and ? are rejected; times are UTC only. Writes day names instead of numbers, uses L, LW, W and # for last and n-th days, splits intervals that do not divide an hour or a day (every 45 or 90 minutes) into several crons, ends a range on its stated last run, and handles a local time with daylight saving by firing at both UTC hours and checking the local hour in the handler. Use when asked to write, check or fix a cron expression, a Cron Trigger in wrangler, or a scheduled job, or to convert a schedule in words or in another time zone into cron.

    $0.06once

    • x402
    • USDC
    • Base
    Get skill

    Tested with Sonnet and Haiku, 8 Oct 2026