PROMPT 1: Client Meeting Prep Skill

Create a Skill called /client-meeting-prep that does the following:

1. Check my calendar for the upcoming client meeting. Typically, if the attendees email is a personal email, then we can assume it's a candidate. Check for the next one that has a work email. 

2. Extract the person's name and company from the event description (could be a name, LinkedIn URL, or both — do your best)

3. Research them using Exa. Run all of these in parallel:
   - LinkedIn profile: career arc, current role, tenure
   - Recent news/activity (last 6-12 months)
   - Company overview: what they do, size, stage, funding, HQ
   - Hiring signals: check their careers page for open roles — volume, functions, seniority levels, patterns
   - Competitive landscape: main rivals, how crowded the space is
   - Industry talent dynamics: is hiring tight or loose, what roles are hardest to fill

4. Format as a one-page brief:

## [Name] — [Title] at [Company]
Meeting: [event title] | [date & time]

Who they are — 2-3 sentences, career highlights, what's interesting for rapport
**What's happening at [Company]** — 2-3 sentences, growth signals, anything implying hiring needs
**Hiring signals** — open roles, patterns, what it tells you about priorities
**Recent activity** — specific recent mentions, posts, press (skip if nothing)
**Competitive landscape** — main rivals, market position
**Talent market context** — hiring conditions in their industry
**Angles for the conversation** — 2-3 talking points to lead with
Make each section bolded

Keep it tight. Skip sections with nothing useful. The goal: walk in sounding like I already understand their world.

PROMPT 2: Calibration Research Skill

Create a Skill called /job-calibration-research

When I give it an intake call transcript or notes, it should:

**Step 1: Extract Must-Haves (max 5)**
Read the transcript and pull non-negotiable criteria the client would use to screen in or out. Be specific — "VP of Engineering who scaled a team from 20 to 80+ at a Series B-D company" not "strong leader."

Order:
1. Title + years experience (match the EXACT level — if they said VP, search VP, not SVP or C-level)
2. Location (or "not specified")
3-5. Top 2-3 things client emphasized: company stage, industry, functional experience, education, company caliber

Add: "What the client over-indexes on" — the thing that if nailed, they'll overlook other gaps.

**Step 2: Sourcing Company List (run parallel with Step 1)**
Use Exa to find 10-15 companies where the right candidates sit today:
- Direct competitors
- Talent peer companies at similar stage in adjacent verticals
- Companies with same investors or in same geography

For each: name, what they do, stage/funding, size, HQ. Filter aggressively.

**Step 3: External Candidate Search (after Steps 1-2 finish)**
Use Exa with category:people:
- 1 broad search: natural language description of ideal candidate (10 results)
- 5 targeted searches: [title] at [top sourcing company] (5 results each)

Deduplicate. Evaluate against must-haves. Show top 5: name, current role, company, match points, gaps, fit rating.

**Step 4: Internal Database Search (OPTIONAL — skip if no ATS connected)**
If an ATS like Stardex is connected, run a semantic/vector search for the same profile. Show top 5 with same format plus pipeline status.

Run Steps 3 and 4 in parallel.

**Output:**
# Calibration Research: [Role] at [Company]
## Must-Haves
## Sourcing Company List (tables)
## External Candidates (Top 5)
## Internal Database Results (Top 5, or skip)
## Calibration Notes — 2-3 sentences: is the pool deep or shallow? Anything to relax?

Be opinionated. If a candidate is a stretch, say so. If must-haves are too narrow, flag it. Speed over polish — this is calibration, not a final slate.

PROMPT 3: Customized Client Portals

Build a live HTML artifact in Cowork that acts as a client-facing pipeline report for one executive search engagement. The data should refresh every time the user opens the artifact — this is the core value vs. a static doc.

What you need from our ATS/CRM like Stardex (assuming we have one connected):

A single job/search with a stable ID. Pre-define pipeline stages in order (e.g. Sourced → Contacted → Interested → Screen → Interview → Final → Offer → Placed → Rejected).
A list-candidates-for-job endpoint returning for each candidate: person_id, name, current title, current company name, current company ID, current pipeline stage name.
A person-activity endpoint filterable by date range, returning activity type + timestamp + content preview per person. You'll filter to the last 7 days and exclude noisy types like stage-change logs or sequence enrollments.
Avatar URL per person (pre-fetched once, hardcoded into the HTML — not called live).
Company domain per company ID (pre-fetched once, hardcoded — used to build logo.dev URLs).

Which calls happen live vs. at build time:

Live on every artifact open: list-candidates-for-job, and parallel last-7-days activity fetch per candidate.
Pre-computed once, baked into the HTML: per-person relevance notes (2–3 sentences on why the candidate fits the brief), avatar URLs, company domains + brand colors.

Stardex-specific tool names (if you're on Stardex, replace these with your own MCP/API equivalents):

mcp__<stardex-server>__search-jobs with vector_search to find the job once.
mcp__<stardex-server>__get-job-by-id — pipeline stage definitions.
mcp__<stardex-server>__list-job-candidates — live candidate pull.
mcp__<stardex-server>__get-person-activities with created_at_gte, excluded_activity_types: ["pipeline_status", "sequence_enrollment"] — live activity.
mcp__<stardex-server>__get-person-by-id — image_url is the avatar field (Supabase-hosted).
mcp__<stardex-server>__get-company-by-id — enriched_company.domain is the website field.

Report structure (top to bottom):

Header: client company logo mark, role title, search open date, fee, generated-at timestamp.
Four metric cards: total in pipeline, active (not rejected/placed), in interview, candidates with activity in last 7 days.
Activity banner: flat list of last-7-day activity across all candidates, or a clean empty state.
Candidates grouped by pipeline stage, skipping empty stages. Two-column card grid.
Each candidate card: avatar, name, current title, company chip (logo + name), 2–3 sentence relevance note written against the search brief, and a recent-activity badge if any.

Relevance notes: Hardcode a person_id → text map. Each note should reference the brief's criteria (stage, PE-backed vs. not, domain match, peer-company experience, scale). Include a fallback line ("Title at Company.") for any candidate missing from the map.
Image handling — critical constraint: The artifact sandbox blocks external network requests. Use <img src="..."> tags for logo.dev logos (<https://img.logo.dev/{domain}?token={publishable_key}&size=64&format=png>) and your ATS's avatar URLs, but always wrap them with a styled initials fallback (colored circle for avatars, colored rounded square for company logos, keyed by first letter of last name / company name). Put onerror="this.remove()" on each <img> so the fallback shows when loading fails. Pick brand-approximate colors per company so the fallback still looks premium. Do not attempt to fetch images at build time — workspace web_fetch and the shell sandbox both block arbitrary URLs.
Visual style: Top-tier executive search firm aesthetic. Georgia serif headings, system sans body, cream background (#fafaf7), warm neutral borders, gold accent for activity callouts. Light-mode only (color-scheme: light). Responsive to single-column below ~720px.
Artifact mechanics: Declare the two live tools in the mcp_tools array. Call them via await window.cowork.callMcpTool(name, args) on page load. Don't add a manual refresh button — the artifact header already has one.