recruiter-agent

recruiter-agent

recruitinghrrankingpostman
Details
Visibility
public
Deploys
31
Build Number
15b9aa57
Updated
Jun 10, 2026
Contributors
Integrations
Greenhouse Harvest (user-supplied API key)People Data Labs (optional, user-supplied)Gem (optional, user-supplied)GNews (optional, user-supplied)Google Gmail + Calendar (optional, user-supplied OAuth)Anthropic Claude (user-supplied, BYOK)Slack (optional, deployer-supplied app tokens)
More blueprints
AGENT.md

Recruiter Agent

What it does

Given an open requisition, the agent pulls candidates from every source the user has connected, scores them on a thirteen-feature rubric, runs AI reasoning per candidate, applies a second-pass critic review, and returns the top thirty with concrete reasoning and "network context" observations the way a senior recruiter would frame them.

The agent learns continuously from three signals:

  • Thumbs feedback per card (numeric rubric weight updates), from the web UI or the Slack feedback command
  • Free-text comments per card (injected verbatim into the next ranking's reasoning prompt)
  • Greenhouse rejection reasons (mapped to feature impact via intelligence/rejection_signal.py)

Deploy your own copy

Every deployment is fully isolated: its own managed Postgres, its own auto-generated encryption secrets, its own users. You do not share data with any other deployment of this blueprint. Nothing needs to be pasted at deploy time; the agent generates and persists its platform secrets on first boot.

# 1. Install the CLI and sign in
curl -fsSL https://astropods.com/install | sh
ast login

# 2. Deploy straight from the public catalog
ast deploy recruiter-agent --adapter slack --adapter web --wait

For Slack, create your own Slack app in your workspace first: import doc/slack-app-manifest.json at https://api.slack.com/apps (Create New App, then "From an app manifest"), install it to the workspace, and paste the two tokens (xapp-... app token, xoxb-... bot token) when the deploy form asks for them.

Heads up: your web URL may not provision

The platform's shared load balancer has a limited number of URL slots. Your deployment can come up healthy but never receive a public web URL (the link returns NXDOMAIN). This is a platform capacity issue, not a broken deploy. The Slack path does not use a URL slot and works on every deployment, so treat Slack as the primary surface and the web UI as a bonus if your URL provisions.

First-run data

Pick one of three on the deploy form:

  1. Nothing (default): users paste their own Greenhouse Harvest key (setkey greenhouse <key> in a Slack DM, or the web Settings page) and rank their real pipeline.
  2. GREENHOUSE_MOCK_URL: point Greenhouse calls at a Postman mock for demos.
  3. USE_SAMPLE_DATA=true: zero-Greenhouse demo mode; ranking runs against 15 bundled sample candidates.

In every case each user sets their own Anthropic key: setkey anthropic sk-ant-... in a Slack DM, or the web Settings page.

Using it from Slack (no web UI needed)

DM the bot after install. Your account is created automatically from your Slack email.

CommandWhat it does
helpCommand list
whoamiYour account + which keys are set
setkey <kind> <key>DM only. Store your BYOK key: anthropic, greenhouse, pdl, gem, gnews
list jobsOpen requisitions
rank <job-id>Ranked shortlist with reasoning, streamed progress
similar <rank#> [count]Candidates from your pool with a similar background (semantic search)
`feedback <rank#> <updown> [comment]`
draft <rank#> [hook]Claude-drafted outreach email for a shortlisted candidate

Architecture

  • FastAPI agent on Astro AI: web UI on port 80, plus the messaging sidecar for Slack
  • Managed Postgres for canonical state, auto-provisioned per deployment
  • Managed Qdrant + gateway embeddings for semantic candidate search ("more like X"), embeddings-only gateway usage so chat costs stay BYOK
  • In-process NetworkX context graph (swappable to a managed graph store post-launch)
  • Anthropic Claude (Sonnet for reasoning, Haiku for cheaper passes)
  • Postman API Catalog publish + Postman mocks/monitors for the integration plane

User model

Sign in with email and password on the web, or just DM the bot on Slack; identity unifies by email across both surfaces. Per-user credentials are Fernet-encrypted at rest. Every user brings their own Anthropic and Greenhouse keys, so costs land on the right account.