<?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: Henry Bonson</title>
    <description>The latest articles on DEV Community by Henry Bonson (@h1gbosn).</description>
    <link>https://dev.to/h1gbosn</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3603330%2Fa21155d5-5f51-4832-911d-31fc8d8162b6.png</url>
      <title>DEV Community: Henry Bonson</title>
      <link>https://dev.to/h1gbosn</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/h1gbosn"/>
    <language>en</language>
    <item>
      <title>What Is Vibe Coding in 2026? One Year From Karpathy's Tweet</title>
      <dc:creator>Henry Bonson</dc:creator>
      <pubDate>Mon, 02 Feb 2026 09:03:12 +0000</pubDate>
      <link>https://dev.to/h1gbosn/what-is-vibe-coding-in-2026-one-year-from-karpathys-tweet-5f43</link>
      <guid>https://dev.to/h1gbosn/what-is-vibe-coding-in-2026-one-year-from-karpathys-tweet-5f43</guid>
      <description>&lt;p&gt;What is vibe coding in 2026? Exactly one year ago — February 2, 2025 — Andrej Karpathy posted the tweet that started it. But here's the thing: what Karpathy meant and what "vibe coding" means now are two different things.&lt;/p&gt;

&lt;p&gt;&lt;iframe class="tweet-embed" id="tweet-1886192184808149383-633" src="https://platform.twitter.com/embed/Tweet.html?id=1886192184808149383"&gt;
&lt;/iframe&gt;

  // Detect dark theme
  var iframe = document.getElementById('tweet-1886192184808149383-633');
  if (document.body.className.includes('dark-theme')) {
    iframe.src = "https://platform.twitter.com/embed/Tweet.html?id=1886192184808149383&amp;amp;theme=dark"
  }



&lt;/p&gt;

&lt;p&gt;When Andrej Karpathy first used the term, he meant something specific. You tell the agent what to do and evaluate the result. The key "vibe" is that you don't dig into HOW the code is written. Something doesn't work? Just write the next prompt, and so on.&lt;/p&gt;

&lt;p&gt;Now "vibe coding" often means any AI-assisted development at all. Though honestly — in many cases, that's exactly how it works. We're already seeing derivatives — vibe design, vibe ops, vibe anything. But professional developers need more than vibes. That's where approaches like spec-driven development come in — and that's what this series is about.&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%2Fcdn.banatie.app%2Fblog%2Fhenry-devto%2Fimg%2Fc0c3ad3d-13ee-4dbf-9f4a-5db3bf64b378" 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%2Fcdn.banatie.app%2Fblog%2Fhenry-devto%2Fimg%2Fc0c3ad3d-13ee-4dbf-9f4a-5db3bf64b378" alt="Comic: Senior developer explains you need to understand code first, junior admits he builds first then figures out structure" width="1376" height="578"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Let's be honest: when you accept the agent's changes without looking, you catch yourself thinking — is this actually done right, can I trust what the LLM generated without reviewing it? When a colleague says they vibe-coded some functionality — do you picture thoughtful architecture or more like "somehow works"? Is vibe coding cheating and irresponsibility, or a perfectly professional approach?&lt;/p&gt;

&lt;p&gt;What I know for certain — AI development is here, whatever we call it. According to Stack Overflow 2024, 76% of developers use or plan to use AI tools. About a third of senior developers — those with 10+ years of experience — generate more than half their code with AI.&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%2Fcdn.banatie.app%2Fblog%2Fhenry-devto%2Fimg%2F1175042e-1e41-4675-8fb3-25febe7cedea" 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%2Fcdn.banatie.app%2Fblog%2Fhenry-devto%2Fimg%2F1175042e-1e41-4675-8fb3-25febe7cedea" alt="Infographic: AI adoption among developers - 76% use AI tools, productivity and trust metrics" width="800" height="446"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here's what's out there — and what I actually use. Different approaches exist, giving more control at different stages of work. The point is knowing when to use which. In this article, I'll cover vibe coding itself and spec-driven development — then we'll go through other approaches in follow-up parts.&lt;/p&gt;




&lt;h2&gt;
  
  
  Vibe Coding: The Entry Point
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Credentials:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Coined by &lt;a href="https://x.com/karpathy/status/1886192184808149383" rel="noopener noreferrer"&gt;Andrej Karpathy&lt;/a&gt; (February 2, 2025)&lt;/li&gt;
&lt;li&gt;&lt;a href="https://www.collinsdictionary.com/woty" rel="noopener noreferrer"&gt;Collins Dictionary Word of the Year 2025&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://en.wikipedia.org/wiki/Vibe_coding" rel="noopener noreferrer"&gt;Wikipedia article&lt;/a&gt; documenting the phenomenon&lt;/li&gt;
&lt;li&gt;Referenced in academic papers: &lt;a href="https://arxiv.org/abs/2512.14012" rel="noopener noreferrer"&gt;arXiv 2512.14012&lt;/a&gt; "Professional Software Developers Don't Vibe, They Control" (University of Michigan, December 2025)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Iterative prompting until code works&lt;/li&gt;
&lt;li&gt;No upfront planning, minimal specification&lt;/li&gt;
&lt;li&gt;Trust AI to handle details, fix issues as they appear&lt;/li&gt;
&lt;li&gt;Evaluate results visually or by running the code&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Vibe coding is a great approach. Really. I use it often myself — though I still use my keyboard for this. It works perfectly for non-critical features, dev tools, prototypes, experiments.&lt;/p&gt;

&lt;p&gt;When do I use it? When the result is easy to evaluate visually. When scope is obviously localized to one or a few files.&lt;/p&gt;

&lt;p&gt;Do I look at the diff? Honestly, almost always. But I don't check every line — I quickly assess which files changed, what was added or removed. This lets me catch moments when the AI "went off track" fast.&lt;/p&gt;

&lt;p&gt;Does it produce bad code? Maybe, but there are simple ways to improve quality: describe code style in CLAUDE.md (or AGENTS.md), describe the architecture of the relevant part, provide examples of existing similar features as templates, ask the agent to run typecheck, linter, and prettier when done.&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%2Fcdn.banatie.app%2Fblog%2Fhenry-devto%2Fimg%2Fc4c24f43-d0ac-45d2-84d0-6cb0624a8957" 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%2Fcdn.banatie.app%2Fblog%2Fhenry-devto%2Fimg%2Fc4c24f43-d0ac-45d2-84d0-6cb0624a8957" alt="Comic: Developer shows Karpathy's vibe coding tweet, colleague says now he can do this officially" width="1376" height="578"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;On the other hand, there are pitfalls. 27% of companies have banned AI tools at least temporarily over privacy and security concerns. Apple restricted ChatGPT and Copilot. Amazon banned ChatGPT after discovering responses resembling internal data. Samsung had an employee leak confidential information through ChatGPT.&lt;/p&gt;

&lt;p&gt;Be careful with security. Don't use vibe coding on critical infrastructure. Especially where you can't easily roll back changes.&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%2Fcdn.banatie.app%2Fblog%2Fhenry-devto%2Fimg%2Fc5735016-326f-48f6-b8b7-cb35890739a8" 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%2Fcdn.banatie.app%2Fblog%2Fhenry-devto%2Fimg%2Fc5735016-326f-48f6-b8b7-cb35890739a8" alt="Infographic: Vibe Coding DO and DON'T - when to use and when to avoid" width="800" height="339"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You might ask — is it even legitimate to use vibe coding at work? Absolutely! First, you only have so much attention in a day. I'd rather save my focus for the hard stuff — and delegate simple tasks and routine to AI. It'll do it faster anyway. Second, techniques exist beyond vibe coding that significantly improve development quality and reliability.&lt;/p&gt;

&lt;p&gt;So what are these methods?&lt;/p&gt;




&lt;h2&gt;
  
  
  Spec-Driven Development: Structure First
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Credentials:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Formalized by GitHub Engineering Team: &lt;a href="https://github.com/github/spec-kit" rel="noopener noreferrer"&gt;GitHub Spec Kit&lt;/a&gt; (open-source, MIT license, September 2025)&lt;/li&gt;
&lt;li&gt;Official announcement: &lt;a href="https://github.blog/ai-and-ml/generative-ai/spec-driven-development-with-ai-get-started-with-a-new-open-source-toolkit/" rel="noopener noreferrer"&gt;"Spec-driven development with AI: Get started with a new open source toolkit"&lt;/a&gt; (GitHub Blog, September 1, 2025)&lt;/li&gt;
&lt;li&gt;Analysis by &lt;a href="https://martinfowler.com/articles/exploring-gen-ai/sdd-3-tools.html" rel="noopener noreferrer"&gt;Martin Fowler&lt;/a&gt;: "Understanding Spec-Driven Development"&lt;/li&gt;
&lt;li&gt;Featured in &lt;a href="https://www.thoughtworks.com/en-us/radar" rel="noopener noreferrer"&gt;Thoughtworks Technology Radar&lt;/a&gt; Volume 33 (November 2025)&lt;/li&gt;
&lt;li&gt;Production tools: &lt;a href="https://aws.amazon.com/startups/prompt-library/kiro-project-init" rel="noopener noreferrer"&gt;AWS Kiro&lt;/a&gt; (spec-driven IDE, public preview July 2025), &lt;a href="https://tessl.io/blog/tessl-launches-spec-driven-framework-and-registry/" rel="noopener noreferrer"&gt;Tessl Framework&lt;/a&gt; (closed beta, 10,000+ specs in registry)&lt;/li&gt;
&lt;li&gt;Community solutions: &lt;a href="https://recruit.group.gmo/engineer/jisedai/blog/the-bmad-method-a-framework-for-spec-oriented-ai-driven-development/" rel="noopener noreferrer"&gt;BMAD Method&lt;/a&gt; (21 specialized agents), &lt;a href="https://mcpmarket.com/server/openspec" rel="noopener noreferrer"&gt;OpenSpec&lt;/a&gt; (lightweight CLI, brownfield-first)&lt;/li&gt;
&lt;li&gt;Widely used by: Claude Code users, enterprise teams, GitHub Copilot Workspace&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;How it works:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Write detailed specification BEFORE code. Spec includes requirements, architecture, API contracts, error handling, edge cases. AI executes against the spec. The spec becomes living documentation — often saved as &lt;code&gt;CLAUDE.md&lt;/code&gt; or &lt;code&gt;.spec&lt;/code&gt; files in project root.&lt;/p&gt;

&lt;p&gt;You decide WHAT to build, define the STRUCTURE, go as deep as you need. AI carefully handles the implementation.&lt;/p&gt;

&lt;p&gt;This is actually my main approach for large projects. Especially when adding a new section or functionality that didn't exist before. Time spent writing spec is often significant. But it gives good control — modern models follow instructions pretty well. You can vary the degree of freedom for the agent: you can specify file and folder names yourself, or just give an outline of the solution.&lt;/p&gt;

&lt;p&gt;After spending half a day on specification, you watch Claude Code finish implementation in 10 minutes. Feels unfair, but the results are solid.&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%2Fcdn.banatie.app%2Fblog%2Fhenry-devto%2Fimg%2F79c4c6fd-129a-499f-be04-f503eff018b5" 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%2Fcdn.banatie.app%2Fblog%2Fhenry-devto%2Fimg%2F79c4c6fd-129a-499f-be04-f503eff018b5" alt="Comic: Developer brags AI generated code in 15 minutes, colleague points out he spent 6 hours writing the prompt" width="1376" height="578"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The spec becomes reference for future work. Months later, a new session starts with "read the spec, find the code" — and the agent has full context immediately.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Long-term challenges:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;To continue development later, you need to keep documentation current. Specs often start drifting from real code even during initial implementation. Details change, paths get renamed during refactoring. Keeping the spec up to date adds cognitive load. My solution: commit spec changes alongside code changes. Treat documentation as part of the codebase. Instruct the AI agent to always update the document after completing any task.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Pro tip:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Use Claude Desktop for spec development: give it Filesystem MCP for code access, enable web search for current documentation. Brainstorm the solution together with AI, define architecture — and only then ask it to write the spec.&lt;/p&gt;




&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;This was Part 1 of the "Beyond Vibe Coding" series. We covered vibe coding itself and spec-driven development — two ends of the planning spectrum.&lt;/p&gt;

&lt;p&gt;In Part 2, we'll explore the autonomy spectrum: AI pair programming (where you stay in the driver's seat) versus agentic coding (where you let the AI run free). Plus the infamous Ralph Loop — 14-hour autonomous coding sessions.&lt;/p&gt;

&lt;p&gt;In Part 3: Human-in-the-Loop patterns and TDD + AI — when you need guardrails and quality guarantees.&lt;/p&gt;

&lt;p&gt;No single right answer — pick what fits the situation.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;What's your experience with vibe coding? Do you use specs, or prefer to iterate? Share in the comments — I'm genuinely curious what works for you.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>vibecoding</category>
      <category>specdrivendevelopment</category>
      <category>ai</category>
      <category>programming</category>
    </item>
    <item>
      <title>Inside Claude's Sandbox: What Happens When Claude.ai Creates a File</title>
      <dc:creator>Henry Bonson</dc:creator>
      <pubDate>Wed, 07 Jan 2026 15:31:12 +0000</pubDate>
      <link>https://dev.to/h1gbosn/inside-claudes-sandbox-what-happens-when-claudeai-creates-a-file-4gna</link>
      <guid>https://dev.to/h1gbosn/inside-claudes-sandbox-what-happens-when-claudeai-creates-a-file-4gna</guid>
      <description>&lt;p&gt;Did you know that every Claude conversation runs in its own sandbox container with a real filesystem? Understanding how it works — and where Claude saves files — gives you a significant advantage. Without this knowledge, it's easy to lose work or spend time debugging "missing" files that aren't actually missing.&lt;/p&gt;

&lt;p&gt;Let me show you what's actually happening under the hood.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Note:&lt;/strong&gt; File creation requires a paid plan (Pro, Max, Team, or Enterprise). Free users only have access to Artifacts.&lt;/p&gt;

&lt;h2&gt;
  
  
  Claude's Sandbox Filesystem Structure
&lt;/h2&gt;

&lt;p&gt;Here's the thing about Claude's sandbox: it's a proper Ubuntu container with a defined directory structure. Knowing these paths saves debugging time.&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%2Fpyr2813jvlo1e2xk73cd.jpg" 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%2Fpyr2813jvlo1e2xk73cd.jpg" alt="Claude sandbox filesystem structure showing four directories with persistence levels" width="800" height="434"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can explore this yourself. Start a new Claude chat and try this prompt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;view /mnt/user-data/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The critical distinction: files in &lt;code&gt;/mnt/user-data/&lt;/code&gt; persist across sessions. Files in &lt;code&gt;/home/claude/&lt;/code&gt; might disappear when the container times out.&lt;/p&gt;

&lt;p&gt;Knowing this structure lets you navigate confidently and give Claude precise instructions — "save to outputs," "move from home directory," "show me what's in uploads."&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Pro tip:&lt;/strong&gt; Files in &lt;code&gt;/home/claude/&lt;/code&gt; can still be opened in the sidebar — click the filename in Claude's tool output (when it creates or edits a file). But they won't appear in the sidebar's file list until moved to outputs.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What Happens When Claude Creates a File
&lt;/h2&gt;

&lt;p&gt;When you ask Claude to create a file, it follows a two-step process. First, Claude creates the file in &lt;code&gt;/home/claude/&lt;/code&gt;. Then, after finishing work on it, Claude copies it to &lt;code&gt;/mnt/user-data/outputs/&lt;/code&gt; using a tool called &lt;code&gt;present_files&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;This is where things get interesting — and where most confusion happens. When Claude uses &lt;code&gt;present_files&lt;/code&gt;, you end up with two copies of the same file. One in Claude's working directory, one in outputs. This duplication is the source of most confusion around file management.&lt;/p&gt;

&lt;p&gt;Understanding this &lt;strong&gt;Claude file creation&lt;/strong&gt; process is key to avoiding the "where did my file go?" frustration.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common Claude File Problems and Solutions
&lt;/h2&gt;

&lt;p&gt;In simple scenarios, Claude handles files well. But in longer conversations with multiple file operations, things can go sideways. The most common issues are: Claude created a file but didn't copy it to outputs (invisible file), Claude edited the version in &lt;code&gt;/home/claude/&lt;/code&gt; instead of &lt;code&gt;/mnt/user-data/outputs/&lt;/code&gt; (changes don't appear), and confusion about which files you shared during the conversation.&lt;/p&gt;

&lt;p&gt;Don't panic. Once you understand the filesystem layout, fixing these is straightforward.&lt;/p&gt;

&lt;h2&gt;
  
  
  How Claude Creates Files: Step-by-Step Walkthrough
&lt;/h2&gt;

&lt;p&gt;Let me demonstrate with a real example. We'll build a news compilation document and watch exactly how Claude handles the file through multiple edits.&lt;/p&gt;

&lt;h3&gt;
  
  
  Creating an Internal File
&lt;/h3&gt;

&lt;p&gt;Follow along in a fresh Claude chat — you can copy-paste these prompts directly. I started a conversation with this prompt:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Your task is to find and compile AI news into a single markdown document.

Workflow:
1. I give you a topic or search query
2. You search, find relevant news, select the best match, append to document
3. We repeat until I say "done"
4. You show me the complete document for final review

Rules:
- One news item per search
- All items go into the same file (append, don't overwrite)
- Include: headline, source, date, 2-3 sentence summary

Search for: the funniest AI news from the last two months
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here's 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%2F0f1g3jfyvki6zxlt2epv.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%2F0f1g3jfyvki6zxlt2epv.png" alt="Claude file creation: new file appears in /home/claude sandbox directory" width="800" height="550"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Notice: I deliberately didn't specify where to create the file. Moreover, I hinted to Claude that work on the file would continue through my subsequent requests — this pushes it toward working with an internal file. In practice, this is a common scenario: Claude works with files internally without showing them to the user until completion. As a result, Claude created &lt;code&gt;ai-news-compilation.md&lt;/code&gt; in &lt;code&gt;/home/claude/&lt;/code&gt;. The file is NOT visible in the sidebar.&lt;/p&gt;

&lt;h3&gt;
  
  
  Appending Content
&lt;/h3&gt;

&lt;p&gt;I continued with another request:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Now find the most important news about AI image generation for the last two months
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fmmtyamq5d4r0gh61clvc.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%2Fmmtyamq5d4r0gh61clvc.png" alt="Claude sandbox file editing using str_replace tool" width="800" height="571"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Claude uses &lt;code&gt;str_replace&lt;/code&gt; to append content. The file still isn't in the sidebar — it's an internal working file.&lt;/p&gt;

&lt;h3&gt;
  
  
  Viewing Internal Files
&lt;/h3&gt;

&lt;p&gt;What if I want to see the contents? Click the filename in Claude's tool output.&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%2Fcaree0wcy94nveatvi8f.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%2Fcaree0wcy94nveatvi8f.png" alt="Accessing Claude sandbox files through tool output panel" width="800" height="584"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The file opens in the sidebar preview panel:&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%2Fs73vumqfpzbcy7zkk2pm.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%2Fs73vumqfpzbcy7zkk2pm.png" alt="Claude sandbox file preview - not yet in outputs folder" width="800" height="395"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;But notice: it's a preview, not an entry in the file list. This file is still in &lt;code&gt;/home/claude/&lt;/code&gt; and could disappear.&lt;/p&gt;

&lt;h3&gt;
  
  
  Moving to Outputs
&lt;/h3&gt;

&lt;p&gt;To make the file persistent and downloadable, ask Claude to move it:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;move this file to /mnt/user-data/outputs/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2F9n3zfto8l29plo7s0vxb.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%2F9n3zfto8l29plo7s0vxb.png" alt="File successfully moved to outputs folder, now visible in sidebar" width="800" height="396"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Claude runs &lt;code&gt;mv /home/claude/ai-news-compilation.md /mnt/user-data/outputs/&lt;/code&gt;. Now it appears in the sidebar's file list. Since we moved (not copied), there's only ONE file to work with. Clean.&lt;/p&gt;

&lt;h3&gt;
  
  
  The "Wrong File" Problem
&lt;/h3&gt;

&lt;p&gt;Let's test another scenario. Start a new conversation with the same initial news compilation request and add a few news items first.&lt;/p&gt;

&lt;p&gt;This time, let's see what happens when Claude uses &lt;code&gt;present_files&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;present this file to me
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fe65e0jywx39488ma2d1m.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%2Fe65e0jywx39488ma2d1m.png" alt="Claude presents file using present_files tool" width="800" height="393"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The file appears in the sidebar. Now continue adding news:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Find the most performant AI coding agent released in the last two months
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Check the file in sidebar.&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%2Fezynvzpfasnrcidexbvn.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%2Fezynvzpfasnrcidexbvn.png" alt="Claude file creation problem: wrong file edited in sandbox" width="800" height="393"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What happened? Claude edited a file in &lt;code&gt;/home/claude/&lt;/code&gt; — not the one in &lt;code&gt;/mnt/user-data/outputs/&lt;/code&gt;. If &lt;code&gt;present_files&lt;/code&gt; was used earlier, both locations have the file. Claude picked the working copy.&lt;/p&gt;

&lt;p&gt;The sidebar shows the old version. The new content exists only in &lt;code&gt;/home/claude/&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;This situation is common when working with complex multi-step scenarios. Claude doesn't always track which copy you care about — especially in longer conversations with many file operations.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Fix
&lt;/h3&gt;

&lt;p&gt;Simple solution:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;move this file from /home/claude to /mnt/user-data/outputs/ (override the existing file)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&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%2Fq3tecpo2id57n14ax9u9.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%2Fq3tecpo2id57n14ax9u9.png" alt="Claude file successfully moved to /mnt/user-data/outputs folder" width="800" height="394"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The updated file overwrites the old one. Sidebar now shows all content including the latest addition.&lt;/p&gt;

&lt;h3&gt;
  
  
  Summary
&lt;/h3&gt;

&lt;p&gt;What we learned: Claude creates working files in &lt;code&gt;/home/claude/&lt;/code&gt; by default. Files only appear in sidebar when in &lt;code&gt;/mnt/user-data/outputs/&lt;/code&gt;. The &lt;code&gt;present_files&lt;/code&gt; tool creates a copy, resulting in two files. Claude may edit the "wrong" file when duplicates exist. Solution: explicitly move or copy to outputs when needed.&lt;/p&gt;

&lt;h2&gt;
  
  
  Claude File Commands: Quick Reference
&lt;/h2&gt;

&lt;p&gt;Claude uses these tools internally: &lt;code&gt;view&lt;/code&gt; for reading files and directories, &lt;code&gt;str_replace&lt;/code&gt; for editing content, &lt;code&gt;create_file&lt;/code&gt; for new files, &lt;code&gt;bash_tool&lt;/code&gt; for shell commands, and &lt;code&gt;present_files&lt;/code&gt; for making files downloadable.&lt;/p&gt;

&lt;p&gt;You interact with natural language. Try these prompts:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;"Show me what's in /mnt/user-data/" — triggers view&lt;/li&gt;
&lt;li&gt;"Create a file test.txt with 'hello world'" — triggers create_file&lt;/li&gt;
&lt;li&gt;"Run &lt;code&gt;ls -la /home/claude/&lt;/code&gt;" — triggers bash&lt;/li&gt;
&lt;li&gt;"Copy test.txt to /mnt/user-data/outputs/" — triggers bash with cp&lt;/li&gt;
&lt;li&gt;"Show me the file for download" — triggers present_files&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Tool names are implementation details. Claude picks the right one automatically.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Matters: Filesystem MCP
&lt;/h2&gt;

&lt;p&gt;Understanding the internal filesystem is one thing. But when you add Filesystem MCP to the mix, there are now two filesystems Claude can work with — and this is where confusion multiplies. Claude might read from one and write to another without you noticing. I've been burned by this more than once: expecting a file on my local disk, finding it only in the sandbox, or vice versa. In these scenarios, explicit instructions matter.&lt;/p&gt;

&lt;p&gt;Filesystem MCP gives Claude access to your local disk. True persistence, files land directly in your project directory, ready for version control. Downside: requires setup and only works in Claude Desktop (not the web interface).&lt;/p&gt;

&lt;p&gt;But here's the catch. Adding MCP complicates the system: it's no longer enough to say "create a file" or "copy file to folder." You need to be more precise with your commands and clarify which filesystem you mean — the internal sandbox or your local disk via MCP.&lt;/p&gt;

&lt;p&gt;Use the &lt;strong&gt;Claude sandbox environment&lt;/strong&gt; for quick explorations. Use MCP for serious projects where files need to persist.&lt;/p&gt;

&lt;p&gt;The most productive approach — edit files with Claude in its sandbox, then save them to disk:&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%2Fw5wuse124pdzonp45o4x.jpg" 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%2Fw5wuse124pdzonp45o4x.jpg" alt=" " width="800" height="342"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Bonus: The Two-Tab Experiment
&lt;/h2&gt;

&lt;p&gt;Let's have some fun to wrap up, and also confirm that we have access to the same container when opening the same chat in different tabs or in Claude Desktop.&lt;/p&gt;

&lt;p&gt;Try this in a new Claude chat:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tab 1:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Create a file `/home/claude/test.txt` with a content "hello world"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now open this same chat in a second browser tab (keep the first one open):&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tab 2&lt;/strong&gt; (same chat):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Change the file content to "hello claude"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Switch back to Tab 1 (don't refresh):&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tab 1:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;output the content of that file
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Claude reads the file:&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%2Fjpz4sbc1zhibzht7q1e4.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%2Fjpz4sbc1zhibzht7q1e4.png" alt="Claude sandbox shared state: file changes visible across browser tabs" width="800" height="682"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The content is "hello claude". Claude in Tab 1 is confused — it doesn't see the modification command in its conversation history, but the file has changed.&lt;/p&gt;

&lt;p&gt;This confirms: the sandbox container is shared across all sessions of the same chat. The filesystem is consistent, even if conversation history isn't.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;That's the filesystem. No magic, just directories and persistence rules.&lt;/p&gt;

&lt;p&gt;Now you know how it works — which means you can direct Claude precisely where to save, what to edit, and when to move files to outputs. Next time something seems off, you'll know exactly where to look.&lt;/p&gt;

&lt;p&gt;Go build something great with Claude. Your files will be exactly where you expect them.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claude</category>
      <category>llm</category>
      <category>agents</category>
    </item>
  </channel>
</rss>
