microsoft/call-for-speakers-digest
>- Weekly digest of open conference Call for Speakers (CFP) opportunities matching the person's topics of interest, delivered as an HTML email. Use this skill when someone asks to be notified about speaking opportunities, wants a recurring CFP digest, asks "what conferences are taking submissions right now", or wants to set up a weekly speaker opportunity search. Also use on the skill's own recurring weekly run to refresh the digest, and when the person wants to update their topics, location or format preferences, or exclude a conference they're already committed elsewhere for.
npx skills add https://github.com/microsoft/cat-agent-skills --skill call-for-speakers-digest
Requires web search. Building the HTML digest in Copilot Studio specifically requires Code Interpreter enabled on the agent, printing raw HTML into the chat as text won't render it. Sending the digest as an actual email requires a connected email tool (Gmail, Outlook). Without Code Interpreter or an email tool, present the finished digest as plain formatted chat text instead and say so plainly, don't pretend it was sent or rendered as a file when it wasn't.
Ask for, and remember, this profile so it doesn't need to be re-collected every week:
If they'd rather stay narrow to just the named topics, that's a legitimate choice too, don't push, just make sure they've actually been offered the broader option once so it's an informed choice rather than a default they never got to consider.
On every run after the first, don't re-ask all of this. Just check in briefly: "Still want [topics/scope], or should I update anything?" and proceed with the remembered profile if they don't respond with changes.
Check every source below, every single run, and treat this as a minimum, not a target to stop at once reached: a distinct search or page fetch for each of the browsable aggregators, targeted searches against community hubs (see below for why "fetch the hub page" doesn't always work), a site-specific search on Sessionize and run.events for each topic, and at least one broadened-term general search per topic. For a profile with 2-3 topics, that's easily 10+ separate searches or fetches before you're done, not 2 or 3. If your final list has fewer than about 5 open CFPs, that's a signal something got skipped, go back and check which of the sources below you didn't actually hit before finalizing.
Some sites are JavaScript-rendered and won't give you real data if you fetch the page directly. A direct fetch of a listing/search page sometimes returns just a page shell, filter controls, a loading spinner, no actual list content, because the real data loads client-side after the page renders. If a fetched page looks like that (filter UI but no actual entries, or a visible loading indicator), don't trust it as "no results," it means that page can't be fetched directly and you need to search it instead. Individual item pages on these same sites are usually still fully indexed and readable even when the aggregate listing page isn't, fetching a specific event's own URL directly works fine even on a site whose listing page doesn't.
Browsable aggregators (check these directly, they track CFP deadlines themselves):
site:sessionize.com/user-groups [topic], to jump straight to relevant entries.Community-specific hubs — if the person's topics point to a specific professional community, check whether that community has a dedicated hub site the way Microsoft's ecosystem does:
site:communitydays.org "call for speakers" plus each topic. Individual event pages found this way (e.g. communitydays.org/event/...) are fully readable directly, that's where the actual CFP link and close date live, on the event's own page, not the listing page.Submission platforms with no public browse page — these host individual standalone conferences' CFPs but don't offer a central list for that event type, don't try to browse them, search them the same way you'd search anything else:
site:sessionize.com "call for speakers" [topic]site:run.events "call for speakers" [topic] (used by events like European Collaboration Summit)General web search per topic, formatted like "[topic]" "call for speakers" <current year> (and optionally also "[topic]" "call for speakers" <next year>), or "[topic]" CFP deadline, to catch anything the above miss entirely.
For every topic, identify the broader ecosystem or platform it belongs to, and search under that umbrella too, not just the literal topic string. This matters more than naming lag on new products, community events are frequently branded at the ecosystem level even when individual sessions cover a much narrower thing someone actually cares about. A conference branded "Microsoft 365 Summit" or "SharePoint Conference" can easily have Copilot Studio or Agent 365 sessions in it without ever using those words in its own name or general marketing. Searching only the exact topic strings will systematically miss this entire category of genuinely relevant events, it's not a rare edge case.
Work out the umbrella terms yourself using what you know about each topic (don't ask the person to enumerate these, that's your job): if someone's topic is "Copilot Studio," the umbrella includes things like "Microsoft 365," "SharePoint," "Power Platform," "Microsoft Foundry," and "Copilot for M365." If someone's topic is a Kubernetes operator, the umbrella includes "CNCF," "Cloud Native," "Kubernetes" more broadly. Search both layers, the specific topic and the umbrella it sits in, every run. When a result only matches at the umbrella level, use judgment about whether the event plausibly covers the narrower topic (a general "Microsoft 365 Summit" likely does touch Copilot content; a "SharePoint permissions deep-dive" meetup probably doesn't), and don't discard something just because you're not 100% certain, note the uncertainty in the digest instead of silently dropping it.
If the profile includes a broadened ecosystem scope from Step 1b, actually search that ecosystem's name directly (e.g. "Microsoft 365 call for speakers"), not just the original narrow topics plus inferred umbrella terms, and apply whatever exclusions were captured (skip Teams-only or device-management content if that's what got excluded, for instance). This scope also covers platform-wide, product-agnostic conference brands that don't map to any single named topic at all, things like TechCon365 or PowerCon in the Microsoft space, which cover the whole platform rather than one product. Check for these by name specifically, and if a known one is currently between CFP cycles (last one closed, next one not yet open), don't drop it, note it in the digest as "not open yet, worth watching" so it doesn't silently disappear from consideration until its next call happens to open.
For each candidate, confirm the CFP is genuinely still open (deadline in the future relative to today) before including it. Discard anything already closed, don't include it "for reference."
For each open CFP, pull:
Every one of these details comes from actually opening and reading that specific event's current listing, never from what you already know about the conference from a previous year. Recurring community and regional events change host city, dates, and sometimes name year to year, often every single year. Confusing this year's instance with last year's, or one regional chapter with a similarly-named one (e.g. mixing up two different regional instances of the same conference series), produces a confidently wrong answer that looks correct, which is worse than an obvious gap. If you're not looking at the live page for that exact event instance right now, don't state a detail as fact.
Apply the profile's filters (format preference, travel willingness, excluded events) before finalizing the list. If a detail is genuinely unclear from the source page, say so in the digest rather than filling the gap with a plausible-sounding guess, the same rule any legitimate research skill should follow.
Keep a running record of which CFPs have already appeared in a previous digest (event name + CFP link is enough to key on). Don't re-list something that already went out unless its deadline is now inside the final 7 days, that's worth a "closing soon" resurfacing even if they've seen it before. Otherwise, only genuinely new listings belong in this week's digest.
Structure:
If an email tool is connected, send the digest to the person's own address (confirm which address the first time, then reuse it). If nothing is connected, deliver the digest as an HTML file only if the current runtime supports writing/attaching files; otherwise, present the digest as formatted chat text and say plainly that it wasn't sent.
This skill doesn't schedule itself, recurring/scheduled task support depends on the platform it's running in. The first time you run this, check whether the current platform has a way to schedule a recurring task (Cowork and Scout both do), and if so, tell the person to set this skill up as a weekly recurring task (their choice of day) rather than triggering it manually every time. If the platform has no such feature, say so plainly and let them know they'll need to trigger it themselves each week instead.
Take microsoft/call-for-speakers-digest from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.