RSSAmplifier

Blog

eshlox

Personal blog by eshlox. Writing about software development, privacy, tools, and tech.

eshlox.netRSS feed ↗307 posts

Latest posts

AI multiplies bad engineering too

When AI-generated code breaks something, the real problem is often how we reviewed, understood, and trusted it.

AI gave my blog six redesigns in one evening

AI turned changing my blog layout from a yearly event into six redesigns in one evening.

How I keep full control of AI-written code

AI agents do almost all the work, while I control permissions, review every change, and decide what gets merged.

AI apologies should come with token refunds

Every AI apology should refund the tokens it just used.

AI wrote 100k lines in six hours and now I have to read them

I let AI build a full side project in one run. It ran, but every screen had bugs and I do not know the code. Now I think small tasks, real reviews, and my own merge decision are still the way to work.

Remote Flutter development with Mutagen

I write a Flutter app in a container on a Hetzner box and build it on my Mac. Mutagen copies each change to the Mac over SSH, not Docker.

I moved my whole dev stack to a Hetzner server

I moved all my development off my MacBook and onto an always-on Hetzner VPS, reached over Tailscale. The laptop is now a thin client running only Ghostty, Tailscale, Secretive, and a few small tools. Everything else runs in the cloud, one container per project.

AI turns every side project into Enterprise Edition

Ask AI to expand a tiny side project and it may build an entire enterprise platform.

Vendor lock-in is not only technical

The Anthropic case reminded me that vendor lock-in is not just a technical problem. A service can also be affected by the government and laws of the country where the company operates. For critical projects, you need an exit plan.

I like AI. I don't assume it's safe

I use AI every day, but I am not convinced that giving it access to every part of our lives is safe.

DVM: small per-project VMs on macOS

Why I wrote a small Bash wrapper around Lima to give each project its own Fedora VM, with VM-local SSH keys, an AI agent sandbox, and no host mounts by default.

A just wrapper for tmux and global recipes

A small zsh function on top of just that renames tmux windows, falls back to a global justfile, and shows project + global recipes in one fuzzy picker.

Google Calendar in any calendar app without adding the Google account

Subscribe to Google Calendar's secret iCal feed from any calendar app. Keep your Google account out of macOS and iOS. Worked example for Apple Calendar on Mac, iPhone, and iPad.

Developers trusted AI more than anyone

Developers went from distrusting everyone to handing AI agents access to everything.

Remap Caps Lock on macOS without any app

A small LaunchAgent that runs hidutil at boot. Native Caps Lock remap on macOS, no app needed.

Most apps could be PWAs

Mobile and desktop stores should support PWAs as first-class applications.

The two types of developers who sandbox

There are developers who sandbox everything and developers who will after their first incident.

The social media split

Posting on multiple social networks is tiring. Here's what I use, what I like about each, and why I haven't found a good answer.

Your cloud provider's attack surface is also yours

When you host on a big cloud, you inherit every employee, every OAuth connector, and every co-tenant as part of your attack surface. The Vercel breach is a good example of why.

Am I doing developer tooling backwards?

While developer tools move from terminals to GUIs and give AI access to everything, I am moving in the opposite direction.

Think twice before you install

The more software I install, the bigger the chance that I run something unsafe. One mistake, and everything the app can access is at risk.

AI-generated music

I discovered Polish folk music on YouTube that I genuinely enjoyed. Then I found out it was AI-generated, and I stopped listening. I'm still not sure why.

Automatic tmux window names with just

Using just recipes to rename tmux windows based on the running task, then restore the name when the command exits.

Paste clipboard images as files with Hammerspoon

A Hammerspoon hotkey that saves clipboard images to the current tmux pane directory. Workaround for AI sandboxes that do not support image pasting.

Why I moved from Claude Desktop to the web version

Claude Desktop adds MCP servers, Cowork, Computer Use, and Desktop Extensions. Every one of them is an extra attack surface I don't need.

Secure development checklist and decision framework

A hardening checklist and decision matrix for secure local development with Infisical, Docker, and AI sandboxes. Quick reference for what goes where.

Scaling secure development to a team

Onboarding, offboarding, RBAC, CI/CD machine identities. What changes when the solo workflow becomes a team workflow.

Secure development daily workflows

Practical day-to-day workflows for developing with Infisical, Docker, and AI sandboxes. Morning startup, coding with AI, adding and rotating secrets, multi-project setup.

Why Infisical over Vault, Doppler, and SOPS

Comparing secrets managers for local development: HashiCorp Vault, OpenBao, Doppler, SOPS + age, and Infisical. Plus why no secrets manager can save a compromised machine.

The dual-machine setup: Apple + Linux

Keep Apple for personal, Linux for development. Physical separation solves what software isolation cannot.

Securing host tools with nono

Helix, lazygit, and other CLI tools can be sandboxed with nono or zerobox. GUI apps like Docker Desktop cannot. Here is what you can do.

When a secret leaks: incident response

Rotate first, investigate second. Every minute the old secret is valid is a minute an attacker can use it.

Git pre-commit secret scanning

Set up infisical scan as a pre-commit hook. AI-generated code with hardcoded credentials is especially risky.

Connecting AI sandboxes to dev containers

Three ways to let Claude test endpoints without seeing secrets: exposed ports, shared Docker network, or an MCP proxy.

Protecting against compromised packages

In the AI sandbox, compromised packages only see source code. In the dev stack, use multi-stage Docker builds to keep secrets away from install scripts.

Choosing an AI sandbox: nono vs zerobox vs Docker vs others

Every AI agent isolation option compared. sbx for maximum security, zerobox for ease of use, nono for irrevocable kernel restrictions.

Why AI agent permissions don't work

Claude's trust levels, allowed actions, and permission popups are self-enforced and bypassable. Use infrastructure isolation instead.

Expo and React Native: the Docker exception

Expo cannot run in Docker because iOS Simulator needs direct Metro access. This is fine because Expo only uses public variables.

Docker-first development architecture

Run your API and database in Docker Compose, inject secrets with Infisical, run AI agents in a separate sandbox with only source code.

AI coding agents are reading your secrets

Claude Code auto-loads .env files. Cursor bypasses .cursorignore. There are real CVEs. The only fix is separate execution contexts.

Setting up Infisical for local development

Install Infisical CLI, organize secrets by project and environment, inject them into processes without writing to disk.

Why 1Password CLI fails for developers

1Password is great for personal passwords but bad for dev secrets. No project structure, biometric fatigue, opaque popups, all-or-nothing access.

How I stopped leaking secrets to AI coding agents

AI coding agents read your .env files and send secrets to remote servers. Here is how I rebuilt my local dev workflow to fix this.

Running Claude Code in Docker sandbox (sbx)

A quick guide to running Claude Code in a Docker sandbox using sbx. No permission prompts, isolated environment.

My Ghostty config on macOS

A minimal Ghostty terminal config for macOS. No titlebar, auto tmux, Catppuccin theme, and a few quality of life tweaks.

Global justfile: run recipes from anywhere

A single justfile for commands you need everywhere, not just in a project.

AI and my blog posts

I use AI to help me write some of the blog posts. Here is why and how.

How to protect your project from npm supply chain attacks

A practical guide to protecting your JavaScript project from npm supply chain attacks using pnpm, Socket Firewall, and frozen lockfiles.

term.css: a classless CSS framework with terminal aesthetics

A minimal CSS framework that styles semantic HTML out of the box. No classes required. Terminal-inspired, themeable, accessible.

vibeship: this package replaces 90% of your code with a single decorator

vibeship lets you describe what your code should do in plain English. It handles the rest at runtime. React, Expo, Fastify, AdonisJS, Django, Actix Web.