[{"data":1,"prerenderedAt":418},["ShallowReactive",2],{"navigation":3,"\u002Fblog\u002Fai-pairing-notes-to-self":204,"\u002Fblog\u002Fai-pairing-notes-to-self-surround":413},[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":141,"authors":206,"badge":212,"body":214,"date":402,"description":403,"extension":404,"image":405,"meta":408,"navigation":409,"path":142,"seo":410,"status":411,"stem":143,"__hash__":412},"posts\u002F2.blog\u002F20251216.ai-pairing-notes-to-self.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",{"type":215,"value":216,"toc":392},"minimark",[217,224,229,263,267,296,300,338,342,353,357,368,372,383,386],[218,219,220],"blockquote",{},[221,222,223],"p",{},"This is a living document. Not \"best practices\" - just things I keep re-learning. The landscape changes weekly.",[225,226,228],"h2",{"id":227},"the-mindset-shifts","The Mindset Shifts",[230,231,232,240,246,257],"ul",{},[233,234,235,239],"li",{},[236,237,238],"strong",{},"You're the architect, AI is the builder"," - I still catch myself letting AI drive when I should be steering",[233,241,242,245],{},[236,243,244],{},"Better context = better output"," - Every time I think \"that's obvious\", I'm wrong. Say it anyway.",[233,247,248,251,252],{},[236,249,250],{},"Talk like you're pairing with a senior dev who just joined"," - They're smart but don't know your codebase\n",[230,253,254],{},[233,255,256],{},"Use Claude.md, craft clean structure and conventions and it'll pick them up fast",[233,258,259],{},[260,261,262],"a",{"href":130},"Plan Mode for your problems, Edit Mode for Claude's",[225,264,266],{"id":265},"habits-i-keep-forgetting","Habits I Keep Forgetting",[230,268,269,272,275,278,293],{},[233,270,271],{},"Use voice\u002Fdictation more - typing less context because lazy",[233,273,274],{},"Screenshot the error, don't describe it",[233,276,277],{},"Create an issue when distracted by improvement ideas - don't derail current task",[233,279,280,284,285,288,289,292],{},[281,282,283],"code",{},"ctrl+z"," to terminal, ",[281,286,287],{},"fg"," to resume - way better than ",[281,290,291],{},"!"," for throwaway commands",[233,294,295],{},"rewind!",[225,297,299],{"id":298},"whats-working-right-now","What's Working Right Now",[230,301,302,310,321,324,332],{},[233,303,304,305],{},"Plan mode before any non-trivial change\n",[230,306,307],{},[233,308,309],{},"easier to course-correct early than after tons of code is generated",[233,311,312,313],{},"Subagents for everything\n",[230,314,315,318],{},[233,316,317],{},"Keith pushed me to use them for exploration, but now I use them for everything - main agent acts as orchestrator",[233,319,320],{},"I've had a lot of luck with this - larger tasks can run autonomously for a long time",[233,322,323],{},"Web search to load current docs into context",[233,325,326,327],{},"Read every line of changes before committing - easy when new, gets sloppy fast\n",[230,328,329],{},[233,330,331],{},"AI adds the worst type of errors - small, subtle, hard to catch ones",[233,333,334,337],{},[281,335,336],{},"bunx ccstatusline@latest"," for Claude Code status line - shows token usage, costs, model in terminal",[225,339,341],{"id":340},"what-im-experimenting-with","What I'm Experimenting With",[230,343,344,347,350],{},[233,345,346],{},"More aggressive use of CLAUDE.md for project conventions",[233,348,349],{},"Custom slash commands for repeated workflows",[233,351,352],{},"Letting AI write the first draft of issues\u002FPRs",[225,354,356],{"id":355},"lessons-learned-the-hard-way","Lessons Learned the Hard Way",[230,358,359,362,365],{},[233,360,361],{},"Don't trust AI-generated paths without verification",[233,363,364],{},"If stuck in a loop, start fresh context rather than fighting",[233,366,367],{},"Once you get \"You're absolutely right\" from AI, you're probably off-track - start a new session",[225,369,371],{"id":370},"resources-i-keep-coming-back-to","Resources I Keep Coming Back To",[230,373,374],{},[233,375,376,382],{},[260,377,381],{"href":378,"rel":379},"https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=1jJH1b0bUuA",[380],"nofollow","Building Custom Skills for Anthropic Agents – Barry Zhang & Mahesh Murag"," - pushed me to go all-in on skills for chatbots and agents",[384,385],"hr",{},[221,387,388],{},[389,390,391],"em",{},"Last updated: 2025-12-20",{"title":393,"searchDepth":394,"depth":394,"links":395},"",2,[396,397,398,399,400,401],{"id":227,"depth":394,"text":228},{"id":265,"depth":394,"text":266},{"id":298,"depth":394,"text":299},{"id":340,"depth":394,"text":341},{"id":355,"depth":394,"text":356},{"id":370,"depth":394,"text":371},"2025-12-16","My ever-evolving tips for pairing with AI - not rules, just habits I keep forgetting","md",{"src":406,"alt":407},"\u002Fimages\u002Fblog\u002F20251216-0742-ai-pairing-notes-to-self.jpg","A software developer at a dual-monitor workstation, one screen showing code while the other displays an ethereal, translucent AI assistant figure made of flowing light particles and neural network patterns, both entities focused on the same problem. Warm desk lamp casting golden light from the left contrasts with cool blue-white emanating from the AI presence, creating dramatic interplay of shadows across scattered sticky notes and a well-worn notebook. Cinematic realism with subtle sci-fi elements, 8k photorealistic quality, shallow depth of field focusing on the collaborative space between human and AI, teal and amber color grading, overhead three-quarter angle composition.",{},true,{"title":141,"description":403},"published","S-GmuWyWj29ioQ0xkC3k-QHdpZVRLEu7Y18hNt49C3k",[414,416],{"title":137,"path":138,"stem":139,"description":415,"status":411,"children":-1},"Designing a doubly linked list app to navigate chains of reasoning - and how writing this post became the first use case.",{"title":145,"path":146,"stem":147,"description":417,"status":411,"children":-1},"A non-tmux user finally discovers terminal multiplexers through Zellij",1776221196452]