This repo packages the Microsoft Events assistant plugin and the @microsoft/events-cli CLI. The plugin helps agents use live Microsoft Build and Ignite session catalogs; the CLI fetches, caches, normalizes, and searches those catalogs.
The repo publishes plugin metadata for GitHub Copilot and Claude Code. Keep shared product identity fields aligned across the manifests when changing the plugin name, description, version, author, repository, keywords, license, skills path, or MCP wiring.
Shared assets used by the plugin ecosystems:
skills\microsoft-build\SKILL.md— the active skill prompt.mcp.json— Microsoft Learn MCP endpoint configcli\— source for the@microsoft/events-clipackage used by the skill
Versioned plugin manifests:
- GitHub Copilot —
.github\plugin\plugin.jsonis the Copilot marketplace manifest and points at the repo root. - Claude Code —
.claude-plugin\plugin.jsondefines the Claude Code plugin package;.claude-plugin\marketplace.jsondefines Claude Code marketplace publishing metadata.
- Event support is duplicated by design between the CLI and skill docs. When adding, removing, or renaming events, update
cli\src\config.ts, the supported/default event guidance inskills\microsoft-build\SKILL.md, and affected tests/docs together. - Treat
skills\microsoft-build\SKILL.mdas the product contract for event-session behavior. For Build, Ignite, or event-session work: default "Build" tobuild-2026, get session metadata from the live catalog throughmseventsor the endpoint, get SDK/API facts from Microsoft Learn MCP, and never invent session IDs, speakers, schedules, or links. - Versioning gate: any meaningful
skills\microsoft-build\SKILL.mdchange (agent behavior, commands/examples agents may follow, supported/default events, CLI/MCP/catalog usage, or user-facing workflow guidance) must bump both versioned plugin manifests to the same value; patch bumps are fine for guidance-only changes. - PR review gate: GitHub Copilot/code reviewers should flag meaningful
SKILL.mdchanges without synced plugin version bumps, and any plugin version drift. Typo/format-only skill edits may skip the bump only when the PR explicitly says so. - Keep README install/client guidance aligned with plugin manifest, skill, MCP, or CLI behavior changes.
Source is in cli\src\, built output is cli\dist\, and the published binary is msevents. Targets Node.js 22+. TypeScript source is ESM/NodeNext: local imports between TS modules use .js extensions.
Run from cli\:
npm ci
npm run build
npm test
npx vitest run test\search.test.ts
npx vitest run test\search.test.ts -t "finds sessions by title keyword"
npm run smoke:fixturenpm run smoke:live hits the live catalog; CI only runs it outside pull requests.
Note: The first time npx @microsoft/events-cli is run, it prompts for permission and can cause CLI tool calls to hang in AI agents. In all instructions or SKILL.md, prefer npx -y @microsoft/events-cli to include the -y flag.
- Catalog data has inconsistent shapes: fields may be strings,
{ displayValue }objects, arrays, or empty values. Normalize through the helpers incli\src\data\normalize.ts; records withoutsessionCodeare intentionally skipped. - Cache behavior is part of the CLI contract.
ensureCacheloads cached sessions, revalidates when due, fetches missing event caches, and only falls back to stale cache when the stale data is scoped to the request. Tests useMSEVENTS_CACHE_DIRto isolate cache state. - Search behavior is intentionally specialized: the
msevents sessionscommand requires--query,--tech, or--speaker; code-like queries exact-match session codes and variants; technology search spans product/tags/topic/solution area/languages/title/description; speaker search post-filters on the queried last name.
- Make the smallest synchronized set of edits that keeps plugin manifests, skills, CLI behavior, and user-facing docs coherent.
- Prefer fixing drift between ecosystems immediately over documenting known inconsistency.