Skip to main content

Jobs: Interview Scheduling

Problem Statement

Scheduling interviews requires coordinating availability between candidates and interviewers, selecting time slots, choosing interview format (video/phone/in-person), and sending calendar invitations.

Why Human-Only Semantics Fail

  • Calendar availability grids are visual components
  • Time slot selection uses click-based interaction
  • Interview format options don't declare their requirements (e.g., video link generation)
  • "Confirm" sends calendar invites as a side-effect

Why Scraping Fails Here

  • Calendar components render as complex grid layouts
  • Available slots are fetched dynamically via API
  • Timezone handling varies between components
  • Calendar invitations are sent server-side (iCal/Google Calendar API)

How AXAG Eliminates Scraping

interview.schedule declares slot selection, format choice, and the side-effects of confirmation (calendar invite, notification).

Annotated UI Example

Jobs — schedule interview
<button
axag-intent="interview.schedule"
axag-entity="interview"
axag-action-type="write"
axag-required-parameters='["application_id","slot_id","format"]'
axag-optional-parameters='["interviewer_notes","candidate_timezone"]'
axag-preconditions='["application must be in interview stage","slot must be available"]'
axag-postconditions='["interview scheduled","calendar invites sent to all participants"]'
axag-risk-level="medium"
axag-confirmation-required="true"
axag-idempotent="true"
axag-side-effects='["calendar_invite","email_notification"]'
axag-description="Schedule an interview for a job application"
>Confirm Interview</button>

Semantic Manifest Excerpt

Manifest — interview.schedule
{
"intent": "interview.schedule",
"entity": "interview",
"operation_id": "interview_schedule",
"action_type": "write",
"parameters": {
"application_id": { "type": "string", "required": true },
"slot_id": { "type": "string", "required": true },
"format": {
"type": "string",
"required": true,
"enum": ["video","phone","in_person"]
},
"interviewer_notes": { "type": "string", "required": false },
"candidate_timezone": { "type": "string", "required": false }
},
"preconditions": [
"application must be in interview stage",
"slot must be available"
],
"postconditions": [
"interview scheduled",
"calendar invites sent to all participants"
],
"risk_level": "medium",
"confirmation_required": true,
"idempotent": true,
"side_effects": ["calendar_invite", "email_notification"]
}

Generated Tool Example

Tool — interview_schedule
{
"tool_name": "interview_schedule",
"description": "Schedule an interview for a job application",
"input_schema": {
"type": "object",
"properties": {
"application_id": { "type": "string" },
"slot_id": { "type": "string" },
"format": { "type": "string", "enum": ["video","phone","in_person"] },
"interviewer_notes": { "type": "string" },
"candidate_timezone": { "type": "string" }
},
"required": ["application_id", "slot_id", "format"]
},
"safety": {
"risk_level": "medium",
"confirmation_required": true,
"idempotent": true,
"side_effects": ["calendar_invite", "email_notification"]
}
}

Constraints & Safety Notes

  • Confirmation required: scheduling sends calendar invites to external participants
  • Idempotent: re-scheduling to the same slot is a no-op
  • Side-effects include external notifications (can't be silently tested)
  • video format auto-generates a meeting link as part of the postcondition
  • Candidate timezone is used to display correct times in the invite