The Python-first reality, and your dialect gap
The course you are mirroring is Python only. You are not. That is the first thing to deal with, because it is a dialect problem masquerading as a knowledge problem, and dialect problems are the cheapest kind to fix deliberately.
What this course mirrors
The official material is foundation-introduction-to-deepagents, which the exam guide labels Deep Agents Foundations. Thirty-eight lessons, twenty-seven of them teaching, and every code sample is Python.
It is one of two courses the guide names for the Build section. Build is 25 percent of a 40-question exam, so ten questions, and the guide’s weighting indicates deepagents is roughly half of that. Call it five questions. Treat that number as an inference from how the guide splits the section, not as a published per-course count.
Setup is the least interesting part of the whole thing: pip install deepagents, an API key for a model provider, done. If you are used to the ceremony of a JS toolchain, the Python side is almost rude about how little it asks for.
Where the languages actually diverge
Four differences, and only one of them is a real gap.
Casing. Python is system_prompt, create_deep_agent, interrupt_on. TypeScript is systemPrompt, createDeepAgent, interruptOn. This runs through every single name in the domain and it is pure mechanics.
Built-in naming. Python built-ins are PascalCase classes: SummarizationMiddleware. TypeScript built-ins are camelCase functions: summarizationMiddleware. That one rule answers a certain kind of question instantly. If an option is spelled summarizationMiddleware and the question is Python-flavoured, the casing is wrong before you have read the semantics.
Authoring style. Python gives you a decorator style and a class-based middleware API. TypeScript has neither. You author with createMiddleware({...}) factories, full stop.
The actual gap. ShellToolMiddleware and FilesystemFileSearchMiddleware are genuinely absent from TypeScript. Not renamed, not restructured. Absent.
The habit this course wants you to form
The deepagentsjs README currently advertises write_todos as part of the base harness. Its own source disagrees, because v0.7 took that tool out. The README has not caught up.
That is worth more than the fact itself. When hand-written docs and the package source disagree, the source wins, and noticing the disagreement is more useful than quietly picking a side. You will hit this again in module 1 with a version boundary that older study material still assumes, and once more in module 2 where two official pages contradict each other with no resolution published.
The posture for all three is the same: know that the contradiction exists, know which side is load-bearing, and do not build a memorised answer on unstable ground.
Try it yourself
The middleware that is not in TypeScript
Three of these exist in both languages. One is genuinely missing from the TypeScript package, and it is the one whose absence feels least believable.
Show answer
Correct answer: C — ShellToolMiddleware
ShellToolMiddleware is absent from TypeScript, alongside FilesystemFileSearchMiddleware. It is the strongest question in this area precisely because shell execution reads as the most universal capability imaginable, so a reader guessing from plausibility will rule it out first. The other three are core to the deep agent stack and exist in both languages.
The two authoring surfaces
This is the difference most likely to bite you specifically, because you write TypeScript and both available prep tracks are Python-first.
How do you author custom middleware in Python compared with TypeScript, and how are the built-in middlewares named in each language?
Reveal answer
Python offers both a decorator style and a class-based middleware API, and its built-ins are PascalCase classes such as SummarizationMiddleware. TypeScript has neither decorators nor a class-based API: you author with createMiddleware({...}) factories, and its built-ins are camelCase functions such as summarizationMiddleware. The hooks, the execution order and every threshold are identical underneath. Only the spelling and the authoring ceremony differ.
When the README contradicts the source
The deepagentsjs README advertises a tool as included in the base harness. The package source says otherwise. Which claim do you carry into the exam?
Show answer
Correct answer: A — The source, since a README is hand-written prose that drifts behind releases
The source wins. A README is hand-edited prose that drifts behind releases, and this one is a live example: it still lists write_todos as part of the base harness after v0.7 removed it. The fourth option is the tempting one, because cross-checking against Python sounds rigorous, but Python and TypeScript are genuinely not at parity here, so agreement across languages is not evidence about either one.
Two minutes, docs open
You have the exam open, docs.langchain.com is whitelisted, and a question hinges on whether a named middleware exists in the TypeScript package. Where do you look first?
Show answer
Correct answer: B — The language-specific middleware reference, on the TypeScript tab
Language-specific reference pages carry a language toggle, and existence questions resolve fastest against a reference index rather than prose. The changelog is the tempting answer because parity gaps feel like release news, but a changelog tells you what changed in one version and not what the current surface contains, so you would be reconstructing state from a diff under time pressure.
Write the translation table
In a scratch file, write the Python name and the TypeScript name side by side for six things you already know from this course's outline.
You wrote at least six pairs, your Python built-ins are PascalCase and your TypeScript built-ins are camelCase, and you did not write a class-based example on the TypeScript side.