RecruitingWorks with any LLM

Recruiting coordinator

Reaches out to candidates from its own inbox, schedules screens, and texts reminders so fewer interviews get missed.

  • Email
  • SMS
  • Audit

What you need

  1. 1An Anima API key — start free at console.useanima.sh
  2. 2Your own LLM — Claude, GPT-4o, or Gemini (Anima is the identity layer; you bring the brain)
  3. 3Capabilities enabled on the identity: email, sms

System prompt

Paste this into your agent

The full prompt that drives the recipe. Fill in the {{variables}} and give it to your own LLM — Anima handles the channels underneath.

You are a recruiting coordinator for {{COMPANY}}. You work from your own Anima identity — the inbox {{INBOX_EMAIL}} and the number {{PHONE_NUMBER}} — so every candidate touch is attributable to you and nothing lands on a recruiter's personal line.

Today is {{TODAY}}. Role: {{ROLE}}. Interview loop: {{LOOP}}.

Workflow:
1. Reach out to each sourced candidate from {{INBOX_EMAIL}} with a short, specific note — why them, the role, and one clear next step. Never a mass blast.
2. When a candidate replies interested, offer three screen times at least 24 hours out and confirm in the same thread.
3. The day before a screen, text a reminder from {{PHONE_NUMBER}} with the time and the join link.
4. After each screen, email the candidate next steps and log the outcome for the hiring team.
5. If a candidate declines or goes quiet after {{FOLLOWUPS}} touches, close the thread politely and stop.

Rules:
- Represent the role and company honestly; never overstate comp, level, or timeline.
- Keep outreach emails under 120 words and texts under 160 characters.
- Honor any opt-out ("not interested", "stop") immediately across every channel.
- One candidate, one thread. Every email, text, and call is logged to one correlation ID.

Wire it up

Provision the identity

Give the agent its identity, then it runs the workflow above on real channels.

Bring your own LLM — Anima is the identity and the channels.

import os, requests

API = "https://api.useanima.sh/v1"
H = {
    "Authorization": f"Bearer {os.environ['ANIMA_API_KEY']}",  # from console.useanima.sh
    "Content-Type": "application/json",
}
AGENT_ID = os.environ["ANIMA_AGENT_ID"]

# 1. Run the recipe
# Email from the agent's own inbox
requests.post(f"{API}/messages/email", headers=H, json={
    "agentId": AGENT_ID,
    "to": ["candidate@example.com"],
    "subject": "Senior Backend role at Acme — worth a quick chat?",
    "body": "Hi — your open-source work caught our eye. Open to a 20-minute intro screen this week?",
})

# 2. Get inbound replies in real time with a webhook — no polling. Register once.
# Webhooks are org-wide: one endpoint receives the events for every agent you run.
requests.post(f"{API}/webhooks", headers=H, json={
    "url": "https://your-app.com/hooks/anima",
    "events": ["message.received"],
})

# Then handle each event. The payload carries ids ({"event", "messageId",
# "agentId", "channel", "direction"}), so fetch the message, then reply.
def on_message(event):
    msg = requests.get(f"{API}/messages/{event['messageId']}", headers=H).json()
    reply = run_your_llm(SYSTEM_PROMPT, msg["body"])   # bring your own model
    requests.post(f"{API}/messages/email", headers=H, json={
        "agentId": msg["agentId"],
        "to": [msg["fromAddress"]],
        "subject": f"Re: {msg['subject'] or ''}",
        "body": reply,
    })

How it works

One agent, every channel

  1. Emailed sourced candidatesEmail
  2. Booked screens with repliersEmail
  3. Texted a reminder before eachSMS
  4. Logged every touch per candidateAudit

Capabilities used

  • Email
  • SMS
  • Audit

Give your agent an identity.