<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>Marling Blog</title>
  <subtitle>Notes on privacy, security and running AI inside a small firm or practice.</subtitle>
  <id>https://marling.io/blog/</id>
  <link rel="alternate" type="text/html" href="https://marling.io/blog/"/>
  <link rel="self" type="application/atom+xml" href="https://marling.io/blog/feed.xml"/>
  <updated>2026-08-20T00:00:00Z</updated>
  <entry>
    <title>What actually leaves the building when you ask Marling a question</title>
    <id>https://marling.io/blog/what-actually-leaves-the-building/</id>
    <link rel="alternate" type="text/html" href="https://marling.io/blog/what-actually-leaves-the-building/"/>
    <published>2026-08-20T00:00:00Z</published>
    <updated>2026-08-20T00:00:00Z</updated>
    <author><name>Rashan Hodge</name></author>
    <summary type="text">The honest, specific answer to the question every practice asks before adopting an AI tool. Not &#34;your data is safe,&#34; but exactly what goes out, what stays, and what happens if the safeguard fails.</summary>
    <content type="html">&lt;p&gt;Every practice that looks at Marling asks some version of the same question: if this thing uses Claude to do its thinking, doesn&#39;t a patient&#39;s name or a client&#39;s case file end up on someone else&#39;s server?&lt;/p&gt;
&lt;p&gt;It&#39;s the right question, and it deserves a specific answer, not a reassurance. Here is exactly what happens.&lt;/p&gt;
&lt;h2&gt;The short version&lt;/h2&gt;
&lt;p&gt;Before a request leaves the device, names, record numbers, dates of birth, and other identifying details are found and replaced with placeholders. The cloud model never sees the real ones. When the answer comes back, the placeholders are swapped for the real values again, on the device, before anyone on your staff reads it. If that detection step can&#39;t run for any reason, the message doesn&#39;t go out at all.&lt;/p&gt;
&lt;p&gt;That&#39;s the whole mechanism. The rest of this post is what&#39;s underneath it, and where its edges are.&lt;/p&gt;
&lt;h2&gt;How the detection actually works&lt;/h2&gt;
&lt;p&gt;Marling uses Presidio, an open-source identification engine originally built at Microsoft, running entirely on the device. It isn&#39;t a list of banned words. It combines pattern matching (a Social Security number has a shape; a phone number has a shape) with language models trained to recognize names, places, and organizations in context, the same way a person reading a sentence knows &amp;quot;Sarah&amp;quot; is a name without being told.&lt;/p&gt;
&lt;p&gt;When your staff sends a message, that text is scanned first. Every match, a name, an address, a medical record number, a date of birth, gets replaced with a placeholder before the request ever reaches Claude or any other cloud model. The model does its reasoning against the placeholder version. When the response comes back, Marling swaps the placeholders back to the real values, on the device, so the draft your staff reads looks normal. The cloud provider never has both the content and the identity in the same place.&lt;/p&gt;
&lt;h2&gt;What happens when the safeguard can&#39;t run&lt;/h2&gt;
&lt;p&gt;A masking system is only as good as what happens when it fails. Marling&#39;s answer is the boring one on purpose: if the detection service is down, errors, or can&#39;t confirm the text is clean, the message does not send. No fallback, no &amp;quot;send anyway&amp;quot; option, no silent pass-through. The failure mode is a staff member has to try again in a minute, not a name reaching a server it shouldn&#39;t.&lt;/p&gt;
&lt;h2&gt;What never leaves at all&lt;/h2&gt;
&lt;p&gt;Some of what Marling does doesn&#39;t touch this pipeline, because it never needs to. When your staff asks a question against your own uploaded documents, that search and retrieval happens on the device itself. It was never going to leave the building, so there&#39;s nothing to mask and nothing to send.&lt;/p&gt;
&lt;h2&gt;The exceptions, and why they exist carefully&lt;/h2&gt;
&lt;p&gt;Not every identifier should be hidden. A practice&#39;s own name, its office phone number, a room number, these usually aren&#39;t sensitive, and masking them by default makes responses harder to read for no privacy benefit. An admin can declare specific exceptions on the device.&lt;/p&gt;
&lt;p&gt;That feature is deliberately narrow. Exceptions are exact phrases, not patterns, because a pattern that matches a few names matches every name, including a patient&#39;s. Anything that looks like it could expose more than the admin intended is refused outright, and the refusal says what it would have exposed. This is the kind of thing that&#39;s easy to get quietly wrong, so it&#39;s built to fail toward masking more, not less, whenever something is ambiguous.&lt;/p&gt;
&lt;h2&gt;The honest caveat&lt;/h2&gt;
&lt;p&gt;Masking covers the completion path, the traffic that goes to a cloud model to do the reasoning work. It is not a claim that nothing can ever go wrong. A staff member can still misread a redacted draft, still paste something into the wrong window, still take a screenshot. No architecture removes human judgment from the picture, and we&#39;re not going to tell you it does.&lt;/p&gt;
&lt;p&gt;What it does mean is specific and verifiable: the text a cloud provider sees, on the path that does the heavy lifting, doesn&#39;t carry the identifiers that would make an exposure a breach instead of a non-event. That&#39;s a narrower promise than &amp;quot;your data is safe.&amp;quot; It&#39;s also one we can actually stand behind.&lt;/p&gt;
&lt;h2&gt;If you want to see it, not just read about it&lt;/h2&gt;
&lt;p&gt;We&#39;re working with a small group of founding design partners who use Marling in their real practice and tell us what to fix. If you&#39;d rather watch how the masking behaves on your own documents than take our word for it, we&#39;d like to hear from you: &lt;a href=&#34;mailto:hello@marling.io&#34;&gt;hello@marling.io&lt;/a&gt;.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>Hundreds of private AI chats just showed up on Google</title>
    <id>https://marling.io/blog/shared-chats-in-search-results/</id>
    <link rel="alternate" type="text/html" href="https://marling.io/blog/shared-chats-in-search-results/"/>
    <published>2026-08-15T00:00:00Z</published>
    <updated>2026-08-15T00:00:00Z</updated>
    <author><name>Rashan Hodge</name></author>
    <summary type="text">A share button, a public URL and a search crawler were all it took. No breach, no attacker. Here is why that particular failure has no equivalent on a device that lives in your own office.</summary>
    <content type="html">&lt;p&gt;In late July, Reddit users noticed something unsettling: typing a simple search operator into Google surfaced page after page of other people&#39;s conversations with Claude, Anthropic&#39;s AI assistant. &lt;a href=&#34;https://www.wired.com/story/private-claude-chats-exposed-in-google-and-bing-search-results/&#34;&gt;Wired&lt;/a&gt;, &lt;a href=&#34;https://fortune.com/2026/07/27/a-trove-of-users-seemingly-private-conversations-with-anthropics-claude-ai-chatbot-showed-up-in-google-search-results/&#34;&gt;Fortune&lt;/a&gt;, and &lt;a href=&#34;https://techcrunch.com/2026/07/27/psa-your-claude-shared-chats-and-artifacts-may-have-ended-up-on-google/&#34;&gt;TechCrunch&lt;/a&gt; each dug through the results and found a detailed medical report on a named patient, clinical trial results listing patient names, documents containing the names and phone numbers of primary-school-aged children, a crypto wallet&#39;s keys, and, in a case that will make any practitioner wince, a lawyer asking the chatbot whether they had to self-report a breach of professional conduct.&lt;/p&gt;
&lt;p&gt;Nobody was hacked. That&#39;s the part worth sitting with.&lt;/p&gt;
&lt;h2&gt;What actually happened&lt;/h2&gt;
&lt;p&gt;Claude, like most consumer AI tools, has a share button. Click it, and the tool creates a public web link: a snapshot of your conversation you can send to a colleague. The interface warns that &amp;quot;anyone with the link can view&amp;quot; the chat.&lt;/p&gt;
&lt;p&gt;What it doesn&#39;t say is what &amp;quot;anyone&amp;quot; means on the open internet. A public URL with no instruction telling search engines to stay away is a page like any other. Post it in a forum, a Slack channel that gets archived, a shared doc, anywhere a crawler can see it, and Google will index it. So it did, for hundreds of conversations.&lt;/p&gt;
&lt;p&gt;Anthropic&#39;s response was, essentially, that the feature worked as designed: users chose to make those chats public. And they&#39;re not wrong. This isn&#39;t a story about one careless vendor. OpenAI went through a nearly identical episode with ChatGPT&#39;s shared links, and so did xAI&#39;s Grok. It&#39;s a story about what consumer AI tools &lt;em&gt;are&lt;/em&gt;: websites, where your conversations live on someone else&#39;s servers, one click away from the public web.&lt;/p&gt;
&lt;p&gt;For most people, that&#39;s a manageable risk. For a practice that handles client files, patient records, or privileged questions, it&#39;s a different calculation entirely. The people whose medical reports showed up in those search results almost certainly thought they were sharing a link with one colleague. The gap between what they intended and what they did was invisible until it wasn&#39;t.&lt;/p&gt;
&lt;h2&gt;Why this failure mode doesn&#39;t exist on a Marling device&lt;/h2&gt;
&lt;p&gt;Marling is a small device that sits on your office network. Your staff open a chat window in their browser and work the way they would with any AI assistant. But the architecture underneath is different in ways that matter for exactly this scenario.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;There is no public link to leak.&lt;/strong&gt; Marling isn&#39;t a website. It runs on the device in your office, reachable only from your own network. When someone on your team shares a conversation, the link they share only works for people who can already reach the device, meaning people inside your practice. There&#39;s no public snapshot on the open internet, so there&#39;s nothing for Google to crawl, nothing to index, nothing to stumble across. The entire category of &amp;quot;shared chat ends up in search results&amp;quot; has no equivalent here.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Identifiers are stripped out of anything that goes to a cloud model.&lt;/strong&gt; Marling still uses frontier models, including Claude, to do the heavy lifting. But before a request leaves the device for one of those models, names, record numbers, and other identifiers are detected and masked on the device itself, then restored in your finished draft. If the masking can&#39;t run, the message doesn&#39;t send. The work that doesn&#39;t need a frontier model, like searching your own uploaded documents, is handled on the device and never leaves at all. So the traffic that does reach a cloud provider doesn&#39;t carry the details that made those leaked chats so damaging. A medical summary without a patient&#39;s name in it is a very different thing to expose than one with it.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;One person&#39;s slip isn&#39;t a silent one.&lt;/strong&gt; In a consumer tool, every staff member has their own account, their own sharing settings, their own habits, and you have no visibility into any of it. Security researchers have a name for this: shadow AI. Marling is one shared, governed device for the whole office, with roles and an audit trail. The tool your team actually uses is the one you can actually see.&lt;/p&gt;
&lt;h2&gt;The honest caveat&lt;/h2&gt;
&lt;p&gt;No system makes data leaks impossible, and anyone who tells you otherwise is selling something. A screenshot can always be emailed; a draft can always be pasted somewhere it shouldn&#39;t go. What architecture &lt;em&gt;can&lt;/em&gt; do is remove the traps: the innocent-looking share buttons whose consequences only become clear when your client&#39;s file is on page two of a Google search.&lt;/p&gt;
&lt;p&gt;That&#39;s the standard we think tools for regulated work should meet: not &amp;quot;be careful,&amp;quot; but &amp;quot;the careless path doesn&#39;t lead anywhere dangerous.&amp;quot; It&#39;s also a standard we hold ourselves to: while writing this piece, we went and audited our own product for the same shape of risk, on the internal machines we test on before anything reaches a practice. &lt;a href=&#34;/blog/caught-before-it-reached-a-practice/&#34;&gt;Here&#39;s what that audit caught&lt;/a&gt;, before it ever became anyone&#39;s problem.&lt;/p&gt;
&lt;h2&gt;If this is the anxiety you&#39;ve been carrying&lt;/h2&gt;
&lt;p&gt;You&#39;re probably already using AI in your practice, quietly, and holding back the real work because of exactly this kind of story. That instinct is correct, and it&#39;s also why we&#39;re building Marling. We&#39;re currently working with a small group of founding design partners who use it in their real work and tell us what helps.&lt;/p&gt;
&lt;p&gt;If that sounds like you, we&#39;d like to hear from you: &lt;a href=&#34;mailto:hello@marling.io&#34;&gt;hello@marling.io&lt;/a&gt;.&lt;/p&gt;
</content>
  </entry>
  <entry>
    <title>We caught our own version of the Claude leak before it ever reached a practice</title>
    <id>https://marling.io/blog/caught-before-it-reached-a-practice/</id>
    <link rel="alternate" type="text/html" href="https://marling.io/blog/caught-before-it-reached-a-practice/"/>
    <published>2026-08-15T00:00:00Z</published>
    <updated>2026-08-15T00:00:00Z</updated>
    <author><name>Rashan Hodge</name></author>
    <summary type="text">When we wrote about the Claude share-link leak, we said the real fix isn&#39;t caution, it&#39;s auditing. So we ran that same audit on ourselves. It worked exactly the way it&#39;s supposed to.</summary>
    <content type="html">&lt;p&gt;When we wrote about the hundreds of private Claude conversations that ended up on Google, our argument wasn&#39;t that Anthropic is careless. It&#39;s that consumer software ships with things switched on by default that nobody audits, until a researcher, a journalist, or a practice finds out the hard way. Writing that argument down is easy. Actually holding ourselves to it means going and checking.&lt;/p&gt;
&lt;p&gt;So we did. Here&#39;s what we found, and why finding it is the point.&lt;/p&gt;
&lt;h2&gt;What we checked&lt;/h2&gt;
&lt;p&gt;Marling&#39;s chat interface is built on Open WebUI, a widely used open-source project. Like most software with a lot of features, it ships with things switched on by default that not every deployment should want. One of them is a &amp;quot;share to community&amp;quot; button: one click sends a full chat transcript to a public, third-party website, entirely outside the boundary where we detect and mask identifying details. It&#39;s the same shape of risk as the Claude story, a one-click action connected to a surface hosted by someone else.&lt;/p&gt;
&lt;p&gt;We run this kind of audit routinely, on the internal development and test machines we build and break things on before anything reaches a practice. That&#39;s exactly where we found it: reachable, on every one of those machines, because it&#39;s the software&#39;s own default and nobody had explicitly turned it off. No customer device was ever running with this setting on. This never touched a practice, a patient, or a client file.&lt;/p&gt;
&lt;p&gt;That&#39;s not luck. It&#39;s the reason internal machines exist separately from what ships.&lt;/p&gt;
&lt;h2&gt;Why this is the system working, not failing&lt;/h2&gt;
&lt;p&gt;A vendor that only ever points at other companies&#39; incidents hasn&#39;t told you anything about what happens when a problem shows up in their own product. We&#39;d rather be the vendor that actually looks, on a schedule, before anyone else has to ask.&lt;/p&gt;
&lt;p&gt;Finding this cost us nothing but the time to look. Not finding it, and having a customer or a researcher find it instead, would have cost a great deal more. That trade is the entire argument for auditing your own product the way you&#39;d audit a vendor&#39;s.&lt;/p&gt;
&lt;h2&gt;What we changed&lt;/h2&gt;
&lt;p&gt;We didn&#39;t stop at flipping a switch, because a one-time fix drifts back the moment someone toggles a setting in an admin panel or a device gets rebuilt. We treated it as a configuration-drift problem.&lt;/p&gt;
&lt;p&gt;New deployments now ship with the setting off by default. For our existing internal fleet, we built a small tool that reads and corrects the setting through the software&#39;s own administrative interface, because our fleet runs two different versions of the underlying software with two incompatible ways of storing that setting, and a shortcut that worked for one silently failed on the other. That tool now runs automatically on every deployment and every feature install, not just once, so the setting can&#39;t quietly turn itself back on. We also added an automated test that fails outright if this setting is ever found on, so it&#39;s something our own build process checks by default, not something a person has to remember.&lt;/p&gt;
&lt;p&gt;We verified it two ways: by reading the actual configuration back from every machine after applying the fix, not trusting the tool&#39;s own success message, and by deliberately forcing the setting back on in a test environment to confirm our new automated check actually catches it. Both passed, everywhere.&lt;/p&gt;
&lt;h2&gt;Why this is the advantage, not the caveat&lt;/h2&gt;
&lt;p&gt;This is only possible because of how Marling is built. We control every device end to end, so we can look for exactly this kind of thing, close it, and prove it stays closed. If this setting were buried in a cloud vendor&#39;s infrastructure instead, you&#39;d have no way to check it, and honestly, neither would they until it was too late.&lt;/p&gt;
&lt;p&gt;We&#39;ll keep running audits like this one, on a schedule, not just when something prompts us to. When we find something, we&#39;ll keep writing about it, the same way we did here.&lt;/p&gt;
&lt;p&gt;If you want to know what else we&#39;ve checked, or what we&#39;re checking next, ask us: &lt;a href=&#34;mailto:hello@marling.io&#34;&gt;hello@marling.io&lt;/a&gt;.&lt;/p&gt;
</content>
  </entry>
</feed>
