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_homefirst; 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_approvalis 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_studentmessages the first result matchingstudent_name, so make the name specific enough to uniquely identify the target. Replies sent viareply_to_applicantdo not count against proactive message limits. - **Filters are dynamic and some lists settle slowly.** Call
list_available_filters_job_listingin context instead of assuming a fixed filter set. The applicants list hydrates slowly (the search action builds in a leading wait), and afterpost_job_to_additional_schoolsthe 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.
| Action | What it does |
|---|---|
| apply_to_job | Apply 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_jobs | Filter 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_listing | List 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. |
| login | Sign 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_studentauth | Send 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_schoolsauth | Add 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_applicantauth | Reply 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_approvalauth | Request 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_applicantsauth | Search 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_jobs | Search for jobs using the search textbox on the Handshake job listings page. |
| search_school_directoryauth | Filter the school directory by school name. |
| search_talentauth | Search 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_postauth | Open 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_conversationsauth | Open the employer messages inbox where applicant DMs arrive. |
| view_employer_homeauth | Open 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_jobauth | Open one of your own job postings from the employer jobs list. |
| view_job | View the details for a specific job opportunity from the Handshake opportunities listing screen. |
| view_job_applicantsauth | Open the applicants list for one of your job postings. |
| view_job_school_statusauth | Open the per-school posting status (Approved/Pending) for one of your job postings. |
| view_my_jobsauth | Open the employer job postings list (requires an employer session). |
| view_school_approvalsauth | Open the school directory showing your employer approval status at every school. |
| view_sent_messagesauth | Switch the employer inbox to the Sent folder. |
| view_talentauth | Open the Talent directory of student candidates (only students at schools where the employer is approved appear). |
Screens and structured records
apply_modalreturns structured fields recordsemp_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_schoolsreturns structured fields, container recordsemp_jobs_listreturns structured fields, container recordsemp_school_approvalsreturns structured fields, container recordsemp_talentreturns structured fields, container recordsjob_detail(navigation screen)job_listingreturns structured fields, container records