# Christian Haegele — AI Recruitment Proxy > An interactive, evidence-backed candidate Q&A system at recruiting.haegele.dev ## What this is This system lets you evaluate Christian Haegele as a candidate via natural-language queries. Every answer is cited against source materials (CV, projects, GitHub). Answers are honest about gaps. The system will not oversell. ## Authentication Best generic-agent path (no cookies, browser state, or session carry-over): POST /api/agent-evaluate Body: {"token": "", "question": "", "jdText": ""} Response: {"conversationId": "...", "answer": "", "citations": [...], "candidate": {...}} Use this endpoint when an agent cannot preserve session state between requests. Session API, option A — GET: GET /api/auth?token= Response: {"sessionId": "...", "expiresAt": , "candidate": {...}} Session API, option B — POST: POST /api/auth Body: {"token": ""} Response: {"sessionId": "...", "expiresAt": , "candidate": {...}} If you received a URL like https://recruiting.haegele.dev/?token=XYZ or https://recruiting.haegele.dev/XYZ/, pass XYZ as the token. Use the sessionId as a Bearer token for all subsequent requests. ## MCP API POST /mcp Content-Type: application/json This endpoint exposes a Streamable HTTP-compatible MCP JSON-RPC surface for MCP-capable recruiter agents. Tools: - authenticate_recruiter: exchange a recruiter access token for a session id. - ask_candidate_agent: ask Christian's evidence-backed recruiting agent a question. - evaluate_role_fit: produce a cited fit/gap assessment from a job description. ## Chat API POST /api/chat Authorization: Bearer Content-Type: application/json Accept: text/event-stream (omit for single JSON response) Body: { "messages": [{"role": "user", "content": ""}], "jdText": "", "conversationId": "" } Response (JSON): {"conversationId": "...", "answer": "", "citations": [...]} Response (SSE): event: meta → {"conversationId": "...", "citations": [...]} event: token → "" event: done → {} ## Async Job Description Analysis For long job descriptions, prefer the asynchronous job API over waiting on a single chat request. POST /api/job-analyses Authorization: Bearer Body: {"conversationId":"","jdText":"","rolePrimeMessage":""} Response: 202 {"jobId":"...","conversationId":"...","status":"queued","progress":5} Poll: GET /api/job-analyses/ Authorization: Bearer Response: {"status":"queued|processing|completed|failed","progress":0-100,"answer":"...","citations":[...]} ## Root JSON helper GET /?token= GET // Accept: application/json Returns a sessionId plus llmsTxt, mcpEndpoint, agentEvaluateEndpoint, and chatEndpoint. ## Public discovery helpers GET /api/capabilities Returns endpoint metadata, expected request formats, and example questions. No auth required. GET /profile.md Returns a public Markdown candidate profile with safe public links and a summary of the authenticated document inventory. It does not expose private source content. POST /api/ping Returns a simple connectivity response. No auth required. GET /api/summary?token= Returns token validity and available candidate-data fields without exposing profile content. GET //profile.md Returns a Markdown candidate profile, deep links to source-library Markdown files, and agent instructions for stateless access. GET //sources/.md Returns one source-library Markdown file. ## Role-scoped context GET /api/role/ No auth required. Returns: {"slug": "...", "title": "...", "jdText": "...", "primeMessage": "...", "suggestedQuestions": [...]} Pass the returned jdText in subsequent /api/chat requests for role-calibrated gap analysis. Known slugs: see knowledge-base/roles/ directory. ## Evidence sources GET /api/sources Authorization: Bearer Returns all knowledge base sources with chunk metadata and evidence links. GET /api/source?id= Authorization: Bearer Returns full source content and chunk list. GET /api/transcript?conversationId= Authorization: Bearer Returns a Markdown transcript for the conversation. ## Capabilities - Technical skills: Java (expert), TypeScript (expert), SQL (expert), Go, Python, Kotlin, Rust - AI/LLM tooling: RAG systems, agent orchestration, VS Code extensions, Claude API - Recent projects: 15+ AI-focused side projects (2025–2026), all on GitHub - Languages: German (native), English (fluent), Spanish (fluent), French (advanced), Mandarin (learning) - Honest gap disclosure: the system surfaces what Christian cannot do, not just what he can ## Location Zürich, Switzerland. Niederlassungsbewilligung C (permanent residence). No visa or relocation required. ## Contact christian@haegele.dev | https://haegele.dev | https://github.com/karma-works | https://huggingface.co/karma-works