Site catalog

Handshake for AI Agents

joinhandshake.com: 26 mapped actions across 12 screens

Handshake (joinhandshake.com) is the career platform that connects college students with employers. Through Rindler, your agent works both sides of it: the public job board, where it can search and filter openings, open a job's details, and start an application, and the signed-in employer workspace, where it can review applicants, search the student Talent directory, message candidates, and manage which schools a posting reaches.

The mapping covers 26 actions across 12 screens. That includes the operational employer loops that normally eat a recruiter's day: opening a posting's applicant list, replying inside an application thread, requesting approval at new schools, and pushing an existing job out to more campuses.

What's mapped

Two surfaces share one session. The public board needs no account: search_jobs runs a keyword search, filter_jobs applies a facet like Remote, view_job opens a specific opportunity, and apply_to_job clicks Apply on the job detail page (which routes to Handshake's access/login screen for sign-in or account creation).

The employer side is the deeper half. From view_employer_home, your agent can list its own postings, open one, and pull up its applicants (view_job_applicants), then search them by name and reply through the application thread. Beyond applicant handling, it can search the Talent directory of student candidates (search_talent), send proactive outreach with message_student, open the create-job wizard with start_job_post, and manage campus reach: check approval status at every school, request approval at a new one, and add schools to an existing posting with post_job_to_additional_schools.

Quirks worth knowing

These come straight from the mapped behavior, not guesswork:

  • **The employer graph hides behind one door.** A session lands on the public job board. Your agent must call view_employer_home first; without it, jobs, talent, conversations, and school approvals are unreachable.
  • **School approval gates everything on the employer side.** Talent search and messaging only surface students at schools where the employer is approved (and who are visible to employers). request_school_approval is a real side effect reviewed by career centers in 1 to 5 business days, so search the school directory first so the intended row is on screen before firing it.
  • **Messaging targets the first match.** message_student messages the first result matching student_name, so make the name specific enough to uniquely identify the target. Replies sent via reply_to_applicant do not count against proactive message limits.
  • **Filters are dynamic and some lists settle slowly.** Call list_available_filters_job_listing in context instead of assuming a fixed filter set. The applicants list hydrates slowly (the search action builds in a leading wait), and after post_job_to_additional_schools the requested-schools table updates asynchronously, so allow around 20 seconds before verifying.

Signing in

Handshake auth is an email one-time code flow at app.joinhandshake.com/login. The mapped login action takes an email and signs in with the code, which you supply through Rindler's staged Connect form. This bypasses Google and Apple SSO for any account that also has email access, so your agent never has to drive a third-party identity popup.

The split is clean: browsing the public board (search_jobs, filter_jobs, view_job) works without a session, while the entire employer surface, from view_employer_home through applicants, talent, messaging, and school approvals, requires one. apply_to_job sits on the boundary: it starts from the public job detail page and hands off to the access/login screen.

Reading results

Every step returns a resolved screen with structured results, so your agent reads records instead of scraping HTML. On the public side those screens are job_listing (the searchable, filterable board), job_detail (one opportunity), and apply_modal (the application handoff).

The employer side resolves to its own screen family: emp_dashboard for the home view, emp_jobs_list and emp_job_detail for postings, emp_job_applicants for a posting's candidates, emp_talent for the student directory, emp_conversations for the inbox (including the Sent folder), emp_job_post_wizard for the multi-step create-job flow (drive it interactively, not as one scripted shot), and emp_school_approvals plus emp_job_schools for campus approval status overall and per posting. The screen name in each response tells your agent exactly where it landed, which matters on a site where the public board and the employer workspace look nothing alike.

Example session

start_session(url: "https://joinhandshake.com")

# Public board, no sign-in needed
dispatch_action(action: "search_jobs", params: { "query": "..." })
dispatch_action(action: "view_job", params: { "job_title": "..." })

# Employer side, after email-OTP sign-in
dispatch_action(action: "view_employer_home")
dispatch_action(action: "search_talent", params: { "query": "..." })
dispatch_action(action: "message_student",
  params: { "student_name": "...", "subject": "...", "message": "..." })

close_session()

Every mapped action

Generated from the live site config. 19 of 26 actions require a signed-in session.

ActionWhat it does
apply_to_jobApply to a job on Handshake by clicking the 'Apply' link on the job detail page. This action navigates to the access/login screen for authentication or account creation.
capture_login
filter_jobsFilter jobs by selecting a filter option (e.g., 'Remote') on the Handshake job listings page. This action applies a job filter and navigates to the filtered results.
list_available_filters_job_listingList the filters/facets available on the CURRENT listing page. The filter set is dynamic and depends on the selected category, so always call this in context rather than assuming a fixed set.
loginSign in to Handshake with an email one-time code (the code is supplied by the user via the staged Connect form). Bypasses Google/Apple SSO for any account that also has email access.
message_studentauthSend a direct message to a specific student found via Talent search (proactive employer outreach). VERIFIED end-to-end 2026-07-15. REQUIRES the employer approved at the student's school AND the student visible to employers. Give student_name specific enough to uniquely identify the target; messages the FIRST matching result.
post_job_to_additional_schoolsauthAdd more schools to an existing job posting from the job's Schools tab: type the school, pick it from the dropdown (picks accumulate as chips), then click Post to submit. Proven end-to-end 2026-07-14 (five schools posted in one batch; the requested-schools table updates asynchronously, allow ~20s before verifying). Side effect: shares the posting with each school's career center for review.
reply_to_applicantauthReply to a job applicant through their application thread (replies to applicants do not count against proactive message limits). Transcribed from a live capture on a real application; the Send step itself has not been fired autonomously yet, so supervise the first live send.
request_school_approvalauthRequest employer approval at a school (career centers review in 1-5 business days). Side effect: sends the approval request; search for the school first so the intended row is on screen.
save_jobauth
search_applicantsauthSearch applicants by name on the job applicants screen. The applicants list hydrates slowly; the leading wait prevents typing into an unfiltered list (5-round battery flake, 2026-07-14).
search_jobsSearch for jobs using the search textbox on the Handshake job listings page.
search_school_directoryauthFilter the school directory by school name.
search_talentauthSearch the Talent candidate database by keyword (name / skill / major). Only surfaces students at schools where this employer is approved AND who are visible to employers.
start_job_postauthOpen the create-job wizard (description-first flow with autofill). The wizard is multi-step; drive it interactively rather than as a single scripted action.
submit_applicationauth
view_applicant_conversationsauthOpen the employer messages inbox where applicant DMs arrive.
view_employer_homeauthOpen the employer home dashboard: the entry point to the authed employer surface (jobs, talent, conversations, school approvals). The public job board is the session's landing screen, so without this the whole employer graph is unreachable.
view_employer_jobauthOpen one of your own job postings from the employer jobs list.
view_jobView the details for a specific job opportunity from the Handshake opportunities listing screen.
view_job_applicantsauthOpen the applicants list for one of your job postings.
view_job_school_statusauthOpen the per-school posting status (Approved/Pending) for one of your job postings.
view_my_jobsauthOpen the employer job postings list (requires an employer session).
view_school_approvalsauthOpen the school directory showing your employer approval status at every school.
view_sent_messagesauthSwitch the employer inbox to the Sent folder.
view_talentauthOpen the Talent directory of student candidates (only students at schools where the employer is approved appear).

Screens and structured records

  • apply_modal returns structured fields records
  • emp_conversations (navigation screen)
  • emp_dashboard (navigation screen)
  • emp_job_applicants (navigation screen)
  • emp_job_detail (navigation screen)
  • emp_job_post_wizard (navigation screen)
  • emp_job_schools returns structured fields, container records
  • emp_jobs_list returns structured fields, container records
  • emp_school_approvals returns structured fields, container records
  • emp_talent returns structured fields, container records
  • job_detail (navigation screen)
  • job_listing returns structured fields, container records