
Events
- 13 installs
- Updated May 12, 2026
- tryshift-sh/skills-store
Helps with ai & agent building tasks.
About
events is a Claude Code skill for ai & agent building. It helps solo builders move faster with AI-assisted coding.
- events
- AI & Agent Building
- AI-coding skill
Events by the numbers
- 13 all-time installs (skills.sh)
- Ranked #11,409 of 16,546 AI & Agent Building skills by installs in the Skillselion catalog
- Data as of Aug 5, 2026 (Skillselion catalog sync)
npx skills add https://github.com/tryshift-sh/skills-store --skill eventsAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| Installs | 13 |
|---|---|
| Last updated | May 12, 2026 |
| Repository | tryshift-sh/skills-store ↗ |
What it does
Helps with ai & agent building tasks.
Files
Google Calendar Events
Use this managed skill when the user wants to inspect an agenda, create a calendar event, or move an existing event in Google Calendar.
This skill uses Shift's local Skill Router. Do not ask the user to paste Google credentials into chat.
It also ships a precompiled local helper that can summarize an agenda window by calling the same authenticated provider action through SHIFT_LOCAL_GATEWAY.
Invocation
Base URL:
SHIFT_LOCAL_GATEWAY
Endpoint:
POST /skill-router/invoke
Request body to fetch an agenda window:
{
"skillProvider": "google-calendar",
"skill": "events",
"action": "agenda",
"input": {
"timeMin": "2026-03-13T00:00:00Z",
"timeMax": "2026-03-20T00:00:00Z",
"maxResults": 10
}
}Request body to create an event:
{
"skillProvider": "google-calendar",
"skill": "events",
"action": "create",
"input": {
"summary": "Product sync",
"description": "Review launch checklist",
"startDateTime": "2026-03-13T09:00:00+08:00",
"endDateTime": "2026-03-13T09:30:00+08:00",
"timeZone": "Asia/Shanghai",
"attendees": ["teammate@example.com"]
}
}Request body to reschedule an event:
{
"skillProvider": "google-calendar",
"skill": "events",
"action": "reschedule",
"input": {
"eventId": "abc123def456",
"startDateTime": "2026-03-13T11:00:00+08:00",
"endDateTime": "2026-03-13T11:30:00+08:00",
"timeZone": "Asia/Shanghai"
}
}Precompiled code-skill helper:
node dist/index.js '{
"timeMin": "2026-03-13T00:00:00Z",
"timeMax": "2026-03-14T00:00:00Z",
"maxResults": 10,
"timeZone": "Asia/Shanghai"
}'Example response shape:
{
"count": 2,
"summary": "1. Product sync (2026-03-13T09:00:00+08:00 - 2026-03-13T09:30:00+08:00)\n2. Design review (2026-03-13T13:00:00+08:00 - 2026-03-13T14:00:00+08:00)",
"items": []
}Authentication
This skill requires a Google Calendar connection configured in Shift.
Agent behavior
1. Ask for a clear time window before using agenda. 2. Use ISO 8601 date-time strings for create and reschedule actions. 3. Assume the primary calendar unless the product later adds explicit calendar selection. 4. Use node dist/index.js '<json payload>' only for the summary helper; authenticated provider access still goes through SHIFT_LOCAL_GATEWAY.
// src/index.ts
async function invokeAgenda(input) {
const gatewayBase = process.env.SHIFT_LOCAL_GATEWAY;
if (!gatewayBase) {
throw new Error("SHIFT_LOCAL_GATEWAY is required.");
}
const response = await fetch(`${gatewayBase}/skill-router/invoke`, {
method: "POST",
headers: { "content-type": "application/json" },
body: JSON.stringify({
skillProvider: "google-calendar",
skill: "events",
action: "agenda",
input
})
});
const responseText = await response.text();
const parsed = responseText ? JSON.parse(responseText) : null;
if (!response.ok) {
const errorMessage = parsed?.error ?? parsed?.message ?? `Skill Router returned ${response.status}.`;
throw new Error(errorMessage);
}
return parsed;
}
function formatEventTime(event) {
const start = event.start?.dateTime ?? event.start?.date ?? "unknown start";
const end = event.end?.dateTime ?? event.end?.date ?? "unknown end";
return `${start} - ${end}`;
}
function buildSummary(items) {
if (items.length === 0) return "No calendar events found in the requested window.";
return items.map((event, index) => `${index + 1}. ${event.summary ?? "Untitled"} (${formatEventTime(event)})`).join("\n");
}
async function main() {
const rawPayload = process.argv[2];
if (!rawPayload) {
throw new Error("Pass a single JSON payload string as the first argument.");
}
const input = JSON.parse(rawPayload);
const agenda = await invokeAgenda(input);
const summary = buildSummary(agenda.items ?? []);
const output = {
count: agenda.count ?? agenda.items?.length ?? 0,
summary,
items: agenda.items ?? [],
nextPageToken: agenda.nextPageToken ?? null
};
process.stdout.write(`${JSON.stringify(output, null, 2)}
`);
}
main().catch((error) => {
const message = error instanceof Error ? error.message : String(error);
process.stderr.write(`${message}
`);
process.exitCode = 1;
});
{
"id": "events",
"name": "Events",
"description": "Read upcoming events, create calendar events, and reschedule existing events in Google Calendar.",
"actions": {
"agenda": {
"upstream": {
"method": "GET",
"baseUrl": "https://www.googleapis.com",
"path": "/calendar/v3/calendars/primary/events",
"auth": { "mode": "bearer" }
},
"input": {
"queryTemplate": {
"timeMin": "$input.timeMin",
"timeMax": "$input.timeMax",
"timeZone": "$input.timeZone",
"q": "$input.query",
"maxResults": {
"$value": "$input.maxResults",
"$default": 10
},
"singleEvents": true,
"orderBy": "startTime"
}
},
"output": {
"responseMap": {
"count": {
"$length": "$response.items"
},
"nextPageToken": "$response.nextPageToken",
"items": {
"$each": "$response.items",
"map": {
"id": "$item.id",
"status": "$item.status",
"summary": {
"$value": "$item.summary",
"$default": "Untitled"
},
"description": "$item.description",
"location": "$item.location",
"htmlLink": "$item.htmlLink",
"start": {
"dateTime": "$item.start.dateTime",
"date": "$item.start.date",
"timeZone": "$item.start.timeZone"
},
"end": {
"dateTime": "$item.end.dateTime",
"date": "$item.end.date",
"timeZone": "$item.end.timeZone"
},
"creator": {
"email": "$item.creator.email",
"self": "$item.creator.self"
},
"organizer": {
"email": "$item.organizer.email",
"self": "$item.organizer.self"
}
}
}
}
}
},
"create": {
"upstream": {
"method": "POST",
"baseUrl": "https://www.googleapis.com",
"path": "/calendar/v3/calendars/primary/events",
"auth": { "mode": "bearer" }
},
"input": {
"queryTemplate": {
"sendUpdates": "$input.sendUpdates"
},
"bodyTemplate": {
"summary": "$input.summary",
"description": "$input.description",
"location": "$input.location",
"colorId": "$input.colorId",
"start": {
"dateTime": "$input.startDateTime",
"timeZone": "$input.timeZone"
},
"end": {
"dateTime": "$input.endDateTime",
"timeZone": "$input.timeZone"
},
"attendees": {
"$each": "$input.attendees",
"map": {
"email": "$item"
}
}
}
},
"output": {
"responseMap": {
"id": "$response.id",
"status": "$response.status",
"summary": {
"$value": "$response.summary",
"$default": "Untitled"
},
"htmlLink": "$response.htmlLink",
"start": {
"dateTime": "$response.start.dateTime",
"date": "$response.start.date",
"timeZone": "$response.start.timeZone"
},
"end": {
"dateTime": "$response.end.dateTime",
"date": "$response.end.date",
"timeZone": "$response.end.timeZone"
}
}
}
},
"reschedule": {
"upstream": {
"method": "PATCH",
"baseUrl": "https://www.googleapis.com",
"path": "/calendar/v3/calendars/primary/events/{eventId}",
"auth": { "mode": "bearer" }
},
"input": {
"queryTemplate": {
"sendUpdates": "$input.sendUpdates"
},
"bodyTemplate": {
"start": {
"dateTime": "$input.startDateTime",
"timeZone": "$input.timeZone"
},
"end": {
"dateTime": "$input.endDateTime",
"timeZone": "$input.timeZone"
}
}
},
"output": {
"responseMap": {
"id": "$response.id",
"status": "$response.status",
"summary": {
"$value": "$response.summary",
"$default": "Untitled"
},
"htmlLink": "$response.htmlLink",
"start": {
"dateTime": "$response.start.dateTime",
"date": "$response.start.date",
"timeZone": "$response.start.timeZone"
},
"end": {
"dateTime": "$response.end.dateTime",
"date": "$response.end.date",
"timeZone": "$response.end.timeZone"
}
}
}
}
}
}