Pipelines & automations
Org default pipeline, per-position overrides, kanban board, stage automations, and recruiter tasks under custom_pipelines.
Custom pipelines replace the single default hiring funnel with org-defined stages, automations, and a recruiter task inbox. Gated by custom_pipelines.
Settings → Pipelines (/dashboard/settings/pipelines) configures the org default template. Individual positions can override with their own template.
Feature gate
| Check | Location |
|---|---|
| Platform switch | platform_integration_settings.slug = custom_pipelines |
| Org grant | org_feature_grants row with granted: true |
| UI probe | trpc.pipelines.capabilities |
Without the grant, positions use legacy application status fields only — no kanban tab, no automations, no tasks.
Pipeline templates
Org default
Every org with the grant should seed a default template (trpc.pipelines.seedDefaultTemplate). The default ships with seven stages:
| Stage | Mapped status | Color |
|---|---|---|
| New | NEW | Slate |
| Reviewing | REVIEWING | Blue |
| Screening | SCREENING | Indigo |
| Interviewing | INTERVIEWING | Purple |
| Offer | OFFER_SENT | Amber |
| Hired | HIRED | Green |
| Rejected | REJECTED | Red |
Each stage maps to an underlying application status (mappedStatus). The kanban column label is customizable; status drives analytics, integrations, and survey triggers.
Available mapped statuses also include REFERENCE_CHECK, OFFER_PENDING, OFFER_ACCEPTED, OFFER_DECLINED, WITHDRAWN.
Per-position override
On the position editor, recruiters assign a specific pipelineTemplateId. If unset, the org default applies (isDefault: true template).
Position-specific templates (positionId set) inherit the same stage/automation model but scope to one job — useful for executive searches with extra stages.
Kanban board
The pipeline board lives on each position detail page (/dashboard/positions/[id] → Pipeline tab):
- Drag-and-drop candidates between stages
- Stage counts and aging indicators
- Link to Open pipeline settings when admin needs to edit template
Stage moves call applyApplicationStatusChange so downstream systems (ATS sync, surveys, automations) receive consistent status events.
Stage automations
Automations attach to individual stages in Settings → Pipelines via the stage automations panel.
Triggers
| Trigger | Fires when |
|---|---|
ENTER_STAGE | Candidate enters the stage |
IN_STAGE_FOR | Candidate remains in stage for delayDays |
Actions
| Action | Behavior |
|---|---|
MOVE_TO_STAGE | Auto-advance to configured target stage |
REJECT | Reject with configured reason |
SEND_CANDIDATE_EMAIL | Send template email to candidate |
CREATE_TASK | Open recruiter task assigned to user(s) |
NOTIFY_USERS | Email notify configured team members |
Automations can be toggled active: false without deletion. Config is a JSON bag per action type (target stage ID, email template ID, assignee IDs, etc.).
Example automations
- Enter Screening → send "next steps" candidate email
- In Reviewing for 3 days → create task "Follow up with HM"
- Enter Offer → notify org admins
- In Interviewing for 7 days → move to Rejected with stale reason
Recruiter tasks
Tasks are created manually or by CREATE_TASK automations. Surfaces:
| Surface | Path |
|---|---|
| Task inbox | /dashboard/tasks |
| Nav badge | Open task count via trpc.tasks.myOpenCount |
Task fields: title, assignee, due date, linked candidate/position/application, status (OPEN, DONE, DISMISSED).
Assignment emails use the template email service. Completing a task from the inbox clears the nav badge.
API namespace
| Router | Procedures |
|---|---|
trpc.pipelines | capabilities, listTemplates, getTemplate, getForPosition, seedDefaultTemplate, updateTemplate, stage CRUD, automation CRUD |
trpc.tasks | capabilities, myOpenCount, myTasks, complete, dismiss, create |
Interaction with other flags
| Flag | Interaction |
|---|---|
structured_interviews | Enforcement can block stage advance until scorecards complete |
candidate_surveys | NPS surveys fire on status changes driven by stage moves |
job_governance | Job templates can set default pipelineTemplateId |
Setup checklist
- Confirm
custom_pipelinesgrant - Open Settings → Pipelines → seed default if empty
- Customize stage names/colors for your hiring process
- Add automations on high-volume stages (Reviewing, Screening)
- Train recruiters on
/dashboard/tasksinbox - Optionally override pipeline on specific positions
Troubleshooting
| Issue | Fix |
|---|---|
| No kanban tab | Grant + seed default template |
| Drag fails | Check permissions; verify application linked to position |
| Automation didn't fire | Confirm active: true; check worker/queue health |
| Wrong stage after move | Verify mappedStatus mapping for analytics |
Related docs
- Interview kits — scorecard enforcement on advance
- Notifications — digest settings for task emails
- Job governance — template default pipelines

