Why the hell does git status take so long?

The awakening of slowness You’ve been working on your data science project for a while. You’ve got twenty notebooks, a few images, and the typical folder structure that seemed like a good idea three months ago. You run git status to see what you’ve changed and… you wait. And wait. And while you wait, you have time to wonder if the computer froze or is just meditating. Spoiler: it’s not meditating. It’s suffering. ...

January 19, 2026 · Fernando

ChromaDB: How to use a vector database to avoid screwing up while teaching

The problem: teaching what you haven’t taught yet I have a programming course with 47 classes. Each class has notes (where I explain stuff) and labs (where students practice). And I have a problem: sometimes I use concepts in labs that I haven’t explained in the notes yet. “Alright, in this exercise use map to transform the list.” The problem? I don’t explain what the hell map is until three classes later. ...

January 18, 2026 · Fernando

Bun: The Runtime That Wants to Retire Node (and Now Has the Cash to Do It)

The news nobody saw coming Last week, while you and I were peacefully wrestling with node_modules, Anthropic dropped a bomb: they’ve bought Bun. Yes, the company behind Claude has decided that their future depends on a JavaScript runtime written in Zig by a guy who thought “what if Node, but fast?”. Claude Code just hit one billion dollars in revenue, and apparently the first thing you do when you have money to burn is buy development tools. ...

January 18, 2026 · Fernando

Skills in Claude Code: Teaching Old Dogs New Tricks

The Problem of Repeating Everything Have you ever had to explain the same thing to someone twenty times? Now imagine that, but with a robot that also loses its memory every few hours. “No, Claude, the commit has to pass tests first.” “Claude, I already told you to use the type: description format.” “Don’t add emojis, damn it!” This was my daily routine until I discovered Skills. In plain English: they’re instructions you write once and Claude follows forever. Like training a dog, but without the treats. ...

January 12, 2026 · Fernando

Linear and Beads: How to prevent your AI from getting Alzheimer's

The robot’s amnesia Imagine you hire a brilliant programmer. They solve complex problems, write clean code, understand your architecture. But they have one small flaw: every few hours their memory gets wiped. They start from scratch. They don’t remember what they were doing, what you decided together, or why the code is the way it is. Well, that’s exactly what happens with Claude Code and other AI agents. When the context fills up (and it fills up fast if you’re working on a real project), the system does a “compaction.” In plain English: it summarizes the conversation and throws everything else away. The problem is that summary loses nuances, decisions, and especially the state of ongoing tasks. ...

January 12, 2025 · Fernando

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 --- title: "My Setup: Claude Code + Ghostty + Worktrees on a Mac" date: 2026-03-11T23:55:00+01:00 draft: false slug: "claude-code-ghostty-worktrees-mac-setup" slug_en: "claude-code-ghostty-worktrees-mac-setup" description: "How I combine Ghostty, git worktrees, and Claude Code in my daily macOS development workflow. No flickers, massive scrollback, and true parallelism with worktrees." tags: ["claude-code", "ghostty", "git", "worktrees", "productivity", "mac", "workflow", "setup"] categories: ["tools"] translation: hash: "" last_translated: "" notes: | - "irse de cañas": "going out for beers". Spanish social ritual. Use local equivalent. - "dicho en cristiano": "in plain language". No religious connotation. - "de cojones": vulgar but affectionate intensifier meaning "really good / badass". Equivalent: "damn good" or "kickass". - "ñapa": "hack/bodge". Affectionate, not derogatory. - "currar": colloquial for "to work". Very common in Spain. - "mola": "it's cool / it's great". Casual. - "chapucilla": diminutive of "chapuza" (hack/kludge). Even more affectionate than "ñapa". - "Quick Terminal estilo Quake": reference to the dropdown console in Quake (1996 videogame). Widely known among devs. - "buffer del carajo": "huge-ass buffer". Vulgar but common intensifier. - "la guinda / el pastel": "the icing / the cake". Spanish version of "icing on the cake". social: publish: true scheduled_date: 2026-03-14 platforms: ["twitter", "linkedin"] excerpt: "Ghostty doesn’t flicker, has a massive scrollback buffer, and supports worktrees for running three Claude Code agents in parallel. My Mac development setup, step by step." wordpress: publish: true categories: [1] tags: ["claude-code", "ghostty", "git", "worktrees", "productivity", "mac"] video: generate: false style: "educational" --- I currently have three Claude Code sessions open. One is translating blog posts. Another is writing tests for a CLI. The third is helping me debug a data pipeline. Each one runs in its own *worktree*, each one in its own Ghostty *split*, while I jump between them using `Cmd+Alt+Arrow`. I haven’t opened iTerm2 in months. I haven’t touched tmux in weeks. Everything lives in a single Ghostty window. Is it the perfect setup? No. Is it the most productive setup I’ve ever had? Absolutely. ## Why Ghostty and not another terminal? I’ll be direct: Ghostty consumes battery like it’s mining Bitcoin. I already detailed this in [the post about GPU-powered terminals and battery drain](/posts/terminal-gpu-battery-macbook-ghostty-iterm2/). That hasn’t changed and it’s still its biggest downside. If I’m on battery, I close Ghostty and switch to Terminal.app without hesitation. But when I’m plugged in—about 80% of the time at my desk with the Studio Display—Ghostty wins for two reasons that have nothing to do with aesthetic nerdiness: **1. No flickering.** This sounds trivial until you spend eight hours a day staring at a terminal. iTerm2 has micro-flickers during fast *scrolling*, artifacts when resizing, and subtle *flickers* when switching tabs. Terminal.app is even worse. Ghostty, thanks to GPU rendering, offers a visual smoothness that doesn’t strain your eyes. When Claude Code spits out 200 lines of output and you *scroll* through it, the difference between a terminal that flickers and one that doesn’t is like the difference between reading a book in steady light versus someone flipping the light switch on and off. **2. You can give it a huge-ass scrollback buffer.** With `scrollback-limit = 50000`, I get 50,000 lines of history per panel. Claude Code is verbose: it generates code, explains it, runs it, displays the output, and sometimes rambles on for hundreds of lines. In iTerm2 or Terminal.app, the default *scrollback* isn’t enough, and you lose context. With Ghostty, I can *scroll* back to the start of a session from two hours ago and find exactly what I need. There are additional nice features too—native *splits* with `Cmd+D`, Quake-style *Quick Terminal* with `Ctrl+\``—but those are just the icing. The cake is no flicker and no lost scrollback history. ## The anatomy of my window When I’m in “parallel mode”—multiple independent tasks at once—my Ghostty window looks like this: ┌──────────────────────────────────┬──────────────────────────────────┐ │ │ │ │ Claude Code (worktree A) │ Claude Code (worktree B) │ │ feature/new-validation │ chore/translations │ │ │ │ │ │ │ ├──────────────────────────────────┴──────────────────────────────────┤ │ │ │ Main repo — tests, builds, git log │ │ │ └─────────────────────────────────────────────────────────────────────┘ ...

Fernando

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 title: "Anatomy of Claude Code's Remote Control: The Hidden API You Can't Use Yet" date: 2026-02-27T18:00:00+01:00 draft: false slug: "claude-code-remote-control-hidden-api" description: "Anthropic announced Remote Control for Claude Code. We investigated the bridge API, WebSockets, on-disk traces, and why it still doesn't work for all Max accounts in February 2026." tags: ["claude-code", "anthropic", "api", "websocket", "remote-control", "reverse-engineering"] categories: ["opinion"] translation: hash: "" last_translated: "" notes: | - "grifo": metaphor for access being granted/denied ("tap/faucet"). Don't translate as "griffin". - "culo al aire": means "caught with your pants down" / "exposed". Not vulgar in this context. - "dicho en cristiano": "in plain language". No religious connotation. - "chapuza": "hack/bodge/kludge". Not derogatory, means quick-and-dirty solution. - "barra del bar": "bar counter" — casual conversation metaphor, not literal. - "mola": Spanish slang for "it's cool/neat". Translate as "cool" or equivalent. - "pinta": means "looks like" / "seems" in this context, not "pint". --- On February 25, 2026, Anthropic announced *Remote Control* for Claude Code. The idea: fire up Claude Code on your terminal, sit back on your couch with your phone, and continue the session through claude.ai. No SSH. No *tmux*. No remote terminal windows. Cool. In theory. Because in practice, when I enabled it (`/rc` in the terminal), I got a URL, opened it on my phone, logged in... and claude.ai hit me with a "this feature is not active in your organization." February 2026, Max 5x account, paying religiously. And nothing. So I did what any reasonable person would do: I started tearing apart the API to understand what’s happening under the hood. ## What is Remote Control (the official version) In essence: it's a bridge between your local CLI and claude.ai’s website. The Claude Code CLI keeps running on your machine (with access to your code, terminal, and files), but you can monitor it, approve *tool calls*, and send messages from any browser. Anthropic introduced it as a "*research preview*" for Max accounts only. The promise is that you can start a long-running task (`/rc` + your prompt), close your laptop, hit the gym, and check on the progress from your phone. The reality, as we’ll see, is a bit more nuanced. ## What we found under the hood When you execute `/rc`, Claude Code does quite a bit of background work. And it leaves traces. Lots of traces. In JSONL files, debug logs, and in the API response itself. Let’s break it down. ### 1. The Bridge API The first thing the CLI does is register an "*environment*" with Anthropic's API: POST https://api.anthropic.com/v1/environments/bridge ...

Fernando

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 title: "Five Game-Changing Worktree Tricks in Claude Code to Transform Your Workflow" date: 2026-03-11T23:30:00+01:00 draft: false slug: "claude-code-worktrees-parallel-agents-tips" slug_en: "claude-code-worktrees-parallel-agents-tips" description: "Claude Code has native support for git worktrees: --worktree, isolated sub-agents, custom agents with isolation, --tmux for parallel sessions. Five tips from Boris Cherny." tags: ["claude-code", "git", "worktrees", "productivity", "workflow", "agents"] categories: ["tools"] translation: hash: "" last_translated: "" notes: | - "mola": colloquial for "it's cool" / "it's great". Very common in Spain. - "irse de cañas": "going out for beers". Spanish social ritual, casual. - "ñapa": "quick hack/bodge". Not derogatory, somewhat affectionate. - "dicho en cristiano": "in plain language". No religious connotation. - "barra del bar": "bar counter" — casual conversation metaphor. - "te comes un conflicto": "you'll get a conflict" — eating metaphor, common in Spain. - "currar": colloquial for "to work". Very common in Spain. social: publish: true scheduled_date: 2026-03-14 platforms: ["twitter", "linkedin"] excerpt: "Claude Code has native support for git worktrees. It's not just 'git worktree add.' It's --worktree, isolated sub-agents, custom agents with isolation: worktree, and --tmux for parallel sessions. Five tricks to transform your workflow." wordpress: publish: true categories: [1] tags: ["claude-code", "git", "worktrees", "productivity", "workflow"] video: generate: false style: "educational" --- A few weeks ago, I wrote about [git worktrees](/posts/git-worktrees-coding-agents-parallel/) — what they are, how to create them, and why they’re better than cloning a repo three times. The basics. But the basics are only half the story. Because Claude Code doesn’t just work *with* worktrees — it has native support for them. Dedicated flags, automatic isolation, integration with tmux. And the difference between knowing worktrees exist and knowing how Claude Code uses them is like the difference between having a car and knowing it has sport mode. Boris Cherny, the creator of Claude Code, shared a thread with five tips on how to make the most of them. I’ve tried them all. Some have totally transformed how I work. Others spared me the quick hacks I’ve been cobbling together since January. Let’s dive in. ## Tip 1: `--worktree` — Create a worktree with one flag The classic flow for working with a worktree looks like this: ```bash git worktree add ../my-project-feature -b feature/something cd ../my-project-feature claude Three steps. Not terrible, but you have to think up directory names, remember the syntax, and navigate to the new directory. If you do this five times a day, it gets old. ...

Fernando

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 title: "Codex CLI asks for permission to breathe (and gets fixed with two flags)" date: 2026-03-11T22:00:00+01:00 draft: false slug: "codex-cli-autonomous-agent-two-flags" description: "Codex CLI keeps interrupting by asking for confirmation. Two flags turn it into an autonomous agent that works without asking. Quick tutorial with Claude Code comparison." tags: ["codex", "openai", "cli", "agents", "productivity", "tutorial"] categories: ["tutorial"] translation: hash: "" last_translated: "" notes: | - "paranoid assistant": humorous — "paranoid assistant". Not clinical. - "nags you": colloquial interpretation of "te suelta el rollo". - "in plain language": no religious connotation for "dicho en cristiano". - "beats around the bush" for "irse por las ramas." - "boldly" for "con un par." --- You install Codex CLI. You launch it with excitement. You think to yourself: "Finally!" and tell it, "Fix the broken tests in this repo." And that's when the ordeal begins: Codex: I want to run pytest Allow? (y/n) ...

Fernando

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 title: "Codex CLI Lacks Worktrees (Here's How to Set Them Up Yourself)" date: 2026-03-11T23:45:00+01:00 draft: false slug: "codex-cli-worktrees-manual-parallelism" slug_en: "codex-cli-worktrees-manual-parallelism" description: "Codex CLI doesn’t support --worktree or --tmux. But with manual Git worktrees and a few tricks, you can achieve real parallelism. A practical guide with the bugs you’ll encounter." tags: ["codex", "openai", "git", "worktrees", "agents", "productivity"] categories: ["tools"] translation: hash: "" last_translated: "" notes: | - "montártelo": colloquial for "to set it up yourself" / "to rig it up". Not sexual. - "te la pegas": "you crash" / "you hit a wall". Colloquial for failing/getting burned. - "ñapa": "quick hack/bodge". Not derogatory, somewhat affectionate. - "currar": colloquial for "to work". Very common in Spain. - "ir tirando": "to get by" / "to make do". Casual. - "el ajo": "garlic" — used in "meterse en el ajo" meaning "to get into the thick of it". - "tela marinera": expression meaning "that's quite something" / "no small feat". No textile connotation. social: publish: true scheduled_date: 2026-03-14 platforms: ["twitter", "linkedin"] excerpt: "Codex CLI doesn't support --worktree or --tmux for parallel operations. But with manual worktrees and attention to shared-session bugs, you can create truly parallel workflows. Practical guide." wordpress: publish: true categories: [1] tags: ["codex", "openai", "git", "worktrees", "productivity"] video: generate: false style: "educational" --- If you’ve read my [post about worktrees in Claude Code](/en/claude-code-worktrees-parallelism-agents/), you know the key to parallel workflows is a simple flag: `--worktree`. Run it, and you get an agent working in its own isolated repo copy. Launch three, and you’ve got three agents working in parallel without clashing. Magic. Now you open Codex CLI, look for an equivalent flag… and it doesn’t exist. There’s no `--worktree`. No `--tmux`. No `isolation: worktree` for custom agents. [Issue #12862](https://github.com/openai/codex/issues/12862) has been open on GitHub asking for exactly this, with community members proposing their own implementations in forks, but nothing has been merged. Native parallelism for Codex CLI doesn’t exist — not yet. Does that mean you can’t work in parallel with Codex? No. It just means you’ve got to do it yourself. And by “do it yourself,” I mean three git commands and a few precautions to avoid crashing and burning. ## The Plan: Manual Worktrees + One Codex Per Directory The concept is the same as with Claude Code, but without automation. You create the worktrees, you launch the agents, and you clean up afterward. It’s handcrafted, but it works. ```bash # From your main repo cd ~/code/my-project # Create one worktree per task git worktree add ../my-project-feat-auth -b feature/auth git worktree add ../my-project-fix-tests -b fix/broken-tests git worktree add ../my-project-refactor -b chore/refactor-db Now you’ve got four directories: the main repo and three worktrees. Each one has its own branch, its own staging area, and its own independent HEAD. They share the Git database (.git/), but otherwise, they are isolated copies. ...

Fernando