<script data-pm-proxy="intercept"></script><?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Data Science In Action]]></title><description><![CDATA[Newsletter that helps you learn data science, Agentic AI, & AI Agents by doing]]></description><link>https://datascienceinaction.substack.com</link><image><url>https://substackcdn.com/image/fetch/$s_!TMYq!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F096ea207-0f69-4b87-8022-814286c2ed3b_1024x1024.png</url><title>Data Science In Action</title><link>https://datascienceinaction.substack.com</link></image><generator>Substack</generator><lastBuildDate>Fri, 04 Sep 2026 07:47:47 GMT</lastBuildDate><atom:link href="/__u/datascienceinaction.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Engy Fouda]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[datascienceinaction@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[datascienceinaction@substack.com]]></itunes:email><itunes:name><![CDATA[Engy Fouda]]></itunes:name></itunes:owner><itunes:author><![CDATA[Engy Fouda]]></itunes:author><googleplay:owner><![CDATA[datascienceinaction@substack.com]]></googleplay:owner><googleplay:email><![CDATA[datascienceinaction@substack.com]]></googleplay:email><googleplay:author><![CDATA[Engy Fouda]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[[CCAR-F-Part 11] What Domain 4 Actually Covers: Prompt Engineering and Structured Output]]></title><description><![CDATA[Six distinct skills fall under this domain, from writing review criteria specific enough to trust to knowing when a second independent reviewer beats a longer thinking budget]]></description><link>https://datascienceinaction.substack.com/p/ccar-f-part-11-what-domain-4-actually</link><guid isPermaLink="false">https://datascienceinaction.substack.com/p/ccar-f-part-11-what-domain-4-actually</guid><dc:creator><![CDATA[Engy Fouda]]></dc:creator><pubDate>Thu, 03 Sep 2026 18:43:03 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!cld2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f7704f9-dc35-4243-9bf2-46073047358a_1592x1012.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1><strong>This is part of the Claude Certificate Architect-Foundations:</strong></h1><ol><li><p><a href="/__u/datascienceinaction.substack.com/p/the-five-domains-that-matter-for">[CCAR-F-Part1] The Five Domains That Matter for Claude Architect Certification</a></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/how-to-pass-the-claude-architect">[CCAR-F-Part2] How to Pass the Claude Architect Certification: A Step-by-Step Preparation Guide?</a></strong></p></li><li><p><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-3-the-six-scenarios-you">[CCAR-F-Part 3] The Six Scenarios You Will Face on the Claude Architect Exam</a></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-4-how-to-prepare-for">[CCAR-F-Part 4] How to Prepare for Each of the Six Exam Scenarios?</a></strong></p></li><li><p><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-5-what-domain-1-covers">[CCAR-F-Part 5] What Domain 1 Covers: Agentic Architecture and Orchestration</a></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-6-building-every-domain">[CCAR-F-Part 6] Building Every Domain 1 Pattern: A Complete Implementation Guide</a></strong></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-7-what-domain-2-actually">[CCAR-F-Part 7] What Domain 2 Actually Covers: Tool Design and MCP Integration</a></strong></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-8-building-every-domain">[CCAR-F-Part 8] Building Every Domain 2 Pattern: A Complete Implementation Guide</a></strong></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-9-what-domain-3-actually">[CCAR-F-Part 9] What Domain 3 Actually Covers: Claude Code Configuration and Workflows</a></strong></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-10-building-every-domain">[CCAR-F-Part 10] Building Every Domain 3 Pattern: A Complete Implementation Guide</a></strong></p></li></ol><p>Download the official exam guide PDF at this link:</p><p><a href="https://everpath-course-content.s3-accelerate.amazonaws.com/instructor%2F6nizmqk8tpzpfjvt6qmmav7rh%2Fpublic%2F1783542750%2FClaude+Certified+Architect+%E2%80%93+Foundations+Exam+Guide.pdf">Claude Certified Architect-Foundation Exam Guide</a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/subscribe"><span>Subscribe now</span></a></p><div><hr></div><h2>What Domain 4 Actually Covers: Prompt Engineering and Structured Output</h2><p><strong>Six distinct skills fall under this domain, from writing review criteria specific enough to trust to knowing when a second independent reviewer beats a longer thinking budget</strong></p><p>Domain 4 accounts for 20 percent of the exam, tied with Domain 3 as the second-largest domain. It is also the domain most directly tied to whether people actually trust what Claude produces, since it covers the difference between output that looks plausible and output you can safely automate around. Here is the complete picture.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!cld2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f7704f9-dc35-4243-9bf2-46073047358a_1592x1012.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!cld2!, /__u/datascienceinaction.substack.com/w_424, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f7704f9-dc35-4243-9bf2-46073047358a_1592x1012.png 424w, /__u/substackcdn.com/image/fetch/$s_!cld2!, /__u/datascienceinaction.substack.com/w_848, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f7704f9-dc35-4243-9bf2-46073047358a_1592x1012.png 848w, /__u/substackcdn.com/image/fetch/$s_!cld2!, /__u/datascienceinaction.substack.com/w_1272, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f7704f9-dc35-4243-9bf2-46073047358a_1592x1012.png 1272w, /__u/substackcdn.com/image/fetch/$s_!cld2!, /__u/datascienceinaction.substack.com/w_1456, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f7704f9-dc35-4243-9bf2-46073047358a_1592x1012.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!cld2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f7704f9-dc35-4243-9bf2-46073047358a_1592x1012.png" width="1456" height="926" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5f7704f9-dc35-4243-9bf2-46073047358a_1592x1012.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:926,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1962120,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://datascienceinaction.substack.com/i/212898636?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f7704f9-dc35-4243-9bf2-46073047358a_1592x1012.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!cld2!, /__u/datascienceinaction.substack.com/w_424, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f7704f9-dc35-4243-9bf2-46073047358a_1592x1012.png 424w, /__u/substackcdn.com/image/fetch/$s_!cld2!, /__u/datascienceinaction.substack.com/w_848, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f7704f9-dc35-4243-9bf2-46073047358a_1592x1012.png 848w, /__u/substackcdn.com/image/fetch/$s_!cld2!, /__u/datascienceinaction.substack.com/w_1272, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f7704f9-dc35-4243-9bf2-46073047358a_1592x1012.png 1272w, /__u/substackcdn.com/image/fetch/$s_!cld2!, /__u/datascienceinaction.substack.com/w_1456, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5f7704f9-dc35-4243-9bf2-46073047358a_1592x1012.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Data Science In Action is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2>Topic 1: Designing Prompts With Explicit Criteria</h2><p>The instinct most people reach for first, when Claude&#8217;s output has too many false positives, is to tell it to &#8220;be more conservative&#8221; or &#8220;only report high confidence findings.&#8221; This does not work as well as it sounds like it should. Vague qualifiers like these give Claude nothing concrete to apply consistently, so the false-positive rate barely changes.</p><p>What actually works is replacing vague qualifiers with explicit, categorical criteria. Instead of &#8220;check that comments are accurate,&#8221; a stronger instruction states precisely what counts as a violation: flag a comment only when the claimed behavior directly contradicts what the code actually does, not when a comment is merely incomplete or could be phrased better. This distinction matters because false positives compound in a specific way. Once one category of findings turns out to be unreliable, it erodes trust in every other category, even the ones that were accurate all along. Sometimes the right short-term fix is not a better prompt at all, but rather temporarily turning off a high-false-positive category entirely while the underlying criteria are reworked.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/p/ccar-f-part-11-what-domain-4-actually?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/p/ccar-f-part-11-what-domain-4-actually?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share</span></a></p><h2>Topic 2: Few-Shot Prompting for Output Consistency</h2><p>Detailed written instructions can only get you so far before a task becomes genuinely ambiguous. Few-shot examples, a small handful of worked examples embedded directly in the prompt, are the more reliable fix once instructions alone start producing inconsistent results.</p><p>The value of a good few-shot example goes beyond format demonstration. An example that also shows the reasoning behind a choice, why this particular action was selected over another plausible one, teaches Claude to generalize that judgment to genuinely novel cases it has not seen before, rather than only matching the exact scenarios you happened to demonstrate. This same technique reduces hallucination directly in extraction tasks: showing a few examples of correct extraction from documents with unusual or varied structure, inline citations versus a separate bibliography, for instance, meaningfully improves handling of documents that do not match whatever structure you expected by default.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/p/ccar-f-part-11-what-domain-4-actually?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Data Science In Action! This post is public, so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/p/ccar-f-part-11-what-domain-4-actually?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/p/ccar-f-part-11-what-domain-4-actually?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share</span></a></p></div><h2>Topic 3: Enforcing Structured Output With Tool Use and JSON Schemas</h2><p>Asking Claude to &#8220;respond in JSON&#8221; inside a plain text prompt produces output that is close to valid JSON most of the time, and that gap between close and guaranteed is exactly the problem. Tool use with a JSON schema closes that gap completely for syntax. When a schema is enforced through tool use, the output is guaranteed to be syntactically valid, with no more malformed brackets or missing commas to catch downstream.</p><p>It is important to be precise about what this guarantee does and does not cover. Schema enforcement eliminates syntax errors. It does not eliminate semantic errors, a set of line items that fail to sum to the stated total, or a value placed in a field that is technically the right type but the wrong meaning. Those still require separate validation. Schema design itself carries real judgment, too: marking a field as required when the source document might genuinely lack that information pressures the model to invent a plausible-sounding value rather than admit the information is absent, so fields that are legitimately sometimes missing should be nullable, not required.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share Data Science In Action&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share Data Science In Action</span></a></p><h2>Topic 4: Validation, Retry, and Feedback Loops</h2><p>A failed extraction is not always the same kind of failure, and treating every failure the same way wastes retries that were never going to succeed. When a follow-up request includes the original document, the failed extraction, and the specific validation error raised, Claude has a real chance of self-correcting, which works well for structural or formatting mismatches.</p><p>It works far less well when the actual problem is that the required information does not exist anywhere in the source document. No amount of retrying will produce a customer&#8217;s phone number from a document that never mentions one. Recognizing which category a given failure falls into -fixable through retry versus fundamentally unfixable because the data was never there- is the actual skill being tested here, more than the retry mechanism itself. There is also a longer-term feedback loop worth building: tagging each finding with the specific pattern that triggered it lets you later analyze which patterns developers consistently dismiss as false positives, turning individual corrections into a systematic signal.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?&amp;gift=true&quot;,&quot;text&quot;:&quot;Give a gift subscription&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/subscribe?&amp;gift=true"><span>Give a gift subscription</span></a></p><h2>Topic 5: Designing Efficient Batch Processing Strategies</h2><p>The Message Batches API offers a real, meaningful tradeoff: roughly 50 percent cost savings, in exchange for a processing window of up to 24 hours with no guaranteed latency. That tradeoff makes batch processing an excellent fit for workloads that can tolerate waiting, an overnight technical debt report, a weekly audit, nightly test generation, and a poor fit for anything blocking, like a pre-merge check a developer is actively waiting on before they can proceed.</p><p>One structural limitation is worth noting regardless of which side of that tradeoff you land on: the batch API does not support multi-turn tool calling within a single request, so you cannot have a batch job call a tool mid-request and receive the result in that same call. Each request and response pair in a batch is correlated through a <code>custom_id</code> field, which becomes essential when handling partial failures, since you resubmit only the specific documents that failed, identified by that ID, rather than reprocessing an entire batch from scratch.</p><div class="community-chat" data-attrs="{&quot;url&quot;:&quot;https://open.substack.com/pub/datascienceinaction/chat?utm_source=chat_embed&quot;,&quot;subdomain&quot;:&quot;datascienceinaction&quot;,&quot;pub&quot;:{&quot;id&quot;:7180606,&quot;name&quot;:&quot;Data Science In Action&quot;,&quot;author_name&quot;:&quot;Engy Fouda&quot;,&quot;author_photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!CZ7q!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c77e192-01d1-4d3a-b2ff-6e114eecb5d4_1713x1713.jpeg&quot;}}" data-component-name="CommunityChatRenderPlaceholder"></div><h2>Topic 6: Designing Multi-Instance and Multi-Pass Review Architectures</h2><p>A model reviewing its own freshly generated output tends to be a weaker reviewer of that output than a genuinely separate instance would be. This is not a minor effect. The same session retains its own reasoning context from having just generated the content, which makes it measurably less likely to question decisions it only just made, even when a fresh perspective would catch the issue immediately.</p><p>There is a second, related failure mode this domain covers: reviewing many files together in a single pass tends to produce inconsistent depth, and sometimes outright contradictory verdicts, flagging one pattern as problematic in one file while approving the identical pattern elsewhere in the same batch. The fix for both problems is architectural rather than a better prompt. An independent review instance, with no access to the generator&#8217;s own reasoning, catches issues self-review tends to miss. And splitting a large review into focused, per-file passes for local issues, followed by a separate integration pass for cross-file consistency, avoids the attention dilution that leads to contradictory findings in a single oversized pass.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/leaderboard?&amp;utm_source=post&quot;,&quot;text&quot;:&quot;Refer a friend&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/leaderboard?&amp;utm_source=post"><span>Refer a friend</span></a></p><h2>Why All Six Matter Together</h2><p>These six topics form a pipeline more than a list. Explicit criteria (Topic 1) and few-shot examples (Topic 2) shape what Claude produces in the first place. Schema enforcement (Topic 3) guarantees that output is structurally usable. Validation and retry loops (Topic 4) catch what schema enforcement alone cannot. Batch processing (Topic 5) determines how that pipeline scales economically across volume. And multi-instance review (Topic 6) is the final check that catches what the generating pass, however well configured, still misses on its own.</p><div class="directMessage button" data-attrs="{&quot;userId&quot;:43386542,&quot;userName&quot;:&quot;Engy Fouda&quot;,&quot;canDm&quot;:null,&quot;dmUpgradeOptions&quot;:null,&quot;isEditorNode&quot;:true}" data-component-name="DirectMessageToDOM"></div><p>The next article in this series builds on each of these six topics with real, runnable code, including two scenarios pulled directly from the certification exam guide&#8217;s sample questions.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/p/ccar-f-part-11-what-domain-4-actually/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/p/ccar-f-part-11-what-domain-4-actually/comments"><span>Leave a comment</span></a></p><p>Subscribe to Data Science In Action for the full implementation guide.</p><p>#Claude #CertifiedArchitect #AI #PromptEngineering #Certification #DataScienceInAction</p>]]></content:encoded></item><item><title><![CDATA[[CCAR-F-Part 10] Building Every Domain 3 Pattern: A Complete Implementation Guide]]></title><description><![CDATA[Configuration files and CLI commands for CLAUDE.md hierarchy, custom commands, path-specific rules, plan mode, iterative refinement, and CI/CD integration, with four of Anthropic&#8217;s own sample question]]></description><link>https://datascienceinaction.substack.com/p/ccar-f-part-10-building-every-domain</link><guid isPermaLink="false">https://datascienceinaction.substack.com/p/ccar-f-part-10-building-every-domain</guid><dc:creator><![CDATA[Engy Fouda]]></dc:creator><pubDate>Tue, 01 Sep 2026 16:09:42 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!TMYq!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F096ea207-0f69-4b87-8022-814286c2ed3b_1024x1024.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2><strong>This is a part of the Claude Certificate Architect-Foundations:</strong></h2><ol><li><p><a href="/__u/datascienceinaction.substack.com/p/the-five-domains-that-matter-for">[CCAR-F-Part1] The Five Domains That Matter for Claude Architect Certification</a></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/how-to-pass-the-claude-architect">[CCAR-F-Part2] How to Pass the Claude Architect Certification: A Step-by-Step Preparation Guide?</a></strong></p></li><li><p><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-3-the-six-scenarios-you">[CCAR-F-Part 3] The Six Scenarios You Will Face on the Claude Architect Exam</a></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-4-how-to-prepare-for">[CCAR-F-Part 4] How to Prepare for Each of the Six Exam Scenarios?</a></strong></p></li><li><p><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-5-what-domain-1-covers">[CCAR-F-Part 5] What Domain 1 Covers: Agentic Architecture and Orchestration</a></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-6-building-every-domain">[CCAR-F-Part 6] Building Every Domain 1 Pattern: A Complete Implementation Guide</a></strong></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-7-what-domain-2-actually">[CCAR-F-Part 7] What Domain 2 Actually Covers: Tool Design and MCP Integration</a></strong></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-8-building-every-domain">[CCAR-F-Part 8] Building Every Domain 2 Pattern: A Complete Implementation Guide</a></strong></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-9-what-domain-3-actually">[CCAR-F-Part 9] What Domain 3 Actually Covers: Claude Code Configuration and Workflows</a></strong></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-10-building-every-domain">[CCAR-F-Part 10] Building Every Domain 3 Pattern: A Complete Implementation Guide</a></strong></p></li></ol><p>Download the official exam guide PDF at this link:</p><p><a href="https://everpath-course-content.s3-accelerate.amazonaws.com/instructor%2F6nizmqk8tpzpfjvt6qmmav7rh%2Fpublic%2F1783542750%2FClaude+Certified+Architect+%E2%80%93+Foundations+Exam+Guide.pdf">Claude Certified Architect-Foundation Exam Guide</a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/subscribe"><span>Subscribe now</span></a></p><div><hr></div><h2>Building Every Domain 3 Pattern: A Complete Implementation Guide</h2><p>Article 9 covered what Domain 3 actually includes: CLAUDE.md hierarchy, custom commands and skills, path-specific rules, plan mode versus direct execution, iterative refinement, and CI/CD integration. This article builds each one, in order, with real configuration and command examples, and where the exam guide has a matching sample question, that exact question is shown alongside the fix.</p><blockquote><p><strong>How this article aligns with the exam&#8217;s scenarios.</strong> Domain 3 is the primary domain for Scenario 2 (Code Generation with Claude Code) and a primary domain for Scenario 4 (Developer Productivity with Claude) and Scenario 5 (Claude Code for Continuous Integration). Parts 2, 4, and 3 below are built as direct matches to the exam guide&#8217;s Questions 4, 5, and 6, all under Scenario 2, and Part 6 matches Question 10 under Scenario 5. Every part names which scenario it fits.</p></blockquote><p>Unlike the previous two articles, most of what follows is configuration and CLI usage rather than Python. Where a part is in Python, it is clearly labeled.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Data Science In Action is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2>Part 1: CLAUDE.md Hierarchy</h2><p><em>Save the project-level file as </em><code>CLAUDE.md</code><em> at your project root.</em></p><p><strong>Maps to Task Statement 3.1: Configure CLAUDE.md files with appropriate hierarchy, scoping, and modular organization.</strong></p><pre><code><code># Project CLAUDE.md &#8212; checked into version control, applies to everyone

## Coding standards
- Use TypeScript strict mode for all new files
- Prefer functional components with hooks in React code
- All API handlers use async/await, never .then() chains

## Testing
See @.claude/rules/testing.md for detailed conventions.

## Package-specific standards
- API package: @packages/api/CLAUDE.md
- Frontend package: @packages/frontend/CLAUDE.md</code></code></pre><p>Notice the <code>@</code> prefixed references. This is the <code>@import</code> syntax, and it is what keeps a large monorepo&#8217;s CLAUDE.md from becoming an unreadable wall of text. A contributor working only in the frontend package never has to scroll past API-specific conventions to find what applies to them, since those live in a separate, imported file scoped to that package.</p><p>Compare this against a user-level file, which lives outside the project entirely:</p><pre><code><code># ~/.claude/CLAUDE.md &#8212; personal only, never shared via version control

I prefer verbose explanations when Claude Code proposes a refactor.</code></code></pre><p><strong>How this connects to the exam:</strong> the most common failure mode Task Statement 3.1 names directly is a new team member not receiving instructions everyone else follows, because those instructions were placed at the user level instead of the project level. If you are ever debugging inconsistent behavior across a team, the fastest diagnostic tool is the <code>/memory</code> command run inside Claude Code that lists exactly which memory files are currently loaded for that session. It will immediately reveal whether a project-level file is actually being picked up.</p><p><strong>Which scenario this applies to:</strong> Scenario 2 (Code Generation with Claude Code), where CLAUDE.md configuration is named as a primary domain, and Scenario 4 (Developer Productivity with Claude).</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/p/ccar-f-part-10-building-every-domain?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/p/ccar-f-part-10-building-every-domain?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share</span></a></p><h2>Part 2: Custom Slash Commands</h2>
      <p>
          <a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-10-building-every-domain">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[[CCAR-F-Part 9] What Domain 3 Actually Covers: Claude Code Configuration and Workflows]]></title><description><![CDATA[This is a part of the Claude Certificate Architect-Foundations:]]></description><link>https://datascienceinaction.substack.com/p/ccar-f-part-9-what-domain-3-actually</link><guid isPermaLink="false">https://datascienceinaction.substack.com/p/ccar-f-part-9-what-domain-3-actually</guid><dc:creator><![CDATA[Engy Fouda]]></dc:creator><pubDate>Fri, 28 Aug 2026 15:30:24 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!MgfR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2714cb5-aa40-4c62-95d0-704bf39d94a4_1600x1050.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2><strong>This is a part of the Claude Certificate Architect-Foundations:</strong></h2><ol><li><p><a href="/__u/datascienceinaction.substack.com/p/the-five-domains-that-matter-for">[CCAR-F-Part1] The Five Domains That Matter for Claude Architect Certification</a></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/how-to-pass-the-claude-architect">[CCAR-F-Part2] How to Pass the Claude Architect Certification: A Step-by-Step Preparation Guide?</a></strong></p></li><li><p><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-3-the-six-scenarios-you">[CCAR-F-Part 3] The Six Scenarios You Will Face on the Claude Architect Exam</a></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-4-how-to-prepare-for">[CCAR-F-Part 4] How to Prepare for Each of the Six Exam Scenarios?</a></strong></p></li><li><p><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-5-what-domain-1-covers">[CCAR-F-Part 5] What Domain 1 Covers: Agentic Architecture and Orchestration</a></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-6-building-every-domain">[CCAR-F-Part 6] Building Every Domain 1 Pattern: A Complete Implementation Guide</a></strong></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-7-what-domain-2-actually">[CCAR-F-Part 7] What Domain 2 Actually Covers: Tool Design and MCP Integration</a></strong></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-8-building-every-domain">[CCAR-F-Part 8] Building Every Domain 2 Pattern: A Complete Implementation Guide</a></strong></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-9-what-domain-3-actually">CCAR-F-Part 9] What Domain 3 Actually Covers: Claude Code Configuration and Workflows</a></strong></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-10-building-every-domain">[CCAR-F-Part 10] Building Every Domain 3 Pattern: A Complete Implementation Guide</a></strong></p></li></ol><p>Download the official exam guide PDF at this link:</p><p><a href="https://everpath-course-content.s3-accelerate.amazonaws.com/instructor%2F6nizmqk8tpzpfjvt6qmmav7rh%2Fpublic%2F1783542750%2FClaude+Certified+Architect+%E2%80%93+Foundations+Exam+Guide.pdf">Claude Certified Architect-Foundation Exam Guide</a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/subscribe"><span>Subscribe now</span></a></p><div><hr></div><h2>What Domain 3 Actually Covers: Claude Code Configuration and Workflows</h2><p><strong>Six distinct skills fall under this domain, from CLAUDE.md file hierarchy to knowing exactly when plan mode earns its cost</strong></p><p>Domain 3 accounts for 20 percent of the exam, tied with Domain 4 as the second-largest domain after Agentic Architecture. It is also the domain most directly tied to day-to-day developer experience, since it covers the configuration choices a team makes once and then lives with for months. Here is the complete picture.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!MgfR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2714cb5-aa40-4c62-95d0-704bf39d94a4_1600x1050.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!MgfR!, /__u/datascienceinaction.substack.com/w_424, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2714cb5-aa40-4c62-95d0-704bf39d94a4_1600x1050.png 424w, /__u/substackcdn.com/image/fetch/$s_!MgfR!, /__u/datascienceinaction.substack.com/w_848, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2714cb5-aa40-4c62-95d0-704bf39d94a4_1600x1050.png 848w, /__u/substackcdn.com/image/fetch/$s_!MgfR!, /__u/datascienceinaction.substack.com/w_1272, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2714cb5-aa40-4c62-95d0-704bf39d94a4_1600x1050.png 1272w, /__u/substackcdn.com/image/fetch/$s_!MgfR!, /__u/datascienceinaction.substack.com/w_1456, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2714cb5-aa40-4c62-95d0-704bf39d94a4_1600x1050.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!MgfR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2714cb5-aa40-4c62-95d0-704bf39d94a4_1600x1050.png" width="1456" height="955" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f2714cb5-aa40-4c62-95d0-704bf39d94a4_1600x1050.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:955,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1992069,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://datascienceinaction.substack.com/i/212762514?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2714cb5-aa40-4c62-95d0-704bf39d94a4_1600x1050.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!MgfR!, /__u/datascienceinaction.substack.com/w_424, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2714cb5-aa40-4c62-95d0-704bf39d94a4_1600x1050.png 424w, /__u/substackcdn.com/image/fetch/$s_!MgfR!, /__u/datascienceinaction.substack.com/w_848, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2714cb5-aa40-4c62-95d0-704bf39d94a4_1600x1050.png 848w, /__u/substackcdn.com/image/fetch/$s_!MgfR!, /__u/datascienceinaction.substack.com/w_1272, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2714cb5-aa40-4c62-95d0-704bf39d94a4_1600x1050.png 1272w, /__u/substackcdn.com/image/fetch/$s_!MgfR!, /__u/datascienceinaction.substack.com/w_1456, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2714cb5-aa40-4c62-95d0-704bf39d94a4_1600x1050.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Data Science In Action is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2>Topic 1: CLAUDE.md Hierarchy, Scoping, and Modular Organization</h2><p>CLAUDE.md files exist at three levels, and which level you use determines who actually receives your instructions. </p><ol><li><p>A user-level file, at <code>~/.claude/CLAUDE.md</code>, applies only to that one person. It is not shared with teammates through version control, no matter how carefully it is written. </p></li><li><p>A project-level file, at the project root or in <code>.claude/CLAUDE.md</code>, is checked into the repository and applies to everyone who clones it. </p></li><li><p>A directory-level file applies only within that specific subdirectory.</p></li></ol><p>This distinction explains one of the most common configuration problems teams run into: a new team member who somehow is not receiving instructions everyone else follows. The instructions almost always turn out to be sitting in that person&#8217;s own user-level file from a previous project, or in someone else&#8217;s user-level file, rather than in the project-level file that would actually propagate through version control.</p><p>Once a project level CLAUDE.md grows large, there are two ways to keep it manageable:</p><ol><li><p> The <code>@import</code> syntax lets you reference external files from within CLAUDE.md, so a monorepo can pull in only the standards relevant to each package rather than forcing every contributor to read conventions for parts of the codebase they never touch. </p></li><li><p>Separately, the <code>.claude/rules/</code> directory lets you split a monolithic file into focused, topic-specific files, such as <code>testing.md</code> or <code>deployment.md</code>, instead of one long document covering everything at once. </p></li><li><p>When something is behaving inconsistently across sessions, the <code>/memory</code> command shows exactly which memory files are currently loaded, which is the fastest way to diagnose a hierarchy problem rather than guessing.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/p/ccar-f-part-9-what-domain-3-actually?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/p/ccar-f-part-9-what-domain-3-actually?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share</span></a></p></li></ol><h2>Topic 2: Custom Slash Commands and Skills</h2><p>Slash commands and skills solve a similar problem to CLAUDE.md, team-wide availability versus personal customization, but for reusable workflows rather than passive instructions.</p><ol><li><p>Project-scoped commands live in <code>.claude/commands/</code> and are shared with the whole team through version control. </p></li><li><p>User-scoped commands live in <code>~/.claude/commands/</code> and are personal. </p></li><li><p>Skills work similarly but live in <code>.claude/skills/</code>, each with a <code>SKILL.md</code> file that supports its own frontmatter configuration. </p></li></ol><p>Three frontmatter options matter most: </p><ol><li><p><code>context: fork</code> runs the skill in an isolated subagent context so its output, which can be verbose, does not pollute the main conversation. </p></li><li><p><code>allowed-tools</code> restricts exactly which tools the skill can use while it runs, which matters when a skill should only ever write files and never delete or execute anything. </p></li><li><p><code>argument-hint</code> prompts a developer for required parameters when they invoke the skill without providing them.</p></li></ol><div class="pullquote"><p>The distinction worth internalizing is when to reach for a skill versus a CLAUDE.md entry:<br>CLAUDE.md is for universal, always loaded standards. <br>Skills are for on-demand, task-specific workflows you invoke only when relevant.</p></div><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/p/ccar-f-part-9-what-domain-3-actually?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Data Science In Action! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/p/ccar-f-part-9-what-domain-3-actually?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/p/ccar-f-part-9-what-domain-3-actually?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share</span></a></p></div><h2>Topic 3: Path-Specific Rules for Conditional Convention Loading</h2><p>Directory-level CLAUDE.md files work fine when your conventions map cleanly onto your folder structure. They break down when they do not, and the clearest example is test files. If your test files live alongside the code they test, scattered across dozens of directories, a directory level CLAUDE.md cannot apply testing conventions uniformly, since there is no single directory that contains all your tests.</p><p>The fix is <code>.claude/rules/</code> files that use YAML frontmatter with a <code>paths</code> field containing glob patterns, such as <code>paths: ["**/*.test.tsx"]</code>. A rule like this loads only when you are editing a file matching that pattern, regardless of which directory it lives in. This keeps irrelevant context and token usage down, since a rule about Terraform conventions never loads while you are editing a React component, even if both happen to sit in the same parent folder.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/p/ccar-f-part-9-what-domain-3-actually?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Data Science In Action! This post is public, so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/p/ccar-f-part-9-what-domain-3-actually?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/p/ccar-f-part-9-what-domain-3-actually?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share</span></a></p></div><h2>Topic 4: Plan Mode Versus Direct Execution</h2><p>This is the decision most people either overthink or underthink, and the exam tests both directions.</p><p><strong>Plan mode</strong> is built for tasks with real architectural weight: large-scale changes, multiple genuinely valid approaches, decisions about module boundaries, or changes that touch dozens of files. It lets you explore the codebase and design an approach safely before committing any changes, which matters because costly rework is exactly what happens when those decisions are made mid-implementation rather than before.</p><p><strong>Direct execution</strong> is appropriate for changes that are simple and well-scoped, such as a single-file bug fix with a clear stack trace, or adding one validation check to a single function. Forcing plan mode onto a change like that adds overhead without adding value, since there is no meaningful decision to plan around.</p><p>One additional tool worth knowing here is the <strong>Explore subagent</strong>, which isolates verbose discovery output, the kind of noisy, exploratory searching a complex task generates, and returns a clean summary instead, preserving the main conversation&#8217;s context for the actual implementation work that follows.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/leaderboard?&amp;utm_source=post&quot;,&quot;text&quot;:&quot;Refer a friend&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/leaderboard?&amp;utm_source=post"><span>Refer a friend</span></a></p><h2>Topic 5: Iterative Refinement Techniques</h2><p>Getting a good result from Claude Code on the first try is not always realistic for ambiguous or unfamiliar tasks, and this domain covers techniques for progressively improving results rather than restarting from scratch each time.</p><p>Concrete input and output examples communicate a transformation far more reliably than a prose description does, especially when a written description keeps getting interpreted inconsistently across attempts. Test-driven iteration flips the usual order: write the test suite first, then iterate by sharing the actual test failures, which gives Claude Code something concrete to correct against rather than a vague sense of what &#8220;working&#8221; means. The interview pattern has Claude Code ask you clarifying questions before implementing, surfacing considerations like cache invalidation strategy or failure handling that you might not have thought to specify upfront.</p><p>There is also a sequencing decision worth considering: when multiple issues interact, describing them together in a single detailed message tends to work better than addressing them one at a time, since a fix for one issue in isolation can conflict with a fix needed for another. Independent, unrelated issues are the opposite case and are better handled sequentially.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?&amp;gift=true&quot;,&quot;text&quot;:&quot;Give a gift subscription&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/subscribe?&amp;gift=true"><span>Give a gift subscription</span></a></p><h2>Topic 6: Integrating Claude Code Into CI/CD Pipelines</h2><p>Running Claude Code inside an automated pipeline, with no person available to respond to a prompt, requires a few specific configuration choices. The <code>-p</code> flag, short for print, runs Claude Code in non-interactive mode: it processes the prompt, writes the result to standard output, and exits, rather than waiting indefinitely for input that will never come. Pair this with <code>--output-format json</code> and <code>--json-schema</code> to get machine-parseable, structured findings back, the format an automated pipeline actually needs to post something like an inline pull request comment.</p><p>CLAUDE.md still matters here, providing the CI-invoked agent with project context, such as testing standards and review criteria, that it would otherwise have no way to know. </p><div class="pullquote"><p>There is also a reliability point worth remembering: the same session that generated a piece of code tends to be a weaker reviewer of that same code, since it retains its own reasoning and is less inclined to question decisions it just made. An independent review instance, without that inherited context, catches issues a self-review pass tends to miss.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?group=true&quot;,&quot;text&quot;:&quot;Get a group subscription&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/subscribe?group=true"><span>Get a group subscription</span></a></p><h2>Why All Six Matter Together</h2><p>These six topics build on each other in practice. A well-organized CLAUDE.md hierarchy (Topic 1) does nothing if a new teammate&#8217;s instructions are trapped at the wrong scope level. Path-specific rules (Topic 3) exist because directory-level CLAUDE.md files (also Topic 1) cannot handle conventions that cross directory boundaries. Choosing plan mode correctly (Topic 4) sets up the iterative refinement techniques (Topic 5) that follow it. And CI/CD integration (Topic 6) depends on the same configuration discipline established in Topics 1 through 3 actually being in place before an automated pipeline ever runs.</p><div class="community-chat" data-attrs="{&quot;url&quot;:&quot;https://open.substack.com/pub/datascienceinaction/chat?utm_source=chat_embed&quot;,&quot;subdomain&quot;:&quot;datascienceinaction&quot;,&quot;pub&quot;:{&quot;id&quot;:7180606,&quot;name&quot;:&quot;Data Science In Action&quot;,&quot;author_name&quot;:&quot;Engy Fouda&quot;,&quot;author_photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!CZ7q!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c77e192-01d1-4d3a-b2ff-6e114eecb5d4_1713x1713.jpeg&quot;}}" data-component-name="CommunityChatRenderPlaceholder"></div><p>The next article in this series builds each of these six topics with real, runnable examples, including four situations pulled directly from the certification exam guide&#8217;s own sample questions.</p><div class="directMessage button" data-attrs="{&quot;userId&quot;:43386542,&quot;userName&quot;:&quot;Engy Fouda&quot;,&quot;canDm&quot;:null,&quot;dmUpgradeOptions&quot;:null,&quot;isEditorNode&quot;:true}" data-component-name="DirectMessageToDOM"></div><p>Subscribe to Data Science In Action for the full implementation guide.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/p/ccar-f-part-9-what-domain-3-actually/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/p/ccar-f-part-9-what-domain-3-actually/comments"><span>Leave a comment</span></a></p><p>#Claude #CertifiedArchitect #AI #ClaudeCode #Certification #DataScienceInAction</p>]]></content:encoded></item><item><title><![CDATA[[CCAR-F-Part 8] Building Every Domain 2 Pattern: A Complete Implementation Guide]]></title><description><![CDATA[Runnable code for tool description design, structured errors, tool distribution, MCP configuration, and built-in tool selection, with two of Anthropic&#8217;s own sample questions demonstrated directly]]></description><link>https://datascienceinaction.substack.com/p/ccar-f-part-8-building-every-domain</link><guid isPermaLink="false">https://datascienceinaction.substack.com/p/ccar-f-part-8-building-every-domain</guid><dc:creator><![CDATA[Engy Fouda]]></dc:creator><pubDate>Wed, 26 Aug 2026 14:01:42 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!p6cL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c6c042d-6b38-4dba-ba96-a723845d1de4_2659x820.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2><strong>This is a part of the Claude Certificate Architect-Foundations:</strong></h2><ol><li><p><a href="/__u/datascienceinaction.substack.com/p/the-five-domains-that-matter-for">[CCAR-F-Part1] The Five Domains That Matter for Claude Architect Certification</a></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/how-to-pass-the-claude-architect">[CCAR-F-Part2] How to Pass the Claude Architect Certification: A Step-by-Step Preparation Guide?</a></strong></p></li><li><p><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-3-the-six-scenarios-you">[CCAR-F-Part 3] The Six Scenarios You Will Face on the Claude Architect Exam</a></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-4-how-to-prepare-for">[CCAR-F-Part 4] How to Prepare for Each of the Six Exam Scenarios?</a></strong></p></li><li><p><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-5-what-domain-1-covers">[CCAR-F-Part 5] What Domain 1 Covers: Agentic Architecture and Orchestration</a></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-6-building-every-domain">[CCAR-F-Part 6] Building Every Domain 1 Pattern: A Complete Implementation Guide</a></strong></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-7-what-domain-2-actually">[CCAR-F-Part 7] What Domain 2 Actually Covers: Tool Design and MCP Integration</a></strong></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-8-building-every-domain">[CCAR-F-Part 8] Building Every Domain 2 Pattern: A Complete Implementation Guide</a></strong></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-9-what-domain-3-actually">[CCAR-F-Part 9] What Domain 3 Actually Covers: Claude Code Configuration and Workflows</a></strong></p></li></ol><p>Download the official exam guide PDF at this link:</p><p><a href="https://everpath-course-content.s3-accelerate.amazonaws.com/instructor%2F6nizmqk8tpzpfjvt6qmmav7rh%2Fpublic%2F1783542750%2FClaude+Certified+Architect+%E2%80%93+Foundations+Exam+Guide.pdf">Claude Certified Architect-Foundation Exam Guide</a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/subscribe"><span>Subscribe now</span></a></p><div><hr></div><h2>Building Every Domain 2 Pattern: A Complete Implementation Guide</h2><p>Article 7 covered what Domain 2 actually includes: tool interface design, structured error responses, tool distribution and tool choice, MCP server integration, and built-in tool selection. This article builds each one in order with runnable code and, where the exam guide has a matching sample question, shows that exact question alongside the fix.</p><blockquote><p><strong>How this article aligns with the exam&#8217;s scenarios.</strong> Domain 2 is tested most heavily in Scenario 1 (Customer Support Resolution Agent), Scenario 3 (Multi-Agent Research System), and Scenario 4 (Developer Productivity with Claude). Part 1 below is built as a direct match to the exam guide&#8217;s Question 2, and Part 3 is built as a direct match to Question 9, both under their respective official scenarios. Every part names which scenario it fits so you can connect the technique to the context you are likely to see on exam day.</p></blockquote><h2>Setup</h2><p>Every code block below is Python, except Part 4, which is a configuration file, not a script, and is labeled clearly when we get there. Each Python part is a standalone script, save it as its own file and run it independently with <code>python filename.py</code>.</p><pre><code><code>pip install anthropic claude-agent-sdk
export ANTHROPIC_API_KEY="your-key-here"</code></code></pre><p>The link to download the code for all of the parts of this article from my website is at the end of the article.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Data Science In Action is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2>Part 1: Tool Description Design</h2><p><em>Save as </em><code>tool_descriptions.py</code><em>, run with </em><code>python tool_descriptions.py</code></p><p><strong>Maps to Task Statement 2.1: Design effective tool interfaces with clear descriptions and boundaries.</strong></p><p>Here is the exact problem from Question 2 in the official exam guide, under the Customer Support Resolution Agent scenario:</p><blockquote><p>Production logs show the agent frequently calls get_customer when users ask about orders (e.g., &#8220;check my order #12345&#8221;), instead of calling lookup_order. Both tools have minimal descriptions (&#8221;Retrieves customer information&#8221; / &#8220;Retrieves order details&#8221;) and accept similar identifier formats. What is the most effective first step to improve tool selection reliability?</p></blockquote><p>The correct answer is to expand each tool&#8217;s description to include input formats, example queries, edge cases, and explicit boundaries relative to similar tools; not to add few-shot examples, build a routing layer, or consolidate the tools. Below is the before and after.</p><pre><code><code>import anthropic

client = anthropic.Anthropic()

# THE PROBLEM: two minimal, near-identical descriptions. Claude has almost
# nothing to differentiate them, especially for a request like "check my
# order #12345" which could plausibly sound like either a customer lookup
# or an order lookup if you are not reading closely.
weak_tools = [
    {
        "name": "get_customer",
        "description": "Retrieves customer information",
        "input_schema": {
            "type": "object",
            "properties": {"identifier": {"type": "string"}},
            "required": ["identifier"],
        },
    },
    {
        "name": "lookup_order",
        "description": "Retrieves order details",
        "input_schema": {
            "type": "object",
            "properties": {"identifier": {"type": "string"}},
            "required": ["identifier"],
        },
    },
]

# THE FIX from Question 2's correct answer: expand each description with
# input formats, example queries, and an explicit boundary statement
# against the similar tool. This is the "most effective first step" the
# exam guide names, ahead of few-shot examples, a routing layer, or
# consolidating the tools into one.
strong_tools = [
    {
        "name": "get_customer",
        "description": (
            "Retrieves a customer's account details (name, email, account status, "
            "membership tier) using their email address or customer ID. "
            "Use this when the request is about the CUSTOMER as a person or "
            "account, such as verifying identity, checking account status, or "
            "looking up contact details. Example queries: 'what is my account "
            "status', 'verify my identity', 'look up customer by email'. "
            "Do NOT use this for questions about a specific purchase or "
            "shipment, use lookup_order for those instead."
        ),
        "input_schema": {
            "type": "object",
            "properties": {
                "identifier": {
                    "type": "string",
                    "description": "Customer email address or customer ID, not an order number.",
                }
            },
            "required": ["identifier"],
        },
    },
    {
        "name": "lookup_order",
        "description": (
            "Retrieves details about a specific PURCHASE or SHIPMENT (items, "
            "price, delivery status, return window) using an order ID. "
            "Use this when the request references a specific order, purchase, "
            "or shipment, especially when an order number is mentioned "
            "directly, such as 'check my order #12345' or 'where is my "
            "package'. Do NOT use this for general account questions, "
            "use get_customer for those instead."
        ),
        "input_schema": {
            "type": "object",
            "properties": {
                "identifier": {
                    "type": "string",
                    "description": "Order ID, for example 'O456' or a number like '12345', not a customer email.",
                }
            },
            "required": ["identifier"],
        },
    },
]


def compare_tool_selection(user_message: str):
    for label, tool_set in [("WEAK descriptions", weak_tools), ("STRONG descriptions", strong_tools)]:
        response = client.messages.create(
            model="claude-sonnet-4-6",
            max_tokens=200,
            tools=tool_set,
            messages=[{"role": "user", "content": user_message}],
        )
        called = [b.name for b in response.content if b.type == "tool_use"]
        print(f"{label}: called {called}")


if __name__ == "__main__":
    compare_tool_selection("Can you check my order #12345?")
</code></code></pre><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!lsJv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41f03adf-4398-48cb-843b-a661d69000d0_2024x183.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!lsJv!, /__u/datascienceinaction.substack.com/w_424, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41f03adf-4398-48cb-843b-a661d69000d0_2024x183.png 424w, /__u/substackcdn.com/image/fetch/$s_!lsJv!, /__u/datascienceinaction.substack.com/w_848, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41f03adf-4398-48cb-843b-a661d69000d0_2024x183.png 848w, /__u/substackcdn.com/image/fetch/$s_!lsJv!, /__u/datascienceinaction.substack.com/w_1272, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41f03adf-4398-48cb-843b-a661d69000d0_2024x183.png 1272w, /__u/substackcdn.com/image/fetch/$s_!lsJv!, /__u/datascienceinaction.substack.com/w_1456, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41f03adf-4398-48cb-843b-a661d69000d0_2024x183.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!lsJv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41f03adf-4398-48cb-843b-a661d69000d0_2024x183.png" width="1456" height="132" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/41f03adf-4398-48cb-843b-a661d69000d0_2024x183.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:132,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:13264,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://datascienceinaction.substack.com/i/212210098?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41f03adf-4398-48cb-843b-a661d69000d0_2024x183.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!lsJv!, /__u/datascienceinaction.substack.com/w_424, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41f03adf-4398-48cb-843b-a661d69000d0_2024x183.png 424w, /__u/substackcdn.com/image/fetch/$s_!lsJv!, /__u/datascienceinaction.substack.com/w_848, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41f03adf-4398-48cb-843b-a661d69000d0_2024x183.png 848w, /__u/substackcdn.com/image/fetch/$s_!lsJv!, /__u/datascienceinaction.substack.com/w_1272, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41f03adf-4398-48cb-843b-a661d69000d0_2024x183.png 1272w, /__u/substackcdn.com/image/fetch/$s_!lsJv!, /__u/datascienceinaction.substack.com/w_1456, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F41f03adf-4398-48cb-843b-a661d69000d0_2024x183.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p><strong>How this connects to the exam:</strong> run this script and compare the two outputs. With the weak descriptions, tool selection can go either way, exactly the unreliability Question 2 describes. With the strong descriptions, the explicit &#8220;Do NOT use this for&#8221; boundary language and the concrete example query (&#8221;check my order #12345,&#8221; lifted directly from the question itself) give Claude enough signal to select lookup_order reliably. Task Statement 2.1&#8217;s skills list names this precisely: &#8220;Writing tool descriptions that clearly differentiate each tool&#8217;s purpose, expected inputs, outputs, and when to use it versus similar alternatives.&#8221;</p><p><strong>Which scenario this applies to:</strong> Scenario 1 (Customer Support Resolution Agent), directly. This part is built as a faithful match to Question 2.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/subscribe"><span>Subscribe now</span></a></p><h2>Part 2: Structured Error Responses</h2><p><em>Save as </em><code>structured_errors.py</code><em>, run with </em><code>python structured_errors.py</code></p>
      <p>
          <a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-8-building-every-domain">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[[CCAR-F-Part 7] What Domain 2 Actually Covers: Tool Design and MCP Integration]]></title><description><![CDATA[Five distinct skills fall under this domain, from writing tool descriptions Claude can reliably tell apart to knowing when Grep beats reading an entire file]]></description><link>https://datascienceinaction.substack.com/p/ccar-f-part-7-what-domain-2-actually</link><guid isPermaLink="false">https://datascienceinaction.substack.com/p/ccar-f-part-7-what-domain-2-actually</guid><dc:creator><![CDATA[Engy Fouda]]></dc:creator><pubDate>Tue, 25 Aug 2026 14:03:46 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!bvus!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2dc69f52-895a-4ad2-b802-1f7f1151264d_1584x1033.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2><strong>This is a part of the Claude Certificate Architect-Foundations:</strong></h2><ol><li><p><a href="/__u/datascienceinaction.substack.com/p/the-five-domains-that-matter-for">[CCAR-F-Part1] The Five Domains That Matter for Claude Architect Certification</a></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/how-to-pass-the-claude-architect">[CCAR-F-Part2] How to Pass the Claude Architect Certification: A Step-by-Step Preparation Guide?</a></strong></p></li><li><p><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-3-the-six-scenarios-you">[CCAR-F-Part 3] The Six Scenarios You Will Face on the Claude Architect Exam</a></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-4-how-to-prepare-for">[CCAR-F-Part 4] How to Prepare for Each of the Six Exam Scenarios?</a></strong></p></li><li><p><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-5-what-domain-1-covers">[CCAR-F-Part 5] What Domain 1 Covers: Agentic Architecture and Orchestration</a></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-6-building-every-domain">[CCAR-F-Part 6] Building Every Domain 1 Pattern: A Complete Implementation Guide</a></strong></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-7-what-domain-2-actually">[CCAR-F-Part 7] What Domain 2 Actually Covers: Tool Design and MCP Integration</a></strong></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-8-building-every-domain">[CCAR-F-Part 8] Building Every Domain 2 Pattern: A Complete Implementation Guide</a></strong></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-9-what-domain-3-actually">[CCAR-F-Part 9] What Domain 3 Actually Covers: Claude Code Configuration and Workflows</a></strong></p></li></ol><p>Download the official exam guide PDF at this link:</p><p><a href="https://everpath-course-content.s3-accelerate.amazonaws.com/instructor%2F6nizmqk8tpzpfjvt6qmmav7rh%2Fpublic%2F1783542750%2FClaude+Certified+Architect+%E2%80%93+Foundations+Exam+Guide.pdf">Claude Certified Architect-Foundation Exam Guide</a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/subscribe"><span>Subscribe now</span></a></p><div><hr></div><h2>What Domain 2 Actually Covers: Tool Design and MCP Integration</h2><p><strong>Five distinct skills fall under this domain, from writing tool descriptions Claude can reliably tell apart to knowing when Grep beats reading an entire file</strong></p><p>Domain 2 carries 18% of the exam. It is smaller than Domain 1, but it is arguably more forgiving of shortcuts, since a poorly designed tool interface will produce visible, repeatable failures long before an exam question ever asks about it. This is also the domain most people underestimate, because tool design sounds like a small implementation detail rather than an architectural decision. It is not. Here is the complete picture</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!bvus!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2dc69f52-895a-4ad2-b802-1f7f1151264d_1584x1033.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!bvus!, /__u/datascienceinaction.substack.com/w_424, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2dc69f52-895a-4ad2-b802-1f7f1151264d_1584x1033.png 424w, /__u/substackcdn.com/image/fetch/$s_!bvus!, /__u/datascienceinaction.substack.com/w_848, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2dc69f52-895a-4ad2-b802-1f7f1151264d_1584x1033.png 848w, /__u/substackcdn.com/image/fetch/$s_!bvus!, /__u/datascienceinaction.substack.com/w_1272, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2dc69f52-895a-4ad2-b802-1f7f1151264d_1584x1033.png 1272w, /__u/substackcdn.com/image/fetch/$s_!bvus!, /__u/datascienceinaction.substack.com/w_1456, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2dc69f52-895a-4ad2-b802-1f7f1151264d_1584x1033.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!bvus!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2dc69f52-895a-4ad2-b802-1f7f1151264d_1584x1033.png" width="1456" height="950" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2dc69f52-895a-4ad2-b802-1f7f1151264d_1584x1033.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:950,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2049573,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://datascienceinaction.substack.com/i/212145212?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2dc69f52-895a-4ad2-b802-1f7f1151264d_1584x1033.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!bvus!, /__u/datascienceinaction.substack.com/w_424, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2dc69f52-895a-4ad2-b802-1f7f1151264d_1584x1033.png 424w, /__u/substackcdn.com/image/fetch/$s_!bvus!, /__u/datascienceinaction.substack.com/w_848, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2dc69f52-895a-4ad2-b802-1f7f1151264d_1584x1033.png 848w, /__u/substackcdn.com/image/fetch/$s_!bvus!, /__u/datascienceinaction.substack.com/w_1272, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2dc69f52-895a-4ad2-b802-1f7f1151264d_1584x1033.png 1272w, /__u/substackcdn.com/image/fetch/$s_!bvus!, /__u/datascienceinaction.substack.com/w_1456, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2dc69f52-895a-4ad2-b802-1f7f1151264d_1584x1033.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>.</p><p></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/subscribe"><span>Subscribe now</span></a></p><h2>Topic 1: Designing Tool Interfaces With Clear Descriptions and Boundaries</h2><p>The single most important fact in this domain is this: the tool description is the primary mechanism Claude uses to decide which tool to call. Not the tool name. Not your system prompt, mostly. The description.</p><p>When two tools have minimal, near-identical descriptions, such as &#8220;Retrieves customer information&#8221; and &#8220;Retrieves order details,&#8221; Claude does not have enough signal to reliably distinguish between them, especially when a request could plausibly involve either one. The fix is not a longer system prompt telling Claude to be careful. The fix is to write descriptions that actually differentiate the tools: what inputs each one expects, example queries for each, edge cases, and explicit statements of when to use this tool versus a similar one.</p><p>There is a second, sneakier failure mode here too. Your system prompt can accidentally create tool associations through keyword sensitivity, even when your tool descriptions are perfectly fine. If your system prompt repeatedly uses language that happens to match one tool&#8217;s description more than another&#8217;s, Claude can develop a bias toward that tool regardless of what the request actually needs.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Data Science In Action is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2>Topic 2: Structured Error Responses</h2><p>When a tool fails, what you return matters as much as the failure itself. A generic &#8220;Operation failed&#8221; message gives Claude nothing to work with. It cannot decide whether to retry, try something else, or explain the problem to the user because it does not know what kind of failure occurred.</p><p>The fix is to categorize errors and return that category as structured metadata. Transient errors, such as timeouts or temporary unavailability, might succeed on retry. Validation errors, such as malformed input, will not. Permission errors need a completely different response than business rule violations. When you return an errorCategory field along with a retryable boolean and a human-readable description, Claude can make an appropriate recovery decision rather than guessing.</p><p>There is a related distinction worth internalizing here: an access failure, such as a timeout, is not the same as a valid empty result. A search that legitimately found nothing is a successful query with no matches, not an error. Treating both the same way, or worse, treating both as generic failures, hides information Claude needs to act correctly.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/p/ccar-f-part-7-what-domain-2-actually?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/p/ccar-f-part-7-what-domain-2-actually?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share</span></a></p><h2>Topic 3: Distributing Tools Across Agents and Configuring Tool Choice</h2><p>More tools does not mean a smarter agent. It usually means a less reliable one. Giving an agent eighteen tools instead of four or five measurably degrades the reliability of tool selection, simply because there is more to choose from and more room for confusion.</p><p>This becomes especially important in multi-agent systems. An agent given tools outside its actual specialization tends to misuse them, such as a synthesis agent that starts attempting web searches because it happens to have that tool available. The fix is scoped access: give each agent only the tools its role actually requires, and reserve broader cross-role tools for genuinely high-frequency shared needs.</p><p>Separately from which tools an agent has, you can also control how it uses them through the tool_choice parameter. Setting tool_choice to &#8220;auto&#8221; lets Claude decide whether to call a tool at all. Setting it to &#8220;any&#8221; forces Claude to use a tool rather than just respond with text. Forcing a specific named tool guarantees that exact tool runs, which is useful when a particular step, like extracting metadata, must happen before anything else can proceed.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/p/ccar-f-part-7-what-domain-2-actually?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Data Science In Action! This post is public, so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/p/ccar-f-part-7-what-domain-2-actually?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/p/ccar-f-part-7-what-domain-2-actually?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share</span></a></p></div><h2>Topic 4: Integrating MCP Servers</h2><p>Model Context Protocol servers are how you wire external tools into Claude Code and agent workflows, and where you configure them matters. A project-scoped server, defined in a .mcp.json file at the project root, is shared with your whole team through version control. A user-scoped server, defined in your personal configuration, is just for you, useful for experimentation without affecting anyone else.</p><p>Credentials belong in environment variable references inside that configuration, not hardcoded values, so tokens never end up committed to your repository.</p><p>One detail that is easy to miss: tools from every MCP server you have configured become available simultaneously once connected. There is also a second MCP primitive worth knowing beyond tools: resources. Resources expose content catalogs, such as a list of available documents or a database schema, directly to the agent, reducing the number of exploratory tool calls it needs to make to figure out what exists.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share&quot;,&quot;text&quot;:&quot;Share Data Science In Action&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share Data Science In Action</span></a></p><h2>Topic 5: Selecting Built-In Tools</h2><p>Claude Code and Agent SDK-based agents come with built-in tools: Read, Write, Edit, Bash, Grep, and Glob. Knowing which one fits a given task is its own skill.</p><ol><li><p>Grep searches file contents, useful when you need to find every place a function is called or every occurrence of an error message. </p></li><li><p>Glob matches file paths by pattern, useful when you need to find files by name or extension rather than by content. </p></li><li><p>Read and Write handle full file operations. </p></li><li><p>Edit makes a targeted change using unique text matching, and when that unique match cannot be found because the text appears more than once in the file, the reliable fallback is Read followed by Write instead of forcing Edit to work.</p></li></ol><p>There is also a sequencing skill here. Effective codebase exploration usually starts with Grep to find entry points, then follows with Read to trace how things connect, rather than reading every file upfront and hoping the important parts stand out.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?&amp;gift=true&quot;,&quot;text&quot;:&quot;Give a gift subscription&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/subscribe?&amp;gift=true"><span>Give a gift subscription</span></a></p><h2>Why All Five Matter Together</h2><p>None of these five topics function in isolation. A well-scoped agent (Topic 3) still fails if its tool descriptions are ambiguous (Topic 1). A cleanly described tool can still cause downstream problems if its errors are generic (Topic 2). An MCP server correctly configured at the project level (Topic 4) is only useful if the agent calling it also has the right built-in tools available for the parts of the task that do not need MCP at all (Topic 5).</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/leaderboard?&amp;utm_source=post&quot;,&quot;text&quot;:&quot;Refer a friend&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/leaderboard?&amp;utm_source=post"><span>Refer a friend</span></a></p><p>The next article in this series builds on each of these five topics with real, runnable code, including two scenarios pulled directly from the certification exam guide&#8217;s sample questions.</p><div class="directMessage button" data-attrs="{&quot;userId&quot;:43386542,&quot;userName&quot;:&quot;Engy Fouda&quot;,&quot;canDm&quot;:null,&quot;dmUpgradeOptions&quot;:null,&quot;isEditorNode&quot;:true}" data-component-name="DirectMessageToDOM"></div><p>Subscribe to Data Science In Action for the full implementation guide.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/p/ccar-f-part-7-what-domain-2-actually/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/p/ccar-f-part-7-what-domain-2-actually/comments"><span>Leave a comment</span></a></p><p>#Claude #CertifiedArchitect #AI #MCP #ToolDesign #Certification #DataScienceInAction</p>]]></content:encoded></item><item><title><![CDATA[[CCAR-F-Part 6] Building Every Domain 1 Pattern: A Complete Implementation Guide]]></title><description><![CDATA[Runnable code for the agentic loop, all five workflow patterns, subagent configuration, and session management, with the exact exam task statements and sample questions each part demonstrates]]></description><link>https://datascienceinaction.substack.com/p/ccar-f-part-6-building-every-domain</link><guid isPermaLink="false">https://datascienceinaction.substack.com/p/ccar-f-part-6-building-every-domain</guid><dc:creator><![CDATA[Engy Fouda]]></dc:creator><pubDate>Fri, 21 Aug 2026 20:49:55 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!BWM6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F86841b3d-ff6f-45c3-95d3-18a0ad73b6e7_1979x1740.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2><strong>This is a part of the Claude Certificate Architect-Foundations:</strong></h2><ol><li><p><a href="/__u/datascienceinaction.substack.com/p/the-five-domains-that-matter-for">[CCAR-F-Part1] The Five Domains That Matter for Claude Architect Certification</a></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/how-to-pass-the-claude-architect">[CCAR-F-Part2] How to Pass the Claude Architect Certification: A Step-by-Step Preparation Guide?</a></strong></p></li><li><p><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-3-the-six-scenarios-you">[CCAR-F-Part 3] The Six Scenarios You Will Face on the Claude Architect Exam</a></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-4-how-to-prepare-for">[CCAR-F-Part 4] How to Prepare for Each of the Six Exam Scenarios?</a></strong></p></li><li><p><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-5-what-domain-1-covers">[CCAR-F-Part 5] What Domain 1 Covers: Agentic Architecture and Orchestration</a></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-6-building-every-domain">[CCAR-F-Part 6] Building Every Domain 1 Pattern: A Complete Implementation Guide</a></strong></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-7-what-domain-2-actually">[CCAR-F-Part 7] What Domain 2 Actually Covers: Tool Design and MCP Integration</a></strong></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-8-building-every-domain">[CCAR-F-Part 8] Building Every Domain 2 Pattern: A Complete Implementation Guide</a></strong></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-9-what-domain-3-actually">[CCAR-F-Part 9] What Domain 3 Actually Covers: Claude Code Configuration and Workflows</a></strong></p></li></ol><p>Download the official exam guide PDF at this link:</p><p><a href="https://everpath-course-content.s3-accelerate.amazonaws.com/instructor%2F6nizmqk8tpzpfjvt6qmmav7rh%2Fpublic%2F1783542750%2FClaude+Certified+Architect+%E2%80%93+Foundations+Exam+Guide.pdf">Claude Certified Architect-Foundation Exam Guide</a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/subscribe"><span>Subscribe now</span></a></p><div><hr></div><h1>Building Every Domain 1 Pattern: A Complete Implementation Guide</h1><p><strong>Runnable code for the agentic loop, all five workflow patterns, subagent configuration, and session management, with the exact exam task statements and sample questions each part demonstrates</strong></p><p>Article 5 covered what Domain 1 actually includes: workflows versus agents, the agentic loop mechanics, task decomposition, five orchestration patterns, subagent configuration, and session state. This article builds each one, in order, with runnable code.</p><p>Domain 1 breaks down into seven official task statements (1.1 through 1.7) in Anthropic&#8217;s exam guide. Each part below names which task statement it demonstrates, and where the exam guide&#8217;s own sample questions test that exact concept, we show the question and explain how the code you just ran answers it.</p><blockquote><p><strong>How this article aligns with the exam&#8217;s scenarios.</strong> The certification tests Domain 1 through four of six randomly selected scenarios, not through the domain in isolation. Part 5 below is built as a direct, faithful match to Scenario 3 (Multi-Agent Research System) and its actual sample question from the exam guide. The other parts teach the underlying pattern using original examples, since these patterns apply across multiple scenarios rather than belonging to just one, but each part now names which official scenario would realistically call for that pattern, so you can connect the technique to the context you&#8217;ll actually see on exam day.</p></blockquote><p>This is a longer tutorial than most in this series, because the domain itself is the largest on the exam at 27%. Work through it in sections rather than in one sitting if that suits you better.</p><h2>Setup</h2><p>Every code block in this guide is Python. Each part below is a separate, standalone script. Save it as its own file and run it independently with <code>python filename.py</code>. They are not meant to be pasted into one combined file.</p><pre><code><code>pip install claude-agent-sdk anthropic</code></code></pre><p>Then set your Anthropic API key as an environment variable. The command depends on which terminal you are using, so check your terminal&#8217;s title bar or prompt style against the three options below before running anything.</p><p><strong>Command Prompt (cmd.exe on Windows, prompt looks like </strong><code>C:\Users\yourname&gt;</code><strong>):</strong></p><pre><code><code>set ANTHROPIC_API_KEY=your-key-here</code></code></pre><p><strong>PowerShell (prompt looks like </strong><code>PS C:\Users\yourname&gt;</code><strong>):</strong></p><pre><code><code>$env:ANTHROPIC_API_KEY="your-key-here"</code></code></pre><p><strong>Mac or Linux terminal (bash or zsh):</strong></p><pre><code><code>export ANTHROPIC_API_KEY="your-key-here"</code></code></pre><p>A note for Windows users: Command Prompt and PowerShell look similar but are different programs with different commands. The <code>export</code> command only works in Mac, Linux, or WSL terminals, and will fail with a &#8220;not recognized&#8221; error in either Windows shell, since it does not exist there.</p><p>Also worth knowing, whichever shell you use: this environment variable only lasts for that terminal window&#8217;s current session. Close the window, and you will need to set it again the next time before running any script in this article.</p><p>You can download the code for all of the parts of this article from my website: </p><p><a href="https://engyfoda.com/CCARF_Donamin1.zip">https://engyfoda.com/CCARF_Donamin1.zip</a></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Data Science In Action is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2>Part 1: The Agentic Loop, By Hand</h2><p><em>Save as </em><code>agentic_loop.py</code><em>, run with </em><code>python agentic_loop.py</code></p><p><strong>Maps to Task Statement 1.1: Design and implement agentic loops for autonomous task execution.</strong></p><div class="pullquote"><p><strong>Agentic loop:</strong><span> The repeating cycle where the model takes an action, observes the result, and decides the next action, continuing until the goal is met or a stopping condition fires.</span></p></div><p>Before using the SDK&#8217;s automatic loop handling, it is worth seeing the mechanism explicitly, using the raw Messages API. This is the piece that the SDK normally hides from you, and it is also where the exam guide lists specific anti-patterns to avoid.</p><pre><code><code>import anthropic

client = anthropic.Anthropic()

# Tool definitions follow the standard Anthropic API schema: a name, a
# description the model uses to decide when to call it, and a JSON schema
# for the expected input.
tools = [
    {
        "name": "get_weather",
        "description": "Get the current weather for a city",
        "input_schema": {
            "type": "object",
            "properties": {"city": {"type": "string"}},
            "required": ["city"],
        },
    }
]

def get_weather(city: str) -&gt; str:
    # Mock implementation, replace with a real weather API call.
    return f"It is 68 degrees and partly cloudy in {city}."


def run_agentic_loop(user_message: str):
    # The conversation history. Every tool call and every tool result gets
    # appended here, so each new API call sees the full accumulated context.
    # This is what Task Statement 1.1 calls "tool results are appended to
    # conversation history so the model can reason about the next action."
    messages = [{"role": "user", "content": user_message}]

    while True:
        response = client.messages.create(
            model="claude-sonnet-4-6",
            max_tokens=1024,
            tools=tools,
            messages=messages,
        )

        # Every turn, model or tool, gets appended before we decide what
        # happens next. Skipping this step is how context gets silently lost.
        messages.append({"role": "assistant", "content": response.content})

        # THIS IS THE PART THE EXAM TESTS DIRECTLY.
        # response.stop_reason is the actual, documented control signal for
        # the loop. "tool_use" means Claude wants to call a tool and the loop
        # should continue. "end_turn" means Claude considers the task done.
        #
        # The exam guide names three specific anti-patterns to avoid here:
        #   1. Parsing the assistant's natural language text to guess whether
        #      it's "finished" (unreliable, the model might describe finishing
        #      without actually being done, or vice versa)
        #   2. Using an arbitrary iteration cap as your PRIMARY stopping
        #      mechanism (a cap is fine as a safety net, but stop_reason
        #      should be what actually ends the loop)
        #   3. Checking for the presence of assistant text content as a
        #      completion indicator (Claude can write text AND still want
        #      to call a tool in the same turn)
        if response.stop_reason == "tool_use":
            tool_results = []
            for block in response.content:
                if block.type == "tool_use" and block.name == "get_weather":
                    result = get_weather(block.input["city"])
                    tool_results.append({
                        "type": "tool_result",
                        "tool_use_id": block.id,
                        "content": result,
                    })

            # The tool result gets appended as a user-role message, and the
            # loop continues by calling the API again with this new context.
            messages.append({"role": "user", "content": tool_results})
            continue

        if response.stop_reason == "end_turn":
            for block in response.content:
                if block.type == "text":
                    print(block.text)
            break


if __name__ == "__main__":
    run_agentic_loop("What is the weather like in Austin?")
</code></code></pre><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!6Az2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d66c5d4-64e4-438a-8146-565afa0f47f1_3787x238.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!6Az2!, /__u/datascienceinaction.substack.com/w_424, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d66c5d4-64e4-438a-8146-565afa0f47f1_3787x238.png 424w, /__u/substackcdn.com/image/fetch/$s_!6Az2!, /__u/datascienceinaction.substack.com/w_848, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d66c5d4-64e4-438a-8146-565afa0f47f1_3787x238.png 848w, /__u/substackcdn.com/image/fetch/$s_!6Az2!, /__u/datascienceinaction.substack.com/w_1272, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d66c5d4-64e4-438a-8146-565afa0f47f1_3787x238.png 1272w, /__u/substackcdn.com/image/fetch/$s_!6Az2!, /__u/datascienceinaction.substack.com/w_1456, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d66c5d4-64e4-438a-8146-565afa0f47f1_3787x238.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!6Az2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d66c5d4-64e4-438a-8146-565afa0f47f1_3787x238.png" width="1456" height="92" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4d66c5d4-64e4-438a-8146-565afa0f47f1_3787x238.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:92,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:24724,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://datascienceinaction.substack.com/i/211901751?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d66c5d4-64e4-438a-8146-565afa0f47f1_3787x238.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!6Az2!, /__u/datascienceinaction.substack.com/w_424, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d66c5d4-64e4-438a-8146-565afa0f47f1_3787x238.png 424w, /__u/substackcdn.com/image/fetch/$s_!6Az2!, /__u/datascienceinaction.substack.com/w_848, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d66c5d4-64e4-438a-8146-565afa0f47f1_3787x238.png 848w, /__u/substackcdn.com/image/fetch/$s_!6Az2!, /__u/datascienceinaction.substack.com/w_1272, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d66c5d4-64e4-438a-8146-565afa0f47f1_3787x238.png 1272w, /__u/substackcdn.com/image/fetch/$s_!6Az2!, /__u/datascienceinaction.substack.com/w_1456, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d66c5d4-64e4-438a-8146-565afa0f47f1_3787x238.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">The above code&#8217;s output</figcaption></figure></div><p><strong>How this connects to the exam:</strong> Task Statement 1.1&#8217;s skills section states the correct approach almost word for word: &#8220;Implementing agentic loop control flow that continues when stop_reason is &#8216;tool_use&#8217; and terminates when stop_reason is &#8216;end_turn&#8217;.&#8221; That is exactly the <code>if response.stop_reason ==</code> logic above, and nothing else. If you ever find yourself writing code that checks <code>if "done" in response_text</code> or similar, that is the anti-pattern the exam is testing you to recognize and avoid.</p><div class="pullquote"><p><strong>stop_reason:</strong><span> A field on every API response saying why the model stopped. <br>1. </span><code>tool_use</code><span> = wants a tool (continue); <br>2. </span><code>end_turn</code><span> = finished (stop); <br>3. </span><code>max_tokens</code><span> = truncated (check for it); <br>4.</span><code>stop_sequence</code><span> = hit a custom stop.</span></p></div><p><strong>Which scenario this applies to:</strong> the agentic loop underlies every Agent SDK scenario on the exam. Still, it is most directly tested in Scenario 1 (Customer Support Resolution Agent) and Scenario 3 (Multi-Agent Research System), since both are built on the Claude Agent SDK from the ground up.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/subscribe"><span>Subscribe now</span></a></p>
      <p>
          <a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-6-building-every-domain">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[[CCAR-F-Part 5] What Domain 1 Covers: Agentic Architecture and Orchestration]]></title><description><![CDATA[The highest-weighted domain on the exam covers six distinct topics]]></description><link>https://datascienceinaction.substack.com/p/ccar-f-part-5-what-domain-1-covers</link><guid isPermaLink="false">https://datascienceinaction.substack.com/p/ccar-f-part-5-what-domain-1-covers</guid><dc:creator><![CDATA[Engy Fouda]]></dc:creator><pubDate>Thu, 20 Aug 2026 17:45:19 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ILaU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa1a6ea5-d419-4c04-9368-d336f89bef67_1585x1038.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>This is a part of the Claude Certificate Architect-Foundations:</h2><ol><li><p><a href="/__u/datascienceinaction.substack.com/p/the-five-domains-that-matter-for">[CCAR-F-Part1] The Five Domains That Matter for Claude Architect Certification</a></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/how-to-pass-the-claude-architect">[CCAR-F-Part2] How to Pass the Claude Architect Certification: A Step-by-Step Preparation Guide?</a></strong></p></li><li><p><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-3-the-six-scenarios-you">[CCAR-F-Part 3] The Six Scenarios You Will Face on the Claude Architect Exam</a></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-4-how-to-prepare-for">[CCAR-F-Part 4] How to Prepare for Each of the Six Exam Scenarios?</a></strong></p></li><li><p><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-5-what-domain-1-covers">[CCAR-F-Part 5] What Domain 1 Covers: Agentic Architecture and Orchestration</a></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-6-building-every-domain">[CCAR-F-Part 6] Building Every Domain 1 Pattern: A Complete Implementation Guide</a></strong></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-7-what-domain-2-actually">[CCAR-F-Part 7] What Domain 2 Actually Covers: Tool Design and MCP Integration</a></strong></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-8-building-every-domain">[CCAR-F-Part 8] Building Every Domain 2 Pattern: A Complete Implementation Guide</a></strong></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-9-what-domain-3-actually">[CCAR-F-Part 9] What Domain 3 Actually Covers: Claude Code Configuration and Workflows</a></strong></p></li></ol><p>Download the official exam guide PDF at this link: </p><p><a href="https://everpath-course-content.s3-accelerate.amazonaws.com/instructor%2F6nizmqk8tpzpfjvt6qmmav7rh%2Fpublic%2F1783542750%2FClaude+Certified+Architect+%E2%80%93+Foundations+Exam+Guide.pdf">Claude Certified Architect-Foundation Exam Guide</a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/subscribe"><span>Subscribe now</span></a></p><div><hr></div><h2>Introduction</h2><p>Domain 1 carries the most weight on the certification exam at 27 percent, more than any other domain. If you only study one topic deeply, this should be it. But it is also the domain most people misunderstand, because it sounds like it is about one thing (agents talking to other agents) when it actually covers six distinct topics that all fit under the umbrella of &#8220;how do you architect a system that uses Claude to get work done.&#8221;</p><p>Here is the complete picture.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!ILaU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa1a6ea5-d419-4c04-9368-d336f89bef67_1585x1038.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!ILaU!, /__u/datascienceinaction.substack.com/w_424, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa1a6ea5-d419-4c04-9368-d336f89bef67_1585x1038.png 424w, /__u/substackcdn.com/image/fetch/$s_!ILaU!, /__u/datascienceinaction.substack.com/w_848, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa1a6ea5-d419-4c04-9368-d336f89bef67_1585x1038.png 848w, /__u/substackcdn.com/image/fetch/$s_!ILaU!, /__u/datascienceinaction.substack.com/w_1272, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa1a6ea5-d419-4c04-9368-d336f89bef67_1585x1038.png 1272w, /__u/substackcdn.com/image/fetch/$s_!ILaU!, /__u/datascienceinaction.substack.com/w_1456, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa1a6ea5-d419-4c04-9368-d336f89bef67_1585x1038.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!ILaU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa1a6ea5-d419-4c04-9368-d336f89bef67_1585x1038.png" width="1456" height="954" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fa1a6ea5-d419-4c04-9368-d336f89bef67_1585x1038.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:954,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1962684,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://datascienceinaction.substack.com/i/211901464?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa1a6ea5-d419-4c04-9368-d336f89bef67_1585x1038.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!ILaU!, /__u/datascienceinaction.substack.com/w_424, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa1a6ea5-d419-4c04-9368-d336f89bef67_1585x1038.png 424w, /__u/substackcdn.com/image/fetch/$s_!ILaU!, /__u/datascienceinaction.substack.com/w_848, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa1a6ea5-d419-4c04-9368-d336f89bef67_1585x1038.png 848w, /__u/substackcdn.com/image/fetch/$s_!ILaU!, /__u/datascienceinaction.substack.com/w_1272, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa1a6ea5-d419-4c04-9368-d336f89bef67_1585x1038.png 1272w, /__u/substackcdn.com/image/fetch/$s_!ILaU!, /__u/datascienceinaction.substack.com/w_1456, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa1a6ea5-d419-4c04-9368-d336f89bef67_1585x1038.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Data Science In Action is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2>Topic 1: Workflows Versus Agents</h2><p>Before you design anything, you need to know which one you are building, because they are not the same thing.</p><p>A workflow is a predefined path. You, the developer, decide the sequence of steps in advance. The LLM fills in specific steps, but the control flow is yours. A workflow is predictable and easy to debug, because the same input roughly follows the same path every time.</p><p>An agent is different. Claude decides on its own process based on environmental feedback in a loop until the task is done. You do not predetermine the steps. Claude does.</p><p>Neither is better. Workflows offer predictability and consistency for well-defined tasks. Agents offer flexibility when you cannot predict the steps in advance, at the cost of less predictable behavior and higher latency. The exam tests whether you can look at a scenario and correctly identify which one fits.</p><p>A rule of thumb: if you can draw the flowchart of every possible path before you write any code, you probably want a workflow. If the number and nature of steps genuinely depends on what the agent discovers along the way, you want an agent.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/subscribe"><span>Subscribe now</span></a></p><h2>Topic 2: The Agentic Loop</h2><p>An agent is, mechanically, an LLM using tools based on feedback, in a loop. Understanding what actually happens in that loop matters more than it might seem.</p><p>Here is the mechanism. Claude receives a message and decides what to do next. If it wants to use a tool, the API response comes back with a stop reason of <code>tool_use</code>. Your code runs the tool, and the result is appended to the conversation. Then Claude is called again with the updated context, and it decides what to do next, again. This repeats until Claude returns a stop reason of <code>end_turn</code>, meaning it believes the task is complete.</p><p>That stop reason is the actual control signal for the loop. It is not something you infer by parsing what Claude wrote in natural language. Checking <code>stop_reason</code> is the correct way to know whether to continue the loop. Trying to guess from the response text is a common mistake and a real anti-pattern that the exam will test you on.</p><p>If you use the Agent SDK, this loop is handled for you automatically. That is convenient, but it also means the mechanism is invisible unless you deliberately study it separately, which is worth doing, since exam questions about tool result handling assume you understand what is happening underneath the abstraction.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/p/ccar-f-part-5-what-domain-1-covers?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/p/ccar-f-part-5-what-domain-1-covers?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share</span></a></p><h2>Topic 3: Task Decomposition</h2><p>Whether you are building a workflow or an agent, you eventually have to decide how to break a large task into smaller pieces. This sounds simple, but it's actually one of the easiest places to get wrong.</p><p>Decompose too coarsely, and one step tries to do too much, producing unreliable results. Decompose too narrowly, and you create coverage gaps between the pieces, where something important falls through the cracks because no single step owned it.</p><p>The exam favors decomposition that matches the problem's actual structure, rather than an arbitrary number of steps. If a task naturally has three phases, force-fitting it into five steps for the sake of &#8220;more granularity&#8221; tends to introduce exactly the coverage gaps described above.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/p/ccar-f-part-5-what-domain-1-covers?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Data Science In Action! This post is public, so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/p/ccar-f-part-5-what-domain-1-covers?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/p/ccar-f-part-5-what-domain-1-covers?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share</span></a></p></div><h2>Topic 4: The Five Workflow Orchestration Patterns</h2><p>This is the part most people skip past, and it is a meaningful chunk of Domain 1. There are five composable patterns for orchestrating workflows, each suited to a different problem shape.</p><p><strong>Prompt chaining</strong> breaks a task into a sequence of steps, where each step&#8217;s output feeds the next, with validation gates in between. Use this for multi-step transformations that decompose cleanly, like generating an outline, then expanding it into a draft, then editing that draft.</p><p><strong>Routing</strong> classifies an incoming request and directs it to a specialized handler built for that category. Use this when you have genuinely distinct categories of work that benefit from different handling, such as separating billing questions from technical support questions before either reaches a specialized prompt.</p><p><strong>Parallelization</strong> runs multiple calls at once, either by splitting a task into independent pieces (sectioning) or by running the same task multiple times to compare results (voting). Sectioning suits independent subtasks that do not depend on each other. Voting suits situations where you want confidence through consensus, like having several passes review a piece of code for vulnerabilities.</p><p><strong>Orchestrator-workers</strong> is the pattern most people mean by &#8220;multi-agent coordinator.&#8221; A central agent dynamically breaks down a task, delegates parts to worker agents, and then synthesizes their results. The key difference from parallelization is that the subtasks are not predefined. The orchestrator determines them at runtime based on the specific input's requirements. This is the pattern behind coding tools that touch multiple files, and research tools that need to search multiple sources without knowing in advance how many or which ones.</p><p><strong>Evaluator-optimizer</strong> pairs a generator with a separate evaluator that critiques the output in a loop until it meets a quality bar. This works well when you have a clear evaluation criterion and when iterative refinement genuinely improves the result, such as in literary translation, where a first pass may miss nuances that a dedicated critique step can catch.</p><p>Notice that hub-and-spoke coordination is really just the orchestrator-workers pattern by another name. It is one of five. The exam expects you to recognize all five and pick the right one for a given scenario, rather than defaulting to the same pattern regardless of what the problem actually calls for.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share&quot;,&quot;text&quot;:&quot;Share Data Science In Action&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share Data Science In Action</span></a></p><h2>Topic 5: Subagent Configuration</h2><p>Once you have decided to use multiple agents, whether through orchestrator-workers or another multi-agent structure, you need to configure how they actually operate.</p><p>This covers context sharing (subagents do not automatically inherit the coordinator&#8217;s context, so you explicitly decide what each receives), spawning strategies (do you create subagents up front or dynamically as needed), and scoping (which tools and model each subagent has access to). A common anti-pattern here is giving every subagent the coordinator&#8217;s full context, which pollutes each subagent&#8217;s working context with information it does not need and can actively hurt its performance on its specific task.</p><div class="community-chat" data-attrs="{&quot;url&quot;:&quot;https://open.substack.com/pub/datascienceinaction/chat?utm_source=chat_embed&quot;,&quot;subdomain&quot;:&quot;datascienceinaction&quot;,&quot;pub&quot;:{&quot;id&quot;:7180606,&quot;name&quot;:&quot;Data Science In Action&quot;,&quot;author_name&quot;:&quot;Engy Fouda&quot;,&quot;author_photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!CZ7q!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c77e192-01d1-4d3a-b2ff-6e114eecb5d4_1713x1713.jpeg&quot;}}" data-component-name="CommunityChatRenderPlaceholder"></div><h2>Topic 6: Session State Management</h2><p>The last piece of Domain 1 concerns persistence across turns and runs, not just within a single execution.</p><p>Continuing a session automatically picks up the most recent conversation. Resuming a session returns to a specific past session by its ID, which matters for multi-user applications where you cannot rely on &#8220;the most recent one.&#8221; Forking a session creates a new session from an existing one, preserving the original, which is useful when you want to try an alternative approach without losing the path you've already explored.</p><p>These are not just convenience features. The exam tests whether you know which one fits a given requirement: picking up where a process left off after a restart calls for continuing, letting a user return to a specific past thread calls for resuming with a captured ID, and exploring a different approach without disturbing existing work calls for forking.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?&amp;gift=true&quot;,&quot;text&quot;:&quot;Give a gift subscription&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/subscribe?&amp;gift=true"><span>Give a gift subscription</span></a></p><h2>Why All Six Matter Together</h2><p>Domain 1 is not a single skill. It is architectural judgment applied across six related decisions: whether to use a workflow or an agent, how the underlying loop actually functions, how to decompose the task, which of five orchestration patterns fits the problem shape, how to configure agents that work together, and how to manage state across turns and runs.</p><p>The certification exam scenarios will test combinations of these, not each one in isolation. A single question might require you to recognize that a scenario calls for orchestrator-workers rather than routing, while also expecting correct subagent context scoping, in the same answer.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/leaderboard?&amp;utm_source=post&quot;,&quot;text&quot;:&quot;Refer a friend&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/leaderboard?&amp;utm_source=post"><span>Refer a friend</span></a></p><p>The next article in this series builds a complete, runnable implementation that covers each of these patterns with real code, so you can see the differences firsthand rather than just reading about them.</p><p>Subscribe to Data Science In Action for the full implementation guide.</p><p>#Claude #CertifiedArchitect #AI #Agents #Architecture #Certification #DataScienceInAction</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/p/ccar-f-part-5-what-domain-1-covers/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/p/ccar-f-part-5-what-domain-1-covers/comments"><span>Leave a comment</span></a></p>]]></content:encoded></item><item><title><![CDATA[[CCAR-F-Part 4] How to Prepare for Each of the Six Exam Scenarios? ]]></title><description><![CDATA[A scenario-by-scenario study plan, including the specific questions each one tends to ask]]></description><link>https://datascienceinaction.substack.com/p/ccar-f-part-4-how-to-prepare-for</link><guid isPermaLink="false">https://datascienceinaction.substack.com/p/ccar-f-part-4-how-to-prepare-for</guid><dc:creator><![CDATA[Engy Fouda]]></dc:creator><pubDate>Tue, 18 Aug 2026 16:41:34 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Rx0d!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F768a70b2-8568-4e65-b051-3c30406e1dc1_1564x1047.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2><strong>This is a part of the Claude Certificate Architect-Foundations:</strong></h2><ol><li><p><a href="/__u/datascienceinaction.substack.com/p/the-five-domains-that-matter-for">[CCAR-F-Part1] The Five Domains That Matter for Claude Architect Certification</a></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/how-to-pass-the-claude-architect">[CCAR-F-Part2] How to Pass the Claude Architect Certification: A Step-by-Step Preparation Guide?</a></strong></p></li><li><p><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-3-the-six-scenarios-you">[CCAR-F-Part 3] The Six Scenarios You Will Face on the Claude Architect Exam</a></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-4-how-to-prepare-for">[CCAR-F-Part 4] How to Prepare for Each of the Six Exam Scenarios?</a></strong></p></li><li><p><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-5-what-domain-1-covers">[CCAR-F-Part 5] What Domain 1 Covers: Agentic Architecture and Orchestration</a></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-6-building-every-domain">[CCAR-F-Part 6] Building Every Domain 1 Pattern: A Complete Implementation Guide</a></strong></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-7-what-domain-2-actually">[CCAR-F-Part 7] What Domain 2 Actually Covers: Tool Design and MCP Integration</a></strong></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-8-building-every-domain">[CCAR-F-Part 8] Building Every Domain 2 Pattern: A Complete Implementation Guide</a></strong></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-9-what-domain-3-actually">[CCAR-F-Part 9] What Domain 3 Actually Covers: Claude Code Configuration and Workflows</a></strong></p></li></ol><p>Download the official exam guide PDF at this link:</p><p><a href="https://everpath-course-content.s3-accelerate.amazonaws.com/instructor%2F6nizmqk8tpzpfjvt6qmmav7rh%2Fpublic%2F1783542750%2FClaude+Certified+Architect+%E2%80%93+Foundations+Exam+Guide.pdf">Claude Certified Architect-Foundation Exam Guide</a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/subscribe"><span>Subscribe now</span></a></p><div><hr></div><p>The last free article walked through what each of the six scenarios covers conceptually. This one is the study plan. For each scenario, you will get what to review, what mistakes to watch for, and a sample question so you can see exactly how the exam tests it.</p><p>Four of the six scenarios will appear on your exam. Since you will not know which four in advance, treat this as full coverage, then focus your most thorough review on whichever scenarios feel least familiar to you.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Rx0d!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F768a70b2-8568-4e65-b051-3c30406e1dc1_1564x1047.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Rx0d!, /__u/datascienceinaction.substack.com/w_424, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F768a70b2-8568-4e65-b051-3c30406e1dc1_1564x1047.png 424w, /__u/substackcdn.com/image/fetch/$s_!Rx0d!, /__u/datascienceinaction.substack.com/w_848, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F768a70b2-8568-4e65-b051-3c30406e1dc1_1564x1047.png 848w, /__u/substackcdn.com/image/fetch/$s_!Rx0d!, /__u/datascienceinaction.substack.com/w_1272, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F768a70b2-8568-4e65-b051-3c30406e1dc1_1564x1047.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Rx0d!, /__u/datascienceinaction.substack.com/w_1456, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F768a70b2-8568-4e65-b051-3c30406e1dc1_1564x1047.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Rx0d!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F768a70b2-8568-4e65-b051-3c30406e1dc1_1564x1047.png" width="1456" height="975" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/768a70b2-8568-4e65-b051-3c30406e1dc1_1564x1047.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:975,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1981182,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://datascienceinaction.substack.com/i/211585880?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F768a70b2-8568-4e65-b051-3c30406e1dc1_1564x1047.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!Rx0d!, /__u/datascienceinaction.substack.com/w_424, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F768a70b2-8568-4e65-b051-3c30406e1dc1_1564x1047.png 424w, /__u/substackcdn.com/image/fetch/$s_!Rx0d!, /__u/datascienceinaction.substack.com/w_848, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F768a70b2-8568-4e65-b051-3c30406e1dc1_1564x1047.png 848w, /__u/substackcdn.com/image/fetch/$s_!Rx0d!, /__u/datascienceinaction.substack.com/w_1272, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F768a70b2-8568-4e65-b051-3c30406e1dc1_1564x1047.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Rx0d!, /__u/datascienceinaction.substack.com/w_1456, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F768a70b2-8568-4e65-b051-3c30406e1dc1_1564x1047.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Data Science In Action is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h3>Scenario 1: Customer Support Resolution Agent</h3><p><strong>What to review:</strong> Identity verification as a required first step. Explicit escalation criteria (not confidence-based escalation). Programmatic enforcement for business-critical rules like refund thresholds and return windows.</p><p><strong>Common mistake:</strong> Choosing an answer that relies on the agent &#8220;being careful&#8221; or &#8220;using good judgment&#8221; when the scenario involves money or account access. If the consequence of failure is financial or affects account security, the correct answer almost always involves a programmatic/deterministic check rather than a prompt instruction.</p><p><strong>Sample question pattern:</strong> An agent occasionally processes refunds without first verifying the customer's identity. What is the best fix?</p><p>The correct approach is to make programmatic access to the refund tool a prerequisite, blocking access until identity verification is complete. An instruction telling the agent to &#8220;always verify first&#8221; is insufficient when the downside of getting it wrong is money leaving the business.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?&amp;gift=true&quot;,&quot;text&quot;:&quot;Give a gift subscription&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/subscribe?&amp;gift=true"><span>Give a gift subscription</span></a></p><h3>Scenario 2: Code Generation with Claude Code</h3><p><strong>What to review:</strong> The configuration hierarchy (user, project, directory-level settings) and how path-scoped rules work. The distinction between plan mode and direct execution. CI/CD integration basics.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/subscribe"><span>Subscribe now</span></a></p>
      <p>
          <a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-4-how-to-prepare-for">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[[CCAR-F-Part 3] The Six Scenarios You Will Face on the Claude Architect Exam]]></title><description><![CDATA[Why the exam does not ask abstract questions, and what each of the six real-world scenarios actually tests?]]></description><link>https://datascienceinaction.substack.com/p/ccar-f-part-3-the-six-scenarios-you</link><guid isPermaLink="false">https://datascienceinaction.substack.com/p/ccar-f-part-3-the-six-scenarios-you</guid><dc:creator><![CDATA[Engy Fouda]]></dc:creator><pubDate>Tue, 18 Aug 2026 15:26:08 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!t6za!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff40cb697-67a3-4816-84c6-aabdcae0c404_1581x893.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2><strong>This is a part of the Claude Certificate Architect-Foundations:</strong></h2><ol><li><p><a href="/__u/datascienceinaction.substack.com/p/the-five-domains-that-matter-for">[CCAR-F-Part1] The Five Domains That Matter for Claude Architect Certification</a></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/how-to-pass-the-claude-architect">[CCAR-F-Part2] How to Pass the Claude Architect Certification: A Step-by-Step Preparation Guide?</a></strong></p></li><li><p><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-3-the-six-scenarios-you">[CCAR-F-Part 3] The Six Scenarios You Will Face on the Claude Architect Exam</a></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-4-how-to-prepare-for">[CCAR-F-Part 4] How to Prepare for Each of the Six Exam Scenarios?</a></strong></p></li><li><p><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-5-what-domain-1-covers">[CCAR-F-Part 5] What Domain 1 Covers: Agentic Architecture and Orchestration</a></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-6-building-every-domain">[CCAR-F-Part 6] Building Every Domain 1 Pattern: A Complete Implementation Guide</a></strong></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-7-what-domain-2-actually">[CCAR-F-Part 7] What Domain 2 Actually Covers: Tool Design and MCP Integration</a></strong></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-8-building-every-domain">[CCAR-F-Part 8] Building Every Domain 2 Pattern: A Complete Implementation Guide</a></strong></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-9-what-domain-3-actually">[CCAR-F-Part 9] What Domain 3 Actually Covers: Claude Code Configuration and Workflows</a></strong></p></li></ol><p>Download the official exam guide PDF at this link:</p><p><a href="https://everpath-course-content.s3-accelerate.amazonaws.com/instructor%2F6nizmqk8tpzpfjvt6qmmav7rh%2Fpublic%2F1783542750%2FClaude+Certified+Architect+%E2%80%93+Foundations+Exam+Guide.pdf">Claude Certified Architect-Foundation Exam Guide</a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/subscribe"><span>Subscribe now</span></a></p><div><hr></div><p>If you read last week&#8217;s article on the five domains, you know what the exam covers conceptually. But here is something important: the exam does not ask you to define terms. It puts you inside six realistic scenarios and asks how you would handle specific situations within them.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!t6za!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff40cb697-67a3-4816-84c6-aabdcae0c404_1581x893.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!t6za!, /__u/datascienceinaction.substack.com/w_424, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff40cb697-67a3-4816-84c6-aabdcae0c404_1581x893.png 424w, /__u/substackcdn.com/image/fetch/$s_!t6za!, /__u/datascienceinaction.substack.com/w_848, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff40cb697-67a3-4816-84c6-aabdcae0c404_1581x893.png 848w, /__u/substackcdn.com/image/fetch/$s_!t6za!, /__u/datascienceinaction.substack.com/w_1272, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff40cb697-67a3-4816-84c6-aabdcae0c404_1581x893.png 1272w, /__u/substackcdn.com/image/fetch/$s_!t6za!, /__u/datascienceinaction.substack.com/w_1456, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff40cb697-67a3-4816-84c6-aabdcae0c404_1581x893.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!t6za!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff40cb697-67a3-4816-84c6-aabdcae0c404_1581x893.png" width="1456" height="822" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f40cb697-67a3-4816-84c6-aabdcae0c404_1581x893.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:822,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1902430,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://datascienceinaction.substack.com/i/211585732?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff40cb697-67a3-4816-84c6-aabdcae0c404_1581x893.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!t6za!, /__u/datascienceinaction.substack.com/w_424, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff40cb697-67a3-4816-84c6-aabdcae0c404_1581x893.png 424w, /__u/substackcdn.com/image/fetch/$s_!t6za!, /__u/datascienceinaction.substack.com/w_848, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff40cb697-67a3-4816-84c6-aabdcae0c404_1581x893.png 848w, /__u/substackcdn.com/image/fetch/$s_!t6za!, /__u/datascienceinaction.substack.com/w_1272, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff40cb697-67a3-4816-84c6-aabdcae0c404_1581x893.png 1272w, /__u/substackcdn.com/image/fetch/$s_!t6za!, /__u/datascienceinaction.substack.com/w_1456, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff40cb697-67a3-4816-84c6-aabdcae0c404_1581x893.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Four of the six scenarios will appear on your exam, chosen randomly. You will not know which four until you sit down to take it. That means understanding all six is worth your time.</p><p>Here is what each one actually tests.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/subscribe"><span>Subscribe now</span></a></p><h3>Scenario 1: Customer Support Resolution Agent</h3><p>You are building an agent that handles returns, billing disputes, and account issues for an e-commerce company. It has tools to look up customers, check orders, process refunds, and escalate to a human.</p><p>This scenario tests decision-making under ambiguity. When should the agent resolve something on its own, and when should it hand off to a person? The exam repeatedly pushes this because escalation logic is where most production agents fail. Escalate too often, and the agent is useless. Escalate too rarely, and customers get wrong answers on things that actually needed a human.</p><p>You will also see questions about identity verification (why this must happen first) and programmatic enforcement (why some rules cannot just live in a prompt).</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Data Science In Action is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h3>Scenario 2: Code Generation with Claude Code</h3><p>You are using Claude Code across a development team for code review, refactoring, and generating new code. Questions in this scenario cover how configuration works: user-level settings, project-level settings, and directory-specific rules that only load when relevant.</p><p>This scenario also tests when to use plan mode versus direct execution. Plan mode makes sense for changes with real architectural weight. Direct execution makes sense for small, well-defined fixes. The exam wants you to recognize the difference, not just know both modes exist.</p><p>Expect questions about wiring Claude Code into CI/CD pipelines too, since automated review before a human ever looks at a pull request is a common production pattern.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/p/ccar-f-part-3-the-six-scenarios-you?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/p/ccar-f-part-3-the-six-scenarios-you?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share</span></a></p><h3>Scenario 3: Multi-Agent Research System</h3><p>You have a coordinator agent that spawns specialists: one for web search, one for document analysis, one for synthesis, one for reporting. This scenario tests whether you understand the hub-and-spoke pattern, where all communication flows through the coordinator rather than agents talking directly to each other.</p><p>The trickiest questions here involve context passing. Subagents do not automatically know what other subagents found. If you do not explicitly pass findings forward, information disappears. The exam tests whether you understand this and can design around it.</p><p>You will also see error-handling questions: when one specialist fails, how should that failure propagate back to the coordinator so the system can recover rather than break?</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/p/ccar-f-part-3-the-six-scenarios-you?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Data Science In Action! This post is public, so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/p/ccar-f-part-3-the-six-scenarios-you?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/p/ccar-f-part-3-the-six-scenarios-you?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share</span></a></p></div><h3>Scenario 4: Developer Productivity Tools</h3><p>You are building an agent that explores codebases, generates boilerplate code, and automates repetitive engineering tasks. This scenario leans on Claude Code&#8217;s built-in tools: Read, Write, Edit, Bash, Grep, and Glob.</p><p>Questions here test whether you know when to reach for a built-in tool versus when you need a custom MCP integration. They also test scoped access. Should this particular agent have Bash access, or does that create more risk than value for what it is doing?</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share&quot;,&quot;text&quot;:&quot;Share Data Science In Action&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share Data Science In Action</span></a></p><h3>Scenario 5: Claude Code in CI/CD</h3><p>You are running Claude Code inside a pipeline for automated code review and test generation, with no human sitting at a keyboard watching it work. This scenario specifically tests non-interactive mode and structured output formats that a pipeline can parse and act on.</p><p>A recurring theme here is false positive management. If your automated reviewer flags every minor style preference as a blocking issue, developers will start ignoring it. The exam tests whether you understand how to calibrate the tool's strictness to keep it useful.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/leaderboard?&amp;utm_source=post&quot;,&quot;text&quot;:&quot;Refer a friend&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/leaderboard?&amp;utm_source=post"><span>Refer a friend</span></a></p><h3>Scenario 6: Structured Data Extraction</h3><p>You are building a system that extracts structured data from documents, validates the output, and handles edge cases where extraction fails. This scenario tests JSON schema design specifically: required versus optional fields, and how nullable fields prevent the model from inventing data it could not actually find.</p><p>You will also see validation-retry loop questions. What happens when the first extraction attempt fails validation? A well-designed system does not just fail. It retries, providing feedback on what went wrong.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?&amp;gift=true&quot;,&quot;text&quot;:&quot;Give a gift subscription&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/subscribe?&amp;gift=true"><span>Give a gift subscription</span></a></p><h3>Why the Scenario Format Matters</h3><p>Notice what these six scenarios have in common. None of them are abstract. Each one drops you into a specific system with specific tools and asks how you would handle a specific situation inside it.</p><p>This means studying definitions will only get you partway. You need to have actually built something like each of these, or spent real time thinking through how you would do so. The exam is testing judgment under realistic constraints, not vocabulary.</p><p>If you have shipped a customer-facing agent, Scenario 1 will feel familiar. If you have configured Claude Code for a team, Scenario 2 will feel familiar. The scenarios you have not touched are the ones worth spending deliberate prep time on, since your instincts have not been built yet.</p><p>Subscribe to Data Science In Action for the full deep-dive series on each of these scenarios, coming over the next several weeks.</p><p>#Claude #CertifiedArchitect #AI #Agents #ProductionSystems #Certification #DataScienceInAction</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/p/ccar-f-part-3-the-six-scenarios-you/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/p/ccar-f-part-3-the-six-scenarios-you/comments"><span>Leave a comment</span></a></p>]]></content:encoded></item><item><title><![CDATA[[CCAR-F-Part2] How to Pass the Claude Architect Certification: A Step-by-Step Preparation Guide?]]></title><description><![CDATA[A realistic study plan that works because it&#8217;s built on hands-on experience, not memorization. Plus the common mistakes that trip people up]]></description><link>https://datascienceinaction.substack.com/p/how-to-pass-the-claude-architect</link><guid isPermaLink="false">https://datascienceinaction.substack.com/p/how-to-pass-the-claude-architect</guid><dc:creator><![CDATA[Engy Fouda]]></dc:creator><pubDate>Sat, 15 Aug 2026 14:02:44 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!MsVO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0130ab7b-f6da-4a83-adad-56637b16edf5_1595x1047.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>This is a part of the Claude Certificate Architect-Foundations:</h2><ol><li><p><a href="/__u/datascienceinaction.substack.com/p/the-five-domains-that-matter-for">[CCAR-F-Part1] The Five Domains That Matter for Claude Architect Certification</a></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/how-to-pass-the-claude-architect">[CCAR-F-Part2] How to Pass the Claude Architect Certification: A Step-by-Step Preparation Guide?</a></strong></p></li><li><p><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-3-the-six-scenarios-you">[CCAR-F-Part 3] The Six Scenarios You Will Face on the Claude Architect Exam</a></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-4-how-to-prepare-for">[CCAR-F-Part 4] How to Prepare for Each of the Six Exam Scenarios?</a></strong></p></li><li><p><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-5-what-domain-1-covers">[CCAR-F-Part 5] What Domain 1 Covers: Agentic Architecture and Orchestration</a></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-6-building-every-domain">[CCAR-F-Part 6] Building Every Domain 1 Pattern: A Complete Implementation Guide</a></strong></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-7-what-domain-2-actually">[CCAR-F-Part 7] What Domain 2 Actually Covers: Tool Design and MCP Integration</a></strong></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-8-building-every-domain">[CCAR-F-Part 8] Building Every Domain 2 Pattern: A Complete Implementation Guide</a></strong></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-9-what-domain-3-actually">[CCAR-F-Part 9] What Domain 3 Actually Covers: Claude Code Configuration and Workflows</a></strong></p></li></ol><p>Download the official exam guide PDF at this link: </p><p><a href="https://everpath-course-content.s3-accelerate.amazonaws.com/instructor%2F6nizmqk8tpzpfjvt6qmmav7rh%2Fpublic%2F1783542750%2FClaude+Certified+Architect+%E2%80%93+Foundations+Exam+Guide.pdf">Claude Certified Architect-Foundation Exam Guide</a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/subscribe"><span>Subscribe now</span></a></p><div><hr></div><h1>Introduction</h1><p>You&#8217;ve decided to get the Claude Certified Architect Foundations certification. Smart choice. This isn&#8217;t a test designed to trip you up. It&#8217;s a test designed to validate that you actually know how to build production systems with Claude.</p><p>If you have not read part 1 of this series, please go ahead and read it. It&#8217;s free.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;98c020ac-645c-4482-a8db-4178fe0b23ed&quot;,&quot;caption&quot;:&quot;You&#8217;re reading about Claude certifications, which means you&#8217;ve built something real. Maybe you&#8217;ve used Claude to automate a workflow, or you&#8217;ve deployed an agent into production and had to debug it at 2 AM when something went wrong. Now you&#8217;re considering getting certified. Not just to have a credential, but to prove you actually know how to ship with C&#8230;&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;[CCAR-F-Part1] The Five Domains That Matter for Claude Architect Certification&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:43386542,&quot;name&quot;:&quot;Engy Fouda&quot;,&quot;bio&quot;:&quot;AI Architect, Adjunct Lecturer, Freelance SAS, Docker, Kubernetes, Python, Technical Writing, Data Science, &amp; Machine Learning Instructor, Best-Selling Author of 10 Books, Harvard Alumni&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2c77e192-01d1-4d3a-b2ff-6e114eecb5d4_1713x1713.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-08-14T14:38:46.309Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!Nv7A!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5078c8b-0bf4-4c6f-81dd-ca62c5095c17_1472x1560.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://datascienceinaction.substack.com/p/the-five-domains-that-matter-for&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:211052874,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:7180606,&quot;publication_name&quot;:&quot;Data Science In Action&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!TMYq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F096ea207-0f69-4b87-8022-814286c2ed3b_1024x1024.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>If you&#8217;ve shipped anything with Claude, you already know most of what&#8217;s on the exam. What you need is to systematize that knowledge, then practice the specific question format.</p><p>This guide walks you through exactly how to do that.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Data Science In Action is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!MsVO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0130ab7b-f6da-4a83-adad-56637b16edf5_1595x1047.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!MsVO!, /__u/datascienceinaction.substack.com/w_424, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0130ab7b-f6da-4a83-adad-56637b16edf5_1595x1047.png 424w, /__u/substackcdn.com/image/fetch/$s_!MsVO!, /__u/datascienceinaction.substack.com/w_848, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0130ab7b-f6da-4a83-adad-56637b16edf5_1595x1047.png 848w, /__u/substackcdn.com/image/fetch/$s_!MsVO!, /__u/datascienceinaction.substack.com/w_1272, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0130ab7b-f6da-4a83-adad-56637b16edf5_1595x1047.png 1272w, /__u/substackcdn.com/image/fetch/$s_!MsVO!, /__u/datascienceinaction.substack.com/w_1456, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0130ab7b-f6da-4a83-adad-56637b16edf5_1595x1047.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!MsVO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0130ab7b-f6da-4a83-adad-56637b16edf5_1595x1047.png" width="1456" height="956" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0130ab7b-f6da-4a83-adad-56637b16edf5_1595x1047.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:956,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2095203,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://datascienceinaction.substack.com/i/211186065?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0130ab7b-f6da-4a83-adad-56637b16edf5_1595x1047.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!MsVO!, /__u/datascienceinaction.substack.com/w_424, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0130ab7b-f6da-4a83-adad-56637b16edf5_1595x1047.png 424w, /__u/substackcdn.com/image/fetch/$s_!MsVO!, /__u/datascienceinaction.substack.com/w_848, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0130ab7b-f6da-4a83-adad-56637b16edf5_1595x1047.png 848w, /__u/substackcdn.com/image/fetch/$s_!MsVO!, /__u/datascienceinaction.substack.com/w_1272, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0130ab7b-f6da-4a83-adad-56637b16edf5_1595x1047.png 1272w, /__u/substackcdn.com/image/fetch/$s_!MsVO!, /__u/datascienceinaction.substack.com/w_1456, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0130ab7b-f6da-4a83-adad-56637b16edf5_1595x1047.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Step 1: Map Your Hands-On Experience Against the Five Domains</h2><p>Grab a notebook or a spreadsheet. For each domain, write down the last time you actually dealt with it in a system you built.</p><p><strong>Domain 1: Agentic Architecture &amp; Orchestration</strong></p><p>Have you built a system where Claude calls tools? Yes, you have. Have you built a multi-agent system where one agent delegates to specialists? Maybe not. Write that down.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/subscribe"><span>Subscribe now</span></a></p><p><strong>Domain 2: Tool Design &amp; MCP Integration</strong></p><p>Have you designed tool descriptions? Have you configured MCP servers? Write down what you&#8217;ve done and what&#8217;s still unfamiliar.</p><p><strong>Domain 3: Claude Code Configuration &amp; Workflows</strong></p><p>Have you written a CLAUDE.md file? Used plan mode? Integrated MCP into Claude Code? Mark what&#8217;s real experience and what&#8217;s still theoretical.</p><p><strong>Domain 4: Prompt Engineering &amp; Structured Output</strong></p><p>Have you used few-shot examples? Designed JSON schemas for structured output? Implemented validation-retry loops? List your experience.</p><p><strong>Domain 5: Context Management &amp; Reliability</strong></p><p>Have you handled escalation decisions in a real agent? Managed error propagation across multiple agents? Designed human-in-the-loop workflows? This is where real systems get complicated.</p><p><strong>What you&#8217;re doing here:</strong> Identifying where your experience is solid versus where you have gaps. The exam scenarios will test all five domains. Your goal is to walk into that exam knowing exactly which scenarios will feel familiar and which ones will push you.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/p/how-to-pass-the-claude-architect?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Data Science In Action! Share the article!</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/p/how-to-pass-the-claude-architect?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/p/how-to-pass-the-claude-architect?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share</span></a></p></div><h2>Step 2: Study the Five Exam Scenarios</h2><p>The certification doesn&#8217;t give you random questions in isolation. It presents you with realistic scenarios, then asks questions grounded in those scenarios. There are six possible scenarios. Four will appear on your exam, randomly selected.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/p/how-to-pass-the-claude-architect?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/p/how-to-pass-the-claude-architect?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share</span></a></p>
      <p>
          <a href="/__u/datascienceinaction.substack.com/p/how-to-pass-the-claude-architect">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[[CCAR-F-Part1] The Five Domains That Matter for Claude Architect Certification]]></title><description><![CDATA[Why understanding the exam structure is half the battle, and how the five domains solve real production problems you've already faced]]></description><link>https://datascienceinaction.substack.com/p/the-five-domains-that-matter-for</link><guid isPermaLink="false">https://datascienceinaction.substack.com/p/the-five-domains-that-matter-for</guid><dc:creator><![CDATA[Engy Fouda]]></dc:creator><pubDate>Fri, 14 Aug 2026 14:38:46 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Nv7A!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5078c8b-0bf4-4c6f-81dd-ca62c5095c17_1472x1560.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>This is a part of the Claude Certificate Architect-Foundations:</h2><ol><li><p><a href="/__u/datascienceinaction.substack.com/p/the-five-domains-that-matter-for">[CCAR-F-Part1] The Five Domains That Matter for Claude Architect Certification</a></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/how-to-pass-the-claude-architect">[CCAR-F-Part2] How to Pass the Claude Architect Certification: A Step-by-Step Preparation Guide?</a></strong></p></li><li><p><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-3-the-six-scenarios-you">[CCAR-F-Part 3] The Six Scenarios You Will Face on the Claude Architect Exam</a></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-4-how-to-prepare-for">[CCAR-F-Part 4] How to Prepare for Each of the Six Exam Scenarios?</a></strong></p></li><li><p><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-5-what-domain-1-covers">[CCAR-F-Part 5] What Domain 1 Covers: Agentic Architecture and Orchestration</a></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-6-building-every-domain">[CCAR-F-Part 6] Building Every Domain 1 Pattern: A Complete Implementation Guide</a></strong></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-7-what-domain-2-actually">[CCAR-F-Part 7] What Domain 2 Actually Covers: Tool Design and MCP Integration</a></strong></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-8-building-every-domain">[CCAR-F-Part 8] Building Every Domain 2 Pattern: A Complete Implementation Guide</a></strong></p></li><li><p><strong><a href="/__u/datascienceinaction.substack.com/p/ccar-f-part-9-what-domain-3-actually">[CCAR-F-Part 9] What Domain 3 Actually Covers: Claude Code Configuration and Workflows</a></strong></p></li></ol><p>Download the official exam guide PDF at this link: </p><p><a href="https://everpath-course-content.s3-accelerate.amazonaws.com/instructor%2F6nizmqk8tpzpfjvt6qmmav7rh%2Fpublic%2F1783542750%2FClaude+Certified+Architect+%E2%80%93+Foundations+Exam+Guide.pdf">Claude Certified Architect-Foundation Exam Guide</a></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/subscribe"><span>Subscribe now</span></a></p><div><hr></div><p>You&#8217;re reading about Claude certifications, which means you&#8217;ve built something real. Maybe you&#8217;ve used Claude to automate a workflow, or you&#8217;ve deployed an agent into production and had to debug it at 2 AM when something went wrong. Now you&#8217;re considering getting certified. Not just to have a credential, but to prove you actually know how to ship with Claude at scale.</p><p>The Claude Certified Architect Foundations exam tests five specific domains. Understanding what these domains represent isn&#8217;t about memorizing content. It&#8217;s about recognizing that each one solves a real production problem you&#8217;ve probably already encountered, or will encounter soon.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/subscribe"><span>Subscribe now</span></a></p><h2>Domain 1: Agentic Architecture &amp; Orchestration (27%)</h2><p>This is about building systems where Claude makes decisions, not about hard-coding every path. An agentic loop checks what Claude wants to do next. Does it want to call a tool? Are we done? The loop executes that tool and feeds the result back so Claude can reason about the next step. Simple in theory. Devilishly tricky in practice when you have multiple agents talking to each other, or when one agent needs to delegate work to specialists.</p><p>The certification tests whether you understand when a coordinator agent should route a question directly versus breaking it into subtasks for specialized subagents. It tests whether you can pass context between agents without losing critical information. These aren&#8217;t quiz questions about how loops work. They&#8217;re questions about decisions you actually make when designing systems.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Data Science In Action is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2>Domain 2: Tool Design &amp; MCP Integration (18%)</h2><p>Here&#8217;s the thing about tools: Claude can only use what you give it. If your tool descriptions are vague, Claude will misuse them. If you give an agent fifteen tools when it only needs five, it gets confused about which tool to call and when to call it.</p><p>This domain is about making intentional choices. Should this agent have access to this tool, or would that create more problems than it solves? If you have two tools that do similar things, how do you describe them clearly enough that Claude reliably picks the right one?</p><p>Model Context Protocol (MCP) is the standard way to wire tools into Claude. The certification covers configuring MCP servers, designing tool descriptions that are actually useful, and handling errors in ways that let your system recover intelligently instead of just failing.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/p/the-five-domains-that-matter-for?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/p/the-five-domains-that-matter-for?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share</span></a></p><h2>Domain 3: Claude Code Configuration &amp; Workflows (20%)</h2><p>Claude Code is the IDE integration. It&#8217;s how you tell Claude how your team likes to work. You write rules once in a CLAUDE.md file, and every developer on the team gets those conventions automatically.</p><p>But configuration goes deeper than just writing a file. You can scope conventions to specific file paths, so test file rules load only when you&#8217;re editing tests. You can create custom slash commands that your team uses every day. You can integrate MCP servers, so Claude Code has access to your internal tools, API schemas, and database documentation.</p><p>The certification tests whether you know when to use Claude Code&#8217;s plan mode (for complex changes with architectural implications) versus direct execution (for straightforward bug fixes). It tests whether you understand how to integrate Claude into your CI/CD pipeline so that pull requests are reviewed automatically before humans even see them.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/p/the-five-domains-that-matter-for?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Data Science In Action! This post is public, so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/p/the-five-domains-that-matter-for?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/p/the-five-domains-that-matter-for?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share</span></a></p></div><h2>Domain 4: Prompt Engineering &amp; Structured Output (20%)</h2><p>Every production system that uses Claude needs output it can trust. This domain covers techniques that actually reduce hallucination and improve reliability in real systems.</p><p>Few-shot examples work better than detailed instructions when you want consistent output. Using tools with JSON schemas eliminates syntax errors and enforces structure. Explicit criteria make the difference. This is a bug worth reporting; that is a style preference worth skipping. Both reduce false positives that erode trust.</p><p>The certification tests prompt patterns that solve real production problems. How do I make sure this extraction tool doesn&#8217;t hallucinate missing fields? How do I review 50 files consistently without contradicting myself from one file to the next?</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share&quot;,&quot;text&quot;:&quot;Share Data Science In Action&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share Data Science In Action</span></a></p><h2>Domain 5: Context Management &amp; Reliability (15%)</h2><p>When Claude has a lot of information to work with, it doesn&#8217;t retain all of it equally well. Information at the beginning and end of a prompt gets better attention than information in the middle. Large context windows don&#8217;t solve the attention problem. They create bigger middle sections.</p><p>This domain covers how to structure context so Claude doesn&#8217;t lose critical information (case facts, customer details) as context accumulates. It covers how to escalate intelligently. When to route a request to a human, when a policy gap means you should escalate versus when the agent can handle it.</p><p>It also covers multi-agent error handling: when one agent fails, how does that information flow back to the coordinator in a way that enables recovery instead of just stopping everything?</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/p/the-five-domains-that-matter-for/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/p/the-five-domains-that-matter-for/comments"><span>Leave a comment</span></a></p><h2>Why These Five Matter</h2><p>The certification isn&#8217;t about memorizing definitions. It&#8217;s about recognizing that these five domains represent decisions you make every time you ship something. The exam puts you in realistic scenarios. You&#8217;re building a customer support agent, designing an extraction pipeline, integrating Claude into CI/CD. Then it asks how you&#8217;d handle the tradeoffs.</p><p>If you&#8217;ve shipped production systems, you&#8217;ve already dealt with all five domains. You&#8217;ve probably struggled with at least three of them. This certification is about systematizing what you&#8217;ve learned through trial and error so that you can make those decisions faster and better next time.</p><div class="community-chat" data-attrs="{&quot;url&quot;:&quot;https://open.substack.com/pub/datascienceinaction/chat?utm_source=chat_embed&quot;,&quot;subdomain&quot;:&quot;datascienceinaction&quot;,&quot;pub&quot;:{&quot;id&quot;:7180606,&quot;name&quot;:&quot;Data Science In Action&quot;,&quot;author_name&quot;:&quot;Engy Fouda&quot;,&quot;author_photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!CZ7q!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c77e192-01d1-4d3a-b2ff-6e114eecb5d4_1713x1713.jpeg&quot;}}" data-component-name="CommunityChatRenderPlaceholder"></div><p>The five domains map pretty cleanly onto the actual lifecycle of building a production Claude application &#8212; they&#8217;re not arbitrary categories; they&#8217;re sequential layers that depend on each other:</p><p><strong>1. Agentic Architecture &amp; Orchestration (27%) &#8212; the control flow layer</strong> <br>This is &#8220;how does the system decide what to do next&#8221;: loop mechanics (stop_reason), coordinator/subagent patterns, task decomposition, session management. It&#8217;s weighted most heavily because almost nothing else matters if the core loop and delegation logic are unreliable &#8212; a bad orchestration layer breaks everything downstream.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?&amp;gift=true&quot;,&quot;text&quot;:&quot;Give a gift subscription&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/subscribe?&amp;gift=true"><span>Give a gift subscription</span></a></p><p><strong>2. Tool Design &amp; MCP Integration (18%) &#8212; the interface layer</strong> <br>Once you have an agent that acts in a loop, it needs to act <em>on</em> something. This domain concerns how the model perceives and manipulates the outside world: tool descriptions, error schemas, and scoping tools per agent. It&#8217;s the natural next layer down from orchestration &#8212; orchestration decides <em>when</em> to call something, tool design determines <em>whether the model calls the right thing</em> and <em>what happens when it fails</em>.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/leaderboard?&amp;utm_source=post&quot;,&quot;text&quot;:&quot;Refer a friend&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/leaderboard?&amp;utm_source=post"><span>Refer a friend</span></a></p><p><strong>3. Claude Code Configuration &amp; Workflows (20%) &#8212; the applied/dev-tooling instance</strong> <br>This is really domains 1 and 2 applied to a specific, extremely common product surface (Claude Code): CLAUDE.md hierarchies, skills, plan mode, CI/CD integration. It&#8217;s tested separately because it&#8217;s such a dominant real-world use case, but conceptually it&#8217;s &#8220;orchestration + tool design, specialized for developer workflows.&#8221;</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?group=true&quot;,&quot;text&quot;:&quot;Get a group subscription&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/subscribe?group=true"><span>Get a group subscription</span></a></p><p><strong>4. Prompt Engineering &amp; Structured Output (20%) &#8212; the reliability-of-output layer</strong> <br>Whereas 1&#8211;3 are about <em>architecture</em>, this domain is about <em>getting a trustworthy answer <span>from a single call or extraction</span></em><span>: few-shot examples, JSON Schema enforcement, validation/retry loops, and&nbsp;</span>batch processing. This matters independently of orchestration because even a single well-architected agent call can produce garbage without good prompt/schema design.</p><p><strong>5. Context Management &amp; Reliability (15%) &#8212; the cross-cutting constraint</strong> <br>This one is different in kind from the other four &#8212; it&#8217;s not a stage, it&#8217;s a constraint that touches <em>all</em> of them: context windows degrade orchestration (lost-in-the-middle), degrade tool outputs (verbose results crowding context), and degrade extraction (stale summaries causing hallucination). It&#8217;s weighted the least not because it&#8217;s least important, but because its content overlaps so heavily with the other four domains that much of it is implicitly tested there as well.</p><div class="directMessage button" data-attrs="{&quot;userId&quot;:43386542,&quot;userName&quot;:&quot;Engy Fouda&quot;,&quot;canDm&quot;:null,&quot;dmUpgradeOptions&quot;:null,&quot;isEditorNode&quot;:true}" data-component-name="DirectMessageToDOM"></div><p><strong>Why these five and not, say, &#8220;safety&#8221; or &#8220;model internals&#8221;?</strong> <br>Look at the out-of-scope list &#8212; training, RLHF, tokenization, auth, infra. The exam is explicitly scoped to <em>architect-level system design decisions</em>, not model internals or plumbing. The five domains cover the decision points a solutions architect actually owns: how the system loops, how it touches external systems, how it&#8217;s configured for teams, how it guarantees output quality, and how it survives long-running/multi-agent context pressure. Together they form one coherent story: <strong>build the loop &#8594; give it safe tools &#8594; configure it for a team &#8594; make its output trustworthy &#8594; keep it reliable as scale/context grows.</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Nv7A!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5078c8b-0bf4-4c6f-81dd-ca62c5095c17_1472x1560.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Nv7A!, /__u/datascienceinaction.substack.com/w_424, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5078c8b-0bf4-4c6f-81dd-ca62c5095c17_1472x1560.png 424w, /__u/substackcdn.com/image/fetch/$s_!Nv7A!, /__u/datascienceinaction.substack.com/w_848, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5078c8b-0bf4-4c6f-81dd-ca62c5095c17_1472x1560.png 848w, /__u/substackcdn.com/image/fetch/$s_!Nv7A!, /__u/datascienceinaction.substack.com/w_1272, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5078c8b-0bf4-4c6f-81dd-ca62c5095c17_1472x1560.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Nv7A!, /__u/datascienceinaction.substack.com/w_1456, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5078c8b-0bf4-4c6f-81dd-ca62c5095c17_1472x1560.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Nv7A!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5078c8b-0bf4-4c6f-81dd-ca62c5095c17_1472x1560.png" width="1456" height="1543" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d5078c8b-0bf4-4c6f-81dd-ca62c5095c17_1472x1560.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1543,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:237747,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://datascienceinaction.substack.com/i/211052874?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5078c8b-0bf4-4c6f-81dd-ca62c5095c17_1472x1560.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!Nv7A!, /__u/datascienceinaction.substack.com/w_424, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5078c8b-0bf4-4c6f-81dd-ca62c5095c17_1472x1560.png 424w, /__u/substackcdn.com/image/fetch/$s_!Nv7A!, /__u/datascienceinaction.substack.com/w_848, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5078c8b-0bf4-4c6f-81dd-ca62c5095c17_1472x1560.png 848w, /__u/substackcdn.com/image/fetch/$s_!Nv7A!, /__u/datascienceinaction.substack.com/w_1272, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5078c8b-0bf4-4c6f-81dd-ca62c5095c17_1472x1560.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Nv7A!, /__u/datascienceinaction.substack.com/w_1456, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd5078c8b-0bf4-4c6f-81dd-ca62c5095c17_1472x1560.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Subscribe to Data Science In Action to get more on Claude architecture, AI systems, and practical patterns that work in production.</p><p>#Claude #CertifiedArchitect #AI #ProductionSystems #Certification #BeginnerFriendly #DataScienceInAction</p>]]></content:encoded></item><item><title><![CDATA[[Tutorial] Step-by-Step: Build Your Own Claude Writing Clone, With Templates]]></title><description><![CDATA[Every screen, every prompt, and every file, so you can build the same system I use for this newsletter]]></description><link>https://datascienceinaction.substack.com/p/tutorial-step-by-step-build-your</link><guid isPermaLink="false">https://datascienceinaction.substack.com/p/tutorial-step-by-step-build-your</guid><dc:creator><![CDATA[Engy Fouda]]></dc:creator><pubDate>Tue, 11 Aug 2026 14:41:16 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!4zk8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95973025-1dbb-4364-915c-341edc24ac75_1200x780.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Quick context before we dive in:</strong> the AI Special Interest Group at the Harvard Club of New York City invited me to speak, and this tutorial, along with its companion free article, is part of how I&#8217;m organizing my thinking for that talk. If there&#8217;s a different angle on AI and writing you&#8217;d find more valuable to hear me cover, let me know. I&#8217;m still shaping the talk, and your input actually matters here.</p><div class="directMessage button" data-attrs="{&quot;userId&quot;:43386542,&quot;userName&quot;:&quot;Engy Fouda&quot;,&quot;canDm&quot;:null,&quot;dmUpgradeOptions&quot;:null,&quot;isEditorNode&quot;:true}" data-component-name="DirectMessageToDOM"></div><p>Consider this your training session. If you have not read <em>I&#8217;m Going to Train You to Clone Your Own Writing Voice With Claude</em>, read that first for the seven-step overview. Below, I am walking you through every screen, every prompt, and every file, the same way I use it now.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;67e09325-d053-4e3e-ba12-4f2aa6b29344&quot;,&quot;caption&quot;:&quot;A quick note before we get into it: the AI Special Interest Group at the Harvard Club of New York City invited me to give a talk, and this article is my first pass at organizing the ideas I want to bring. Think of it as a working draft, I&#8217;m thinking out loud through, before it becomes a talk. If there&#8217;s a different angle on AI and writing you&#8217;d rather h&#8230;&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;How to Create Your Writing Clone Using Claude?&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:43386542,&quot;name&quot;:&quot;Engy Fouda&quot;,&quot;bio&quot;:&quot;AI Architect, Adjunct Lecturer, Freelance SAS, Docker, Kubernetes, Python, Technical Writing, Data Science, &amp; Machine Learning Instructor, Best-Selling Author of 10 Books, Harvard Alumni&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2c77e192-01d1-4d3a-b2ff-6e114eecb5d4_1713x1713.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-08-06T14:58:56.942Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!prwo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1869c45b-9e94-4ba0-a8c8-3b34d8575785_1259x1243.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://datascienceinaction.substack.com/p/how-to-create-your-writing-clone&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:210083286,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:7180606,&quot;publication_name&quot;:&quot;Data Science In Action&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!TMYq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F096ea207-0f69-4b87-8022-814286c2ed3b_1024x1024.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p><strong>What you need before we start</strong></p><ul><li><p>3 to 5 of your best published pieces</p></li><li><p>A Claude account with Projects access</p></li><li><p>About 45 minutes today, then a couple of minutes per piece afterward</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/subscribe"><span>Subscribe now</span></a></p><div><hr></div></li></ul><h2>Step 1: Create your dedicated project</h2><p>Do not fold this into an existing chat. Go to Projects, click Create project, and name it clearly.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!4zk8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95973025-1dbb-4364-915c-341edc24ac75_1200x780.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!4zk8!, /__u/datascienceinaction.substack.com/w_424, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95973025-1dbb-4364-915c-341edc24ac75_1200x780.png 424w, /__u/substackcdn.com/image/fetch/$s_!4zk8!, /__u/datascienceinaction.substack.com/w_848, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95973025-1dbb-4364-915c-341edc24ac75_1200x780.png 848w, /__u/substackcdn.com/image/fetch/$s_!4zk8!, /__u/datascienceinaction.substack.com/w_1272, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95973025-1dbb-4364-915c-341edc24ac75_1200x780.png 1272w, /__u/substackcdn.com/image/fetch/$s_!4zk8!, /__u/datascienceinaction.substack.com/w_1456, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95973025-1dbb-4364-915c-341edc24ac75_1200x780.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!4zk8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95973025-1dbb-4364-915c-341edc24ac75_1200x780.png" width="1200" height="780" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/95973025-1dbb-4364-915c-341edc24ac75_1200x780.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:780,&quot;width&quot;:1200,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3750908,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://datascienceinaction.substack.com/i/210089027?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95973025-1dbb-4364-915c-341edc24ac75_1200x780.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!4zk8!, /__u/datascienceinaction.substack.com/w_424, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95973025-1dbb-4364-915c-341edc24ac75_1200x780.png 424w, /__u/substackcdn.com/image/fetch/$s_!4zk8!, /__u/datascienceinaction.substack.com/w_848, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95973025-1dbb-4364-915c-341edc24ac75_1200x780.png 848w, /__u/substackcdn.com/image/fetch/$s_!4zk8!, /__u/datascienceinaction.substack.com/w_1272, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95973025-1dbb-4364-915c-341edc24ac75_1200x780.png 1272w, /__u/substackcdn.com/image/fetch/$s_!4zk8!, /__u/datascienceinaction.substack.com/w_1456, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F95973025-1dbb-4364-915c-341edc24ac75_1200x780.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Fill the description field honestly, this is the first thing Claude reads before your very first question in this Project.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Data Science In Action is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>
      <p>
          <a href="/__u/datascienceinaction.substack.com/p/tutorial-step-by-step-build-your">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[How to Create Your Writing Clone Using Claude?]]></title><description><![CDATA[The exact system I built to write in my own voice with AI]]></description><link>https://datascienceinaction.substack.com/p/how-to-create-your-writing-clone</link><guid isPermaLink="false">https://datascienceinaction.substack.com/p/how-to-create-your-writing-clone</guid><dc:creator><![CDATA[Engy Fouda]]></dc:creator><pubDate>Thu, 06 Aug 2026 14:58:56 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!prwo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1869c45b-9e94-4ba0-a8c8-3b34d8575785_1259x1243.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>A quick note before we get into it: the AI Special Interest Group at the Harvard Club of New York City invited me to give a talk, and this article is my first pass at organizing the ideas I want to bring. Think of it as a working draft, I&#8217;m thinking out loud through, before it becomes a talk. If there&#8217;s a different angle on AI and writing you&#8217;d rather hear me speak on, tell me in the comments. I&#8217;d genuinely like to know what&#8217;s most useful to you.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/p/how-to-create-your-writing-clone/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/p/how-to-create-your-writing-clone/comments"><span>Leave a comment</span></a></p><p>I built a Claude Project that writes in my exact voice, schedules itself, and publishes itself. I am not going to describe it to you from a distance. I am going to train you on it directly, the same way I would train a new hire, so you can build your own version this week.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Data Science In Action is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2>1. Forget &#8220;write like me,&#8221; it is not an instruction</h2><p>Telling Claude to sound casual, warm, or professional gives you a generic AI voice, the same voice every other newsletter is publishing right now. The model does not learn your voice from an adjective. It learns your voice from your actual sentences. So the first move is never a description; it is evidence: your own published work, fed in directly, with Claude asked to extract the patterns rather than guess at them.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/subscribe"><span>Subscribe now</span></a></p><div><hr></div><h2>2. The seven-step system, in order</h2><p>Here is the full framework I use, laid out step by step.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!-5_c!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10bb3906-3abd-4cc2-be72-22c4bc4d625c_851x1413.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!-5_c!, /__u/datascienceinaction.substack.com/w_424, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10bb3906-3abd-4cc2-be72-22c4bc4d625c_851x1413.png 424w, /__u/substackcdn.com/image/fetch/$s_!-5_c!, /__u/datascienceinaction.substack.com/w_848, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10bb3906-3abd-4cc2-be72-22c4bc4d625c_851x1413.png 848w, /__u/substackcdn.com/image/fetch/$s_!-5_c!, /__u/datascienceinaction.substack.com/w_1272, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10bb3906-3abd-4cc2-be72-22c4bc4d625c_851x1413.png 1272w, /__u/substackcdn.com/image/fetch/$s_!-5_c!, /__u/datascienceinaction.substack.com/w_1456, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10bb3906-3abd-4cc2-be72-22c4bc4d625c_851x1413.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!-5_c!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10bb3906-3abd-4cc2-be72-22c4bc4d625c_851x1413.png" width="483" height="801.972972972973" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/10bb3906-3abd-4cc2-be72-22c4bc4d625c_851x1413.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1413,&quot;width&quot;:851,&quot;resizeWidth&quot;:483,&quot;bytes&quot;:268526,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://datascienceinaction.substack.com/i/210083286?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10bb3906-3abd-4cc2-be72-22c4bc4d625c_851x1413.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!-5_c!, /__u/datascienceinaction.substack.com/w_424, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10bb3906-3abd-4cc2-be72-22c4bc4d625c_851x1413.png 424w, /__u/substackcdn.com/image/fetch/$s_!-5_c!, /__u/datascienceinaction.substack.com/w_848, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10bb3906-3abd-4cc2-be72-22c4bc4d625c_851x1413.png 848w, /__u/substackcdn.com/image/fetch/$s_!-5_c!, /__u/datascienceinaction.substack.com/w_1272, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10bb3906-3abd-4cc2-be72-22c4bc4d625c_851x1413.png 1272w, /__u/substackcdn.com/image/fetch/$s_!-5_c!, /__u/datascienceinaction.substack.com/w_1456, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F10bb3906-3abd-4cc2-be72-22c4bc4d625c_851x1413.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>Figure 1: The seven-step framework flowchart</em></figcaption></figure></div><p><strong>Figure 1: The full seven-step framework.</strong> Steps 1 through 4 are a one-time setup. Steps 5 and 6, testing and the drift check, are the ones you repeat for every single piece you write afterward. Step 6 is highlighted because it is the one people skip, and skipping it is exactly how a clone quietly stops sounding like you.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/p/how-to-create-your-writing-clone?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/p/how-to-create-your-writing-clone?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share</span></a></p><p>Read it top to bottom once before you touch Claude. Each box is a decision, not just an action, and I will walk through the reasoning behind each one in the paid tutorial.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/p/how-to-create-your-writing-clone?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Data Science In Action! This post is public, so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/p/how-to-create-your-writing-clone?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/p/how-to-create-your-writing-clone?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share</span></a></p></div><div><hr></div><h2>3. Why can nobody copy this by stealing your prompt?</h2><p>Can someone screenshot my custom instructions field? <br>It will not help them. The prompt is generic; it just points to four files. What makes the output unmistakably mine is what is inside those files, and those were built from my own published sentences. That is not copyable. That is the actual moat, and it is also why training you on this does not weaken what makes my own version work.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share&quot;,&quot;text&quot;:&quot;Share Data Science In Action&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share Data Science In Action</span></a></p><div><hr></div><h2>4. There is a second layer that most people never build</h2><p>Once your project is written in your voice, the next question is what happens to that draft. Mine does not stop at drafting; it gets scheduled and published without me touching a keyboard twice.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!prwo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1869c45b-9e94-4ba0-a8c8-3b34d8575785_1259x1243.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!prwo!, /__u/datascienceinaction.substack.com/w_424, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1869c45b-9e94-4ba0-a8c8-3b34d8575785_1259x1243.png 424w, /__u/substackcdn.com/image/fetch/$s_!prwo!, /__u/datascienceinaction.substack.com/w_848, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1869c45b-9e94-4ba0-a8c8-3b34d8575785_1259x1243.png 848w, /__u/substackcdn.com/image/fetch/$s_!prwo!, /__u/datascienceinaction.substack.com/w_1272, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1869c45b-9e94-4ba0-a8c8-3b34d8575785_1259x1243.png 1272w, /__u/substackcdn.com/image/fetch/$s_!prwo!, /__u/datascienceinaction.substack.com/w_1456, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1869c45b-9e94-4ba0-a8c8-3b34d8575785_1259x1243.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!prwo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1869c45b-9e94-4ba0-a8c8-3b34d8575785_1259x1243.png" width="556" height="548.9340746624305" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1869c45b-9e94-4ba0-a8c8-3b34d8575785_1259x1243.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1243,&quot;width&quot;:1259,&quot;resizeWidth&quot;:556,&quot;bytes&quot;:315968,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://datascienceinaction.substack.com/i/210083286?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1869c45b-9e94-4ba0-a8c8-3b34d8575785_1259x1243.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!prwo!, /__u/datascienceinaction.substack.com/w_424, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1869c45b-9e94-4ba0-a8c8-3b34d8575785_1259x1243.png 424w, /__u/substackcdn.com/image/fetch/$s_!prwo!, /__u/datascienceinaction.substack.com/w_848, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1869c45b-9e94-4ba0-a8c8-3b34d8575785_1259x1243.png 848w, /__u/substackcdn.com/image/fetch/$s_!prwo!, /__u/datascienceinaction.substack.com/w_1272, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1869c45b-9e94-4ba0-a8c8-3b34d8575785_1259x1243.png 1272w, /__u/substackcdn.com/image/fetch/$s_!prwo!, /__u/datascienceinaction.substack.com/w_1456, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1869c45b-9e94-4ba0-a8c8-3b34d8575785_1259x1243.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption"><em>Figure 2: The publishing pipeline flowchart</em></figcaption></figure></div><p>This is fully optional; you can absolutely stop at the drafting stage. But once your voice is reliable enough that you can trust it unattended, this removes the second job of manually posting everything yourself.</p><div class="community-chat" data-attrs="{&quot;url&quot;:&quot;https://open.substack.com/pub/datascienceinaction/chat?utm_source=chat_embed&quot;,&quot;subdomain&quot;:&quot;datascienceinaction&quot;,&quot;pub&quot;:{&quot;id&quot;:7180606,&quot;name&quot;:&quot;Data Science In Action&quot;,&quot;author_name&quot;:&quot;Engy Fouda&quot;,&quot;author_photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!CZ7q!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c77e192-01d1-4d3a-b2ff-6e114eecb5d4_1713x1713.jpeg&quot;}}" data-component-name="CommunityChatRenderPlaceholder"></div><p>I am giving you the full build in the next paid tutorial, explaining every step and the exact prompts.</p><div class="pullquote"><p><strong>Want the whole thing without rebuilding it yourself?</strong></p><p>I packaged this entire system, the seven-step process, every prompt, and four fill-in-the-blank templates, into a ready-to-use Claude skill. Drop it into any Claude Project, and it walks you through setup in order, no rebuilding from scratch required.</p><p><strong><a href="https://payhip.com/b/MOgpU">Grab the Writing Clone Builder skill &#8594;</a>$39</strong></p></div><p>#AITools #WritingWithAI #ClaudeAI #ContentCreation #Substack</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/leaderboard?&amp;utm_source=post&quot;,&quot;text&quot;:&quot;Refer a friend&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/leaderboard?&amp;utm_source=post"><span>Refer a friend</span></a></p>]]></content:encoded></item><item><title><![CDATA[[Tutorial] How to Build Your First AI Loop in Claude Code in Step-by-Step with Screenshots]]></title><description><![CDATA[Using the same goal-action-check structure behind Karpathy&#8217;s AutoResearch, applied to a CSV file every data scientist recognizes]]></description><link>https://datascienceinaction.substack.com/p/tutorial-how-to-build-your-first</link><guid isPermaLink="false">https://datascienceinaction.substack.com/p/tutorial-how-to-build-your-first</guid><dc:creator><![CDATA[Engy Fouda]]></dc:creator><pubDate>Tue, 04 Aug 2026 01:17:32 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ZpLC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5b63ce42-9701-437b-b160-a59f2ca747d6_3778x1974.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In the last article, I walked you through where loop engineering actually came from: Andrej Karpathy&#8217;s AutoResearch, an agent restricted to one file it could edit, one file it could never touch, and a rules file that set the boundaries in advance. Today, we build a loop with that same three-piece shape ourselves, just aimed at a much more familiar problem: a messy CSV.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Data Science In Action is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2>What are we building?</h2><p>A file called <code>customers.csv</code> with three problems: duplicate customer IDs, missing emails, and a few invalid signup dates. Our loop will keep fixing it, checking it, and fixing it again, until all three problems are gone, or until it hits a safety limit, the same keep-or-rollback shape Karpathy&#8217;s loop used on <code>train.py</code>.</p><p>But there&#8217;s a piece I glossed over the first time I wrote this tutorial, and it matters enough to fix properly: in Karpathy&#8217;s setup, the agent never grades its own work. A separate file, <code>prepare.py</code>, does that, and the agent isn&#8217;t allowed to touch it. Without that separation, an agent can quietly decide its own work passed, whether or not it actually did. So before we touch the CSV, we&#8217;re building that separation too, a standalone Python script called<span data-color="#0000ff" style="color: rgb(0, 0, 255);"> </span><code>verify.py</code> that checks the file and reports PASS or FAIL. The agent can run it. The agent cannot edit it.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/subscribe"><span>Subscribe now</span></a></p><div><hr></div><h2><strong>The four files:</strong></h2><ul><li><p><code>customers.csv</code> &#8212; the messy file. It has duplicate <code>customer_id</code> rows, a few blank emails, and a couple of invalid <code>signup_date</code> values. This is the only file the agent should edit.</p></li><li><p><code>verify.py</code> &#8212; the evaluator. A plain Python script, no dependencies beyond the standard library, that checks the CSV and prints PASS or FAIL for each of the three rules. Exits with code 0 only if everything passes. The agent must never edit this file, that&#8217;s the whole point of it.</p></li><li><p><code>loop_rules.md</code> &#8212; the guardrails: the goal (verify.py exits 0), the hard attempt limit, and the &#8220;never&#8221; rules, including the one that protects verify.py itself.</p></li><li><p><code>cleaning_log.md</code> &#8212; not included yet. Claude Code will create this itself as the loop runs, since the rules ask it to log the verifier&#8217;s actual output on every attempt, not its own summary of how things went.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/p/tutorial-how-to-build-your-first?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/p/tutorial-how-to-build-your-first?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share</span></a></p><div><hr></div></li></ul><h2>How to run it</h2><ol><li><p>Put <code>customers.csv</code>, <code>verify.py</code>, and <code>loop_rules.md</code> in the same folder and open that folder in Claude Code.</p></li><li><p>Optional but worth doing: run <code>python verify.py customers.csv</code> yourself first, before the agent touches anything, so you&#8217;ve seen the baseline failure with your own eyes.</p></li><li><p>Start Claude Code and paste this prompt:</p></li></ol><blockquote><p>Read loop_rules.md and follow it exactly. Keep editing customers.csv until <code>python verify.py customers.csv</code> exits with code 0. After every attempt, run verify.py yourself and log its exact output, don&#8217;t judge success by reading the CSV. Stop after 5 attempts even if it&#8217;s still failing, and tell me exactly what verify.py still shows as FAIL.</p></blockquote><ol><li><p>Read the plan Claude Code gives you back before approving it. This is where you catch a bad assumption before it costs you five attempts.</p></li><li><p>Once it finishes, run <code>python verify.py customers.csv</code> yourself as a final check, don&#8217;t just trust the agent&#8217;s last log entry. Then open the cleaned CSV and <code>cleaning_log.md</code> and confirm the fixes are the ones you&#8217;d have made. The loop finishing without errors is a claim, not proof, and now you have an independent way to check that claim yourself.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/p/tutorial-how-to-build-your-first?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Data Science In Action! Share the article!</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/p/tutorial-how-to-build-your-first?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/p/tutorial-how-to-build-your-first?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share</span></a></p></div><p>You can download the files for this example from my website:</p></li></ol>
      <p>
          <a href="/__u/datascienceinaction.substack.com/p/tutorial-how-to-build-your-first">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[What Is Loop Engineering?]]></title><description><![CDATA[A Beginner&#8217;s Guide to the Skill That&#8217;s Replacing Prompting]]></description><link>https://datascienceinaction.substack.com/p/what-is-loop-engineering</link><guid isPermaLink="false">https://datascienceinaction.substack.com/p/what-is-loop-engineering</guid><dc:creator><![CDATA[Engy Fouda]]></dc:creator><pubDate>Fri, 31 Jul 2026 15:57:35 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!JkPC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F353f3ec7-f9ba-44c0-82a3-4727e552988f_755x1325.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>If you&#8217;ve spent any time working with Claude or another AI assistant, you know the rhythm. You type a prompt, you read the answer, you tweak your wording, you hit enter again. Prompt, read, tweak, repeat. It works, but you are the one doing the repeating. Loop engineering is the idea that you shouldn&#8217;t have to be.</p><p>In March 2026, Andrej Karpathy showed a different way, and it&#8217;s now got a name: loop engineering.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Data Science In Action is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2><strong>What does loop engineering actually mean?</strong></h2><p>Loop engineering is the practice of designing a system in which the AI continues to work on its own, in a repeating cycle, until a goal you defined is met. Instead of you prompting it ten times, you set it up once to prompt itself: try something, check the result, adjust, try again.</p><p>Karpathy put it plainly: the goal is to remove yourself as the bottleneck, put in very few tokens, and let a lot of work happen without you deciding the next step every time.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?&amp;gift=true&quot;,&quot;text&quot;:&quot;Give a gift subscription&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/subscribe?&amp;gift=true"><span>Give a gift subscription</span></a></p><p>Think of the difference between cooking on a stovetop and using a slow cooker. On the stovetop, you&#8217;re standing there, stirring, checking, adjusting the heat. With a slow cooker, you set the temperature and the time, and you walk away. It keeps working in its own loop: heat, wait, check, heat again, until dinner is actually done. You didn&#8217;t do the repeating. You designed the conditions.</p><div class="pullquote"><p>That&#8217;s loop engineering: You&#8217;re not writing one prompt anymore. You&#8217;re designing the loop the AI runs inside of.</p></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!JkPC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F353f3ec7-f9ba-44c0-82a3-4727e552988f_755x1325.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!JkPC!, /__u/datascienceinaction.substack.com/w_424, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F353f3ec7-f9ba-44c0-82a3-4727e552988f_755x1325.png 424w, /__u/substackcdn.com/image/fetch/$s_!JkPC!, /__u/datascienceinaction.substack.com/w_848, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F353f3ec7-f9ba-44c0-82a3-4727e552988f_755x1325.png 848w, /__u/substackcdn.com/image/fetch/$s_!JkPC!, /__u/datascienceinaction.substack.com/w_1272, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F353f3ec7-f9ba-44c0-82a3-4727e552988f_755x1325.png 1272w, /__u/substackcdn.com/image/fetch/$s_!JkPC!, /__u/datascienceinaction.substack.com/w_1456, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F353f3ec7-f9ba-44c0-82a3-4727e552988f_755x1325.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!JkPC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F353f3ec7-f9ba-44c0-82a3-4727e552988f_755x1325.png" width="404" height="709.0066225165563" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/353f3ec7-f9ba-44c0-82a3-4727e552988f_755x1325.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1325,&quot;width&quot;:755,&quot;resizeWidth&quot;:404,&quot;bytes&quot;:1372162,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://datascienceinaction.substack.com/i/207442735?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F353f3ec7-f9ba-44c0-82a3-4727e552988f_755x1325.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!JkPC!, /__u/datascienceinaction.substack.com/w_424, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F353f3ec7-f9ba-44c0-82a3-4727e552988f_755x1325.png 424w, /__u/substackcdn.com/image/fetch/$s_!JkPC!, /__u/datascienceinaction.substack.com/w_848, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F353f3ec7-f9ba-44c0-82a3-4727e552988f_755x1325.png 848w, /__u/substackcdn.com/image/fetch/$s_!JkPC!, /__u/datascienceinaction.substack.com/w_1272, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F353f3ec7-f9ba-44c0-82a3-4727e552988f_755x1325.png 1272w, /__u/substackcdn.com/image/fetch/$s_!JkPC!, /__u/datascienceinaction.substack.com/w_1456, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F353f3ec7-f9ba-44c0-82a3-4727e552988f_755x1325.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/subscribe"><span>Subscribe now</span></a></p><div><hr></div><h2><strong>Why is this different from prompt engineering?</strong></h2><p>Prompt engineering is about shaping a single input to yield a better single output. It&#8217;s the wording, the examples you give, the format you ask for.</p><p>Loop engineering happens one level up. It&#8217;s about what happens <em>after</em> the first response. Does the AI check its own work? Does it try again if something&#8217;s wrong? Does it know when to stop? A well-written prompt can still leave you babysitting the process. A well-designed loop doesn&#8217;t need you in the room.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/p/what-is-loop-engineering?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/p/what-is-loop-engineering?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share</span></a></p><div><hr></div><h2><strong>A quick note on timing</strong></h2><p>This term is genuinely new. Karpathy released a small open-source project called <a href="https://github.com/karpathy/autoresearch">AutoResearch</a>: about 630 lines of code across three files. One file, <code>train.py</code>, is the only thing the agent is allowed to touch. A second file, <code>prepare.py</code>, scores the results and is off-limits, so the agent can&#8217;t just make the test easier instead of making the model better. A third file, <code>program.md</code>, holds the rules and constraints a human wrote in advance.</p><div class="pullquote"><p>The loop itself is simple: the agent reads the code, proposes a change, trains it for a few minutes, keeps the change if it improved things, rolls it back if it didn&#8217;t, and repeats. Karpathy wasn&#8217;t running each experiment by hand anymore. He&#8217;d removed himself from the middle of the process and let the loop run.</p></div><p>The project went viral within days. People started calling the pattern the &#8220;Karpathy Loop.&#8221; A few months later, the wider builder community coined the term &#8220;loop engineering&#8221; to describe that same shift more generally. It has since picked up momentum in June 2026, with Addy Osmani writing about it. Both Boris Cherny at Anthropic and Peter Steinberger describe a real shift in how they work with coding agents: designing the system that prompts the agent, rather than prompting it turn by turn. If this is the first time you&#8217;re hearing it, you&#8217;re not behind. You&#8217;re right on time.</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/p/what-is-loop-engineering?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Data Science In Action! This post is public, so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/p/what-is-loop-engineering?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/p/what-is-loop-engineering?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share</span></a></p></div><div><hr></div><h2><strong>The five pieces of a real loop</strong></h2><p>Every loop worth building has these parts, and if any one of them is missing, the loop either does nothing useful or never stops:</p><ol><li><p><strong>A goal.</strong> Not &#8220;clean up this data,&#8221; but something specific enough to check: &#8220;no null values in the email column, no duplicate IDs.&#8221;</p></li><li><p><strong>An action.</strong> What the AI actually does on each attempt: edit a file, run a query, fix a bug.</p></li><li><p><strong>An observation.</strong> How does it check whether the action worked? Did the test pass? Does the data now meet the rule?</p></li><li><p><strong>An adjustment.</strong> If it didn&#8217;t work, try it differently next time, not just the same thing again.</p></li><li><p><strong>A stopping point.</strong> A hard limit on attempts, and clear instructions for what to do if it hits that limit without succeeding.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share Data Science In Action&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share Data Science In Action</span></a></p></li></ol><p>That last one matters more than people expect. A loop without a stopping point isn&#8217;t autonomous; it&#8217;s just expensive. It&#8217;ll keep running, keep using tokens, and keep making changes to your files, possibly getting further from a working answer with every attempt instead of closer.</p><p>Let me elaborate using Karpathy&#8217;s AutoResearch, which actually maps cleanly onto this, so I&#8217;ll use his three files as the example alongside the general pattern:</p><ol><li><p><strong>A goal.</strong> In AutoResearch, this lives in <code>program.md</code>, the constraints a human wrote before the loop ever ran. For your own loop, this needs to be specific enough to check: not &#8220;clean up this data,&#8221; but &#8220;no null values in the email column, no duplicate IDs.&#8221;</p></li><li><p><strong>An action.</strong> What the AI actually does on each attempt. In AutoResearch, that&#8217;s editing <code>train.py</code>, and only <code>train.py</code>.</p></li><li><p><strong>An observation.</strong> How it checks whether the action worked. In AutoResearch, that&#8217;s <code>prepare.py</code>, a separate evaluator that the agent can&#8217;t touch or game.</p></li><li><p><strong>An adjustment.</strong> If it didn&#8217;t work, what it tries differently next time, not just the same thing again. Karpathy&#8217;s loop keeps the change if it improved things and rolls it back if it didn&#8217;t.</p></li><li><p><strong>A stopping point.</strong> A hard limit on attempts, and clear instructions for what to do if it hits that limit without succeeding.</p><div class="community-chat" data-attrs="{&quot;url&quot;:&quot;https://open.substack.com/pub/datascienceinaction/chat?utm_source=chat_embed&quot;,&quot;subdomain&quot;:&quot;datascienceinaction&quot;,&quot;pub&quot;:{&quot;id&quot;:7180606,&quot;name&quot;:&quot;Data Science In Action&quot;,&quot;author_name&quot;:&quot;Engy Fouda&quot;,&quot;author_photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!CZ7q!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c77e192-01d1-4d3a-b2ff-6e114eecb5d4_1713x1713.jpeg&quot;}}" data-component-name="CommunityChatRenderPlaceholder"></div><div><hr></div></li></ol><h2><strong>Have you already seen this without the name? </strong></h2><p>If you&#8217;ve read my article on <a href="/__u/datascienceinaction.substack.com/p/understanding-claude-hooks">understanding Claude Hooks</a>, you&#8217;ve already seen a piece of this. Hooks are the deterministic guardrails that fire at key moments, automatically formatting code and blocking dangerous commands. In a loop, those same guardrails are what keep the cycle from wandering off and doing something you didn&#8217;t ask for.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;9758fecc-f114-45b8-9caa-e57c2ea20127&quot;,&quot;caption&quot;:&quot;I am currently in the process of getting certified by Anthropic. You can do it, too. It&#8217;s easy, online, and both the courses and the quizzes are free. The quizzes are actually easy, and you can retry till you pass. Here is the link:&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Understanding Claude Hooks&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:43386542,&quot;name&quot;:&quot;Engy Fouda&quot;,&quot;bio&quot;:&quot;AI Architect, Adjunct Lecturer, Freelance SAS, Docker, Kubernetes, Python, Technical Writing, Data Science, &amp; Machine Learning Instructor, Best-Selling Author of 10 Books, Harvard Alumni&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2c77e192-01d1-4d3a-b2ff-6e114eecb5d4_1713x1713.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-05-12T16:17:09.800Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!b9Tm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcecdbcc5-d9da-4632-b97d-24898259f443_1627x975.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://datascienceinaction.substack.com/p/understanding-claude-hooks&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:196478276,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:2,&quot;comment_count&quot;:0,&quot;publication_id&quot;:7180606,&quot;publication_name&quot;:&quot;Data Science In Action&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!TMYq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F096ea207-0f69-4b87-8022-814286c2ed3b_1024x1024.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>And if you&#8217;ve read <a href="/__u/datascienceinaction.substack.com/p/building-your-own-agentic-ai-system">Building Your Own Agentic AI System</a>, you already know that agentic AI is defined by a control loop, the part of the system that lets it plan, act, and adjust across multiple steps instead of answering once. Loop engineering is the practice of deliberately designing the control loop, rather than letting it happen by accident.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;30e46b91-e245-4380-a67e-4b6fb2681709&quot;,&quot;caption&quot;:&quot;Introduction&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;Building Your Own Agentic AI System&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:43386542,&quot;name&quot;:&quot;Engy Fouda&quot;,&quot;bio&quot;:&quot;AI Architect, Adjunct Lecturer, Freelance SAS, Docker, Kubernetes, Python, Technical Writing, Data Science, &amp; Machine Learning Instructor, Best-Selling Author of 10 Books, Harvard Alumni&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2c77e192-01d1-4d3a-b2ff-6e114eecb5d4_1713x1713.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-02-27T18:27:10.892Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!uAeG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9ab061fb-348c-48b9-9434-596d18fd561b_1598x958.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://datascienceinaction.substack.com/p/building-your-own-agentic-ai-system&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:189386038,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:1,&quot;comment_count&quot;:0,&quot;publication_id&quot;:7180606,&quot;publication_name&quot;:&quot;Data Science In Action&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!TMYq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F096ea207-0f69-4b87-8022-814286c2ed3b_1024x1024.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><div class="directMessage button" data-attrs="{&quot;userId&quot;:43386542,&quot;userName&quot;:&quot;Engy Fouda&quot;,&quot;canDm&quot;:null,&quot;dmUpgradeOptions&quot;:null,&quot;isEditorNode&quot;:true}" data-component-name="DirectMessageToDOM"></div><div><hr></div><h2><strong>One honest caution before you get excited</strong></h2><p>A loop that runs on its own can also make mistakes when left unattended. The whole point of building in checks is to make &#8220;done&#8221; actually mean something, not just to make the AI feel busy. When a loop runs smoothly, it&#8217;s tempting to stop paying attention and just accept whatever comes out the other side. Don&#8217;t. Your job is still to read what the loop produced and confirm it actually works before you trust it.</p><div class="pullquote"><p>Loop engineering doesn&#8217;t remove you from the process. It changes your job from typing every step to designing the system and checking its work, exactly the trade Karpathy made when he stopped running his own experiments by hand.</p></div><p>In the paid tutorial, I&#8217;ll walk you through building your first real loop in Claude Code, step by step, with screenshots at every stage, using the same three-piece structure Karpathy used, a goal, an action the agent can take, and a separate check it can&#8217;t game, applied to a task you&#8217;ll actually recognize: cleaning a messy CSV file until it passes real data quality checks.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/leaderboard?&amp;utm_source=post&quot;,&quot;text&quot;:&quot;Refer a friend&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/leaderboard?&amp;utm_source=post"><span>Refer a friend</span></a></p><p>What&#8217;s the most repetitive part of your AI workflow right now, the part where you keep typing basically the same follow-up over and over? Tell me in the comments, it might be exactly the kind of task a loop can take off your plate.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/p/what-is-loop-engineering/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/p/what-is-loop-engineering/comments"><span>Leave a comment</span></a></p>]]></content:encoded></item><item><title><![CDATA[[Tutorial] Skills, Workflows, and Agents: A Hands-On Tutorial Using Claude Chat & Cowork]]></title><description><![CDATA[No Coding, No Extra Costs]]></description><link>https://datascienceinaction.substack.com/p/skills-workflows-and-agents-a-hands</link><guid isPermaLink="false">https://datascienceinaction.substack.com/p/skills-workflows-and-agents-a-hands</guid><dc:creator><![CDATA[Engy Fouda]]></dc:creator><pubDate>Wed, 29 Jul 2026 22:06:37 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!hS8-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F930d4892-870c-4d2d-8aa2-8c2c41a9599b_1432x815.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>In the free article last week, I explained what skills, workflows, agents, and frameworks are and how they&#8217;re different. If you haven&#8217;t read that one yet, start there: </em></p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;64fdddf0-bee7-43ba-9175-f201d3ed0cad&quot;,&quot;caption&quot;:&quot;AI has a vocabulary problem. Everyone is talking about agents, workflows, skills, and frameworks. And if you are just getting started, those four words can feel like the same thing said four different ways.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;sm&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;The Architect's Guide to AI Skills, Workflows, AI Agents, and AI Framework&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:43386542,&quot;name&quot;:&quot;Engy Fouda&quot;,&quot;bio&quot;:&quot;AI Architect, Adjunct Lecturer, Freelance SAS, Docker, Kubernetes, Python, Technical Writing, Data Science, &amp; Machine Learning Instructor, Best-Selling Author of 10 Books, Harvard Alumni&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2c77e192-01d1-4d3a-b2ff-6e114eecb5d4_1713x1713.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-07-21T19:34:17.628Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!5jcH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F728fda60-4277-4e55-a259-882b1689a4ad_1765x910.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://datascienceinaction.substack.com/p/the-architects-guide-to-ai-skills&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:207331918,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:1,&quot;publication_id&quot;:7180606,&quot;publication_name&quot;:&quot;Data Science In Action&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!TMYq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F096ea207-0f69-4b87-8022-814286c2ed3b_1024x1024.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p><em>In this tutorial, I&#8217;ll show you what each one looks like in practice using Claude Cowork and Claude chat. No coding. No Claude Code. No API costs on top of your subscription.</em></p><p><em>This matters more than it sounds. Claude Code is a fantastic tool, but it&#8217;s built for developers, and it can rack up API charges beyond your monthly plan, billed per use. If you&#8217;re job hunting, repurposing content, or organizing meeting notes, you don&#8217;t need that overhead. Everything in this tutorial runs inside what you&#8217;re already paying for.</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!hS8-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F930d4892-870c-4d2d-8aa2-8c2c41a9599b_1432x815.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!hS8-!, /__u/datascienceinaction.substack.com/w_424, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F930d4892-870c-4d2d-8aa2-8c2c41a9599b_1432x815.png 424w, /__u/substackcdn.com/image/fetch/$s_!hS8-!, /__u/datascienceinaction.substack.com/w_848, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F930d4892-870c-4d2d-8aa2-8c2c41a9599b_1432x815.png 848w, /__u/substackcdn.com/image/fetch/$s_!hS8-!, /__u/datascienceinaction.substack.com/w_1272, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F930d4892-870c-4d2d-8aa2-8c2c41a9599b_1432x815.png 1272w, /__u/substackcdn.com/image/fetch/$s_!hS8-!, /__u/datascienceinaction.substack.com/w_1456, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F930d4892-870c-4d2d-8aa2-8c2c41a9599b_1432x815.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!hS8-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F930d4892-870c-4d2d-8aa2-8c2c41a9599b_1432x815.png" width="1432" height="815" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/930d4892-870c-4d2d-8aa2-8c2c41a9599b_1432x815.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:815,&quot;width&quot;:1432,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1615717,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://datascienceinaction.substack.com/i/209017445?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F930d4892-870c-4d2d-8aa2-8c2c41a9599b_1432x815.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!hS8-!, /__u/datascienceinaction.substack.com/w_424, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F930d4892-870c-4d2d-8aa2-8c2c41a9599b_1432x815.png 424w, /__u/substackcdn.com/image/fetch/$s_!hS8-!, /__u/datascienceinaction.substack.com/w_848, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F930d4892-870c-4d2d-8aa2-8c2c41a9599b_1432x815.png 848w, /__u/substackcdn.com/image/fetch/$s_!hS8-!, /__u/datascienceinaction.substack.com/w_1272, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F930d4892-870c-4d2d-8aa2-8c2c41a9599b_1432x815.png 1272w, /__u/substackcdn.com/image/fetch/$s_!hS8-!, /__u/datascienceinaction.substack.com/w_1456, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F930d4892-870c-4d2d-8aa2-8c2c41a9599b_1432x815.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/subscribe"><span>Subscribe now</span></a></p><div><hr></div><h3>What You&#8217;ll Need</h3><ol><li><p><strong>Claude Pro</strong> (or any plan with Cowork access)</p></li><li><p><strong>Claude Cowork</strong>, open with a new project</p></li><li><p><strong>No prior experience needed.</strong> If you can type a sentence, you can do this.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Data Science In Action is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div></li></ol><div><hr></div><h3>Step 1: Build a Meeting Summary Skill</h3><p>A skill in Cowork is a reusable set of instructions you save once and reuse anytime. Let&#8217;s build one that turns messy meeting notes into a clean summary with action items.</p><p>Open Cowork, start a new project, and say:</p><blockquote><p>&#8220;Create a skill called &#8216;meeting-summary&#8217;. This skill should read any meeting notes I give it, whether typed, pasted, or uploaded, and produce: a 3-4 sentence summary of what was discussed, a numbered list of action items with who owns each one if mentioned, and a list of any deadlines mentioned, called out clearly. Keep the tone plain and professional. Do not add opinions or invent details that weren&#8217;t in the notes.&#8221;</p></blockquote><p>That&#8217;s it. No file structure to build by hand, no folders. Cowork saves this as a reusable skill you can call on anytime.</p><p>Now test it. Paste in some rough notes:</p><blockquote><p>&#8220;Use the meeting-summary skill on this: Discussed Q3 goals. Budget approval needed by Friday. Team to review new onboarding doc. Follow up with Sarah on marketing plan.&#8221;</p></blockquote><p>That&#8217;s a skill in action. One task, clearly defined, reusable every time you have notes to clean up. You didn&#8217;t write a line of code, and you didn&#8217;t touch anything outside your normal Claude subscription.</p><p>If you want to see what more advanced skills look like once you&#8217;re comfortable, Anthropic maintains an open library you can browse for inspiration: <a href="https://github.com/anthropics/skills">github.com/anthropics/skills</a>. You won&#8217;t need to build anything that complex for most day-to-day tasks, but it&#8217;s worth a look.</p><div class="community-chat" data-attrs="{&quot;url&quot;:&quot;https://open.substack.com/pub/datascienceinaction/chat?utm_source=chat_embed&quot;,&quot;subdomain&quot;:&quot;datascienceinaction&quot;,&quot;pub&quot;:{&quot;id&quot;:7180606,&quot;name&quot;:&quot;Data Science In Action&quot;,&quot;author_name&quot;:&quot;Engy Fouda&quot;,&quot;author_photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!CZ7q!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c77e192-01d1-4d3a-b2ff-6e114eecb5d4_1713x1713.jpeg&quot;}}" data-component-name="CommunityChatRenderPlaceholder"></div><div><hr></div><h3>Step 2: Build a Job Hunting Workflow</h3><p>A workflow is a fixed sequence of steps that always runs in the same order. Let&#8217;s build one for job hunting: from job posting to a tailored application, every time, no coding required.</p><p>In the same Cowork project, say:</p><blockquote><p>&#8220;Create a workflow called &#8216;job-application-prep&#8217;. Every time I give you a job posting and my current resume bullets, follow these steps in order:</p><p> 1) List the top 5 requirements the posting emphasizes most. <br>2) Rewrite one of my resume bullets so it speaks directly to this posting&#8217;s language, without inventing experience I don&#8217;t have. <br>3) Write a 2-3 sentence cover letter opening that connects my background to this specific role and mentions the company by name.<br>4) Format one row for my application tracker with columns: Company, Role, Date Applied, Key Requirement Matched, Status. Always complete all four steps in order, don&#8217;t skip any.&#8221;</p></blockquote><p>Now run it:</p><blockquote><p>&#8220;Run job-application-prep. Posting: [paste any real job posting]. <br>My resume bullets: [paste 2-3 of your current bullets].&#8221;</p></blockquote><p>Notice what the workflow does NOT do. It doesn&#8217;t decide the job is a bad fit and stop early. It doesn&#8217;t skip the cover letter step because your resume already looks strong. It runs the same four steps every time, in the same order.</p><p>That predictability is exactly the point. When you&#8217;re applying to a dozen jobs a week, you want consistency, not surprises, and you want it without paying per API call for the privilege.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share&quot;,&quot;text&quot;:&quot;Share Data Science In Action&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share Data Science In Action</span></a></p><div><hr></div><h3>Step 3: Build a Content Repurposing Agent</h3>
      <p>
          <a href="/__u/datascienceinaction.substack.com/p/skills-workflows-and-agents-a-hands">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[The Architect's Guide to AI Skills, Workflows, AI Agents, and AI Framework]]></title><description><![CDATA[What Is the Difference and When Do You Need Each?]]></description><link>https://datascienceinaction.substack.com/p/the-architects-guide-to-ai-skills</link><guid isPermaLink="false">https://datascienceinaction.substack.com/p/the-architects-guide-to-ai-skills</guid><dc:creator><![CDATA[Engy Fouda]]></dc:creator><pubDate>Tue, 21 Jul 2026 19:34:17 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!5jcH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F728fda60-4277-4e55-a259-882b1689a4ad_1765x910.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>AI has a vocabulary problem. Everyone is talking about agents, workflows, skills, and frameworks. And if you are just getting started, those four words can feel like the same thing said four different ways.</p><p>They are not. Each one solves a different problem at a different level. Once you understand the difference, you will start seeing them everywhere and know exactly which one to reach for.</p><p>Let me walk you through each one.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Data Science In Action is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h1>The kitchen analogy</h1><p>Before I throw definitions at you, let me give you a picture that makes all four click at once.</p><p>Imagine a restaurant kitchen.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!5jcH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F728fda60-4277-4e55-a259-882b1689a4ad_1765x910.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!5jcH!, /__u/datascienceinaction.substack.com/w_424, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F728fda60-4277-4e55-a259-882b1689a4ad_1765x910.png 424w, /__u/substackcdn.com/image/fetch/$s_!5jcH!, /__u/datascienceinaction.substack.com/w_848, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F728fda60-4277-4e55-a259-882b1689a4ad_1765x910.png 848w, /__u/substackcdn.com/image/fetch/$s_!5jcH!, /__u/datascienceinaction.substack.com/w_1272, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F728fda60-4277-4e55-a259-882b1689a4ad_1765x910.png 1272w, /__u/substackcdn.com/image/fetch/$s_!5jcH!, /__u/datascienceinaction.substack.com/w_1456, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F728fda60-4277-4e55-a259-882b1689a4ad_1765x910.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!5jcH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F728fda60-4277-4e55-a259-882b1689a4ad_1765x910.png" width="1456" height="751" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/728fda60-4277-4e55-a259-882b1689a4ad_1765x910.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:751,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2097345,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://datascienceinaction.substack.com/i/207331918?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F728fda60-4277-4e55-a259-882b1689a4ad_1765x910.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!5jcH!, /__u/datascienceinaction.substack.com/w_424, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F728fda60-4277-4e55-a259-882b1689a4ad_1765x910.png 424w, /__u/substackcdn.com/image/fetch/$s_!5jcH!, /__u/datascienceinaction.substack.com/w_848, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F728fda60-4277-4e55-a259-882b1689a4ad_1765x910.png 848w, /__u/substackcdn.com/image/fetch/$s_!5jcH!, /__u/datascienceinaction.substack.com/w_1272, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F728fda60-4277-4e55-a259-882b1689a4ad_1765x910.png 1272w, /__u/substackcdn.com/image/fetch/$s_!5jcH!, /__u/datascienceinaction.substack.com/w_1456, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F728fda60-4277-4e55-a259-882b1689a4ad_1765x910.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>A <strong>skill</strong> is a recipe card. It tells the cook exactly how to make one dish, step by step.</p><p>A <strong>workflow</strong> is the prep schedule. It sequences the recipe cards in the right order so dinner service runs smoothly.</p><p>An <strong>agent</strong> is the head chef. They know the recipes, they follow the schedule, but they can also improvise when something goes wrong, or a customer asks for something off-menu.</p><p>A <strong>framework</strong> is the kitchen infrastructure itself: the stations, the ticketing system, the shared rules that let every cook and chef work together without stepping on each other.</p><p>Keep that image in mind. Let us go deeper.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/subscribe"><span>Subscribe now</span></a></p><div><hr></div><h1>What is a skill?</h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!C8fE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F217c4131-643b-4a84-8285-b645520d4fa7_2752x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!C8fE!, /__u/datascienceinaction.substack.com/w_424, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F217c4131-643b-4a84-8285-b645520d4fa7_2752x1536.png 424w, /__u/substackcdn.com/image/fetch/$s_!C8fE!, /__u/datascienceinaction.substack.com/w_848, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F217c4131-643b-4a84-8285-b645520d4fa7_2752x1536.png 848w, /__u/substackcdn.com/image/fetch/$s_!C8fE!, /__u/datascienceinaction.substack.com/w_1272, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F217c4131-643b-4a84-8285-b645520d4fa7_2752x1536.png 1272w, /__u/substackcdn.com/image/fetch/$s_!C8fE!, /__u/datascienceinaction.substack.com/w_1456, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F217c4131-643b-4a84-8285-b645520d4fa7_2752x1536.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!C8fE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F217c4131-643b-4a84-8285-b645520d4fa7_2752x1536.png" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/217c4131-643b-4a84-8285-b645520d4fa7_2752x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:813,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4838039,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://datascienceinaction.substack.com/i/207331918?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F217c4131-643b-4a84-8285-b645520d4fa7_2752x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!C8fE!, /__u/datascienceinaction.substack.com/w_424, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F217c4131-643b-4a84-8285-b645520d4fa7_2752x1536.png 424w, /__u/substackcdn.com/image/fetch/$s_!C8fE!, /__u/datascienceinaction.substack.com/w_848, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F217c4131-643b-4a84-8285-b645520d4fa7_2752x1536.png 848w, /__u/substackcdn.com/image/fetch/$s_!C8fE!, /__u/datascienceinaction.substack.com/w_1272, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F217c4131-643b-4a84-8285-b645520d4fa7_2752x1536.png 1272w, /__u/substackcdn.com/image/fetch/$s_!C8fE!, /__u/datascienceinaction.substack.com/w_1456, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F217c4131-643b-4a84-8285-b645520d4fa7_2752x1536.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>A skill is a single, well-defined capability that an AI can perform.</p><p>It does one thing. It does it reliably. It is reusable.</p><p>Examples of skills:</p><ul><li><p>Summarize a document</p></li><li><p>Draft an email reply</p></li><li><p>Format a table</p></li><li><p>Search the web for a topic</p></li><li><p>Translate text</p></li></ul><p>A skill is not a process. It is not a decision. It is a tool in a toolbox.</p><p>In Claude Cowork, for example, a skill is a small instruction file that teaches Claude exactly how to produce one specific output: a Word document, a PowerPoint slide, or a PDF. The skill gets called when you need that output and nothing else.</p><p><strong>Pros of skills:</strong></p><ul><li><p>Simple to build and maintain</p></li><li><p>Easy to reuse across different tasks</p></li><li><p>Fast to execute</p></li><li><p>Easy to test (one input, one expected output)</p></li></ul><p><strong>Cons of skills:</strong></p><ul><li><p>Limited in scope by design</p></li><li><p>Cannot adapt to unexpected situations</p></li><li><p>Needs something else to coordinate it with other skills</p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/p/the-architects-guide-to-ai-skills?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Data Science In Action! This post is public, so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/p/the-architects-guide-to-ai-skills?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/p/the-architects-guide-to-ai-skills?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share</span></a></p></div></li></ul><div><hr></div><h1>What is a Workflow?</h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!uW4s!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33a669c6-9639-4d49-b2f9-d03fd0a3c6af_2752x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!uW4s!, /__u/datascienceinaction.substack.com/w_424, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33a669c6-9639-4d49-b2f9-d03fd0a3c6af_2752x1536.png 424w, /__u/substackcdn.com/image/fetch/$s_!uW4s!, /__u/datascienceinaction.substack.com/w_848, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33a669c6-9639-4d49-b2f9-d03fd0a3c6af_2752x1536.png 848w, /__u/substackcdn.com/image/fetch/$s_!uW4s!, /__u/datascienceinaction.substack.com/w_1272, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33a669c6-9639-4d49-b2f9-d03fd0a3c6af_2752x1536.png 1272w, /__u/substackcdn.com/image/fetch/$s_!uW4s!, /__u/datascienceinaction.substack.com/w_1456, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33a669c6-9639-4d49-b2f9-d03fd0a3c6af_2752x1536.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!uW4s!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33a669c6-9639-4d49-b2f9-d03fd0a3c6af_2752x1536.png" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/33a669c6-9639-4d49-b2f9-d03fd0a3c6af_2752x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:813,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3929187,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://datascienceinaction.substack.com/i/207331918?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33a669c6-9639-4d49-b2f9-d03fd0a3c6af_2752x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!uW4s!, /__u/datascienceinaction.substack.com/w_424, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33a669c6-9639-4d49-b2f9-d03fd0a3c6af_2752x1536.png 424w, /__u/substackcdn.com/image/fetch/$s_!uW4s!, /__u/datascienceinaction.substack.com/w_848, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33a669c6-9639-4d49-b2f9-d03fd0a3c6af_2752x1536.png 848w, /__u/substackcdn.com/image/fetch/$s_!uW4s!, /__u/datascienceinaction.substack.com/w_1272, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33a669c6-9639-4d49-b2f9-d03fd0a3c6af_2752x1536.png 1272w, /__u/substackcdn.com/image/fetch/$s_!uW4s!, /__u/datascienceinaction.substack.com/w_1456, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F33a669c6-9639-4d49-b2f9-d03fd0a3c6af_2752x1536.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>A workflow is a sequence of steps that happen in a specific order to accomplish a larger goal.</p><p>Where a skill does one thing, a workflow chains multiple things together, it is the &#8220;first do this, then do that, then check if it worked&#8221; layer.</p><p>Workflows are great when:</p><ul><li><p>The process is predictable and repeatable</p></li><li><p>The same steps happen every time</p></li><li><p>You want to automate something you currently do manually</p></li></ul><p>A real example: every Monday morning, you want to check your unread emails, pull out the action items, create a task list, and draft a summary for your team. That is a workflow. Each part (checking email, extracting action items, formatting a list, drafting a summary) might be a separate skill. The workflow stitches them together in the right order.</p><p>If you have read my article on agentic workflows, you already have a head start here: <a href="/__u/datascienceinaction.substack.com/p/agentic-workflows-for-beginners-why">Agentic Workflows for Beginners</a>.</p><p><strong>Pros of workflows:</strong></p><ul><li><p>Predictable and transparent (you know exactly what will happen)</p></li><li><p>Easy to automate and schedule</p></li><li><p>Great for repeatable business processes</p></li><li><p>Easier to debug than an agent (you can check each step)</p></li></ul><p><strong>Cons of workflows:</strong></p><ul><li><p>Rigid: if the process changes, you have to update the workflow</p></li><li><p>Not great at handling exceptions or surprises</p></li><li><p>Needs someone to design the steps upfront</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/p/the-architects-guide-to-ai-skills?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/p/the-architects-guide-to-ai-skills?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share</span></a></p></li></ul><div><hr></div><h1>What is an AI Agent?</h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!rMPj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8e9b569-8856-4cbf-a3de-a55794c3d9d6_2752x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!rMPj!, /__u/datascienceinaction.substack.com/w_424, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8e9b569-8856-4cbf-a3de-a55794c3d9d6_2752x1536.png 424w, /__u/substackcdn.com/image/fetch/$s_!rMPj!, /__u/datascienceinaction.substack.com/w_848, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8e9b569-8856-4cbf-a3de-a55794c3d9d6_2752x1536.png 848w, /__u/substackcdn.com/image/fetch/$s_!rMPj!, /__u/datascienceinaction.substack.com/w_1272, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8e9b569-8856-4cbf-a3de-a55794c3d9d6_2752x1536.png 1272w, /__u/substackcdn.com/image/fetch/$s_!rMPj!, /__u/datascienceinaction.substack.com/w_1456, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8e9b569-8856-4cbf-a3de-a55794c3d9d6_2752x1536.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!rMPj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8e9b569-8856-4cbf-a3de-a55794c3d9d6_2752x1536.png" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a8e9b569-8856-4cbf-a3de-a55794c3d9d6_2752x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:813,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:4602323,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://datascienceinaction.substack.com/i/207331918?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8e9b569-8856-4cbf-a3de-a55794c3d9d6_2752x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!rMPj!, /__u/datascienceinaction.substack.com/w_424, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8e9b569-8856-4cbf-a3de-a55794c3d9d6_2752x1536.png 424w, /__u/substackcdn.com/image/fetch/$s_!rMPj!, /__u/datascienceinaction.substack.com/w_848, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8e9b569-8856-4cbf-a3de-a55794c3d9d6_2752x1536.png 848w, /__u/substackcdn.com/image/fetch/$s_!rMPj!, /__u/datascienceinaction.substack.com/w_1272, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8e9b569-8856-4cbf-a3de-a55794c3d9d6_2752x1536.png 1272w, /__u/substackcdn.com/image/fetch/$s_!rMPj!, /__u/datascienceinaction.substack.com/w_1456, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8e9b569-8856-4cbf-a3de-a55794c3d9d6_2752x1536.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>An AI agent is a system that can perceive its environment, make decisions, use tools, and take actions, all in pursuit of a goal.</p><p>This is where it gets exciting, and a little more complex.</p><p>Unlike a workflow, an agent does not just follow a fixed sequence. It determines the steps to take based on what it discovers along the way. It can loop, backtrack, try different approaches, and decide when it is done.</p><p>Think about Claude Code. You give it a goal: &#8220;Refactor this code to be cleaner.&#8221; Claude Code does not follow a preset checklist. It reads the code, decides what needs to change, makes the changes, checks the result, and adjusts. That is an agent.</p><p>Agents are the right choice when:</p><ul><li><p>The path to the goal is not fully predictable</p></li><li><p>You need the AI to make judgment calls</p></li><li><p>The task has many possible routes to the same outcome</p></li></ul><p><strong>Pros of agents:</strong></p><ul><li><p>Flexible and adaptive</p></li><li><p>Can handle complex, open-ended tasks</p></li><li><p>Can use multiple skills and tools dynamically</p></li></ul><p><strong>Cons of agents:</strong></p><ul><li><p>Less predictable than workflows</p></li><li><p>Harder to debug (&#8221;why did it do that?&#8221;)</p></li><li><p>Can be slower and more expensive to run</p></li><li><p>May need guardrails to stay on track</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share Data Science In Action&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share Data Science In Action</span></a></p></li></ul><div><hr></div><h1>What is an AI Framework?</h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!jsAw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35938937-612e-4a50-8e89-412dd7c8c406_2752x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!jsAw!, /__u/datascienceinaction.substack.com/w_424, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35938937-612e-4a50-8e89-412dd7c8c406_2752x1536.png 424w, /__u/substackcdn.com/image/fetch/$s_!jsAw!, /__u/datascienceinaction.substack.com/w_848, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35938937-612e-4a50-8e89-412dd7c8c406_2752x1536.png 848w, /__u/substackcdn.com/image/fetch/$s_!jsAw!, /__u/datascienceinaction.substack.com/w_1272, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35938937-612e-4a50-8e89-412dd7c8c406_2752x1536.png 1272w, /__u/substackcdn.com/image/fetch/$s_!jsAw!, /__u/datascienceinaction.substack.com/w_1456, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35938937-612e-4a50-8e89-412dd7c8c406_2752x1536.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!jsAw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35938937-612e-4a50-8e89-412dd7c8c406_2752x1536.png" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/35938937-612e-4a50-8e89-412dd7c8c406_2752x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:813,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:5715745,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://datascienceinaction.substack.com/i/207331918?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35938937-612e-4a50-8e89-412dd7c8c406_2752x1536.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!jsAw!, /__u/datascienceinaction.substack.com/w_424, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35938937-612e-4a50-8e89-412dd7c8c406_2752x1536.png 424w, /__u/substackcdn.com/image/fetch/$s_!jsAw!, /__u/datascienceinaction.substack.com/w_848, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35938937-612e-4a50-8e89-412dd7c8c406_2752x1536.png 848w, /__u/substackcdn.com/image/fetch/$s_!jsAw!, /__u/datascienceinaction.substack.com/w_1272, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35938937-612e-4a50-8e89-412dd7c8c406_2752x1536.png 1272w, /__u/substackcdn.com/image/fetch/$s_!jsAw!, /__u/datascienceinaction.substack.com/w_1456, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F35938937-612e-4a50-8e89-412dd7c8c406_2752x1536.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>A framework is the infrastructure layer that helps you build, connect, and run agents, workflows, and skills at scale.</p><p>If skills are recipe cards, workflows are schedules, and agents are chefs, a framework is the kitchen design itself: the layout, the communication system, the shared standards that let everything work together.</p><p>Examples of AI frameworks:</p><ul><li><p><strong>LangChain</strong>: helps you build pipelines and chains of AI calls with tools and memory</p></li><li><p><strong>LlamaIndex</strong>: specializes in connecting AI to your data (documents, databases)</p></li><li><p><strong>AutoGen</strong>: helps you build multi-agent systems where multiple AI agents collaborate</p></li><li><p><strong>Claude Agent SDK</strong>: Anthropic&#8217;s own toolkit for building agents that use Claude</p></li></ul><p>You typically reach for a framework when you are building something that needs to scale, involve multiple agents working together, or run repeatedly in a production environment.</p><p><strong>Pros of frameworks:</strong></p><ul><li><p>Reusable patterns and components</p></li><li><p>Saves you from rebuilding common functionality</p></li><li><p>Designed for production use</p></li><li><p>Often includes memory, tool use, and orchestration built in</p></li></ul><p><strong>Cons of frameworks:</strong></p><ul><li><p>Steeper learning curve</p></li><li><p>Overkill for simple tasks</p></li><li><p>Adds complexity and dependencies</p></li><li><p>You need to understand the framework, not just the AI</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/leaderboard?&amp;utm_source=post&quot;,&quot;text&quot;:&quot;Refer a friend&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/leaderboard?&amp;utm_source=post"><span>Refer a friend</span></a></p></li></ul><div><hr></div><h1>The Decision Guide</h1><p>Here is how I think about which one to use:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Q7ob!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd24863ed-5f83-4e64-aaef-b26888111e3a_1867x535.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Q7ob!, /__u/datascienceinaction.substack.com/w_424, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd24863ed-5f83-4e64-aaef-b26888111e3a_1867x535.png 424w, /__u/substackcdn.com/image/fetch/$s_!Q7ob!, /__u/datascienceinaction.substack.com/w_848, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd24863ed-5f83-4e64-aaef-b26888111e3a_1867x535.png 848w, /__u/substackcdn.com/image/fetch/$s_!Q7ob!, /__u/datascienceinaction.substack.com/w_1272, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd24863ed-5f83-4e64-aaef-b26888111e3a_1867x535.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Q7ob!, /__u/datascienceinaction.substack.com/w_1456, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd24863ed-5f83-4e64-aaef-b26888111e3a_1867x535.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Q7ob!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd24863ed-5f83-4e64-aaef-b26888111e3a_1867x535.png" width="1456" height="417" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d24863ed-5f83-4e64-aaef-b26888111e3a_1867x535.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:417,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:17432,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://datascienceinaction.substack.com/i/207331918?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd24863ed-5f83-4e64-aaef-b26888111e3a_1867x535.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!Q7ob!, /__u/datascienceinaction.substack.com/w_424, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd24863ed-5f83-4e64-aaef-b26888111e3a_1867x535.png 424w, /__u/substackcdn.com/image/fetch/$s_!Q7ob!, /__u/datascienceinaction.substack.com/w_848, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd24863ed-5f83-4e64-aaef-b26888111e3a_1867x535.png 848w, /__u/substackcdn.com/image/fetch/$s_!Q7ob!, /__u/datascienceinaction.substack.com/w_1272, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd24863ed-5f83-4e64-aaef-b26888111e3a_1867x535.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Q7ob!, /__u/datascienceinaction.substack.com/w_1456, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd24863ed-5f83-4e64-aaef-b26888111e3a_1867x535.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>More simply: start with the simplest thing that works.</p><p>If one prompt and one output solve your problem, you do not need a workflow. If a workflow handles it, you do not need an agent. If you are building one thing for yourself, you probably do not need a framework.</p><p>The temptation is always to build the most sophisticated thing. Resist it. Complexity is something you add only when you have run out of simpler options.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/subscribe"><span>Subscribe now</span></a></p><div><hr></div><h1>How do they fit together?</h1><p>Here is the important part: these are not competing options. They are layers.</p><p>A framework runs agents. An agent executes workflows. A workflow calls skills.</p><p>You might build a research agent using the Claude Agent SDK (framework), which follows a research process (workflow) and uses individual tools like &#8220;search the web&#8221; and &#8220;summarize a page&#8221; (skills).</p><p>That is the full stack. And once you see it that way, the whole thing becomes much less intimidating.</p><div class="directMessage button" data-attrs="{&quot;userId&quot;:43386542,&quot;userName&quot;:&quot;Engy Fouda&quot;,&quot;canDm&quot;:null,&quot;dmUpgradeOptions&quot;:null,&quot;isEditorNode&quot;:true}" data-component-name="DirectMessageToDOM"></div><div><hr></div><h1>What comes next?</h1><p>In the paid article this week, I walk you step by step through building each one: a skill, a workflow, and an agent, using tools you may already have. I show you what each one looks like in practice and when the difference becomes obvious.</p><p>For now, try this: think about one thing you do repeatedly that takes more than 10 minutes. Is it one task (skill)? A sequence (workflow)? Or does it require judgment calls (agent)?</p><p>Drop your answer in the comments. I would love to hear what you are trying to automate.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/p/the-architects-guide-to-ai-skills/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/p/the-architects-guide-to-ai-skills/comments"><span>Leave a comment</span></a></p>]]></content:encoded></item><item><title><![CDATA[[Tutorial] How to Build a Personal AI Governance Checklist Using Claude?]]></title><description><![CDATA[A Step-by-Step Tutorial]]></description><link>https://datascienceinaction.substack.com/p/tutorial-how-to-build-a-personal</link><guid isPermaLink="false">https://datascienceinaction.substack.com/p/tutorial-how-to-build-a-personal</guid><dc:creator><![CDATA[Engy Fouda]]></dc:creator><pubDate>Thu, 16 Jul 2026 18:14:36 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Bt8A!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc710a061-e51e-4084-accc-a4ff86525350_1320x1730.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In the free article this week, I explained what AI governance is and how it differs from guardrails, harnesses, and safety research. If you haven&#8217;t read it yet, go there first: it gives you the foundation for everything we&#8217;re doing here.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;1cff13e8-e1a5-42c0-8441-13167bc7b90f&quot;,&quot;caption&quot;:&quot;If you&#8217;ve been following AI news lately, you&#8217;ve probably seen &#8220;AI governance&#8221; pop up in headlines. The EU AI Act. Executive orders. Companies are publishing their &#8220;responsible AI principles.&#8221; It sounds like something for lawyers and regulators, not for someone who&#8217;s just learning data science or building AI tools.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;md&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;What Is AI Governance?&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:43386542,&quot;name&quot;:&quot;Engy Fouda&quot;,&quot;bio&quot;:&quot;AI Architect, Adjunct Lecturer, Freelance SAS, Docker, Kubernetes, Python, Technical Writing, Data Science, &amp; Machine Learning Instructor, Best-Selling Author of 9 Books, Harvard Alumni&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2c77e192-01d1-4d3a-b2ff-6e114eecb5d4_1713x1713.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-07-14T17:45:16.744Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/youtube/w_728,c_limit/9w66NvmrlJ0&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://datascienceinaction.substack.com/p/what-is-ai-governance&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:205648542,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:0,&quot;comment_count&quot;:0,&quot;publication_id&quot;:7180606,&quot;publication_name&quot;:&quot;Data Science In Action&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!TMYq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F096ea207-0f69-4b87-8022-814286c2ed3b_1024x1024.png&quot;,&quot;belowTheFold&quot;:false,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p>Now let&#8217;s make it real.</p><p>In this tutorial, you will build a personal AI governance checklist using Claude. This is a structured template you can use before deploying any AI workflow, prompt, or automation. Think of it as your pre-flight checklist: something you run through every time, so that important questions don&#8217;t fall through the cracks.</p><p>By the end, you will have:</p><ul><li><p>A working governance checklist document</p></li><li><p>A Claude prompt you can reuse to generate project-specific checklists</p></li><li><p>A review workflow you can run in Claude.ai</p></li></ul><p>Let&#8217;s go.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/subscribe"><span>Subscribe now</span></a></p><div><hr></div><h1>What We&#8217;re Building?</h1><p>We&#8217;re going to use Claude.ai to create a governance checklist generator. You&#8217;ll give Claude a description of any AI project, and it will produce a tailored checklist covering accountability, transparency, fairness, privacy, safety, and human oversight, the six pillars we covered in the free article.</p><p>You&#8217;ll also save a reusable prompt so you can regenerate this for any future project in seconds.</p><p><strong>Tools you need:</strong></p><ul><li><p>A free or paid Claude.ai account</p></li><li><p>A text editor (Notepad, Word, Google Docs, anything works)</p></li><li><p>20 minutes</p></li></ul><div><hr></div><h2>Step 1: Open Claude.ai and Start a New Chat</h2><p>Go to <a href="https://claude.ai/">claude.ai</a> and log in. Click the &#8220;New Chat&#8221; button in the top left corner.</p><p>You should see a clean, empty chat window. This is where we&#8217;ll work.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Data Science In Action is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2>Step 2: Give Claude the Context for Your Project</h2><p>Before we generate the checklist, we need to tell Claude what kind of AI project we&#8217;re reviewing. The more specific you are, the more useful the output will be.</p><p>For this tutorial, let&#8217;s use a realistic example: a simple Claude-powered customer service chatbot that answers questions about a company&#8217;s return policy.</p><p>Paste this into the chat exactly as written:</p>
      <p>
          <a href="/__u/datascienceinaction.substack.com/p/tutorial-how-to-build-a-personal">
              Read more
          </a>
      </p>
   ]]></content:encoded></item><item><title><![CDATA[What Is AI Governance?]]></title><description><![CDATA[Why You Should Care Even If You&#8217;re Not a Policy Person?]]></description><link>https://datascienceinaction.substack.com/p/what-is-ai-governance</link><guid isPermaLink="false">https://datascienceinaction.substack.com/p/what-is-ai-governance</guid><dc:creator><![CDATA[Engy Fouda]]></dc:creator><pubDate>Tue, 14 Jul 2026 17:45:16 GMT</pubDate><enclosure url="https://substackcdn.com/image/youtube/w_728,c_limit/9w66NvmrlJ0" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>If you&#8217;ve been following AI news lately, you&#8217;ve probably seen &#8220;AI governance&#8221; pop up in headlines. The EU AI Act. Executive orders. Companies are publishing their &#8220;responsible AI principles.&#8221; It sounds like something for lawyers and regulators, not for someone who&#8217;s just learning data science or building AI tools.</p><p>But here&#8217;s what I&#8217;ve come to realize after working in this space: AI governance is not just a policy topic. It&#8217;s a practical one. And the sooner you understand what it actually means, the better decisions you&#8217;ll make as someone who builds with, uses, or recommends AI systems.</p><p>Let&#8217;s break it down, with no jargon left unexplained.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Data Science In Action is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h1>What AI Governance Actually Means?</h1><p>AI governance is the set of rules, processes, and accountability structures that decide how AI is developed, deployed, and used, and by whom, and for what purposes.</p><p>Think of it like this: imagine a city with no traffic laws. Cars can go wherever they want, as fast as they want. That&#8217;s efficient until it isn&#8217;t. People get hurt. Trust breaks down. Governance is the traffic system: the lights, the speed limits, the lanes, the rules for who has the right of way.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!JIJD!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa27818d5-170d-4485-a3ef-07b93e081e00_1592x997.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!JIJD!, /__u/datascienceinaction.substack.com/w_424, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa27818d5-170d-4485-a3ef-07b93e081e00_1592x997.png 424w, /__u/substackcdn.com/image/fetch/$s_!JIJD!, /__u/datascienceinaction.substack.com/w_848, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa27818d5-170d-4485-a3ef-07b93e081e00_1592x997.png 848w, /__u/substackcdn.com/image/fetch/$s_!JIJD!, /__u/datascienceinaction.substack.com/w_1272, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa27818d5-170d-4485-a3ef-07b93e081e00_1592x997.png 1272w, /__u/substackcdn.com/image/fetch/$s_!JIJD!, /__u/datascienceinaction.substack.com/w_1456, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa27818d5-170d-4485-a3ef-07b93e081e00_1592x997.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!JIJD!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa27818d5-170d-4485-a3ef-07b93e081e00_1592x997.png" width="1456" height="912" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a27818d5-170d-4485-a3ef-07b93e081e00_1592x997.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:912,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2284120,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://datascienceinaction.substack.com/i/205648542?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa27818d5-170d-4485-a3ef-07b93e081e00_1592x997.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!JIJD!, /__u/datascienceinaction.substack.com/w_424, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa27818d5-170d-4485-a3ef-07b93e081e00_1592x997.png 424w, /__u/substackcdn.com/image/fetch/$s_!JIJD!, /__u/datascienceinaction.substack.com/w_848, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa27818d5-170d-4485-a3ef-07b93e081e00_1592x997.png 848w, /__u/substackcdn.com/image/fetch/$s_!JIJD!, /__u/datascienceinaction.substack.com/w_1272, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa27818d5-170d-4485-a3ef-07b93e081e00_1592x997.png 1272w, /__u/substackcdn.com/image/fetch/$s_!JIJD!, /__u/datascienceinaction.substack.com/w_1456, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa27818d5-170d-4485-a3ef-07b93e081e00_1592x997.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>AI governance works the same way. It asks questions like:</p><ul><li><p>Who is responsible when an AI system makes a harmful decision?</p></li><li><p>What data is allowed to train a model, and what&#8217;s off limits?</p></li><li><p>How do we make sure an AI system treats all users fairly, regardless of their background?</p></li><li><p>How do we audit whether an AI system is doing what we say it&#8217;s doing?</p></li><li><p>What happens when something goes wrong?</p></li></ul><p>These aren&#8217;t abstract philosophical questions. They&#8217;re design decisions that affect real people.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/subscribe"><span>Subscribe now</span></a></p><div><hr></div><h1>Why This Is Relevant to You Right Now?</h1><p>You might be thinking: I&#8217;m just learning Python. Or I&#8217;m just using Claude for work. Why does governance apply to me?</p><p>It applies because AI is no longer something that only researchers and tech companies build. You are building with it. When you design a prompt that filters job candidates, or build an AI assistant that answers customer questions, or automate a reporting workflow that your manager trusts, you are making governance decisions whether you realize it or not.</p><div class="pullquote"><p>What data are you feeding the model? Who sees the outputs? What happens if the model gets it wrong? Those questions don&#8217;t disappear just because you didn&#8217;t write them down. <strong>Governance is the practice of making decisions intentionally, not by accident.</strong></p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/p/what-is-ai-governance?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/p/what-is-ai-governance?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share</span></a></p><div><hr></div><h1>The Key Pillars of AI Governance</h1><p>Let&#8217;s walk through the main things that AI governance actually covers. Think of these as the building blocks.</p><p><strong>1. Accountability</strong></p><p>Someone has to be responsible when an AI system fails. </p><p>Governance frameworks define who that is: the developer who built the model? The company that deployed it? The user who ran it? </p><p>Clear accountability means someone is watching and someone answers for the outcomes.</p><p>I always show my machine learning students this video to provoke them to think about the implications of what their models are, to demonstrate what AI governance is, and how crucial it is to be cautious with contracts&#8217; liability terms: </p><div id="youtube2-9w66NvmrlJ0" class="youtube-wrap" data-attrs="{&quot;videoId&quot;:&quot;9w66NvmrlJ0&quot;,&quot;startTime&quot;:&quot;52s&quot;,&quot;endTime&quot;:null}" data-component-name="Youtube2ToDOM"><div class="youtube-inner"><iframe src="https://www.youtube-nocookie.com/embed/9w66NvmrlJ0?start=52s&amp;rel=0&amp;autoplay=0&amp;showinfo=0&amp;enablejsapi=0" frameborder="0" loading="lazy" gesture="media" allow="autoplay; fullscreen" allowautoplay="true" allowfullscreen="true" width="728" height="409"></iframe></div></div><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/p/what-is-ai-governance?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading Data Science In Action! This post is public, so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/p/what-is-ai-governance?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/p/what-is-ai-governance?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share</span></a></p></div><p><strong>2. Transparency</strong></p><p>Can you explain how the AI reached its decision? </p><p>A model that says &#8220;loan denied&#8221; without any explanation is very different from one that says &#8220;loan denied because the income-to-debt ratio exceeded our threshold.&#8221; Transparency is about making AI decisions understandable and auditable.</p><p>I use this exact business problem to teach my students how some machine learning models are easier to visualize their decisions than others, and to communicate the business decision. For this example, I demonstrate how decision tree and random forest models are easier to explain than others.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share&quot;,&quot;text&quot;:&quot;Share Data Science In Action&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share Data Science In Action</span></a></p><p><strong>3. Fairness</strong></p><p>Does the system treat different groups of people equitably?</p><p>An AI system trained on biased data will produce biased outputs, even if no one intended that. Fairness in governance means actively testing for and correcting those disparities.</p><p>For this concept, I usually use the Students for Fair Admissions v. Harvard legal case. https://en.wikipedia.org/wiki/Students_for_Fair_Admissions_v._Harvard</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/leaderboard?&amp;utm_source=post&quot;,&quot;text&quot;:&quot;Refer a friend&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/leaderboard?&amp;utm_source=post"><span>Refer a friend</span></a></p><p><strong>4. Privacy</strong></p><p>What data does the model use, and is it protected appropriately? </p><p>This pillar covers everything from GDPR compliance to ensuring a customer&#8217;s private health records aren&#8217;t inadvertently leaked into model training data.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/p/what-is-ai-governance/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/p/what-is-ai-governance/comments"><span>Leave a comment</span></a></p><p><strong>5. Safety and Reliability</strong></p><p>Does the system behave safely, especially in edge cases? </p><p>Governance here means defining what happens when the model is uncertain, when inputs are unusual, or when the stakes are high.</p><div class="directMessage button" data-attrs="{&quot;userId&quot;:43386542,&quot;userName&quot;:&quot;Engy Fouda&quot;,&quot;canDm&quot;:null,&quot;dmUpgradeOptions&quot;:null,&quot;isEditorNode&quot;:true}" data-component-name="DirectMessageToDOM"></div><p><strong>6. Human Oversight</strong></p><p>Who can override, correct, or shut down the AI system? </p><p>Governance ensures there&#8217;s always a human in the loop for decisions that matter, especially high-stakes ones.</p><div class="community-chat" data-attrs="{&quot;url&quot;:&quot;https://open.substack.com/pub/datascienceinaction/chat?utm_source=chat_embed&quot;,&quot;subdomain&quot;:&quot;datascienceinaction&quot;,&quot;pub&quot;:{&quot;id&quot;:7180606,&quot;name&quot;:&quot;Data Science In Action&quot;,&quot;author_name&quot;:&quot;Engy Fouda&quot;,&quot;author_photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!CZ7q!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c77e192-01d1-4d3a-b2ff-6e114eecb5d4_1713x1713.jpeg&quot;}}" data-component-name="CommunityChatRenderPlaceholder"></div><div><hr></div><h1>Wait, Is This the Same as Guardrails? Or Harnesses? Or Safety?</h1><p>This is where beginners get confused, and honestly, the terminology doesn&#8217;t help. Let me sort it out for you.</p><p>These terms often get used interchangeably, but they live at very different levels of your stack.</p><p><strong>Guardrails</strong> are the technical controls you build around a model to constrain its behavior. They&#8217;re code-level interventions: input filters, output validators, toxicity detectors, prompt injection blockers. If the model starts generating something harmful, a guardrail catches it and stops it, redirects it, or flags it. </p><p>I wrote a full breakdown of guardrails in a previous article: if you haven&#8217;t read it yet, start there before going deeper on governance: <a href="/__u/datascienceinaction.substack.com/p/a-practical-guide-to-ai-guardrails">A Practical Guide to AI Guardrails</a>.</p><div class="digest-post-embed" data-attrs="{&quot;nodeId&quot;:&quot;7b962ab9-2169-4dde-a070-6f8dfdab72da&quot;,&quot;caption&quot;:&quot;If you&#8217;ve been building with LLMs for more than five minutes, you&#8217;ve already discovered the uncomfortable truth: these models are powerful, but they&#8217;re also unpredictable. They hallucinate. They overshare. They make things up with confidence. They sometimes behave like a brilliant intern who skipped their morning coffee.&quot;,&quot;cta&quot;:null,&quot;showBylines&quot;:true,&quot;showDescription&quot;:true,&quot;showImage&quot;:true,&quot;size&quot;:&quot;md&quot;,&quot;isEditorNode&quot;:true,&quot;title&quot;:&quot;A Practical Guide to AI Guardrails&quot;,&quot;publishedBylines&quot;:[{&quot;id&quot;:43386542,&quot;name&quot;:&quot;Engy Fouda&quot;,&quot;bio&quot;:&quot;AI Architect, Adjunct Lecturer, Freelance SAS, Docker, Kubernetes, Python, Technical Writing, Data Science, &amp; Machine Learning Instructor, Best-Selling Author of 9 Books, Harvard Alumni&quot;,&quot;photo_url&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2c77e192-01d1-4d3a-b2ff-6e114eecb5d4_1713x1713.jpeg&quot;,&quot;is_guest&quot;:false,&quot;bestseller_tier&quot;:null}],&quot;post_date&quot;:&quot;2026-04-09T22:13:19.678Z&quot;,&quot;cover_image&quot;:&quot;https://substackcdn.com/image/fetch/$s_!r6xl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F758578e3-ea39-44b7-8116-edb2c9b7f973_1546x920.png&quot;,&quot;cover_image_alt&quot;:null,&quot;canonical_url&quot;:&quot;https://datascienceinaction.substack.com/p/a-practical-guide-to-ai-guardrails&quot;,&quot;section_name&quot;:null,&quot;video_upload_id&quot;:null,&quot;id&quot;:193710803,&quot;type&quot;:&quot;newsletter&quot;,&quot;reaction_count&quot;:1,&quot;comment_count&quot;:2,&quot;publication_id&quot;:7180606,&quot;publication_name&quot;:&quot;Data Science In Action&quot;,&quot;publication_logo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!TMYq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F096ea207-0f69-4b87-8022-814286c2ed3b_1024x1024.png&quot;,&quot;belowTheFold&quot;:true,&quot;youtube_url&quot;:null,&quot;show_links&quot;:null,&quot;feed_url&quot;:null}"></div><p><strong>Harness</strong> (or sometimes &#8220;evaluation harness&#8221;) refers to the testing and benchmarking infrastructure you use to measure how well a model performs. It&#8217;s your test suite for AI. You run the model through thousands of scenarios and measure accuracy, safety, consistency, and quality. It&#8217;s a quality assurance tool, not a runtime control.</p><p><strong>AI Safety</strong> is the research field that asks: can we build AI systems that reliably do what humans intend, even as they become more capable? It&#8217;s a broader, often more theoretical discipline that governance draws on, but safety research and governance practice are not the same thing.</p><p><strong>AI Governance</strong> sits above all of these. It&#8217;s the framework that decides: what guardrails do we require? Who runs the harness evaluations, and how often? What does &#8220;safe enough to deploy&#8221; actually mean for our organization? Governance is the policy and process layer. The others are the tools that governance directs.</p><p>A quick way to remember the difference:</p><ul><li><p>Guardrails: the fence on the road</p></li><li><p>Harness: the test drive before launch</p></li><li><p>Safety research: the science of how to build better roads</p></li><li><p>Governance: the law that decides where roads can go, who can drive them, and what happens after an accident</p></li></ul><p>You need all of them. But they are not the same thing.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?&amp;gift=true&quot;,&quot;text&quot;:&quot;Give a gift subscription&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/subscribe?&amp;gift=true"><span>Give a gift subscription</span></a></p><div><hr></div><h1>What Good AI Governance Looks Like in Practice</h1><p>Governance isn&#8217;t just a document on a shelf. When it&#8217;s actually working, it shows up in concrete ways:</p><ul><li><p>A company publishes its AI use policy and updates it when the technology changes</p></li><li><p>A team runs regular bias audits on their models before shipping updates</p></li><li><p>There&#8217;s a clear escalation path when a user reports that the AI behaved unexpectedly</p></li><li><p>AI outputs in high-stakes contexts (medical, financial, legal) always have a human review step</p></li><li><p>There&#8217;s a log of which version of a model made which decision, so that you can trace back errors</p></li></ul><p>None of that happens automatically. It has to be designed, resourced, and enforced.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/subscribe"><span>Subscribe now</span></a></p><div><hr></div><h1>Where to Start as a Beginner?</h1><p>You don&#8217;t need to read 400 pages of the EU AI Act to start thinking about governance. Here are three practical habits that will make you a more responsible AI practitioner from day one:</p><ol><li><p><strong>Document your assumptions.</strong> When you build a prompt or a workflow, write down what you assume the model will and won&#8217;t do. That documentation is the beginning of accountability.<br><br>I learned the importance of documentation the hard way. I have plenty of examples from my and my friends&#8217; experiences about that. I can&#8217;t emphasize the importance of documentation enough. I always say that I&#8217;m a documentation fanatic because documentation can literally save you from prison! </p></li></ol><div class="pullquote"><p>Documentation can save your life from prison! Don&#8217;t neglect it!</p></div><ol><li><p><strong>Test your outputs with edge cases.</strong> Don&#8217;t just check if the happy path works. What happens when someone inputs something unexpected? What happens when the data is missing or wrong?</p></li><li><p><strong>Know who the AI decisions affect.</strong> Before deploying any AI tool, ask yourself: whose life or work does this touch? And what&#8217;s the worst case if it gets it wrong?</p></li></ol><p>Governance starts small. It starts with you asking the right questions before you ship.</p><div><hr></div><p>In this week's paid tutorial, I walk you through, step by step, how to set up a simple AI governance checklist for your own AI projects using Claude. You&#8217;ll end up with a reusable template you can apply to anything you build.</p><p>If you want the full tutorial, upgrade to a paid subscription below.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/subscribe"><span>Subscribe now</span></a></p><p>#AIGovernance #DataScience #ResponsibleAI #BeginnerFriendly #DataScienceInAction</p>]]></content:encoded></item><item><title><![CDATA[[Tutorial] API vs MCP]]></title><description><![CDATA[Currency Converter Python project via API vs via MCP in a step&#8209;by&#8209;step tutorial to show the difference]]></description><link>https://datascienceinaction.substack.com/p/tutorial-api-vs-msp</link><guid isPermaLink="false">https://datascienceinaction.substack.com/p/tutorial-api-vs-msp</guid><dc:creator><![CDATA[Engy Fouda]]></dc:creator><pubDate>Mon, 13 Jul 2026 20:49:23 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!byF4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07ac4e1f-fa59-40ca-a07a-4197378497e4_1914x991.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h1>What is the difference between API and MCP?</h1><p>MCP and APIs both let software interact with other systems, but they serve very different purposes: </p><ul><li><p>APIs are built for developers </p></li><li><p>MCP is built for AI models. </p></li></ul><p>MCP exists because AI models cannot reliably use APIs on their own.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Data Science In Action is a reader-supported publication. To receive new posts and support my work, consider becoming a free or paid subscriber.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><h2>API (Application Programming Interface)</h2><ul><li><p>A set of rules that lets <strong>s</strong>oftware talk to software.</p></li><li><p>Designed for developers to request data or trigger actions.</p></li><li><p>Requires explicit coding: endpoints, authentication, error handling, etc.</p></li><li><p>Example:</p></li></ul><pre><code><code>GET https://api.github.com/users/username </code></code></pre><p>This returns structured JSON.</p><h2>MCP (Model Context Protocol)</h2><ul><li><p>A protocol designed so AI models can safely interact with tools, data, and systems.</p></li><li><p>AI models cannot make real network requests or handle tokens, headers, or API formats.</p></li><li><p>MCP exposes &#8220;tools&#8221; with schemas that define the model&#8217;s inputs and outputs.</p></li><li><p>Acts as a bridge between an AI model and the real world.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!JtAS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80d88f6d-7072-46c7-bdc5-3101d3f2213b_1607x912.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!JtAS!, /__u/datascienceinaction.substack.com/w_424, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80d88f6d-7072-46c7-bdc5-3101d3f2213b_1607x912.png 424w, /__u/substackcdn.com/image/fetch/$s_!JtAS!, /__u/datascienceinaction.substack.com/w_848, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80d88f6d-7072-46c7-bdc5-3101d3f2213b_1607x912.png 848w, /__u/substackcdn.com/image/fetch/$s_!JtAS!, /__u/datascienceinaction.substack.com/w_1272, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80d88f6d-7072-46c7-bdc5-3101d3f2213b_1607x912.png 1272w, /__u/substackcdn.com/image/fetch/$s_!JtAS!, /__u/datascienceinaction.substack.com/w_1456, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80d88f6d-7072-46c7-bdc5-3101d3f2213b_1607x912.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!JtAS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80d88f6d-7072-46c7-bdc5-3101d3f2213b_1607x912.png" width="1456" height="826" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/80d88f6d-7072-46c7-bdc5-3101d3f2213b_1607x912.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:826,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2021715,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://datascienceinaction.substack.com/i/206872348?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80d88f6d-7072-46c7-bdc5-3101d3f2213b_1607x912.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="/__u/substackcdn.com/image/fetch/$s_!JtAS!, /__u/datascienceinaction.substack.com/w_424, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80d88f6d-7072-46c7-bdc5-3101d3f2213b_1607x912.png 424w, /__u/substackcdn.com/image/fetch/$s_!JtAS!, /__u/datascienceinaction.substack.com/w_848, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80d88f6d-7072-46c7-bdc5-3101d3f2213b_1607x912.png 848w, /__u/substackcdn.com/image/fetch/$s_!JtAS!, /__u/datascienceinaction.substack.com/w_1272, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80d88f6d-7072-46c7-bdc5-3101d3f2213b_1607x912.png 1272w, /__u/substackcdn.com/image/fetch/$s_!JtAS!, /__u/datascienceinaction.substack.com/w_1456, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F80d88f6d-7072-46c7-bdc5-3101d3f2213b_1607x912.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/subscribe"><span>Subscribe now</span></a></p><div><hr></div><h2><strong>When to Use Which</strong></h2><h3>Use APIs when:</h3><ul><li><p>You&#8217;re building software integrations</p></li><li><p>You need predictable, stable, repeatable workflows</p></li><li><p>A human developer is writing the logic</p></li></ul><h3>Use MCP when:</h3><ul><li><p>You want an AI model to interact with your systems</p></li><li><p>You need dynamic, model-driven workflows</p></li><li><p>You want strict control over what the model can do</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share&quot;,&quot;text&quot;:&quot;Share Data Science In Action&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share Data Science In Action</span></a></p></li></ul><div><hr></div><h1><strong>PROJECT: Currency Converter</strong></h1><p>Let&#8217;s build a clean, real&#8209;world example, perfect for learning both workflows, a currency conversion project:</p><ol><li><p><strong>Using a normal API key in Python</strong></p></li><li><p><strong>Wrapping the same functionality in an MCP server</strong></p></li></ol><div><hr></div><p>We&#8217;ll build:</p><ul><li><p><strong>Part A:</strong> A Python script that uses an API key to convert USD &#8594; EUR</p></li><li><p><strong>Part B:</strong> An MCP server that exposes a tool called <code>convertCurrency.</code> So an AI model can do the same conversion safely</p></li></ul><p>Everything is step&#8209;by&#8209;step and runnable.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/leaderboard?&amp;utm_source=post&quot;,&quot;text&quot;:&quot;Refer a friend&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/leaderboard?&amp;utm_source=post"><span>Refer a friend</span></a></p><div><hr></div><h1>PART 1: Using a Currency API Directly</h1><p>We&#8217;ll use ExchangeRate&#8209;API, which has a free tier and simple keys. </p><div><hr></div><h2>Step 1.1: Create an account and get your API key</h2><ol><li><p>Go to the ExchangeRate&#8209;API website</p></li><li><p>Click <strong>Sign Up</strong></p></li><li><p>Create an account</p></li><li><p>Go to your <strong>Dashboard &#8594; API Keys</strong></p></li><li><p>Copy your key</p></li></ol><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!byF4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07ac4e1f-fa59-40ca-a07a-4197378497e4_1914x991.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!byF4!, /__u/datascienceinaction.substack.com/w_424, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07ac4e1f-fa59-40ca-a07a-4197378497e4_1914x991.png 424w, /__u/substackcdn.com/image/fetch/$s_!byF4!, /__u/datascienceinaction.substack.com/w_848, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07ac4e1f-fa59-40ca-a07a-4197378497e4_1914x991.png 848w, /__u/substackcdn.com/image/fetch/$s_!byF4!, /__u/datascienceinaction.substack.com/w_1272, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07ac4e1f-fa59-40ca-a07a-4197378497e4_1914x991.png 1272w, /__u/substackcdn.com/image/fetch/$s_!byF4!, /__u/datascienceinaction.substack.com/w_1456, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07ac4e1f-fa59-40ca-a07a-4197378497e4_1914x991.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!byF4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07ac4e1f-fa59-40ca-a07a-4197378497e4_1914x991.png" width="1456" height="754" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/07ac4e1f-fa59-40ca-a07a-4197378497e4_1914x991.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:754,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:284101,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://datascienceinaction.substack.com/i/182915526?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07ac4e1f-fa59-40ca-a07a-4197378497e4_1914x991.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!byF4!, /__u/datascienceinaction.substack.com/w_424, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07ac4e1f-fa59-40ca-a07a-4197378497e4_1914x991.png 424w, /__u/substackcdn.com/image/fetch/$s_!byF4!, /__u/datascienceinaction.substack.com/w_848, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07ac4e1f-fa59-40ca-a07a-4197378497e4_1914x991.png 848w, /__u/substackcdn.com/image/fetch/$s_!byF4!, /__u/datascienceinaction.substack.com/w_1272, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07ac4e1f-fa59-40ca-a07a-4197378497e4_1914x991.png 1272w, /__u/substackcdn.com/image/fetch/$s_!byF4!, /__u/datascienceinaction.substack.com/w_1456, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F07ac4e1f-fa59-40ca-a07a-4197378497e4_1914x991.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/p/tutorial-api-vs-msp?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/p/tutorial-api-vs-msp?utm_source=substack&amp;utm_medium=email&amp;utm_content=share&amp;action=share"><span>Share</span></a></p><div><hr></div><h2>Step 1.2: Install Python dependencies</h2><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;1c37ffe5-f33c-497c-8141-07545f9004d4&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">pip install requests</code></pre></div><div><hr></div><h2>Step 1.3: Create a Python script</h2><p>Create a new Python notebook and paste in the following code:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;b97465e1-4657-406c-a561-8b7fd7c16432&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">import requests

API_KEY = "YOUR_EXCHANGE_RATE_API_KEY"

def convert_currency(amount, from_currency, to_currency):
    url = f"https://v6.exchangerate-api.com/v6/{API_KEY}/latest/{from_currency}"

    response = requests.get(url)
    response.raise_for_status()

    data = response.json()
    rate = data["conversion_rates"][to_currency]

    return amount * rate

if __name__ == "__main__":
    result = convert_currency(100, "USD", "EUR")
    print(f"100 USD is {result:.2f} EUR")</code></pre></div><p>After you run it, here is the output for the time of writing this article:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!Sa76!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0f1d19d-8f8a-435c-b4f2-e3303417296c_395x65.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!Sa76!, /__u/datascienceinaction.substack.com/w_424, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0f1d19d-8f8a-435c-b4f2-e3303417296c_395x65.png 424w, /__u/substackcdn.com/image/fetch/$s_!Sa76!, /__u/datascienceinaction.substack.com/w_848, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0f1d19d-8f8a-435c-b4f2-e3303417296c_395x65.png 848w, /__u/substackcdn.com/image/fetch/$s_!Sa76!, /__u/datascienceinaction.substack.com/w_1272, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0f1d19d-8f8a-435c-b4f2-e3303417296c_395x65.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Sa76!, /__u/datascienceinaction.substack.com/w_1456, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0f1d19d-8f8a-435c-b4f2-e3303417296c_395x65.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!Sa76!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0f1d19d-8f8a-435c-b4f2-e3303417296c_395x65.png" width="395" height="65" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b0f1d19d-8f8a-435c-b4f2-e3303417296c_395x65.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:65,&quot;width&quot;:395,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1507,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://datascienceinaction.substack.com/i/182915526?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0f1d19d-8f8a-435c-b4f2-e3303417296c_395x65.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!Sa76!, /__u/datascienceinaction.substack.com/w_424, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0f1d19d-8f8a-435c-b4f2-e3303417296c_395x65.png 424w, /__u/substackcdn.com/image/fetch/$s_!Sa76!, /__u/datascienceinaction.substack.com/w_848, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0f1d19d-8f8a-435c-b4f2-e3303417296c_395x65.png 848w, /__u/substackcdn.com/image/fetch/$s_!Sa76!, /__u/datascienceinaction.substack.com/w_1272, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0f1d19d-8f8a-435c-b4f2-e3303417296c_395x65.png 1272w, /__u/substackcdn.com/image/fetch/$s_!Sa76!, /__u/datascienceinaction.substack.com/w_1456, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb0f1d19d-8f8a-435c-b4f2-e3303417296c_395x65.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><div><hr></div><h1>PART 2: Using MCP </h1><p>Now, we&#8217;ll expose the same conversion logic as an MCP tool called <code>convertCurrency</code>.</p><p>This is the workflow where:</p><ul><li><p>The model calls the tool</p></li><li><p>The MCP server calls the real API</p></li><li><p>The API key stays hidden</p></li></ul><p>For this example, I&#8217;ll use www.kaggle.com to avoid the hassle of installing Python for anyone who doesn&#8217;t have it installed on their machines. I always vouch for using Kaggle to my newbie students because it is more than an online Python and R playground. It is a community offering free learning courses and cloud sandboxes, another way to build your portfolio beyond GitHub to demonstrate your experience with real-world data and projects, and another way, beyond LinkedIn, to build your networking in data science and machine learning online. Moreover, you can use it as a side gig and generate some money by competing.  </p><div class="pullquote"><p>The code explanation is below the code steps. Continue Reading :)</p></div><div class="community-chat" data-attrs="{&quot;url&quot;:&quot;https://open.substack.com/pub/datascienceinaction/chat?utm_source=chat_embed&quot;,&quot;subdomain&quot;:&quot;datascienceinaction&quot;,&quot;pub&quot;:{&quot;id&quot;:7180606,&quot;name&quot;:&quot;Data Science In Action&quot;,&quot;author_name&quot;:&quot;Engy Fouda&quot;,&quot;author_photo_url&quot;:&quot;https://substackcdn.com/image/fetch/$s_!CZ7q!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c77e192-01d1-4d3a-b2ff-6e114eecb5d4_1713x1713.jpeg&quot;}}" data-component-name="CommunityChatRenderPlaceholder"></div><div><hr></div><h2>Step 2.1: Install the MCP server library </h2><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;ac701900-d447-499c-9448-7aee0879e110&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">pip install mcp-server requests</code></pre></div><p>If you are using Kaggle notebooks, add an exclamation mark at the beginning, as follows:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;ad2fadb9-e768-4530-b9fe-54eb19e6b935&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">!pip install mcp-server requests</code></pre></div><p>The output is as follows:</p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!D7iR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7092af89-fb61-4ef2-8f49-0290f2306178_3787x1834.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!D7iR!, /__u/datascienceinaction.substack.com/w_424, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7092af89-fb61-4ef2-8f49-0290f2306178_3787x1834.png 424w, /__u/substackcdn.com/image/fetch/$s_!D7iR!, /__u/datascienceinaction.substack.com/w_848, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7092af89-fb61-4ef2-8f49-0290f2306178_3787x1834.png 848w, /__u/substackcdn.com/image/fetch/$s_!D7iR!, /__u/datascienceinaction.substack.com/w_1272, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7092af89-fb61-4ef2-8f49-0290f2306178_3787x1834.png 1272w, /__u/substackcdn.com/image/fetch/$s_!D7iR!, /__u/datascienceinaction.substack.com/w_1456, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7092af89-fb61-4ef2-8f49-0290f2306178_3787x1834.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!D7iR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7092af89-fb61-4ef2-8f49-0290f2306178_3787x1834.png" width="1456" height="705" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7092af89-fb61-4ef2-8f49-0290f2306178_3787x1834.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:705,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:293577,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://datascienceinaction.substack.com/i/182915526?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7092af89-fb61-4ef2-8f49-0290f2306178_3787x1834.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!D7iR!, /__u/datascienceinaction.substack.com/w_424, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7092af89-fb61-4ef2-8f49-0290f2306178_3787x1834.png 424w, /__u/substackcdn.com/image/fetch/$s_!D7iR!, /__u/datascienceinaction.substack.com/w_848, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7092af89-fb61-4ef2-8f49-0290f2306178_3787x1834.png 848w, /__u/substackcdn.com/image/fetch/$s_!D7iR!, /__u/datascienceinaction.substack.com/w_1272, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7092af89-fb61-4ef2-8f49-0290f2306178_3787x1834.png 1272w, /__u/substackcdn.com/image/fetch/$s_!D7iR!, /__u/datascienceinaction.substack.com/w_1456, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7092af89-fb61-4ef2-8f49-0290f2306178_3787x1834.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://datascienceinaction.substack.com/p/tutorial-api-vs-msp/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/datascienceinaction.substack.com/p/tutorial-api-vs-msp/comments"><span>Leave a comment</span></a></p><div><hr></div><h2>Step 2.2: Write the MCP server</h2><p>Paste this code after substituting the <code>EXCHANGE_RATE_API_KEY</code> that is written in the code with the one you generated in step 1.1.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;python&quot;,&quot;nodeId&quot;:&quot;3e158177-68de-4765-ba95-10b40dc47701&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-python">import os
import requests
from mcp.server.fastmcp import FastMCP

# Set your Exchange Rate API key (https://www.exchangerate-api.com/)
#substitute here with your API Key
os.environ["EXCHANGE_RATE_API_KEY"] = "EXCHANGE_RATE_API_KEY"
API_KEY = os.getenv("EXCHANGE_RATE_API_KEY")

# Create the MCP server
server = FastMCP("currency-converter")

# Register the tool using the FastMCP decorator (this is the modern MCP SDK API)
@server.tool()
def convert_currency(amount: float, from_currency: str, to_currency: str) -&gt; dict:
    """Convert an amount from one currency to another using live exchange rates."""
    url = f"https://v6.exchangerate-api.com/v6/{API_KEY}/latest/{from_currency}"
    response = requests.get(url)
    response.raise_for_status()
    data = response.json()
    rate = data["conversion_rates"][to_currency]
    return {
        "amount": amount,
        "from": from_currency,
        "to": to_currency,
        "converted_amount": amount * rate,
        "rate": rate
    }

# Test the tool directly (Kaggle-friendly - no need to run the full MCP server event loop)
result = convert_currency(amount=100, from_currency="USD", to_currency="EUR")
result
</code></pre></div><div class="directMessage button" data-attrs="{&quot;userId&quot;:43386542,&quot;userName&quot;:&quot;Engy Fouda&quot;,&quot;canDm&quot;:null,&quot;dmUpgradeOptions&quot;:null,&quot;isEditorNode&quot;:true}" data-component-name="DirectMessageToDOM"></div><div><hr></div><h2>Step 2.3 &#8212; What the AI model sees</h2><p>The model sees only the tool interface:</p><pre><code><code>{
  "name": "convertCurrency",
  "description": "Convert an amount between two currencies",
  "inputSchema": {
    "type": "object",
    "properties": {
      "amount": { "type": "number" },
      "from_currency": { "type": "string" },
      "to_currency": { "type": "string" }
    },
    "required": ["amount", "from_currency", "to_currency"]
  }
}
</code></code></pre><p>When the user says:</p><blockquote><p>Convert 100 USD to JPY</p></blockquote><p>The model calls:</p><pre><code><code>{
  "tool": "convertCurrency",
  "arguments": {
    "amount": 250,
    "from_currency": "USD",
    "to_currency": "JPY"
  }
}
</code></code></pre><p>The MCP server does the real API call and returns structured data.</p><p>The output looks like this:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!6C1s!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F931f83a7-fe85-4fea-9f3f-597604e2d6fa_970x435.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!6C1s!, /__u/datascienceinaction.substack.com/w_424, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F931f83a7-fe85-4fea-9f3f-597604e2d6fa_970x435.png 424w, /__u/substackcdn.com/image/fetch/$s_!6C1s!, /__u/datascienceinaction.substack.com/w_848, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F931f83a7-fe85-4fea-9f3f-597604e2d6fa_970x435.png 848w, /__u/substackcdn.com/image/fetch/$s_!6C1s!, /__u/datascienceinaction.substack.com/w_1272, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F931f83a7-fe85-4fea-9f3f-597604e2d6fa_970x435.png 1272w, /__u/substackcdn.com/image/fetch/$s_!6C1s!, /__u/datascienceinaction.substack.com/w_1456, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F931f83a7-fe85-4fea-9f3f-597604e2d6fa_970x435.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!6C1s!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F931f83a7-fe85-4fea-9f3f-597604e2d6fa_970x435.png" width="970" height="435" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/931f83a7-fe85-4fea-9f3f-597604e2d6fa_970x435.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:435,&quot;width&quot;:970,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:8047,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://datascienceinaction.substack.com/i/182915526?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F931f83a7-fe85-4fea-9f3f-597604e2d6fa_970x435.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!6C1s!, /__u/datascienceinaction.substack.com/w_424, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F931f83a7-fe85-4fea-9f3f-597604e2d6fa_970x435.png 424w, /__u/substackcdn.com/image/fetch/$s_!6C1s!, /__u/datascienceinaction.substack.com/w_848, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F931f83a7-fe85-4fea-9f3f-597604e2d6fa_970x435.png 848w, /__u/substackcdn.com/image/fetch/$s_!6C1s!, /__u/datascienceinaction.substack.com/w_1272, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F931f83a7-fe85-4fea-9f3f-597604e2d6fa_970x435.png 1272w, /__u/substackcdn.com/image/fetch/$s_!6C1s!, /__u/datascienceinaction.substack.com/w_1456, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F931f83a7-fe85-4fea-9f3f-597604e2d6fa_970x435.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div><hr></div><h3>Code Walkthrough for Beginners</h3><p>Let&#8217;s break down what this code is actually doing, piece by piece, so it makes sense even if you have never touched MCP before:</p><ul><li><p>The imports: os and requests do the same job as in Part 1, requests talks to the currency API, and os lets us read the API key from an environment variable. The new piece is &#8220;from mcp.server.fastmcp import FastMCP&#8221;, which imports the class that converts an ordinary Python function into something an AI model can call.</p></li><li><p>Setting the API key: os.environ[&#8220;EXCHANGE_RATE_API_KEY&#8221;] = &#8220;&#8230;&#8221; stores your key as an environment variable, then API_KEY = os.getenv(&#8220;EXCHANGE_RATE_API_KEY&#8221;) reads it back into a normal variable. Keeping the key in a variable like this means you only type it once, and it is the same key you got in Step 1.1.</p></li><li><p>Creating the server: server = FastMCP(&#8220;currency-converter&#8221;) creates the MCP server and gives it a name. Think of this server as the &#8220;middleman&#8221; that will sit between an AI model and your Python code.</p></li><li><p>The @server.tool() decorator: this single line just above the function is what actually turns a normal Python function into an MCP tool. Once decorated, the server automatically shares the function&#8217;s name, its docstring, and its parameter types with any AI model that connects, so the model knows the tool exists and how to use it.</p></li><li><p>The function itself: convert_currency(amount, from_currency, to_currency) works exactly like the plain API version from Part 1. It builds the request URL, calls the API, and reads the exchange rate. The one difference is what it returns: instead of a single number, it returns a dictionary with several fields (amount, from, to, converted_amount, rate), so the model gets back rich, structured data instead of a raw value.</p></li><li><p>The test call at the bottom: result = convert_currency(amount=100, from_currency=&#8221;USD&#8221;, to_currency=&#8221;EUR&#8221;) simply calls the function directly, the same way you would call any Python function. This lets you check that the tool works correctly before ever connecting it to a real AI model or running the full MCP server.</p></li></ul><p>One important thing to note: in this example, we call convert_currency() directly to prove the logic works. In a real deployment, an AI model would never call the Python function itself. Instead, it would send a request to the MCP server, which would run the function on the model&#8217;s behalf, as described in Step 2.3.</p><div><hr></div><h1>Final Comparison</h1><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="/__u/substackcdn.com/image/fetch/$s_!DunG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88af594d-ff8b-49f6-94c4-c682ef324efd_1917x675.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="/__u/substackcdn.com/image/fetch/$s_!DunG!, /__u/datascienceinaction.substack.com/w_424, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88af594d-ff8b-49f6-94c4-c682ef324efd_1917x675.png 424w, /__u/substackcdn.com/image/fetch/$s_!DunG!, /__u/datascienceinaction.substack.com/w_848, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88af594d-ff8b-49f6-94c4-c682ef324efd_1917x675.png 848w, /__u/substackcdn.com/image/fetch/$s_!DunG!, /__u/datascienceinaction.substack.com/w_1272, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88af594d-ff8b-49f6-94c4-c682ef324efd_1917x675.png 1272w, /__u/substackcdn.com/image/fetch/$s_!DunG!, /__u/datascienceinaction.substack.com/w_1456, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_webp, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88af594d-ff8b-49f6-94c4-c682ef324efd_1917x675.png 1456w" sizes="100vw"><img src="/__u/substackcdn.com/image/fetch/$s_!DunG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88af594d-ff8b-49f6-94c4-c682ef324efd_1917x675.png" width="1456" height="513" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/88af594d-ff8b-49f6-94c4-c682ef324efd_1917x675.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:513,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:25575,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://datascienceinaction.substack.com/i/182915526?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88af594d-ff8b-49f6-94c4-c682ef324efd_1917x675.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="/__u/substackcdn.com/image/fetch/$s_!DunG!, /__u/datascienceinaction.substack.com/w_424, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88af594d-ff8b-49f6-94c4-c682ef324efd_1917x675.png 424w, /__u/substackcdn.com/image/fetch/$s_!DunG!, /__u/datascienceinaction.substack.com/w_848, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88af594d-ff8b-49f6-94c4-c682ef324efd_1917x675.png 848w, /__u/substackcdn.com/image/fetch/$s_!DunG!, /__u/datascienceinaction.substack.com/w_1272, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88af594d-ff8b-49f6-94c4-c682ef324efd_1917x675.png 1272w, /__u/substackcdn.com/image/fetch/$s_!DunG!, /__u/datascienceinaction.substack.com/w_1456, /__u/datascienceinaction.substack.com/c_limit, /__u/datascienceinaction.substack.com/f_auto, /__u/datascienceinaction.substack.com/q_auto:good, /__u/datascienceinaction.substack.com/fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F88af594d-ff8b-49f6-94c4-c682ef324efd_1917x675.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg aria-hidden="true" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://substack.com/refer/engyfouda?utm_source=substack&amp;utm_context=post&amp;utm_content=206872348&amp;utm_campaign=writer_referral_button&quot;,&quot;text&quot;:&quot;Start a Substack&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Start writing today. Use the button below to create a Substack of your own</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://substack.com/refer/engyfouda?utm_source=substack&amp;utm_context=post&amp;utm_content=206872348&amp;utm_campaign=writer_referral_button&quot;,&quot;text&quot;:&quot;Start a Substack&quot;,&quot;hasDynamicSubstitutions&quot;:false}" data-component-name="ButtonCreateButton"><a class="button primary" href="/__u/substack.com/refer/engyfouda?utm_source=substack&amp;utm_context=post&amp;utm_content=206872348&amp;utm_campaign=writer_referral_button"><span>Start a Substack</span></a></p></div><p><br></p>]]></content:encoded></item></channel></rss>