Agent skill
Ashby Recruiting Workflows
This skill should be used when the user asks to "move candidate through pipeline", "schedule an interview", "manage applications", "track hiring progress", "source candidates", "advance to next stage", or mentions recruiting workflows in Ashby. Provides guidance on effective candidate pipeline management and recruiting best practices.
Install this agent skill to your Project
npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/design/ashby-recruiting-workflows-jjeremycai-claude-toolkit
SKILL.md
Ashby Recruiting Workflows
Comprehensive guidance for managing recruiting workflows in Ashby ATS. This skill covers candidate pipeline management, interview scheduling, application tracking, and hiring team coordination.
Core Workflow: Candidate Pipeline
The standard recruiting pipeline flows through these stages:
Sourced → Applied → Phone Screen → Interview → Offer → Hired
↓ ↓ ↓
Archived Archived Archived
Moving Candidates Through Stages
To advance a candidate:
- Get the application ID using
application_listorapplication_info - Get available stages using
interview_stage_listwith the job ID - Use
application_change_stagewith the target stage ID
# Example workflow
# 1. Find candidate's application
applications = application_list(candidateId="...")
app_id = applications[0]["id"]
# 2. Get available stages
stages = interview_stage_list(jobId=job_id)
next_stage = stages["Lead"] # or "Phone Screen", "Onsite", etc.
# 3. Move to next stage
application_change_stage(applicationId=app_id, interviewStageId=next_stage["id"])
Archiving (Rejecting) Candidates
When archiving an application, always provide an archive reason:
- Get archive reasons using
archive_reason_list - Use
application_change_stagewith an archived stage andarchiveReasonId
Common archive reasons include:
- Not qualified
- Position filled
- Candidate withdrew
- No response
- Failed assessment
Interview Scheduling Workflow
Scheduling a New Interview
- Identify the application using
application_list - Find available interviewers using
user_listoruser_search - Create the schedule using
interview_schedule_create
Required information:
- Application ID
- Interviewer user IDs (array)
- Start and end times (ISO 8601 format)
- Interview stage ID (optional but recommended)
interview_schedule_create(
applicationId="app-123",
interviewerUserIds=["user-1", "user-2"],
startTime="2024-01-15T14:00:00Z",
endTime="2024-01-15T15:00:00Z",
interviewStageId="stage-id"
)
Rescheduling Interviews
Use interview_schedule_update with the schedule ID:
interview_schedule_update(
interviewScheduleId="schedule-123",
startTime="2024-01-16T10:00:00Z",
endTime="2024-01-16T11:00:00Z"
)
Canceling Interviews
Always provide a reason when canceling:
interview_schedule_cancel(
interviewScheduleId="schedule-123",
reason="Candidate requested reschedule"
)
Candidate Management Best Practices
Adding Candidates
When creating candidates, include as much information as possible:
candidate_create(
name="Jane Smith",
email="jane@example.com",
phoneNumber="+1-555-0123",
linkedInUrl="https://linkedin.com/in/janesmith",
location="San Francisco, CA",
sourceId="referral-source-id"
)
Tracking Candidate Sources
Always attribute candidates properly:
- Get available sources using
source_list - Set source when creating candidates or applications
- Update source using
application_change_sourceif needed
Using Tags for Organization
Tags help filter and organize candidates:
# Get available tags
tags = candidate_tag_list()
# Add tag to candidate
candidate_add_tag(candidateId="...", tagId="senior-engineer-tag")
Common tag strategies:
- Skill-based: "python", "react", "data-science"
- Status-based: "high-priority", "passive", "referral"
- Source-based: "conference-2024", "hackathon"
Adding Notes
Document all candidate interactions:
candidate_add_note(
candidateId="...",
note="Initial phone screen completed. Strong technical background, moving to onsite.",
sendNotifications=False
)
Application Workflow Patterns
Sourcing New Candidates
- Create candidate with
candidate_create - Create application with
application_create - Add to appropriate initial stage
# Create and consider for job
candidate = candidate_create(name="...", email="...")
application_create(
candidateId=candidate["id"],
jobId="target-job-id",
sourceId="linkedin-sourcing"
)
Bulk Pipeline Review
To review current pipeline status:
# Get all active applications for a job
apps = application_list(jobId="...", status="Active")
# Group by stage for reporting
for app in apps:
stage = app["currentInterviewStage"]["name"]
candidate = app["candidate"]["name"]
# Process...
Transferring Applications Between Jobs
Use application_create to consider a candidate for additional jobs without losing existing application history.
Job Management
Job Status Workflow
Draft → Open → Closed/Archived
- Draft: Job visible internally, not on careers page
- Open: Actively recruiting, visible on careers page
- Closed: Position filled
- Archived: No longer relevant
Updating Job Status
# Close job when position is filled
job_set_status(jobId="...", status="Closed")
# Reopen if needed
job_set_status(jobId="...", status="Open")
Offer Workflow
Creating Offers
After interview rounds complete:
offer_create(
applicationId="app-123",
startDate="2024-02-01",
offerDetails="Senior Engineer role, $150k base + equity"
)
Tracking Offers
List and monitor offer status:
offers = offer_list(applicationId="app-123")
# Check offer status, pending approvals, etc.
Common Workflow Scenarios
Scenario: Phone Screen Completed
- Review notes from screening call
- Add note with
candidate_add_note - Move to next stage with
application_change_stage - Schedule onsite with
interview_schedule_create
Scenario: Candidate Withdrawal
- Get archive reasons with
archive_reason_list - Find "Candidate Withdrew" reason
- Archive with
application_change_stageincluding archive reason
Scenario: Internal Referral
- Create candidate with
candidate_create - Get referral source with
source_list - Create application with source attribution
- Add note crediting referring employee
Pipeline Analytics
Getting Pipeline Metrics
List applications by status to understand funnel:
# Active candidates
active = application_list(jobId="...", status="Active")
# Hired
hired = application_list(jobId="...", status="Hired")
# Archived (rejected)
archived = application_list(jobId="...", status="Archived")
Interview Load Analysis
Review upcoming interviews:
from datetime import datetime, timedelta
schedules = interview_schedule_list(
startTimeAfter=datetime.now().isoformat(),
startTimeBefore=(datetime.now() + timedelta(days=7)).isoformat()
)
Additional Resources
Reference Files
For detailed Ashby API patterns, consult:
references/api-patterns.md- Common API usage patterns and error handling
Tools Reference
Core tools for workflows:
candidate_*- Candidate managementapplication_*- Application lifecycleinterview_schedule_*- Schedulingjob_*- Job managementoffer_*- Offers
Recommended Agent Skills
Expand your agent's capabilities with these related and highly-rated skills.
agent-ops-spec
Manage specification documents in .agent/specs/. Use when user provides requirements, acceptance criteria, or feature descriptions that need to be tracked and validated against implementation.
agent-ops-state
Maintain .agent state files. Use at session start, after meaningful steps, and before concluding: read/update constitution/memory/focus/issues/baseline consistently.
agent-ops-spec
Manage specification documents in .agent/specs/. Use when user provides requirements, acceptance criteria, or feature descriptions that need to be tracked and validated against implementation.
agent-ops-testing
Test strategy, execution, and coverage analysis. Use when designing tests, running test suites, or analyzing test results beyond baseline checks.
agent-ops-testing
Test strategy, execution, and coverage analysis. Use when designing tests, running test suites, or analyzing test results beyond baseline checks.
agent-ops-state
Maintain .agent state files. Use at session start, after meaningful steps, and before concluding: read/update constitution/memory/focus/issues/baseline consistently.
Didn't find tool you were looking for?