RSSAmplifier

Blog

Scott Spence's Blog

My own little space on the internet, where I write about what I've learned as a web developer mainly Svelte and SvelteKit.

scottspence.comRSS feed ↗243 posts

Latest posts

Coding agent harnesses with my-pi

I have a habit of turning repeated arguments with coding agents into software. If I tell an agent to stay inside five files often enough, eventually I stop asking nicely and build something that blocks the sixth. If I keep asking for validation...

How I work with LLMs

In November 2025 I wrote the honest version of working with Claude Code. At the time, most of my process involved spotting when Claude was drifting, calling out the bullshit, checking that it understood the task, and restarting the session when the...

How I Stop LLMs Drifting In Production Codebases

The problem I care about with LLM coding is drift: one plausible shortcut gets copied, then future sessions start treating it as how the app works. I’ve used AI coding tools every day as a team lead on large private client codebases, across...

Building a SQLite context sidecar for my-pi

Right, so, this started with me looking at , seeing a 98% context reduction claim, and immediately thinking: bull shite. Not because the idea is bad. The idea is good. The bit that made me twitch was the shape of the claim. If you compare a huge...

Building my-pi: my own Claude Code alternative with Pi

I have written a few posts now about bits of : adding LSP, adding telemetry, and hardening redaction with evals. What I have not actually done is the obvious one: explain what is, why I made it, and why I have suddenly spent a slightly...

Add telemetry to my-pi

keeps growing in the direction of whatever annoyed me most that week. It is the coding agent harness I’ve been building on top of the excellent pi-coding-agent from badlogic, and I keep bolting things onto it as I need them for real work. Last time...

Hardening redaction in my-pi with evals and telemetry

Third post in a little run about , my coding agent harness built on top of pi-coding-agent. There’s a pile of stuff in I have not written about, but these three felt worth the time: adding LSP, wiring in local SQLite telemetry, and this one, which...

Add LSP to my-pi

This whole thing started with a chat with Kev, (Svelte Society co-founder), after a few beers at the CityJS after-party. I mentioned my-pi to him and his first question to me was “oh! does it have LSP built in?” I was...

nopeek - Keep Your Secrets Out of Claude Code

So, here’s the situation. I use Claude Code with cloud CLIs daily, AWS, Hetzner, that sort of thing. Claude Code is genuinely the ultimate cheat code for bash though! Need to query an API, parse some JSON, chain a few commands together? Claude does...

McPick - Manage MCP Servers and Plugins in Claude Code

I saw a Reddit post the other day that called setting up MCP servers in Claude Code “a tech ritual for the quietly desperate.” 😅 That tracks! The comments were full of people saying things like “took me 30 minutes to figure out where the config...

How to Make Claude Code Follow Hook Instructions

I’ve been using the forced-eval hook for months now. It’s part of my claude-code-toolkit plugin and it’s been working brilliantly. Until about a week and a half ago, when Claude just started skipping it.

Enable LSP in Claude Code

Right, so, I stumbled across this post by Karan Bansal about enabling LSP in Claude Code and thought “no way this actually works.” Turns out it does. Here’s the thing - every time you ask Claude Code “where is this function defined?”, it does what...

Building and Testing MCP Tools Locally

Ok, so, I’ve built over 20 MCP servers at this point. Search tools, memory systems, doc scrapers, workflow builders. I’ve written about configuring MCP tools in Claude Code before, but one thing I’ve never actually covered is the bit that tripped me...

Measuring Claude Code Skill Activation With Sandboxed Evals

Remember that post where I tested skill activation with the Claude API and got the forced-eval hook to 84%? That was running against Haiku 4.5 with synthetic API calls. Good for iteration speed, but it wasn’t testing the actual thing. It was testing...

Enable Team Mode in Claude Code

Right, so, remember when I wrote about unlocking swarm mode with claude-sneakpeek? And then using Daytona sandboxes with it? Well, I said at the end of that first post that this would be short lived and I’d be switching once Anthropic shipped it...

Claude Code Swarm With Daytona Sandboxes

Ok, so, I’ve been using the Claude Code swarm feature now for several days and I’m super impressed! Like, three days in and I already can’t see myself not using it in my daily workflow! Is it a token gobbling nightmare? Yes, does it get the work...

Unlock Swarm Mode in Claude Code with claude-sneakpeek

So, I watched a video about Kimi K2.5 from Sam Witteveen that detailed a load of cool looking features but what caught my eye was the swarm mode feature, this is where it will spin up to (apparently) 100 sub-agents to work on tasks in parallel.

Organising Claude Code Skills Into Plugin Marketplaces

Aight, so, continuing with the Claude Code ‘bits’ and my toolchain I’m putting together for working with Claude Code. Claude Code is very much integrated into my workflow with skills for this and that! Thing is the skills were dotted around in...

GitHub CLI Installation Guide for WSL (Ubuntu)

Real quick on this one! I need to document it though as this has been a persistent pain for me for a while! Getting the GitHub CLI to work in Windows Subsystem for Linux (WSL). Well, turns out it’s still an issue! But with some searching and...

Migrating Off Of Fathom Analytics

This is the follow-up to Local Analytics with SQLite and SvelteKit. That post covered the infrastructure - batched writes, heartbeat-based live visitors, the production meltdown and rebuild. This one’s about actually removing the Fathom API...

Local Analytics with SQLite and SvelteKit

I’ve been using Fathom Analytics for years and it’s great, but I wanted something more integrated. Something that could power live visitor counts and popular posts without external API calls. This is what I learned building self-hosted analytics...

Switching to EndeavourOS from Omarchy

I spent some time over the last few days evaluating some Linux distros, two to be precise. Omarchy and EndeavourOS, Omarchy stayed on my hard drive for all of about 16 hours as I just couldn’t get my head around the tiling manager! I tried! I really...

How to Make Claude Code Skills Activate Reliably

So, remember that blog post I wrote about Claude Code skills being a coin flip? Where the “simple hook” approach gave me a whopping 50% success rate and I basically said “just invoke skills manually”? Yeah, well, I wasn’t happy with that. Coin...

Claude Code Skills Don't Auto-Activate (a workaround)

So I got Claude Skills to register with Claude Code (sorted the YAML formatting issue), and the skills are now showing up when I ask Claude to list them. Job done, right? Nah! Turns out getting skills to actually activate reliably when you need them...

Working with Claude Code! The Honest Version

So, I’m a team lead working on a large monorepo for a private client. I’ve been on this project for two years, and I’ve worked with AI coding assistants since day one - through every iteration, model update, and paradigm shift over that time. When...

Claude Code Skills Not Recognised? Here's the Fix!

Not having Claude Code skills showing up? Yeah, I hit this too… When Claude Skills were announced I jumped straight on that! Dug into it and built out several skills, for this site and other projects. I even built out my own CLI tool (Claude Code...

SQLite Corruption with fs.copyFile() in WAL Mode

I was looking up something on my site for reference (as I usually do when trying to recall a detail) when I noticed the popular posts in the footer weren’t displaying. That’s odd. I’d been working with the database locally recently, so my immediate...

Optimising MCP Server Context Usage in Claude Code

So there I was, starting a Claude Code session, and I noticed something disturbing and completely of my own making: my MCP tools were consuming 66,000+ tokens of context before I even started a conversation. That’s a massive chunk of Claude’s...

Hunting Down 1.3 Billion Row Database Reads

I spent some time this weekend rolling the auth credentials for this site (again) after Claude Code doxed my variables! Anyways, whilst I was doing this I noticed my Turso dashboard had 1.3 BILLION row reads. My database was getting absolutely...

Shared Tailwind CSS Themes in Svelte Monorepos

I’m currently in the process of migrating a large SvelteKit monorepo from Svelte 4 to Svelte 5 with my team. The UI package is still on Svelte 4 and it’s causing a lot of headaches with svelte-check in CI and the and event delegation (UI package...

The AI Coding Tools I Actually Use (And the Ones I Don't)

Cool! So, coding tools! We all use them right? I’ve been through a few of them! As a team lead working on a large SvelteKit monorepo, I’m constantly evaluating tools that could help the team move faster and write better code. Here’s my honest take...

From JSDOM to Real Browsers: Testing Svelte with Vitest Browser Mode

In this post I’m going to go through converting the SvelteKit minimal template from using and over to using , and . Why? Well, it’s as close to testing components and pages as you can get, rather than relying on the simulated it’s...

Svelte Summit 2025

Ok, off of the back of an absolutely banger of a post from Ilja, I’m now compelled to write about my own experience at Svelte Summit. I initially drafted this post on the 13th, it’s now the 25th (this post has been sat in my drafts all this time!)...

Migrating from @testing-library/svelte to vitest-browser-svelte

I first heard about at Svelte Summit from a talk by Dominik G, one of the core maintainers of SvelteKit and Vite. He demonstrated how this new approach lets you test Svelte components in actual browsers instead of mocked environments like . The...

Passing data between SvelteKit server and page files

I poisoned the well! 😱 I was reviewing code the other day and saw a pattern that I posted ago! This was a quick “this is how I fixed this issue” kind of post. Thing is, it’s been slurped up by LLM scrapers and is being presented as gospel...

MCP Tools Usage Guide

So, since the Model Context Protocol (MCP) was announced at the end of November 2024 I immediately saw the potential that this could offer me. Me being a person that likes to gather information to add to an LLMs context before doing anything. When...

Configuring MCP Tools in Claude Code - The Better Way

Aight! So, I’ve been using Claude Code for a bit now, and one thing that’s been bugging me is the way you’re supposed to configure MCP tools. If you follow the official approach, you’re stepping through a CLI wizard that forces you to enter...

Windsurf Setup for WSL

I used Windsurf for the whole day yesterday, I’m impressed! I’ve been using Cursor as part of my development workflow full time since September last year. There’s many a post on here from me on integrating other tools into my workflow for using “AI”...

Theme Switching in SvelteKit Updated for daisyUI v5 and Tailwind v4

Aight! Let’s go over the migration from Tailwind v3 to v4 and daisyUI v3 to v5 in a SvelteKit project, I’ll not go into a massive preamble here on the improvements that Tailwind v4 brings, essentially , it good, it faster, it simpler, with modern...

My Updated ZSH Config 2025

So, this is my updated Zsh config! To be honest there’s little that’s changed over the years since I originally posted about this a good three years ago now in My Zsh Config. But! The changes are substantial enough for me to justify a new post.

Setting Up Codename Goose in WSL

Ok, so, I’ve heard about this CLI tool that allows you to use your preferred LLM provider, Goose, from Block (Square, payment thingy) which I think is officially called codename goose, but we all know everyone is going to refer to it as Goose.

Speeding Up My ZSH Shell ⚡

Super quick one I want to document here! I got myself on a side quest, again! No biggie, my ZSH shell was taking ages to load. When I say ages, more like 5+ seconds every time I opened a new terminal, that sort of thing can add up. This is just...

Git SSH and Commit Signing Setup in WSL Ubuntu

Aight! It happened again! Mysteriously git just straight up stopped working for pulling/pushing on one of my WSL Ubuntu instances! I’ve just gone through setting up a fresh WSL Ubuntu 24.04 install and wanted to detail the process of getting Git...

Migrating from @testing-library/svelte to vitest-browser-svelte

I first heard about at Svelte Summit from a talk by Dominik G, one of the core maintainers of SvelteKit and Vite. He demonstrated how this new approach lets you test Svelte components in actual browsers instead of mocked environments like . The...

Using MCP Tools with Claude and Cline

Aight! I’ve been playing around with using and creating my own Model Context Protocol (MCP) tools lately. I also talked myself into giving a talk at the next Svelte London event to share what I’ve learned. It’s a bit of a stretch talking about AI...

Getting MCP Server Working with Claude Desktop in WSL

In this post, I’ll go through the process of getting a Model Context Protocol (MCP) tool up and running with the Claude desktop app using Node in Windows Subsystem for Linux (WSL). Using WSL allows me to manage my Node versions on WSL...

How to Fix Hetzner ARM64 VPS Package Updates on Ubuntu 24.04

Real quick one from me on updating a Hetzner VPS with something like . I noticed some weird behaviour today when I wanted to install on my Hetzner box. I was greeted with the following message:

Take Back the Web! A Practical Guide to Digital Independence

Ok, I don’t usually do a post like this, this site is usually around how to work with a technology or to get something done with it. This time around it’s more of a starter pack on where to start if you want to take back some control over your...

Scrollbar Styling with Tailwind and daisyUI

Remember when I wrote about changing scrollbar colour with Tailwind CSS? Good times! 😅 Well, that post was ago and stuff don’t stay the same for long in modern web dev. The sitch: I noticed my scrollbar styles were being applied when the mouse...

The new Svelte (sv) CLI, adding Tailwind is simple now

Aight! With Svelte Summit Fall 2024 done with we got a load of cool new announcements, Svelte 5 being the big one along with the new site and docs! Beautiful! One of the other big announcements was the new Svelte CLI which combines with the ...