[{"data":1,"prerenderedAt":1324},["ShallowReactive",2],{"post-cards":3,"categories":812,"post-getting-more-out-of-claude-code":868},[4,34,51,70,85,111,124,141,163,175,193,210,226,240,257,271,286,301,314,323,332,346,360,374,384,397,407,417,428,443,455,468,479,490,501,512,523,534,547,560,575,590,604,618,630,641,652,662,672,682,692,702,712,722,732,742,752,762,772,782,792,802],{"path":5,"title":6,"slug":7,"summary":8,"date":9,"readTime":10,"hasImage":11,"category":12,"tags":17,"tagSlugs":33},"\u002Fposts\u002Floop-engineering-in-claude-code","Loop Engineering in Claude Code: Designing the System That Prompts the Agent","loop-engineering-in-claude-code","Loop engineering is the shift from prompting an agent step by step to designing a system that prompts it for you. Here is what that means in Claude Code, the building blocks it already ships, a worked example, and an honest look at when it is worth the tokens on a subscription.","2026-06-17",11,true,{"id":13,"name":14,"slug":15,"hue":16},9,"AI & Tooling","ai-tooling",285,[18,21,24,27,30],{"name":19,"slug":20},"Claude Code","claude-code",{"name":22,"slug":23},"Loop Engineering","loop-engineering",{"name":25,"slug":26},"Automation","automation",{"name":28,"slug":29},"AI","ai",{"name":31,"slug":32},"Developer Tools","developer-tools",[20,23,26,29,32],{"path":35,"title":36,"slug":37,"summary":38,"date":39,"readTime":40,"hasImage":11,"category":41,"tags":42,"tagSlugs":50},"\u002Fposts\u002Fclaude-code-hooks-by-example","Claude Code Hooks, by Example","claude-code-hooks-by-example","CLAUDE.md asks Claude Code nicely. Hooks make things happen for certain. A short, practical tour of how hooks are wired, built around two that I actually run: one that installs dependencies on session start, and one that filters noisy command output before it reaches the model.","2026-06-15",7,{"id":13,"name":14,"slug":15,"hue":16},[43,44,47,48,49],{"name":19,"slug":20},{"name":45,"slug":46},"Hooks","hooks",{"name":25,"slug":26},{"name":28,"slug":29},{"name":31,"slug":32},[20,46,26,29,32],{"path":52,"title":53,"slug":54,"summary":55,"date":56,"readTime":57,"hasImage":11,"category":58,"tags":59,"tagSlugs":69},"\u002Fposts\u002Fgetting-more-out-of-claude-code","Getting More Out of Claude Code: Prompting and Token Economy","getting-more-out-of-claude-code","A practical guide to driving Claude Code well: how to prompt for fewer wrong turns, how to keep the context window healthy, and a straight answer to whether running Opus 4.8 at max effort on everything is actually a good idea.","2026-06-14",12,{"id":13,"name":14,"slug":15,"hue":16},[60,61,64,67,68],{"name":19,"slug":20},{"name":62,"slug":63},"Prompting","prompting",{"name":65,"slug":66},"Tokens","tokens",{"name":28,"slug":29},{"name":31,"slug":32},[20,63,66,29,32],{"path":71,"title":72,"slug":73,"summary":74,"date":75,"readTime":10,"hasImage":11,"category":76,"tags":77,"tagSlugs":84},"\u002Fposts\u002Fhow-to-build-a-claude-code-plugin","How to Build a Claude Code Plugin","how-to-build-a-claude-code-plugin","A hands on guide to packaging your Claude Code workflow as a plugin. We build a real conventional-commits helper with a slash command and an auto-invoked skill, then publish it through a marketplace and version it for release.","2026-06-13",{"id":13,"name":14,"slug":15,"hue":16},[78,79,82,83],{"name":19,"slug":20},{"name":80,"slug":81},"Plugins","plugins",{"name":28,"slug":29},{"name":31,"slug":32},[20,81,29,32],{"path":86,"title":87,"slug":88,"summary":89,"date":90,"readTime":91,"hasImage":11,"category":92,"tags":96,"tagSlugs":110},"\u002Fposts\u002Fdeploy-a-lambda-container-image-with-ecr-and-the-console","Deploy a Lambda Container Image With ECR and the Console","deploy-a-lambda-container-image-with-ecr-and-the-console","You built a QR code Lambda and ran it locally. Now put it on AWS the click-through way: create an Amazon ECR repository, push your image, and create the Lambda from that image in the console. Then test it and optionally expose it with a Function URL your Laravel app can call.","2026-06-11",10,{"id":40,"name":93,"slug":94,"hue":95},"AWS","aws",195,[97,98,101,104,107],{"name":93,"slug":94},{"name":99,"slug":100},"Lambda","lambda",{"name":102,"slug":103},"ECR","ecr",{"name":105,"slug":106},"Docker","docker",{"name":108,"slug":109},"Laravel","laravel",[94,100,103,106,109],{"path":112,"title":113,"slug":114,"summary":115,"date":116,"readTime":91,"hasImage":11,"category":117,"tags":118,"tagSlugs":123},"\u002Fposts\u002Fbuild-a-qr-code-lambda-and-call-it-from-laravel","Build a QR Code Lambda and Call It From Laravel","build-a-qr-code-lambda-and-call-it-from-laravel","A hands-on, beginner-friendly build: write a tiny Python AWS Lambda that turns text into a QR code, run it locally in Docker with no AWS account, and call it from a Laravel app. Every line of Python is explained for developers coming from PHP.","2026-06-10",{"id":40,"name":93,"slug":94,"hue":95},[119,120,121,122],{"name":93,"slug":94},{"name":99,"slug":100},{"name":105,"slug":106},{"name":108,"slug":109},[94,100,106,109],{"path":125,"title":126,"slug":127,"summary":128,"date":129,"readTime":57,"hasImage":11,"category":130,"tags":135,"tagSlugs":140},"\u002Fposts\u002Fpython-for-php-developers","Python for PHP Developers","python-for-php-developers","A friendly tour of Python for developers who already know modern PHP. We map the things you reach for every day, types, arrays, classes, named arguments, match, and enums, onto their Python equivalents so you can read and write Python with confidence.","2026-06-09",{"id":131,"name":132,"slug":133,"hue":134},8,"Python","python",330,[136,137],{"name":132,"slug":133},{"name":138,"slug":139},"PHP","php",[133,139],{"path":142,"title":143,"slug":144,"summary":145,"date":146,"readTime":40,"hasImage":147,"category":148,"tags":153,"tagSlugs":162},"\u002Fposts\u002Fgit-flow-vs-github-flow-choosing-a-branching-strategy","Git Flow vs GitHub Flow: Choosing a Branching Strategy for Your Team","git-flow-vs-github-flow-choosing-a-branching-strategy","Git Flow and GitHub Flow take very different approaches to team branching and releases. Let's compare them, see where trunk-based development fits, and sort out how to handle versioned releases, hotfixes, and everything in between.","2026-06-08",false,{"id":149,"name":150,"slug":151,"hue":152},4,"Git","git",158,[154,156,159],{"name":155,"slug":151},"GIT",{"name":157,"slug":158},"Workflow","workflow",{"name":160,"slug":161},"GitHub","github",[151,158,161],{"path":164,"title":165,"slug":166,"summary":167,"date":168,"readTime":40,"hasImage":147,"category":169,"tags":170,"tagSlugs":174},"\u002Fposts\u002Fgithub-flow-keep-your-main-branch-deployable","GitHub Flow: Keep Your Main Branch Deployable","github-flow-keep-your-main-branch-deployable","GitHub Flow is the lightweight branching workflow built on a single rule: anything in main is deployable. Here is the whole loop, branch, pull request, review, merge and deploy, with the git and gh commands and an honest look at where it fits.","2026-06-06",{"id":149,"name":150,"slug":151,"hue":152},[171,172,173],{"name":155,"slug":151},{"name":157,"slug":158},{"name":160,"slug":161},[151,158,161],{"path":176,"title":177,"slug":178,"summary":179,"date":180,"readTime":13,"hasImage":11,"category":181,"tags":184,"tagSlugs":192},"\u002Fposts\u002Fsolid-principles-modern-php","SOLID Principles in Modern PHP","solid-principles-modern-php","SOLID has not changed in years, but PHP has. Here are the five object-oriented design principles rewritten for PHP 8.5, using typed properties, readonly, enums, constructor promotion, and property hooks to express the same ideas with far less boilerplate.","2026-06-05",{"id":182,"name":138,"slug":139,"hue":183},1,264,[185,186,189],{"name":138,"slug":139},{"name":187,"slug":188},"OOP","oop",{"name":190,"slug":191},"Architecture","architecture",[139,188,191],{"path":194,"title":195,"slug":196,"summary":197,"date":198,"readTime":91,"hasImage":11,"category":199,"tags":200,"tagSlugs":209},"\u002Fposts\u002Forchestrating-lambdas-with-step-functions","Orchestrating Lambdas with Step Functions","orchestrating-lambdas-with-step-functions","Step Functions let you wire Lambdas into workflows with retries, branching, and parallelism, but you do not always need them. Here is an honest guide to when a state machine earns its keep, then a real parallel pipeline built with the modern JSONata syntax, deployed with SAM and tested locally.","2026-06-03",{"id":40,"name":93,"slug":94,"hue":95},[201,202,203,206],{"name":93,"slug":94},{"name":99,"slug":100},{"name":204,"slug":205},"Step Functions","step-functions",{"name":207,"slug":208},"Serverless","serverless",[94,100,205,208],{"path":211,"title":212,"slug":213,"summary":214,"date":215,"readTime":10,"hasImage":11,"category":216,"tags":217,"tagSlugs":225},"\u002Fposts\u002Fgive-your-lambda-an-http-front-door","Give Your Lambda an HTTP Front Door","give-your-lambda-an-http-front-door","Your Lambda works, but how should the world call it? This is a practical tour of the options: invoking directly, Lambda function URLs, and Amazon API Gateway, with a clear guide to what each one buys you. Then we build an HTTP API with SAM, test it locally, and call it from a Laravel app.","2026-05-06",{"id":40,"name":93,"slug":94,"hue":95},[218,219,220,223,224],{"name":93,"slug":94},{"name":99,"slug":100},{"name":221,"slug":222},"API Gateway","api-gateway",{"name":207,"slug":208},{"name":108,"slug":109},[94,100,222,208,109],{"path":227,"title":228,"slug":229,"summary":230,"date":231,"readTime":91,"hasImage":11,"category":232,"tags":233,"tagSlugs":239},"\u002Fposts\u002Fpackage-a-python-lambda-as-a-docker-image","Package a Python Lambda as a Docker Image","package-a-python-lambda-as-a-docker-image","AWS Lambda is not just zip files. Here is how to package a Python function as a Docker container image, choose between arm64 and x86_64, test it locally with the Runtime Interface Emulator, push it to Amazon ECR, and invoke it directly without any API Gateway in front.","2026-04-08",{"id":40,"name":93,"slug":94,"hue":95},[234,235,236,237,238],{"name":93,"slug":94},{"name":99,"slug":100},{"name":105,"slug":106},{"name":102,"slug":103},{"name":207,"slug":208},[94,100,106,103,208],{"path":241,"title":242,"slug":243,"summary":244,"date":245,"readTime":246,"hasImage":11,"category":247,"tags":248,"tagSlugs":256},"\u002Fposts\u002Fwhats-new-in-php-8-5","What's New in PHP 8.5","whats-new-in-php-8-5","PHP 8.5 leans into composition and ergonomics. Here are its headline features with practical examples: the pipe operator, cloning with property updates, the NoDiscard attribute, array_first and array_last, the new URI extension, and backtraces on fatal errors.","2025-11-22",6,{"id":182,"name":138,"slug":139,"hue":183},[249,250,253],{"name":138,"slug":139},{"name":251,"slug":252},"PHP 8.5","php-8-5",{"name":254,"slug":255},"What's New","whats-new",[139,252,255],{"path":258,"title":259,"slug":260,"summary":261,"date":262,"readTime":246,"hasImage":11,"category":263,"tags":264,"tagSlugs":270},"\u002Fposts\u002Fwhats-new-in-php-8-4","What's New in PHP 8.4","whats-new-in-php-8-4","PHP 8.4 brought one of the biggest syntax additions of the 8.x line. Here are its headline features with practical examples: property hooks, asymmetric visibility, new without parentheses, the array_find family, the Deprecated attribute, and a modern HTML5 DOM parser.","2024-11-23",{"id":182,"name":138,"slug":139,"hue":183},[265,266,269],{"name":138,"slug":139},{"name":267,"slug":268},"PHP 8.4","php-8-4",{"name":254,"slug":255},[139,268,255],{"path":272,"title":273,"slug":274,"summary":275,"date":276,"readTime":277,"hasImage":147,"category":278,"tags":282,"tagSlugs":285},"\u002Fposts\u002Fstarting-with-rust-installation-first-program","Starting with Rust: From Installation to Your First Program","starting-with-rust-installation-first-program","Learn how to install Rust and write your first \"Hello, world!\" program.","2024-03-23",2,{"id":246,"name":279,"slug":280,"hue":281},"Rust","rust-programming",38,[283],{"name":284,"slug":284},"rust",[284],{"path":287,"title":288,"slug":289,"summary":290,"date":291,"readTime":292,"hasImage":11,"category":293,"tags":294,"tagSlugs":300},"\u002Fposts\u002Fwhats-new-in-php-8-3","What's New in PHP 8.3","whats-new-in-php-8-3","PHP 8.3 is a focused release full of quality-of-life wins. Here are its headline features with practical examples: typed class constants, the Override attribute, json_validate, dynamic constant fetch, random string generation, and readonly deep cloning.","2023-11-25",5,{"id":182,"name":138,"slug":139,"hue":183},[295,296,299],{"name":138,"slug":139},{"name":297,"slug":298},"PHP 8.3","php-8-3",{"name":254,"slug":255},[139,298,255],{"path":302,"title":303,"slug":304,"summary":305,"date":306,"readTime":277,"hasImage":147,"category":307,"tags":311,"tagSlugs":313},"\u002Fposts\u002Fflutter-version-management-fvm","Flutter Version Management","flutter-version-management-fvm","Managing multiple Flutter versions does not need not be a headache. Let's jump into FVM and see how it can simplify your Flutter journey.","2023-10-07",{"id":292,"name":308,"slug":309,"hue":310},"Flutter","flutter",230,[312],{"name":309,"slug":309},[309],{"path":315,"title":316,"slug":317,"summary":318,"date":306,"readTime":182,"hasImage":147,"category":319,"tags":320,"tagSlugs":322},"\u002Fposts\u002Fsetting-up-cocoapods-fvm","Setting Up CocoaPods for FVM-managed Flutter Projects","setting-up-cocoapods-fvm","A guide to installing CocoaPods for a Flutter project while using FVM to manage Flutter versions, ensuring a smooth setup for iOS development.",{"id":292,"name":308,"slug":309,"hue":310},[321],{"name":309,"slug":309},[309],{"path":324,"title":325,"slug":326,"summary":327,"date":306,"readTime":182,"hasImage":147,"category":328,"tags":329,"tagSlugs":331},"\u002Fposts\u002Ftroubleshooting-xcode-15-build-issues-flutter","Troubleshooting Xcode 15 Build Issues in Flutter Projects","troubleshooting-xcode-15-build-issues-flutter","Uncovering solutions to common issues faced when updating to Xcode 15 in a Flutter project using an older version of CocoaPods.",{"id":292,"name":308,"slug":309,"hue":310},[330],{"name":309,"slug":309},[309],{"path":333,"title":334,"slug":335,"summary":336,"date":337,"readTime":246,"hasImage":11,"category":338,"tags":339,"tagSlugs":345},"\u002Fposts\u002Fwhats-new-in-php-8-2","What's New in PHP 8.2","whats-new-in-php-8-2","PHP 8.2 polished the type system and the immutability story. Here are its headline features with practical examples: readonly classes, DNF types, standalone null, false and true types, the new Random extension, constants in traits, and sensitive parameter redaction.","2022-12-10",{"id":182,"name":138,"slug":139,"hue":183},[340,341,344],{"name":138,"slug":139},{"name":342,"slug":343},"PHP 8.2","php-8-2",{"name":254,"slug":255},[139,343,255],{"path":347,"title":348,"slug":349,"summary":350,"date":351,"readTime":246,"hasImage":11,"category":352,"tags":353,"tagSlugs":359},"\u002Fposts\u002Fwhats-new-in-php-8-1","What's New in PHP 8.1","whats-new-in-php-8-1","PHP 8.1 is one of the most loved releases of the 8.x line. Here are its headline features with practical examples: enums, readonly properties, first-class callable syntax, fibers, the never return type, and new in initializers.","2021-11-27",{"id":182,"name":138,"slug":139,"hue":183},[354,355,358],{"name":138,"slug":139},{"name":356,"slug":357},"PHP 8.1","php-8-1",{"name":254,"slug":255},[139,357,255],{"path":361,"title":362,"slug":363,"summary":364,"date":365,"readTime":246,"hasImage":11,"category":366,"tags":367,"tagSlugs":373},"\u002Fposts\u002Fwhats-new-in-php-8-0","What's New in PHP 8.0","whats-new-in-php-8-0","PHP 8.0 was a true major version. Here is a tour of its headline features with practical examples: constructor property promotion, named arguments, the match expression, the nullsafe operator, union types, and string helpers that finally read like English.","2020-11-28",{"id":182,"name":138,"slug":139,"hue":183},[368,369,372],{"name":138,"slug":139},{"name":370,"slug":371},"PHP 8.0","php-8-0",{"name":254,"slug":255},[139,371,255],{"path":375,"title":376,"slug":377,"summary":378,"date":379,"readTime":149,"hasImage":147,"category":380,"tags":381,"tagSlugs":383},"\u002Fposts\u002Fgit-tracking-a-remote-branch-upstream-for-changes","Git: Tracking a Remote Branch for Changes","git-tracking-a-remote-branch-upstream-for-changes","When you fork a project, you need a way to pull in changes from the original repository, usually called upstream. Here is how to wire up an upstream remote, actually sync your fork, and set up branch tracking so plain git pull and git push just work.","2018-11-04",{"id":149,"name":150,"slug":151,"hue":152},[382],{"name":155,"slug":151},[151],{"path":385,"title":386,"slug":387,"summary":388,"date":379,"readTime":389,"hasImage":11,"category":390,"tags":394,"tagSlugs":396},"\u002Fposts\u002Fjavascript-array-map-filter-reduce-functions","JavaScript's map, filter, and reduce methods","javascript-array-map-filter-reduce-functions","JavaScript provides some amazing functions that can be called against your arrays to help filter them, manipulate them, or even reduce them down to a single value or grouped values.",3,{"id":277,"name":391,"slug":392,"hue":393},"JavaScript","javascript",92,[395],{"name":391,"slug":392},[392],{"path":398,"title":399,"slug":400,"summary":401,"date":402,"readTime":182,"hasImage":11,"category":403,"tags":404,"tagSlugs":406},"\u002Fposts\u002Fphp-fizzbuzz-example","FizzBuzz in PHP: A Fresh Approach","php-fizzbuzz-example","FizzBuzz is a very popular programming question that tests your logic to see if you can build a simple program.","2018-11-02",{"id":182,"name":138,"slug":139,"hue":183},[405],{"name":138,"slug":139},[139],{"path":408,"title":409,"slug":410,"summary":411,"date":412,"readTime":277,"hasImage":11,"category":413,"tags":414,"tagSlugs":416},"\u002Fposts\u002Fphp-array-reduce","PHP's array_reduce is not only for outputting single values","php-array-reduce","PHP's array_reduce is a simple way to partition a set of data or return a single value. It is super powerful and worth spending time learning.","2018-11-01",{"id":182,"name":138,"slug":139,"hue":183},[415],{"name":138,"slug":139},[139],{"path":418,"title":419,"slug":420,"summary":421,"date":422,"readTime":246,"hasImage":147,"category":423,"tags":424,"tagSlugs":427},"\u002Fposts\u002Fimprove-your-git-workflow-with-git-flow","Improve Your Git Workflow with Git Flow","improve-your-git-workflow-with-git-flow","Git Flow is a structured branching model built around versioned, scheduled releases. Here is how its branches fit together, a hands-on walkthrough of features, releases and hotfixes, and an honest take on when it is still the right call.","2016-12-06",{"id":149,"name":150,"slug":151,"hue":152},[425,426],{"name":155,"slug":151},{"name":157,"slug":158},[151,158],{"path":429,"title":430,"slug":431,"summary":432,"date":433,"readTime":246,"hasImage":147,"category":434,"tags":438,"tagSlugs":442},"\u002Fposts\u002Fusing-css-transitions","Using CSS Transitions","using-css-transitions","CSS transitions are the standard way to apply transitions to your elements, and have been for years, replacing the old approach of using JavaScript. In this article, I'll go through each of the transition properties available, and provide examples of how to use them.","2016-12-05",{"id":389,"name":435,"slug":436,"hue":437},"HTML & CSS","html-css",55,[439],{"name":440,"slug":441},"CSS","css",[441],{"path":444,"title":445,"slug":446,"summary":447,"date":448,"readTime":149,"hasImage":147,"category":449,"tags":450,"tagSlugs":454},"\u002Fposts\u002Fstructuring-your-website-with-html-5-semantics","Structuring Your Website With HTML 5 Semantics","structuring-your-website-with-html-5-semantics","Prior to HTML 5, there was no real markup to help explain the intent behind your HTML code. The goal of HTML 5 was to offer a more readable way of writing your code, so that any author that comes after you can have an easier time going through what you've created.","2016-12-04",{"id":389,"name":435,"slug":436,"hue":437},[451],{"name":452,"slug":453},"HTML","html",[453],{"path":456,"title":457,"slug":458,"summary":459,"date":460,"readTime":277,"hasImage":147,"category":461,"tags":462,"tagSlugs":467},"\u002Fposts\u002Finterpolation-in-stylus-css-pre-processor","Interpolation in Stylus","interpolation-in-stylus-css-pre-processor","You can also use interpolation to improve your functions for reuse, as well as your other code within your stylesheet. The way it works is that you can wrap your expression within {}, which will then be outputted as the identifier.","2016-12-03",{"id":389,"name":435,"slug":436,"hue":437},[463,466],{"name":464,"slug":465},"Stylus","stylus",{"name":440,"slug":441},[465,441],{"path":469,"title":470,"slug":471,"summary":472,"date":473,"readTime":182,"hasImage":147,"category":474,"tags":475,"tagSlugs":478},"\u002Fposts\u002Fcreating-configuration-files-in-stylus-css-pre-processor","Creating Configuration Files In Stylus","creating-configuration-files-in-stylus-css-pre-processor","It's super simple to create a configuration file for instance that would manage your media query break points. You could also use a configuration file for managing colors, font sizes, and other variables such as gutter spacing and more.","2016-12-02",{"id":389,"name":435,"slug":436,"hue":437},[476,477],{"name":440,"slug":441},{"name":464,"slug":465},[441,465],{"path":480,"title":481,"slug":482,"summary":483,"date":484,"readTime":149,"hasImage":147,"category":485,"tags":486,"tagSlugs":489},"\u002Fposts\u002Fusing-functions-and-mixins-with-stylus-css-pre-processor","Using Functions and Mixins with Stylus","using-functions-and-mixins-with-stylus-css-pre-processor","Stylus allows you to create functions and mixins of reusable code for your stylesheets. You can also handle mathematical operations, unary operations, and more allowing you complete control over your stylesheets with ease.","2016-12-01",{"id":389,"name":435,"slug":436,"hue":437},[487,488],{"name":440,"slug":441},{"name":464,"slug":465},[441,465],{"path":491,"title":492,"slug":493,"summary":494,"date":495,"readTime":277,"hasImage":147,"category":496,"tags":497,"tagSlugs":500},"\u002Fposts\u002Fsetting-variables-in-stylus-css-pre-processor","Setting Variables in Stylus","setting-variables-in-stylus-css-pre-processor","Unlike CSS, in Stylus you can assign expressions to variables that can be reusable throughout your stylesheets.","2016-11-29",{"id":389,"name":435,"slug":436,"hue":437},[498,499],{"name":440,"slug":441},{"name":464,"slug":465},[441,465],{"path":502,"title":503,"slug":504,"summary":505,"date":506,"readTime":292,"hasImage":147,"category":507,"tags":508,"tagSlugs":511},"\u002Fposts\u002Fusing-selectors-in-stylus-css-pre-processor","Using Selectors in Stylus","using-selectors-in-stylus-css-pre-processor","Selectors are a way to pick the elements that you want styled. In Stylus, similar to CSS, you can apply a set of styles to any element by separating them by a comma delimited list. Stylus though, also allows you to select multiple elements by separating each on their own line.","2016-11-28",{"id":389,"name":435,"slug":436,"hue":437},[509,510],{"name":440,"slug":441},{"name":464,"slug":465},[441,465],{"path":513,"title":514,"slug":515,"summary":516,"date":517,"readTime":182,"hasImage":147,"category":518,"tags":519,"tagSlugs":522},"\u002Fposts\u002Flearning-stylus-a-css-pre-processor","Learning Stylus: A CSS Pre-Processor","learning-stylus-a-css-pre-processor","This mini-series will be a little different to how you may see other articles on my site. Really this article is more geared as notes for me as I go through the documentation for Stylus, and learn the ins and outs of this beautiful language.","2016-11-27",{"id":389,"name":435,"slug":436,"hue":437},[520,521],{"name":440,"slug":441},{"name":464,"slug":465},[441,465],{"path":524,"title":525,"slug":526,"summary":527,"date":528,"readTime":149,"hasImage":147,"category":529,"tags":530,"tagSlugs":533},"\u002Fposts\u002Fbem-methodology-overview-and-naming-conventions","BEM Methodology Overview and Naming Conventions","bem-methodology-overview-and-naming-conventions","BEM or Block Element Modifier is a naming convention used to help organize your code base. In this article, I discuss its uses within your CSS projects.","2016-11-26",{"id":389,"name":435,"slug":436,"hue":437},[531,532],{"name":440,"slug":441},{"name":452,"slug":453},[441,453],{"path":535,"title":536,"slug":537,"summary":538,"date":539,"readTime":182,"hasImage":147,"category":540,"tags":541,"tagSlugs":546},"\u002Fposts\u002Fintroduction-to-ecmascript-6","Introduction to ECMAScript 6","introduction-to-ecmascript-6","The latest in ECMAScript 6 introduces new features to JavaScript which makes it so much more fun to use, while solving problems that have been around for years. The intent of this article is to provide you with resources you can use to start learning ES6 today.","2016-11-25",{"id":277,"name":391,"slug":392,"hue":393},[542,543],{"name":391,"slug":392},{"name":544,"slug":545},"ECMAScript","ecmascript",[392,545],{"path":548,"title":549,"slug":550,"summary":551,"date":552,"readTime":389,"hasImage":147,"category":553,"tags":554,"tagSlugs":559},"\u002Fposts\u002Fbabel-installation-and-configuration","Babel Installation and Configuration","babel-installation-and-configuration","Babel offers a convenient way to transform your ES6 code to JavaScript that all browsers can understand. In this article we'll go over a basic configuration that will enable you to start using it with any project right away.","2016-11-24",{"id":277,"name":391,"slug":392,"hue":393},[555,556],{"name":391,"slug":392},{"name":557,"slug":558},"Babel","babel",[392,558],{"path":561,"title":562,"slug":563,"summary":564,"date":565,"readTime":182,"hasImage":147,"category":566,"tags":567,"tagSlugs":574},"\u002Fposts\u002Fconfiguring-stylus-css-pre-processor-with-gulp-and-sourcemaps","Configuring Stylus CSS Pre-Processor with Gulp and Sourcemaps","configuring-stylus-css-pre-processor-with-gulp-and-sourcemaps","In this article we'll go over how to configure your project to process Stylus files using Gulp. We'll also create source map file which your browser will use to help point you in the right direction of your files when developing","2016-11-23",{"id":277,"name":391,"slug":392,"hue":393},[568,569,570,571],{"name":391,"slug":392},{"name":464,"slug":465},{"name":440,"slug":441},{"name":572,"slug":573},"Gulp","gulp",[392,465,441,573],{"path":576,"title":577,"slug":578,"summary":579,"date":580,"readTime":277,"hasImage":147,"category":581,"tags":582,"tagSlugs":589},"\u002Fposts\u002Fconfiguring-gulp-with-less-css-pre-processor","Configuring Gulp With Less CSS Pre-Processor","configuring-gulp-with-less-css-pre-processor","Less is a CSS pre-processor allowing you to create variables, mixins, and functions in an effort to make your CSS more maintainable.","2016-11-22",{"id":277,"name":391,"slug":392,"hue":393},[583,584,585,588],{"name":572,"slug":573},{"name":391,"slug":392},{"name":586,"slug":587},"Less","less",{"name":440,"slug":441},[573,392,587,441],{"path":591,"title":592,"slug":593,"summary":594,"date":595,"readTime":277,"hasImage":11,"category":596,"tags":597,"tagSlugs":603},"\u002Fposts\u002Fusing-browser-sync-with-gulp-for-live-reloading","Using Browser Sync with Gulp for Live Reloading","using-browser-sync-with-gulp-for-live-reloading","Browser Sync is a nice tool to use while developing. It allows your browser to reload live when changes are made to your files. For instance, assuming we're watching our CSS file for changes we can have the browser auto refresh\u002Fsync when it sees those changes made.","2016-11-21",{"id":277,"name":391,"slug":392,"hue":393},[598,599,602],{"name":391,"slug":392},{"name":600,"slug":601},"Browser Sync","browser-sync",{"name":572,"slug":573},[392,601,573],{"path":605,"title":606,"slug":607,"summary":608,"date":609,"readTime":277,"hasImage":147,"category":610,"tags":611,"tagSlugs":617},"\u002Fposts\u002Fgulp-watch-automate-your-gulp-tasks","Gulp Watch: Automate Your Gulp Tasks","gulp-watch-automate-your-gulp-tasks","Gulp watch is perfect for when you're editing project files since it allows you to not have to run the gulp command manually each time.","2016-11-20",{"id":277,"name":391,"slug":392,"hue":393},[612,613,616],{"name":391,"slug":392},{"name":614,"slug":615},"Yarn","yarn",{"name":572,"slug":573},[392,615,573],{"path":619,"title":620,"slug":621,"summary":622,"date":623,"readTime":246,"hasImage":147,"category":624,"tags":625,"tagSlugs":629},"\u002Fposts\u002Fconfiguring-gulp-on-a-new-project","Configuring Gulp On A New Project","configuring-gulp-on-a-new-project","Gulp may seem like a scary thing to wrap your head around at first, but it's actually quite easy to start using once you understand the basics.","2016-11-19",{"id":277,"name":391,"slug":392,"hue":393},[626,627,628],{"name":391,"slug":392},{"name":572,"slug":573},{"name":614,"slug":615},[392,573,615],{"path":631,"title":632,"slug":633,"summary":634,"date":635,"readTime":389,"hasImage":147,"category":636,"tags":637,"tagSlugs":640},"\u002Fposts\u002Fyarn-publishing-a-package","Yarn: Publishing a Package","yarn-publishing-a-package","Publishing a package to the npm repository has never been simpler. With a few steps, you can create a package that is redistributable to all of your projects.","2016-11-18",{"id":277,"name":391,"slug":392,"hue":393},[638,639],{"name":391,"slug":392},{"name":614,"slug":615},[392,615],{"path":642,"title":643,"slug":644,"summary":645,"date":646,"readTime":389,"hasImage":147,"category":647,"tags":648,"tagSlugs":651},"\u002Fposts\u002Fyarn-fast-and-secure-dependency-management","Yarn: Fast and Secure Dependency Management","yarn-fast-and-secure-dependency-management","Yarn is a super simple dependency management tool which is way faster to use instead of traditional npm. It acts as a drop-in replacement, so you can get started using yarn right away. The best way to install yarn is by using npm.","2016-11-17",{"id":277,"name":391,"slug":392,"hue":393},[649,650],{"name":391,"slug":392},{"name":614,"slug":615},[392,615],{"path":653,"title":654,"slug":655,"summary":656,"date":657,"readTime":182,"hasImage":11,"category":658,"tags":659,"tagSlugs":661},"\u002Fposts\u002Fsupport-for-keys-in-list-or-its-new-shorthand-syntax-in-php","Support for keys in list(), or its new shorthand syntax [] in PHP","support-for-keys-in-list-or-its-new-shorthand-syntax-in-php","Now as of PHP 7.1, you can define the keys of your array that will be parsed when destructuring your arrays. Prior to PHP 7.1, you could only use arrays with numeric indexes. Now with this new addition, our lives just got easier.","2016-11-16",{"id":182,"name":138,"slug":139,"hue":183},[660],{"name":138,"slug":139},[139],{"path":663,"title":664,"slug":665,"summary":666,"date":667,"readTime":182,"hasImage":11,"category":668,"tags":669,"tagSlugs":671},"\u002Fposts\u002Ftype-hinting-with-the-iterable-pseudo-type-in-php","Type Hinting With The Iterable pseudo-type In PHP","type-hinting-with-the-iterable-pseudo-type-in-php","As of PHP 7.1, you can now type hint your method\u002Ffunction arguments with the keyword iterable for handling arrays or even objects that implement the Traversable interface.","2016-11-15",{"id":182,"name":138,"slug":139,"hue":183},[670],{"name":138,"slug":139},[139],{"path":673,"title":674,"slug":675,"summary":676,"date":677,"readTime":182,"hasImage":11,"category":678,"tags":679,"tagSlugs":681},"\u002Fposts\u002Ftype-hinting-callable-functions-in-php","Type Hinting Callable Functions in PHP","type-hinting-callable-functions-in-php","As of PHP 5.4, you can type hint your method arguments with the callable keyword allowing you to enforce the type of data that is passed via your arguments.","2016-11-14",{"id":182,"name":138,"slug":139,"hue":183},[680],{"name":138,"slug":139},[139],{"path":683,"title":684,"slug":685,"summary":686,"date":687,"readTime":182,"hasImage":11,"category":688,"tags":689,"tagSlugs":691},"\u002Fposts\u002Fsetting-visibility-for-your-class-constants-in-php","Setting Visibility for Your Class Constants in PHP","setting-visibility-for-your-class-constants-in-php","Now in PHP 7.1+, you can set different visibility modifiers for each of your class constants. The available visibility modifiers consist of public, protected, and private.","2016-11-13",{"id":182,"name":138,"slug":139,"hue":183},[690],{"name":138,"slug":139},[139],{"path":693,"title":694,"slug":695,"summary":696,"date":697,"readTime":182,"hasImage":11,"category":698,"tags":699,"tagSlugs":701},"\u002Fposts\u002Fanonymous-classes-php","Using Anonymous Classes in PHP","anonymous-classes-php","As of PHP 7, you can now create quick throwaway objects for use within your projects. This can be especially useful for your automated tests, for instance, with allowing you to create quick implementations of your interfaces.","2016-11-12",{"id":182,"name":138,"slug":139,"hue":183},[700],{"name":138,"slug":139},[139],{"path":703,"title":704,"slug":705,"summary":706,"date":707,"readTime":182,"hasImage":11,"category":708,"tags":709,"tagSlugs":711},"\u002Fposts\u002Fsymmetric-array-destructuring-in-php","Symmetric Array Destructuring in PHP","symmetric-array-destructuring-in-php","As of PHP 7.1, you can now use the shorthand array syntax to destructure your arrays for assignment. Previously you would have had to use a function like list, but now you can use the simple new array shorthand syntax.","2016-11-11",{"id":182,"name":138,"slug":139,"hue":183},[710],{"name":138,"slug":139},[139],{"path":713,"title":714,"slug":715,"summary":716,"date":717,"readTime":277,"hasImage":11,"category":718,"tags":719,"tagSlugs":721},"\u002Fposts\u002Fphp-array-map-to-format-your-arrays-without-loops","Using PHP's array_map to format your arrays without loops","php-array-map-to-format-your-arrays-without-loops","So let's face it, loops are a bit boring. So how can we mix it up? Let's assume we have a case where we have a CSV file that we want to quickly parse.","2016-11-10",{"id":182,"name":138,"slug":139,"hue":183},[720],{"name":138,"slug":139},[139],{"path":723,"title":724,"slug":725,"summary":726,"date":727,"readTime":40,"hasImage":11,"category":728,"tags":729,"tagSlugs":731},"\u002Fposts\u002Fsolid-principles-in-php","SOLID Principles in PHP","solid-principles-in-php","The 5 basic principles for Object-Oriented Design, SOLID, were first created in an effort to improve maintainability in our code bases. SOLID is a mnemonic acronym that stands for each of the following principles: Single Responsibility, Open-Closed, Liskov Substitution, Interface Segregation, and Dependency Inversion.","2016-11-09",{"id":182,"name":138,"slug":139,"hue":183},[730],{"name":138,"slug":139},[139],{"path":733,"title":734,"slug":735,"summary":736,"date":737,"readTime":182,"hasImage":11,"category":738,"tags":739,"tagSlugs":741},"\u002Fposts\u002Ffiltering-arrays-without-using-loops-in-php","Filtering Arrays Without Using Loops in PHP","filtering-arrays-without-using-loops-in-php","PHP has a built-in function called array_filter that allows you to filter through your arrays without the need for a loop. Personally, this approach feels much cleaner to me and simpler to comprehend.","2016-11-08",{"id":182,"name":138,"slug":139,"hue":183},[740],{"name":138,"slug":139},[139],{"path":743,"title":744,"slug":745,"summary":746,"date":747,"readTime":182,"hasImage":11,"category":748,"tags":749,"tagSlugs":751},"\u002Fposts\u002Fvoid-return-types-in-php","Void Return Types in PHP","void-return-types-in-php","As of PHP 7.1, we can now use void return types within our methods. This is useful for cases where you have methods that are just setting or processing data without the need of returning any values.","2016-11-07",{"id":182,"name":138,"slug":139,"hue":183},[750],{"name":138,"slug":139},[139],{"path":753,"title":754,"slug":755,"summary":756,"date":757,"readTime":182,"hasImage":11,"category":758,"tags":759,"tagSlugs":761},"\u002Fposts\u002Ftype-hinting-with-nullable-types-in-php","Type Hinting with Nullable Types in PHP","type-hinting-with-nullable-types-in-php","As of PHP 7.1, you can now set your type declarations as nullable by simply prefixing them with a question mark ?. In doing so a null value can be passed in as a parameter or returned as a value for your methods.","2016-11-06",{"id":182,"name":138,"slug":139,"hue":183},[760],{"name":138,"slug":139},[139],{"path":763,"title":764,"slug":765,"summary":766,"date":767,"readTime":182,"hasImage":11,"category":768,"tags":769,"tagSlugs":771},"\u002Fposts\u002Fphp-group-multiple-use-declarations","PHP Group Multiple use Declarations","php-group-multiple-use-declarations","As of PHP 7, you can now group your imported classes, functions, and constants from under the same namespace.","2016-11-05",{"id":182,"name":138,"slug":139,"hue":183},[770],{"name":138,"slug":139},[139],{"path":773,"title":774,"slug":775,"summary":776,"date":777,"readTime":182,"hasImage":11,"category":778,"tags":779,"tagSlugs":781},"\u002Fposts\u002Fphp-null-coalescing-operator","PHP Null Coalescing Operator","php-null-coalescing-operator","One of my new favorite additions to PHP 7, is the Null Coalescing Operator. It cleans up your code by removing a tedious step of checking if some value is isset() and not NULL and returning it or if not setting a default.","2016-11-04",{"id":182,"name":138,"slug":139,"hue":183},[780],{"name":138,"slug":139},[139],{"path":783,"title":784,"slug":785,"summary":786,"date":787,"readTime":277,"hasImage":11,"category":788,"tags":789,"tagSlugs":791},"\u002Fposts\u002Fphp-spaceship-operator","PHP Spaceship Operator","php-spaceship-operator","One of the new features to hit PHP 7 is the Spaceship Operator. This new trick helps improve the way you'd compare 2 expressions. In short, the comparison returns 1 of 3 values (-1, 0, or 1) depending on the result of the comparison.","2016-11-03",{"id":182,"name":138,"slug":139,"hue":183},[790],{"name":138,"slug":139},[139],{"path":793,"title":794,"slug":795,"summary":796,"date":797,"readTime":389,"hasImage":11,"category":798,"tags":799,"tagSlugs":801},"\u002Fposts\u002Freturn-type-declarations-in-php","Return Type Declarations in PHP","return-type-declarations-in-php","PHP 7 now makes it possible to declare return types for your methods. This allows you better control over the data that will be returned from each method in your application.","2016-11-02",{"id":182,"name":138,"slug":139,"hue":183},[800],{"name":138,"slug":139},[139],{"path":803,"title":804,"slug":805,"summary":806,"date":807,"readTime":182,"hasImage":11,"category":808,"tags":809,"tagSlugs":811},"\u002Fposts\u002Fscalar-type-hints-php","Scalar Type Hints in PHP","scalar-type-hints-php","Starting with PHP 7.0, it's now possible to declare scalar type hints for your method arguments. Previously, we were able to use array and callable, but now with PHP 7+, we have much more control.","2016-11-01",{"id":182,"name":138,"slug":139,"hue":183},[810],{"name":138,"slug":139},[139],[813,820,826,832,838,844,850,856,862],{"id":814,"description":815,"extension":816,"hue":183,"meta":817,"name":138,"slug":139,"stem":818,"weight":182,"__hash__":819},"categories\u002Fcategories\u002Fphp.json","PHP articles and tutorials ranging from new language features to using interesting packages.","json",{},"categories\u002Fphp","h_EmN4YMO4b2mBt3MPLs7RvscJx0NBmwDIZPxqPqKLE",{"id":821,"description":822,"extension":816,"hue":393,"meta":823,"name":391,"slug":392,"stem":824,"weight":277,"__hash__":825},"categories\u002Fcategories\u002Fjavascript.json","JavaScript articles and tutorials ranging from new language features to using interesting packages.",{},"categories\u002Fjavascript","7gmVgkw5BRo26i1bFoSv96bwDJ4nTtZcJ9Ud6u5p0yk",{"id":827,"description":828,"extension":816,"hue":437,"meta":829,"name":435,"slug":436,"stem":830,"weight":389,"__hash__":831},"categories\u002Fcategories\u002Fhtml-css.json","HTML & CSS articles and tutorials ranging from new language features to using interesting packages.",{},"categories\u002Fhtml-css","vXvPlRA-iaeCJ64Wi3sLyUR0kqL48zYcZWORRqt8N70",{"id":833,"description":834,"extension":816,"hue":152,"meta":835,"name":150,"slug":151,"stem":836,"weight":149,"__hash__":837},"categories\u002Fcategories\u002Fgit.json","Git articles and tutorials ranging from new language features to different workflows.",{},"categories\u002Fgit","qOqFsFTKI9XB444UodUKW_3AakFadHzW-ss8V-maUmE",{"id":839,"description":840,"extension":816,"hue":310,"meta":841,"name":308,"slug":309,"stem":842,"weight":292,"__hash__":843},"categories\u002Fcategories\u002Fflutter.json","Dive into Flutter, the open-source UI software development toolkit, as we explore its capabilities in creating natively compiled applications for mobile, web, and desktop from a single codebase.",{},"categories\u002Fflutter","aD1moU8CgoYt4FRnSeA4Iy9xxnnopdEKBEYP2arAzdI",{"id":845,"description":846,"extension":816,"hue":281,"meta":847,"name":279,"slug":280,"stem":848,"weight":246,"__hash__":849},"categories\u002Fcategories\u002Frust-programming.json","From setting up your environment to advanced concepts, this is your go-to resource for all things Rust.",{},"categories\u002Frust-programming","LscnqSsk-htWc9yZg9eXaIUJwNfTK5oaZOClYKagNC4",{"id":851,"description":852,"extension":816,"hue":95,"meta":853,"name":93,"slug":94,"stem":854,"weight":40,"__hash__":855},"categories\u002Fcategories\u002Faws.json","Hands-on AWS for builders: Lambda, containers and ECR, API Gateway, Step Functions, and the serverless glue in between.",{},"categories\u002Faws","gU2fpFeHDrBz8RJy54lYK7NJxCnMyma_fblrxDoJByQ",{"id":857,"description":858,"extension":816,"hue":134,"meta":859,"name":132,"slug":133,"stem":860,"weight":131,"__hash__":861},"categories\u002Fcategories\u002Fpython.json","Python for people who already build software: a practical, PHP-developer-friendly path into the language and its ecosystem.",{},"categories\u002Fpython","B6ssFzfg4dLAIzOltx3jcPOk7qghiDxoDD74rhlQ9kU",{"id":863,"description":864,"extension":816,"hue":16,"meta":865,"name":14,"slug":15,"stem":866,"weight":13,"__hash__":867},"categories\u002Fcategories\u002Fai-tooling.json","Building with AI coding tools: Claude Code plugins, skills, agents, and the workflows that grow up around them.",{},"categories\u002Fai-tooling","MSW9v8hDS6wLO24_SmWWDv2FfrC7AFCDKmLj5Svyvis",{"id":869,"title":53,"body":870,"category":1310,"date":56,"description":1311,"extension":1312,"hasImage":11,"meta":1313,"navigation":11,"path":52,"readTime":57,"seo":1314,"slug":54,"stem":1315,"summary":55,"tagSlugs":1316,"tags":1317,"__hash__":1323},"posts\u002Fposts\u002Fgetting-more-out-of-claude-code.md",{"type":871,"value":872,"toc":1298},"minimark",[873,882,885,890,893,896,900,903,910,920,926,929,939,945,951,957,961,964,971,975,978,1014,1035,1039,1042,1045,1048,1052,1055,1062,1073,1076,1102,1109,1113,1116,1129,1141,1147,1153,1159,1163,1166,1176,1185,1194,1205,1214,1234,1239,1242,1248,1251,1265,1271,1277,1280],[874,875,876,877,881],"p",{},"For months my Claude Code setup was one reflex: whatever the newest Opus is, pinned to max effort, on everything. Renaming a variable? Max effort. Reading a config file? Max effort. It felt responsible. Then I read the docs and watched my own ",[878,879,880],"code",{},"\u002Fusage"," numbers, and changed my mind. Max effort is a great tool and a terrible default.",[874,883,884],{},"This is what I have learned about getting more out of Claude Code: prompting it for fewer wrong turns, keeping the context window healthy, and choosing models and effort so you spend tokens where they pay off. One framing first. The scarce resource is throughput, how much work you get done before you hit your plan's usage and rate limits. Waste tokens and you just hit that wall sooner.",[886,887,889],"h2",{"id":888},"it-is-a-context-window-not-a-chat","It is a context window, not a chat",[874,891,892],{},"The most useful mental model: you are not having a conversation, you are managing a context window. Everything Claude knows right now shares one finite budget of tokens, the conversation history, every file it has read, every command's output, your CLAUDE.md, loaded skills, and the system prompt.",[874,894,895],{},"That budget is large but not infinite, and what matters is what happens as it fills. Claude Code auto-compacts, summarizing old turns and dropping stale output. That keeps the session alive but loses detail: the instruction from your third message can be gone by the fortieth. It is why long sessions slowly get dumber, not because the model got worse but because the early signal got compacted into noise. Almost everything below follows from this. Good prompting puts the right things in the window; good token economy keeps the wrong things out.",[886,897,899],{"id":898},"prompt-for-fewer-wrong-turns","Prompt for fewer wrong turns",[874,901,902],{},"What you get back is mostly decided before Claude writes a line. Clever phrasing matters less than it used to; structure matters more, how specific you are, what context you hand over, and whether Claude can tell when it succeeded.",[874,904,905,909],{},[906,907,908],"strong",{},"Be specific, up front."," Vague requests get vague work. Compare:",[911,912,918],"pre",{"className":913,"code":915,"language":916,"meta":917},[914],"language-text","Fix the login bug.\n","text","",[878,919,915],{"__ignoreMap":917},[911,921,924],{"className":922,"code":923,"language":916,"meta":917},[914],"Logins fail for users whose email changed since signup. I think the session\ntoken still keys off the old address. Look in src\u002Fauth\u002Fsession.ts, write a\nfailing test that reproduces it, then fix it. Do not touch the OAuth flow.\n",[878,925,923],{"__ignoreMap":917},[874,927,928],{},"The second names the symptom, points at the file, sets a boundary, and bakes in a way to know it worked. One pass instead of three.",[874,930,931,934,935,938],{},[906,932,933],{},"Name the off-limits zones."," Say which files Claude should not touch, and have it run ",[878,936,937],{},"git diff"," at the end to confirm. What is out of bounds is often more useful than what to do.",[874,940,941,944],{},[906,942,943],{},"Show an example of the output you want."," A small sample of the format steers Claude better than a paragraph describing it.",[874,946,947,950],{},[906,948,949],{},"Say what to do, not what to avoid."," \"Write in plain paragraphs\" works better than \"do not use bullet points.\"",[874,952,953,956],{},[906,954,955],{},"Give it something to verify against."," The big one. A failing test, expected output, a screenshot, anything Claude can check itself against cuts the back-and-forth. A model that can watch a test go green does not need you as its test harness.",[886,958,960],{"id":959},"plan-before-you-code","Plan before you code",[874,962,963],{},"For anything bigger than a quick edit, separate thinking from doing. Plan mode (Shift+Tab) lets Claude read the code and propose an approach without touching a file; you correct the misunderstanding while it is cheap, then let it build against a plan you agree on. The explore, plan, code, commit loop catches the expensive architectural mistakes before they become a diff you have to unwind.",[874,965,966,967,970],{},"Two habits make it work. Read the plan before approving it, do not rubber-stamp it. And interrupt early: press Esc the moment Claude heads the wrong way instead of watching a doomed attempt finish. When a session gets truly tangled, stop nursing it, ",[878,968,969],{},"\u002Fclear"," and restart with a tighter prompt. That is almost always faster than arguing your way out, and it costs nothing.",[886,972,974],{"id":973},"claudemd-and-memory-done-right","CLAUDE.md and memory, done right",[874,976,977],{},"CLAUDE.md is the context you do not want to retype: build commands, architecture, conventions, the facts Claude should always know. It loads every session, so keep it lean, a couple hundred lines at most. Past a certain size it both eats context and gets followed less, so a bloated CLAUDE.md is worse than a short one.",[979,980,981,988,998,1008],"ul",{},[982,983,984,987],"li",{},[906,985,986],{},"Facts, not procedures."," \"Use 2-space indentation\" belongs here; a ten-step deploy runbook is a job for a skill, which loads only when needed.",[982,989,990,993,994,997],{},[906,991,992],{},"Know the layers."," Project file for team standards, ",[878,995,996],{},"~\u002F.claude\u002F"," for personal preferences across projects, a gitignored local file for machine-specific notes.",[982,999,1000,1003,1004,1007],{},[906,1001,1002],{},"Scope rules to paths."," Instructions for one corner of the codebase can live in ",[878,1005,1006],{},".claude\u002Frules\u002F"," so they load only when Claude touches matching files.",[982,1009,1010,1013],{},[906,1011,1012],{},"Tell compaction what to keep."," A line in CLAUDE.md can say what survives summarization, so code and test output stay while small talk goes.",[874,1015,1016,1017,1020,1021,1024,1025,1027,1028,1030,1031,1034],{},"Skills take this further. A skill is a folder: a short ",[878,1018,1019],{},"SKILL.md"," that says what it is for, next to a ",[878,1022,1023],{},"references\u002F"," directory it links into. Claude loads only the one-line description at startup, the ",[878,1026,1019],{}," body when the skill triggers, and a reference file only when it needs that detail. This site's writing-articles skill works exactly that way, a lean ",[878,1029,1019],{}," beside ",[878,1032,1033],{},"references\u002Ffrontmatter.md"," and friends. It is progressive disclosure all the way down, the best way to give Claude deep knowledge without it camping in context all session.",[886,1036,1038],{"id":1037},"subagents-keep-the-main-context-clean","Subagents keep the main context clean",[874,1040,1041],{},"Some work is necessary but messy: grepping a big dependency, reading a wall of test output, researching an API across a dozen pages. You want the conclusion, not the firehose sitting in your main context for the rest of the session.",[874,1043,1044],{},"That is what subagents are for. A subagent runs in its own context window, does the noisy work, and returns only a summary; the thousand lines of log never touch your window, the three-sentence finding does.",[874,1046,1047],{},"Be clear-eyed, though: a subagent is not free. Each one boots with its own instructions and re-reads files to orient. For genuinely verbose, separable work that overhead pays off and can even lower total usage, since the firehose lives and dies in the subagent instead of re-inflating your context every turn. For a trivial task it is pure waste. Delegate when the work is big and noisy, not reflexively, and run a lighter model like Sonnet or Haiku for the grunt work.",[886,1049,1051],{"id":1050},"models-and-effort-the-max-effort-question","Models and effort: the max-effort question",[874,1053,1054],{},"Here is the part I got wrong for months: Claude Code gives you two independent dials, and I treated one as fixed.",[874,1056,1057,1058,1061],{},"The first is the ",[906,1059,1060],{},"model",". Mid-2026 the lineup is Fable 5 for long autonomous sessions, Opus 4.8 for complex reasoning and architecture, Sonnet 4.6 as the everyday workhorse, and Haiku 4.5 for fast, simple tasks. Opus draws down your usage faster than Sonnet per token and earns it on hard problems; on a one-line change it does not.",[874,1063,1064,1065,1068,1069,1072],{},"The second is ",[906,1066,1067],{},"effort",", which on Opus 4.8 runs low, medium, high, xhigh, and max. Effort sets how much the model thinks before answering, and thinking tokens count as output, the heaviest kind. The detail worth tattooing somewhere: the default on Opus 4.8 is ",[906,1070,1071],{},"high",", not max. Max removes the thinking cap and applies to the current session only, and the docs are blunt, it \"can show diminishing returns and is prone to overthinking. Test before adopting broadly.\"",[874,1074,1075],{},"So my max-effort-on-everything habit spent deep deliberation on tasks that needed none, sometimes reasoning worse by talking itself in circles. The fix is not a clever prompt, it is the dial:",[979,1077,1078,1084,1090,1096],{},[982,1079,1080,1083],{},[906,1081,1082],{},"High by default."," It is the default for a reason, right for most real work.",[982,1085,1086,1089],{},[906,1087,1088],{},"Max for genuinely hard problems."," Gnarly architecture, a subtle bug, anything ambiguous enough to reward deliberation. Deliberately, not reflexively.",[982,1091,1092,1095],{},[906,1093,1094],{},"Medium or low for the routine."," Small refactors, mechanical edits, lookups. The thinking budget is wasted there.",[982,1097,1098,1101],{},[906,1099,1100],{},"Sonnet for most daily coding,"," Opus for decisions that turn on raw capability, Haiku or a subagent for grunt work.",[874,1103,1104,1105,1108],{},"A third, separate dial: ",[878,1106,1107],{},"\u002Ffast",". Fast mode is not a dumber model, it is the same Opus at lower latency, drawing down usage faster for the speed. It is independent of effort. Worth it for live debugging where you wait on each turn, wasteful on background work nobody is watching.",[886,1110,1112],{"id":1111},"spending-tokens-well","Spending tokens well",[874,1114,1115],{},"With the dials set sensibly, the rest is hygiene.",[874,1117,1118,1121,1122,1125,1126,1128],{},[906,1119,1120],{},"Watch the window."," ",[878,1123,1124],{},"\u002Fcontext"," shows what is eating your space; ",[878,1127,880],{}," shows what the session used and where. The numbers surprise you the first time.",[874,1130,1131,1121,1134,1137,1138,1140],{},[906,1132,1133],{},"Compact and clear on purpose.",[878,1135,1136],{},"\u002Fcompact"," summarizes a long but still-relevant session, and you can focus it, for example to keep the API changes you are working on. ",[878,1139,969],{}," wipes the slate for unrelated work. Clearing is not losing progress; stale context taxes every later message.",[874,1142,1143,1146],{},[906,1144,1145],{},"Let caching work."," Claude Code auto-caches the stable parts of your context, the system prompt, tools, CLAUDE.md, the early turns, so they are not reprocessed each request; a cached read costs about a tenth of a fresh one. Editing earlier content invalidates everything after it, one more reason to keep CLAUDE.md stable and append rather than rewrite.",[874,1148,1149,1152],{},[906,1150,1151],{},"Do not dump the haystack to find the needle."," Reading a 50,000-line log to find three errors is the classic budget-killer. Grep first, then let Claude read the matches.",[874,1154,1155,1158],{},[906,1156,1157],{},"Prefer surgical edits and lean output."," Claude already edits with targeted diffs, which is good for tokens. Asking for less explanation helps on the output side, though it is a smaller lever than the internet thinks.",[886,1160,1162],{"id":1161},"myths-vs-facts","Myths vs. facts",[874,1164,1165],{},"Plenty of token-saving advice circulates. Sorted:",[874,1167,1168,1121,1171,1175],{},[906,1169,1170],{},"\"Run Opus at max effort on everything.\"",[1172,1173,1174],"em",{},"Mostly false."," High is the default for a reason; max is a precision tool that shows diminishing returns elsewhere. Always-max burns more and sometimes reasons worse.",[874,1177,1178,1121,1181,1184],{},[906,1179,1180],{},"\"A million-token context window means you can stop worrying about context.\"",[1172,1182,1183],{},"False."," More runway, not a license to ignore it. Quality degrades from compaction well before any hard ceiling.",[874,1186,1187,1121,1190,1193],{},[906,1188,1189],{},"\"This third-party tool cuts your tokens 80 to 90 percent.\"",[1172,1191,1192],{},"Marketing, mostly."," Unverified numbers. The real built-in levers are prompt caching and subagents, reach for those before someone's miracle wrapper.",[874,1195,1196,1121,1202,1204],{},[906,1197,1198,1199,1201],{},"\"Running ",[878,1200,969],{}," throws away your work.\"",[1172,1203,1183],{}," It resets the conversation context only; your files and git history are untouched.",[874,1206,1207,1121,1210,1213],{},[906,1208,1209],{},"\"Fast mode is just a faster version of the model.\"",[1172,1211,1212],{},"Misleading."," Same model, faster, drawing down usage quicker, and a separate dial from effort. Use it when latency matters, not to stretch your limits.",[874,1215,1216,1121,1219,1222,1223,1226,1227,1229,1230,1233],{},[906,1217,1218],{},"\"Magic words like 'think harder' make it reason more.\"",[1172,1220,1221],{},"Almost entirely false."," Claude Code recognizes one keyword, ",[878,1224,1225],{},"ultrathink",", for a deeper-reasoning turn; \"think hard\" and the rest are ordinary text. And ",[878,1228,1225],{}," spends ",[1172,1231,1232],{},"more"," tokens, not fewer.",[1235,1236,1238],"h3",{"id":1237},"do-token-saving-mega-prompts-work","Do token-saving mega-prompts work?",[874,1240,1241],{},"A tempting idea: paste one fixed block into your custom instructions and permanently cut your spend. A representative version:",[911,1243,1246],{"className":1244,"code":1245,"language":916,"meta":917},[914],"Launch subagents. Output only the modified or requested code block. Do not\nprovide line-by-line explanations, setup guides, introductory or concluding\nremarks, or markdown commentary unless explicitly asked. Adopt an ultra-concise,\nhigh-density communication style.\n",[878,1247,1245],{"__ignoreMap":917},[874,1249,1250],{},"Half useful, half misunderstanding.",[874,1252,1253,1256,1257,1260,1261,1264],{},[906,1254,1255],{},"\"Launch subagents.\""," Cargo cult. There is a real feature nearby, Claude Code can orchestrate dynamic workflows, but you enable that with the ",[878,1258,1259],{},"ultracode"," setting from ",[878,1262,1263],{},"\u002Feffort",", not by typing the words. As a blanket habit subagents cost tokens rather than save them: each boots with its own instructions and re-reads files, so firing one off for a two-line change is pure overhead. Delegate for genuinely noisy work, not as an incantation.",[874,1266,1267,1270],{},[906,1268,1269],{},"\"Output only the modified code block.\""," The legitimate half. Output tokens count several times heavier than input on Opus, so trimming explanation you did not need is a real saving. Just know it is a trim, not the near-zero these prompts promise, and a permanent \"only ever output code, never explain\" rule hurts the moment you want Claude to plan or teach.",[874,1272,1273,1276],{},[906,1274,1275],{},"\"Ultra-concise style forces the thinking to compress.\""," Here the reasoning breaks. The complaint is about thinking tokens, but a style instruction controls the output, not the thinking; they are different pools on different dials. The real fix for thinking spend is the effort dial, drop to high or medium, or move routine work to Sonnet. You can even tell Claude to think less directly. A communication-style instruction only trims the reply you read.",[874,1278,1279],{},"So the honest version is small: ask for concise output when you do not need the explanation. The rest is a no-op or the wrong tool. What actually stops Opus Max from eating your limits is not a prompt, it is turning effort down and picking the right model.",[1281,1282,1284],"note",{"label":1283},"The short version",[874,1285,1286,1287,1289,1290,1297],{},"Two dials, used on purpose, will do more than any copy-paste prompt: pick the model for the task, and treat max effort as a tool for hard problems rather than a default. Keep the context window clean, let caching work, and check your own ",[878,1288,880],{}," numbers. The current details live in the official docs at ",[1291,1292,1296],"a",{"href":1293,"rel":1294},"https:\u002F\u002Fcode.claude.com\u002Fdocs",[1295],"nofollow","code.claude.com\u002Fdocs",".",{"title":917,"searchDepth":277,"depth":277,"links":1299},[1300,1301,1302,1303,1304,1305,1306,1307],{"id":888,"depth":277,"text":889},{"id":898,"depth":277,"text":899},{"id":959,"depth":277,"text":960},{"id":973,"depth":277,"text":974},{"id":1037,"depth":277,"text":1038},{"id":1050,"depth":277,"text":1051},{"id":1111,"depth":277,"text":1112},{"id":1161,"depth":277,"text":1162,"children":1308},[1309],{"id":1237,"depth":389,"text":1238},{"id":13,"name":14,"slug":15,"hue":16},"For months my Claude Code setup was one reflex: whatever the newest Opus is, pinned to max effort, on everything. Renaming a variable? Max effort. Reading a config file? Max effort. It felt responsible. Then I read the docs and watched my own \u002Fusage numbers, and changed my mind. Max effort is a great tool and a terrible default.","md",{},{"title":53,"description":1311},"posts\u002Fgetting-more-out-of-claude-code",[20,63,66,29,32],[1318,1319,1320,1321,1322],{"name":19,"slug":20},{"name":62,"slug":63},{"name":65,"slug":66},{"name":28,"slug":29},{"name":31,"slug":32},"NgDkkGHoap8t9PaMiACFNUNczUvud2soHCCogvZbWYY",1781699138899]