<?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: elliot hutchins</title>
    <description>The latest articles on DEV Community by elliot hutchins (@elliot_hutchins_13af77186).</description>
    <link>https://dev.to/elliot_hutchins_13af77186</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%2F4073716%2Fdffb64e3-9cac-44b4-b1f7-10760bf7051e.jpg</url>
      <title>DEV Community: elliot hutchins</title>
      <link>https://dev.to/elliot_hutchins_13af77186</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/elliot_hutchins_13af77186"/>
    <language>en</language>
    <item>
      <title>Your AI Agent Probably Belongs in the Data Pipeline</title>
      <dc:creator>elliot hutchins</dc:creator>
      <pubDate>Thu, 22 Oct 2026 21:15:07 +0000</pubDate>
      <link>https://dev.to/elliot_hutchins_13af77186/your-ai-agent-probably-belongs-in-the-data-pipeline-4mk2</link>
      <guid>https://dev.to/elliot_hutchins_13af77186/your-ai-agent-probably-belongs-in-the-data-pipeline-4mk2</guid>
      <description>&lt;p&gt;There's a question I keep coming back to with AI and data engineering:&lt;/p&gt;

&lt;p&gt;Do we move the data to the agent, or move the agent to where the data already lives?&lt;/p&gt;

&lt;p&gt;Because we're starting to put agents everywhere.&lt;/p&gt;

&lt;p&gt;In the warehouse.&lt;/p&gt;

&lt;p&gt;On the source databases.&lt;/p&gt;

&lt;p&gt;Inside BI.&lt;/p&gt;

&lt;p&gt;Writing transforms.&lt;/p&gt;

&lt;p&gt;Watching queries.&lt;/p&gt;

&lt;p&gt;Building DAGs.&lt;/p&gt;

&lt;p&gt;Debugging pipelines.&lt;/p&gt;

&lt;p&gt;And if you aren't careful, you end up with five agents, five sets of credentials, five different copies of context and a developer laptop somehow holding the whole thing together.&lt;/p&gt;

&lt;p&gt;That doesn't feel like where this should end up.&lt;/p&gt;

&lt;p&gt;Take a boring data stack&lt;/p&gt;

&lt;p&gt;Nothing exotic.&lt;/p&gt;

&lt;p&gt;You've got a handful of MSSQL databases.&lt;/p&gt;

&lt;p&gt;Fivetran moves the data into Snowflake.&lt;/p&gt;

&lt;p&gt;You've got some DAGs taking it through bronze, silver and gold.&lt;/p&gt;

&lt;p&gt;Then BI sits on top.&lt;/p&gt;

&lt;p&gt;Pretty normal.&lt;/p&gt;

&lt;p&gt;Swap MSSQL for MongoDB, Snowflake for Databricks and Fivetran for Hevo if you want.&lt;/p&gt;

&lt;p&gt;The names change.&lt;/p&gt;

&lt;p&gt;The problem really doesn't.&lt;/p&gt;

&lt;p&gt;Now add agents.&lt;/p&gt;

&lt;p&gt;Where do they go?&lt;/p&gt;

&lt;p&gt;The annoying answer is "everywhere"&lt;/p&gt;

&lt;p&gt;Ask a data engineer where the agent belongs and you're probably going to get the classic answer:&lt;/p&gt;

&lt;p&gt;"It depends."&lt;/p&gt;

&lt;p&gt;And, unfortunately, they're right.&lt;/p&gt;

&lt;p&gt;If you're doing BI, maybe the agent should sit near the warehouse and help users build queries and reports.&lt;/p&gt;

&lt;p&gt;If you're using it for ETL design, maybe it needs access to your transformation layer, DAGs or SSIS packages.&lt;/p&gt;

&lt;p&gt;Maybe it's managing transforms directly inside something like Hevo.&lt;/p&gt;

&lt;p&gt;If it's acting more like a DBA, it probably needs to see query plans, database metrics, indexes and workload history.&lt;/p&gt;

&lt;p&gt;Maybe another agent is responsible for data quality.&lt;/p&gt;

&lt;p&gt;Another one owns schema changes.&lt;/p&gt;

&lt;p&gt;Another handles lineage.&lt;/p&gt;

&lt;p&gt;There are about a zillion places where an agent can be useful.&lt;/p&gt;

&lt;p&gt;The interesting problem starts when those agents need each other.&lt;/p&gt;

&lt;p&gt;Your org chart doesn't care about your pipeline&lt;/p&gt;

&lt;p&gt;The database team might own the source.&lt;/p&gt;

&lt;p&gt;Data Engineering owns ingestion and transforms.&lt;/p&gt;

&lt;p&gt;Analytics owns the models.&lt;/p&gt;

&lt;p&gt;BI owns what the business actually sees.&lt;/p&gt;

&lt;p&gt;Dev might own the application producing the data in the first place.&lt;/p&gt;

&lt;p&gt;Those teams aren't always under the same person.&lt;/p&gt;

&lt;p&gt;Sometimes they barely talk.&lt;/p&gt;

&lt;p&gt;The data doesn't care.&lt;/p&gt;

&lt;p&gt;A bad query in the application can hammer the OLTP database, break an ingestion SLA, delay a transform and leave a dashboard showing garbage.&lt;/p&gt;

&lt;p&gt;That's one problem.&lt;/p&gt;

&lt;p&gt;Organizationally, it might belong to four teams.&lt;/p&gt;

&lt;p&gt;And now we're about to recreate that exact same mess with agents.&lt;/p&gt;

&lt;p&gt;A DBA agent discovers the issue.&lt;/p&gt;

&lt;p&gt;A DE agent needs to change something downstream.&lt;/p&gt;

&lt;p&gt;A dev agent needs to fix the source query.&lt;/p&gt;

&lt;p&gt;A BI agent needs to know the data is currently questionable.&lt;/p&gt;

&lt;p&gt;Those agents need shared context around the same goal, even if they have completely different permissions and responsibilities.&lt;/p&gt;

&lt;p&gt;Otherwise we're right back to using people as the transport layer.&lt;/p&gt;

&lt;p&gt;So who is actually running these things?&lt;/p&gt;

&lt;p&gt;You can absolutely give one data engineer a monster setup.&lt;/p&gt;

&lt;p&gt;Claude Code.&lt;/p&gt;

&lt;p&gt;Five MCP servers.&lt;/p&gt;

&lt;p&gt;Snowflake credentials.&lt;/p&gt;

&lt;p&gt;Access to MSSQL.&lt;/p&gt;

&lt;p&gt;AWS.&lt;/p&gt;

&lt;p&gt;Databricks.&lt;/p&gt;

&lt;p&gt;GitHub.&lt;/p&gt;

&lt;p&gt;Whatever else you need.&lt;/p&gt;

&lt;p&gt;Run the whole thing from their laptop.&lt;/p&gt;

&lt;p&gt;And honestly?&lt;/p&gt;

&lt;p&gt;It'll probably work.&lt;/p&gt;

&lt;p&gt;It may even work really well.&lt;/p&gt;

&lt;p&gt;Right up until you show the architecture diagram to Security.&lt;/p&gt;

&lt;p&gt;There's also a more practical problem.&lt;/p&gt;

&lt;p&gt;What happens when something occurs at 2 AM?&lt;/p&gt;

&lt;p&gt;How do I trigger an agent running on someone's laptop because a CDC event showed up?&lt;/p&gt;

&lt;p&gt;What happens when a FIFO event needs processing?&lt;/p&gt;

&lt;p&gt;What if a database crosses a threshold and I want an agent immediately investigating it?&lt;/p&gt;

&lt;p&gt;You can have the laptop wake up every so often and check something.&lt;/p&gt;

&lt;p&gt;That's not the same thing.&lt;/p&gt;

&lt;p&gt;If agents are supposed to become part of the data infrastructure, they need to behave like infrastructure.&lt;/p&gt;

&lt;p&gt;Stop making the agent come looking for work&lt;/p&gt;

&lt;p&gt;This is where I think the placement gets more obvious.&lt;/p&gt;

&lt;p&gt;Put the agents near the tooling that's already moving the data.&lt;/p&gt;

&lt;p&gt;Your ETL infrastructure already has a huge advantage.&lt;/p&gt;

&lt;p&gt;It can reach the source.&lt;/p&gt;

&lt;p&gt;It can reach the destination.&lt;/p&gt;

&lt;p&gt;It already understands when jobs start and stop.&lt;/p&gt;

&lt;p&gt;It sees failures.&lt;/p&gt;

&lt;p&gt;It sees schemas.&lt;/p&gt;

&lt;p&gt;It sees transforms.&lt;/p&gt;

&lt;p&gt;It can react to events.&lt;/p&gt;

&lt;p&gt;And, most importantly, it's already running 24/7.&lt;/p&gt;

&lt;p&gt;You don't have to give some random new service network access to every database in the company.&lt;/p&gt;

&lt;p&gt;You don't need a developer's laptop waiting around for something interesting to happen.&lt;/p&gt;

&lt;p&gt;The infrastructure already exists.&lt;/p&gt;

&lt;p&gt;Put the agent there.&lt;/p&gt;

&lt;p&gt;That doesn't mean stuffing your warehouse into an LLM&lt;/p&gt;

&lt;p&gt;There's another version of this conversation that immediately turns into:&lt;/p&gt;

&lt;p&gt;"How do we get all our enterprise data into the agent?"&lt;/p&gt;

&lt;p&gt;I don't think that's usually the right question.&lt;/p&gt;

&lt;p&gt;Most of the time, don't move the data unless you actually need to.&lt;/p&gt;

&lt;p&gt;Let the database do database things.&lt;/p&gt;

&lt;p&gt;If the agent needs to understand a billion-row table, it probably shouldn't pull a billion rows into context.&lt;/p&gt;

&lt;p&gt;Have it inspect the schema.&lt;/p&gt;

&lt;p&gt;Look at statistics.&lt;/p&gt;

&lt;p&gt;Run a query.&lt;/p&gt;

&lt;p&gt;Sample the data.&lt;/p&gt;

&lt;p&gt;Ask the warehouse to aggregate it.&lt;/p&gt;

&lt;p&gt;Use the database as the compute layer it already is.&lt;/p&gt;

&lt;p&gt;Then give the agent the result it actually needs to make the next decision.&lt;/p&gt;

&lt;p&gt;That's very different from creating another giant copy of your data just so an LLM can stare at it.&lt;/p&gt;

&lt;p&gt;Sometimes moving data does make sense&lt;/p&gt;

&lt;p&gt;There are still cases where moving some of it is useful.&lt;/p&gt;

&lt;p&gt;Maybe you want an isolated subset of production data for investigation.&lt;/p&gt;

&lt;p&gt;Maybe the agent needs a smaller analytical working set.&lt;/p&gt;

&lt;p&gt;Maybe you want to correlate data from several OLTP systems without hammering any of them.&lt;/p&gt;

&lt;p&gt;Maybe you want cheap local execution for exploration before touching the warehouse.&lt;/p&gt;

&lt;p&gt;Fine.&lt;/p&gt;

&lt;p&gt;Move the slice you need.&lt;/p&gt;

&lt;p&gt;But now that movement should be part of the pipeline too.&lt;/p&gt;

&lt;p&gt;It should have lineage.&lt;/p&gt;

&lt;p&gt;Permissions.&lt;/p&gt;

&lt;p&gt;Retention.&lt;/p&gt;

&lt;p&gt;A reason for existing.&lt;/p&gt;

&lt;p&gt;"Claude needed it" probably shouldn't be your entire data governance strategy.&lt;/p&gt;

&lt;p&gt;The agent belongs in the control plane more than the data plane&lt;/p&gt;

&lt;p&gt;This is the distinction I think matters.&lt;/p&gt;

&lt;p&gt;The agent doesn't necessarily need to hold the data.&lt;/p&gt;

&lt;p&gt;It needs to understand where the data is, how it's moving and what it's allowed to do about it.&lt;/p&gt;

&lt;p&gt;A pipeline fails.&lt;/p&gt;

&lt;p&gt;An agent can inspect the source.&lt;/p&gt;

&lt;p&gt;Check whether the schema changed.&lt;/p&gt;

&lt;p&gt;Look at the ingestion job.&lt;/p&gt;

&lt;p&gt;Check the target.&lt;/p&gt;

&lt;p&gt;Inspect the transform.&lt;/p&gt;

&lt;p&gt;Figure out what downstream models are affected.&lt;/p&gt;

&lt;p&gt;Maybe fix the DAG.&lt;/p&gt;

&lt;p&gt;Maybe create the migration.&lt;/p&gt;

&lt;p&gt;Maybe tell another agent that the application needs a change instead.&lt;/p&gt;

&lt;p&gt;That's much closer to a control plane than some giant AI database.&lt;/p&gt;

&lt;p&gt;And now agent-to-agent communication actually makes sense.&lt;/p&gt;

&lt;p&gt;The DBA agent doesn't need the BI agent's credentials.&lt;/p&gt;

&lt;p&gt;The BI agent doesn't need production write access.&lt;/p&gt;

&lt;p&gt;They need to be able to share enough context to work toward the same result.&lt;/p&gt;

&lt;p&gt;Same problem.&lt;/p&gt;

&lt;p&gt;Different domains.&lt;/p&gt;

&lt;p&gt;Different permissions.&lt;/p&gt;

&lt;p&gt;This is also where humans should show up less&lt;/p&gt;

&lt;p&gt;There's no reason a pipeline failure should require three Slack threads before anyone starts fixing it.&lt;/p&gt;

&lt;p&gt;The agents can do quite a bit before that point.&lt;/p&gt;

&lt;p&gt;Discover the issue.&lt;/p&gt;

&lt;p&gt;Figure out where it started.&lt;/p&gt;

&lt;p&gt;Determine what's affected.&lt;/p&gt;

&lt;p&gt;Gather the evidence.&lt;/p&gt;

&lt;p&gt;Hand work to the appropriate domain.&lt;/p&gt;

&lt;p&gt;Make low-risk changes.&lt;/p&gt;

&lt;p&gt;Run validation.&lt;/p&gt;

&lt;p&gt;Then bring a person in when there's actually a decision worth making.&lt;/p&gt;

&lt;p&gt;Not because an agent needed someone to copy an error message from Snowflake into Jira.&lt;/p&gt;

&lt;p&gt;We've already got APIs for that.&lt;/p&gt;

&lt;p&gt;The boring infrastructure matters&lt;/p&gt;

&lt;p&gt;Once you host agents in the data layer, all the unexciting stuff becomes really important.&lt;/p&gt;

&lt;p&gt;Network access.&lt;/p&gt;

&lt;p&gt;SSH tunnels.&lt;/p&gt;

&lt;p&gt;Private connectivity.&lt;/p&gt;

&lt;p&gt;Credential scoping.&lt;/p&gt;

&lt;p&gt;Audit logs.&lt;/p&gt;

&lt;p&gt;Shared state.&lt;/p&gt;

&lt;p&gt;Tool permissions.&lt;/p&gt;

&lt;p&gt;Agent-to-agent messaging.&lt;/p&gt;

&lt;p&gt;Which agent can change what.&lt;/p&gt;

&lt;p&gt;Which agent can only inspect it.&lt;/p&gt;

&lt;p&gt;Which actions require approval.&lt;/p&gt;

&lt;p&gt;This is the stuff that makes the difference between "I made an AI demo against Snowflake" and actually letting agents participate in your data platform.&lt;/p&gt;

&lt;p&gt;The LLM is almost the easy part.&lt;/p&gt;

&lt;p&gt;This is basically where I've landed&lt;/p&gt;

&lt;p&gt;I don't think there's one database where "the agent" belongs.&lt;/p&gt;

&lt;p&gt;There are going to be agents across the stack.&lt;/p&gt;

&lt;p&gt;But I do think there should be a place where those agents run, share context, receive events and interact with the infrastructure without turning every engineer's computer into a tiny integration server.&lt;/p&gt;

&lt;p&gt;For data, the ETL layer is a pretty damn good place to do it.&lt;/p&gt;

&lt;p&gt;It already sits between the systems.&lt;/p&gt;

&lt;p&gt;It already has the connectivity.&lt;/p&gt;

&lt;p&gt;It already owns workflows.&lt;/p&gt;

&lt;p&gt;It already reacts to changes.&lt;/p&gt;

&lt;p&gt;We're just giving it something smarter than another DAG operator.&lt;/p&gt;

&lt;p&gt;Shameless plug: this is the direction I'm building SchemaBounce around.&lt;/p&gt;

&lt;p&gt;Transforms and DAG management are in the same environment as the agents. There's managed DuckDB when you actually do want to offload a working subset of OLTP or warehouse data, a SQL workbench, private VPN and SSH connectivity, A2A messaging between agents, and permission boundaries so the DBA agent doesn't automatically get to become the everything agent.&lt;/p&gt;

&lt;p&gt;Basically, the boring pieces you start needing as soon as you try to take "AI-managed data infrastructure" past a laptop demo.&lt;/p&gt;

&lt;p&gt;I've seen a lot of tools bolt an agent onto one part of the data stack.&lt;/p&gt;

&lt;p&gt;Query the warehouse with AI.&lt;/p&gt;

&lt;p&gt;Generate SQL with AI.&lt;/p&gt;

&lt;p&gt;Build a DAG with AI.&lt;/p&gt;

&lt;p&gt;Useful stuff.&lt;/p&gt;

&lt;p&gt;But that's not really the problem I'm interested in anymore.&lt;/p&gt;

&lt;p&gt;I want the source database, ingestion layer, transforms, warehouse and BI side to be able to work on the same problem without a human spending their day moving context between them.&lt;/p&gt;

&lt;p&gt;The data already has a pipeline.&lt;/p&gt;

&lt;p&gt;Maybe the agents should use it too.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>database</category>
      <category>dataengineering</category>
      <category>datascience</category>
    </item>
    <item>
      <title>Let's Share Sessions. And MCP.</title>
      <dc:creator>elliot hutchins</dc:creator>
      <pubDate>Fri, 04 Sep 2026 04:36:31 +0000</pubDate>
      <link>https://dev.to/elliot_hutchins_13af77186/lets-share-sessions-and-mcp-4lfc</link>
      <guid>https://dev.to/elliot_hutchins_13af77186/lets-share-sessions-and-mcp-4lfc</guid>
      <description>&lt;p&gt;Shared AI sessions make a ton of sense.&lt;/p&gt;

&lt;p&gt;We already do a janky version of this today.&lt;/p&gt;

&lt;p&gt;I talk through something with ChatGPT, copy the useful parts to a friend, and they keep going from there.&lt;/p&gt;

&lt;p&gt;Or I share the conversation.&lt;/p&gt;

&lt;p&gt;Or two people work through the same problem together.&lt;/p&gt;

&lt;p&gt;Nothing weird about that.&lt;/p&gt;

&lt;p&gt;Until the chat has tools.&lt;/p&gt;

&lt;h2&gt;
  
  
  Now give that shared session MCP
&lt;/h2&gt;

&lt;p&gt;Say two developers are working in the same Claude session.&lt;/p&gt;

&lt;p&gt;Both have Google Drive connected.&lt;/p&gt;

&lt;p&gt;Maybe GitHub too.&lt;/p&gt;

&lt;p&gt;Maybe HubSpot.&lt;/p&gt;

&lt;p&gt;AWS.&lt;/p&gt;

&lt;p&gt;Whatever.&lt;/p&gt;

&lt;p&gt;Now we have a problem.&lt;/p&gt;

&lt;p&gt;Most MCP authentication today is built around one person.&lt;/p&gt;

&lt;p&gt;I connect Google Drive. OAuth happens. The agent can access my Drive.&lt;/p&gt;

&lt;p&gt;Perfectly reasonable when I'm the only person using the session.&lt;/p&gt;

&lt;p&gt;Now add User B.&lt;/p&gt;

&lt;p&gt;User A has their Google Drive connection.&lt;/p&gt;

&lt;p&gt;User B has theirs.&lt;/p&gt;

&lt;p&gt;User B says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Find that document User A was looking at and copy it into my Drive.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Which credential gets used?&lt;/p&gt;

&lt;p&gt;If the answer is "the agent figures it out," you've already lost.&lt;/p&gt;

&lt;h2&gt;
  
  
  The model is not your security boundary
&lt;/h2&gt;

&lt;p&gt;This is the part I think we need to be way more aggressive about.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Do not give a shared agent a pile of user credentials and expect the prompt to enforce permissions.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That's not security.&lt;/p&gt;

&lt;p&gt;That's asking nicely.&lt;/p&gt;

&lt;p&gt;If everyone is intentionally using the same shared resource, this is easy enough.&lt;/p&gt;

&lt;p&gt;Use a service account.&lt;/p&gt;

&lt;p&gt;Use an API key.&lt;/p&gt;

&lt;p&gt;Give that MCP connection exactly the permissions the team needs.&lt;/p&gt;

&lt;p&gt;Now the shared session has a shared identity.&lt;/p&gt;

&lt;p&gt;Great.&lt;/p&gt;

&lt;p&gt;But a lot of services don't work that cleanly.&lt;/p&gt;

&lt;p&gt;Google Drive is tied to users.&lt;/p&gt;

&lt;p&gt;HubSpot may be tied to users.&lt;/p&gt;

&lt;p&gt;Facebook definitely gets weird.&lt;/p&gt;

&lt;p&gt;Sometimes OAuth is the only realistic authentication model.&lt;/p&gt;

&lt;p&gt;So now what?&lt;/p&gt;

&lt;h2&gt;
  
  
  Every tool call needs an actor
&lt;/h2&gt;

&lt;p&gt;I think this is the piece most shared-agent designs are missing.&lt;/p&gt;

&lt;p&gt;Don't attach the credential to the chat session.&lt;/p&gt;

&lt;p&gt;Attach authorization to &lt;strong&gt;who caused the tool call to happen&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Every person in the conversation already has an identity.&lt;/p&gt;

&lt;p&gt;Use it.&lt;/p&gt;

&lt;p&gt;User A sends a message.&lt;/p&gt;

&lt;p&gt;That message carries User A's identity through the agent runtime.&lt;/p&gt;

&lt;p&gt;The agent decides it needs Google Drive.&lt;/p&gt;

&lt;p&gt;The request hits an MCP gateway.&lt;/p&gt;

&lt;p&gt;The gateway sees that User A initiated the request and exposes only the MCP connections User A is allowed to use.&lt;/p&gt;

&lt;p&gt;User B sends the next message?&lt;/p&gt;

&lt;p&gt;Same conversation.&lt;/p&gt;

&lt;p&gt;Same context.&lt;/p&gt;

&lt;p&gt;Different authorization.&lt;/p&gt;

&lt;p&gt;That should be non-negotiable.&lt;/p&gt;

&lt;h2&gt;
  
  
  Here's the weird part
&lt;/h2&gt;

&lt;p&gt;User A says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Find my architecture document for project X.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The agent calls Google Drive using User A's authorization.&lt;/p&gt;

&lt;p&gt;It finds the document.&lt;/p&gt;

&lt;p&gt;The shared session now knows that document exists.&lt;/p&gt;

&lt;p&gt;Then User B says:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Cool, copy that file somewhere I can download it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The model understands exactly which file User B means.&lt;/p&gt;

&lt;p&gt;That's good.&lt;/p&gt;

&lt;p&gt;That's the whole reason shared context is useful.&lt;/p&gt;

&lt;p&gt;But User B did not suddenly gain permission to User A's Google Drive.&lt;/p&gt;

&lt;p&gt;Their request hits the gateway.&lt;/p&gt;

&lt;p&gt;Their identity doesn't unlock User A's connection.&lt;/p&gt;

&lt;p&gt;The tool call gets blocked.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Shared context does not need to mean shared authorization.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Those are completely different things.&lt;/p&gt;

&lt;p&gt;We should stop designing systems like they're the same.&lt;/p&gt;

&lt;h2&gt;
  
  
  And yes, there is an obvious hole
&lt;/h2&gt;

&lt;p&gt;User A can still say:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Print the entire document into the chat.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If the agent does that, congratulations, the document is now in the shared conversation.&lt;/p&gt;

&lt;p&gt;User B can read it.&lt;/p&gt;

&lt;p&gt;The gateway can't put the toothpaste back in the tube.&lt;/p&gt;

&lt;p&gt;But that's a different security decision.&lt;/p&gt;

&lt;p&gt;User A authorized bringing that information into shared context.&lt;/p&gt;

&lt;p&gt;What we're preventing is User B independently reaching back through User A's credentials and pulling whatever they want.&lt;/p&gt;

&lt;p&gt;There are probably additional controls you'd want.&lt;/p&gt;

&lt;p&gt;Maybe sensitive tools can't dump full documents into shared sessions.&lt;/p&gt;

&lt;p&gt;Maybe some tool output is only visible to the requesting user.&lt;/p&gt;

&lt;p&gt;Maybe content gets classified before it enters shared context.&lt;/p&gt;

&lt;p&gt;There are a lot of nasty edge cases here.&lt;/p&gt;

&lt;p&gt;But none of that changes the basic rule:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The model should not get to decide whether a user is authorized.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Put MCP behind a gate
&lt;/h2&gt;

&lt;p&gt;I think MCP gets much more useful once you stop treating the connection itself as something the agent owns.&lt;/p&gt;

&lt;p&gt;Put a gateway or proxy in front of it.&lt;/p&gt;

&lt;p&gt;The agent asks for a tool.&lt;/p&gt;

&lt;p&gt;The gateway decides whether the request is allowed.&lt;/p&gt;

&lt;p&gt;Who initiated it?&lt;/p&gt;

&lt;p&gt;Which connection can that person use?&lt;/p&gt;

&lt;p&gt;Which tools are allowed?&lt;/p&gt;

&lt;p&gt;Which resources can that connection access?&lt;/p&gt;

&lt;p&gt;Is this tool even allowed inside this shared session?&lt;/p&gt;

&lt;p&gt;Only after those questions get answered should anything hit the actual MCP server.&lt;/p&gt;

&lt;p&gt;That also gives you somewhere sane to put:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;audit logs&lt;/li&gt;
&lt;li&gt;rate limits&lt;/li&gt;
&lt;li&gt;approvals&lt;/li&gt;
&lt;li&gt;credential rotation&lt;/li&gt;
&lt;li&gt;policy&lt;/li&gt;
&lt;li&gt;resource scoping&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Stuff we already know how to do.&lt;/p&gt;

&lt;p&gt;We're just strangely willing to forget all of it once an LLM is involved.&lt;/p&gt;

&lt;h2&gt;
  
  
  Shared sessions get a lot more useful after this
&lt;/h2&gt;

&lt;p&gt;Once auth lives outside the agent, things get interesting.&lt;/p&gt;

&lt;p&gt;A team could share one GitHub service account.&lt;/p&gt;

&lt;p&gt;User A could have a private Google Drive connection.&lt;/p&gt;

&lt;p&gt;User B could have a private HubSpot connection.&lt;/p&gt;

&lt;p&gt;Everyone can still work inside the same conversation.&lt;/p&gt;

&lt;p&gt;The agent gets the shared reasoning context without getting universal access to every connected system.&lt;/p&gt;

&lt;p&gt;That's a pretty important distinction.&lt;/p&gt;

&lt;p&gt;The session owns context.&lt;/p&gt;

&lt;p&gt;The user owns identity.&lt;/p&gt;

&lt;p&gt;The gateway owns authorization.&lt;/p&gt;

&lt;p&gt;Don't collapse those into one blob.&lt;/p&gt;

&lt;p&gt;That's how you end up with a shared AI session that is one clever prompt away from becoming an internal data exfiltration tool.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Shameless plug:&lt;/strong&gt; this is one of the workflows I'm working through with &lt;strong&gt;SchemaBounce&lt;/strong&gt;. A lot of the design is built around keeping agent context, identity, MCP connections and authorization separate instead of letting one session become God Mode.&lt;/p&gt;

&lt;p&gt;The more MCP moves from demos into real infrastructure, the less comfortable I am with agents holding credentials directly.&lt;/p&gt;

&lt;p&gt;Give the agent tools.&lt;/p&gt;

&lt;p&gt;Give the infrastructure credentials.&lt;/p&gt;

&lt;p&gt;And never let "we share a chat" quietly become "we share access to everything."&lt;/p&gt;

&lt;p&gt;Let me know what you think.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>productivity</category>
      <category>automation</category>
    </item>
    <item>
      <title>Why Are Your AI Automations Still Running on Your Laptop?</title>
      <dc:creator>elliot hutchins</dc:creator>
      <pubDate>Mon, 24 Aug 2026 23:46:14 +0000</pubDate>
      <link>https://dev.to/elliot_hutchins_13af77186/why-are-your-ai-automations-still-running-on-your-laptop-1c5p</link>
      <guid>https://dev.to/elliot_hutchins_13af77186/why-are-your-ai-automations-still-running-on-your-laptop-1c5p</guid>
      <description>&lt;p&gt;You wouldn’t run your SaaS off your laptop.&lt;/p&gt;

&lt;p&gt;So why are we doing it with AI?&lt;/p&gt;

&lt;p&gt;A lot of the AI automation I see right now still depends on a person sitting in the middle moving information around.&lt;/p&gt;

&lt;p&gt;Production throws an error. Someone checks AWS logs, drops them into Claude, figures out what happened and creates a Jira ticket.&lt;/p&gt;

&lt;p&gt;Another dev picks up the ticket and has an agent make the change.&lt;/p&gt;

&lt;p&gt;Someone reviews it. QA tests it. Maybe DevOps has Codex check the deployment logs over MCP.&lt;/p&gt;

&lt;p&gt;Information comes in. A decision gets made. Something happens.&lt;/p&gt;

&lt;p&gt;Pretty simple.&lt;/p&gt;

&lt;p&gt;Except we keep using humans to connect each step.&lt;/p&gt;

&lt;p&gt;We are basically expensive middleware&lt;/p&gt;

&lt;p&gt;Most of these systems already have APIs.&lt;/p&gt;

&lt;p&gt;AWS knows an error happened.&lt;/p&gt;

&lt;p&gt;GitHub knows what changed.&lt;/p&gt;

&lt;p&gt;Jira knows what needs to be done.&lt;/p&gt;

&lt;p&gt;CI knows whether the tests passed.&lt;/p&gt;

&lt;p&gt;The agent can read the code.&lt;/p&gt;

&lt;p&gt;So why does someone still need to copy the error out of CloudWatch, explain it to an agent, copy that answer into Jira, then have someone else feed Jira back into another agent?&lt;/p&gt;

&lt;p&gt;We’ve automated the tasks without really automating the workflow.&lt;/p&gt;

&lt;p&gt;That’s the part I think is going to change.&lt;/p&gt;

&lt;p&gt;Where do you actually need a human?&lt;/p&gt;

&lt;p&gt;This is probably the harder question.&lt;/p&gt;

&lt;p&gt;And every team is going to have a different answer.&lt;/p&gt;

&lt;p&gt;Some changes should absolutely require approval. Some companies have compliance requirements. Sometimes the agent is just wrong.&lt;/p&gt;

&lt;p&gt;AI output is still pretty meh in plenty of cases.&lt;/p&gt;

&lt;p&gt;But it’s getting harder to argue that a human needs to be involved in every step.&lt;/p&gt;

&lt;p&gt;For a lot of work, I think you really need one or two human decisions.&lt;/p&gt;

&lt;p&gt;Did we understand what we are trying to do?&lt;/p&gt;

&lt;p&gt;And later:&lt;/p&gt;

&lt;p&gt;Did we actually do it?&lt;/p&gt;

&lt;p&gt;Everything between those two questions is fair game.&lt;/p&gt;

&lt;p&gt;Even the second one gets interesting when the intent is specific enough.&lt;/p&gt;

&lt;p&gt;If the requirement says this endpoint needs to return X, these tests need to pass, latency can't increase past Y and this error should stop appearing in the logs... a machine can check most of that.&lt;/p&gt;

&lt;p&gt;Probably better than someone clicking around dev for ten minutes.&lt;/p&gt;

&lt;p&gt;Take a boring production bug&lt;/p&gt;

&lt;p&gt;Say a service starts throwing a new error.&lt;/p&gt;

&lt;p&gt;That error could kick off a job automatically.&lt;/p&gt;

&lt;p&gt;Pull the surrounding logs.&lt;/p&gt;

&lt;p&gt;Check what deployed recently.&lt;/p&gt;

&lt;p&gt;Look through the relevant code.&lt;/p&gt;

&lt;p&gt;Figure out the likely cause.&lt;/p&gt;

&lt;p&gt;Create a Jira ticket with the useful context already attached.&lt;/p&gt;

&lt;p&gt;Then pick that work up, create the branch, make the change, add the test and open the PR.&lt;/p&gt;

&lt;p&gt;Deploy it to dev.&lt;/p&gt;

&lt;p&gt;Run the E2E tests.&lt;/p&gt;

&lt;p&gt;Check the logs.&lt;/p&gt;

&lt;p&gt;See if the original problem is still happening.&lt;/p&gt;

&lt;p&gt;Nobody has needed to do anything yet.&lt;/p&gt;

&lt;p&gt;Maybe that's where a developer gets involved.&lt;/p&gt;

&lt;p&gt;They get the issue, the change, the test results and what happened after deployment.&lt;/p&gt;

&lt;p&gt;Approve it or don't.&lt;/p&gt;

&lt;p&gt;If you want to be more conservative, put a person at the beginning too. Let them approve the diagnosis before spending tokens and changing code.&lt;/p&gt;

&lt;p&gt;If you want to hit the gas, make merge approval the checkpoint.&lt;/p&gt;

&lt;p&gt;The exact line isn't really the point.&lt;/p&gt;

&lt;p&gt;The interesting part is how much work happens before you need that line at all.&lt;/p&gt;

&lt;p&gt;The part we're missing is memory&lt;/p&gt;

&lt;p&gt;We already have good agents.&lt;/p&gt;

&lt;p&gt;Claude Code can work through a codebase.&lt;/p&gt;

&lt;p&gt;Codex can work through a codebase.&lt;/p&gt;

&lt;p&gt;MCP gives them access to other systems.&lt;/p&gt;

&lt;p&gt;The piece I keep coming back to is what happens when one agent is done.&lt;/p&gt;

&lt;p&gt;Where does everything it learned go?&lt;/p&gt;

&lt;p&gt;Right now the answer is often a chat window.&lt;/p&gt;

&lt;p&gt;Or a terminal.&lt;/p&gt;

&lt;p&gt;Or Jira after a developer manually summarizes it.&lt;/p&gt;

&lt;p&gt;That's not great.&lt;/p&gt;

&lt;p&gt;The error, logs, investigation, decisions, code changes, test results and deployment results should live somewhere the next step can use them.&lt;/p&gt;

&lt;p&gt;A database would honestly solve a surprising amount of this.&lt;/p&gt;

&lt;p&gt;Call it state, context, memory, whatever.&lt;/p&gt;

&lt;p&gt;Just stop making a person carry it around.&lt;/p&gt;

&lt;p&gt;This is a lot of what I've been thinking about while setting up my automations on SchemaBounce. I started out thinking about where agents do work. Increasingly I think the more interesting problem is the infrastructure that lets them keep doing work without needing somebody to babysit every transition.&lt;/p&gt;

&lt;p&gt;Which gets me back to the laptop&lt;/p&gt;

&lt;p&gt;You can build almost all of this locally today.&lt;/p&gt;

&lt;p&gt;A couple MCP servers, Claude Code or Codex, some AWS access, GitHub, Jira and a little glue code.&lt;/p&gt;

&lt;p&gt;I've done versions of it. A lot of developers have.&lt;/p&gt;

&lt;p&gt;But eventually you end up with a pretty funny architecture:&lt;/p&gt;

&lt;p&gt;Your laptop has become production infrastructure.&lt;/p&gt;

&lt;p&gt;Close the lid and your automation is gone.&lt;/p&gt;

&lt;p&gt;VPN drops? Gone.&lt;/p&gt;

&lt;p&gt;Token expires? Gone.&lt;/p&gt;

&lt;p&gt;Someone else wants to use it? Have fun recreating your setup.&lt;/p&gt;

&lt;p&gt;Want to know exactly why an agent made a decision three weeks ago? Hopefully you kept the terminal open.&lt;/p&gt;

&lt;p&gt;Once these things are actually doing parts of the SDLC, they probably need the same boring stuff we expect from everything else we run.&lt;/p&gt;

&lt;p&gt;Hosted somewhere stable.&lt;/p&gt;

&lt;p&gt;Scoped credentials.&lt;/p&gt;

&lt;p&gt;Persistent state.&lt;/p&gt;

&lt;p&gt;Logs.&lt;/p&gt;

&lt;p&gt;Retries.&lt;/p&gt;

&lt;p&gt;Timeouts.&lt;/p&gt;

&lt;p&gt;Versioned workflows.&lt;/p&gt;

&lt;p&gt;An audit trail.&lt;/p&gt;

&lt;p&gt;Observability.&lt;/p&gt;

&lt;p&gt;Not because any of that is exciting.&lt;/p&gt;

&lt;p&gt;Because the goal shouldn't be to build the world's coolest prompt running on a MacBook.&lt;/p&gt;

&lt;p&gt;The interesting version is when an error can happen at 2 AM, the system can investigate it, put together a fix, prove what it tested, and have something useful waiting for a developer in the morning.&lt;/p&gt;

&lt;p&gt;No copy/paste required.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>automaton</category>
      <category>programming</category>
      <category>devops</category>
    </item>
  </channel>
</rss>
