The assignments are not five unrelated exercises. They are one system that you progressively take apart and take control of. You will first use an existing coding agent to build an agent application, then replace the agent runtime with your own loop, build the evaluation set the rest of the sequence is graded on, replace the API with a model you serve yourself, and finally optimize the entire agent stack.
Assignments 1, 2, and 4 are worth 10% each. Assignments 3 and 5, the two optimization assignments, are worth 20% each. Together, the assignments account for 70% of the course grade. There is no exam. The remaining major build is the final project (12%), where you choose the problem yourself.
Assignment 1, 2 and 4 are submitted as a PDF report through Canvas. Assignments 3 and 5 are submitted as a published blog post, which documents your journey of optimizing the agent and full stack.
Start as an agent user. Use Claude Code to vibe-code a web console that runs tasks through
claude -p, records each run, and exposes its cost. Run five representative tasks through the system.
Those tasks become the seed workload for Assignment 2. Your goal is not yet to build the agent runtime; it is to learn
where an agent is surprisingly effective, where it gets stuck, and what you need to measure before you can optimize it.
Remove the agent framework. Build the loop yourself against a commercial model API: tool calling, context management, retries, termination, and failure handling. Instrument the system from the beginning and define the five metrics that will remain fixed for the rest of the assignment sequence. Then write four calibrated agent problems — one easy, two medium, one hard, each with a scorer — which become the held-out grading set for the assignments that follow.
The model is still a black-box API, so optimize everything around it. Reduce unnecessary tokens and calls, choose cheaper models where they are sufficient, overlap tool execution, compress or restructure context, and redesign the control flow. Hold task success fixed while driving cost and latency down. Then identify the bottlenecks you cannot solve because the serving stack is still outside your control.
Remove the frontier API. Serve a 7–8B open-weight model using an inference engine you operate yourself. Measure the quality loss, diagnose why it happens, and recover as much performance as you can through the harness. You may not solve the problem by switching to a larger model or falling back to the commercial API.
Now everything is in scope: the agent loop, the model, and the serving system. Profile the full execution path until you can explain where the time, tokens, and compute go. Write down a performance hypothesis before changing the system. Then optimize across layers and re-run the same workload to determine which changes actually mattered.