Build
The capstone project
No new architecture today. lesson5_agent_hardened.py is the finished agent — everything from here is using it for real and, if you want to push further, extending it.
Run it on 3 tasks you actually chose
Not example tasks from this lesson — 3 things you genuinely wanted an answer to or a file produced for, today, before you opened this course. Good categories that tend to work well with the 4 tools you have:
- A research question you were actually curious about (
web_search + fetch_url do the heavy lifting) - A small file-processing task on something already on your machine (
read_file + run_python) - A "figure this out and write it down" task that needs a mix of lookup and computation
Phrasing changes agent behavior more than you'd expect
"What's the latest stable Node.js version?" and "Check what Node.js version I should use for a new project and explain why" produce noticeably different tool-call patterns from the same agent — the second phrasing invites more research and reasoning before answering. Try rephrasing one of your 3 tasks after you've run it once and compare.
Where it will still struggle
Be honest with yourself about this, out loud, in the notes you keep from this run. Likely candidates, given the 4 tools you built: ambiguous multi-part tasks where it does part of the job well and silently drops another part; tasks that need a tool you don't have (image understanding, sending an email, anything requiring an account login); and tasks where run_python's output is genuinely hard to interpret without seeing it (a plot, for instance — you have no tool that returns anything but text).
You ask the agent to "find 3 papers about X and email me a summary." It searches, finds papers, writes a good summary — and then just prints the summary instead of emailing anything. Why?
This is actually correct behavior, not a bug: the agent can only act through tools you gave it. It has no way to send an email, so the honest thing to do — and generally what a well-prompted agent does — is complete the part it can and be upfront that it can't do the rest. If you wanted the email sent, that's a 5th tool you'd need to build, which is exactly the stretch challenge below.
Stretch challenge: give your agent a skill you designed
Add a 5th tool that does something specific to your own work — a Notion API reader, a GitHub repo summarizer, a database query tool, or a send_email tool via SMTP or an email API. Write the schema and implementation yourself (no copy-paste from earlier lessons — this is where you find out if the tool-design instinct from Lesson 2 actually stuck). The tool must be successfully called by the agent in at least one real task, and you should be able to point to a run where it clearly wouldn't have completed the task without your new tool.
Ship it
Record (screenshot or terminal capture) one full run where the agent completes a task you gave it, end to end, using only tools it called itself. That's the artifact — a real agent, doing something you needed, that you built and understand completely.
Ship Prompt: Share one before/after: what the task was, and what surprised you about how the agent reasoned through it. What's the next tool you'd add?