Tool tree
gradeNot graded
load_calendarAction
Load an iCalendar (.ics) document into SeriesSafe so its recurring series can be examined. Pass source="sample" to load the bundled language-school calendar, or source="text" with the ics content.
View tool JSON
{
"name": "load_calendar",
"kind": "act",
"impl": "imperative",
"description": "Load an iCalendar (.ics) document into SeriesSafe so its recurring series can be examined. Pass source=\"sample\" to load the bundled language-school calendar, or source=\"text\" with the ics content.",
"inputSchema": {
"type": "object",
"properties": {
"source": {
"type": "string",
"enum": [
"sample",
"text"
],
"description": "Where the calendar comes from."
},
"ics": {
"type": "string",
"description": "Raw .ics content. Required when source is \"text\"."
}
},
"required": [
"source"
]
},
"page": "/seriessafe/"
}list_recurring_seriesAnswer
List every recurring series in the loaded calendar, with how many occurrences and exceptions each has.
View tool JSON
{
"name": "list_recurring_series",
"kind": "answer",
"impl": "imperative",
"description": "List every recurring series in the loaded calendar, with how many occurrences and exceptions each has.",
"inputSchema": {
"type": "object",
"properties": {},
"additionalProperties": false
},
"page": "/seriessafe/"
}inspect_seriesAnswer
Select one recurring series and return its underlying structure: the recurrence rule, time zone, first and last occurrence, and how many occurrences are cancelled, individually overridden or added. This is the semantic state behind the calendar grid, not what the grid displays.
View tool JSON
{
"name": "inspect_series",
"kind": "answer",
"impl": "imperative",
"description": "Select one recurring series and return its underlying structure: the recurrence rule, time zone, first and last occurrence, and how many occurrences are cancelled, individually overridden or added. This is the semantic state behind the calendar grid, not what the grid displays.",
"inputSchema": {
"type": "object",
"properties": {
"uid": {
"type": "string",
"description": "The UID of the series to inspect."
}
},
"required": [
"uid"
]
},
"page": "/seriessafe/"
}list_series_exceptionsAnswer
Enumerate every occurrence of the selected series that differs from the plain pattern: cancellations, detached overrides (moved, relocated, or given a different roster) and explicitly added dates. Each is returned with the ordinal position that anchors it, which is what makes a safe re-anchoring possible.
View tool JSON
{
"name": "list_series_exceptions",
"kind": "answer",
"impl": "imperative",
"description": "Enumerate every occurrence of the selected series that differs from the plain pattern: cancellations, detached overrides (moved, relocated, or given a different roster) and explicitly added dates. Each is returned with the ordinal position that anchors it, which is what makes a safe re-anchoring possible.",
"inputSchema": {
"type": "object",
"properties": {
"onlyAfter": {
"type": "string",
"description": "Optional ISO date (YYYY-MM-DD); return only exceptions on or after it."
}
}
},
"page": "/seriessafe/"
}simulate_series_splitAction
Dry run: work out what changing the recurrence rule from a given date onwards would do, WITHOUT changing anything. Returns the re-anchoring plan, the list of items a conventional "this and following" edit would silently destroy, and any reason the change cannot be made safely.
View tool JSON
{
"name": "simulate_series_split",
"kind": "act",
"impl": "imperative",
"description": "Dry run: work out what changing the recurrence rule from a given date onwards would do, WITHOUT changing anything. Returns the re-anchoring plan, the list of items a conventional \"this and following\" edit would silently destroy, and any reason the change cannot be made safely.",
"inputSchema": {
"type": "object",
"properties": {
"effectiveFrom": {
"type": "string",
"description": "ISO date (YYYY-MM-DD). The change applies from here onwards."
},
"weekdays": {
"type": "array",
"items": {
"type": "string",
"enum": [
"SU",
"MO",
"TU",
"WE",
"TH",
"FR",
"SA"
]
},
"description": "New weekday(s), e.g. [\"TH\"]. Omit to keep the current days."
},
"interval": {
"type": "number",
"description": "New interval, e.g. 2 for fortnightly. Omit to keep it."
},
"timeOfDay": {
"type": "string",
"description": "New local start time as HH:MM. Omit to keep it."
},
"endPolicy": {
"type": "string",
"enum": [
"preserve-count",
"keep-end-date"
],
"description": "What to do with the end of the series. \"preserve-count\" (default) keeps every remaining meeting, letting the final date shift to the new weekday. \"keep-end-date\" holds the original end date and is refused if that would drop a meeting."
}
},
"required": [
"effectiveFrom"
]
},
"page": "/seriessafe/"
}stage_series_splitAction
Prepare the change without committing it. Refuses outright if the simulation found anything it cannot re-anchor with certainty. After staging, call validate_staged_split.
View tool JSON
{
"name": "stage_series_split",
"kind": "act",
"impl": "imperative",
"description": "Prepare the change without committing it. Refuses outright if the simulation found anything it cannot re-anchor with certainty. After staging, call validate_staged_split.",
"inputSchema": {
"type": "object",
"properties": {
"effectiveFrom": {
"type": "string",
"description": "ISO date (YYYY-MM-DD)."
},
"weekdays": {
"type": "array",
"items": {
"type": "string",
"enum": [
"SU",
"MO",
"TU",
"WE",
"TH",
"FR",
"SA"
]
},
"description": "New weekday(s)."
},
"interval": {
"type": "number",
"description": "New interval."
},
"timeOfDay": {
"type": "string",
"description": "New local start time as HH:MM."
},
"endPolicy": {
"type": "string",
"enum": [
"preserve-count",
"keep-end-date"
],
"description": "What to do with the end of the series. \"preserve-count\" (default) keeps every remaining meeting, letting the final date shift to the new weekday. \"keep-end-date\" holds the original end date and is refused if that would drop a meeting."
}
},
"required": [
"effectiveFrom"
]
},
"page": "/seriessafe/"
}validate_staged_splitAction
Check the staged result against every safety invariant, working from the serialized .ics bytes rather than from memory. Returns per-check evidence. Only if all checks pass does the page register the commit_staged_split tool.
View tool JSON
{
"name": "validate_staged_split",
"kind": "act",
"impl": "imperative",
"description": "Check the staged result against every safety invariant, working from the serialized .ics bytes rather than from memory. Returns per-check evidence. Only if all checks pass does the page register the commit_staged_split tool.",
"inputSchema": {
"type": "object",
"properties": {},
"additionalProperties": false
},
"page": "/seriessafe/"
}compare_with_conventional_editAction
Show the same staged change applied two ways: as SeriesSafe applies it, and as a conventional calendar "this and following" edit applies it. Use this to report concretely what the user would have lost.
View tool JSON
{
"name": "compare_with_conventional_edit",
"kind": "act",
"impl": "imperative",
"description": "Show the same staged change applied two ways: as SeriesSafe applies it, and as a conventional calendar \"this and following\" edit applies it. Use this to report concretely what the user would have lost.",
"inputSchema": {
"type": "object",
"properties": {},
"additionalProperties": false
},
"page": "/seriessafe/"
}export_calendar_icsAnswer
Return the current calendar as .ics text, ready to re-import into Google Calendar, Outlook or Apple Calendar.
View tool JSON
{
"name": "export_calendar_ics",
"kind": "answer",
"impl": "imperative",
"description": "Return the current calendar as .ics text, ready to re-import into Google Calendar, Outlook or Apple Calendar.",
"inputSchema": {
"type": "object",
"properties": {
"which": {
"type": "string",
"enum": [
"current",
"staged",
"conventional"
],
"description": "Which version to export. \"conventional\" returns the lossy comparison result."
}
}
},
"page": "/seriessafe/"
}