<?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>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>
