<?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[The Engineer's Digest: Agent Ship]]></title><description><![CDATA[A lightweight framework for quick shipping agents to production]]></description><link>https://harshuljain.substack.com/s/agent-ship</link><image><url>https://substackcdn.com/image/fetch/$s_!Tssn!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F75a21435-8c5b-4975-9db7-20292a727543_1280x1280.png</url><title>The Engineer&apos;s Digest: Agent Ship</title><link>https://harshuljain.substack.com/s/agent-ship</link></image><generator>Substack</generator><lastBuildDate>Tue, 23 Jun 2026 01:47:30 GMT</lastBuildDate><atom:link href="https://harshuljain.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Harshul Jain & Tanya Sah]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[harshuljain@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[harshuljain@substack.com]]></itunes:email><itunes:name><![CDATA[Harshul Jain]]></itunes:name></itunes:owner><itunes:author><![CDATA[Harshul Jain]]></itunes:author><googleplay:owner><![CDATA[harshuljain@substack.com]]></googleplay:owner><googleplay:email><![CDATA[harshuljain@substack.com]]></googleplay:email><googleplay:author><![CDATA[Harshul Jain]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Agentic Design Patterns with AgentShip]]></title><description><![CDATA[Agentic Design Patterns with AgentShip: The Five Patterns You Need to Know]]></description><link>https://harshuljain.substack.com/p/agentic-design-patterns-with-agentship</link><guid isPermaLink="false">https://harshuljain.substack.com/p/agentic-design-patterns-with-agentship</guid><dc:creator><![CDATA[Harshul Jain]]></dc:creator><pubDate>Wed, 28 Jan 2026 13:31:25 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!3UHy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16013d18-c352-472e-8ec8-a96c5aa06cad_1024x559.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Introduction</h2><p><em>Five agents walk into a production environment. Four of them crash. Here&#8217;s why&#8212;and how to build the one that doesn&#8217;t.</em></p><p>You know how AgentShip works under the hood. You&#8217;ve seen the architecture, understood the tradeoffs, and maybe even spun up your first agent. But here&#8217;s the thing: <strong>knowing the tools doesn&#8217;t mean knowing the patterns.</strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3UHy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16013d18-c352-472e-8ec8-a96c5aa06cad_1024x559.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3UHy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16013d18-c352-472e-8ec8-a96c5aa06cad_1024x559.png 424w, https://substackcdn.com/image/fetch/$s_!3UHy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16013d18-c352-472e-8ec8-a96c5aa06cad_1024x559.png 848w, https://substackcdn.com/image/fetch/$s_!3UHy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16013d18-c352-472e-8ec8-a96c5aa06cad_1024x559.png 1272w, https://substackcdn.com/image/fetch/$s_!3UHy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16013d18-c352-472e-8ec8-a96c5aa06cad_1024x559.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3UHy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16013d18-c352-472e-8ec8-a96c5aa06cad_1024x559.png" width="1024" height="559" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/16013d18-c352-472e-8ec8-a96c5aa06cad_1024x559.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:559,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:854703,&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://harshuljain.substack.com/i/186068446?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16013d18-c352-472e-8ec8-a96c5aa06cad_1024x559.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!3UHy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16013d18-c352-472e-8ec8-a96c5aa06cad_1024x559.png 424w, https://substackcdn.com/image/fetch/$s_!3UHy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16013d18-c352-472e-8ec8-a96c5aa06cad_1024x559.png 848w, https://substackcdn.com/image/fetch/$s_!3UHy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16013d18-c352-472e-8ec8-a96c5aa06cad_1024x559.png 1272w, https://substackcdn.com/image/fetch/$s_!3UHy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F16013d18-c352-472e-8ec8-a96c5aa06cad_1024x559.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 role="img" 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><title></title><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>I&#8217;ve spent the last two years building production AI agents from health assistant to internal tooling at Audible. I&#8217;ve shipped agents that worked, and watched agents that crashed spectacularly. Through all of it, I&#8217;ve learned that most agent systems fall into five core patterns.</p><p>Get the pattern right, and your agent just works. Get it wrong, and you&#8217;ll spend weeks debugging why GPT-4 &#8220;forgot&#8221; the conversation or why your tool calls are timing out.</p><p>Let me save you those weeks.</p><h2>The Five Patterns</h2><p>Here&#8217;s the reality: 90% of production agents follow one of these five patterns. Master them, and you can build almost anything.</p><pre><code><code>&#9484;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9488;
&#9474; 1. Single-Shot        &#9474; Fast, stateless &#9474;
&#9474; 2. Conversational     &#9474; Multi-turn chat &#9474;
&#9474; 3. Tool-Calling       &#9474; External actions&#9474;
&#9474; 4. Multi-Agent        &#9474; Orchestration   &#9474;
&#9474; 5. Human-in-the-Loop  &#9474; Approval gates  &#9474;
&#9492;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9496;
</code></code></pre><p>Let&#8217;s break down each one with real code and real lessons.</p><div><hr></div><h2>Pattern 1: Single-Shot Agent</h2><p><strong>The simplest agent that could possibly work.</strong></p><p>Single-shot agents do one thing: take an input, process it, return an output. No memory, no conversation history, no state. Think of them as fancy functions.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!udLB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbd714d8-544c-492a-9ac6-031fe2e96a33_1024x559.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!udLB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbd714d8-544c-492a-9ac6-031fe2e96a33_1024x559.png 424w, https://substackcdn.com/image/fetch/$s_!udLB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbd714d8-544c-492a-9ac6-031fe2e96a33_1024x559.png 848w, https://substackcdn.com/image/fetch/$s_!udLB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbd714d8-544c-492a-9ac6-031fe2e96a33_1024x559.png 1272w, https://substackcdn.com/image/fetch/$s_!udLB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbd714d8-544c-492a-9ac6-031fe2e96a33_1024x559.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!udLB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbd714d8-544c-492a-9ac6-031fe2e96a33_1024x559.png" width="1024" height="559" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bbd714d8-544c-492a-9ac6-031fe2e96a33_1024x559.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:559,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:789421,&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://harshuljain.substack.com/i/186068446?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbd714d8-544c-492a-9ac6-031fe2e96a33_1024x559.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!udLB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbd714d8-544c-492a-9ac6-031fe2e96a33_1024x559.png 424w, https://substackcdn.com/image/fetch/$s_!udLB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbd714d8-544c-492a-9ac6-031fe2e96a33_1024x559.png 848w, https://substackcdn.com/image/fetch/$s_!udLB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbd714d8-544c-492a-9ac6-031fe2e96a33_1024x559.png 1272w, https://substackcdn.com/image/fetch/$s_!udLB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbbd714d8-544c-492a-9ac6-031fe2e96a33_1024x559.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 role="img" 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><title></title><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><h3>When to Use It</h3><ul><li><p>Summarizing documents</p></li><li><p>Classifying text (spam detection, sentiment analysis)</p></li><li><p>Data extraction (parse PDFs, scrape structured data)</p></li><li><p>Batch processing thousands of items</p></li></ul><h3>Real Example: Customer Support Ticket Summarizer</h3><p></p><p>After a customer support conversation, we need to summarize what happened. The agent doesn&#8217;t need to remember previous summaries - each one is independent.</p><p><strong>AgentShip Configuration</strong></p><pre><code><code>agent_name: ticket_summarizer
tags: [support, summarization]
llm_provider_name: openai
llm_model: gpt-4o
temperature: 0.3
execution_engine: adk
streaming_mode: event_based

description: Summarizes customer support conversations

instruction_template: |
  You are a customer support summarization expert.
  
  Summarize the customer conversation in 3 bullet points:
  - Customer issue/question
  - Actions taken
  - Resolution status
  
  Input format:
  - conversation: The full conversation transcript
  
  Output: A concise summary with 3 bullet points

tools: []  # No external tools needed
</code></code></pre><p><strong>Why it works:</strong></p><ul><li><p>Fast: No session lookup overhead</p></li><li><p>Scalable: Stateless means easy horizontal scaling</p></li><li><p>Simple: Fewer things to break</p></li></ul><p><strong>Production lesson:</strong> We process 10,000+ summaries per day. Single-shot agents scale beautifully because there&#8217;s no shared state to coordinate.</p><div><hr></div><h2>Pattern 2: Conversational Agent</h2><p><strong>The pattern that made chatbots possible.</strong></p><p>Conversational agents maintain context across multiple turns. They remember what you said three messages ago and can reference it. This is where sessions become critical.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!b0Y_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fc68086-f632-4bd3-8834-d3f40f8780c6_1024x559.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!b0Y_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fc68086-f632-4bd3-8834-d3f40f8780c6_1024x559.png 424w, https://substackcdn.com/image/fetch/$s_!b0Y_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fc68086-f632-4bd3-8834-d3f40f8780c6_1024x559.png 848w, https://substackcdn.com/image/fetch/$s_!b0Y_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fc68086-f632-4bd3-8834-d3f40f8780c6_1024x559.png 1272w, https://substackcdn.com/image/fetch/$s_!b0Y_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fc68086-f632-4bd3-8834-d3f40f8780c6_1024x559.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!b0Y_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fc68086-f632-4bd3-8834-d3f40f8780c6_1024x559.png" width="1024" height="559" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7fc68086-f632-4bd3-8834-d3f40f8780c6_1024x559.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:559,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:851369,&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://harshuljain.substack.com/i/186068446?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fc68086-f632-4bd3-8834-d3f40f8780c6_1024x559.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!b0Y_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fc68086-f632-4bd3-8834-d3f40f8780c6_1024x559.png 424w, https://substackcdn.com/image/fetch/$s_!b0Y_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fc68086-f632-4bd3-8834-d3f40f8780c6_1024x559.png 848w, https://substackcdn.com/image/fetch/$s_!b0Y_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fc68086-f632-4bd3-8834-d3f40f8780c6_1024x559.png 1272w, https://substackcdn.com/image/fetch/$s_!b0Y_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7fc68086-f632-4bd3-8834-d3f40f8780c6_1024x559.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 role="img" 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><title></title><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><h3>When to Use It</h3><ul><li><p>Chat interfaces (customer support, personal assistants)</p></li><li><p>Progressive disclosure (asking clarifying questions)</p></li><li><p>Contextual recommendations</p></li><li><p>Any multi-turn interaction</p></li></ul><h3>Real Example: E-commerce Shopping Assistant</h3><p>A user might say: <em>&#8220;I&#8217;m looking for a laptop.&#8221;</em> The agent asks follow-up questions about budget, use case, and preferences, remembers the answers, and provides personalized recommendations based on the full conversation.</p><p><strong>AgentShip Configuration</strong></p><pre><code><code>agent_name: shopping_assistant
tags: [ecommerce, shopping, conversational]
llm_provider_name: openai
llm_model: gpt-4o
temperature: 0.7
execution_engine: adk
streaming_mode: event_based

# Enable session management for conversation history
session_enabled: true
session_memory_window: 20  # Keep last 20 messages

description: Personal shopping advisor with conversation memory

instruction_template: |
  You are a friendly shopping assistant helping users find products.
  
  You can:
  - Ask clarifying questions about budget, preferences, use case
  - Remember previous messages in the conversation
  - Provide personalized product recommendations
  
  Be conversational and helpful. Build on what the user has already told you.
  
  Input format:
  - message: User's current message
  - conversation_history: Automatically provided by AgentShip

tools: []  # Could add product search tools here
</code></code></pre><p><strong>Why it works:</strong></p><ul><li><p>Context window management: Keep the last N messages</p></li><li><p>Session isolation: Each user has their own history</p></li><li><p>Natural conversation: Feels like talking to a human</p></li></ul><p><strong>Production lesson:</strong> We learned the hard way that you need to truncate old messages. Our first version tried to load the entire conversation history, it broke when users had 100+ messages. Now we keep the last 20 messages plus a rolling summary of older ones.</p><div><hr></div><h2>Pattern 3: Tool-Calling Agent</h2><p><strong>When your agent needs to do more than talk.</strong></p><p>Tool-calling agents can interact with the outside world: query databases, call APIs, fetch real-time data. This is where agents become truly useful.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hDrm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25460bcc-3cdf-425b-9c28-3995b8069908_1024x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hDrm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25460bcc-3cdf-425b-9c28-3995b8069908_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!hDrm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25460bcc-3cdf-425b-9c28-3995b8069908_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!hDrm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25460bcc-3cdf-425b-9c28-3995b8069908_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!hDrm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25460bcc-3cdf-425b-9c28-3995b8069908_1024x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hDrm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25460bcc-3cdf-425b-9c28-3995b8069908_1024x1024.png" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/25460bcc-3cdf-425b-9c28-3995b8069908_1024x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1337129,&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://harshuljain.substack.com/i/186068446?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25460bcc-3cdf-425b-9c28-3995b8069908_1024x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!hDrm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25460bcc-3cdf-425b-9c28-3995b8069908_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!hDrm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25460bcc-3cdf-425b-9c28-3995b8069908_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!hDrm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25460bcc-3cdf-425b-9c28-3995b8069908_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!hDrm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F25460bcc-3cdf-425b-9c28-3995b8069908_1024x1024.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 role="img" 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><title></title><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><h3>When to Use It</h3><ul><li><p>Database lookups (find customer orders, check inventory)</p></li><li><p>API integrations (weather, stock prices, booking systems)</p></li><li><p>File operations (read, write, search documents)</p></li><li><p>Any action that requires external data</p></li></ul><h3>Real Example: Product Search Agent</h3><p>When a user is looking for products, the agent searches the product database and returns matches based on category, price range, and specifications.</p><p><strong>AgentShip Configuration</strong></p><pre><code><code>agent_name: product_search
tags: [ecommerce, search, tools]
llm_provider_name: openai
llm_model: gpt-4o
temperature: 0.3
execution_engine: adk
streaming_mode: event_based
max_tool_iterations: 5  # Prevent infinite loops

description: Finds products matching user criteria using database tools

instruction_template: |
  You are a product search expert. Use the available tools to find products.
  
  Available tools:
  - search_products: Search by category, price, keywords
  - get_inventory: Check stock availability for a product
  
  Always use tools to get real data. Do not make up product information.
  
  Input format:
  - query: User's product search request
  
  Output: Product recommendations with prices and availability

tools:
  - type: function
    id: search_products
    function_name: search_products_db
    function_class: src.tools.product_tools.ProductSearchTool
    description: Search for products by category, price, and specs
    parameters:
      category:
        type: string
        description: Product category
      max_price:
        type: number
        description: Maximum price filter
      keywords:
        type: string
        description: Search keywords
  
  - type: function
    id: get_inventory
    function_name: get_product_inventory
    function_class: src.tools.product_tools.InventoryTool
    description: Check product availability and stock
    parameters:
      product_id:
        type: string
        description: Product identifier
</code></code></pre><p><strong>Why it works:</strong></p><ul><li><p>Function calling: Modern LLMs know how to use tools</p></li><li><p>Structured output: Tools return JSON, not prose</p></li><li><p>Error handling: If a tool fails, the agent can try another approach</p></li></ul><p><strong>Production lesson:</strong> Always set <code>max_iterations</code>. We had an agent that got stuck in a loop calling the same tool 47 times before we killed it. Now we limit to 5 iterations and return a helpful error message if we hit the limit.</p><div><hr></div><h2>Pattern 4: Multi-Agent Orchestration</h2><p><strong>When one agent isn&#8217;t enough.</strong></p><p>Multi-agent systems split complex tasks across specialized agents. Each agent is an expert in one domain, and an orchestrator coordinates them.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xB0z!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1d21206-bddf-448a-9a97-06a563d4bbf8_1024x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xB0z!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1d21206-bddf-448a-9a97-06a563d4bbf8_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!xB0z!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1d21206-bddf-448a-9a97-06a563d4bbf8_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!xB0z!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1d21206-bddf-448a-9a97-06a563d4bbf8_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!xB0z!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1d21206-bddf-448a-9a97-06a563d4bbf8_1024x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xB0z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1d21206-bddf-448a-9a97-06a563d4bbf8_1024x1024.png" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e1d21206-bddf-448a-9a97-06a563d4bbf8_1024x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1666125,&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://harshuljain.substack.com/i/186068446?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1d21206-bddf-448a-9a97-06a563d4bbf8_1024x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!xB0z!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1d21206-bddf-448a-9a97-06a563d4bbf8_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!xB0z!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1d21206-bddf-448a-9a97-06a563d4bbf8_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!xB0z!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1d21206-bddf-448a-9a97-06a563d4bbf8_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!xB0z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1d21206-bddf-448a-9a97-06a563d4bbf8_1024x1024.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 role="img" 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><title></title><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><h3>When to Use It</h3><ul><li><p>Complex workflows (process documents &#8594; extract data &#8594; validate &#8594; store)</p></li><li><p>Specialized domains (one agent for legal, one for finance, one for medical)</p></li><li><p>Parallel processing (summarize 10 documents simultaneously)</p></li><li><p>Divide and conquer strategies</p></li></ul><h3>Real Example: Invoice Processing Pipeline</h3><p>When a user uploads an invoice, we need to:</p><ol><li><p>Extract text from the PDF</p></li><li><p>Identify the invoice type and vendor</p></li><li><p>Parse line items and amounts</p></li><li><p>Validate against purchase orders</p></li><li><p>Generate a summary for approval</p></li></ol><p>No single agent does all of this well. So we built five specialized agents.</p><p><strong>AgentShip Configuration</strong></p><pre><code><code>agent_name: invoice_processor
tags: [finance, invoice, orchestrator]
llm_provider_name: openai
llm_model: gpt-4o
temperature: 0.2
execution_engine: adk
streaming_mode: event_based

description: Orchestrates invoice processing through specialized sub-agents

instruction_template: |
  You are an invoice processing orchestrator.
  
  Process invoices using these specialized agents in order:
  1. TextExtractor - Extract text from PDF
  2. InvoiceClassifier - Identify invoice type and vendor
  3. LineItemParser - Parse amounts and line items
  4. POValidator - Validate against purchase orders
  5. InvoiceSummarizer - Generate approval summary
  
  Pass outputs from each agent to the next in the pipeline.
  
  Input format:
  - pdf_url: URL to the invoice PDF
  
  Output format (JSON):
  - text: Extracted text
  - invoice_type: Classification result
  - line_items: Parsed items
  - validation: PO validation results
  - summary: Human-readable summary

tools:
  # Order matters: agents are called sequentially
  - type: agent
    id: text_extractor
    agent_class: src.agents.invoice.TextExtractorAgent
  
  - type: agent
    id: invoice_classifier
    agent_class: src.agents.invoice.InvoiceClassifierAgent
  
  - type: agent
    id: line_item_parser
    agent_class: src.agents.invoice.LineItemParserAgent
  
  - type: agent
    id: po_validator
    agent_class: src.agents.invoice.POValidatorAgent
  
  - type: agent
    id: invoice_summarizer
    agent_class: src.agents.invoice.InvoiceSummarizerAgent
</code></code></pre><p><strong>Why it works:</strong></p><ul><li><p>Specialization: Each agent is optimized for one task</p></li><li><p>Modularity: Swap out agents without rewriting the pipeline</p></li><li><p>Debugging: Easy to isolate which step is failing</p></li></ul><p><strong>Production lesson:</strong> Multi-agent systems add latency. Our pipeline takes 8-12 seconds to run all five agents sequentially. We optimized by running steps in parallel where possible (e.g., classification and value extraction can happen simultaneously). This cut our latency in half.</p><div><hr></div><h2>Pattern 5: Human-in-the-Loop Agent</h2><p><strong>For when the stakes are too high to trust AI alone.</strong></p><p>Human-in-the-loop agents pause at critical decision points and wait for human approval before proceeding. This is essential for high-stakes operations.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!K_IW!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc763e1c0-3f73-47cd-a457-ea767957addf_1024x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!K_IW!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc763e1c0-3f73-47cd-a457-ea767957addf_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!K_IW!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc763e1c0-3f73-47cd-a457-ea767957addf_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!K_IW!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc763e1c0-3f73-47cd-a457-ea767957addf_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!K_IW!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc763e1c0-3f73-47cd-a457-ea767957addf_1024x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!K_IW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc763e1c0-3f73-47cd-a457-ea767957addf_1024x1024.png" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c763e1c0-3f73-47cd-a457-ea767957addf_1024x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1319606,&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://harshuljain.substack.com/i/186068446?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc763e1c0-3f73-47cd-a457-ea767957addf_1024x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!K_IW!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc763e1c0-3f73-47cd-a457-ea767957addf_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!K_IW!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc763e1c0-3f73-47cd-a457-ea767957addf_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!K_IW!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc763e1c0-3f73-47cd-a457-ea767957addf_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!K_IW!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc763e1c0-3f73-47cd-a457-ea767957addf_1024x1024.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 role="img" 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><title></title><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><h3>When to Use It</h3><ul><li><p>Financial transactions (approve payments, transfers)</p></li><li><p>Legal/compliance decisions (approve filings, sign documents)</p></li><li><p>Medical actions (prescribe medication, schedule procedures)</p></li><li><p>Learning mode (verify agent behavior before full automation)</p></li></ul><h3>Real Example: Payment Processing Agent</h3><p>When the agent suggests making a payment or transfer, we don&#8217;t do it automatically. We ask the user to confirm first.</p><pre><code><code>agent_name: payment_processor
tags: [finance, payment, approval]
llm_provider_name: openai
llm_model: gpt-4o
temperature: 0.1  # Very deterministic for financial operations
execution_engine: adk
streaming_mode: event_based

# Human-in-the-loop configuration
approval_required: true
approval_timeout: 300  # 5 minutes
approval_actions:
  - send_payment
  - transfer_funds
  - process_refund

description: Processes payments with human approval gates

instruction_template: |
  You are a payment processing agent with strict approval requirements.
  
  For HIGH-STAKES actions (payments, transfers, refunds):
  1. Parse the user's intent
  2. Validate the payment details
  3. Request human approval (automatic gate)
  4. Execute ONLY if approved
  
  For LOW-STAKES actions (check balance, view history):
  - Execute immediately, no approval needed
  
  Input format:
  - message: User's payment request
  
  Output format:
  - For approved payments: Confirmation with transaction ID
  - For denied payments: Acknowledgment without action

tools:
  - type: function
    id: process_payment
    function_name: send_payment
    function_class: src.tools.payment_tools.PaymentTool
    requires_approval: true  # Triggers human approval
    description: Send a payment (requires approval)
    parameters:
      recipient:
        type: string
        description: Payment recipient
      amount:
        type: number
        description: Payment amount
      currency:
        type: string
        description: Currency code (USD, EUR, etc.)
  
  - type: function
    id: check_balance
    function_name: get_balance
    function_class: src.tools.payment_tools.BalanceTool
    requires_approval: false  # No approval needed
    description: Check account balance
    parameters: {}
</code></code></pre><p><strong>Implementation details:</strong></p><ul><li><p>Approval UI: AgentShip provides a simple approval widget</p></li><li><p>State management: The agent&#8217;s state is persisted while waiting</p></li><li><p>Timeout handling: If the user doesn&#8217;t respond in 5 minutes, we cancel</p></li><li><p>Audit trail: Every approval/denial is logged</p></li></ul><p><strong>Production lesson:</strong> Users hate waiting. We originally had a 30-second timeout, which was too short&#8212;users would miss the notification. We increased it to 5 minutes, but also added the ability for agents to <em>suggest</em> actions without blocking, so users can approve asynchronously.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://harshuljain.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="https://harshuljain.substack.com/subscribe?"><span>Subscribe now</span></a></p><h2>Putting It All Together ?</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tbTC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4843701a-2f51-4917-9a43-0c73b4af4cd4_1254x430.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tbTC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4843701a-2f51-4917-9a43-0c73b4af4cd4_1254x430.png 424w, https://substackcdn.com/image/fetch/$s_!tbTC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4843701a-2f51-4917-9a43-0c73b4af4cd4_1254x430.png 848w, https://substackcdn.com/image/fetch/$s_!tbTC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4843701a-2f51-4917-9a43-0c73b4af4cd4_1254x430.png 1272w, https://substackcdn.com/image/fetch/$s_!tbTC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4843701a-2f51-4917-9a43-0c73b4af4cd4_1254x430.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!tbTC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4843701a-2f51-4917-9a43-0c73b4af4cd4_1254x430.png" width="1254" height="430" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4843701a-2f51-4917-9a43-0c73b4af4cd4_1254x430.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:430,&quot;width&quot;:1254,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:94493,&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://harshuljain.substack.com/i/186068446?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4843701a-2f51-4917-9a43-0c73b4af4cd4_1254x430.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!tbTC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4843701a-2f51-4917-9a43-0c73b4af4cd4_1254x430.png 424w, https://substackcdn.com/image/fetch/$s_!tbTC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4843701a-2f51-4917-9a43-0c73b4af4cd4_1254x430.png 848w, https://substackcdn.com/image/fetch/$s_!tbTC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4843701a-2f51-4917-9a43-0c73b4af4cd4_1254x430.png 1272w, https://substackcdn.com/image/fetch/$s_!tbTC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4843701a-2f51-4917-9a43-0c73b4af4cd4_1254x430.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 role="img" 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><title></title><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><strong>Rule of thumb:</strong> Start simple. Most teams over-engineer their first agent. Begin with a single-shot or conversational agent, then add complexity only when needed.</p><h2>What&#8217;s Next?</h2><p>You now know the five patterns that cover 90% of production agent systems. But there&#8217;s a missing piece: <strong>memory.</strong></p><p>Sessions give you short-term memory (the last 20 messages). But what about long-term memory? How do you let your agent remember things from weeks ago without loading every message into the context window?</p><p>That&#8217;s where semantic memory, vector databases, and retrieval strategies come in.</p><p>In the next article, we&#8217;ll dive into <strong>Memory with AgentShip</strong>: short-term vs long-term memory, semantic search, pgvector integration, and the memory patterns that make agents actually intelligent.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!j6m_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafecbce7-bf0b-457d-8865-f144e3d057c9_1024x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!j6m_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafecbce7-bf0b-457d-8865-f144e3d057c9_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!j6m_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafecbce7-bf0b-457d-8865-f144e3d057c9_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!j6m_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafecbce7-bf0b-457d-8865-f144e3d057c9_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!j6m_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafecbce7-bf0b-457d-8865-f144e3d057c9_1024x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!j6m_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafecbce7-bf0b-457d-8865-f144e3d057c9_1024x1024.png" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/afecbce7-bf0b-457d-8865-f144e3d057c9_1024x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1391884,&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://harshuljain.substack.com/i/186068446?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafecbce7-bf0b-457d-8865-f144e3d057c9_1024x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!j6m_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafecbce7-bf0b-457d-8865-f144e3d057c9_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!j6m_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafecbce7-bf0b-457d-8865-f144e3d057c9_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!j6m_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafecbce7-bf0b-457d-8865-f144e3d057c9_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!j6m_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fafecbce7-bf0b-457d-8865-f144e3d057c9_1024x1024.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 role="img" 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><title></title><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://harshuljain.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="https://harshuljain.substack.com/subscribe?"><span>Subscribe now</span></a></p><p></p>]]></content:encoded></item><item><title><![CDATA[AgentShip in 30 Minutes: From Zero to Production Agent]]></title><description><![CDATA[A live walkthrough of building and deploying your first AI agent]]></description><link>https://harshuljain.substack.com/p/agentship-in-30-minutes-from-zero</link><guid isPermaLink="false">https://harshuljain.substack.com/p/agentship-in-30-minutes-from-zero</guid><dc:creator><![CDATA[Harshul Jain]]></dc:creator><pubDate>Sun, 11 Jan 2026 15:10:41 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Vumr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda50afa6-942a-46a5-872f-4c91e596981f_1024x559.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>The Promise</h2><p>Remember the 2-3 week sprints of effort where you tried to get an agent into production? Endless configuration files, the sessions management headaches, the &#8220;we&#8217;ll add observability later&#8221; promises that never get delivered ?</p><p><strong>Here&#8217;s what 30 minutes should look like instead.</strong></p><p>I&#8217;m going to build a conversational AI agent, add observability, and deploy it to production. In real-time. With actual commands, real outputs, and yes, even an error or two (because that&#8217;s how real development works).</p><p>Grab your Morning Herbal Tea (I am a herbal tea person !) and let's ship an agent.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Vumr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda50afa6-942a-46a5-872f-4c91e596981f_1024x559.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Vumr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda50afa6-942a-46a5-872f-4c91e596981f_1024x559.png 424w, https://substackcdn.com/image/fetch/$s_!Vumr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda50afa6-942a-46a5-872f-4c91e596981f_1024x559.png 848w, https://substackcdn.com/image/fetch/$s_!Vumr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda50afa6-942a-46a5-872f-4c91e596981f_1024x559.png 1272w, https://substackcdn.com/image/fetch/$s_!Vumr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda50afa6-942a-46a5-872f-4c91e596981f_1024x559.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Vumr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda50afa6-942a-46a5-872f-4c91e596981f_1024x559.png" width="1024" height="559" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/da50afa6-942a-46a5-872f-4c91e596981f_1024x559.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:559,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:770407,&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://harshuljain.substack.com/i/184200138?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda50afa6-942a-46a5-872f-4c91e596981f_1024x559.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Vumr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda50afa6-942a-46a5-872f-4c91e596981f_1024x559.png 424w, https://substackcdn.com/image/fetch/$s_!Vumr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda50afa6-942a-46a5-872f-4c91e596981f_1024x559.png 848w, https://substackcdn.com/image/fetch/$s_!Vumr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda50afa6-942a-46a5-872f-4c91e596981f_1024x559.png 1272w, https://substackcdn.com/image/fetch/$s_!Vumr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fda50afa6-942a-46a5-872f-4c91e596981f_1024x559.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 role="img" 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><title></title><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><h2>What We&#8217;re Building</h2><p><strong>Goal:</strong> A production-ready conversational agent with:</p><ul><li><p>Google ADK for orchestration</p></li><li><p>GPT model for conversation</p></li><li><p>Session management using Postgres that actually works</p></li><li><p>A Debug UI that helps you debug</p></li><li><p>Opik observability out of the box</p></li><li><p>A real API endpoint you can hit</p></li></ul><p><strong>The twist?</strong> We&#8217;re not writing session logic, API routes, or observability wrappers. AgentShip handles all of that. </p><h2>The Workspace Setup (One time)</h2><p>Although it could take 5 mins to 10 mins to setup your workspace initially, but this effort will be one time and will help you in long run.</p><h4><strong>Clone and Enter</strong></h4><pre><code>$ git clone https://github.com/Agent-Shipping-Kit/agent-ship.git
$ cd agent-ship</code></pre><h4><strong>Environment Setup : </strong></h4><p>Create your <code>.env</code> file:</p><p><strong>Pro tip:</strong> AgentShip uses a .env.example template, just copy and fill:</p><pre><code>$ cp .env.example .env</code></pre><p>Fill out necessary environment variables and ignore others. Codebase handles that.</p><pre><code>OPENAI_API_KEY=your_openai_api_key_here</code></pre><p><strong>Setting up Opik account:</strong></p><p>Setup your opik environment variables by creating your <a href="https://www.comet.com/site/products/opik/?utm_medium=ppc&amp;utm_campaign=Opik-Tier1LLMTerms-ProductLP&amp;utm_term=llm%20monitoring&amp;utm_source=adwords&amp;hsa_ad=745265581869&amp;hsa_kw=llm%20monitoring&amp;hsa_net=adwords&amp;hsa_tgt=kwd-2206710278101&amp;hsa_grp=178821143258&amp;hsa_src=g&amp;hsa_ver=3&amp;hsa_cam=22433334409&amp;hsa_mt=b&amp;hsa_acc=3908332976&amp;gad_source=1&amp;gad_campaignid=22433334409&amp;gbraid=0AAAAACv6e9wIWdKVnayDx2NxbCBq2YtGZ&amp;gclid=Cj0KCQiAsY3LBhCwARIsAF6O6XgW1vIqJobU-rrAV3c-56Tv0ijfDYiQqFN1WjGETz8Ii7nPgHeuTiMaAibHEALw_wcB">opik account here</a>. Create a workspace and a project under the workspace. Once  </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7GfA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa9f355d-fd81-4db4-afcc-76700f7c93e6_1034x351.svg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7GfA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa9f355d-fd81-4db4-afcc-76700f7c93e6_1034x351.svg 424w, https://substackcdn.com/image/fetch/$s_!7GfA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa9f355d-fd81-4db4-afcc-76700f7c93e6_1034x351.svg 848w, https://substackcdn.com/image/fetch/$s_!7GfA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa9f355d-fd81-4db4-afcc-76700f7c93e6_1034x351.svg 1272w, https://substackcdn.com/image/fetch/$s_!7GfA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa9f355d-fd81-4db4-afcc-76700f7c93e6_1034x351.svg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7GfA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa9f355d-fd81-4db4-afcc-76700f7c93e6_1034x351.svg" width="1034" height="351" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fa9f355d-fd81-4db4-afcc-76700f7c93e6_1034x351.svg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:351,&quot;width&quot;:1034,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;GitHub - comet-ml/opik: Debug, evaluate, and monitor your LLM applications,  RAG systems, and agentic workflows with comprehensive tracing, automated  evaluations, and production-ready dashboards.&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="GitHub - comet-ml/opik: Debug, evaluate, and monitor your LLM applications,  RAG systems, and agentic workflows with comprehensive tracing, automated  evaluations, and production-ready dashboards." title="GitHub - comet-ml/opik: Debug, evaluate, and monitor your LLM applications,  RAG systems, and agentic workflows with comprehensive tracing, automated  evaluations, and production-ready dashboards." srcset="https://substackcdn.com/image/fetch/$s_!7GfA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa9f355d-fd81-4db4-afcc-76700f7c93e6_1034x351.svg 424w, https://substackcdn.com/image/fetch/$s_!7GfA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa9f355d-fd81-4db4-afcc-76700f7c93e6_1034x351.svg 848w, https://substackcdn.com/image/fetch/$s_!7GfA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa9f355d-fd81-4db4-afcc-76700f7c93e6_1034x351.svg 1272w, https://substackcdn.com/image/fetch/$s_!7GfA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffa9f355d-fd81-4db4-afcc-76700f7c93e6_1034x351.svg 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 role="img" 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><title></title><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><strong>Setting up Opik Environment Variables in .env</strong></p><pre><code>OPIK_API_KEY=your-api-key
OPIK_WORKSPACE='the-engineers-digest-agent-ship' #create as you like
OPIK_PROJECT_NAME='project1'</code></pre><h4>Makefiles and Docker setup</h4><p>Once the environment variables are setup, we need to install the crucial dependencies, the postgres based session store, spinning up the API server, debug ui etc. etc&#8230; </p><p>Too much right ! Hence we have docker files setup to make it easy. Sometimes it is hard to remember docker commands for developers and I believe it is a waste of time to look into the commands, hence we created Makefiles that makes it a <strong>one command spin up</strong>.</p><pre><code>$ make docker-setup</code></pre><p><strong>Tadaah</strong>! you are done and you can now access out of box agents available in the repository! &#128079;</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ammr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8f9332d-c845-443e-aef0-b07b6281cfd3_1966x1790.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ammr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8f9332d-c845-443e-aef0-b07b6281cfd3_1966x1790.png 424w, https://substackcdn.com/image/fetch/$s_!ammr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8f9332d-c845-443e-aef0-b07b6281cfd3_1966x1790.png 848w, https://substackcdn.com/image/fetch/$s_!ammr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8f9332d-c845-443e-aef0-b07b6281cfd3_1966x1790.png 1272w, https://substackcdn.com/image/fetch/$s_!ammr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8f9332d-c845-443e-aef0-b07b6281cfd3_1966x1790.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ammr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8f9332d-c845-443e-aef0-b07b6281cfd3_1966x1790.png" width="1456" height="1326" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c8f9332d-c845-443e-aef0-b07b6281cfd3_1966x1790.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1326,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:624998,&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://harshuljain.substack.com/i/184200138?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8f9332d-c845-443e-aef0-b07b6281cfd3_1966x1790.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ammr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8f9332d-c845-443e-aef0-b07b6281cfd3_1966x1790.png 424w, https://substackcdn.com/image/fetch/$s_!ammr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8f9332d-c845-443e-aef0-b07b6281cfd3_1966x1790.png 848w, https://substackcdn.com/image/fetch/$s_!ammr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8f9332d-c845-443e-aef0-b07b6281cfd3_1966x1790.png 1272w, https://substackcdn.com/image/fetch/$s_!ammr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc8f9332d-c845-443e-aef0-b07b6281cfd3_1966x1790.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 role="img" 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><title></title><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>The Old Way vs. The AgentShip Way</p><p></p><h2>Create Your Agent - 10 mins</h2><p>Now, Once the base setup is done, we need to create an agent. For this demo we will keep it simple and create a <strong>simple agent that spits out the history facts</strong> on innovations based on year provided in the natural language.</p><p><em><strong>Note:</strong> We will cover the more advanced design patterns in coming weeks !</em></p><p>Setting up the agent requires setting up the yaml configuration which is present in <code>main.yaml</code> and the actual agent logic <code>main.py</code> in <code>all_agents</code> location.</p><p><strong>Run the following commands:</strong></p><pre><code>$ mkdir src/agents/all_agents/my_new_demo_agent
$ cd src/agents/all_agents/my_new_demo_agent
$ touch src/agents/all_agents/my_new_demo_agent/__init__.py
$ touch src/agents/all_agents/my_new_demo_agent/main_agent.py
$ touch src/agents/all_agents/my_new_demo_agent/main_agent.yaml</code></pre><p>We will spend around 10 mins in this section, this this is the most complicated and important of all the process. </p><p></p><h4>Agent Configuration in YAML</h4><p>Simple yaml that defines the prompt to be used by agent. We are aiming for <strong>structured inputs and outputs</strong> and confining the scope to history facts for the agent. </p><pre><code>agent_name: history_facts_agent
tags: [history_facts_agent]
llm_provider_name: openai
llm_model: gpt-4o
temperature: 0.4
description: Agent that helps answering question about history facts. 
instruction_template: &gt;
  You are a history expert. You are able to spit facts about history and answer questions about it.
  history facts are based on the year provided by the user. If not provided, you can ask the user to provide the year.
  
  CRITERIA FOR GETTING HISTORY FACTS:
  - If the user provides a year, you should get the history facts for that year.
  - If the user does not provide a year, you should ask the user to provide the year.

  GUARDRAILS:
  - You should not provide any information that is not related to the history facts.
  
  You will receive input in the following format:
  HistoryFactsInput model:
  - query: The query to get the history facts for.

  Your output should be a JSON object matching the HistoryFactsOutput model. Please make sure to include all the fields in the output and output should be a JSON object.

  HistoryFactsOutput model:
  - facts: List[str]</code></pre><p></p><h4>Agent Logic</h4><p>Defining the agent logic involves setting up the structured input, output and the initialization. <strong>Most of complexity is taken care by AgentShip ! Simple enough right ! &#128640;</strong></p><pre><code>"""History facts agent using Google ADK for history facts generation."""

from typing import List
from pydantic import BaseModel, Field
from src.agents.all_agents.base_agent import BaseAgent


class HistoryFactsInput(BaseModel):
    """Input for history facts generation."""
    query: str = Field(description="The query to get the history facts for.")


class HistoryFactsOutput(BaseModel):
    """Output for history facts generation."""
    facts: List[str] = Field(description="The history facts for the query.")


class HistoryFactsAgent(BaseAgent):
    """Agent for generating history facts."""

    def __init__(self):
        """Initialize the history facts agent."""
        # Config auto-loads from main_agent.yaml, chat() is implemented by base class
        super().__init__(
            _caller_file=__file__,
            input_schema=HistoryFactsInput,
            output_schema=HistoryFactsOutput
        )
    
    # No need to override chat() - base class handles it!
    # No need to override _create_tools() or _create_sub_agents() - defaults to empty list</code></pre><p>That is it! Let us <strong>restart the docker &#128051; !</strong></p><pre><code>$ make docker-restart

or

$ make docker-reload</code></pre><p></p><h2>Debugging with Debug UI - 5-10 mins</h2><p>Once the docker is restarted, you need to head to debug-ui to interact with your agent and check its behavior and performance. </p><p><em><strong>Note:</strong> We did not add any advanced guardrails here for simplicity but we will covering that in coming weeks!</em></p><p>Now, head over to <a href="http://localhost:7001/debug-ui">http://localhost:7001/debug-ui</a></p><p>You should see the UI like below, where you can now chat with the agent. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!tHEl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F004ef247-1c95-42ea-8a5c-34f548ce863c_2994x1644.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tHEl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F004ef247-1c95-42ea-8a5c-34f548ce863c_2994x1644.png 424w, https://substackcdn.com/image/fetch/$s_!tHEl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F004ef247-1c95-42ea-8a5c-34f548ce863c_2994x1644.png 848w, https://substackcdn.com/image/fetch/$s_!tHEl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F004ef247-1c95-42ea-8a5c-34f548ce863c_2994x1644.png 1272w, https://substackcdn.com/image/fetch/$s_!tHEl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F004ef247-1c95-42ea-8a5c-34f548ce863c_2994x1644.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!tHEl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F004ef247-1c95-42ea-8a5c-34f548ce863c_2994x1644.png" width="1456" height="799" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/004ef247-1c95-42ea-8a5c-34f548ce863c_2994x1644.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:799,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:461532,&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://harshuljain.substack.com/i/184200138?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F004ef247-1c95-42ea-8a5c-34f548ce863c_2994x1644.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!tHEl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F004ef247-1c95-42ea-8a5c-34f548ce863c_2994x1644.png 424w, https://substackcdn.com/image/fetch/$s_!tHEl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F004ef247-1c95-42ea-8a5c-34f548ce863c_2994x1644.png 848w, https://substackcdn.com/image/fetch/$s_!tHEl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F004ef247-1c95-42ea-8a5c-34f548ce863c_2994x1644.png 1272w, https://substackcdn.com/image/fetch/$s_!tHEl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F004ef247-1c95-42ea-8a5c-34f548ce863c_2994x1644.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 role="img" 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><title></title><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>Did you notice something ? <strong>Agent has the past chat context</strong> &#128512; thought we did not do any setup around it by ourselves. </p><p><strong>Clap &#128079;</strong> for yourself because you have just setup an agent in a very minimalistic way with which you can interact and debug easily. </p><p>Feel free to make any changes to make it work as per your needs. For now we will move towards observability and shipping to production.</p><p></p><h2>Observability with Opik - 5-10 mins</h2><p>We are using Opik under the hood for observability on the agents. You do not need to do anything special here as you already have setup the .env with opik environment variables by now. </p><p>So just head onto your opik account and check your agent logs. You should see something like this. Good enough right without much of efforts ! </p><p>I would encourage you to play around the Opik UI more to understand it better. There is a <strong><a href="https://www.comet.com/docs/opik/quickstart">good documentation</a></strong> out there to refer to. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!IvYo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17d3bdcf-c68c-4646-aabe-1b2fdbb5955f_3024x1648.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!IvYo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17d3bdcf-c68c-4646-aabe-1b2fdbb5955f_3024x1648.png 424w, https://substackcdn.com/image/fetch/$s_!IvYo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17d3bdcf-c68c-4646-aabe-1b2fdbb5955f_3024x1648.png 848w, https://substackcdn.com/image/fetch/$s_!IvYo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17d3bdcf-c68c-4646-aabe-1b2fdbb5955f_3024x1648.png 1272w, https://substackcdn.com/image/fetch/$s_!IvYo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17d3bdcf-c68c-4646-aabe-1b2fdbb5955f_3024x1648.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!IvYo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17d3bdcf-c68c-4646-aabe-1b2fdbb5955f_3024x1648.png" width="1456" height="793" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/17d3bdcf-c68c-4646-aabe-1b2fdbb5955f_3024x1648.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:793,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:511565,&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://harshuljain.substack.com/i/184200138?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17d3bdcf-c68c-4646-aabe-1b2fdbb5955f_3024x1648.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!IvYo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17d3bdcf-c68c-4646-aabe-1b2fdbb5955f_3024x1648.png 424w, https://substackcdn.com/image/fetch/$s_!IvYo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17d3bdcf-c68c-4646-aabe-1b2fdbb5955f_3024x1648.png 848w, https://substackcdn.com/image/fetch/$s_!IvYo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17d3bdcf-c68c-4646-aabe-1b2fdbb5955f_3024x1648.png 1272w, https://substackcdn.com/image/fetch/$s_!IvYo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F17d3bdcf-c68c-4646-aabe-1b2fdbb5955f_3024x1648.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 role="img" 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><title></title><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><h2>Shipping an API endpoint - 2 mins</h2><p>Well now that you have your agent ready and tuned for performance based on observability, you would want to access the Agent. Access via other services like the backend service for your frontend. For that this Agent needs to be deployed as an API with right authentication practices. </p><p><strong>Don&#8217;t worry ! AgentShip takes care of setting up api endpoint for you with authentication.</strong></p><p>As of today we are support heroku for deployment and will add support for cloud based deployments soon like Azure, AWS and GCP. For the scope of this article we will focus on Heroku deployment. </p><pre><code>$ make heroku-deploy</code></pre><p>You need up the APP_NAME and SESSION_STORE_NAME for your heroku app in .env file </p><pre><code>APP_NAME='the-agent-ship-demo'
SESSION_STORE_NAME='agent-ship-demo-session-store'</code></pre><p>You might get output like </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!FmV6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a59b561-7235-4e1a-8346-0751cce435c9_1330x676.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FmV6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a59b561-7235-4e1a-8346-0751cce435c9_1330x676.png 424w, https://substackcdn.com/image/fetch/$s_!FmV6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a59b561-7235-4e1a-8346-0751cce435c9_1330x676.png 848w, https://substackcdn.com/image/fetch/$s_!FmV6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a59b561-7235-4e1a-8346-0751cce435c9_1330x676.png 1272w, https://substackcdn.com/image/fetch/$s_!FmV6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a59b561-7235-4e1a-8346-0751cce435c9_1330x676.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FmV6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a59b561-7235-4e1a-8346-0751cce435c9_1330x676.png" width="1330" height="676" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7a59b561-7235-4e1a-8346-0751cce435c9_1330x676.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:676,&quot;width&quot;:1330,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:172855,&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://harshuljain.substack.com/i/184200138?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a59b561-7235-4e1a-8346-0751cce435c9_1330x676.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!FmV6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a59b561-7235-4e1a-8346-0751cce435c9_1330x676.png 424w, https://substackcdn.com/image/fetch/$s_!FmV6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a59b561-7235-4e1a-8346-0751cce435c9_1330x676.png 848w, https://substackcdn.com/image/fetch/$s_!FmV6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a59b561-7235-4e1a-8346-0751cce435c9_1330x676.png 1272w, https://substackcdn.com/image/fetch/$s_!FmV6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7a59b561-7235-4e1a-8346-0751cce435c9_1330x676.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 role="img" 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><title></title><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>That&#8217;s all! you API is deployed ! <strong>Don&#8217;t worry, I have deleted my heroku container after this demo! So don&#8217;t bother to hack!</strong>  &#128522;</p><p><em><strong>Note:</strong> When it comes to scalability we need more advanced configurations. we will cover those configurations in detail in a separate post.</em></p><h2><strong>Verifying the API - 2 mins</strong></h2><p>Once deployment is done, you might be treated with this message when you open the url</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Ccuw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F797482cb-74a0-429a-97e1-895d56f45cef_752x106.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Ccuw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F797482cb-74a0-429a-97e1-895d56f45cef_752x106.png 424w, https://substackcdn.com/image/fetch/$s_!Ccuw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F797482cb-74a0-429a-97e1-895d56f45cef_752x106.png 848w, https://substackcdn.com/image/fetch/$s_!Ccuw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F797482cb-74a0-429a-97e1-895d56f45cef_752x106.png 1272w, https://substackcdn.com/image/fetch/$s_!Ccuw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F797482cb-74a0-429a-97e1-895d56f45cef_752x106.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Ccuw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F797482cb-74a0-429a-97e1-895d56f45cef_752x106.png" width="752" height="106" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/797482cb-74a0-429a-97e1-895d56f45cef_752x106.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:106,&quot;width&quot;:752,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:14927,&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://harshuljain.substack.com/i/184200138?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F797482cb-74a0-429a-97e1-895d56f45cef_752x106.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Ccuw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F797482cb-74a0-429a-97e1-895d56f45cef_752x106.png 424w, https://substackcdn.com/image/fetch/$s_!Ccuw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F797482cb-74a0-429a-97e1-895d56f45cef_752x106.png 848w, https://substackcdn.com/image/fetch/$s_!Ccuw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F797482cb-74a0-429a-97e1-895d56f45cef_752x106.png 1272w, https://substackcdn.com/image/fetch/$s_!Ccuw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F797482cb-74a0-429a-97e1-895d56f45cef_752x106.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>You can call this API using Postman for which the configurations and all are in the repo.</p><h2>Conclusion</h2><p>That&#8217;s it! In 30 minutes, you&#8217;ve built and deployed a API-ready AI agent with observability, session management, and authentication - all baked in.</p><p><strong>No more week-long sprints. This is what modern agent development should look like.</strong></p><p>Checkout the <strong>Github repo here: <a href="https://github.com/Agent-Shipping-Kit/agent-ship">https://github.com/Agent-Shipping-Kit/agent-ship</a></strong></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Y_ve!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a26fb60-823c-4b55-84b9-a244f9870f40_1790x1234.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Y_ve!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a26fb60-823c-4b55-84b9-a244f9870f40_1790x1234.png 424w, https://substackcdn.com/image/fetch/$s_!Y_ve!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a26fb60-823c-4b55-84b9-a244f9870f40_1790x1234.png 848w, https://substackcdn.com/image/fetch/$s_!Y_ve!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a26fb60-823c-4b55-84b9-a244f9870f40_1790x1234.png 1272w, https://substackcdn.com/image/fetch/$s_!Y_ve!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a26fb60-823c-4b55-84b9-a244f9870f40_1790x1234.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Y_ve!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a26fb60-823c-4b55-84b9-a244f9870f40_1790x1234.png" width="1456" height="1004" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2a26fb60-823c-4b55-84b9-a244f9870f40_1790x1234.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1004,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:211111,&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://harshuljain.substack.com/i/184200138?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a26fb60-823c-4b55-84b9-a244f9870f40_1790x1234.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Y_ve!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a26fb60-823c-4b55-84b9-a244f9870f40_1790x1234.png 424w, https://substackcdn.com/image/fetch/$s_!Y_ve!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a26fb60-823c-4b55-84b9-a244f9870f40_1790x1234.png 848w, https://substackcdn.com/image/fetch/$s_!Y_ve!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a26fb60-823c-4b55-84b9-a244f9870f40_1790x1234.png 1272w, https://substackcdn.com/image/fetch/$s_!Y_ve!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2a26fb60-823c-4b55-84b9-a244f9870f40_1790x1234.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 role="img" 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><title></title><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><strong>Next week:</strong></h2><p>We will share how to implement <strong>Advanced Agentic Design Patterns</strong> - multi-agent orchestration, tool integration patterns with <strong>AgentShip</strong>. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ucsi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F751ea76f-a5c5-4ace-8d79-414121cfd2da_1024x559.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ucsi!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F751ea76f-a5c5-4ace-8d79-414121cfd2da_1024x559.png 424w, https://substackcdn.com/image/fetch/$s_!ucsi!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F751ea76f-a5c5-4ace-8d79-414121cfd2da_1024x559.png 848w, https://substackcdn.com/image/fetch/$s_!ucsi!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F751ea76f-a5c5-4ace-8d79-414121cfd2da_1024x559.png 1272w, https://substackcdn.com/image/fetch/$s_!ucsi!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F751ea76f-a5c5-4ace-8d79-414121cfd2da_1024x559.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ucsi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F751ea76f-a5c5-4ace-8d79-414121cfd2da_1024x559.png" width="1024" height="559" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/751ea76f-a5c5-4ace-8d79-414121cfd2da_1024x559.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:559,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:742096,&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://harshuljain.substack.com/i/184200138?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F751ea76f-a5c5-4ace-8d79-414121cfd2da_1024x559.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ucsi!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F751ea76f-a5c5-4ace-8d79-414121cfd2da_1024x559.png 424w, https://substackcdn.com/image/fetch/$s_!ucsi!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F751ea76f-a5c5-4ace-8d79-414121cfd2da_1024x559.png 848w, https://substackcdn.com/image/fetch/$s_!ucsi!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F751ea76f-a5c5-4ace-8d79-414121cfd2da_1024x559.png 1272w, https://substackcdn.com/image/fetch/$s_!ucsi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F751ea76f-a5c5-4ace-8d79-414121cfd2da_1024x559.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 role="img" 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><title></title><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><strong>Stay tuned, and happy shipping! &#128640;</strong></p>]]></content:encoded></item><item><title><![CDATA[What Is AgentShip And Why I Built It ?]]></title><description><![CDATA[I spent 12 days wrapping an agent in plumbing FastAPI, PostgreSQL, Docker observability while the agent itself did the exact same thing it did on day two. After the third time, I stopped copy-pasting.]]></description><link>https://harshuljain.substack.com/p/what-is-agentship-and-why-i-built</link><guid isPermaLink="false">https://harshuljain.substack.com/p/what-is-agentship-and-why-i-built</guid><dc:creator><![CDATA[Harshul Jain]]></dc:creator><pubDate>Sat, 03 Jan 2026 14:30:23 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!FIn_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F686050d2-7fb5-48c0-b951-a7b1e9b9da60_1024x559.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Introduction</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!FIn_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F686050d2-7fb5-48c0-b951-a7b1e9b9da60_1024x559.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!FIn_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F686050d2-7fb5-48c0-b951-a7b1e9b9da60_1024x559.png 424w, https://substackcdn.com/image/fetch/$s_!FIn_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F686050d2-7fb5-48c0-b951-a7b1e9b9da60_1024x559.png 848w, https://substackcdn.com/image/fetch/$s_!FIn_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F686050d2-7fb5-48c0-b951-a7b1e9b9da60_1024x559.png 1272w, https://substackcdn.com/image/fetch/$s_!FIn_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F686050d2-7fb5-48c0-b951-a7b1e9b9da60_1024x559.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!FIn_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F686050d2-7fb5-48c0-b951-a7b1e9b9da60_1024x559.png" width="1024" height="559" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/686050d2-7fb5-48c0-b951-a7b1e9b9da60_1024x559.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:559,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:864491,&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://harshuljain.substack.com/i/183336330?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F686050d2-7fb5-48c0-b951-a7b1e9b9da60_1024x559.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!FIn_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F686050d2-7fb5-48c0-b951-a7b1e9b9da60_1024x559.png 424w, https://substackcdn.com/image/fetch/$s_!FIn_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F686050d2-7fb5-48c0-b951-a7b1e9b9da60_1024x559.png 848w, https://substackcdn.com/image/fetch/$s_!FIn_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F686050d2-7fb5-48c0-b951-a7b1e9b9da60_1024x559.png 1272w, https://substackcdn.com/image/fetch/$s_!FIn_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F686050d2-7fb5-48c0-b951-a7b1e9b9da60_1024x559.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 role="img" 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><title></title><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>I <strong>spent two days building an agent last month</strong>. It worked perfectly. Answered questions, called the right tools, handled edge cases. I was proud of it.</p><p>Then <strong>I</strong> <strong>tried to ship it</strong>. Two weeks later, after writing FastAPI endpoints, setting up PostgreSQL sessions, wiring Opik for observability, writing Docker configs, and debugging why the health check kept timing out in production, the agent <em>still</em> did the exact same thing it did on day two.</p><p>I&#8217;d just <strong>spent 12 days wrapping it in plumbing</strong>. This happened three times. By the third agent, while copy-pasting my session manager code again, I realized: I&#8217;m rebuilding the same thing every time. <strong>So I stopped and I built it once.</strong></p><p></p><h2>What shipping an agent actually looks like</h2><p>Let me show you the breakdown from my last agent before I had any framework:</p><p><strong>Day 1-2: Build the agent</strong></p><p>The fun part. Write the logic, test it in Jupyter, get it working. Agent does what I want.</p><p><strong>Day 3-5: Wrap it in FastAPI</strong></p><p>Request validation, error handling, CORS headers, environment variables. Tedious but straightforward. Copy-paste from last project, tweak, move on.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!aRow!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e162d04-81a3-4a5e-b2c8-d75d293f0f2a_1024x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!aRow!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e162d04-81a3-4a5e-b2c8-d75d293f0f2a_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!aRow!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e162d04-81a3-4a5e-b2c8-d75d293f0f2a_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!aRow!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e162d04-81a3-4a5e-b2c8-d75d293f0f2a_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!aRow!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e162d04-81a3-4a5e-b2c8-d75d293f0f2a_1024x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!aRow!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e162d04-81a3-4a5e-b2c8-d75d293f0f2a_1024x1024.png" width="588" height="588" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9e162d04-81a3-4a5e-b2c8-d75d293f0f2a_1024x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:588,&quot;bytes&quot;:1518795,&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://harshuljain.substack.com/i/183336330?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e162d04-81a3-4a5e-b2c8-d75d293f0f2a_1024x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!aRow!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e162d04-81a3-4a5e-b2c8-d75d293f0f2a_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!aRow!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e162d04-81a3-4a5e-b2c8-d75d293f0f2a_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!aRow!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e162d04-81a3-4a5e-b2c8-d75d293f0f2a_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!aRow!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9e162d04-81a3-4a5e-b2c8-d75d293f0f2a_1024x1024.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 role="img" 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><title></title><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">Agent Shipping Journey without AgentShip</figcaption></figure></div><p><strong>Day 6-7: Add sessions</strong></p><p>Users expect conversations, not isolated requests. PostgreSQL or Redis? I pick PostgreSQL. Write the schema, write the session manager, handle concurrent requests, add cleanup logic.</p><p><strong>Day 8-9: Wire up observability</strong></p><p>Need to know what&#8217;s happening in production. Token counts, latency, tool traces, error logs. Integrate Opik, wrap every agent call in tracing decorators.</p><p><strong>Day 10-12: Deploy it</strong></p><p>Write Dockerfile, docker-compose, realize I forgot the health check endpoint, fix database migration order, deploy to Heroku, crash because connection pool limit not set.</p><p><strong>Day 13-14: Debug production</strong></p><p>Works locally. Slow in production. Database in wrong region. Move it. Still crashes occasionally. Not closing connections properly. Fix. Finally works.</p><p><strong>Two weeks. The agent does the exact same thing it did on day two !!</strong></p><p></p><h2>How AgentShip works</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6ibd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff98c5319-a794-4417-8240-5cc191187071_4603x1525.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6ibd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff98c5319-a794-4417-8240-5cc191187071_4603x1525.png 424w, https://substackcdn.com/image/fetch/$s_!6ibd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff98c5319-a794-4417-8240-5cc191187071_4603x1525.png 848w, https://substackcdn.com/image/fetch/$s_!6ibd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff98c5319-a794-4417-8240-5cc191187071_4603x1525.png 1272w, https://substackcdn.com/image/fetch/$s_!6ibd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff98c5319-a794-4417-8240-5cc191187071_4603x1525.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6ibd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff98c5319-a794-4417-8240-5cc191187071_4603x1525.png" width="1456" height="482" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f98c5319-a794-4417-8240-5cc191187071_4603x1525.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:482,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:834729,&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://harshuljain.substack.com/i/183336330?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff98c5319-a794-4417-8240-5cc191187071_4603x1525.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!6ibd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff98c5319-a794-4417-8240-5cc191187071_4603x1525.png 424w, https://substackcdn.com/image/fetch/$s_!6ibd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff98c5319-a794-4417-8240-5cc191187071_4603x1525.png 848w, https://substackcdn.com/image/fetch/$s_!6ibd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff98c5319-a794-4417-8240-5cc191187071_4603x1525.png 1272w, https://substackcdn.com/image/fetch/$s_!6ibd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff98c5319-a794-4417-8240-5cc191187071_4603x1525.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 role="img" 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><title></title><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>AgentShip sits between your agent and production. You write two files (YAML config + Python class), and it handles the API server, session management, Memory, Tools, MCP, observability, and deployment for you.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!xaDN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F016c29a3-4a7d-48df-b53d-619ca5cd0997_5844x7477.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!xaDN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F016c29a3-4a7d-48df-b53d-619ca5cd0997_5844x7477.png 424w, https://substackcdn.com/image/fetch/$s_!xaDN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F016c29a3-4a7d-48df-b53d-619ca5cd0997_5844x7477.png 848w, https://substackcdn.com/image/fetch/$s_!xaDN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F016c29a3-4a7d-48df-b53d-619ca5cd0997_5844x7477.png 1272w, https://substackcdn.com/image/fetch/$s_!xaDN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F016c29a3-4a7d-48df-b53d-619ca5cd0997_5844x7477.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!xaDN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F016c29a3-4a7d-48df-b53d-619ca5cd0997_5844x7477.png" width="1456" height="1863" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/016c29a3-4a7d-48df-b53d-619ca5cd0997_5844x7477.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1863,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1963305,&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://harshuljain.substack.com/i/183336330?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F016c29a3-4a7d-48df-b53d-619ca5cd0997_5844x7477.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!xaDN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F016c29a3-4a7d-48df-b53d-619ca5cd0997_5844x7477.png 424w, https://substackcdn.com/image/fetch/$s_!xaDN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F016c29a3-4a7d-48df-b53d-619ca5cd0997_5844x7477.png 848w, https://substackcdn.com/image/fetch/$s_!xaDN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F016c29a3-4a7d-48df-b53d-619ca5cd0997_5844x7477.png 1272w, https://substackcdn.com/image/fetch/$s_!xaDN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F016c29a3-4a7d-48df-b53d-619ca5cd0997_5844x7477.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 role="img" 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><title></title><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">Architecture Diagram for AgentShip</figcaption></figure></div><p><em>Note: For the full architecture and what&#8217;s happening under the hood feel free to check out <strong><a href="https://github.com/Agent-Shipping-Kit/agent-ship">Github repository</a>. </strong>Feel free to provide stars and forks for the repository. We really appreciate it! </em></p><p></p><h3>What we Write</h3><p><strong>Agent configuration</strong></p><pre><code># agent_config.yaml
agent_name: my_agent
llm_model: gpt-4
temperature: 0.7
  You are a helpful assistant that...</code></pre><p><strong>Agent Logic</strong></p><pre><code><code># [agent.py](http://agent.py)
from agentship import BaseAgent

class MyAgent(BaseAgent):
    def __init__(self):
        super().__init__(__file__)</code></code></pre><h3><strong>What we get:</strong></h3><p><code>make docker-setup</code> &#8594; local dev with API + sessions + observability</p><p><code>make heroku-deploy</code> &#8594; production deployment</p><p></p><h2>Real Numbers From Experimentation</h2><p>We&#8217;re using AgentShip in experimentation for a consumer app that&#8217;s currently in the build phase. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ufRM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae16f72d-e902-430e-9377-ceaf632c416b_1024x559.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ufRM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae16f72d-e902-430e-9377-ceaf632c416b_1024x559.png 424w, https://substackcdn.com/image/fetch/$s_!ufRM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae16f72d-e902-430e-9377-ceaf632c416b_1024x559.png 848w, https://substackcdn.com/image/fetch/$s_!ufRM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae16f72d-e902-430e-9377-ceaf632c416b_1024x559.png 1272w, https://substackcdn.com/image/fetch/$s_!ufRM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae16f72d-e902-430e-9377-ceaf632c416b_1024x559.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ufRM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae16f72d-e902-430e-9377-ceaf632c416b_1024x559.png" width="1024" height="559" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ae16f72d-e902-430e-9377-ceaf632c416b_1024x559.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:559,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:812583,&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://harshuljain.substack.com/i/183336330?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae16f72d-e902-430e-9377-ceaf632c416b_1024x559.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!ufRM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae16f72d-e902-430e-9377-ceaf632c416b_1024x559.png 424w, https://substackcdn.com/image/fetch/$s_!ufRM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae16f72d-e902-430e-9377-ceaf632c416b_1024x559.png 848w, https://substackcdn.com/image/fetch/$s_!ufRM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae16f72d-e902-430e-9377-ceaf632c416b_1024x559.png 1272w, https://substackcdn.com/image/fetch/$s_!ufRM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fae16f72d-e902-430e-9377-ceaf632c416b_1024x559.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 role="img" 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><title></title><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">Comparison without Agentship and with AgentShip</figcaption></figure></div><ol><li><p><strong>Conversation summarizer</strong> &#8594; Takes user transcripts, extracts key points</p></li><li><p><strong>Q&amp;A assistant</strong> &#8594; Answers questions using conversation history + knowledge base</p></li><li><p><strong>Action item extractor</strong> &#8594; Pulls follow-ups and next steps</p></li><li><p><strong>Document analyzer</strong> &#8594; Processes documents, summarizes findings</p></li></ol><p>Deployed the whole stack in a weekend. As we iterate on the product, we&#8217;re spending time improving agent quality and user experience instead of debugging infrastructure.</p><p></p><h2>Try it</h2><p>Here&#8217;s the quick start:</p><pre><code><code>git clone [https://github.com/Agent-Shipping-Kit/agent-ship.git]
cd agent-ship

make docker-setup

# Create your agent (2 files)
# Check the examples/ folder
# Check the docs
# Use the Debug-UI for testing

make heroku-deploy (More deployment options coming)
</code></code></pre><p>You&#8217;ll have a production API in 30 minutes.</p><p>The code is on GitHub. It&#8217;s free and open source. If you find bugs, open an issue. If you want features, open the feature requests or submit a PR.</p><p><strong>GitHub:</strong> <a href="https://github.com/Agent-Shipping-Kit/agent-ship.git">https://github.com/Agent-Shipping-Kit/agent-ship.git</a></p><p></p><p><strong>If you appreciate the work, feel free to star the repository, that works as the encouragement for us to improvise and deliver.</strong></p><p></p><h2>Next week:</h2><p>We will share a demo on how to create a agent, test it, deploy it in production. Stay tuned.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!niGU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c884bdd-e99f-4511-8e5f-ac7a6d775e04_1024x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!niGU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c884bdd-e99f-4511-8e5f-ac7a6d775e04_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!niGU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c884bdd-e99f-4511-8e5f-ac7a6d775e04_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!niGU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c884bdd-e99f-4511-8e5f-ac7a6d775e04_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!niGU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c884bdd-e99f-4511-8e5f-ac7a6d775e04_1024x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!niGU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c884bdd-e99f-4511-8e5f-ac7a6d775e04_1024x1024.png" width="1024" height="1024" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4c884bdd-e99f-4511-8e5f-ac7a6d775e04_1024x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1219863,&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://harshuljain.substack.com/i/183336330?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c884bdd-e99f-4511-8e5f-ac7a6d775e04_1024x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!niGU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c884bdd-e99f-4511-8e5f-ac7a6d775e04_1024x1024.png 424w, https://substackcdn.com/image/fetch/$s_!niGU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c884bdd-e99f-4511-8e5f-ac7a6d775e04_1024x1024.png 848w, https://substackcdn.com/image/fetch/$s_!niGU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c884bdd-e99f-4511-8e5f-ac7a6d775e04_1024x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!niGU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4c884bdd-e99f-4511-8e5f-ac7a6d775e04_1024x1024.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 role="img" 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><title></title><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>]]></content:encoded></item></channel></rss>