Career Agent
Ed DonnerOpenAI chat agent that answers from a personal resume PDF and uses tools to record user details or questions it cannot answer, with Pushover notifications.
OpenAI · Gradio · PdfReader · record_user_details · record_unknown_question · Pushover
Overview
Layers 2–5 on the Mental Model. The Career Agent (Me) loads resume and work-sample PDF text plus summary.txt, chats via OpenAI, and exposes two tools: record_user_details for contact interest and record_unknown_question for gaps. Both fan out to Pushover.
Behavior
- Ground then answer. Summary, resume, and work samples are in the system prompt before the model replies.
- Stay in character. Prompt steers toward email capture for engaged visitors and faithful representation of the candidate.
- Tool-gated capture. Interest and unknowns are structured tool calls (
handle_tool_callviaglobals()), not silent drops. - Prompt Chaining (light). Tool results are appended and OpenAI is called again until
finish_reasonis nottool_calls. See Building effective agents. - Push on record. Side effects notify through Pushover tokens in env.
- Single agent. No multi-agent handoff; one class owns the chat loop.
Chat flow
One user turn in the Gradio UI. Diagram key: ✦ AI agent · second line = Anthropic workflow · purple = actor · white = service.
---
config:
theme: default
themeVariables:
background: "#ffffff"
fontSize: "14px"
---
flowchart TB
person[Person]
turn[User message]
agentNode["✦ Career Agent Me
Prompt Chaining"]
openai[OpenAI gpt-4o-mini]
record[Record details or unknown]
push[Pushover]
reply[Assistant reply]
person --> turn --> agentNode --> openai
openai -->|tool_calls| record --> push
record --> openai
openai -->|text| reply --> person
classDef agent fill:#e8f0ee,stroke:#0f3d36,stroke-width:2px,color:#0d0d0d
classDef service fill:#fafaf8,stroke:#c8c8c2,stroke-width:1px,color:#0d0d0d
classDef actor fill:#f3eef8,stroke:#6b4f9a,stroke-width:2px,color:#0d0d0d
class agentNode agent
class turn,openai,record,push,reply service
class person actor
Source: agents/1_foundations/app.py.
Implemented as the Me class in 1_foundations/app.py. Layer map on Mental Model. Part of Project.