Recruiting Sourcing Agent
Overview
The Recruiting Sourcing Agent, Molly, is a prompt-driven sourcing agent that starts from a Notion job description, builds a profile spec, finds candidates with Exa, and calibrates against recruiter feedback in Slack and Notion before filing approved candidates into GEM. It never does outreach — recruiters stay in control of candidate review and engagement.
The workflow has three phases: kick-off from a Slack @mention with a Notion JD link, calibration cycles through Slack review modals and Notion spec updates, then daily sourcing runs that fold GEM notes back into the profile spec before adding fresh candidates to the role's GEM project.
How to deploy
Clone the repo, open it in Warp, and ask the agent to run the setup skill:
Clone https://github.com/warpdotdev/recruiting-sourcing-agent-oss.git, open it in Warp,
and run the setup skill at .warp/skills/setup/SKILL.md
The setup skill walks through .env configuration for Slack, Notion, Exa, and GEM, creates or verifies the Molly Tracker database, runs read-only checks against each service, and points you to the managed Warp/Oz or self-hosted deployment path.
Or set it up manually:
1. Configure Notion
Create a Notion internal integration, a parent page for Profile Spec pages, and a Molly Tracker database with role name, JD link, Profile Spec link, GEM project ID, status, open date, and assignee fields. Share the parent page and tracker with the integration.
2. Add Slack, Exa, and GEM credentials
Create a Slack bot with chat:write and app_mentions:read, invite it to your sourcing channel, then configure MOLLY_SLACK_BOT_TOKEN, SOURCING_SLACK_CHANNEL_ID, MOLLY_NOTION_API_KEY, MOLLY_NOTION_PARENT_PAGE_ID, MOLLY_TRACKER_DB_ID, MOLLY_EXA_API_KEY, and MOLLY_GEM_API_KEY as environment variables or Oz secrets.
3. Wire the runtime triggers
Daily sourcing runs on a schedule, kick-off runs from Slack @mentions with a Notion JD URL, and calibration runs from the Slack review modal submission. The included handlers/slack-review-modal/ service verifies Slack signatures, opens the candidate review modal, and starts the calibration agent run.
4. Deploy on Oz or your own harness
oz environment create --name molly \
--docker-image warpdotdev/dev-base:latest \
--repo <your-github-org>/recruiting-sourcing-agent-oss
oz schedule create --cron "0 8 * * *" \
--name "Molly daily sourcing" \
--prompt "Daily sourcing cron run. Read AGENTS.md in the molly repo and execute the molly-sourcing skill for all roles in Sourcing." \
--environment <ENV_ID>
oz integration create slack --environment <ENV_ID> \
--prompt "You are Molly. Read AGENTS.md in the molly repo and follow its trigger routing."
Before handing Molly real roles, run the read-only verification checks for Notion, Slack, Exa, and GEM, then test end-to-end with a sample Notion JD page and the Review All Candidates Slack flow.
Integrations
Exa powers candidate search across public profiles, Notion stores the JD, profile spec, calibration notes, and role tracker, Slack handles recruiter kick-off and calibration review, and GEM stores approved candidates in the right project.
The optional Slack interactivity handler supports the Review All Candidates modal and can trigger Molly through Warp's agent API by default, or be adapted to another agent harness. Candidate data includes personal information, so deployments should use isolated runtimes, least-privilege service tokens, and the repo's prompt-injection guardrails.