How to Configure Claude Code Permissions for Less Friction

ℹ️ This is the first post in a series on configuring Claude Code. We’ll cover permissions, CLAUDE.md and rules, and building custom skills. The reason we start with permissions - and not CLAUDE.md as you often see - is that permissions (or lack of them) are where the most friction comes from. What are permissions? Claude Code is programmed to only perform very few tasks, without first asking for your permission. This means that you will quite often see it ask something like this: ...

March 31, 2026 · 5 min

Two C# Unit Test Tips: NullLogger and FakeTimeProvider

Logging Unless you are actually testing your logging (which I mostly wouldn’t recommend), you don’t need to mock your own loggers. Microsoft has you covered with the NullLogger Class. It is exactly what it sounds like: A mocked logger that can be injected where an ILogger is required, which doesn’t log anything. Here is how to use it: // Class which requires a logger class LicensePlateDetector(ILogger logger) { // (...) } // Instantiating the class in the unit test LicensePlateDetector detector = new(NullLogger.Instance); // Or if you need ILogger<T> LicensePlateDetector detector = new(NullLogger<LicensePlateDetector>.Instance); I have seen suggestions to default to NullLogger in production code using the ?? operator. I would not recommend this, as you risk silent failures if you forget to inject the actual logger. ...

March 8, 2026 · 3 min

Why AI Should Not Replace Human Writing

This is a guest post by Claude Code, an AI assistant by Anthropic. In a somewhat meta exploration, Claude reflects on the appropriate role of AI in writing—and where human thought should remain irreplaceable. There’s a crucial distinction we need to make when we talk about AI and writing: the difference between using AI to translate your thoughts and using AI to replace your thinking. Code: A Case for Translation When it comes to code, AI makes sense as a productivity tool. Writing code is often about taking a clear mental model and translating it into executable syntax. If I know I need a function that sorts a list by timestamp and filters out entries older than 30 days, I’m not asking AI to think for me—I’m asking it to handle the boilerplate. The thought is mine; the AI just makes the translation faster. ...

January 30, 2026 · 3 min · Claude Code (Guest Writer)

Automating Blog Reviews With Claude Skills

Anthropic recently released Claude Skills. This post will show you how to create and implement a concrete skill for Claude Code (rather than the website). As an example I will use a skill which I created, to help review this particular blog post (and all future blog posts). Creating a new skill The simplest skill you can create is a single markdown file, placed inside the folder .claude/skills/{your-skill-name}/skill.md. A skill can also contain helpful assets, like small scripts it can use. ...

October 18, 2025 · 3 min

Background Processing With Channels

I recently came across a scenario, where I had to process a lot of incoming data in real time, where missing a single entry is not an option. At the same time I wanted to disconnect the class which was fetching data (the collector) from the class which were processing the data (the processor). The result was a combination of Channels and the BackgroundService. Before we look at the code, you will need the Microsoft.Extensions.Hosting Nuget package. You can install it with: ...

April 15, 2025 · 3 min

Five things you may need to do with Git

Git is incredibly powerful, but many developers stick to the same basic commands without exploring its full potential. In this post, I’ll walk you through some simple yet powerful Git commands that you might not be using—but should. These are not advanced or obscure features, just practical enhancements to common tasks that can make your workflow smoother and more efficient. 1. Log commits in a readable manner git log --oneline The key here is --oneline. By default, git log prints at least five lines per commit, like this: ...

February 18, 2025 · 2 min

Switching to Hugo

I have decided to build my blog with Hugo, instead of Wordpress, which I am currently using. There are several reasons for this, but mainly: I get more control over the site. It can be hosted with Github pages. It allows for much simpler (and smaller) sites. This means that until I get busk.blog changed, my blog will be available at https://builditbusk.github.io/blog. What is Hugo? Hugo is a static site generator. A Static Site Generator (SSG) is a tool which creates HTML, JavaScript and CSS from source files (in Hugo written in Markdown). It also allows themes, which makes it easy to create a decent looking site, even if you - like me - has no talent for UI design. ...

February 14, 2025 · 2 min