[{"data":1,"prerenderedAt":358},["ShallowReactive",2],{"navigation":3,"\u002Fblog\u002Fvoice-to-system":204,"\u002Fblog\u002Fvoice-to-system-surround":354},[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],{"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",{"id":205,"title":73,"authors":206,"badge":212,"body":214,"date":343,"description":344,"extension":345,"image":346,"meta":349,"navigation":350,"path":74,"seo":351,"status":352,"stem":75,"__hash__":353},"posts\u002F2.blog\u002F20250705.voice-to-system.md",[207],{"name":208,"to":209,"avatar":210},"Chris Towles","https:\u002F\u002Ftwitter.com\u002FChris_Towles",{"src":211},"\u002Fimages\u002Fctowles-profile-512x512.png",{"label":213},"AI Tools",{"type":215,"value":216,"toc":337},"minimark",[217,222,226,234,238,241,247,255,258,267,273,281,287,296,299,304,307,310,313,316,319,334],[218,219,221],"h2",{"id":220},"tldr","TLDR",[223,224,225],"p",{},"Had my mind blown by Claude Code's creator after watching @bcherny. Realized I've been massively underutilizing AI even as a Principal Architect working in AI! (The irony is not lost on me.) The key insight: remove all abstractions between the model and the task. I remember when @karpathy pointed this out to me years ago!",[223,227,228],{},[229,230,231],"a",{"href":231,"rel":232},"https:\u002F\u002Fx.com\u002FChris_Towles\u002Fstatus\u002F1941610508173320352",[233],"nofollow",[218,235,237],{"id":236},"having-my-mind-blown","Having my mind blown",[223,239,240],{},"So on Friday, I watched a video by Anthropic's Claude Code lead developer. I knew this man was recently in the news – he had jumped to Chief Architect at @anysphere, which owns Cursor. Pretty relevant timing with all the talent shuffling between OpenAI, Meta, and everyone else right now. I'd seen posts by others referencing him but never watched one of his talks. But this video changed everything. It made me realize that even though I've been trying to increase my usage of AI, I wasn't thinking big enough.",[223,242,243],{},[229,244,245],{"href":245,"rel":246},"https:\u002F\u002Fyoutu.be\u002FLue8K2jqfKk?si=rF5CoJAZWiFbAFvN",[233],[223,248,249,250,254],{},"What you have to know is that earlier that day I was watching a video by @mattpocockuk about how he's using AI agents to work by themselves. He was showing how he uses Claude Code to automate his workflow, and I was genuinely impressed with how he's been using it more effectively than me. But after thinking about his ",[229,251,252],{"href":252,"rel":253},"https:\u002F\u002Fx.com\u002Fmattpocockuk\u002Fstatus\u002F1940693600737841272",[233]," video about how he's using AI agents to work by themselves because he's invested in his CI\u002FCD and tests...",[223,256,257],{},"Back to watching Boris Cherny talk about why Claude is built the way it is. By removing everything between the model and the files and system itself, the better at everything it gets. No more leaky abstractions between the model and the lower-level system and files. He made me realize that as a lifelong developer, the reason I still use the terminal is because of its lack of abstractions. The reason I use command line tools almost every minute I'm on a computer is because it's still the most powerful interface we have.",[223,259,260,261,266],{},"The fact that I use the terminal with my autocomplete, colored output, aliases, and dotfiles is because that's the best abstraction we've had since ed in the 1970s. (No, I'm not that old, but I remember the late 80s machines with ",[229,262,265],{"href":263,"rel":264},"https:\u002F\u002Farchive.org\u002Fdetails\u002Fa2_Fraction_Munchers_v1.0_1987_MECC_US",[233],"Number Munchers",". I'm old enough to remember when that was cutting-edge.)",[268,269,270],"blockquote",{},[223,271,272],{},"Note: I found that link to play the game, but it's in full color. I swear it was in black and white when I played it.",[223,274,275,276,280],{},"And it aligned with the idea that the fewer crutches you put between the model and your CLI, the more powerful it becomes as the model improves. Just like he references in ",[229,277,278],{"href":278,"rel":279},"http:\u002F\u002Fwww.incompleteideas.net\u002FIncIdeas\u002FBitterLesson.html",[233],". Which I've read before—we all have—but it never occurred to me that all the tools we added on top of the model were actually limiting the model's potential.",[223,282,283],{},[229,284,285],{"href":285,"rel":286},"https:\u002F\u002Ftenor.com\u002Fview\u002Fmind-blown-mind-explosion-explode-gif-4740219",[233],[223,288,289,290,295],{},"I'd read it multiple times! And remember when Andrej Karpathy checked that we'd ",[229,291,294],{"href":292,"rel":293},"https:\u002F\u002Fx.com\u002Fkarpathy\u002Fstatus\u002F1509962678319595523",[233],"all read it too!",".",[223,297,298],{},"Watching why Boris made Claude Code the way he did, to use a terminal like I would use those tools. I realized that Claude Code is so close to the actual files—the way I would edit files, the way I would work if I was doing everything at a really high level, but it lets me do those things on my machine. Everything in between me and the files was really an abstraction—a limiting and leaky abstraction. Every tool added between those files, even VS Code (as good as it is), creates distance. This kind of blew my brother's mind as well. We've been talking about it for the last 24 hours, including while I was working on this post during my free time after taking the kids to the pool. (Nothing like a good tech epiphany to ruin a perfectly relaxing Saturday.)",[268,300,301],{},[223,302,303],{},"Yes, I'm aware that he recently took a new job at Cursor, so good luck to them on that hire because I think he's definitely onto something.",[223,305,306],{},"So while I've had my mind blown all weekend after watching Anthropic's Claude Code video, it really made me consider how much we let the tooling limit what the agent can do in our repos. Literally a week and a half ago, I posted about how I was using voice-to-text integration in VS Code to help use AI better. But that was actually a hindrance. (Classic case of solving the wrong problem with more complexity.)",[223,308,309],{},"One of the most amazing things about the Claude Code video is how it removes all the distractions. These models get better when you don't constrain them. Anything you do betting on the model – like any tool you try to give it – is actually likely harming it by finding a local maximum. With Claude Code, the interface uses the same tool we've been using for the last 50 years. His iteration through the editor looks like a standard batch of terminal commands. So by giving the model the same way we would try to fix things at the terminal – with the only interface we've ever found that actually works – we get better results.",[223,311,312],{},"So with my voice dictation, I was not being efficient. I was still typing in Claude Code instead of just speaking the commands I wanted Claude to execute. When I was adding markdown, I could use the VS Code voice integration with the editor. But here's the kicker...",[223,314,315],{},"However, VS Code's voice integration doesn't work the same way outside of the editor window. When I'm in the terminal and start dictating, it can't dictate directly. Instead, I can dictate to ChatGPT or whatever model I'm using for copilot, but it interprets that command and puts it in the terminal. I don't want that layer – just like in the Claude Code talk. I don't want VS Code between me and the terminal. So like his comment (and this was what blew my mind), I need system-level dictation.",[223,317,318],{},"I really struggled with VS Code audio settings. I spent probably an hour messing around with plugins, thinking maybe they'd help with dictation better. But what I should do is just not have VS Code in the equation. I just want to talk to the terminal window, right? (Revolutionary concept, I know.)",[223,320,321,322,327,328,333],{},"So how do you do that in Linux? Well, you need OS-level dictation. What was crazy was when I was trying to find the best dictation solution for a Linux terminal, I was taken back to the same man, ",[229,323,326],{"href":324,"rel":325},"https:\u002F\u002Fgithub.com\u002Fbcherny",[233],"Boris Cherny",", who gave that talk. In a ",[229,329,332],{"href":330,"rel":331},"https:\u002F\u002Fgithub.com\u002Fanthropics\u002Fclaude-code\u002Fissues\u002F154#issuecomment-2856756037",[233],"GitHub issue reply",", he mentioned that the way he's built most of Claude Code is by using OS-level dictation in a terminal. Mind blown! No VS Code in between, which just validates that he's really right.",[223,335,336],{},"The idea of getting closer to the concept of nothing between the files and the model brings me back to an unrelated topic and concept: nothing between you and the model. (It's like layers of abstraction are the enemy of progress – who knew?)",{"title":338,"searchDepth":339,"depth":339,"links":340},"",2,[341,342],{"id":220,"depth":339,"text":221},{"id":236,"depth":339,"text":237},"2025-07-05","How watching Anthropic's Claude Code lead work made me realize I wasn't using AI enough, and the journey to OS-level voice dictation for better terminal workflows.","md",{"src":347,"alt":348},"\u002Fimages\u002Fblog\u002F20250106-1442-voice-to-text-coding.webp","Modern developer workspace with clean desk, laptop, and organized tools representing productive AI workflow",{},true,{"title":73,"description":344},"published","_wxOJ_EmVHWmevUc4-sZv-6bxz_L8Vj0VLhLI4a2nuw",[355,357],{"title":69,"path":70,"stem":71,"description":356,"status":352,"children":-1},"Installing and configuring ComfyUI for local AI image generation after Fooocus development stalled",{"title":77,"path":78,"stem":79,"description":338,"status":352,"children":-1},1776221196452]