Free for 30 days on Scale.Start free
Hiring pipeline, monthly cycle
Every step in the template

Hiring pipeline, monthly cycle

A monthly-cycling hiring pipeline where no candidate falls through the cracks for 5+ days, every interview has a scorecard, every closed role has a why, and every month ends with honest funnel conversion data the team can act on.

Outcome

A monthly-cycling hiring pipeline where no candidate falls through the cracks for 5+ days, every interview has a scorecard, every closed role has a why, and every month ends with honest funnel conversion data the team can act on.

TimeOngoing, ~30 min/week + 1 hr at month endDifficultybeginnerForFounders + first-time hiring managers + early-stage recruiters running 2-8 concurrent open roles.
How this works

Open it, hand it to your agent, walk the steps.

Paste this to your agent (Claude / Cursor / Codex)
You are the agent running on the "Hiring pipeline" template workspace. The user (hiring manager / founder / recruiter) has connected you via MCP at your-org/hiring-pipeline.

Your job: operate the monthly hiring cycle. Track candidate flow, draft Friday memo, compute funnel at month end.

User-loop protocol:
- You propose. The user decides stage transitions and rejections. Never move a Candidate row's stage, never close a Roles row, never change a Scorecard score.
- When a Candidate row's last_touched > today - 5 days AND stage in (Screened, Interview loop, Offer), comment on the row: "$candidate stuck at $stage since $last_touched. Next step?" Tag the row's owner.
- Every Friday morning (or "draft friday memo"), read Candidates rows changed this week, Scorecards added this week. Draft Friday memo doc, section "Week of $monday-date". Structure: (1) Hires landed, (2) Candidates moved (stage transitions), (3) Stuck candidates + reason, (4) Decisions needed before next week, (5) New roles opening.
- When a Scorecards row lands, read all Scorecards for that candidate. If 2+ interviewers said "no hire", flag the candidate in the Friday memo as "ready for rejection decision".
- At month-end (or "month retro"), for each Role row closed this month, compute funnel: sourced, screened, interviewed, offered, hired. Compute global: time-to-hire by role, sourcing channel performance. Draft Month retro: per-role funnel, channel ROI, hires landed vs. plan.
- End of every working session, write 1-paragraph Status note: who you nudged, what's pending, what to pick up next.

Don't touch:
- Candidates.stage (always user's call).
- Scorecards rows once submitted (interviewers own them).
- Roles.status (hiring manager's call).

First MCP tool calls:
1. list_surfaces(workspace_slug="hiring-pipeline")
2. list_rows(workspace_slug="hiring-pipeline", surface_slug="roles")
3. list_rows(workspace_slug="hiring-pipeline", surface_slug="candidates")
4. get_doc(workspace_slug="hiring-pipeline", surface_slug="status")
The template · 4 steps

Top to bottom. Each step has tasks, pointers, gotchas.

Seed Roles with what's open

30 min

List every active req. For each, fill role title, level (junior / senior / staff), must-have skills (3-5 bullets), open_since, owner, target_close_date. The point: the team needs one place to see 'what are we hiring for' that doesn't require LinkedIn or a job board scrape.

Tasks
  • List every active req
  • Create one Roles row per req: title, level, must-have skills, owner, open_since, target_close
  • Add a 'why' column: 1 sentence on what this hire unblocks
  • If a role has been open >90 days, mark stage=On hold and add reason in notes
Gotchas
  • Don't list 'maybe' roles. If you're not actively hiring for it, it doesn't get a row.
  • If a role has been open >180 days, kill it. Roles that don't close in 6 months either don't have urgency or have wrong scope.

Seed Candidates with the live pipeline

1 hr

Populate Candidates with every candidate you're actively considering across all roles. Don't backfill historical rejects. Stage them honestly: most pipelines have 60% in Sourced, 25% in Screened, 10% in Interview loop, 5% in Offer.

Tasks
  • List active candidates per role (across LinkedIn, your inbox, recent applications)
  • Create one Candidates row per active candidate: name, role, stage, last_touched, next_step, owner, source_channel
  • Mark `pii_minimized: true` on rows where you're tracking less PII than usual (some founders prefer initials only)
  • Skip rejects from >2 weeks ago; they don't help the live pipeline
Gotchas
  • Don't add candidates as rows before you've made first contact. Sourcing leads belong in your sourcing tool, Candidates rows are for live pipeline.
  • Limit PII: name + role + LinkedIn URL is usually enough. Don't paste resumes or contact info into rows; link to the source instead.

Walk one Friday memo with your agent

45 min (week 1 calibration)

Trigger a Friday memo on a real Friday. The memo's value is making invisible work visible: which candidates are stuck, which need decisions before next week. The first Friday calibrates the agent's tone (executive-summary vs. status-dump).

Tasks
  • Pick a real Friday with a week of pipeline changes behind it
  • Ask your agent: 'Draft this Friday's memo'
  • Read the draft; mark up: missing decisions, wrong tone, redundant content
  • Re-ask: 'Apply comments and replace the section'
  • Sign off; share the memo with hiring manager + founder via MCP send_message
Gotchas
  • Don't auto-reject candidates. The agent flags 'ready for rejection decision'; the human decides and sends the rejection email themselves.
  • If the memo is identical week-over-week, the pipeline is stalled. Surface that as a meta-observation.
Agent prompt for this step
Read Candidates rows where stage_changed_at >= today - 7 days OR last_touched >= today - 7 days.

Compute: rows that moved Sourced → Screened, Screened → Interview loop, Interview loop → Offer, Offer → Hired (count per transition).

Identify stuck rows: stage in (Screened, Interview loop, Offer) AND last_touched < today - 5 days.

Read Scorecards rows added this week. For each candidate with 2+ "no hire" votes, flag for rejection decision.

Draft Friday memo section "Week of {monday_date}". Structure:

1. **Hires landed** (any Candidates moved to Hired this week)
2. **Candidates moved** (stage transitions, with row links)
3. **Stuck** (rows stuck >5 days, each with last_touched + 1-line reason)
4. **Ready for decision** (candidates with 2+ "no hire" scorecards or Offer-stage with no response in 7 days)
5. **Decisions needed before next week** (3-5 specific decisions)

Keep it under 250 words. Hiring manager reads this in 2 min before Monday standup.

Run the month retro + fork

1 hr drafting + 30 min meeting + 30 min forking

Last working day of the month, your agent computes per-role funnel and drafts the Month retro. The honest data here is conversion: sourced → screened → interviewed → offered → hired ratios per role. Over time you'll see which roles are hard (low offer rate), which sourcing channels work (which channel produces hires), and where the team is leaking (lots of offers, few accepts).

Tasks
  • Ask your agent: 'Draft Month retro'
  • Review per-role funnel; sanity-check the conversion numbers
  • Hold a 30-min retro with hiring manager(s): what's working, what's leaking
  • Fork the workspace, name it 'Hiring pipeline, $next-month'
  • Confirm fork carried still-open Roles + still-active Candidates + seeded Status with retro
Gotchas
  • Funnel data needs 10+ candidates per role to be meaningful. If a role had 4 candidates, the conversion math is noise.
  • Don't shame interviewers based on scorecards. Interview calibration is real; some interviewers run hard, some soft. The data informs calibration meetings, not performance reviews.
Agent prompt for this step
Read Candidates and Roles for this month.

For each Role row, compute:
- Sourced: count of Candidates rows ever in stage=Sourced for this role
- Screened: count ever in stage=Screened
- Interviewed: count ever in stage=Interview loop
- Offered: count ever in stage=Offer
- Hired: count now in stage=Hired
- Rejected: count now in stage=Rejected

Compute conversion: sourced→screened, screened→interviewed, interviewed→offered, offered→hired.

Group Candidates by source_channel. Compute per channel: candidates_sourced, candidates_hired, channel_conversion.

Draft Month retro doc:

1. **Hires landed this month** (count + list with role)
2. **Per-role funnel** (table: role | sourced | screened | interviewed | offered | hired | conversion)
3. **Channel ROI** (table: channel | sourced | hired | conversion%)
4. **Time to hire** (median days, source-to-offer per role)
5. **Where the funnel leaks** (3 bullets: stages with biggest drop-off)
6. **Proposals for next month** (top 3 changes: more sourcing on channel X, raise offer at stage Y, etc.)

Stop before "Decisions made". The hiring manager makes those at the retro meeting.
FAQ

Common questions on this template.

When do I graduate to a real ATS like Greenhouse or Ashby?
Around 50 employees, or when you have 8+ concurrent roles, or when you need DEI dashboards / OFCCP reporting / structured-interview kits. Below that, this workspace is faster + cheaper + more flexible. The data shape (Roles + Candidates + Scorecards) maps cleanly to Greenhouse fields if you migrate later.
How do I keep candidate PII safe?
Limit what's in the row: name, role, LinkedIn URL, source channel, current stage. Don't paste resumes, salary history, or personal contact info. Use the `pii_minimized` row flag to track which rows are using initials only (some founders prefer this). For email comms, use your inbox; the workspace tracks state, not communications.
Can the agent send rejection emails?
No, by design. Rejections are high-judgment communication; the agent flags 'ready for rejection decision' but the human writes and sends the email. Auto-rejection is how candidates get the form-letter experience that hurts your employer brand for years.
How do I handle two stages at once (e.g. interview loop + reference checks in parallel)?
Add a `parallel_stage` column. The primary stage is the funnel position (e.g. Interview loop), the parallel_stage tracks side-quests (Reference checks pending). The Friday memo treats parallel_stage as informational; it doesn't trigger the 5-day stuck-flag.
What if I have 8+ open roles?
You're at the edge of this template's intended scale. Two options: (1) fork per team or per function (engineering pipeline, GTM pipeline) so each Friday memo is focused, or (2) graduate to a real ATS. Once you're juggling 30+ candidates across 10+ roles, the value of structured ATS workflows starts to outweigh the flexibility of a workspace.

Open this template as a workspace.

We mint a fresh copy in your org with the steps as table rows, the pointers as a separate table, and the brief as a doc. Bring your agents, start checking off boxes.