<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Pavan Belagatti</title>
    <description>The latest articles on DEV Community by Pavan Belagatti (@pavanbelagatti).</description>
    <link>https://dev.to/pavanbelagatti</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F68703%2F46d312f8-f4ee-4c00-a8f2-84502856bcd5.png</url>
      <title>DEV Community: Pavan Belagatti</title>
      <link>https://dev.to/pavanbelagatti</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/pavanbelagatti"/>
    <language>en</language>
    <item>
      <title>Loop Engineering Explained for Developers!</title>
      <dc:creator>Pavan Belagatti</dc:creator>
      <pubDate>Mon, 06 Jul 2026 06:50:34 +0000</pubDate>
      <link>https://dev.to/pavanbelagatti/loop-engineering-explained-for-developers-40m2</link>
      <guid>https://dev.to/pavanbelagatti/loop-engineering-explained-for-developers-40m2</guid>
      <description>&lt;p&gt;&lt;code&gt;With a Real CI Automation Example&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Loop Engineering is suddenly everywhere, and honestly, I wanted to understand it properly instead of just repeating the buzzword. The simplest way I can explain Loop Engineering is this: it replaces me as the person constantly prompting the agent.&lt;/p&gt;

&lt;p&gt;Instead of me manually noticing a problem, deciding what it means, writing the next prompt, and pushing the process forward, I design a system that keeps moving on its own until it reaches the outcome I want. That is the whole point of Loop Engineering. I stop acting like the operator and start acting like the system designer.&lt;/p&gt;

&lt;p&gt;To make that idea concrete, I built a practical software engineering workflow around CI failures. Whenever a GitHub Actions CI run fails, the system automatically classifies the failure, creates a Jira bug for real issues, sends a Slack notification, and records the outcome so it does not process the same failure twice.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/RvG7R0Ue1k4"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  What Loop Engineering actually means
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fc7vlf9oabl3gou9p1isb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fc7vlf9oabl3gou9p1isb.png" alt="loop engineering" width="800" height="590"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Early AI workflows were mostly linear. I would give a prompt, the model would return an answer, and if the answer was incomplete or wrong, I would jump back in and prompt again. That worked, but it kept me trapped inside the process.&lt;/p&gt;

&lt;p&gt;Loop Engineering changes that dynamic. I am no longer the person babysitting each step. I build an autonomous loop that can observe, decide, act, and persist state. The system keeps iterating until the task is done, without needing me to micromanage it.&lt;/p&gt;

&lt;p&gt;That distinction matters. In a normal prompt based workflow, the human is still the glue. In Loop Engineering, the human creates the machine, and the machine runs the loop.&lt;/p&gt;

&lt;h2&gt;
  
  
  The five building blocks of Loop Engineering
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj6sej72wvmjvf9sfpnpf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj6sej72wvmjvf9sfpnpf.png" alt="loop engineering building blocks" width="800" height="551"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When I break down Loop Engineering, I think of it as five core building blocks working together.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Automations&lt;/strong&gt;&lt;br&gt;
These are the event driven triggers that start the whole system. They are the heartbeat of the loop. Something happens, and the automation fires. Without this, nothing starts.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Skills&lt;/strong&gt;&lt;br&gt;
Skills give the agent structured context. Instead of forcing the agent to rediscover team conventions every single time, I encode that context once so it can operate with the same assumptions repeatedly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Sub-agents&lt;/strong&gt;&lt;br&gt;
This is where things get more robust. One agent can produce an output, and another can verify or classify it. That separation is useful because generation and validation are not always the same job.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Connectors&lt;/strong&gt;&lt;br&gt;
Connectors are what let the loop act in the real world. A decision inside the system is only valuable if it can trigger something external like Jira, Slack, GitHub, or another platform.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. State files&lt;/strong&gt;&lt;br&gt;
State is memory. It helps the loop remember what it has already handled. This is how I avoid duplicate processing and repeated actions. Without persistent state, the system can become noisy and unreliable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I used a CI failure use case
&lt;/h2&gt;

&lt;p&gt;I wanted to apply Loop Engineering to something real, not just a toy demo. Continuous integration is a perfect example because teams deal with CI failures all the time, and a lot of the follow-up work is repetitive.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Here is what usually happens when a CI run fails in GitHub Actions:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Someone notices the failure&lt;/li&gt;
&lt;li&gt;Someone checks whether it is a flaky test, an environment problem, or a real bug&lt;/li&gt;
&lt;li&gt;Someone creates a Jira issue&lt;/li&gt;
&lt;li&gt;Someone sends a Slack message&lt;/li&gt;
&lt;li&gt;Someone tracks whether the issue was already handled&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is manual toil.&lt;/p&gt;

&lt;p&gt;The Google SRE way of thinking about toil is useful here. Toil is repetitive manual work that grows linearly with the size of the team. As the engineering organization grows, CI failures grow too. If handling them still depends on humans doing the same boring steps every day, the cost scales badly.&lt;/p&gt;

&lt;p&gt;So my goal was simple: eliminate as much of that toil as possible with Loop Engineering.&lt;/p&gt;

&lt;h2&gt;
  
  
  The loop I built
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F30kzbhnat2orx3ec4mba.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F30kzbhnat2orx3ec4mba.png" alt="Loop engineering tutorial" width="800" height="604"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The loop works like this.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A CI run fails in GitHub Actions.&lt;/li&gt;
&lt;li&gt;An automation triggers automatically.&lt;/li&gt;
&lt;li&gt;AI classifies the failure.&lt;/li&gt;
&lt;li&gt;If it is a flake, the system logs it and skips Jira.&lt;/li&gt;
&lt;li&gt;If it is a real bug, the system creates a Jira ticket.&lt;/li&gt;
&lt;li&gt;The system sends a Slack notification with the details.&lt;/li&gt;
&lt;li&gt;The result is written back as persistent state so the same failure is not processed twice.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is a very practical example of &lt;strong&gt;Loop Engineering&lt;/strong&gt;. No manual prompting in the middle. No waiting for a human to notice the failure. No repeated handoffs.&lt;/p&gt;

&lt;h2&gt;
  
  
  How the workflow behaves in practice
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnrjmorpm2884koqsah7h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnrjmorpm2884koqsah7h.png" alt="loop engineering workflow" width="800" height="481"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I built this workflow in &lt;a href="https://bit.ly/4vcqiRi" rel="noopener noreferrer"&gt;Port.io&lt;/a&gt;, which is an agentic SDLC platform. The interesting part is not the product pitch. The interesting part is that it gave me a clean way to connect automations, workflows, AI classification, and external systems.&lt;/p&gt;

&lt;p&gt;The workflow I created is essentially a seven node process for CI failure handling. When a workflow run changes, the system classifies the CI failure. From there, it branches based on the classification.&lt;/p&gt;

&lt;p&gt;If the failure is treated as a flake, it gets logged and Jira is skipped. If the classification is bug, it creates a Jira bug, notifies Slack, and updates the run status back in Port.&lt;/p&gt;

&lt;p&gt;This is where Loop Engineering becomes more than theory. The loop is not just deciding things. It is taking action across tools and writing the outcome back into the system.&lt;/p&gt;

&lt;h2&gt;
  
  
  The live example that proves the point
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpplsg9aw21j0b4ibnzy6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fpplsg9aw21j0b4ibnzy6.png" alt="Automation runs" width="800" height="482"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To test the setup, I triggered a CI failure by editing a README file in a GitHub repository and committing directly to the main branch. In my setup, that change was enough to kick off a CI workflow that intentionally simulates a failure.&lt;/p&gt;

&lt;p&gt;Once the CI run failed, the chain reacted automatically.&lt;/p&gt;

&lt;p&gt;Inside Port, a new workflow run appeared. The system picked up the failure, classified it, and continued through the automation path.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnyils0occ004f7xh69c1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fnyils0occ004f7xh69c1.png" alt="CI automation" width="800" height="489"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Then in Jira, a bug was created automatically. The issue included useful details like:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI classification&lt;/li&gt;
&lt;li&gt;Confidence level&lt;/li&gt;
&lt;li&gt;Summary of the CI failure&lt;/li&gt;
&lt;li&gt;Workflow name&lt;/li&gt;
&lt;li&gt;Branch&lt;/li&gt;
&lt;li&gt;Commit&lt;/li&gt;
&lt;li&gt;Actor&lt;/li&gt;
&lt;li&gt;Run URL&lt;/li&gt;
&lt;li&gt;Port entity reference&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And on Slack, a notification landed with the same core details and links back to GitHub, Jira, and Port.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhrsu4o2rfbktu5nk52wr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fhrsu4o2rfbktu5nk52wr.png" alt="Slack notification" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That is the moment where &lt;strong&gt;&lt;em&gt;Loop Engineering really clicks&lt;/em&gt;&lt;/strong&gt;. The failure happened, the system reasoned about it, took action, and recorded the result, all without me stepping in between.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why this matters more than it first appears
&lt;/h2&gt;

&lt;p&gt;A lot of people hear “autonomous workflow” and think it just means convenience. I think it is more than that.&lt;/p&gt;

&lt;p&gt;Imagine a CI failure happening at 3 a.m. Normally, somebody has to notice it later, inspect it, and decide what to do. That delay can slow teams down, especially when failures stack up. But with a Loop Engineering approach, the first response happens immediately.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Even if the loop does not fully fix the issue yet, it still removes the boring operational overhead:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Detection is automatic&lt;/li&gt;
&lt;li&gt;Triage is automatic&lt;/li&gt;
&lt;li&gt;Routing is automatic&lt;/li&gt;
&lt;li&gt;Notification is automatic&lt;/li&gt;
&lt;li&gt;State tracking is automatic&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is already a huge gain. And once the loop is mature enough, it can potentially expand beyond reporting into remediation.&lt;/p&gt;

&lt;h3&gt;
  
  
  What I needed to build it
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;The prerequisites were pretty straightforward.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;a href="https://bit.ly/4vcqiRi" rel="noopener noreferrer"&gt;Port.io&lt;/a&gt; account&lt;/li&gt;
&lt;li&gt;A GitHub account and repository&lt;/li&gt;
&lt;li&gt;A CI workflow in GitHub&lt;/li&gt;
&lt;li&gt;A workflow that reports CI run metadata to Port&lt;/li&gt;
&lt;li&gt;A Jira project and credentials&lt;/li&gt;
&lt;li&gt;A Slack app and bot token&lt;/li&gt;
&lt;li&gt;The two GitHub workflow files&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;I used two YAML files in the repository.&lt;/strong&gt;&lt;br&gt;
The first was the main CI pipeline. That one simulates a test failure when I make the kind of change I used for the demo.&lt;/p&gt;

&lt;p&gt;The second was a Port CI reporter workflow. Its job is to fire after the CI run completes and send the run metadata to Port in a single upsert. That metadata includes things like the workflow name, branch, commit message, actor, and run URL.&lt;/p&gt;

&lt;p&gt;That second file is important because it is what bridges GitHub into the Loop Engineering system.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp6w6q6y6vesjbu6grwda.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fp6w6q6y6vesjbu6grwda.png" alt="CI GitHub workflow" width="800" height="480"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  How the pieces connect inside Port
&lt;/h3&gt;

&lt;p&gt;Inside Port, I had a few major setup pieces.&lt;/p&gt;

&lt;h4&gt;
  
  
  1. Data sources
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkizv6ot66kl9cwwvgstx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fkizv6ot66kl9cwwvgstx.png" alt="github auto" width="800" height="513"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I connected GitHub and the CI CD workflow run data source so Port could sync workflow run information.&lt;/p&gt;

&lt;h4&gt;
  
  
  2. Self-service action
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwq2bjgnzlpsgxiv78ioa.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fwq2bjgnzlpsgxiv78ioa.png" alt="self-service action" width="799" height="483"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I created a self-service action that gets triggered once the report from GitHub lands in Port. That is one of the event entry points in the system.&lt;/p&gt;

&lt;h4&gt;
  
  
  3. Workflow builder
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5bc2ngpdq2c6n4bn3mds.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5bc2ngpdq2c6n4bn3mds.png" alt="workflow builder" width="800" height="485"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I created the actual workflow named something like “Create Jira Issue from CI Failure.” This is the central Loop Engineering canvas where classification, branching, Jira creation, Slack notification, and status updates all live.&lt;/p&gt;

&lt;h4&gt;
  
  
  4. Secrets and credentials
&lt;/h4&gt;

&lt;p&gt;I stored the Jira auth token and Slack bot token in secrets so Port could talk securely to both systems.&lt;/p&gt;

&lt;p&gt;This part is easy to underestimate, but it is what turns the loop from a passive classifier into an active system with connectors.&lt;/p&gt;

&lt;h4&gt;
  
  
  The branching logic is the whole game
&lt;/h4&gt;

&lt;p&gt;The most important idea in this setup is not just that AI is present. It is that AI sits inside a controlled loop with branching logic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The classification step decides whether the CI failure is:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A flake&lt;/li&gt;
&lt;li&gt;An environment issue&lt;/li&gt;
&lt;li&gt;A real bug&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That decision changes the path of the workflow. This is where Loop Engineering feels engineering driven rather than prompt driven. I am not asking a model a one off question and hoping for magic. I am using a model as one decision making component inside a deterministic system.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;That means the surrounding workflow still matters:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What event triggers the loop&lt;/li&gt;
&lt;li&gt;What context the classifier receives&lt;/li&gt;
&lt;li&gt;What actions are available after classification&lt;/li&gt;
&lt;li&gt;How state is updated&lt;/li&gt;
&lt;li&gt;How duplicate processing is avoided&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is the mindset shift I find most useful.&lt;/p&gt;

&lt;h4&gt;
  
  
  What makes this Loop Engineering and not just automation
&lt;/h4&gt;

&lt;p&gt;&lt;strong&gt;This is an important question.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If all I did was trigger a webhook after failure and create a static Jira ticket every time, that would be automation. Useful, yes, but still basic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What pushes this toward Loop Engineering is the combination of:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Autonomous triggering&lt;/li&gt;
&lt;li&gt;AI based classification&lt;/li&gt;
&lt;li&gt;Conditional routing&lt;/li&gt;
&lt;li&gt;External action through connectors&lt;/li&gt;
&lt;li&gt;Persistent state to avoid reprocessing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In other words, the system is not just reacting. It is making decisions inside a loop and carrying those decisions forward until the workflow reaches a stable outcome.&lt;/p&gt;

&lt;h4&gt;
  
  
  Where I think developers should start
&lt;/h4&gt;

&lt;p&gt;If you want to experiment with Loop Engineering, do not start with an overly ambitious “build me a fully autonomous engineering org” idea. Start with a narrow, annoying, repeatable piece of toil.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Good candidates look like this:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CI failure triage&lt;/li&gt;
&lt;li&gt;Incident labeling and routing&lt;/li&gt;
&lt;li&gt;Support ticket classification&lt;/li&gt;
&lt;li&gt;PR summarization and assignment&lt;/li&gt;
&lt;li&gt;Infrastructure drift detection with notifications&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The key is to pick something with a clear trigger, a small number of decisions, and obvious actions that can be taken through connectors.&lt;/p&gt;

&lt;p&gt;That is exactly why I picked CI failures. The signal is clear, the need is real, and the workflow can be tested easily.&lt;/p&gt;

&lt;h4&gt;
  
  
  My biggest takeaway from building this
&lt;/h4&gt;

&lt;p&gt;My biggest takeaway is that Loop Engineering is less about “cool AI agents” and more about system design.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The interesting part is not writing clever prompts over and over. The interesting part is designing a loop where:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;events are captured reliably&lt;/li&gt;
&lt;li&gt;decisions are made with context&lt;/li&gt;
&lt;li&gt;actions happen automatically&lt;/li&gt;
&lt;li&gt;state is persisted for future runs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once I think of it that way, the concept becomes much less vague.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Loop Engineering&lt;/strong&gt; is basically me removing myself from the middle of repetitive decision cycles and replacing that role with a structured autonomous system. That system does not just answer a prompt. It keeps working until the job is done.&lt;/p&gt;

&lt;p&gt;And for developers, that is where things start getting really interesting.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>productivity</category>
      <category>tutorial</category>
      <category>automation</category>
    </item>
    <item>
      <title>Auto Assign JIRA Bugs &amp; Fix Them Using AI Agents in Minutes!</title>
      <dc:creator>Pavan Belagatti</dc:creator>
      <pubDate>Mon, 22 Jun 2026 14:17:18 +0000</pubDate>
      <link>https://dev.to/pavanbelagatti/auto-assign-jira-bugs-fix-them-using-ai-agents-in-minutes-4mif</link>
      <guid>https://dev.to/pavanbelagatti/auto-assign-jira-bugs-fix-them-using-ai-agents-in-minutes-4mif</guid>
      <description>&lt;p&gt;Agentic Engineering gets really interesting when it stops being a buzzword and starts solving painfully boring problems that waste real engineering time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;One of the worst offenders is bug triage.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A bug gets created in Jira. Nobody owns it yet. Nobody gets notified. It sits there while something important is broken, support starts hearing about it, and the engineering team only notices after the noise gets loud enough. That is not a tooling problem in isolation. It is an ownership and context problem.&lt;/p&gt;

&lt;p&gt;This is exactly where &lt;strong&gt;&lt;em&gt;Agentic Engineering&lt;/em&gt;&lt;/strong&gt; shines.&lt;/p&gt;

&lt;p&gt;Instead of asking a human to inspect every new bug, guess which service it belongs to, find the owning team, update the ticket, and then notify the right people, I can hand that job to an AI agent that already understands my engineering catalog. The result is faster routing, fewer orphaned tickets, and far less manual overhead.&lt;/p&gt;

&lt;p&gt;In this setup, a newly created Jira bug is automatically analyzed, matched to the most likely service, linked to the right team, updated in Jira, and if confidence is low, escalated to Slack for human review. That is practical Agentic Engineering. It is not flashy for the sake of it. It is useful.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/STQ2bDtlixc"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  The real problem with unassigned bugs
&lt;/h2&gt;

&lt;p&gt;Most teams do not ignore bugs because they are careless. They ignore bugs because the process does not scale.&lt;/p&gt;

&lt;p&gt;When a bug lands in Jira, ownership is often missing. Someone has to manually inspect the title and description, understand which part of the system is affected, map that to a service, and then map the service to a team. On a small team, this is annoying. At scale, it becomes a bottleneck.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The cost is bigger than just a messy backlog.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bugs remain unassigned for too long.&lt;/li&gt;
&lt;li&gt;Customer-facing issues take longer to reach the correct team.&lt;/li&gt;
&lt;li&gt;Support channels become the unofficial alerting system.&lt;/li&gt;
&lt;li&gt;Engineering managers lose time chasing ownership instead of fixing problems.&lt;/li&gt;
&lt;li&gt;Context gets scattered across Jira, Slack, repos, and service catalogs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If I want faster incident response and cleaner execution, I need bugs to arrive with context and ownership attached. That is the promise of Agentic Engineering in this workflow.&lt;/p&gt;

&lt;h2&gt;
  
  
  What this Agentic Engineering workflow does
&lt;/h2&gt;

&lt;p&gt;The workflow starts with the only manual step in the entire process: someone creates a bug in Jira.&lt;/p&gt;

&lt;p&gt;After that, &lt;strong&gt;automation takes over&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The bug syncs into &lt;a href="https://bit.ly/Try-Port-For-Free" rel="noopener noreferrer"&gt;Port&lt;/a&gt;, which acts as the context layer for my engineering system. An AI agent then looks at the issue, queries the software catalog, checks services, repositories, users, teams, and related entities, and decides who most likely owns the problem.&lt;/p&gt;

&lt;p&gt;From there, the workflow branches into three outcomes:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Update the entity in Port&lt;/strong&gt;&lt;br&gt;
If the agent is confident enough, it links the issue to the discovered service and owning team.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Update the Jira ticket&lt;/strong&gt;&lt;br&gt;
It adds a comment explaining the reasoning and applies a label that indicates whether ownership was successfully resolved.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Send a Slack alert when confidence is low&lt;/strong&gt;&lt;br&gt;
If the match is weak, the bug is pushed to a triage channel so a human can make the final call.&lt;/p&gt;

&lt;p&gt;That is a solid Agentic Engineering pattern because the agent is not acting blindly. It is operating on top of context, making a decision, and gracefully falling back to humans when confidence drops below the threshold.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fl4p40y1nnop32ywjj4k8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fl4p40y1nnop32ywjj4k8.png" alt="Auto Assign JIRA Bugs" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the context layer matters
&lt;/h2&gt;

&lt;p&gt;This part is easy to underestimate.&lt;/p&gt;

&lt;p&gt;AI agents are only useful when they have the right context. If my agent does not know what services exist, which repositories map to those services, which teams own them, or how Jira issues relate to that model, then it is just guessing.&lt;/p&gt;

&lt;p&gt;That is why this workflow uses &lt;a href="https://bit.ly/Try-Port-For-Free" rel="noopener noreferrer"&gt;Port&lt;/a&gt; as the context layer. The catalog becomes the system of understanding for the agent.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In practical terms, the agent can inspect information such as:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Services&lt;/li&gt;
&lt;li&gt;Repositories&lt;/li&gt;
&lt;li&gt;Teams&lt;/li&gt;
&lt;li&gt;Users&lt;/li&gt;
&lt;li&gt;Jira issues&lt;/li&gt;
&lt;li&gt;Relationships across all of the above&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is where Agentic Engineering becomes more than automation. The agent is not just reacting to an event. It is reasoning over structured engineering context.&lt;/p&gt;

&lt;p&gt;When the title of a bug clearly points to a known service, ownership can be resolved in seconds. When the title is vague and the signal is weak, the same system knows enough to avoid pretending certainty. That is exactly how these workflows should behave.&lt;/p&gt;

&lt;h2&gt;
  
  
  How I set up the foundation
&lt;/h2&gt;

&lt;p&gt;To make this work, I need a few building blocks in place.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Create the data model
&lt;/h3&gt;

&lt;p&gt;The setup starts with blueprints in &lt;a href="https://bit.ly/Try-Port-For-Free" rel="noopener noreferrer"&gt;Port&lt;/a&gt;. The main ones used here are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Jira user blueprint&lt;/li&gt;
&lt;li&gt;Jira project blueprint&lt;/li&gt;
&lt;li&gt;Jira issue blueprint&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These blueprints define the structure of the entities the workflow will rely on. Once those are created, the Jira integration mapping needs to be updated so the right issue data is synced into Port in a useful shape.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz88d3a6ep6p91yjsof5b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fz88d3a6ep6p91yjsof5b.png" alt="setup modal" width="800" height="438"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Connect Jira
&lt;/h3&gt;

&lt;p&gt;Jira has to be connected as a data source so bugs created there can automatically sync into Port. Once connected, new issues appear inside the catalog and can trigger automations.&lt;/p&gt;

&lt;p&gt;Without that sync, the rest of the flow never starts.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Configure external tools
&lt;/h3&gt;

&lt;p&gt;Slack is used for fallback alerts when the AI agent cannot confidently determine ownership. That means I need a Slack app and the bot token available as a secret.&lt;/p&gt;

&lt;p&gt;Jira API access also needs to be configured so comments and labels can be written back to the ticket. Those credentials are stored as secrets in Port.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Create self service actions
&lt;/h3&gt;

&lt;p&gt;The workflow uses several actions behind the scenes, including:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Link issue to discovered service and team&lt;/li&gt;
&lt;li&gt;Add a Jira comment&lt;/li&gt;
&lt;li&gt;Add a Jira label&lt;/li&gt;
&lt;li&gt;Send a Slack notification&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;These actions are what the AI agent and automation can invoke after making a decision.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Create the AI agent
&lt;/h3&gt;

&lt;p&gt;The actual agent is responsible for service and team auto discovery. It uses model context protocol tools to query the catalog and run actions.&lt;/p&gt;

&lt;p&gt;This is a great example of Agentic Engineering because the agent is doing more than classification. It is pulling context, evaluating confidence, and choosing the correct operational path.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Create the automation
&lt;/h3&gt;

&lt;p&gt;Finally, I create an automation that runs when a Jira bug is created. That automation passes the issue into the AI agent so the workflow begins immediately after sync.&lt;/p&gt;

&lt;h3&gt;
  
  
  What good Agentic Engineering looks like in practice
&lt;/h3&gt;

&lt;p&gt;A lot of AI workflows sound impressive until you ask one question: what happens when the system is unsure?&lt;/p&gt;

&lt;p&gt;That is where this setup is strong.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The AI agent uses a confidence threshold of 70 percent.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If confidence is above 70 percent, the issue is linked to the right service and team, the Jira ticket is updated, and the label shows that AI resolved ownership.&lt;/li&gt;
&lt;li&gt;If confidence is below 70 percent, the issue is marked as needing ownership and a Slack triage alert is sent.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is sane operational design.&lt;/p&gt;

&lt;p&gt;Good Agentic Engineering is not about forcing AI into every decision. It is about allowing the agent to act where context is strong and handing control back to humans where ambiguity remains.&lt;/p&gt;

&lt;h3&gt;
  
  
  Example 1: a clear bug gets assigned automatically
&lt;/h3&gt;

&lt;p&gt;To test the workflow, I create a bug whose title clearly points to a known service. The issue mentions the shipment service breaking on the checkout page.&lt;/p&gt;

&lt;p&gt;That gives the agent strong signal.&lt;/p&gt;

&lt;p&gt;Once the issue syncs into Port, the automation runs, and within moments the bug is enriched with ownership data. The workflow links it to the shipment service, identifies the platform team as the owner, comments back in Jira with the reasoning, and applies a label indicating that AI assigned it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Feknodb2r85119jmcijit.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Feknodb2r85119jmcijit.png" alt="AI Assignment" width="799" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The reasoning matters here. The system does not just say, trust me. It explains why the match was made. In this case, the issue title strongly resembles the shipment service in the catalog, and the service already has an explicit owning team defined.&lt;/p&gt;

&lt;p&gt;That kind of explainability is valuable because it makes automated triage easier to trust and easier to audit.&lt;/p&gt;

&lt;p&gt;Also notice what did not happen.&lt;/p&gt;

&lt;p&gt;No Slack alert was sent because the confidence was high enough. That keeps the triage channel clean and reserved for genuinely ambiguous cases.&lt;/p&gt;

&lt;h3&gt;
  
  
  Example 2: a vague bug gets escalated for human review
&lt;/h3&gt;

&lt;p&gt;Next, I test a more generic issue. The bug title simply says the checkout page is crashing.&lt;/p&gt;

&lt;p&gt;Now the signal is weak.&lt;/p&gt;

&lt;p&gt;The title does not clearly map to a specific service. The AI agent still analyzes it, but this time it cannot determine ownership with enough confidence. So instead of making a shaky assignment, it does two things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It labels the ticket as needing ownership.&lt;/li&gt;
&lt;li&gt;It sends a Slack alert to the triage channel.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2re3jrn1hd0xpnvfofxv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F2re3jrn1hd0xpnvfofxv.png" alt="Bug assigned" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The Jira comment explains that the issue was analyzed for automatic assignment, but no service or team could be confidently identified. The Slack message carries the same outcome, along with useful metadata like issue title, type, status, priority, and confidence score.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj5kbg8dnvzct7g47p21t.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fj5kbg8dnvzct7g47p21t.png" alt="JIRA slack" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is exactly the sort of fallback I want from Agentic Engineering. The system helps by doing the first pass instantly, but it does not bluff. It escalates uncertainty cleanly.&lt;/p&gt;

&lt;h3&gt;
  
  
  The operational benefits are bigger than they look
&lt;/h3&gt;

&lt;p&gt;At first glance, this might seem like a narrow bug assignment automation. It is actually more important than that.&lt;/p&gt;

&lt;p&gt;Once I have this kind of Agentic Engineering workflow in place, I get several compounding benefits:&lt;/p&gt;

&lt;h4&gt;
  
  
  Faster response time
&lt;/h4&gt;

&lt;p&gt;Issues reach the right team much sooner. Even when ownership is unclear, the triage path kicks in immediately instead of leaving bugs idle.&lt;/p&gt;

&lt;h4&gt;
  
  
  Less manual triage work
&lt;/h4&gt;

&lt;p&gt;Engineering leads and support teams spend less time babysitting tickets and more time solving problems.&lt;/p&gt;

&lt;h4&gt;
  
  
  Cleaner Jira hygiene
&lt;/h4&gt;

&lt;p&gt;Labels, comments, and linked entities are applied consistently. That makes the issue tracker much easier to trust.&lt;/p&gt;

&lt;h4&gt;
  
  
  Better use of human attention
&lt;/h4&gt;

&lt;p&gt;Humans only step in when the agent lacks confidence. That is exactly where human judgment is most useful.&lt;/p&gt;

&lt;h4&gt;
  
  
  More leverage from your software catalog
&lt;/h4&gt;

&lt;p&gt;A service catalog should not just sit there as documentation. In Agentic Engineering, it becomes the context brain behind operational workflows.&lt;/p&gt;

&lt;h3&gt;
  
  
  What makes this an Agentic Engineering workflow instead of plain automation
&lt;/h3&gt;

&lt;p&gt;This distinction matters.&lt;/p&gt;

&lt;p&gt;Regular automation is usually deterministic. If X happens, do Y. That is useful, but limited.&lt;/p&gt;

&lt;p&gt;Agentic Engineering adds a layer of context aware reasoning. In this workflow, the system is not simply reacting to bug creation by assigning a fixed team. It is evaluating the issue against an engineering knowledge graph, making a probabilistic decision, recording its reasoning, and choosing between multiple outcomes.&lt;/p&gt;

&lt;p&gt;That means it behaves more like an intelligent operator than a static rule.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The core characteristics here are:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Awareness of services, teams, repos, and issue data&lt;/li&gt;
&lt;li&gt;Reasoning about which service is most likely involved&lt;/li&gt;
&lt;li&gt;Action taking across Port, Jira, and Slack&lt;/li&gt;
&lt;li&gt;Fallback logic when certainty is low&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is why I like calling this Agentic Engineering. It is grounded, operational, and useful for software teams right now.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where to take this next
&lt;/h3&gt;

&lt;p&gt;Once this pattern works for bug ownership, I can extend the same approach into many other engineering workflows.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For example, the same context-rich model could be used to&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Route incidents to the correct team&lt;/li&gt;
&lt;li&gt;Suggest likely fixes based on service context&lt;/li&gt;
&lt;li&gt;Create follow up tasks automatically&lt;/li&gt;
&lt;li&gt;Enrich support tickets with engineering metadata&lt;/li&gt;
&lt;li&gt;Trigger remediation workflows based on issue type&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The interesting part is not just the single automation. It is the pattern.&lt;/p&gt;

&lt;p&gt;Build a reliable context layer. Give agents access to that context. Let them take bounded actions. Add confidence thresholds and human review paths. Repeat that pattern across your SDLC.&lt;/p&gt;

&lt;p&gt;That is how Agentic Engineering becomes an actual system, not a collection of disconnected demos.&lt;/p&gt;

&lt;h4&gt;
  
  
  My takeaway
&lt;/h4&gt;

&lt;p&gt;If bugs are sitting in Jira without owners, the answer is not to ask people to triage faster. The answer is to redesign the flow so ownership discovery happens automatically.&lt;/p&gt;

&lt;p&gt;This Agentic Engineering workflow does exactly that.&lt;/p&gt;

&lt;p&gt;A bug gets created. The issue syncs into the context layer. The AI agent analyzes the issue against the software catalog. If confidence is high, the service and team are assigned automatically. If confidence is low, the system raises a Slack alert and asks for help.&lt;/p&gt;

&lt;p&gt;Simple. Fast. Useful.&lt;/p&gt;

&lt;p&gt;If I were looking for a practical place to start with Agentic Engineering, this is the kind of workflow I would build first. It removes manual work, improves response speed, and proves the value of context-aware agents in a way the whole engineering team can feel immediately.&lt;/p&gt;

&lt;p&gt;The best next step is to pick one repetitive triage problem in your own stack and apply the same pattern. Start small, wire in the context, set a confidence threshold, and let the agent earn trust through real operational wins.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://bit.ly/Try-Port-For-Free" rel="noopener noreferrer"&gt;Try Port for FREE!&lt;/a&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>softwareengineering</category>
      <category>tutorial</category>
      <category>devops</category>
    </item>
    <item>
      <title>Agentic Observability: How I Wired a Real App with Dynatrace MCP in Minutes!</title>
      <dc:creator>Pavan Belagatti</dc:creator>
      <pubDate>Mon, 01 Jun 2026 07:16:07 +0000</pubDate>
      <link>https://dev.to/pavanbelagatti/agentic-observability-how-i-wired-a-real-app-with-dynatrace-mcp-in-minutes-1p02</link>
      <guid>https://dev.to/pavanbelagatti/agentic-observability-how-i-wired-a-real-app-with-dynatrace-mcp-in-minutes-1p02</guid>
      <description>&lt;p&gt;Every engineering team runs into the same annoying problem sooner or later. Monitoring tells you that something is broken, but it usually stops right there. You can see error rates. You can see latency spikes. You can see failed requests. But the questions that matter during an incident are often still unanswered.&lt;/p&gt;

&lt;p&gt;Who owns this service? What depends on it? Where is the runbook? Which Slack channel should I use? Is this a real outage or a known failure mode?&lt;/p&gt;

&lt;p&gt;That gap is exactly why I put together this small Agentic Observability demo. I built a tiny shopping app, instrumented it with OpenTelemetry, sent the telemetry into Dynatrace, and then used &lt;a href="https://auth.getport.io?utm_source=devto&amp;amp;utm_medium=advocacy&amp;amp;utm_campaign=DynatraceMCP" rel="noopener noreferrer"&gt;Port&lt;/a&gt; as the context layer so I could connect operational signals with engineering knowledge. The result is a much more useful troubleshooting workflow. Instead of staring at dashboards and guessing, I can ask what is happening and get back both live health data and human context in one place.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/O7xspYLKh7U"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;This setup is intentionally small, but it maps really well to the kind of confusion that happens in real systems. The app has products, a cart, checkout flow, and a few baked-in failure scenarios so the observability story actually has something interesting to surface.&lt;/p&gt;

&lt;h2&gt;
  
  
  The real problem with observability today
&lt;/h2&gt;

&lt;p&gt;Traditional observability is good at detection. It can tell me that a service is unhealthy, response times are increasing, or failures are climbing. That is valuable, of course. But during incident response, detection is only the starting point.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The painful part begins immediately after that.&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;I need to know which team owns the service.&lt;/li&gt;
&lt;li&gt;I need to know the service tier and whether it is business critical.&lt;/li&gt;
&lt;li&gt;I need to understand upstream and downstream dependencies.&lt;/li&gt;
&lt;li&gt;I need the right runbook.&lt;/li&gt;
&lt;li&gt;I need to know how to contact the people who can fix it.&lt;/li&gt;
&lt;li&gt;I need enough context to understand whether the anomaly is expected, accidental, or part of a test.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is where &lt;strong&gt;Agentic Observability&lt;/strong&gt; becomes interesting. The goal is not just to collect telemetry. The goal is to make the telemetry actionable by connecting it to the operational and organizational context around the system.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvg0mhxzddd84rtx5k245.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvg0mhxzddd84rtx5k245.webp" alt="Agentic Observability" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The demo architecture at a glance
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd4y7q9pyyrrjtzm0x3g9.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd4y7q9pyyrrjtzm0x3g9.webp" alt="shop demo" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I kept the demo simple on purpose. There are only three major pieces involved, but together they create a much stronger workflow than any single tool would provide alone.&lt;/p&gt;

&lt;p&gt;A Flask shopping app that simulates realistic user behavior and failures.&lt;br&gt;
Dynatrace to ingest traces and analyze service health, latency, logs, and errors.&lt;br&gt;
Port as the context layer, storing service ownership, tier, runbooks, Slack channels, and related metadata.&lt;/p&gt;

&lt;p&gt;The connection point between the observability platform and the context layer is the MCP connector in Port. I used that to connect the Dynatrace MCP server, which lets Port access live monitoring data while still grounding the experience in engineering context.&lt;/p&gt;

&lt;p&gt;That combination is really the whole idea behind this version of Agentic Observability. Dynatrace knows what is happening technically. Port knows what that service means inside the organization.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I built: a tiny Flask e-commerce app
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsfa9ak3smq9axwchjajn.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsfa9ak3smq9axwchjajn.webp" alt="Tiny shopping app" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The application itself is intentionally modest. It is a small e-commerce style service with a few common user actions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Browsing products&lt;/li&gt;
&lt;li&gt;Adding items to the cart&lt;/li&gt;
&lt;li&gt;Checking out&lt;/li&gt;
&lt;li&gt;Viewing orders&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is not meant to be production-grade commerce software. It is just realistic enough to behave like a real service and produce interesting telemetry.&lt;/p&gt;

&lt;p&gt;I also added fake traffic and fake failures into the flow. That mattered because I did not want a perfect demo where everything stays green all the time. Real systems fail in messy ways, and a good Agentic Observability setup should help make sense of that mess.&lt;/p&gt;

&lt;p&gt;Some checkout flows succeed. Some fail. Some traffic is generated artificially. The point is to create enough activity that the tools have something meaningful to detect and explain.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Auto-instrument the app with OpenTelemetry
&lt;/h3&gt;

&lt;p&gt;The first layer is instrumentation. I wrapped the Flask app with OpenTelemetry so requests automatically emit traces. I did not need to write a bunch of custom tracing logic for every endpoint. That keeps the setup cleaner and closer to how I would want to instrument a real service quickly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Once that was in place, every request moving through the shop could generate telemetry data, including&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Request traces&lt;/li&gt;
&lt;li&gt;Errors&lt;/li&gt;
&lt;li&gt;Latency information&lt;/li&gt;
&lt;li&gt;Operational signals around the application flow&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is the foundation. Without it, there is no visibility into what the app is actually doing.&lt;/p&gt;

&lt;p&gt;Step 2: Stream traces into Dynatrace&lt;/p&gt;

&lt;p&gt;After instrumentation, the traces stream directly into Dynatrace. Dynatrace auto-detects the service and begins tracking the health of the application in real time.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For this demo, that meant I could quickly see:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The service showing up as an active monitored workload&lt;/li&gt;
&lt;li&gt;Traffic spikes from the generated activity&lt;/li&gt;
&lt;li&gt;Error behavior during intentional checkout failures&lt;/li&gt;
&lt;li&gt;Latency and service-level patterns over time&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This part is classic observability. Dynatrace is doing exactly what an observability platform should do: gather the signals, analyze them, and make abnormal behavior visible.&lt;/p&gt;

&lt;p&gt;But again, raw visibility is not the whole story.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyqdecejchyhgjwnpzjqf.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyqdecejchyhgjwnpzjqf.webp" alt="shop app" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Add the missing context in &lt;a href="https://auth.getport.io?utm_source=devto&amp;amp;utm_medium=advocacy&amp;amp;utm_campaign=DynatraceMCP" rel="noopener noreferrer"&gt;Port&lt;/a&gt;
&lt;/h3&gt;

&lt;p&gt;This is where things get a lot more useful.&lt;/p&gt;

&lt;p&gt;I modeled the service in Port. Port acts as an agentic developer platform and, in this setup, it works as a context layer over the telemetry coming from Dynatrace. That context includes the kind of information engineers usually have to hunt down manually during an incident.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;For the service, I stored details like:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Owner of the service&lt;/li&gt;
&lt;li&gt;Tier or criticality level&lt;/li&gt;
&lt;li&gt;Environment&lt;/li&gt;
&lt;li&gt;Runbook&lt;/li&gt;
&lt;li&gt;Slack channel for communication&lt;/li&gt;
&lt;li&gt;Dependencies related to the service&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is the missing half of incident response. When a metric turns red, I do not want to begin a scavenger hunt. I want the operational signal and the human context tied together.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5me03ashy9srpr2c0f4v.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5me03ashy9srpr2c0f4v.webp" alt="agentic observability" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  How the Dynatrace MCP server fits into the workflow
&lt;/h3&gt;

&lt;p&gt;The Port MCP connector is what ties everything together. I used it to connect the Dynatrace MCP server into Port, which means Port can reach into Dynatrace when needed and pull live monitoring data as part of a contextual query.&lt;/p&gt;

&lt;p&gt;That matters because now I am not bouncing between disconnected tools mentally. &lt;strong&gt;Instead, Port can combine:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Its own service metadata&lt;/li&gt;
&lt;li&gt;Ownership and operational details&lt;/li&gt;
&lt;li&gt;Live health information from Dynatrace&lt;/li&gt;
&lt;li&gt;Relevant answers returned through agentic queries&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://auth.getport.io?utm_source=devto&amp;amp;utm_medium=advocacy&amp;amp;utm_campaign=DynatraceMCP" rel="noopener noreferrer"&gt;Port&lt;/a&gt; supports multiple data source patterns, including APIs, GitOps, infrastructure-as-code, web integrations, and MCP servers. For this demo, the Dynatrace MCP integration was the key piece because it let me bridge observability data and service context directly.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmbqpn9rusa7utrby3eoz.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmbqpn9rusa7utrby3eoz.webp" alt="dynatrace" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Running the app and generating failures
&lt;/h3&gt;

&lt;p&gt;Once the shop app was running locally, I exercised the common paths: browse products, add them to the cart, and go through checkout. I also generated some fake user activity and deliberately introduced failures during checkout.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;That created the exact kind of mixed operational picture I wanted:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Normal requests&lt;/li&gt;
&lt;li&gt;Confirmed orders&lt;/li&gt;
&lt;li&gt;Periodic failures&lt;/li&gt;
&lt;li&gt;Traffic increases over time&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F08z2ohv652k20w3odgay.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F08z2ohv652k20w3odgay.webp" alt="orders view" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In the orders view, I could see the system state changing as synthetic traffic and failures were happening. In Dynatrace, the service activity became visible as spikes and behavioral changes. That gave me enough signal to test whether the full Agentic Observability flow could actually explain what was going on.&lt;/p&gt;

&lt;h3&gt;
  
  
  What the agentic query experience looks like
&lt;/h3&gt;

&lt;p&gt;After connecting Dynatrace and Port, I could ask a plain-language question about the service rather than manually piecing everything together from dashboards and documents.&lt;/p&gt;

&lt;p&gt;I queried the system about what was happening with the demo service. Port AI, which is the native chat experience inside Port, then began collecting data from both Port and Dynatrace in parallel.&lt;/p&gt;

&lt;p&gt;That is an important detail. It was not just answering from one static metadata record. It was combining two different kinds of information:&lt;/p&gt;

&lt;p&gt;Entity context from Port, such as owner, tier, environment, runbook, and communication channel&lt;br&gt;
Health metrics from Dynatrace, such as traffic, recent behavior, and failures&lt;/p&gt;

&lt;p&gt;That is the essence of Agentic Observability. The system is not merely showing a chart. It is assembling the context needed to reason about the chart.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff3u4zw9ysudfnqlgjsyu.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff3u4zw9ysudfnqlgjsyu.webp" alt="Port chat" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The answer gets a lot more useful than a red metric
&lt;/h3&gt;

&lt;p&gt;Once the query completed, I got back a consolidated view of the service. &lt;br&gt;
&lt;strong&gt;It identified the service and surfaced key metadata such as:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The owning team&lt;/li&gt;
&lt;li&gt;The service tier&lt;/li&gt;
&lt;li&gt;The environment&lt;/li&gt;
&lt;li&gt;The communication channel&lt;/li&gt;
&lt;li&gt;The runbook location&lt;/li&gt;
&lt;li&gt;Whether there were any open incidents&lt;/li&gt;
&lt;li&gt;Recent traffic behavior over the last couple of hours&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is already a huge improvement over standard monitoring alone. Instead of only knowing that a service is active or unhealthy, I immediately know how that service fits into the engineering organization.&lt;/p&gt;

&lt;p&gt;Then I asked a deeper follow-up question about the cause of failures.&lt;/p&gt;

&lt;p&gt;The system checked the logs and correlated what it found. The result was actually reassuring: the error was not some mysterious production bug. It was an intentionally hardcoded failure in the demo, resulting in a 500 internal server error during checkout.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;That answer is exactly what I wanted to prove. With a good Agentic Observability flow, I should be able to distinguish quickly between:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A real incident&lt;/li&gt;
&lt;li&gt;A synthetic test&lt;/li&gt;
&lt;li&gt;A known intentional failure mode&lt;/li&gt;
&lt;li&gt;An unexpected regression&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5drf4mtzqc9ir2tqoke3.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5drf4mtzqc9ir2tqoke3.webp" alt="observability with AI" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Why this pattern matters for engineering teams
&lt;/h3&gt;

&lt;p&gt;The demo is small, but the bottleneck it addresses is very real.&lt;/p&gt;

&lt;p&gt;In many teams, observability data lives in one place, service ownership in another, runbooks in another, incident tools somewhere else, and tribal knowledge in Slack or people’s heads. During an outage, every extra click and every missing piece of context adds delay.&lt;/p&gt;

&lt;p&gt;This approach reduces that friction by bringing the pieces together.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agentic Observability&lt;/strong&gt; is useful because it helps answer the operational questions that come right after detection:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What failed?&lt;/li&gt;
&lt;li&gt;Why is it failing?&lt;/li&gt;
&lt;li&gt;Who owns it?&lt;/li&gt;
&lt;li&gt;What should happen next?&lt;/li&gt;
&lt;li&gt;Where is the documentation?&lt;/li&gt;
&lt;li&gt;Is this service connected to other important systems?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of forcing an engineer to manually join that information, the platform can do it for them.&lt;/p&gt;

&lt;h3&gt;
  
  
  What Port contributes beyond simple metadata
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0zir6afbzsrq26oz4cb5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0zir6afbzsrq26oz4cb5.png" alt="Port context lake" width="800" height="357"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It is easy to think of &lt;a href="https://auth.getport.io?utm_source=devto&amp;amp;utm_medium=advocacy&amp;amp;utm_campaign=DynatraceMCP" rel="noopener noreferrer"&gt;Port&lt;/a&gt; as just a catalog for services, but in this setup it does something more important. It serves as a reliable operational context layer for engineering teams.&lt;/p&gt;

&lt;p&gt;Because the service entity in Port includes ownership, deployment-related knowledge, team details, and related service information, Port becomes the right place to anchor agentic queries. Dynatrace provides the live signal. Port provides the meaning around the signal.&lt;/p&gt;

&lt;p&gt;That is why the answers become much more actionable. The system is not simply observing. It is interpreting the observation in the context of how the organization actually works.&lt;/p&gt;

&lt;h3&gt;
  
  
  You can extend the same pattern to other tools
&lt;/h3&gt;

&lt;p&gt;Although this demo used Dynatrace, the broader pattern is not limited to one observability vendor. Port’s MCP connector approach makes it possible to connect multiple developer tools and bring them into the same context-rich workflow.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I specifically called out that the same idea can be extended to tools like:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PagerDuty&lt;/li&gt;
&lt;li&gt;New Relic&lt;/li&gt;
&lt;li&gt;Other MCP-enabled developer and operations tools&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So the bigger idea here is not “use one tool for everything.” The bigger idea is “build a context layer that can speak to the right tools and answer engineering questions with the full picture.”&lt;/p&gt;

&lt;h3&gt;
  
  
  The data flow behind this Agentic Observability demo
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;The end-to-end flow for the demo is straightforward:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A shopper interacts with the Flask application.&lt;/li&gt;
&lt;li&gt;OpenTelemetry captures traces as requests move through the system.&lt;/li&gt;
&lt;li&gt;Dynatrace ingests and analyzes those traces, logs, and errors.&lt;/li&gt;
&lt;li&gt;The Dynatrace MCP server is connected into Port.&lt;/li&gt;
&lt;li&gt;Port combines live monitoring data with service context.&lt;/li&gt;
&lt;li&gt;Agentic queries return an operationally meaningful answer instead of isolated raw metrics.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That pipeline is the practical core of Agentic Observability. Instrument the app, collect the signals, connect the tools, add the missing human context, and let engineers query the system in a way that reflects how incidents actually happen.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9o8g3d33h1d3331hj9x4.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9o8g3d33h1d3331hj9x4.webp" alt="architectural flow" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  What I liked most about this setup
&lt;/h4&gt;

&lt;p&gt;The most useful part was not the dashboard itself. It was the reduction in ambiguity.&lt;/p&gt;

&lt;p&gt;When something breaks, I do not want five tabs open and three separate searches just to figure out basic ownership and intent. &lt;br&gt;
&lt;strong&gt;I want one place that can tell me&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What changed&lt;/li&gt;
&lt;li&gt;What is unhealthy&lt;/li&gt;
&lt;li&gt;Whether the failure is real or expected&lt;/li&gt;
&lt;li&gt;Who needs to be involved&lt;/li&gt;
&lt;li&gt;What the next step should be&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is why this style of Agentic Observability feels promising. It closes the gap between telemetry and action.&lt;/p&gt;

&lt;h4&gt;
  
  
  Final thoughts
&lt;/h4&gt;

&lt;p&gt;This demo was intentionally small, but the lesson is not small at all. Good observability should do more than report failures. It should help engineering teams respond with confidence.&lt;/p&gt;

&lt;p&gt;Dynatrace handled the telemetry side beautifully. &lt;a href="https://auth.getport.io?utm_source=devto&amp;amp;utm_medium=advocacy&amp;amp;utm_campaign=DynatraceMCP" rel="noopener noreferrer"&gt;Port&lt;/a&gt; added the context that observability platforms often do not have on their own. Connecting the two through the MCP layer created a workflow where I could ask what is happening with a service and get back something genuinely useful.&lt;/p&gt;

&lt;p&gt;That, to me, is the practical value of Agentic Observability. It is not just about smarter dashboards or nicer charts. It is about turning system signals into answers that are grounded in ownership, dependencies, documentation, and action.&lt;/p&gt;

&lt;p&gt;If you are trying to make incident response less chaotic, this pattern is absolutely worth exploring.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>developers</category>
      <category>mcp</category>
    </item>
    <item>
      <title>Context is what you are missing in your AI Agents</title>
      <dc:creator>Pavan Belagatti</dc:creator>
      <pubDate>Thu, 14 May 2026 07:38:24 +0000</pubDate>
      <link>https://dev.to/pavanbelagatti/context-is-what-you-are-missing-in-ai-agents-3clj</link>
      <guid>https://dev.to/pavanbelagatti/context-is-what-you-are-missing-in-ai-agents-3clj</guid>
      <description>&lt;p&gt;The biggest flex for developers today is not about coding faster. &lt;br&gt;
It is designing efficient agentic systems &amp;amp; workflows.&lt;/p&gt;

&lt;p&gt;For almost thirty years, software engineering optimized around a single bottleneck: Human in loop at every stage of the SDLC. &lt;/p&gt;

&lt;p&gt;Every tool - IDEs, linters, autocomplete, even early Copilot - assumed a developer was driving and the machine was assisting. Agentic engineering inverts that assumption. The developer becomes the orchestrator; the agents become the drivers. How cool is that, right?&lt;/p&gt;

&lt;p&gt;Look at the SDLC on the left side of this diagram below. Every stage that used to define a senior engineer's week - translating a Jira ticket into a spec, writing the feature, reviewing the PR, fixing the failing test, deploying to staging, triaging the 3 a.m. alert, is now a candidate for delegation. &lt;/p&gt;

&lt;p&gt;Not because agents are smarter than your best engineer, but because they're tireless, parallelizable, and increasingly competent at bounded tasks.&lt;/p&gt;

&lt;p&gt;The system on the right is where the leverage compounds. A single agent running Plan → Code → Review → Ship is useful. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwxgm2t5jze0wvboke73m.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwxgm2t5jze0wvboke73m.png" alt="CONTEXT ENGINEERING" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A fleet of specialized agents - Coder, Reviewer, Tester, Deployer - coordinated by an orchestrator and wired into your real environment (GitHub, CI, Datadog, the codebase) is a force multiplier. This is the shift from "AI as a faster autocomplete" to "AI as a team of junior engineers that never sleep."&lt;/p&gt;




&lt;p&gt;MCP has quickly become the standard for connecting AI agents to the tools where real work happens - Salesforce, AWS, Atlassian, Notion, and a growing ecosystem of 1,000+ servers.&lt;/p&gt;

&lt;p&gt;But here's the uncomfortable truth: connecting agents to tools is easy, doing it at enterprise scale is not.&lt;/p&gt;

&lt;p&gt;When every AI client - Claude, ChatGPT, Gemini, Copilot - wires up its own direct connections to every MCP server it needs, you end up with an N×M sprawl of point-to-point integrations. No central visibility, no unified access control. Credentials scattered across clients, no audit trail when something goes wrong. It works in a demo, it collapses in production.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkk1k1j23o533t3uv9efb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkk1k1j23o533t3uv9efb.png" alt="MCP" width="800" height="943"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The path forward is an MCP Gateway or a connector - a single control plane between your AI clients and the broader MCP ecosystem. &lt;br&gt;
One layer that handles:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Identity &amp;amp; Access Control: who and which agent can do what &lt;/li&gt;
&lt;li&gt;Secret Management: credentials never leak into agent context &lt;/li&gt;
&lt;li&gt;Metrics &amp;amp; Audit Logs: full observability of every tool call &lt;/li&gt;
&lt;li&gt;Content Filtering: guardrails on what flows in and out &lt;/li&gt;
&lt;li&gt;Composite MCP Servers: curated tool bundles for specific use cases&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On one side, your MCP hosts and custom agents built on any framework. &lt;br&gt;
On the other, a governed registry of approved servers ready to plug in.&lt;/p&gt;

&lt;p&gt;MCP unlocks agent capability, a gateway/connector is what makes it safe, scalable, and enterprise-ready.&lt;/p&gt;




&lt;p&gt;You might have built really efficient AI Agents, MCP servers and Skills, but if you don't have a proper context layer to support them, you are wasting your time. &lt;/p&gt;

&lt;p&gt;Yes, whenever I talk to developers, they tell me the same problem - Their agents failing and not providing the contextually relevant responses. They used the skills and even routed everythig through MCP server, but still.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpjow738qbwh0wgtz228r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpjow738qbwh0wgtz228r.png" alt="SKILLS" width="800" height="869"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It is not having a generic vector database. It is not about LLMs, you might still be using highly efficient LLMs. The problem is, your systems are starving for context because you aren't providing them with enough context. &lt;/p&gt;

&lt;p&gt;See, context layer may not be so useful if you are building a generic chatbot or even little advanced RAG application BUT, when you like to automate your engineering or developer workflows, that is where you need a proper context layer. Because, you can't leave everything to the LLM to figure out because LLMs are generic entities and hallucinate and mess up your workflows. &lt;/p&gt;

&lt;p&gt;Hence, when it comes to developer workflows, always have an efficient context layer in place. If you wanna know more about how to get started with a context layer for your developer workflows, ping me. Let's talk :)&lt;/p&gt;

</description>
      <category>ai</category>
      <category>agents</category>
      <category>developers</category>
      <category>productivity</category>
    </item>
    <item>
      <title>I hated 3 a.m. calls, so I automated incident response using AI workflows!</title>
      <dc:creator>Pavan Belagatti</dc:creator>
      <pubDate>Mon, 11 May 2026 06:55:23 +0000</pubDate>
      <link>https://dev.to/pavanbelagatti/i-hated-3-am-calls-so-i-automated-incident-response-using-ai-workflows-1l0l</link>
      <guid>https://dev.to/pavanbelagatti/i-hated-3-am-calls-so-i-automated-incident-response-using-ai-workflows-1l0l</guid>
      <description>&lt;p&gt;Agentic Engineering becomes very real the moment a production alert wakes me up at 3:00 a.m. The alert says the checkout service is down. Revenue is impacted. Orders are failing. And now the clock is ticking.&lt;/p&gt;

&lt;p&gt;In a typical setup, the first part of incident response is not really problem-solving. It is context hunting. I open PagerDuty for the alert, Datadog for metrics and logs, GitHub to check recent deployments, AWS to inspect infrastructure, and Slack to figure out who owns the service right now. By the time I gather enough information to start diagnosing the issue, 30 minutes are already gone.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0hkzroffkfgf3t5y28el.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0hkzroffkfgf3t5y28el.png" alt="engineering chaos" width="800" height="486"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That is the core problem Agentic Engineering solves. Engineers usually know how to troubleshoot. What slows them down is that the context they need is scattered across too many tools, and nobody has stitched those tools together into a useful workflow.&lt;/p&gt;

&lt;p&gt;That is where an agentic engineering platform like &lt;a href="https://port.io?utm_source=medium&amp;amp;utm_medium=advocacy&amp;amp;utm_campaign=triage" rel="noopener noreferrer"&gt;Port&lt;/a&gt; comes in. Instead of forcing me to jump between systems, it keeps a live context layer of services, deployments, incidents, infrastructure, owners, and dependencies. Then AI agents use that context to triage incidents, correlate likely causes, surface ownership, and propose next actions in seconds.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/0gmm8H1ECvI"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Why incident response breaks down in modern engineering teams
&lt;/h2&gt;

&lt;p&gt;Most incident workflows fail long before root cause analysis starts.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fylsfebxl7e5cxcka20nb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fylsfebxl7e5cxcka20nb.png" alt="Incident response" width="800" height="505"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The failure is usually operational fragmentation. Every team has great tools, but each tool only answers one slice of the problem:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PagerDuty tells me what fired&lt;/li&gt;
&lt;li&gt;Datadog tells me what the system is doing&lt;/li&gt;
&lt;li&gt;GitHub tells me what changed&lt;/li&gt;
&lt;li&gt;AWS tells me what the infrastructure looks like&lt;/li&gt;
&lt;li&gt;Slack tells me who might know what is going on&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Individually, these are useful. Together, without orchestration, they create toil.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh6brjbmrwqckyb8ltikk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh6brjbmrwqckyb8ltikk.png" alt="incident response automated" width="800" height="520"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I end up doing repetitive work under pressure:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;tab switching&lt;/li&gt;
&lt;li&gt;copy-pasting links and IDs&lt;/li&gt;
&lt;li&gt;searching for service ownership&lt;/li&gt;
&lt;li&gt;guessing whether a recent deployment caused the incident&lt;/li&gt;
&lt;li&gt;manually building a timeline from disconnected signals&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is why Agentic Engineering matters. It is not just about adding AI to DevOps. It is about giving AI the right operational context so it can take useful action inside engineering workflows.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Agentic Engineering actually looks like in incident&amp;nbsp;response
&lt;/h2&gt;

&lt;p&gt;When I talk about Agentic Engineering, I am talking about systems that do more than summarize text or answer generic questions.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7s4vmlulp9t81ojs29au.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7s4vmlulp9t81ojs29au.png" alt="AI Workflows" width="800" height="877"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;An agentic workflow for incident response should be able to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ingest the alert automatically&lt;/li&gt;
&lt;li&gt;understand which service is affected&lt;/li&gt;
&lt;li&gt;correlate the alert with recent deployments&lt;/li&gt;
&lt;li&gt;identify the owning team or on-call engineer&lt;/li&gt;
&lt;li&gt;pull relevant runbooks and service context&lt;/li&gt;
&lt;li&gt;assess severity and business impact&lt;/li&gt;
&lt;li&gt;suggest remediation options&lt;/li&gt;
&lt;li&gt;send a clean incident summary into collaboration tools like Slack&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;That is a huge shift.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Instead of spending the first 30 minutes gathering information, I can start with a ready-made triage report. Humans still stay in control of the key decisions, but the boring and repetitive context assembly gets automated.&lt;/p&gt;

&lt;h2&gt;
  
  
  The foundation: a live context lake for engineering data
&lt;/h2&gt;

&lt;p&gt;The reason this works is that &lt;a href="https://port.io?utm_source=medium&amp;amp;utm_medium=advocacy&amp;amp;utm_campaign=triage" rel="noopener noreferrer"&gt;Port&lt;/a&gt; maintains what is essentially a live context lake across the engineering stack.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft72c8bhsbpy0jnk9otai.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ft72c8bhsbpy0jnk9otai.png" alt="Agentic workflows" width="800" height="514"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;That includes things like:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;services&lt;/li&gt;
&lt;li&gt;deployments&lt;/li&gt;
&lt;li&gt;incidents&lt;/li&gt;
&lt;li&gt;owners&lt;/li&gt;
&lt;li&gt;infrastructure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once that operational context is centralized, AI agents can reason across systems instead of treating each tool as an isolated island.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fubbcakodx2ueqgco5qti.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fubbcakodx2ueqgco5qti.png" alt="context engineering" width="800" height="518"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is one of the most practical expressions of Agentic Engineering I have seen. The AI is not operating blindly. It has access to structured engineering context, which makes its output far more relevant.&lt;/p&gt;

&lt;h2&gt;
  
  
  Walking through an AI-powered incident triage&amp;nbsp;workflow
&lt;/h2&gt;

&lt;p&gt;Inside &lt;a href="https://port.io?utm_source=medium&amp;amp;utm_medium=advocacy&amp;amp;utm_campaign=triage" rel="noopener noreferrer"&gt;Port&lt;/a&gt;, I can go to the self-service area and create or trigger actions. In this case, the workflow I care about is incident triage automation.&lt;/p&gt;

&lt;p&gt;The action is straightforward: an AI-powered incident triage uses &lt;a href="https://port.io?utm_source=medium&amp;amp;utm_medium=advocacy&amp;amp;utm_campaign=triage" rel="noopener noreferrer"&gt;Port&lt;/a&gt;'s AI agent to analyze incidents, query the catalog, and send formatted results to Slack.&lt;/p&gt;

&lt;p&gt;To simulate a realistic production issue, I trigger an incident with the title:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3e5ysdkgoxqymg2qhk0v.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3e5ysdkgoxqymg2qhk0v.png" alt="trigger workflow" width="800" height="899"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Checkout service returning 500 errors&lt;/strong&gt;&lt;br&gt;
Once I hit Start Triage, the workflow begins immediately.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdicunkpykd2557fsub5i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdicunkpykd2557fsub5i.png" alt="Triage incident" width="800" height="636"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What the workflow does behind the&amp;nbsp;scenes
&lt;/h2&gt;

&lt;p&gt;The sequence is simple but powerful:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Fetch incident details&lt;/li&gt;
&lt;li&gt;Run AI triage analysis&lt;/li&gt;
&lt;li&gt;Update the incident with triage results&lt;/li&gt;
&lt;li&gt;Send the formatted results to Slack&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is exactly what Agentic Engineering should feel like. I trigger a workflow once, and the platform performs the repetitive coordination across systems automatically.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvlurvgquacscehj4n53j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvlurvgquacscehj4n53j.png" alt="Incident automation" width="800" height="453"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What the triage output looks like in&amp;nbsp;Slack
&lt;/h2&gt;

&lt;p&gt;Once the analysis is complete, the incident summary lands in Slack with the kind of structure that is actually useful during an outage.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fka95szaofgou41qm70t2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fka95szaofgou41qm70t2.png" alt="Incident response management" width="800" height="503"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The triage report includes:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Incident title: checkout service returning 500 errors&lt;/li&gt;
&lt;li&gt;Urgency: high&lt;/li&gt;
&lt;li&gt;Priority: P1&lt;/li&gt;
&lt;li&gt;Service: checkout&lt;/li&gt;
&lt;li&gt;Severity: mission critical&lt;/li&gt;
&lt;li&gt;Business impact: 30% order failure&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That alone already saves time, because the incident has been normalized into a shared operational summary.&lt;/p&gt;

&lt;p&gt;But the more interesting part is the context it adds. The system can show insights from Port, identify potentially affected downstream or upstream services, and propose next steps.&lt;/p&gt;

&lt;p&gt;In this example, the frontend service is also affected because of the checkout incident. And the suggested actions are concrete, not vague:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;roll back the order service deployment immediately&lt;/li&gt;
&lt;li&gt;review order API contract changes&lt;/li&gt;
&lt;li&gt;process checkout integration checks&lt;/li&gt;
&lt;li&gt;monitor error rates after rollback&lt;/li&gt;
&lt;li&gt;check integration test coverage between services&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is where Agentic Engineering stops being a buzzword and starts becoming operational leverage. The platform is not just telling me that something is broken. It is helping me reason about what changed, what is impacted, and what I should do next.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fess3vji6jeu8z3a1ntgr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fess3vji6jeu8z3a1ntgr.png" alt="Incident AI workflows" width="800" height="456"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Built-in remediation options make the workflow actionable
&lt;/h2&gt;

&lt;p&gt;A good incident summary is helpful. An actionable incident summary is better.&lt;/p&gt;

&lt;p&gt;In the Slack message, I also get remediation options such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Remediate with Claude&lt;/li&gt;
&lt;li&gt;Investigate in Port&lt;/li&gt;
&lt;li&gt;Roll back deployment&lt;/li&gt;
&lt;li&gt;Update status page&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That matters because incident response is a chain of decisions. If the triage output is separated from the next action, engineers still lose time moving between tools. Agentic Engineering works best when diagnosis and execution are connected.&lt;/p&gt;

&lt;p&gt;I can choose the right level of automation depending on the situation. If human review is needed, I investigate further. If the rollback path is clear, I can move quickly. If customer communication is necessary, the status page update is right there.&lt;/p&gt;

&lt;p&gt;Humans remain in control, but the system removes the coordination burden.&lt;/p&gt;

&lt;h2&gt;
  
  
  Investigating the incident inside&amp;nbsp;Port
&lt;/h2&gt;

&lt;p&gt;When I click Investigate in &lt;a href="https://port.io?utm_source=medium&amp;amp;utm_medium=advocacy&amp;amp;utm_campaign=triage" rel="noopener noreferrer"&gt;Port&lt;/a&gt;, I get a more detailed incident workspace.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F21n6e6fhuxtqr1f8xf6q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F21n6e6fhuxtqr1f8xf6q.png" alt="Investigate incident" width="800" height="483"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This page pulls together the key pieces of information I need:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;incident title&lt;/li&gt;
&lt;li&gt;severity&lt;/li&gt;
&lt;li&gt;description&lt;/li&gt;
&lt;li&gt;impact&lt;/li&gt;
&lt;li&gt;triage summary&lt;/li&gt;
&lt;li&gt;business impact&lt;/li&gt;
&lt;li&gt;root cause hypothesis&lt;/li&gt;
&lt;li&gt;an internal communication message&lt;/li&gt;
&lt;li&gt;supporting reports and details&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is a much better starting point than opening five browser tabs and trying to build the story manually.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff7yfbbdn6c2351s3yyif.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff7yfbbdn6c2351s3yyif.png" alt="Incident management AI wf" width="800" height="449"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Using Port Chat to analyze the incident across&amp;nbsp;tools
&lt;/h3&gt;

&lt;p&gt;The most powerful part of this workflow is what happens next.&lt;/p&gt;

&lt;p&gt;Inside the incident page, I can open Port Chat and connect the relevant systems and agents. In this example, I enable connectors for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Datadog&lt;/li&gt;
&lt;li&gt;AWS&lt;/li&gt;
&lt;li&gt;GitHub&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then I can ask a natural language question like:&lt;br&gt;
&lt;strong&gt;Can you please analyze what's happening here with this incident?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpgcbop7zhpx59xm79tuo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpgcbop7zhpx59xm79tuo.png" alt="Port incident chat" width="800" height="1336"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Because &lt;a href="https://port.io?utm_source=medium&amp;amp;utm_medium=advocacy&amp;amp;utm_campaign=triage" rel="noopener noreferrer"&gt;Port&lt;/a&gt; already has the incident context and now also has access to monitoring, infrastructure, and code history, the chat is not answering in isolation. It is reasoning across the actual systems involved.&lt;/p&gt;

&lt;p&gt;This is another important principle of Agentic Engineering: agents become far more useful when they can traverse the environment instead of being restricted to a single static prompt.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why this is different from a generic AI assistant
&lt;/h3&gt;

&lt;p&gt;A generic assistant might help me brainstorm likely causes of 500 errors.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;An agentic engineering assistant can:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;check which services are related to the incident&lt;/li&gt;
&lt;li&gt;inspect recent deployments&lt;/li&gt;
&lt;li&gt;look at pull requests that may have introduced breaking changes&lt;/li&gt;
&lt;li&gt;reason about cloud infrastructure and service dependencies&lt;/li&gt;
&lt;li&gt;return a focused investigation summary tied to the incident&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That difference is everything.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8wgjih0dypcga6wxy6ya.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8wgjih0dypcga6wxy6ya.png" alt="incident workflow IDP" width="800" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  The investigation report: root cause, history, and recommendations
&lt;/h3&gt;

&lt;p&gt;After gathering context from the connected systems, &lt;a href="https://port.io?utm_source=medium&amp;amp;utm_medium=advocacy&amp;amp;utm_campaign=triage" rel="noopener noreferrer"&gt;Port&lt;/a&gt; Chat returns a comprehensive analysis.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The report includes a broad set of useful sections, such as:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Incident overview&lt;/li&gt;
&lt;li&gt;Root cause analysis&lt;/li&gt;
&lt;li&gt;Recent deployments&lt;/li&gt;
&lt;li&gt;Related pull requests&lt;/li&gt;
&lt;li&gt;Why checkout is failing if order was deployed&lt;/li&gt;
&lt;li&gt;Hypotheses&lt;/li&gt;
&lt;li&gt;Historical context&lt;/li&gt;
&lt;li&gt;Affected services&lt;/li&gt;
&lt;li&gt;Recommendations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is exactly the kind of report I want during a high-pressure production issue.&lt;/p&gt;

&lt;p&gt;I do not just want isolated data points. I want an organized explanation of what likely happened, what changed recently, what dependencies are involved, and what actions are sensible right now.&lt;/p&gt;

&lt;p&gt;This is where Agentic Engineering shines. It compresses the time between signal and understanding.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8x7am6x60j2zqzpr8jp6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8x7am6x60j2zqzpr8jp6.png" alt="self-healing incidents" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  What makes this a self-healing workflow
&lt;/h3&gt;

&lt;p&gt;The phrase self-healing can sometimes sound overly ambitious, so I like to be precise about what it means here.&lt;/p&gt;

&lt;p&gt;It does not mean the platform magically fixes every issue on its own with no oversight.&lt;/p&gt;

&lt;p&gt;It means the workflow can automate a significant part of the operational response:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;collecting the right context&lt;/li&gt;
&lt;li&gt;triaging the incident&lt;/li&gt;
&lt;li&gt;identifying probable causes&lt;/li&gt;
&lt;li&gt;highlighting affected systems&lt;/li&gt;
&lt;li&gt;presenting remediation options&lt;/li&gt;
&lt;li&gt;supporting rollback or communication paths&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In some environments, that may even extend to executing well-defined remediations after approval. In others, it will function as a copilot that accelerates decision-making. Either way, the engineering team gets to spend less energy on operational friction and more energy on actual resolution.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why Agentic Engineering matters beyond incidents
&lt;/h3&gt;

&lt;p&gt;Although this example focuses on incidents, the broader lesson is about engineering workflows in general.&lt;/p&gt;

&lt;p&gt;Anywhere there is repeated context gathering, dependency tracing, or multi-tool coordination, Agentic Engineering can help. Incident management is just one of the clearest and most painful use cases because the cost of delay is obvious.&lt;/p&gt;

&lt;p&gt;When a P1 incident hits, every minute matters. Faster triage means:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;less downtime&lt;/li&gt;
&lt;li&gt;less revenue loss&lt;/li&gt;
&lt;li&gt;less stress for the on-call engineer&lt;/li&gt;
&lt;li&gt;clearer communication across teams&lt;/li&gt;
&lt;li&gt;more consistent operational responses&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And importantly, this kind of system scales knowledge. The platform can surface runbooks, ownership information, and historical patterns that would otherwise live in scattered tools or in the head of the most experienced engineer on the team.&lt;/p&gt;

&lt;h4&gt;
  
  
  The practical takeaway
&lt;/h4&gt;

&lt;p&gt;If your current incident process depends on an engineer manually collecting context from half a dozen systems before they can even begin diagnosing the problem, you do not have an incident response problem alone. You have a workflow design problem.&lt;/p&gt;

&lt;p&gt;Agentic Engineering addresses that by connecting systems, preserving context, and letting AI agents execute structured operational tasks on top of that foundation.&lt;/p&gt;

&lt;p&gt;What I like about the &lt;a href="https://port.io?utm_source=medium&amp;amp;utm_medium=advocacy&amp;amp;utm_campaign=triage" rel="noopener noreferrer"&gt;Port&lt;/a&gt; approach is that it keeps humans in control while removing the worst part of on-call work: the frantic scramble for context in the middle of the night.&lt;/p&gt;

&lt;p&gt;Instead of spending 30 minutes figuring out what changed, who owns the service, and what might be affected, I can start with a triaged incident, a business impact summary, a root cause hypothesis, affected services, and recommended actions.&lt;/p&gt;

&lt;p&gt;That is not just automation for the sake of automation. That is useful engineering leverage.&lt;/p&gt;

&lt;h4&gt;
  
  
  Final thoughts
&lt;/h4&gt;

&lt;p&gt;Agentic Engineering is one of those ideas that sounds futuristic until you see it applied to a very real problem like incident response.&lt;/p&gt;

&lt;p&gt;The value is immediate:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;faster context gathering&lt;/li&gt;
&lt;li&gt;faster triage&lt;/li&gt;
&lt;li&gt;better incident summaries&lt;/li&gt;
&lt;li&gt;clear remediation paths&lt;/li&gt;
&lt;li&gt;less operational toil&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For developers and platform teams, that is a big deal. Production incidents will always happen. The question is whether the first half hour is spent hunting for information or acting on it.&lt;/p&gt;

&lt;p&gt;That is the promise of Agentic Engineering, and in this workflow, it is already practical.&lt;/p&gt;

&lt;p&gt;If I can turn a 3:00 a.m. alert from a chaotic tab-switching exercise into a guided response with real context and actionable recommendations, that is a win for everyone on call.&lt;/p&gt;

</description>
      <category>agents</category>
      <category>ai</category>
      <category>developer</category>
      <category>productivity</category>
    </item>
    <item>
      <title>This is How I Automated My GitHub PRs with AI Agents &amp; Agentic Workflows!</title>
      <dc:creator>Pavan Belagatti</dc:creator>
      <pubDate>Mon, 04 May 2026 07:32:04 +0000</pubDate>
      <link>https://dev.to/pavanbelagatti/this-is-how-i-automated-my-github-prs-with-ai-agents-agentic-workflows-11c6</link>
      <guid>https://dev.to/pavanbelagatti/this-is-how-i-automated-my-github-prs-with-ai-agents-agentic-workflows-11c6</guid>
      <description>&lt;p&gt;If you want to Automate GitHub PRs, the real goal is not just adding another bot comment to a pull request. The goal is to give reviewers the context they usually have to gather manually: who owns the service, whether it is deployed, whether basic repository standards are in place, and whether the change looks safe to merge.&lt;/p&gt;

&lt;p&gt;A useful AI pull request workflow can do exactly that. When a PR opens, it can sync metadata from GitHub, pull operational and ownership context from an internal developer platform, send that context to an LLM, and return a structured review summary plus a risk level. That reduces blind approvals and cuts down on repetitive reviewer questions.&lt;/p&gt;

&lt;p&gt;This guide explains how to Automate GitHub PRs using GitHub Actions, Port, a lightweight webhook server, and an LLM such as GPT-4. It also covers what this kind of workflow should evaluate, why a middleware service is needed, and what mistakes to avoid.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/CCs-jn3IDlw"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  What it means to automate GitHub PRs
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwvqhl5hyevf5osns56c6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwvqhl5hyevf5osns56c6.png" alt="Automate GitHub PRs" width="800" height="415"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;To Automate GitHub PRs, I am talking about a workflow where opening a pull request triggers an automated review pipeline. Instead of checking only the code diff, the system looks at the broader service context and then posts a structured result back to the PR.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;That result can include:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Service ownership&lt;/li&gt;
&lt;li&gt;Repository readiness signals, such as a README or CODEOWNERS presence&lt;/li&gt;
&lt;li&gt;Scorecard or compliance status&lt;/li&gt;
&lt;li&gt;Deployment status, such as staging and production workloads&lt;/li&gt;
&lt;li&gt;An AI-generated summary&lt;/li&gt;
&lt;li&gt;A risk level, such as low, medium, or high&lt;/li&gt;
&lt;li&gt;Suggested action items when something is missing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is different from a traditional static code review bot. The value comes from combining code events with operational context from systems outside GitHub.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why teams want to automate GitHub PRs
&lt;/h2&gt;

&lt;p&gt;Most pull request delays are not caused by code syntax alone. They come from uncertainty.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwuvaiyfkzrgpdogcnzdf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwuvaiyfkzrgpdogcnzdf.png" alt="GitHub PR AI" width="800" height="532"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reviewers often need answers to questions like:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Who owns this service?&lt;/li&gt;
&lt;li&gt;Is this service already running anywhere?&lt;/li&gt;
&lt;li&gt;Is the repository production-ready?&lt;/li&gt;
&lt;li&gt;Does it follow the team’s baseline standards?&lt;/li&gt;
&lt;li&gt;Is there enough context to approve safely?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without automation, someone has to hunt for that information across GitHub, deployment systems, internal docs, and team ownership records. That takes time and usually leads to either delayed merges or weak review quality.&lt;/p&gt;

&lt;p&gt;When you Automate GitHub PRs with AI and catalog data, reviewers get a structured starting point within seconds.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbqp6johiia5606ulkkq7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbqp6johiia5606ulkkq7.png" alt="PR Show" width="800" height="491"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What a good automated PR review should check
&lt;/h2&gt;

&lt;p&gt;If you want to build a useful system and not just a noisy one, focus on checks that help humans make better decisions.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Ownership
&lt;/h3&gt;

&lt;p&gt;The review should identify the responsible team or service owner. This helps route questions quickly and gives confidence that the change belongs to a known part of the platform.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Repository hygiene
&lt;/h3&gt;

&lt;p&gt;Basic project files matter. A README and CODEOWNERS file are simple indicators that the repository follows expected practices. These signals are easy to include and often useful in readiness checks.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Scorecard or standards compliance
&lt;/h3&gt;

&lt;p&gt;A scorecard can represent repository quality or policy compliance. In the demonstrated setup, the scorecard level acts as one of the inputs used to judge pull request readiness.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. Deployment context
&lt;/h3&gt;

&lt;p&gt;Whether a service is deployed to staging or production changes how risky a PR feels. A change to an actively deployed service deserves different attention than a repo that is not yet in use.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Risk assessment
&lt;/h3&gt;

&lt;p&gt;The output should classify the PR in a simple, scannable way. A low, medium, or high risk label works well because it gives the reviewer an immediate signal.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Summary and action items
&lt;/h3&gt;

&lt;p&gt;The review should not stop at a label. It should explain why the PR was marked a certain way and list any missing prerequisites.&lt;/p&gt;

&lt;h3&gt;
  
  
  Architecture to automate GitHub PRs
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;A practical architecture for this workflow has four parts:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;GitHub to detect PR activity&lt;/li&gt;
&lt;li&gt;Port to hold and expose context about services, scorecards, workloads, and PR entities&lt;/li&gt;
&lt;li&gt;A webhook server to coordinate API calls and write results back&lt;/li&gt;
&lt;li&gt;An LLM to produce the structured review verdict&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The flow works like this:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A developer opens a pull request in GitHub.&lt;/li&gt;
&lt;li&gt;A GitHub Action runs and syncs PR data into Port.&lt;/li&gt;
&lt;li&gt;Port detects the new PR entity and triggers an automation.&lt;/li&gt;
&lt;li&gt;The automation calls a publicly reachable webhook endpoint.&lt;/li&gt;
&lt;li&gt;The webhook server fetches related context from Port.&lt;/li&gt;
&lt;li&gt;The server sends that context to the LLM.&lt;/li&gt;
&lt;li&gt;The LLM returns a structured verdict.&lt;/li&gt;
&lt;li&gt;The server posts a review comment to GitHub and writes the summary and risk level back into Port.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F49e9laulux6ghos8vgbj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F49e9laulux6ghos8vgbj.png" alt="GitHub PR Demo" width="800" height="1032"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Why is Port useful in this workflow
&lt;/h3&gt;

&lt;p&gt;Port acts as the context layer. It is where service metadata, ownership, scorecards, workloads, and pull request entities can live together in a catalog.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F23mdydn7gnfxc3igkwo7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F23mdydn7gnfxc3igkwo7.png" alt="Port workflow" width="800" height="358"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;That matters because an LLM alone does not know:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Which team owns a given service&lt;/li&gt;
&lt;li&gt;Whether the repo has certain governance files&lt;/li&gt;
&lt;li&gt;Whether the service is deployed in staging or production&lt;/li&gt;
&lt;li&gt;What the latest scorecard or policy status is&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By connecting GitHub as a data source and modeling those related entities in a catalog, Port can provide the context the AI needs to produce a more useful PR review.&lt;/p&gt;

&lt;p&gt;In this setup, the pull request becomes an entity that can be enriched with fields such as:&lt;br&gt;
&lt;em&gt;AI review summary&lt;/em&gt;&lt;br&gt;
&lt;em&gt;AI risk level&lt;/em&gt;&lt;br&gt;
&lt;em&gt;Run history&lt;/em&gt;&lt;br&gt;
&lt;em&gt;Audit data&lt;/em&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  How to automate GitHub PRs step by step
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Step 1: Connect GitHub to your internal developer platform
&lt;/h4&gt;

&lt;p&gt;Start by integrating GitHub so your platform can detect repositories and pull request activity. In the demonstrated pattern, GitHub is connected as a data source inside Port.&lt;/p&gt;

&lt;p&gt;This connection allows pull request details to be synced and associated with the right service or repository metadata.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fult01sfb07gp4ukpf5d8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fult01sfb07gp4ukpf5d8.png" alt="Connect GitHub" width="800" height="445"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 2: Create a GitHub Action that syncs PR data
&lt;/h4&gt;

&lt;p&gt;The automation begins in GitHub. You need a workflow file that runs on pull request activity and sends the relevant information into Port.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;At minimum, the sync should include:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PR number&lt;/li&gt;
&lt;li&gt;Title&lt;/li&gt;
&lt;li&gt;Branch&lt;/li&gt;
&lt;li&gt;Repository&lt;/li&gt;
&lt;li&gt;Associated service, if available&lt;/li&gt;
&lt;li&gt;Status&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This is the event bridge that lets you Automate GitHub PRs with richer catalog-based context instead of relying on code diff events alone.&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 3: Model the related entities in Port
&lt;/h4&gt;

&lt;p&gt;The automated review is only as good as the context available. The useful entities in this design include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Service entity with team, ownership, and repository details&lt;/li&gt;
&lt;li&gt;Scorecard entity with pass or fail style readiness indicators&lt;/li&gt;
&lt;li&gt;Workload entity showing staging and production deployment information&lt;/li&gt;
&lt;li&gt;Pull request entity that gets enriched with AI results&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If these relationships are incomplete, your AI verdict will be weaker.&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 4: Add a Port automation to trigger the review
&lt;/h4&gt;

&lt;p&gt;Once the PR entity appears in Port, an automation should fire automatically. This automation sends the event to your webhook server.&lt;/p&gt;

&lt;p&gt;That trigger is the handoff from catalog event detection to the external processing logic.&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 5: Run a webhook server as middleware
&lt;/h4&gt;

&lt;p&gt;This part is essential. Port can trigger workflows and call webhooks, but the actual review process requires a custom layer that can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Authenticate with APIs&lt;/li&gt;
&lt;li&gt;Fetch multiple related entities&lt;/li&gt;
&lt;li&gt;Build a prompt with structured context&lt;/li&gt;
&lt;li&gt;Call the LLM&lt;/li&gt;
&lt;li&gt;Post a GitHub comment&lt;/li&gt;
&lt;li&gt;Write fields back into Port&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In the demonstrated implementation, this middleware is a lightweight Python application running continuously in the cloud.&lt;/p&gt;

&lt;p&gt;That always-on endpoint matters because local development servers are not reliable for production automation.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnd4l0iv4n8k90r2yxo6s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnd4l0iv4n8k90r2yxo6s.png" alt="PR Automate demo" width="800" height="462"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 6: Deploy the middleware somewhere with a permanent public URL
&lt;/h4&gt;

&lt;p&gt;A cloud deployment platform such as Railway works well for this. The important requirement is a stable HTTPS endpoint that Port can call every time a PR event occurs.&lt;/p&gt;

&lt;p&gt;If the server is not always available, the automation chain breaks.&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 7: Send context to the LLM and request a structured verdict
&lt;/h4&gt;

&lt;p&gt;The webhook server should gather the relevant Port data and send it to the LLM in a structured way. The desired output should also be structured, ideally as JSON.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The resulting verdict can include:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Overall approval recommendation&lt;/li&gt;
&lt;li&gt;Risk level&lt;/li&gt;
&lt;li&gt;Short review summary&lt;/li&gt;
&lt;li&gt;Missing requirements&lt;/li&gt;
&lt;li&gt;Action items&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Structured outputs are much easier to write back into systems and display consistently.&lt;/p&gt;

&lt;h4&gt;
  
  
  Step 8: Write the result back to GitHub and Port
&lt;/h4&gt;

&lt;p&gt;Finally, the middleware should:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Post a human-readable comment to the PR in GitHub&lt;/li&gt;
&lt;li&gt;Update the PR entity in Port with the AI summary&lt;/li&gt;
&lt;li&gt;Set the AI risk level field in Port&lt;/li&gt;
&lt;li&gt;Record success in the automation run or audit log&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This gives both developers and platform teams a clear trail of what happened.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frgaozc8dfxwwnmgj8iw2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frgaozc8dfxwwnmgj8iw2.png" alt="successful PR Automation" width="800" height="442"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What the PR comment should look like&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb9vy7ii5grui5w4qb4g6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fb9vy7ii5grui5w4qb4g6.png" alt="PR Comment" width="800" height="465"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A good automated PR comment is short, structured, and focused on decision support.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It should answer these questions quickly:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Who owns the service?&lt;/li&gt;
&lt;li&gt;What does the scorecard or readiness status say?&lt;/li&gt;
&lt;li&gt;Where is the service deployed?&lt;/li&gt;
&lt;li&gt;What is the AI verdict?&lt;/li&gt;
&lt;li&gt;Are any action items required?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A comment that simply says “looks good” is not enough. A useful automated review should give a reviewer enough context to decide what to inspect next.&lt;/p&gt;

&lt;h3&gt;
  
  
  Using AI agents and self-service actions
&lt;/h3&gt;

&lt;p&gt;One notable part of this setup is that platform actions and AI agents can be created inside Port itself. That makes it easier to operationalize workflows like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;PR readiness review&lt;/li&gt;
&lt;li&gt;PR summary generation&lt;/li&gt;
&lt;li&gt;Risk analysis&lt;/li&gt;
&lt;li&gt;Other engineering actions such as ticket creation or health reporting&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This matters if you want your pull request automation to be part of a larger internal developer platform rather than a standalone script.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F601vvdogftujh0aurtr3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F601vvdogftujh0aurtr3.png" alt="Port catalog" width="800" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Common mistakes when you automate GitHub PRs
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Relying only on the code diff&lt;/strong&gt;&lt;br&gt;
If the AI sees only the changed files, it cannot reason about deployment status, ownership, or baseline readiness. The context layer is what makes the review valuable.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Posting unstructured comments&lt;/strong&gt;&lt;br&gt;
A long generic paragraph is hard to scan. Use a consistent template with ownership, readiness, deployment, verdict, and action items.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Skipping the middleware layer&lt;/strong&gt;&lt;br&gt;
Trying to connect everything directly often becomes limiting. A custom webhook server is useful because it can orchestrate multiple API calls and handle bidirectional updates.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hosting the server locally&lt;/strong&gt;&lt;br&gt;
For continuous automation, the endpoint must be publicly reachable all the time. A local laptop is not a stable production service.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Overtrusting the AI output&lt;/strong&gt;&lt;br&gt;
Even if you Automate GitHub PRs, the output should support human review, not replace it entirely. The AI is helping summarize context and flag risk, not acting as the final approver in every case.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Using incomplete catalog data&lt;/strong&gt;&lt;br&gt;
If service ownership is wrong or workload data is outdated, the PR review will reflect those gaps. Data quality matters as much as prompt quality.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;You can automate your developer workflows using &lt;a href="https://port.io?utm_source=devto&amp;amp;utm_medium=advocacy&amp;amp;utm_campaign=githubpr" rel="noopener noreferrer"&gt;Port.io&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  What this setup is best for
&lt;/h4&gt;

&lt;p&gt;This approach is especially useful for teams that already manage service metadata in a developer platform and want faster, more informed pull request reviews.&lt;/p&gt;

&lt;h4&gt;
  
  
  It is a strong fit when:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;You have many services and ownership is not always obvious&lt;/li&gt;
&lt;li&gt;Reviewers frequently ask for operational context before approving&lt;/li&gt;
&lt;li&gt;You want PRs enriched with platform metadata automatically&lt;/li&gt;
&lt;li&gt;You already use GitHub Actions and can add webhook-based automations&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It is less useful if your environment has no structured service catalog yet. In that case, the first step is improving metadata, not adding AI.&lt;/p&gt;

&lt;h4&gt;
  
  
  A practical checklist to automate GitHub PRs
&lt;/h4&gt;

&lt;p&gt;Use this checklist if you want to implement the same pattern:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Connect GitHub as a data source&lt;/li&gt;
&lt;li&gt;Create PR sync automation with GitHub Actions&lt;/li&gt;
&lt;li&gt;Model service, scorecard, workload, and PR entities&lt;/li&gt;
&lt;li&gt;Create a Port automation triggered by PR creation&lt;/li&gt;
&lt;li&gt;Deploy a public webhook server&lt;/li&gt;
&lt;li&gt;Fetch Port context inside the server&lt;/li&gt;
&lt;li&gt;Send structured context to an LLM&lt;/li&gt;
&lt;li&gt;Post the verdict to GitHub&lt;/li&gt;
&lt;li&gt;Write summary and risk fields back to Port&lt;/li&gt;
&lt;li&gt;Review data quality regularly&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Final takeaway
&lt;/h3&gt;

&lt;p&gt;If you want to Automate GitHub PRs in a way that actually helps reviewers, focus on context first and AI second. The most useful automation does not just analyze changed code. It brings together service ownership, readiness signals, deployment status, and a structured verdict in one place.&lt;/p&gt;

&lt;p&gt;A setup built with GitHub Actions, Port, a cloud-hosted middleware service, and an LLM can turn pull request reviews from a context-hunting exercise into a faster, better-informed workflow. Done well, this approach gives every PR a head start before a human reviewer even begins.&lt;/p&gt;

&lt;p&gt;You can automate any of your developer workflows using &lt;a href="https://port.io?utm_source=devto&amp;amp;utm_medium=advocacy&amp;amp;utm_campaign=githubpr" rel="noopener noreferrer"&gt;Port.io&lt;/a&gt;&lt;/p&gt;

</description>
      <category>github</category>
      <category>ai</category>
      <category>development</category>
      <category>productivity</category>
    </item>
    <item>
      <title>Developer's Guide to Agent Skills (Hands-On Tutorial)!</title>
      <dc:creator>Pavan Belagatti</dc:creator>
      <pubDate>Mon, 20 Apr 2026 06:03:37 +0000</pubDate>
      <link>https://dev.to/pavanbelagatti/developers-guide-to-agent-skills-hands-on-tutorial-5e0p</link>
      <guid>https://dev.to/pavanbelagatti/developers-guide-to-agent-skills-hands-on-tutorial-5e0p</guid>
      <description>&lt;p&gt;Agent Skills are suddenly everywhere in the AI engineering world, and for good reason. They solve a very real problem: AI agents may be smart, but they still know nothing about your organization unless you explicitly teach them. They do not automatically understand your internal workflows, your service catalog, your production readiness rules, or the exact steps needed to fix recurring issues.&lt;/p&gt;

&lt;p&gt;That is where Agent Skills come in. They give your AI agent reusable knowledge, structured instructions, and workflow-specific context so it can do meaningful work instead of acting like a generic chatbot with tool access.&lt;/p&gt;

&lt;p&gt;If you have been hearing about skills.md files, MCP servers, Claude, Copilot, and custom agent workflows, this is the missing mental model. Once you get it, the whole ecosystem makes a lot more sense.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/w65tyLWjGqA"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Agent Skills are getting so much attention
&lt;/h2&gt;

&lt;p&gt;One quick way to understand whether a concept matters is to look at search interest. The term Agent Skills has been climbing fast, especially in recent months. That is usually a sign that people are not just curious, they are actively trying to use something in real projects.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuuofaxc9qd0h2r04kn8d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuuofaxc9qd0h2r04kn8d.png" alt="Agent Skills" width="800" height="456"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;And it makes sense. This is not a niche concept only for AI researchers. Developers, platform teams, engineering managers, and AI engineers can all benefit from it because Agent Skills increase both capability and efficiency for AI agents.&lt;/p&gt;

&lt;p&gt;A lot of the early buzz is tied to Claude because Anthropic introduced the concept as an open standard. But the idea is bigger than one model or one company. The important part is that a skill can travel across platforms, which makes it much more useful than a one-off prompt hidden in one tool.&lt;/p&gt;

&lt;h2&gt;
  
  
  How we got here: from function calling to MCP to Agent&amp;nbsp;Skills
&lt;/h2&gt;

&lt;p&gt;To really understand Agent Skills, it helps to place them in the broader evolution of AI agents interacting with the outside world.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff4rjuxdo7ivch0mgsyr3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff4rjuxdo7ivch0mgsyr3.png" alt="MCP to Agent Skills" width="800" height="354"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  1. Function&amp;nbsp;calling
&lt;/h3&gt;

&lt;p&gt;The first big step was function calling, also known as tool calling. This was when large language models started invoking external tools through a predefined JSON schema. A classic example is something like get weather data for a city.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;That was useful, but it had clear limitations:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Manual wiring everywhere. Every function had to be described and connected by hand.&lt;/li&gt;
&lt;li&gt;Error handling was your job. If something failed, the system did not really know how to recover intelligently.&lt;/li&gt;
&lt;li&gt;Scaling was painful. Every new capability increased developer overhead.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So function calling gave models access to tools, but not much autonomy or reusable workflow intelligence.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Model Context Protocol&amp;nbsp;(MCP)
&lt;/h3&gt;

&lt;p&gt;Then came Model Context Protocol, or MCP. This made it much easier to connect AI agents to external tools and data sources through a standard protocol.&lt;/p&gt;

&lt;p&gt;The easiest way to think about MCP is as a USB-like standard for AI systems. Instead of custom integrations for every tool, you get a cleaner, more interoperable plug-and-play model. That is why so many companies are now building MCP servers for their own systems and workflows.&lt;/p&gt;

&lt;p&gt;MCP was a major leap because it standardized access.&lt;br&gt;
But access alone is not enough.&lt;/p&gt;
&lt;h3&gt;
  
  
  3. Agent&amp;nbsp;Skills
&lt;/h3&gt;

&lt;p&gt;This is where Agent Skills become important. If MCP gives your AI agent access to external tools and data, Agent Skills teach the agent what to do with those tools and data.&lt;/p&gt;

&lt;p&gt;That is the core idea.&lt;/p&gt;

&lt;p&gt;Instead of giving an agent only tool access, you package repeatable workflows, domain knowledge, trigger conditions, and repair playbooks into reusable skill files. The agent can then reason through a task in a more structured and specialized way.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Each stage in this evolution shifts more agency from the developer to the system:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Function calling gave the model tool access.&lt;/li&gt;
&lt;li&gt;MCP standardized access to tools and data.&lt;/li&gt;
&lt;li&gt;Agent Skills gave the model reusable capability and workflow intelligence.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is why this feels like a truly agentic progression.&lt;/p&gt;
&lt;h2&gt;
  
  
  What Agent Skills actually&amp;nbsp;are
&lt;/h2&gt;

&lt;p&gt;Agent Skills are folders of instructions and supporting files that package a repeatable workflow, specialized knowledge, or a new capability for your AI agent.&lt;/p&gt;

&lt;p&gt;On the surface, that might sound like saved prompts. But they are more than that.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A good skill does not just store text. It defines:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;When the skill should activate&lt;/li&gt;
&lt;li&gt;What the agent should do step by step&lt;/li&gt;
&lt;li&gt;What reference data the agent should use&lt;/li&gt;
&lt;li&gt;What remediation playbooks or actions it can follow&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So instead of copy-pasting a giant prompt every time you want an agent to do something specialized, you write that capability once and reuse it across sessions and tools.&lt;/p&gt;

&lt;p&gt;This is exactly what makes Agent Skills powerful. They turn a general-purpose model into something much closer to a reliable specialist.&lt;/p&gt;
&lt;h3&gt;
  
  
  Example: Custom deployment skill
&lt;/h3&gt;

&lt;p&gt;Here's an example of a custom skill for deploying services in your organization:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"identifier"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"deploy-to-production"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"title"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Deploy to Production"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"properties"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"description"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Guide for deploying services to production. Use when users ask to deploy, release, or promote a service to production."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"instructions"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"# Deploy to Production&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s2"&gt;Follow these steps to deploy a service to production:&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s2"&gt;## Step 1: Verify prerequisites&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s2"&gt;- Check that all tests pass.&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;- Verify the service has a production-readiness scorecard score above 80%.&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;- Confirm the service owner has approved the deployment.&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s2"&gt;## Step 2: Run the deployment&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s2"&gt;Execute the deployment action for the target service and environment.&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s2"&gt;**Example input:**&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;- Service: `payment-service`&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;- Environment: `production`&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s2"&gt;**Expected output:**&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;- Deployment initiated successfully.&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;- Action run ID returned for tracking.&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s2"&gt;## Step 3: Verify deployment&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s2"&gt;- Check the action run status.&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;- Verify the service is healthy in production.&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;- Monitor for any alerts in the first 15 minutes.&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s2"&gt;## Common edge cases&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s2"&gt;- If tests are failing, do not proceed with deployment.&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;- If scorecard score is below threshold, recommend remediation steps first.&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;- If deployment fails, check logs and suggest rollback if needed."&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"references"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"path"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"references/deployment-runbook.md"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"content"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"# Deployment Runbook&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s2"&gt;## Pre-deployment checklist&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s2"&gt;- [ ] All CI checks pass&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;- [ ] Code review approved&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;- [ ] QA sign-off received&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s2"&gt;## Rollback procedure&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s2"&gt;If deployment fails:&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;1. Revert to previous version&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;2. Notify on-call team&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;3. Create incident ticket"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"path"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"references/common-errors.md"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"content"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"# Common Deployment Errors&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s2"&gt;## ImagePullBackOff&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;Cause: Container registry authentication failed.&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;Fix: Verify registry credentials.&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s2"&gt;## CrashLoopBackOff&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;Cause: Application fails to start.&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;Fix: Check application logs and configuration."&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"assets"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"path"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"assets/deployment-config.yaml"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"content"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"apiVersion: apps/v1&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;kind: Deployment&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;metadata:&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;  name: {{ service_name }}&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;spec:&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;  replicas: 3&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;  strategy:&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;    type: RollingUpdate"&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  The open standard behind Agent&amp;nbsp;Skills
&lt;/h2&gt;

&lt;p&gt;Agent Skills were originally created by Anthropic and released as an open standard on December 18, 2025, along with the specification and SDK. The standard is now governed as a cross-platform specification at agentskills.io.&lt;/p&gt;

&lt;p&gt;The practical implication is huge. A skill created for Claude is not trapped inside Claude. The same skill can work across multiple AI platforms that adopt the standard, including tools like OpenAI Codex, Gemini CLI, GitHub Copilot, Cursor, VS Code, and others.&lt;/p&gt;

&lt;p&gt;That portability is what makes this more than another product feature. It is infrastructure for reusable agent behavior.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why LLMs need Agent Skills in the first&amp;nbsp;place
&lt;/h2&gt;

&lt;p&gt;LLMs are great at general conversation, brainstorming, and broad reasoning. But when workflows become complex, they often become inconsistent. They forget details, miss edge cases, or answer too generically because they do not have the right context.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;This becomes painfully obvious in cases like:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Analyzing internal service health&lt;/li&gt;
&lt;li&gt;Understanding organization-specific scorecards&lt;/li&gt;
&lt;li&gt;Applying a company's engineering rules&lt;/li&gt;
&lt;li&gt;Generating precise remediation steps&lt;/li&gt;
&lt;li&gt;Working across tools like GitHub, issue trackers, and internal platforms&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Agent Skills help bridge that gap. They move the model from passive chat behavior to active, specialized execution grounded in your real systems and workflows.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical example: building an Agent Skill with&amp;nbsp;Port.io
&lt;/h2&gt;

&lt;p&gt;To make this concrete, consider a real workflow built around &lt;a href="https://www.port.io/blog/introducing-skills-in-port" rel="noopener noreferrer"&gt;Port.io&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6myl0x3471a9dz77gzej.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6myl0x3471a9dz77gzej.png" alt="Port Skills" width="800" height="882"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://port.io?utm_source=med&amp;amp;utm_medium=advocacy&amp;amp;utm_campaign=skills" rel="noopener noreferrer"&gt;Port&lt;/a&gt; is an agentic internal developer platform that helps teams automate engineering workflows. It acts as a central place where developers can see services, ownership, scorecards, readiness, and other operational data without bouncing between a dozen different tools.&lt;/p&gt;

&lt;p&gt;In this example, Port's MCP server is connected so the AI agent can access live data from a Port account. Once connected, the agent can pull information such as:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Services in the catalog&lt;/li&gt;
&lt;li&gt;Blueprints in the organization&lt;/li&gt;
&lt;li&gt;Production readiness states&lt;/li&gt;
&lt;li&gt;Scorecard pass/fail data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That gives the agent raw access. Then Agent Skills provide the behavior and context needed to make that access useful.&lt;/p&gt;

&lt;h2&gt;
  
  
  The three-file structure of this Agent&amp;nbsp;Skill
&lt;/h2&gt;

&lt;p&gt;The example skill is built around a production readiness workflow and uses three main files.&lt;/p&gt;

&lt;h3&gt;
  
  
  1. skills.md
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;This is the brain and trigger mechanism of the skill.&lt;br&gt;
It includes:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The skill name&lt;/li&gt;
&lt;li&gt;Description&lt;/li&gt;
&lt;li&gt;Metadata like author and version&lt;/li&gt;
&lt;li&gt;Activation keywords&lt;/li&gt;
&lt;li&gt;Instructions for how the agent should behave&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In this case, the skill is focused on Port readiness. The description includes keywords such as scorecard, level B, and branch protection so the agent knows when to activate the skill.&lt;/p&gt;

&lt;p&gt;It also defines the workflow for diagnosing failures, understanding readiness levels, generating PR descriptions, and suggesting fixes.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. references/scorecard-state.md
&lt;/h3&gt;

&lt;p&gt;This file contains the factual reference data.&lt;br&gt;
It acts like a snapshot of the actual Port catalog, including the current state of services and scorecard rules. In the example, it includes data for six services and their pass/fail status against readiness rules.&lt;/p&gt;

&lt;p&gt;This matters because it stops the agent from answering in vague terms. Instead of saying, "You may need better branch policies," it can say, "This specific service is failing because branch protection is missing and no recent PR activity exists."&lt;/p&gt;

&lt;h3&gt;
  
  
  3. assets/fix-checklist.md
&lt;/h3&gt;

&lt;p&gt;This file is the remediation playbook.&lt;br&gt;
&lt;strong&gt;It gives the agent a step-by-step checklist for fixing failures, such as:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Assigning the correct team&lt;/li&gt;
&lt;li&gt;Enabling branch protection&lt;/li&gt;
&lt;li&gt;Setting code owners&lt;/li&gt;
&lt;li&gt;Ensuring recent PR freshness&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So if the reference file tells the agent what is wrong, the checklist tells it how to fix it.&lt;/p&gt;

&lt;h3&gt;
  
  
  What this skill enables the agent to&amp;nbsp;do
&lt;/h3&gt;

&lt;p&gt;Once these files are in place and the Port MCP server is connected, the AI agent becomes dramatically more useful.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It can answer questions like:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What services are in my Port catalog?&lt;/li&gt;
&lt;li&gt;What blueprints exist in my organization?&lt;/li&gt;
&lt;li&gt;Why is the travel service failing its scorecard?&lt;/li&gt;
&lt;li&gt;Which service is closest to reaching level B?&lt;/li&gt;
&lt;li&gt;Write a PR description for Agentic AI explaining the readiness impact.&lt;/li&gt;
&lt;li&gt;Assign Agentic AI to the AI team.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And importantly, it can answer these without forcing you to paste all the context into every new conversation.&lt;/p&gt;

&lt;p&gt;That is the practical magic of Agent Skills. Context is packaged once, then reused repeatedly.&lt;/p&gt;

&lt;h2&gt;
  
  
  Understanding Port readiness in this&amp;nbsp;example
&lt;/h2&gt;

&lt;p&gt;The skill in this setup revolves around production readiness in Port.&lt;/p&gt;

&lt;p&gt;Port readiness is basically a grading system that tells you how production-ready a service is. The levels include things like A, B, C, and F, depending on how many scorecard rules are satisfied.&lt;/p&gt;

&lt;p&gt;In the example workflow, several services are currently at level C. The agent can inspect the rules, explain why a service is still at level C, and tell you what must be done to move it up to level B.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Typical requirements for moving from level C to level B include:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Assigning a team&lt;/li&gt;
&lt;li&gt;Enabling GitHub branch protection&lt;/li&gt;
&lt;li&gt;Pushing a recent PR&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because the skill has both the scorecard state and the remediation checklist, it can map those rules directly into actionable next steps.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7x0a4sjtktgxhnv64b3g.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7x0a4sjtktgxhnv64b3g.png" alt="Port Readiness" width="800" height="508"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How the interaction feels in&amp;nbsp;practice
&lt;/h2&gt;

&lt;p&gt;After connecting the MCP server and loading the skill into a coding environment like GitHub Copilot agent mode in VS Code, you can work conversationally.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You can ask:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Why is the prompt engineering service failing?&lt;/li&gt;
&lt;li&gt;What team is assigned to this service?&lt;/li&gt;
&lt;li&gt;How can all my services reach level B?&lt;/li&gt;
&lt;li&gt;Can you push a simple PR to this service?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The agent then checks the skill instructions, pulls the relevant facts from the reference file, uses the checklist for remediation guidance, and responds in a way that is specific to your setup.&lt;/p&gt;

&lt;p&gt;In the example, the agent can even update team assignments in the scorecard state and suggest exact actions needed to improve readiness.&lt;/p&gt;

&lt;p&gt;This is a big shift from normal chatbot usage. Instead of asking broad questions and getting broad answers, you are interacting with an agent that understands your environment and your operational rules.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why this is more powerful than prompts&amp;nbsp;alone
&lt;/h3&gt;

&lt;p&gt;A long prompt can tell an agent a lot of things once. But it is still fragile.&lt;/p&gt;

&lt;p&gt;Prompts are easy to lose, hard to standardize, and difficult to reuse cleanly across teams and platforms. They also tend to degrade over time as workflows evolve.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Agent Skills solve that by separating responsibilities:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The skill file defines behavior and triggers&lt;/li&gt;
&lt;li&gt;The reference file provides facts and current state&lt;/li&gt;
&lt;li&gt;The checklist file provides action plans&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That structure makes the whole system more maintainable, shareable, and predictable.&lt;/p&gt;

&lt;p&gt;It also makes it easier to build agents that do not just know tools, but know how your organization actually works.&lt;/p&gt;

&lt;h3&gt;
  
  
  The bigger&amp;nbsp;takeaway
&lt;/h3&gt;

&lt;p&gt;The important idea here is not just Port, Claude, or one specific tutorial setup. The bigger takeaway is that Agent Skills are a reusable layer of organizational intelligence for AI agents.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You can imagine applying the same pattern to many other internal workflows:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Incident triage&lt;/li&gt;
&lt;li&gt;Release readiness&lt;/li&gt;
&lt;li&gt;Security policy checks&lt;/li&gt;
&lt;li&gt;Onboarding flows&lt;/li&gt;
&lt;li&gt;Documentation enforcement&lt;/li&gt;
&lt;li&gt;Infrastructure review&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;As long as the agent has access to the right tools and data through something like MCP, skills can teach it how to reason and act within that domain.&lt;/p&gt;

&lt;h3&gt;
  
  
  What makes Agent Skills so compelling right&amp;nbsp;now
&lt;/h3&gt;

&lt;p&gt;There are three reasons Agent Skills feel especially important right now.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;AI agents are everywhere, but most are still generic.&lt;/li&gt;
&lt;li&gt;MCP gives agents access, but not domain behavior.&lt;/li&gt;
&lt;li&gt;Teams need reusable workflows, not prompt improvisation every time.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That combination creates the perfect environment for skills to become a foundational pattern.&lt;/p&gt;

&lt;p&gt;If the first wave of AI was about generating text, and the second wave was about calling tools, this next wave is about packaging expertise so agents can repeatedly perform meaningful work.&lt;/p&gt;

&lt;h3&gt;
  
  
  Final thoughts
&lt;/h3&gt;

&lt;p&gt;Agent Skills are one of the clearest signs that AI tooling is maturing from demos into operational systems.&lt;/p&gt;

&lt;p&gt;They let you encode workflows once, connect them to real systems, and reuse them across platforms. In practical terms, that means your AI agent can stop acting like an outsider and start behaving like a teammate who understands your stack, your rules, and your goals.&lt;br&gt;
That is the real leap here.&lt;/p&gt;

&lt;p&gt;MCP gives your agent the keys. Agent Skills teach it how to drive.&lt;br&gt;
If you want to explore this approach hands-on, the Port-based production readiness example is a great model: connect your data source, define the skill behavior in skills.md, add factual reference state, add a remediation checklist, and then let the agent work against your real environment.&lt;/p&gt;

&lt;p&gt;Once you see that flow in action, it becomes obvious why Agent Skills are getting so much attention.&lt;/p&gt;

&lt;p&gt;BTW, &lt;a href="https://port.io?utm_source=devto&amp;amp;utm_medium=advocacy&amp;amp;utm_campaign=skills" rel="noopener noreferrer"&gt;Try Port for Free&lt;/a&gt;!&lt;/p&gt;

</description>
      <category>ai</category>
      <category>developer</category>
      <category>softwaredevelopment</category>
      <category>mcp</category>
    </item>
    <item>
      <title>DORA Report Takeaways + Build Your Own DORA Metrics Dashboard with MCP!</title>
      <dc:creator>Pavan Belagatti</dc:creator>
      <pubDate>Thu, 09 Apr 2026 13:04:10 +0000</pubDate>
      <link>https://dev.to/pavanbelagatti/dora-report-takeaways-build-your-own-dora-metrics-dashboard-with-mcp-421o</link>
      <guid>https://dev.to/pavanbelagatti/dora-report-takeaways-build-your-own-dora-metrics-dashboard-with-mcp-421o</guid>
      <description>&lt;p&gt;The question of whether to adopt AI in software development has already been answered. According to the &lt;a href="https://cloud.google.com/resources/content/2025-dora-ai-assisted-software-development-report" rel="noopener noreferrer"&gt;2025 DORA AI Capabilities Model&lt;/a&gt; - based on research from nearly 5,000 technology professionals and over 100 hours of qualitative analysis - close to 90% of developers are already using AI in their day-to-day work.  What remains unresolved is not adoption, but effectiveness. Many organizations have equipped their developers with powerful AI tools, yet struggle to translate individual productivity gains into meaningful business outcomes. This disconnect is at the heart of DORA’s latest research.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyecjdqw08ty57w7mti2u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyecjdqw08ty57w7mti2u.png" alt="DORA Report latest" width="800" height="692"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The report introduces a critical insight: AI is an amplifier. It does not inherently improve systems; instead, it magnifies the strengths and weaknesses that already exist. High-performing teams become faster and more effective, while struggling teams often see their inefficiencies scale. This reframes the entire conversation around AI adoption. Success is no longer about choosing the right tools—it is about building the right foundations. Understanding and investing in these foundations is what determines whether AI becomes a competitive advantage or just another layer of complexity.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Core Insight: AI Alone Doesn’t Improve Performance
&lt;/h2&gt;

&lt;p&gt;One of the most important findings from DORA is that AI adoption, on its own, has only a modest impact on organizational performance. While developers may experience significant gains in speed and efficiency, these improvements often fail to propagate through the rest of the system. Instead, they are absorbed by bottlenecks in testing, security reviews, approvals, and deployment pipelines. This creates a situation where teams appear to move faster locally, but the overall system remains constrained.&lt;/p&gt;

&lt;p&gt;This phenomenon highlights a fundamental truth: software delivery is a system, not a collection of individual tasks. Optimizing one part of the system without addressing the rest leads to imbalances rather than improvements. If data is fragmented, workflows are unclear, or processes are overly complex, AI will simply accelerate these issues. Teams may generate more code, but that code will still face the same downstream friction.&lt;/p&gt;

&lt;p&gt;DORA’s research makes it clear that meaningful improvements only emerge when AI is paired with strong technical and cultural capabilities. These capabilities ensure that gains at the individual level can flow through the entire value stream, ultimately impacting organizational performance. Without them, AI remains an isolated productivity tool rather than a transformative force.&lt;/p&gt;

&lt;h3&gt;
  
  
  Clear and Communicated AI Stance
&lt;/h3&gt;

&lt;p&gt;A clear and communicated AI stance is one of the most foundational capabilities identified by DORA. In many organizations, ambiguity around AI usage creates uncertainty, which in turn slows adoption and increases risk. Developers often fall into two extremes: either they avoid using AI due to fear of violating policies, or they use it freely without understanding the boundaries. Both scenarios lead to suboptimal outcomes.&lt;/p&gt;

&lt;p&gt;DORA emphasizes that an effective AI stance must be both comprehensible and communicated. It should clearly define what is expected, what is permitted, and how AI can be safely used within the organization. This clarity provides psychological safety, allowing developers to experiment and adopt AI tools with confidence. Importantly, the stance does not need to be overly restrictive or overly permissive—it simply needs to be well-defined and consistently applied.&lt;/p&gt;

&lt;p&gt;The impact of this capability is significant. Organizations with a clear AI stance see improvements in individual effectiveness, organizational performance, and software delivery throughput, while also reducing friction. This is because developers are no longer second-guessing their decisions or navigating uncertainty. Instead, they can focus on using AI effectively within a known framework, which ultimately leads to better outcomes across the board.&lt;/p&gt;

&lt;h3&gt;
  
  
  Healthy Data Ecosystems
&lt;/h3&gt;

&lt;p&gt;DORA identifies healthy data ecosystems as one of the most impactful capabilities for successful AI adoption. AI systems rely heavily on data, and the quality of that data directly influences the quality of outcomes. Organizations with high-quality, accessible, and well-integrated data see significantly stronger benefits from AI compared to those with fragmented or unreliable data systems.&lt;/p&gt;

&lt;p&gt;A healthy data ecosystem is characterized by three key attributes: data must be trustworthy, easily accessible, and unified across the organization. When these conditions are met, AI can operate with the context it needs to produce meaningful and accurate outputs. However, when data is siloed or inconsistent, AI tends to generate results that reflect those inconsistencies, often leading to confusion and rework.&lt;/p&gt;

&lt;p&gt;DORA also highlights that poor data environments lead to what can be described as “localized productivity gains.” Developers may work faster with AI, but their output gets slowed down or corrected later in the process due to data-related issues. This prevents organizations from realizing true end-to-end improvements. Investing in data quality, governance, and accessibility is therefore not just a data initiative—it is a prerequisite for making AI effective at scale. Without it, AI becomes a force multiplier for bad data rather than a driver of better outcomes.&lt;/p&gt;

&lt;h3&gt;
  
  
  AI-Accessible Internal Data
&lt;/h3&gt;

&lt;p&gt;Closely related to healthy data ecosystems is the concept of making internal data accessible to AI systems. DORA distinguishes between simply having good data and ensuring that AI tools can effectively use that data. This capability focuses on connecting AI systems to internal sources such as codebases, documentation, and organizational knowledge. When AI operates without access to internal context, it remains a general-purpose assistant. It can provide useful suggestions, but those suggestions lack specificity and alignment with the organization’s unique systems and practices. In contrast, when AI is connected to internal data, it becomes significantly more effective, offering insights and outputs that are tailored to the organization’s environment. &lt;/p&gt;

&lt;p&gt;DORA’s findings show that this capability has a strong positive impact on both code quality and individual effectiveness. Teams that enable AI to access internal data experience more relevant outputs and fewer errors, which reduces rework and improves overall efficiency.&lt;/p&gt;

&lt;p&gt;However, this capability also comes with responsibility. Poor-quality or outdated data can lead to poor AI outputs at scale. Organizations must ensure that the data being exposed to AI is accurate, up-to-date, and well-maintained. This reinforces the importance of strong data governance and continuous data hygiene as part of AI adoption strategies.&lt;/p&gt;

&lt;h3&gt;
  
  
  Strong Version Control Practices
&lt;/h3&gt;

&lt;p&gt;As AI increases the speed and volume of code generation, version control becomes more critical than ever. DORA’s research highlights that AI-assisted development introduces a level of unpredictability, as generated outputs can vary in quality and correctness. This makes it essential for teams to have strong version control practices in place to manage risk effectively.&lt;/p&gt;

&lt;p&gt;Frequent commits and the ability to rollback changes are particularly important. DORA found that these practices amplify the positive effects of AI adoption. Frequent commits create a clear and traceable history of changes, making it easier to identify issues and isolate problems. Rollback mechanisms provide a safety net, allowing teams to quickly revert changes when something goes wrong.&lt;/p&gt;

&lt;p&gt;This capability enables teams to experiment with AI-generated code without compromising system stability. It transforms version control from a passive tool into an active safeguard that supports safe and continuous development. In an AI-assisted environment, version control is not just about tracking changes—it is about enabling controlled experimentation. Teams that invest in strong version control practices are better positioned to harness the benefits of AI while minimizing the associated risks.&lt;/p&gt;

&lt;h3&gt;
  
  
  Working in Small Batches
&lt;/h3&gt;

&lt;p&gt;Working in small batches is a long-standing best practice in software development, and DORA reinforces its importance in the context of AI. While AI enables developers to generate large amounts of code quickly, large changes are inherently more difficult to review, test, and integrate. This increases the likelihood of errors and slows down the overall delivery process.&lt;/p&gt;

&lt;p&gt;DORA’s research shows that teams working in small batches experience better product performance and reduced friction, even if their perceived individual productivity is slightly lower. Smaller changes are easier to validate, easier to deploy, and less likely to introduce instability into the system.&lt;/p&gt;

&lt;p&gt;This capability acts as a counterbalance to the speed introduced by AI. It ensures that rapid code generation does not lead to uncontrolled complexity. Instead, it channels that speed into manageable, incremental improvements. By focusing on small, testable units of work, teams can maintain a steady flow of value while minimizing risk. This approach aligns with the broader goal of turning individual productivity gains into consistent and reliable system-level performance.&lt;/p&gt;

&lt;h3&gt;
  
  
  User-Centric Focus
&lt;/h3&gt;

&lt;p&gt;DORA’s findings around user-centric focus are particularly striking. The report shows that AI adoption can have dramatically different outcomes depending on whether teams are aligned with user needs. Teams with a strong user-centric focus see improvements in performance, while those without it can actually experience declines.&lt;/p&gt;

&lt;p&gt;This highlights a critical point: AI amplifies direction, not just speed. If teams are focused on delivering user value, AI helps them do it faster and more effectively. However, if teams are focused on output rather than outcomes, AI accelerates the production of features that may not deliver real value. Maintaining a user-centric approach requires continuous alignment with user needs. This includes integrating user feedback into development processes, measuring success based on outcomes rather than outputs, and ensuring that development efforts are guided by clear user goals.&lt;/p&gt;

&lt;p&gt;In an AI-driven environment, developers must take on a more active role in ensuring that generated outputs align with user expectations. This requires a shift in mindset from simply building features to delivering meaningful outcomes.&lt;/p&gt;

&lt;h3&gt;
  
  
  Quality Internal Platforms
&lt;/h3&gt;

&lt;p&gt;The final capability identified by DORA is the presence of high-quality internal platforms. These platforms play a critical role in enabling AI adoption at scale by providing standardized workflows, reducing friction, and ensuring consistency across teams. DORA’s research shows that the impact of AI on organizational performance is heavily influenced by the quality of internal platforms. When platforms are well-designed and provide a seamless developer experience, AI-driven improvements can propagate throughout the organization. When platforms are lacking, these improvements remain isolated.&lt;/p&gt;

&lt;p&gt;Internal platforms serve as the infrastructure that supports modern software development. They provide the tools, processes, and guardrails that allow teams to build, test, and deploy software efficiently and safely. In the context of AI, they ensure that generated outputs can move smoothly through the delivery pipeline. &lt;/p&gt;

&lt;p&gt;By reducing complexity and standardizing processes, internal platforms enable teams to focus on delivering value rather than managing infrastructure. This makes them a key enabler of successful AI adoption.&lt;/p&gt;

&lt;h3&gt;
  
  
  From AI Adoption to Agentic Workflows
&lt;/h3&gt;

&lt;p&gt;As organizations mature across these capabilities, a broader shift begins to emerge. AI is no longer limited to assisting developers at the code level—it starts to participate in workflows across the software development lifecycle. Tasks such as generating changes, validating outputs, and triggering processes become increasingly automated. This shift can be understood as a move toward more agent-assisted or semi-autonomous workflows, where AI systems operate within defined guardrails to support end-to-end processes. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg27hjocsruz5yy345tut.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg27hjocsruz5yy345tut.png" alt="AI adoption to Agentic Workflows" width="800" height="583"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;However, this evolution is only possible when the foundational capabilities identified by DORA are in place. Without strong data, version control, and platforms, introducing automation at the workflow level increases risk rather than reducing it. With the right foundations, however, it enables a new level of efficiency and consistency in software delivery.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Final Shift: From AI Adoption to Platform Orchestration
&lt;/h3&gt;

&lt;p&gt;As organizations mature across these capabilities, the challenge shifts from adoption to orchestration. Having the right practices in place is no longer sufficient - teams need a central layer that connects systems, enforces workflows, and maintains consistency across the entire SDLC. This is where the quality of your internal platform becomes the defining variable. AI embedded within a strong platform multiplies output. AI layered on top of a weak one multiplies chaos. &lt;/p&gt;

&lt;h3&gt;
  
  
  The IDP Imperative: Why Your Platform Is the Make-or-Break Variable
&lt;/h3&gt;

&lt;p&gt;The numbers are hard to ignore. According to the DORA report, 90% of organizations already report using an internal developer platform. Gartner projects that 85% of platform engineering teams will have IDPs by 2028, and 80% of large engineering organizations will have dedicated platform teams by 2026. But here is the critical nuance DORA surfaces: having a platform is not enough. Platform quality is the make-or-break variable for AI ROI. When platform quality is high, AI adoption has a strong and measurable positive impact on organizational performance. When it is low, that impact is negligible — no matter how sophisticated the AI tools in use.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg7bkdsscjxegzkc6l26n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fg7bkdsscjxegzkc6l26n.png" alt="The need for IDP" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This is where the conversation shifts from platform engineering to agentic engineering. The next generation of IDPs cannot simply manage services and workflows - they need to power a shared environment where humans and AI agents run the software development lifecycle together. That requires four critical capabilities: a rich, holistic context lake that correlates data across all environments, services, tools, and policies in real time; orchestration and automation that supports code, low-code, and AI-enabled workflows with governed execution; embedded guardrails and governance with RBAC, confidence thresholds, and human-in-the-loop approval gates; and unified measurement and optimization across DORA metrics, AI impact, and custom standards.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://port.io?utm_source=devto&amp;amp;utm_medium=advocacy&amp;amp;utm_campaign=all-dora-alldevops-apj-q2" rel="noopener noreferrer"&gt;Port.io&lt;/a&gt; is built for exactly this. As an agentic developer portal, Port goes beyond traditional IDP functionality by embedding AI workflows directly into the platform layer - giving developers not just visibility and self-service, but intelligent automation that operates within defined guardrails. The result is not just faster developers. It is a system where humans stay in control, teams consistently ship value, and AI incidents stop derailing delivery.&lt;/p&gt;

&lt;p&gt;You know, you can build the DORA dashboard inside your Port account to see your engineering performance. See below through a simple walkthrough. &lt;a href="https://port.io?utm_source=devto&amp;amp;utm_medium=advocacy&amp;amp;utm_campaign=all-dora-alldevops-apj-q2" rel="noopener noreferrer"&gt;Signup to Port&lt;/a&gt; right now and start measuring your engineering performance.&lt;/p&gt;

&lt;p&gt;  &lt;iframe src="https://www.youtube.com/embed/nqdSoLq_Qe0"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>ai</category>
      <category>devops</category>
      <category>developer</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>This Is How I Automated My Dev Workflow with MCPs - GitHub, Notion &amp; Jira (And Saved Hours)</title>
      <dc:creator>Pavan Belagatti</dc:creator>
      <pubDate>Thu, 02 Apr 2026 06:16:48 +0000</pubDate>
      <link>https://dev.to/pavanbelagatti/this-is-how-i-automated-my-dev-workflow-with-mcps-github-notion-jira-and-saved-hours-5ag2</link>
      <guid>https://dev.to/pavanbelagatti/this-is-how-i-automated-my-dev-workflow-with-mcps-github-notion-jira-and-saved-hours-5ag2</guid>
      <description>&lt;p&gt;AI agents are no longer a novelty - they’re becoming a practical way to speed up engineering work. But there’s a catch: agents don’t do anything useful unless they can access your real systems securely - documentation, tickets, code, deployment details, and operational logs.&lt;/p&gt;

&lt;p&gt;That’s where MCP (Model Context Protocol) changes the game. MCP provides a standard way to connect AI systems to external tools and data sources. Yet, once you actually start wiring MCP into an organization, a new problem appears: managing many MCP servers, many permissions, and many integrations across teams - without turning your platform into a fragile routing monster.&lt;/p&gt;

&lt;p&gt;This is the gap &lt;a href="https://port.io?utm_source=devto&amp;amp;utm_medium=advocacy&amp;amp;utm_campaign=mcp-devopsq2" rel="noopener noreferrer"&gt;Port&lt;/a&gt; fills. Port acts as a unified, governed interface where your MCP servers live - so developers and AI agents get one entry point, consistent permissions, and connected engineering context.&lt;br&gt;
  &lt;iframe src="https://www.youtube.com/embed/6VBhFq5SJ0s"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  The core problem with agentic workflows: “Everything is separate”
&lt;/h2&gt;

&lt;p&gt;Most teams have the same reality behind the scenes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Your documentation is in Notion.&lt;/li&gt;
&lt;li&gt;Your code is in GitHub.&lt;/li&gt;
&lt;li&gt;Your work tracking lives in Jira (and runbooks may be in Confluence).&lt;/li&gt;
&lt;li&gt;Your operational signals are in tools like Sentry or Dynatrace.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff94tsywe8xt8r2fwsb9y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff94tsywe8xt8r2fwsb9y.png" alt="Tools chaos" width="800" height="439"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When an AI agent (or even a human developer) needs to answer a question like “How do we deploy this service?” it’s not one tool—it’s a chain of tools:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;deployment pipeline details&lt;/li&gt;
&lt;li&gt;cluster information&lt;/li&gt;
&lt;li&gt;team context&lt;/li&gt;
&lt;li&gt;runbook/documentation steps&lt;/li&gt;
&lt;li&gt;recent failures and quality signals&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Without a unifying layer, you end up building custom integrations and custom “routing logic” to decide what tool answers which part of the question.&lt;/p&gt;

&lt;h2&gt;
  
  
  How MCP helps - and what it doesn’t solve
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcgzkgfz0daifbnggkjuo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcgzkgfz0daifbnggkjuo.png" alt="MCP image" width="800" height="447"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;MCP is like an industry “connector standard” for AI. Instead of inventing new adapters for each tool, you can expose capabilities through MCP servers. This lets agents access external systems in a consistent way.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;But even with MCP, you still face an organization-level bottleneck&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faedpwjgs04u18168ivt5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Faedpwjgs04u18168ivt5.png" alt="MCP integration hell" width="800" height="490"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;you might have multiple MCP servers (Notion MCP, GitHub MCP, Jira MCP, etc.)&lt;br&gt;
each MCP server has its own permissions model&lt;br&gt;
you need a way to ensure users only see what they’re allowed to access&lt;br&gt;
you need a way to keep knowledge consistent as systems change&lt;/p&gt;

&lt;p&gt;In other words, MCP solves connectivity. Your org still has to solve governance, orchestration, and “one entry point” experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  Port’s idea: one governed interface for all your MCP servers
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fohogpx4afjpac4yl2yzu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fohogpx4afjpac4yl2yzu.png" alt="Port MCP server" width="800" height="435"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://port.io?utm_source=devto&amp;amp;utm_medium=advocacy&amp;amp;utm_campaign=mcp-devopsq2" rel="noopener noreferrer"&gt;Port&lt;/a&gt; positions itself as that unified layer. Think of it as a single, governed gateway sitting in the middle:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Developers connect once (to &lt;a href="https://docs.port.io/ai-interfaces/port-mcp-server/overview-and-installation/" rel="noopener noreferrer"&gt;Port’s MCP server&lt;/a&gt;/entry point).&lt;/li&gt;
&lt;li&gt;Port routes requests to the correct &lt;a href="https://www.port.io/blog/connect-external-mcp-servers-into-port" rel="noopener noreferrer"&gt;external MCP servers&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Port enforces permissions so users and agents see only allowed tools/data.&lt;/li&gt;
&lt;li&gt;Port consolidates engineering knowledge into a connected experience.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The image below shows the “before vs after” framing—fragmented tool access vs Port’s unified gateway approach.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqn27svl88lffgc8qfxld.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqn27svl88lffgc8qfxld.webp" alt="Port MCP connector" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The practical outcome: you stop managing a scattered web of integrations and start scaling agentic AI across the organization.&lt;/p&gt;

&lt;p&gt;This approach shifts from “routing queries” to building connected engineering context. Port doesn’t just pass questions along. The platform synthesizes information across your connected systems into a persistent knowledge graph.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What this means in day-to-day engineering?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SDLC data from one tool can be connected to technical docs from another.&lt;/li&gt;
&lt;li&gt;GitHub commit context can be tied to related tickets and discussions.&lt;/li&gt;
&lt;li&gt;Agents can analyze patterns (deployments, bottlenecks, quality gaps) using a consistent interface.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So instead of writing custom logic like “if question contains X, query tool Y, then parse Z,” you give the agent one source of truth and let Port handle the orchestration.&lt;/p&gt;

&lt;h3&gt;
  
  
  Example 1: Notion MCP—make runbooks and onboarding instantly usable
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm4mr89l6990o8h0k5eu0.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm4mr89l6990o8h0k5eu0.webp" alt="Notion MCP Server" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Documentation is often treated as a static knowledge base. But agentic engineering changes the expectations: documentation must be queryable and actionable.&lt;/p&gt;

&lt;p&gt;When Notion is connected through an MCP server in Port, you can do things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Search and fetch onboarding checklists instantly.&lt;/li&gt;
&lt;li&gt;Create structured documentation pages automatically.&lt;/li&gt;
&lt;li&gt;Generate a deployment runbook for a new service with service owner and monitoring info.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Realistic use case: a developer asks how to deploy an incident response process. Port fetches the correct runbook from Notion and returns it in context, without the user hunting through Notion pages.&lt;/p&gt;

&lt;h3&gt;
  
  
  Example 2: GitHub MCP—understand code changes without spelunking through history
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz9tqzan577o0uc5a04v1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz9tqzan577o0uc5a04v1.png" alt="GutHub MCP Server" width="800" height="364"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub isn’t just where code lives. It’s also where context lives&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;pull request discussions&lt;/li&gt;
&lt;li&gt;commit history&lt;/li&gt;
&lt;li&gt;who changed what&lt;/li&gt;
&lt;li&gt;why it changed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;With GitHub connected via MCP through Port, agents can answer questions like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“Why did we change the cache logic?”&lt;/li&gt;
&lt;li&gt;“What changed in the payment service last week?”&lt;/li&gt;
&lt;li&gt;“What’s the root cause suggested by the PR discussion?”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This shifts engineering from “manual archaeology” to “instant, contextual explanations.” The key advantage isn’t just speed—it’s that the explanation includes the surrounding narrative (PR context, owners, and intent), not just raw diffs.&lt;/p&gt;

&lt;h3&gt;
  
  
  Example 3: Atlassian Rovo MCP (Jira + Confluence)—incident context in one answer
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy7l0r82gzqk8s17iy4ul.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy7l0r82gzqk8s17iy4ul.png" alt="Atlassian Rovo MCP server" width="800" height="442"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Incident response is where context fragmentation becomes brutally expensive. At 3:00 a.m., no one wants to bounce between tools to gather:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;recent incident history (Jira)&lt;/li&gt;
&lt;li&gt;runbooks and procedures (Confluence)&lt;/li&gt;
&lt;li&gt;team notes and next steps&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Port’s approach with the Atlassian MCP bridge (called Atlassian Robo MCP) connects Jira and Confluence content so agents can answer incident questions as one cohesive response.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Outcome&lt;/strong&gt;: faster triage, fewer “where is the runbook?” moments, and lower meantime to recovery because the agent can pull the needed context immediately.&lt;/p&gt;

&lt;h3&gt;
  
  
  Example 4: Cross-tool workflows - create and update artifacts across the SDLC
&lt;/h3&gt;

&lt;p&gt;The most compelling part of this architecture is how it enables workflows that span tools. Port becomes the bridge between systems.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;In the demonstration flow, the idea looks like this&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use Notion data to create a service-related page (e.g., “feature release 2.1”).&lt;/li&gt;
&lt;li&gt;Ask Port to push that structured information into another system (e.g., GitHub repository updates).&lt;/li&gt;
&lt;li&gt;Query related entities (repositories, Jira issues) to enrich the artifact.&lt;/li&gt;
&lt;li&gt;Use the same connected context to trigger or guide next steps.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Instead of hand-carrying information from tool to tool, the agent can operate through Port’s unified interface.&lt;/p&gt;

&lt;p&gt;The screenshot below shows creating a Notion page (service-related artifact) from Port by using the connected MCP tools.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv2p1sercuynymo6iiuaw.webp" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fv2p1sercuynymo6iiuaw.webp" alt="Notion page creation" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Managing MCP servers from one place: Port’s dashboard experience
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F89l7gyw33b76ivoevfjc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F89l7gyw33b76ivoevfjc.png" alt="Managing MCP servers" width="800" height="416"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For platform engineers, the operational challenge is real: once MCP exists, you still need a clean way to onboard it for teams.&lt;/p&gt;

&lt;p&gt;Port’s dashboard is designed for that governance layer. Instead of asking developers to wire up MCP servers individually, platform engineers add and configure MCP server integrations centrally.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The process is straightforward&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Go to Port’s data sources/catalog area.&lt;/li&gt;
&lt;li&gt;Add the MCP server (for example, Notion, GitHub, Atlassian Rovo).&lt;/li&gt;
&lt;li&gt;Choose “when to use” guidance so the agent knows what the MCP server is for.&lt;/li&gt;
&lt;li&gt;Connect via authentication and approve which tools are available.&lt;/li&gt;
&lt;li&gt;Publish so teams can access the unified interface.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy54w6f9kvtf7c1nbe0vc.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fy54w6f9kvtf7c1nbe0vc.gif" alt="Port MCP Connector guide" width="600" height="338"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This “configuration as experience” matters. Developers shouldn’t need to understand how MCP servers are wired behind the scenes—they just need reliable answers and safe actions.&lt;/p&gt;

&lt;h4&gt;
  
  
  Governance and permissions: why this matters for scaling
&lt;/h4&gt;

&lt;p&gt;One of the biggest risks in agentic workflows is accidental access. If your AI can query or modify systems, you need guardrails.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Port’s model emphasizes&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Approved tools only (you can restrict destructive actions).&lt;/li&gt;
&lt;li&gt;User-level permissions (OAuth-based access aligns with existing account permissions).&lt;/li&gt;
&lt;li&gt;Controlled visibility across teams and roles.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This enables scaling MCP across the organization without turning security review into a permanent blocker.&lt;/p&gt;

&lt;h4&gt;
  
  
  How to think about the “single entry point” advantage
&lt;/h4&gt;

&lt;p&gt;When people compare internal developer platforms and agent tooling, it’s easy to reduce the conversation to “one UI.” Port’s value is more fundamental:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;One entry point to access multiple MCP servers.&lt;/li&gt;
&lt;li&gt;One governed interface to reduce integration sprawl.&lt;/li&gt;
&lt;li&gt;One framework to keep permissions consistent.&lt;/li&gt;
&lt;li&gt;One place where engineering context becomes queryable for agents.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s why this approach can genuinely make teams more productive rather than just adding another layer of tooling complexity.&lt;/p&gt;

&lt;h3&gt;
  
  
  Practical rollout checklist: bring MCP to your org without chaos
&lt;/h3&gt;

&lt;p&gt;If you’re planning an MCP-first agentic setup, here’s a pragmatic way to get started with a unified layer like Port:&lt;br&gt;
&lt;strong&gt;1) Start with the “high leverage” tools&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Notion for docs/runbooks/onboarding&lt;/li&gt;
&lt;li&gt;GitHub for code and change context&lt;/li&gt;
&lt;li&gt;Jira/Confluence via Atlassian Robo for planning and incidents&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;2) Decide what actions are safe&lt;/strong&gt;&lt;br&gt;
Not every agent action needs write permissions on day one. Start with read-only where possible, then expand.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3) Define “when to use” descriptions for each MCP server&lt;/strong&gt;&lt;br&gt;
This helps the agent select the right tool for the right job—and reduces incorrect queries.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4) Build cross-tool workflows intentionally&lt;/strong&gt;&lt;br&gt;
Choose one workflow that’s painful today (e.g., incident triage, release note creation, onboarding). Then wire it end-to-end through Port so value is obvious quickly.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5) Keep governance in the platform layer&lt;/strong&gt;&lt;br&gt;
Developers should not have to manage routing logic, authentication, and tool availability per MCP server. Port should.&lt;/p&gt;

&lt;h4&gt;
  
  
  MCP becomes scalable when you add the governed layer
&lt;/h4&gt;

&lt;p&gt;MCP makes it possible to connect AI agents to external tools in a standard way. But the real engineering breakthrough comes when you turn many MCP servers into a single, governed interface.&lt;/p&gt;

&lt;p&gt;Port’s approach—unifying and orchestrating MCP connections, enforcing permissions, and enabling cross-tool context—helps teams stop switching between tools and start building agentic workflows that actually scale. If you’re exploring MCP for agentic engineering, focus on the “last mile” first: one entry point, governed access, and connected context across your SDLC systems.&lt;/p&gt;

&lt;p&gt;Well, &lt;a href="https://port.io?utm_source=devto&amp;amp;utm_medium=advocacy&amp;amp;utm_campaign=mcp-devopsq2" rel="noopener noreferrer"&gt;Port is free to use&lt;/a&gt;. I want you all to experience the power of agentic automation for your dev workflows.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>devops</category>
      <category>developer</category>
      <category>devex</category>
    </item>
    <item>
      <title>Learn How to Build Reliable RAG Applications in 2026!</title>
      <dc:creator>Pavan Belagatti</dc:creator>
      <pubDate>Mon, 19 Jan 2026 07:00:50 +0000</pubDate>
      <link>https://dev.to/pavanbelagatti/learn-how-to-build-reliable-rag-applications-in-2026-1b7p</link>
      <guid>https://dev.to/pavanbelagatti/learn-how-to-build-reliable-rag-applications-in-2026-1b7p</guid>
      <description>&lt;p&gt;LangChain is a developer framework for connecting large language models with data, tools, and application logic. This guide walks through a practical step-by-step workflow to build a Retrieval-Augmented Generation (RAG) document chat: upload documents, chunk and embed them, store embeddings in a vector database, and serve a chat UI that answers only from retrieved context. Use this as a checklist and hands-on recipe for production-style LLM applications.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Here is my complete hands-on video guide below.&lt;/strong&gt;&lt;br&gt;
  &lt;iframe src="https://www.youtube.com/embed/x0W2ZbWDQmE"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Below is the complete code repo to try&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/pavanbelagatti" rel="noopener noreferrer"&gt;
        pavanbelagatti
      &lt;/a&gt; / &lt;a href="https://github.com/pavanbelagatti/LangChain-RAG-Application" rel="noopener noreferrer"&gt;
        LangChain-RAG-Application
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;LangChain RAG Application (DocChat Pro)&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;This repository contains a Retrieval-Augmented Generation (RAG) application built using LangChain, Streamlit, and SingleStore.
The app allows you to upload documents (PDF, TXT, or Markdown), automatically chunk and embed them, store embeddings in SingleStore as a persistent vector database, and chat with your documents using a ChatGPT-like interface.&lt;/p&gt;
&lt;p&gt;The project demonstrates how LangChain connects document loading, text splitting, embeddings, retrieval, and prompt templates into a reliable AI workflow.
It also includes source citations, retrieval debugging, and a reset option for clean demos.&lt;/p&gt;
&lt;p&gt;This is a practical, production-style example of building a real AI application—not a toy chatbot.&lt;/p&gt;
&lt;/div&gt;



&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/pavanbelagatti/LangChain-RAG-Application" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;h2&gt;
  
  
  How LangChain evolved
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2yo9bu41q5iy3jw8gc0s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2yo9bu41q5iy3jw8gc0s.png" alt="langchain logo" width="800" height="200"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Before LangChain, developers used LLMs mainly via standalone prompts. That approach left large gaps: no built-in data connectors, no standard way to persist embeddings, limited support for multi-step logic, and no standardized memory or agent tooling. LangChain was created to fill these gaps by providing composable primitives and patterns for LLM-powered apps.&lt;/p&gt;

&lt;h3&gt;
  
  
  Key milestones in LangChain's evolution:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Open-source modular library that standardizes document loading, splitting, embeddings, and retrievers.&lt;/li&gt;
&lt;li&gt;Agent and chain patterns that let you sequence LLM calls and tool invocations in reproducible workflows.&lt;/li&gt;
&lt;li&gt;Integrations with vector databases, hosts, and model providers to avoid vendor lock-in.&lt;/li&gt;
&lt;li&gt;Growth in community and tooling, with managed runtimes and observability emerging around LangChain patterns.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why use LangChain and when it&amp;nbsp;matters
&lt;/h2&gt;

&lt;p&gt;LangChain is a developer framework that makes it easy to build LLM-powered applications by connecting language models to data sources, vector stores, prompts, memory, and tools. It is not an LLM itself; it is the scaffolding that turns LLMs into reliable, maintainable systems.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F06queaposhngbkttsfz1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F06queaposhngbkttsfz1.png" alt="Why LangChain" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqjir22wxaz583e3188w8.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqjir22wxaz583e3188w8.jpeg" alt="LangChain ecosystem" width="800" height="600"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;LangChain is useful when you need LLM responses tied to custom, up-to-date, or proprietary data and when you want predictable, auditable results. Instead of relying purely on prompt tweaks or costly fine-tuning, LangChain helps you assemble components - loaders, splitters, embeddings, vector stores, retrievers, chains, and prompts - into a repeatable pipeline.&lt;/p&gt;

&lt;h2&gt;
  
  
  Core LangChain components - overview
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbuzee08hdcs5ibyjspnc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbuzee08hdcs5ibyjspnc.png" alt="LangChain components" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;LangChain organizes common functionality into composable components. Understanding each component helps you design correct, debuggable applications.&lt;/p&gt;

&lt;h3&gt;
  
  
  LLMs (model interfaces)
&lt;/h3&gt;

&lt;p&gt;The LLM component is a thin adapter that calls a model provider (OpenAI, Anthropic, local models, etc.). LangChain gives a uniform API so you can swap models without rewriting the rest of your app.&lt;/p&gt;

&lt;h3&gt;
  
  
  Loaders and&amp;nbsp;Indexes
&lt;/h3&gt;

&lt;p&gt;Loaders ingest documents (PDFs, HTML, text, spreadsheets). Index-like modules prepare content for retrieval by preserving metadata and mapping pieces of text to retrievable records.&lt;/p&gt;

&lt;h3&gt;
  
  
  Text splitters and&amp;nbsp;chunking
&lt;/h3&gt;

&lt;p&gt;Splitters break long documents into chunks sized to fit model context windows. Proper chunking balances context completeness and retrieval precision.&lt;/p&gt;

&lt;h3&gt;
  
  
  Embeddings
&lt;/h3&gt;

&lt;p&gt;Embedding models convert text chunks and queries into numeric vectors that capture semantic meaning. LangChain wraps embedding providers so you can change models consistently.&lt;/p&gt;

&lt;h3&gt;
  
  
  Vector stores (vector databases)
&lt;/h3&gt;

&lt;p&gt;Vector stores persist embeddings and support similarity search. LangChain provides connectors for many vector databases and vector-enabled SQL stores.&lt;/p&gt;

&lt;h3&gt;
  
  
  Retrievers
&lt;/h3&gt;

&lt;p&gt;Retrievers are configurable search layers that use embedding similarity, filters, or hybrid search to fetch relevant chunks for a query.&lt;/p&gt;

&lt;h3&gt;
  
  
  Chains
&lt;/h3&gt;

&lt;p&gt;Chains are sequences of modular steps: call a retriever, format a prompt, call an LLM, post-process the answer. Chains let you compose robust workflows with predictable behavior.&lt;/p&gt;

&lt;h3&gt;
  
  
  Agents and&amp;nbsp;tools
&lt;/h3&gt;

&lt;p&gt;Agents combine LLM reasoning with tool execution (APIs, calculators, search). LangChain includes patterns for creating agent loops with toolkits and stopping conditions.&lt;/p&gt;

&lt;h3&gt;
  
  
  Memory
&lt;/h3&gt;

&lt;p&gt;Memory modules manage conversation state - short-term for session context and long-term for persistent user data. Memory is essential for chat experiences that require context continuity.&lt;/p&gt;

&lt;h3&gt;
  
  
  Prompt templates
&lt;/h3&gt;

&lt;p&gt;Prompt templates are reusable instruction blueprints. They standardize system messages, user instructions, and context injection to make outputs predictable and auditable.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tutorial: What we will&amp;nbsp;build?
&lt;/h3&gt;

&lt;p&gt;A typical LangChain RAG pipeline contains these stages. Plan them before writing code:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Document ingestion and metadata extraction.&lt;/li&gt;
&lt;li&gt;Text splitting and chunking strategy (size, overlap).&lt;/li&gt;
&lt;li&gt;Embedding generation with a chosen embedding model.&lt;/li&gt;
&lt;li&gt;Store embeddings in a vector store with metadata.&lt;/li&gt;
&lt;li&gt;Query embedding and retrieval (top-K, filters).&lt;/li&gt;
&lt;li&gt;Construct a prompt combining retrieved context and user query.&lt;/li&gt;
&lt;li&gt;LLM response generation and attribution (sources/similarity scores).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frv6mfq61dencvy328ns6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frv6mfq61dencvy328ns6.png" alt="LangChain RAG" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 1: Define scope, data, and success&amp;nbsp;criteria
&lt;/h3&gt;

&lt;p&gt;Before coding, decide:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Data types: PDFs, DOCX, HTML, CSV, internal wiki pages.&lt;/li&gt;
&lt;li&gt;Latency and scale: number of documents and query QPS.&lt;/li&gt;
&lt;li&gt;Accuracy expectations: must answers strictly cite docs or can it hallucinate?&lt;/li&gt;
&lt;li&gt;Monitoring: logs for retrieval results, source hits, and LLM outputs.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 2: Environment and core libraries
&lt;/h3&gt;

&lt;p&gt;Install the core packages and provider SDKs. Replace provider names with your chosen LLM and vector DB.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;pip install langchain streamlit openai singlestoredb[client] tiktoken&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Set environment variables securely for API keys and vector DB credentials (do not commit&amp;nbsp;.env to source control).&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 3: Ingest documents and split into&amp;nbsp;chunks
&lt;/h3&gt;

&lt;p&gt;Goal: convert each input document into coherent chunks that fit the model's context window and preserve meaning.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Recommended splitter&amp;nbsp;settings&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Chunk size: 500–1000 tokens (or 800–1200 characters depending on language)&lt;/li&gt;
&lt;li&gt;Chunk overlap: 100–200 tokens to preserve context across splits&lt;/li&gt;
&lt;li&gt;Prefer semantic boundaries (sections, paragraphs) over fixed-length cuts when possible&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example ingestion pattern (pseudo-real code using LangChain idioms):&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbq4qoe0n9wq2gcl4xud6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbq4qoe0n9wq2gcl4xud6.png" alt="ingestion pattern" width="800" height="221"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 4: Create embeddings and store them in a vector&amp;nbsp;database
&lt;/h3&gt;

&lt;p&gt;Convert text chunks into vectors with an embedding model and persist them to a vector store. Choose a persistent vector DB (SingleStore, Pinecone, Milvus, Chroma, etc.) for production.&lt;/p&gt;

&lt;p&gt;Important metadata to store with each vector:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;source document id or file name&lt;/li&gt;
&lt;li&gt;chunk index or position&lt;/li&gt;
&lt;li&gt;original text snippet for provenance&lt;/li&gt;
&lt;li&gt;timestamp or ingestion batch id&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Generic embedding + store pattern:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxjw684cm1ptmtmkvv2a1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxjw684cm1ptmtmkvv2a1.png" alt="embeddings" width="800" height="169"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcpvt2wqt51eeqquuzgi6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcpvt2wqt51eeqquuzgi6.png" alt="SingleStore dashboard" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Notes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;If using a managed vector DB, create the collection/table with proper indexing (HNSW/IVF etc.).&lt;/li&gt;
&lt;li&gt;Batch embedding calls to improve throughput and reduce cost.&lt;/li&gt;
&lt;li&gt;Store embeddings and text separately if you need to re-embed with another model later.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Step 5: Build the retriever and RAG&amp;nbsp;chain
&lt;/h3&gt;

&lt;p&gt;Core idea: for each user query, run a semantic search against the vector store to retrieve top-k candidate chunks, then pass those chunks plus the query to the LLM with a strict prompt that instructs the model to only use the provided context.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Retriever configuration&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Top-k (k): 3–10 depending on average chunk length&lt;/li&gt;
&lt;li&gt;Similarity metric: cosine is common for OpenAI embeddings&lt;/li&gt;
&lt;li&gt;Filter by metadata: restrict to a document set or date range if needed&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example RAG flow (LangChain style):&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fingqql8jrgype4zlxd9h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fingqql8jrgype4zlxd9h.png" alt="RAG Workflow" width="800" height="349"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Return source documents (or their URLs) to provide citations in the UI and to reduce hallucination risk.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 6: Build a simple Streamlit chat&amp;nbsp;UI
&lt;/h3&gt;

&lt;p&gt;Key UI features:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;File upload with immediate "Build / Upsert" button&lt;/li&gt;
&lt;li&gt;Toggles for chunk size, overlap, top-k, and temperature&lt;/li&gt;
&lt;li&gt;Streamed LLM responses plus a sidebar showing retrieved sources and debug info&lt;/li&gt;
&lt;li&gt;Button to reset or drop the knowledge base for demos&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjd5u036e03eczu3i2l6w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjd5u036e03eczu3i2l6w.png" alt="chatpro app" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Minimal Streamlit sketch (abbreviated):&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbv7rmmebw8ddgz4ontvl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbv7rmmebw8ddgz4ontvl.png" alt="streamlist UI" width="800" height="324"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Show sources next to each answer using the metadata stored with vectors.&lt;/p&gt;

&lt;h3&gt;
  
  
  Step 7: Tune, test, and&amp;nbsp;monitor
&lt;/h3&gt;

&lt;p&gt;Tuning checklist:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Adjust chunk_size and chunk_overlap until retrieved contexts are coherent.&lt;/li&gt;
&lt;li&gt;Control the LLM temperature: set to 0.0–0.2 for high factuality.&lt;/li&gt;
&lt;li&gt;Adjust top_k: more context can help but increases prompt length and noise.&lt;/li&gt;
&lt;li&gt;Implement answer gating: if the highest-similarity result score is below a threshold, refuse to answer or escalate to human review.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Monitoring and logs to add:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Query traces: query, retrieved doc ids, similarity scores.&lt;/li&gt;
&lt;li&gt;LLM outputs and tokens used (cost monitoring).&lt;/li&gt;
&lt;li&gt;Feedback collection UI to flag incorrect answers and retrain or re-curate data.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Common pitfalls and how to avoid&amp;nbsp;them
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Pitfall: Chunking too small. Result: context torn into fragments, leading to wrong or incomplete answers. Fix: increase chunk_size or use semantic splitting.&lt;/li&gt;
&lt;li&gt;Pitfall: Chunk overlap too high. Result: duplicate context leading to longer prompts and higher cost. Fix: balance overlap to preserve transitions only.&lt;/li&gt;
&lt;li&gt;Pitfall: Not storing provenance. Result: impossible to cite or debug answers. Fix: save source filename, page, and chunk id for each vector.&lt;/li&gt;
&lt;li&gt;Pitfall: Open-ended prompts that allow the model to hallucinate. Fix: use strict system prompts and instruct the model to respond "I don't know" when context is insufficient.&lt;/li&gt;
&lt;li&gt;Pitfall: Ignoring vector DB scaling. Fix: plan index parameters and re-shard or re-index as dataset grows.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  When to choose fine-tuning or retrieval vs prompt engineering
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Prompt engineering: low cost, best for short-term tweaks and small scope tasks.&lt;/li&gt;
&lt;li&gt;RAG (recommended): best when you need up-to-date, auditable answers tied to documents. It avoids expensive model retraining.&lt;/li&gt;
&lt;li&gt;Fine-tuning: choose for enterprise-level domain adaptation where you control the model and cost/latency tradeoffs, or when you need model-level behavior change not achievable with prompts.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Security and governance considerations
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Encrypt credentials, enforce least privilege for vector DB access.&lt;/li&gt;
&lt;li&gt;Remove or redact sensitive text before storing embeddings when compliance requires it.&lt;/li&gt;
&lt;li&gt;Log queries while respecting privacy and retention policies.&lt;/li&gt;
&lt;li&gt;Provide an allowlist/denylist for documents or terms if needed.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Troubleshooting examples
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Low-quality answers despite relevant&amp;nbsp;docs
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Check retriever scores: if similarites are low, embeddings may be mismatched or chunking wrong.&lt;/li&gt;
&lt;li&gt;Increase top_k or expand chunk_overlap to provide more context.&lt;/li&gt;
&lt;li&gt;Ensure embeddings model and similarity metric align (e.g., OpenAI embeddings work well with cosine).&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Model drifts or outdated&amp;nbsp;facts
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;RAG ensures answers are grounded in indexed docs; re-index documents periodically or on every significant update.&lt;/li&gt;
&lt;li&gt;Prefer real-time ingestion for highly dynamic sources.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Practical checklist before&amp;nbsp;launch
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;End-to-end test with representative queries and documents&lt;/li&gt;
&lt;li&gt;Automated unit tests for ingestion and retrieval&lt;/li&gt;
&lt;li&gt;Cost forecast for embeddings and LLM usage&lt;/li&gt;
&lt;li&gt;Monitoring for retrieval hit-rate and source coverage&lt;/li&gt;
&lt;li&gt;Rate limits and graceful degradation for high load&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Screenshots and visual debugging
&lt;/h4&gt;

&lt;p&gt;Inspect the UI for upload progress and the vector DB dashboard to verify stored embeddings and metadata.&lt;/p&gt;

&lt;h3&gt;
  
  
  FAQ
&lt;/h3&gt;

&lt;h4&gt;
  
  
  How does LangChain reduce hallucinations?
&lt;/h4&gt;

&lt;p&gt;By combining retrieval (vector search) with generation. The model receives specific, relevant document chunks as context and a strict instruction to answer only from that context. Returning source documents for every answer enables verification and debugging.&lt;/p&gt;

&lt;h4&gt;
  
  
  Do I need to fine-tune my LLM if I use LangChain?
&lt;/h4&gt;

&lt;p&gt;Not necessarily. For most document-grounded applications, RAG provides strong results without fine-tuning. Fine-tuning is useful if you require model-level behavior changes or want to reduce repeated prompt tokens for very large or high-volume deployments.&lt;/p&gt;

&lt;h4&gt;
  
  
  What settings matter most for retrieval quality?
&lt;/h4&gt;

&lt;p&gt;Chunk size, chunk overlap, embedding model choice, top-k, and similarity threshold. Also ensure your text splitter preserves semantic boundaries where possible.&lt;/p&gt;

&lt;h4&gt;
  
  
  Can LangChain switch LLM providers easily?
&lt;/h4&gt;

&lt;p&gt;Yes. LangChain is designed to be provider-neutral: swap LLM and embedding providers by changing the integration class and configuration without rewriting the pipeline logic.&lt;/p&gt;

&lt;h4&gt;
  
  
  Which vector database should I&amp;nbsp;use?
&lt;/h4&gt;

&lt;p&gt;Choose based on scale and latency needs. For prototypes, lightweight stores FAISS should work. But for production, consider managed or scalable options such as SingleStore. Evaluate costs, persistence, query latency, and SDK maturity.&lt;/p&gt;

&lt;h4&gt;
  
  
  Summary and next&amp;nbsp;steps
&lt;/h4&gt;

&lt;p&gt;LangChain is a practical framework to build reliable, data-grounded LLM applications. Follow the steps in this guide to ingest documents, create embeddings, persist vectors in a scalable store, and assemble a retriever + LLM pipeline with strict prompts. Focus on chunking, metadata for provenance, and monitoring retrieval quality. Start with a small pilot: upload sample documents, tune chunk settings, and iterate on prompt constraints before scaling.&lt;/p&gt;

&lt;p&gt;Ready-to-run components to assemble: a document loader, a robust text splitter, an embeddings layer, a persistent vector store, a retriever, a constrained prompt template, and a lightweight UI. Combine these with monitoring and governance to move from prototype to production.&lt;/p&gt;

</description>
      <category>rag</category>
      <category>ai</category>
      <category>developer</category>
      <category>machinelearning</category>
    </item>
    <item>
      <title>LangChain vs LangGraph: How to Choose the Right AI Framework!</title>
      <dc:creator>Pavan Belagatti</dc:creator>
      <pubDate>Thu, 04 Dec 2025 08:07:26 +0000</pubDate>
      <link>https://dev.to/pavanbelagatti/langchain-vs-langgraph-how-to-choose-the-right-ai-framework-497h</link>
      <guid>https://dev.to/pavanbelagatti/langchain-vs-langgraph-how-to-choose-the-right-ai-framework-497h</guid>
      <description>&lt;h2&gt;
  
  
  Why this comparison matters - LangChain vs LangGraph
&lt;/h2&gt;

&lt;p&gt;I build practical LLM-powered software and have seen two patterns emerge: straightforward, linear pipelines and stateful, agentic workflows. The question "LangChain vs LangGraph" is not academic. It determines architecture, maintenance, and how the system reasons over time.&lt;/p&gt;

&lt;p&gt;When I say "LangChain vs LangGraph" I mean comparing two different design philosophies. LangChain is optimized for linear sequences: take input, run one or more LLM calls in order, store or return the result. LangGraph is optimized for graphs: nodes, edges, loops, and persistent state across many steps.&lt;/p&gt;

&lt;h2&gt;
  
  
  Core idea of LangChain
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fea1p7cjeff62k002xheh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fea1p7cjeff62k002xheh.png" alt="LangChain" width="800" height="433"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I use LangChain when the workflow is essentially A then B then C. LangChain provides a standardized framework that saves developers from hard coding integrations, prompt scaffolding, or manual tool orchestration.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Prompt templates&lt;/strong&gt; - reusable templates that accept variables and generate consistent LLM inputs.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;LLM-agnostic connectors&lt;/strong&gt; - easy swaps between OpenAI, Anthropic, Mistral, Hugging Face models, and more.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Chains&lt;/strong&gt; - the core abstraction: compose multiple steps so each output feeds the next.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Memory&lt;/strong&gt; - short-term or long-term conversational context, useful for stateful chat but limited compared to full state machines.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Agents and tools&lt;/strong&gt; - let models call APIs, calculators, or external services in a structured way.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;LangChain makes developers productive fast. For prototyping prompts, building simple RAG systems, or creating a question-answering pipeline that reads from a vector store and returns a single response, LangChain is an efficient choice.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flomxumhg1u41uxhimtm5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flomxumhg1u41uxhimtm5.png" alt="basic langchain tutorial" width="800" height="495"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Core Idea of LangGraph
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftbwmj9u6zq438ky7czxd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftbwmj9u6zq438ky7czxd.png" alt="Idea of LangGraph" width="800" height="414"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;LangGraph is built on top of LangChain concepts but rethinks workflows as graphs. I think of LangGraph when the system must persist complex state, loop, make decisions, or orchestrate multiple specialized agents.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Nodes&lt;/strong&gt; - discrete tasks: call an LLM, fetch from a database, run a web search, or invoke a summarizer.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Edges&lt;/strong&gt; - define conditional transitions, parallel branches, or loopback paths.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;State&lt;/strong&gt; - dynamic context that evolves across nodes: messages, episodic memory, and checkpoints.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Decision nodes&lt;/strong&gt; - native support for conditional logic and routing to specialist agents.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;LangGraph treats the application as a state machine. Nodes can loop, revisit earlier steps, and perform multi-turn tool calls. This enables agentic behaviors such as reflection, iterative retrieval, or progressive refinement of answers.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2dhepvcv6g81n8syqnb2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2dhepvcv6g81n8syqnb2.png" alt="graph nodes" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Side-by-side differences - practical checklist for LangChain vs LangGraph
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0ztjdm9ck3osters65w1.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0ztjdm9ck3osters65w1.png" alt="LangChain vs LangGraph" width="800" height="702"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;I like to reduce technology choices to a checklist. For "LangChain vs LangGraph" here is the practical comparison I use when deciding which to adopt.&lt;/p&gt;

&lt;h4&gt;
  
  
  Flow type
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;LangChain: linear and sequential.&lt;/li&gt;
&lt;li&gt;LangGraph: cyclic and graph-based with loops.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  State management
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;LangChain: limited conversational memory.&lt;/li&gt;
&lt;li&gt;LangGraph: rich, persistent state across nodes and sessions.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Conditionals and loops
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;LangChain: simple branching and one-shot tool calls.&lt;/li&gt;
&lt;li&gt;LangGraph: built-in conditional edges, loops, and checkpoints.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Complexity and agents
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;LangChain: well-suited to simple chatbots, RAG, or ETL-like LLM pipelines.&lt;/li&gt;
&lt;li&gt;LangGraph: suited to multi-agent systems, autonomous agent behavior, and long-running workflows.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Human in the loop
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;LangChain: possible but not native.&lt;/li&gt;
&lt;li&gt;LangGraph: checkpointing and human-in-the-loop are first-class patterns.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When I weigh "LangChain vs LangGraph", I consider not only current needs but expected future complexity. If the app might grow into a multi-agent orchestration or needs persistent state and retries, starting with LangGraph can save refactors.&lt;/p&gt;

&lt;h3&gt;
  
  
  When to pick LangChain
&lt;/h3&gt;

&lt;p&gt;I recommend LangChain when you need speed of development and your workflow is straightforward. Typical scenarios include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Text transformation pipelines: summarize, translate, or extract information and save results.&lt;/li&gt;
&lt;li&gt;Prototyping prompts and testing chains quickly.&lt;/li&gt;
&lt;li&gt;Single-turn user interactions such as customer support responses.&lt;/li&gt;
&lt;li&gt;Basic RAG systems that perform retrieval from a vector store and return a single synthesized answer.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;LangChain is excellent for these tasks because it provides plug-and-play components - prompt templates, retrievers, and chain combinators - letting you ship quickly without building orchestration primitives yourself.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F453ospfm4ugq6sa5t7ww.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F453ospfm4ugq6sa5t7ww.png" alt="langgraph tutorial" width="800" height="495"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  When to pick LangGraph
&lt;/h3&gt;

&lt;p&gt;I reach for LangGraph when autonomy, iteration, and state are required. Choose LangGraph when your system needs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Multi-step decision making that can loop until an exit condition is met.&lt;/li&gt;
&lt;li&gt;Routing queries to specialist agents depending on context.&lt;/li&gt;
&lt;li&gt;Persistent state across many LLM calls and user interactions.&lt;/li&gt;
&lt;li&gt;Sophisticated tool usage, including multi-turn web searches, summarization, and aggregation of external sources.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example, I built an email drafting agent that retrieves user preferences, consults a calendar, drafts an email, asks for clarifications, and then iteratively refines the draft. That kind of workflow maps naturally to LangGraph.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzh69zxgs5ffrij3zhjnc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzh69zxgs5ffrij3zhjnc.png" alt="full langgraph tutorial" width="800" height="495"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Hands-on walkthrough - a practical LangChain example
&lt;/h4&gt;

&lt;p&gt;I often demonstrate concepts with a RAG example using a vector store. The LangChain pattern looks like this:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Install the required packages and configure API keys.&lt;/li&gt;
&lt;li&gt;Create prompt templates that accept variables such as "objective" and "topic".&lt;/li&gt;
&lt;li&gt;Initialize an LLM or local model connector via Hugging Face, OpenAI, or other providers.&lt;/li&gt;
&lt;li&gt;Store documents in a vector database and create a retriever.&lt;/li&gt;
&lt;li&gt;Build a retrieval-augmented generation chain that retrieves context and synthesizes answers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This pattern stays linear: retrieve relevant docs then generate an answer. It suits many FAQ bots, documentation assistants, and single-pass pipelines. The code is compact and easy to iterate on, which is one of the core advantages when comparing "LangChain vs LangGraph".&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwvbdd1iolbftfjptcsyw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwvbdd1iolbftfjptcsyw.png" alt="RAG Pipeline" width="800" height="495"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Hands-on walkthrough - a practical LangGraph example
&lt;/h4&gt;

&lt;p&gt;Now imagine the same task but with the added need to fetch fresh web results when the local corpus lacks recent information. A LangGraph workflow looks like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Load static content into a vector store from URLs or documents.&lt;/li&gt;
&lt;li&gt;Create graph nodes: retrieve, web search, decision, and generate.&lt;/li&gt;
&lt;li&gt;Define state: track whether the retrieved results answered the user, store interim summaries, and record tool outputs.&lt;/li&gt;
&lt;li&gt;Connect nodes with conditional edges: if local retrieval fails, route to web search; if web search yields too many noisy results, ask clarifying questions; loop back as needed.&lt;/li&gt;
&lt;li&gt;Run the graph and allow it to iterate until a stop condition is met, then return the final synthesis.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;This pattern enables multi-turn tool use and agentic reasoning. In my tests, asking a LangGraph agent about "latest AI developments this month" triggers a web search node when the local knowledge is stale. The agent fetches, summarizes, and checks whether the summary is adequate before presenting it. That behavior highlights the distinction when comparing "LangChain vs LangGraph".&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcz5za2wqyc1aixpn5fgn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcz5za2wqyc1aixpn5fgn.png" alt="fully Langgraph tutorial" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Common patterns and anti-patterns
&lt;/h4&gt;

&lt;p&gt;Over time I found patterns that help decide between "LangChain vs LangGraph". Use them as heuristics.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Pattern&lt;/strong&gt;: Start simple - If the problem is single-pass, build with LangChain to validate your prompts quickly.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pattern&lt;/strong&gt;: Evolve to graph - If your single-pass pipeline accumulates conditionals and stateful checkpoints, refactor into a LangGraph graph incrementally.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Anti-pattern&lt;/strong&gt;: Premature complexity - Avoid implementing a full graph when no loops or persistent state are needed. Over-engineering reduces clarity and increases maintenance cost.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Anti-pattern&lt;/strong&gt;: One-off tool calls - If you need repeated or multi-stage tool orchestration, a linear chain becomes fragile. LangGraph's native edges and state are better suited.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example architecture templates
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8r217htces9siqn5n2dw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8r217htces9siqn5n2dw.png" alt="architecture templates" width="800" height="570"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here are two templates I reuse frequently depending on the "LangChain vs LangGraph" decision.&lt;/p&gt;

&lt;h4&gt;
  
  
  Template A - LangChain RAG&amp;nbsp;pipeline
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;User query → Retriever → LLM prompt → Result → Store conversation (optional)&lt;/li&gt;
&lt;li&gt;Good for document Q&amp;amp;A, help centers, and chatbots where each request is largely independent.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Template B - LangGraph agentic&amp;nbsp;pipeline
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;User query → Retrieve → Decision node (sufficient?) → If no, Web search node → Summarize → Reflect/loop → Final generate → Persist episodic memory&lt;/li&gt;
&lt;li&gt;Good for dynamic information requests, research assistants, and multi-agent workflows that need iterative reasoning.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Practical tips for migration and&amp;nbsp;scaling
&lt;/h4&gt;

&lt;p&gt;If you start with LangChain and need to migrate to LangGraph, I recommend the following:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Identify the branching points in your LangChain where decision logic begins to appear.&lt;/li&gt;
&lt;li&gt;Extract prompt templates and retrievers as independent modules that can be used by graph nodes.&lt;/li&gt;
&lt;li&gt;Introduce a lightweight state store so node outputs can be persisted across invocations.&lt;/li&gt;
&lt;li&gt;Replace monolithic chains with nodes that encapsulate a single responsibility: retrieval, web search, summarization, or validation.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Scaling a LangGraph system requires operational considerations: durable state storage, idempotency of nodes, observability of edges, and human checkpoints for expensive actions. Planning for those early prevents surprises when workflows become long-running.&lt;/p&gt;

&lt;h4&gt;
  
  
  Final decision guide - quick checklist
&lt;/h4&gt;

&lt;p&gt;When I decide between "LangChain vs LangGraph", I run through this checklist:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is the workflow single-pass? Choose LangChain.&lt;/li&gt;
&lt;li&gt;Does it require looping or complex decisioning? Choose LangGraph.&lt;/li&gt;
&lt;li&gt;Will the system need to call multiple tools over time? Lean LangGraph.&lt;/li&gt;
&lt;li&gt;Are you prototyping or exploring prompts? Start with LangChain.&lt;/li&gt;
&lt;li&gt;Do you expect long-term sessions and persistent context? LangGraph is preferable.&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Closing thoughts
&lt;/h4&gt;

&lt;p&gt;Both frameworks share a common goal: make building with LLMs easier. The difference is architectural intent. LangChain shines for linear orchestration and rapid prototyping. LangGraph shines for stateful, agentic, and cyclic workflows that require coordination, persistence, and multi-turn tool usage.&lt;/p&gt;

&lt;p&gt;When I evaluate "LangChain vs LangGraph" for a product, I balance time to ship against future complexity. If you expect your system to become an autonomous assistant or coordinator, start with a graph mindset and migrate components in. If you need a fast, maintainable pipeline today, LangChain will likely serve you well.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;LangChain goes like this - A then B then C, follows a pre-defined path. LangGraph on the other hand, follows a dynamic path. It starts with A, then it decides if it needs B or C. It can go to C directly depending on the scenario. Loop, and repeat until the goal is satisfied.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you want to reproduce the examples I described, begin with prompt templates and a small vector store for LangChain. For LangGraph, model nodes as single-responsibility components and define clear state schemas for the data that flows through the graph.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2e74kkm0lottgsyg1h6f.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2e74kkm0lottgsyg1h6f.png" alt="LangGraph first tutorial" width="800" height="495"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Complete code examples&amp;nbsp;below.&lt;/strong&gt;&amp;nbsp;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;LangChain RAG Tutorial: &lt;a href="https://github.com/pavanbelagatti/LangChain-SingleStore-Package" rel="noopener noreferrer"&gt;https://github.com/pavanbelagatti/LangChain-SingleStore-Package&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Agentic Workflow Tutorial: &lt;a href="https://github.com/pavanbelagatti/LangGraph-Agentic-Tutorial%C2%A0" rel="noopener noreferrer"&gt;https://github.com/pavanbelagatti/LangGraph-Agentic-Tutorial&amp;nbsp;&lt;/a&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Below is my complete video on understanding more about LangChain vs. LangGraph.&lt;br&gt;
  &lt;iframe src="https://www.youtube.com/embed/mysm1WAWXbw"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>ai</category>
      <category>llm</category>
      <category>rag</category>
      <category>agents</category>
    </item>
    <item>
      <title>Transformers: The Magic Engine Behind ChatGPT, Gemini &amp; Every Modern AI Model!</title>
      <dc:creator>Pavan Belagatti</dc:creator>
      <pubDate>Mon, 17 Nov 2025 07:52:47 +0000</pubDate>
      <link>https://dev.to/pavanbelagatti/transformers-the-magic-engine-behind-chatgpt-gemini-every-modern-ai-model-5abk</link>
      <guid>https://dev.to/pavanbelagatti/transformers-the-magic-engine-behind-chatgpt-gemini-every-modern-ai-model-5abk</guid>
      <description>&lt;p&gt;I want to walk you through one of the most important breakthroughs in modern artificial intelligence. The model family called Transformers changed everything about how machines read, understand, and generate language. In this article I explain why Transformers were invented, how they work, and why they sit at the core of systems like GPT, BERT, LLaMA, Claude, and Gemini. I will start from the basics and build up step by step so you can see the full story from simple neural networks to the powerful attention based architecture that powers today's most generative AI systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why we needed a new architecture?
&lt;/h2&gt;

&lt;p&gt;When I first learned about sequence processing in AI I noticed a consistent pattern. Early neural networks were great at classifying static inputs like images or tabular data. But language is not a static object. Language unfolds as a sequence. Words depend on earlier words and sometimes on words that appeared many steps before. If a model cannot remember or focus selectively across the whole sequence, it will lose important context. That is the problem Transformers were built to solve.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxeqfjbt6u8f0hwe9wr8h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxeqfjbt6u8f0hwe9wr8h.png" alt="LLM Architecture" width="735" height="468"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Transformers came into the world to overcome two main limitations. First, earlier models struggled to carry long distance context. Second, those models were often slow to train because they processed tokens one by one. Transformers solved both problems by introducing a powerful mechanism called attention and by processing sequences in parallel. That single change unlocked much larger models, faster training, and far better handling of long context. That is why Transformers now power nearly every large language model and many other AI systems.&lt;/p&gt;

&lt;h2&gt;
  
  
  Machine learning and deep learning
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7t6o6eqt797jx0dbaw2n.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7t6o6eqt797jx0dbaw2n.png" alt="AI Layers" width="800" height="800"&gt;&lt;/a&gt;&lt;br&gt;
&lt;em&gt;&lt;strong&gt;Image credits: ResearchGate.Net&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Let me set the scene by explaining where Transformers sit in the big picture. Artificial intelligence is a broad field. Within it, machine learning is the branch that gives machines the ability to learn from data rather than follow explicitly coded rules. Within machine learning, deep learning is a specialization that uses multi layer artificial neural networks to learn complex patterns from large datasets. Transformers are an architecture within deep learning. They are a specific neural network design that excels at dealing with sequences such as text and speech.&lt;/p&gt;

&lt;p&gt;Machine learning has three common learning paradigms that are worth recalling because they influence how models are trained and used.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1lx4t2v85nn7mma3u39r.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1lx4t2v85nn7mma3u39r.png" alt="machine learning" width="800" height="533"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Supervised learning&lt;/strong&gt;: The model learns from labeled examples. For example, you show many images labeled cat or not cat. The model learns the mapping from image to label and can then predict on new images.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Unsupervised learning&lt;/strong&gt;: The model finds structure in unlabeled data. Clustering customers by behavior or learning useful vector representations of words are typical examples.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reinforcement learning&lt;/strong&gt;: The model learns by trial and error, maximizing rewards. This is common in game playing or robotics where actions lead to feedback signals.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Artificial neural networks (ANNs) and their limitations
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm0vhmgyh08xj8ztb29ow.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fm0vhmgyh08xj8ztb29ow.png" alt="ANNs" width="800" height="405"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Artificial neural networks, or ANNs, are inspired by the brain. They consist of neurons arranged in layers. Each neuron receives inputs, computes a weighted sum, applies a non linear function, and passes a signal forward. Classic feed forward networks work well for image recognition and many other tasks where the entire input can be treated as a static snapshot.&lt;/p&gt;

&lt;p&gt;However feed forward ANNs have a key limitation when it comes to language. They do not have a built-in mechanism to remember earlier words. If you present a sentence to a feed forward network, it sees the sentence as a fixed vector. It does not inherently model sequences or temporal dependencies. Language is not a collection of isolated tokens. Words interact over time. For instance consider the pair dog bites man and man bites dog. The same words appear in both phrases but the meaning is inverted by order. Feed forward methods do not track order naturally. That is why sequence specific models were developed.&lt;/p&gt;
&lt;h3&gt;
  
  
  Recurrent neural networks (RNNs) and the memory problem
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fynl0408f851qgyn3nrcs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fynl0408f851qgyn3nrcs.png" alt="RNNs" width="660" height="188"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;&lt;em&gt;Image credits: GeeksForGeeks&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Recurrent neural networks, or RNNs, were the first widely used family of models designed for sequential data. The core idea is intuitive. Rather than treating the input as a static vector, an RNN reads tokens one at a time and maintains a hidden state or memory vector that summarizes what it has seen so far. Each new token updates the hidden state. This memory is then used to predict the next token or the output label. RNNs therefore give the model a way to remember previous context as the sequence unfolds.&lt;/p&gt;

&lt;p&gt;RNNs were a major step forward, but they had two serious drawbacks.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Vanishing and exploding gradients&lt;/strong&gt;. When training RNNs with long sequences, gradients that propagate back through many steps tend to vanish or explode, making it hard to learn long range dependencies. Variants like LSTM and GRU mitigated this, but the core issue remained challenging.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Sequential computation&lt;/strong&gt;. RNNs process tokens one by one. This sequential nature makes training slow and prevents efficient parallelization on modern hardware. As models grew larger and datasets exploded, this became a severe bottleneck.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So we had a class of models that could remember, but only for a limited number of steps, and they were slow to train. A new idea was needed. That idea is attention.&lt;/p&gt;
&lt;h2&gt;
  
  
  Attention: the key idea
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftworotg2a7zfm4bsnnr5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftworotg2a7zfm4bsnnr5.png" alt="Attention" width="800" height="596"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;&lt;em&gt;Image credits: Wikipedia&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
Attention is a mechanism that allows a model to look selectively at different parts of the input sequence when producing each output. Instead of relying solely on a single hidden state to carry all past information, attention lets the model compute a direct measure of relevance between any two tokens in the sequence. It answers a simple question for every pair of tokens: how much should token A pay attention to token B?&lt;/p&gt;

&lt;p&gt;Why is that powerful? Because attention breaks the sequential bottleneck and allows the model to connect distant tokens directly. Consider the sentence The cat sat on the mat and it was fluffy. When interpreting the word it, attention helps the model link it directly to cat even though the tokens between them might be several steps long. This alleviates the forgetting problem that RNNs faced.&lt;/p&gt;

&lt;p&gt;A key property of attention is parallelism. Attention computations can be done for all token pairs in parallel. This enables much faster training on modern GPUs and TPUs. Attention also makes it easier to scale to very large models and very long sequences.&lt;/p&gt;
&lt;h3&gt;
  
  
  Attention is All You Need
&lt;/h3&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzsw3ygpdiinq9oqdbk6y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzsw3ygpdiinq9oqdbk6y.png" alt="attention is all you need" width="800" height="464"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;That phrase comes from the landmark 2017 paper ‘Attention is All You Need’ that introduced the Transformer architecture. The paper showed that a model built entirely around attention, without recurrent operations, could match or beat prior sequence models on machine translation and other tasks. Crucially, the paper demonstrated that attention based models are faster to train and scale better.&lt;/p&gt;
&lt;h2&gt;
  
  
  Let's dive into Transformers
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkxjs4unub4a1z69molua.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkxjs4unub4a1z69molua.png" alt="Transformer architecture" width="758" height="978"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;At a high level, a Transformer is a neural network architecture that relies primarily on attention mechanisms to process sequences. It replaces the recurrent parts of previous models with attention based blocks and feed forward networks wrapped with normalization and residual connections. Transformers operate on the entire sequence at once and learn relationships between tokens through attention.&lt;/p&gt;

&lt;p&gt;A Transformer typically has two major components in the original design: an encoder and a decoder. The encoder reads and builds a representation of the input. The decoder generates the output sequence based on that representation. Many modern variants use only the encoder or only the decoder depending on the task. For example, BERT is encoder only and is used for understanding tasks. GPT models are decoder only and are focused on generation. The general architecture and the attention concept are shared across all these variants.&lt;/p&gt;
&lt;h3&gt;
  
  
  High level flow
&lt;/h3&gt;

&lt;p&gt;Here is the simplified flow you can keep in mind.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Input tokens are converted into embeddings, numeric vectors that capture meaning.&lt;/li&gt;
&lt;li&gt;Positional information is added to embeddings so the model knows token order.&lt;/li&gt;
&lt;li&gt;The encoder applies stacked layers of multi head self attention and feed forward networks to produce contextualized representations.&lt;/li&gt;
&lt;li&gt;The decoder uses masked self attention to generate tokens step by step while also attending to the encoder outputs to ground generation on the input.&lt;/li&gt;
&lt;li&gt;The final decoder output is passed through a linear layer and softmax to convert scores into probabilities for the next token.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Key components of Transformers
&lt;/h3&gt;

&lt;p&gt;To understand Transformers in more detail, I will break down the most important pieces and explain what each does and why it matters.&lt;/p&gt;
&lt;h4&gt;
  
  
  1. Token embeddings and positional encoding
&lt;/h4&gt;

&lt;p&gt;Text is discrete and machines need numbers. The first step is to convert each token into a vector. Embeddings capture word meaning in continuous space. Similar words or words that appear in similar contexts end up with similar vectors.&lt;/p&gt;

&lt;p&gt;Transformers process the entire sequence in parallel, so they need explicit information about token order. That is the role of positional encoding. We add a positional vector to each token embedding. This combined vector tells the model both what the token is and where it is in the sequence. Without positional signals the model would not be able to distinguish dog bites man from man bites dog.&lt;/p&gt;
&lt;h4&gt;
  
  
  2. Self attention and scaled dot product
&lt;/h4&gt;

&lt;p&gt;The core operation inside Transformers is self attention. For each token we compute three vectors: the query, the key, and the value. Queries and keys are used to compute attention scores that tell us how much one token should attend to another. Values carry the information that will be combined weighted by those attention scores.&lt;br&gt;
Mathematically, we take the dot product of the query for token i with the key for token j, scale the result, and apply softmax across j to get attention weights. Those weights are used to compute a weighted sum of the value vectors, producing a new representation for token i that incorporates information from other tokens. This is done in parallel for all tokens.&lt;/p&gt;
&lt;h4&gt;
  
  
  3. Multi head attention
&lt;/h4&gt;

&lt;p&gt;Multi head attention means we compute several independent attention operations in parallel and then concatenate their outputs. Each attention head can focus on different types of relationships. For example one head might learn to track subject verb agreement while another head learns to attach pronouns to their referents. Multiple heads give the model richer, more diverse ways to relate tokens.&lt;/p&gt;
&lt;h4&gt;
  
  
  4. Add and norm
&lt;/h4&gt;

&lt;p&gt;Residual connections and normalization are critical for training deep models. After each attention or feed forward block we add the block input to the block output and normalize the result. This stabilizes gradients and enables training much deeper stacks of layers. Conceptually, add and norm helps the model combine new transformed information with the original signal while keeping the training dynamics stable.&lt;/p&gt;
&lt;h4&gt;
  
  
  5. Feed forward networks
&lt;/h4&gt;

&lt;p&gt;Each Transformer layer contains a position wise feed forward network. This is a small two layer neural network applied independently to each position. It increases the model capacity by allowing non linear transformation of each token representation. Feed forward layers are applied after attention and help the model refine the contextualized representation.&lt;/p&gt;
&lt;h4&gt;
  
  
  6. Masked attention in the decoder
&lt;/h4&gt;

&lt;p&gt;When generating sequences autoregressively, the model should not peek at future tokens. The decoder uses masked self attention so each position can only attend to previous positions and itself. This prevents cheating and ensures the model learns to predict the next token from what it has generated so far.&lt;/p&gt;
&lt;h4&gt;
  
  
  7. Cross attention from decoder to encoder
&lt;/h4&gt;

&lt;p&gt;In the encoder decoder design, the decoder includes attention layers that attend to encoder outputs. This cross attention step lets the decoder use the encoder representation of the input as context while generating output. It is the mechanism by which the decoder grounds its generation on the input sequence.&lt;/p&gt;
&lt;h4&gt;
  
  
  8. Final linear and softmax
&lt;/h4&gt;

&lt;p&gt;After the decoder produces the final contextualized vectors, a linear projection maps those vectors to vocabulary sized logits. Softmax converts the logits into probabilities over the vocabulary. The highest probability token is chosen as the next output, or a sampling strategy can be used to introduce diversity.&lt;/p&gt;
&lt;h3&gt;
  
  
  Putting it all together: encoder and decoder
&lt;/h3&gt;

&lt;p&gt;Let me summarize the encoder and decoder roles in concrete terms.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Encoder&lt;/em&gt;&lt;/strong&gt;: Takes the input sequence, converts tokens to embeddings, adds positional information, and applies N stacked layers of multi head self attention followed by feed forward networks. The encoder outputs a set of contextualized vectors, one per input token. Those vectors capture how each token relates to others in the input.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Decoder&lt;/em&gt;&lt;/strong&gt;: Starts with output token embeddings plus positional encoding. It uses masked self attention to process the partial output sequence generated so far. Then it uses multi head cross attention to attend to the encoder outputs. It further refines the combined information with feed forward layers and finally produces logits that are converted to probabilities for the next token.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Repeat these blocks and stack many layers. Each layer refines the representation, enabling complex features and long range dependencies to be captured. That is the power of deep Transformers.&lt;/p&gt;
&lt;h3&gt;
  
  
  Why Transformers are so effective
&lt;/h3&gt;

&lt;p&gt;I can condense the reasons why Transformers succeeded into a few connected points.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Parallelism&lt;/strong&gt;. Unlike RNNs, Transformers process all tokens simultaneously. This unlocks massive speedups on GPUs and TPUs, making it feasible to train on very large datasets.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Direct long range interactions&lt;/strong&gt;. Attention connects any pair of tokens directly, so models can capture relationships across long distances without needing to propagate information through many intermediate steps.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Scalability&lt;/strong&gt;. Transformers scale well with model size and data. Increasing layers, hidden sizes, and heads generally leads to better performance when sufficient data and compute are available.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Flexibility&lt;/strong&gt;. The same architecture can be applied to language, vision, audio, and multimodal tasks. The only changes necessary are tokenization and sometimes positional encodings.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Interpretability&lt;/strong&gt;. Attention weights provide a rough, often useful signal about which tokens a model is focusing on. While not a definitive explanation tool, attention maps give us intuition about the model behavior.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Common analogies to understand attention and Transformers
&lt;/h3&gt;

&lt;p&gt;I like using a few simple analogies to make intuition stick.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Reading a paragraph&lt;/strong&gt;. When you read a paragraph, you do not reread every previous sentence in order to understand the current sentence. Your mind jumps to the most relevant earlier lines. Attention does the same. It lets the model jump to the most relevant tokens.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Searchlight&lt;/strong&gt;. Think of attention as a searchlight that shines on relevant words. Multi head attention is multiple searchlights, each tuned to a different pattern such as subject tracking, negation detection, or coreference resolution.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Index cards on a table&lt;/strong&gt;. Imagine laying all words out as index cards. Instead of stacking them and reading sequentially, you can scan across the table and pick the exact card you need. Transformers make it possible to scan the whole table at once.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Concrete examples
&lt;/h3&gt;

&lt;p&gt;Examples cement understanding. Consider the simple sentence: ‘The cat sat on the mat and it was fluffy’. When the model generates the token, direct connections will allow the model to link it back to the cat token even though several tokens separate them.&lt;/p&gt;

&lt;p&gt;Another example is translating a long sentence where the verb in the first clause must agree with a subject in a much later clause. RNNs struggled to retain that subject information across many steps. Transformers handle this by letting the decoder attend directly to the subject token in the encoder outputs.&lt;/p&gt;

&lt;p&gt;Finally, consider tasks where relationships are non local. For instance in code generation, a function defined early can be called much later. Attention enables the model to relate the call site and the definition directly.&lt;/p&gt;
&lt;h3&gt;
  
  
  Variants and modern practice
&lt;/h3&gt;

&lt;p&gt;Although I described the original encoder decoder Transformer, modern systems vary.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Encoder only&lt;/strong&gt;: Models like BERT use only the encoder. They are trained to produce high quality contextualized representations and are suited for classification, question answering, and feature extraction tasks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Decoder only&lt;/strong&gt;: Models like GPT use only the decoder and are trained autoregressively to predict the next token. These models are natural for generation tasks like chat and story writing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Encoder decoder with modifications&lt;/strong&gt;: Machine translation and many sequence transduction tasks still use encoder decoder Transformers, often with task specific adjustments.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sparse and efficient Transformers&lt;/strong&gt;: Researchers are working on variants that reduce the quadratic cost of attention with respect to sequence length, enabling longer context windows at lower compute cost.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Practical implications
&lt;/h3&gt;

&lt;p&gt;The arrival of Transformers led directly to the era of large language models. Because Transformers scale effectively, researchers built increasingly large models trained on web scale data. Those models exhibit surprising capabilities in translation, summarization, question answering, code generation, and more. A few practical consequences are worth noting.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Foundation models&lt;/strong&gt;: Large pre trained Transformer based models serve as foundations that can be fine tuned or prompted for many downstream tasks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transfer learning&lt;/strong&gt;: Pre training on large unlabeled corpora followed by supervised fine tuning or prompt engineering unlocked rapid progress across NLP tasks.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Multimodality&lt;/strong&gt;: Transformers can be extended to multiple modalities simply by changing tokenization. Vision Transformers treat image patches as tokens, enabling a unified architecture across text and vision.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Computation and cost&lt;/strong&gt;: The flip side of scaling is cost. Training large Transformers is expensive and energy intensive. This has pushed work on efficient architectures, distillation, and parameter efficient fine tuning.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  From Transformers to Production: The Role of Data Infrastructure
&lt;/h3&gt;

&lt;p&gt;While Transformers revolutionized how models process language, deploying these systems at scale introduces a critical challenge: managing the embeddings they produce. When models like GPT or BERT convert text into vector representations, those embeddings need to be stored, searched, and combined with enterprise data in real time. This is where specialized data infrastructure becomes essential.&lt;/p&gt;

&lt;p&gt;&lt;a href="http://portal.singlestore.com/intention/cloud?utm_medium=referral&amp;amp;utm_source=pavan&amp;amp;utm_term=transformer&amp;amp;utm_content=devto" rel="noopener noreferrer"&gt;SingleStore&lt;/a&gt; addresses this challenge by providing a unified platform that handles both vector embeddings and traditional enterprise data. The platform offers indexed Approximate Nearest Neighbor search that delivers up to 1000x faster vector search performance compared to precise methods, making it practical to search through millions of embeddings in milliseconds.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz4hwr48riu2n62rbpu4b.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fz4hwr48riu2n62rbpu4b.png" alt="SingleStore database" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For generative AI applications, SingleStore enables Retrieval Augmented Generation, a pattern where relevant enterprise data is matched against user queries using semantic search before being sent to language models. This grounds Transformer-based systems in factual, company-specific information and reduces hallucinations.&lt;/p&gt;

&lt;p&gt;The platform combines vector similarity search with full-text search, SQL analytics, and support for multiple data types including JSON and time-series data. It integrates with leading AI frameworks like LangChain, OpenAI, Hugging Face, and AWS Bedrock, simplifying the path from prototype to production.&lt;/p&gt;

&lt;p&gt;Through SingleStore Notebooks, developers can prototype AI applications using familiar Jupyter-style interfaces while maintaining enterprise-grade security and performance. This bridges the gap between the theoretical power of Transformer architectures and practical deployment requirements that handle real-time data at scale.&lt;/p&gt;
&lt;h3&gt;
  
  
  Limitations and ongoing challenges
&lt;/h3&gt;

&lt;p&gt;Transformers are powerful, but not perfect. Here are some key limitations and open problems I think about.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Quadratic attention cost&lt;/em&gt;&lt;/strong&gt;: Vanilla attention computes interactions between all token pairs, which scales quadratically with sequence length. For very long contexts this becomes prohibitive.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Data and compute hunger&lt;/em&gt;&lt;/strong&gt;: State of the art performance often requires enormous datasets and massive compute budgets. This limits who can train the largest models from scratch.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Hallucinations and factuality&lt;/em&gt;&lt;/strong&gt;: Generative models can produce fluent but incorrect statements. Attention alone does not guarantee truthfulness.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;Interpretability&lt;/em&gt;&lt;/strong&gt;: While attention gives some interpretability, fully understanding why large models produce specific outputs remains challenging.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  Summary and final thoughts
&lt;/h3&gt;

&lt;p&gt;In practical terms Transformers brought three major shifts. First they allowed much larger models to be trained efficiently. Second they enabled models to learn complex, long range dependencies that earlier architectures struggled with. Third they provided a flexible framework that can be adapted to many modalities and tasks.&lt;/p&gt;

&lt;p&gt;If you take away one point it is this. Attention changed the game. By letting models focus on the most relevant parts of a sequence no matter where they appear, Transformers made machines much better at understanding and generating language.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Know more about Transformers in my in-depth YouTube video.&lt;/em&gt;&lt;/strong&gt;&lt;br&gt;
  &lt;iframe src="https://www.youtube.com/embed/0jjeEY7YSmE"&gt;
  &lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>chatgpt</category>
      <category>llm</category>
      <category>ai</category>
      <category>gpt3</category>
    </item>
  </channel>
</rss>
