[{"data":1,"prerenderedAt":363},["ShallowReactive",2],{"navigation":3,"\u002Fapps\u002Fvscode-markdown-paste-image":220,"\u002Fapps\u002Fvscode-markdown-paste-image-surround":357},[4,8,12,16,20,24,28,32,36,40,44,48,52,56,60,64,68,72,76,80,84,88,92,96,100,104,108,112,116,120,124,128,132,136,140,144,148,152,156,160,164,168,172,176,180,184,188,192,196,200,204,208,212,216],{"title":5,"path":6,"stem":7},"You do not have time to not have tests","\u002Fblog\u002Fyou-do-not-have-time-to-not-have-tests","2.blog\u002F20211217.you-do-not-have-time-to-not-have-tests",{"title":9,"path":10,"stem":11},"Migrate Vue 2 with Vuetify and Jest to Vite and Vitest","\u002Fblog\u002Fmigrate-vue-2-with-vuetify-and-jest-to-vite-and-vitest","2.blog\u002F20220109.migrate-vue-2-with-vuetify-and-jest-to-vite-and-vitest",{"title":13,"path":14,"stem":15},"I am a Dark Matter Developer","\u002Fblog\u002Fi-am-a-dark-matter-developer","2.blog\u002F20220626.i-am-a-dark-matter-developer",{"title":17,"path":18,"stem":19},"Why using Conventional commits is useful","\u002Fblog\u002Fusing-conventional-commits","2.blog\u002F20240623.using-conventional-commits",{"title":21,"path":22,"stem":23},"Why you should make a toolbox repository","\u002Fblog\u002Fwhy-you-should-make-a-toolbox-repository","2.blog\u002F20240630.Why-you-should-make-a-toolbox-repository",{"title":25,"path":26,"stem":27},"Apache Airflow Part 1 - Why and Goals for a near Serverless ELT","\u002Fblog\u002Fapache-airflow-part-1-why-and-goals","2.blog\u002F20240710.apache-airflow-part-1-why-and-goals",{"title":29,"path":30,"stem":31},"Oh My Zsh on your server","\u002Fblog\u002Foh-my-zsh-on-your-server","2.blog\u002F20240711.oh-my-zsh-on-your-server",{"title":33,"path":34,"stem":35},"Fire tablet and YouTube Kids","\u002Fblog\u002Ffire-tablet-and-youtube-kids","2.blog\u002F20240714.fire-tablet-and-youtube-kids",{"title":37,"path":38,"stem":39},"Using Ollama and Continue as a GitHub Copilot Alternative","\u002Fblog\u002Fusing-ollama-and-continue-as-github-copilot-alternative","2.blog\u002F20240723.using-ollama-and-continue-as-github-copilot-alternative",{"title":41,"path":42,"stem":43},"Debugging Local Packages Made Easy with pnpm","\u002Fblog\u002Fdebugging-local-packages-with-pnpm-link","2.blog\u002F20250422.debugging local-packages-with-pnpm-link",{"title":45,"path":46,"stem":47},"Two Weeks with Cloudflare AI and Tools","\u002Fblog\u002Ftwo-weeks-with-cloudflare-ai-and-tools","2.blog\u002F20250509.two-weeks-with-cloudflare-aI-and-tools",{"title":49,"path":50,"stem":51},"Adding Prompts to VS Code - How I Learned to Stop Worrying and Love AI Context","\u002Fblog\u002Fadding-prompts-to-vscode","2.blog\u002F20250528.adding-prompts-to-vscode",{"title":53,"path":54,"stem":55},"My Best Practices","\u002Fblog\u002Fmy-best-practicies","2.blog\u002F20250607.my-best-practicies",{"title":57,"path":58,"stem":59},"Creating my own CLI Tool - Towles Tool","\u002Fblog\u002Ftowles-tool","2.blog\u002F20250607.towles-tool",{"title":61,"path":62,"stem":63},"Software Development Best Practices & ITIL","\u002Fblog\u002Fsoftware-engineering-and-itil-best-practices","2.blog\u002F20250612.software-engineering-and-itil-best-practices",{"title":65,"path":66,"stem":67},"Voice to Text","\u002Fblog\u002Fvoice-to-text","2.blog\u002F20250622.voice-to-text",{"title":69,"path":70,"stem":71},"Setting Up ComfyUI - A Better Alternative to Fooocus","\u002Fblog\u002Fcomfy-ui-setup","2.blog\u002F20250628.comfy-ui-setup",{"title":73,"path":74,"stem":75},"Voice to System","\u002Fblog\u002Fvoice-to-system","2.blog\u002F20250705.voice-to-system",{"title":77,"path":78,"stem":79},"Tips for Claude Code","\u002Fblog\u002Ftips-for-claude-code","2.blog\u002F20250713.tips-for-claude-code",{"title":81,"path":82,"stem":83},"Review That AI Code: Why I Read Every Line Generated Code","\u002Fblog\u002Freview-that-ai-code","2.blog\u002F20250720.review-that-ai-code",{"title":85,"path":86,"stem":87},"My Context Engineering Journey: From Dev Scripts to AI Collaboration","\u002Fblog\u002F20250803-1.my-context-engineering-journey","2.blog\u002F20250803-1.my-context-engineering-journey",{"title":89,"path":90,"stem":91},"Context Engineering at Scale: Enterprise Lessons and the Future of Development","\u002Fblog\u002F20250803-2.context-engineering-at-scale","2.blog\u002F20250803-2.context-engineering-at-scale",{"title":93,"path":94,"stem":95},"Check That Your Tools and Linters Do Not Burn Tokens","\u002Fblog\u002Fcheck-that-your-tools-and-linters-do-not-burn-tokens","2.blog\u002F20250806.check-that-your-tools-and-linters-do-not-burn-tokens",{"title":97,"path":98,"stem":99},"Markdown + AI: The Communication Protocol That Changes Everything","\u002Fblog\u002Fmarkdown-plus-ai-the-communication-protocol-that-changes-everything","2.blog\u002F20250814.markdown-plus-ai-the-communication-protocol-that-changes-everything",{"title":101,"path":102,"stem":103},"Finally: Type-Safe AI in Production (And Why I'm Here For It)","\u002Fblog\u002Ffinally-type-safe-ai-in-production-and-why-im-here-for-it","2.blog\u002F20250819.finally-type-safe-ai-in-production-and-why-im-here-for-it",{"title":105,"path":106,"stem":107},"Dotfiles: Masterpiece or Late Stage Picasso?","\u002Fblog\u002Fdotfiles-masterpiece-or-late-stage-picasso","2.blog\u002F20250822.dotfiles-masterpiece-or-late-stage-picasso",{"title":109,"path":110,"stem":111},"Beyond API Wrappers: Building State-Driven MCP Servers for Long-Horizon Agent Orchestration","\u002Fblog\u002Fbeyond-api-wrappers-mcp-servers","2.blog\u002F20250907.beyond-api-wrappers-mcp-servers",{"title":113,"path":114,"stem":115},"Why Vertical Integration Wins: A Software Engineer's Case for Owning Your Stack","\u002Fblog\u002Fwhy-i-bought-tesla-model-3-vertical-integration","2.blog\u002F20250928.why-i-bought-tesla-model-3-vertical-integration",{"title":117,"path":118,"stem":119},"The Min-Maxer's Trifecta: Building Tools for the Game You Actually Play","\u002Fblog\u002Fmin-maxer-trifecta","2.blog\u002F20251004.min-maxer-trifecta",{"title":121,"path":122,"stem":123},"Read The Source: Learning by Cutting Out The Middleman and RTFM","\u002Fblog\u002Fread-the-source","2.blog\u002F20251010.read-the-source",{"title":125,"path":126,"stem":127},"The Exponential Shift: Why AI Progress Feels Different Now","\u002Fblog\u002Fthe-exponential-shift","2.blog\u002F20251015.the-exponential-shift",{"title":129,"path":130,"stem":131},"Plan Mode for Your Problems, Edit Mode for Claude's","\u002Fblog\u002Fplan-mode-problems-edit-mode-solutions","2.blog\u002F20251019.plan-mode-problems-edit-mode-solutions",{"title":133,"path":134,"stem":135},"AWS Aurora DSQL Looked Perfect Until I Needed the Connection String","\u002Fblog\u002Faws-aurora-dsql-postgres-serverless-authentication","2.blog\u002F20251028.aws-aurora-dsql-postgres-serverless-authentication",{"title":137,"path":138,"stem":139},"Switchback: Browser History for Your Thoughts","\u002Fblog\u002Fswitchback-second-order-reasoning","2.blog\u002F20251205.switchback-second-order-reasoning",{"title":141,"path":142,"stem":143},"AI Pairing: Notes to Self","\u002Fblog\u002Fai-pairing-notes-to-self","2.blog\u002F20251216.ai-pairing-notes-to-self",{"title":145,"path":146,"stem":147},"I've Been Sleeping on Zellij","\u002Fblog\u002Fsleeping-on-zellij","2.blog\u002F20251229.sleeping-on-zellij",{"title":149,"path":150,"stem":151},"Implementing a Ralph Wiggum Loop: The Secret is Session Markers","\u002Fblog\u002Fimplementing-ralph-wiggum-loop-for-autonomous-ai-coding","2.blog\u002F20260114.implementing-ralph-wiggum-loop-for-autonomous-ai-coding",{"title":153,"path":154,"stem":155},"Goodhart's Law Ate My Context Window","\u002Fblog\u002Fgoodharts-law-ate-my-context-window","2.blog\u002F20260119.goodharts-law-ate-my-context-window",{"title":157,"path":158,"stem":159},"Claude Code's Hidden Multi-Agent System Is Real","\u002Fblog\u002Fclaude-code-hidden-multi-agent-system","2.blog\u002F20260124.claude-code-hidden-multi-agent-system",{"title":161,"path":162,"stem":163},"Free Printable Math Sheets for Kids — Number Chart, Skip Counting, Multiplication, and More","\u002Fblog\u002Ffree-printable-number-chart-and-coin-sheets","2.blog\u002F20260214.free-printable-number-chart-and-coin-sheets",{"title":165,"path":166,"stem":167},"We Are Near the End of the Exponential","\u002Fblog\u002Fnear-the-end-of-the-exponential","2.blog\u002F20260214.near-the-end-of-the-exponential",{"title":169,"path":170,"stem":171},"Free Printable Language Arts Sheets for Kids — Sight Words, Parts of Speech, Homophones, and More","\u002Fblog\u002Ffree-printable-sight-words-and-grammar-sheets","2.blog\u002F20260215.free-printable-sight-words-and-grammar-sheets",{"title":173,"path":174,"stem":175},"Interactive Code Execution with Artifacts","\u002Fblog\u002Finteractive-code-execution-with-artifacts","2.blog\u002F20260215.interactive-code-execution-with-artifacts",{"title":177,"path":178,"stem":179},"Free Printable Telling Time Worksheet for Kids — Clock Reference & Practice Sheet","\u002Fblog\u002Ffree-printable-telling-time-worksheet","2.blog\u002F20260216.free-printable-telling-time-worksheet",{"title":181,"path":182,"stem":183},"Claude Code Skills: Teaching AI Your Playbook","\u002Fblog\u002Fclaude-code-skills-guide","2.blog\u002F20260221.claude-code-skills-guide",{"title":185,"path":186,"stem":187},"Building a Multi-Agent Loan Approval System with Human-in-the-Loop","\u002Fblog\u002Fmulti-agent-loan-approval-human-in-the-loop","2.blog\u002F20260225.multi-agent-loan-approval-human-in-the-loop",{"title":189,"path":190,"stem":191},"The Inception of AI Infrastructure: Bottlenecks All the Way Down","\u002Fblog\u002Fbiggest-bottleneck-scaling-ai-compute","2.blog\u002F20260313.biggest-bottleneck-scaling-ai-compute",{"title":193,"path":194,"stem":195},"What I Tell Teams About Claude Code","\u002Fblog\u002Fwhat-i-tell-teams-about-claude-code","2.blog\u002F20260314.what-i-tell-teams-about-claude-code",{"title":197,"path":198,"stem":199},"The Hardest Part of AI Isn't the AI","\u002Fblog\u002Fthe-hardest-part-of-ai-isnt-the-ai","2.blog\u002F20260327.the-hardest-part-of-ai-isnt-the-ai",{"title":201,"path":202,"stem":203},"Claude Code Hooks: The Capability I Left on the Table","\u002Fblog\u002Fclaude-code-hooks-capability-left-on-the-table","2.blog\u002F20260401.claude-code-hooks-capability-left-on-the-table",{"title":205,"path":206,"stem":207},"Claude in a Box: Trying Computer-Use on My Laptop","\u002Fblog\u002Fclaude-computer-use-in-a-box","2.blog\u002F20260418.claude-computer-use-in-a-box",{"title":209,"path":210,"stem":211},"MCP Apps: We Spent $100B on AI to Bring Back the Iframe","\u002Fblog\u002Fmcp-ext-apps-claude-desktop-developer-mode","2.blog\u002F20260505.mcp-ext-apps-claude-desktop-developer-mode",{"title":213,"path":214,"stem":215},"I Couldn't Give Up Ghostty, So I Put It Inside My App","\u002Fblog\u002Fi-couldnt-give-up-ghostty-so-i-put-it-inside-my-app","2.blog\u002F20260710.i-couldnt-give-up-ghostty-so-i-put-it-inside-my-app",{"title":217,"path":218,"stem":219},"We're Not Asking Enough of These Models","\u002Fblog\u002Fwere-not-asking-enough-of-these-models","2.blog\u002F20261004.were-not-asking-enough-of-these-models",{"id":221,"title":222,"authors":223,"badge":223,"body":224,"date":344,"description":345,"extension":346,"image":347,"meta":350,"navigation":352,"path":353,"seo":354,"stem":355,"__hash__":356},"appEntry\u002F3.apps\u002F02.vscode-markdown-paste-image\u002Findex.md","VScode Markdown Pase Image",null,{"type":225,"value":226,"toc":336},"minimark",[227,232,252,256,260,263,278,293,297,300,311,315,329,333],[228,229,231],"h2",{"id":230},"links","Links",[233,234,235,245],"ul",{},[236,237,238,239],"li",{},"GitHub - ",[240,241,242],"a",{"href":242,"rel":243},"https:\u002F\u002Fgithub.com\u002FChrisTowles\u002Fvscode-markdown-paste-image",[244],"nofollow",[236,246,247,248],{},"Marketplace - ",[240,249,250],{"href":250,"rel":251},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=chris-towles.markdown-paste-image",[244],[228,253,255],{"id":254},"why","Why?",[257,258,259],"p",{},"I write a lot of Markdown! However, one of the few things easier to do in Word Or Google Drive is to include pictures.",[257,261,262],{},"With Markdown, you paste your image from clipboard, but then you have to rename the file, move to correct folder, and then fix the markdown path to it. This extension makes that process a lot easier. It will prompt you for the image name, and then automatically put the image in the correct place.",[257,264,265,266,271,272,277],{},"This project started after issues with ",[240,267,270],{"href":268,"rel":269},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fitems?itemName=mushan.vscode-paste-image",[244],"mushan.vscode-paste-image",". I looked for an alternative and finding out that it looked like there were half a ",[240,273,276],{"href":274,"rel":275},"https:\u002F\u002Fmarketplace.visualstudio.com\u002Fsearch?term=image%20paste%20markdown&target=VSCode&category=Other&sortBy=Relevance",[244],"dozen copies"," and most were forks, or no longer maintained. None of them had tests!",[257,279,280,281,286,287,292],{},"I decided to use ",[240,282,285],{"href":283,"rel":284},"https:\u002F\u002Fgithub.com\u002Fantfu",[244],"Anthony Fu","'s repo for ",[240,288,291],{"href":289,"rel":290},"https:\u002F\u002Fgithub.com\u002Fantfu\u002Fvscode-smart-clicks",[244],"vscode-smart-clicks"," as a starting point. And then build from there to have the features that I wanted.",[228,294,296],{"id":295},"installation","Installation",[257,298,299],{},"Launch VS Code Quick Open (Ctrl+P), paste the following command, and press enter.",[301,302,307],"pre",{"className":303,"code":305,"language":306},[304],"language-text","ext install chris-towles.markdown-paste-image\n","text",[308,309,305],"code",{"__ignoreMap":310},"",[228,312,314],{"id":313},"features","Features",[233,316,317,320,323,326],{},[236,318,319],{},"Paste image from clipboard into Markdown",[236,321,322],{},"Prompts for the file name or uses the selected text as the file name.",[236,324,325],{},"Save clipboard image as PNG file and insert image markdown.",[236,327,328],{},"Configurable to how to name the file and where to save.",[228,330,332],{"id":331},"conclusion","Conclusion",[257,334,335],{},"If you haven't looks at what goes into VS Code extensions, you should. It's pretty easy to do, and it's a good way to learn. I use this extension every day and its in all my work repos as well!",{"title":310,"searchDepth":337,"depth":337,"links":338},2,[339,340,341,342,343],{"id":230,"depth":337,"text":231},{"id":254,"depth":337,"text":255},{"id":295,"depth":337,"text":296},{"id":313,"depth":337,"text":314},{"id":331,"depth":337,"text":332},"2021-09-23","Vscode extension to make pasting pictures in markdown easier","md",{"src":348,"alt":349},"\u002Fimages\u002Fblog\u002Fvscode-paste-image-markdown-logon.png","Logo of chris-towles.markdown-paste-image",{"type":351},"vscode-extension",true,"\u002Fapps\u002Fvscode-markdown-paste-image",{"title":222,"description":345},"3.apps\u002F02.vscode-markdown-paste-image\u002Findex","dUP5EhZG-xaqo3QN63uaGWmIkMLdajG4VnSzz5_0EVs",[358,223],{"title":359,"path":360,"stem":361,"description":362,"children":-1},"Right Angle Triangle Solver","\u002Fapps\u002Fright-angle-triangle-solver","3.apps\u002F01.right-angle-triangle-solver\u002Findex","Android App for easy Right Angle solver",1791678378525]