How I manage 40+ skills across Claude Code, Codex, and .agents folders A developer built Skillmux, a Go-based CLI tool, to manage over 40 skills across Claude Code, Codex, and .agents folders after skill accumulation created latency and incorrect suggestions in every session. The tool introduces named profiles that store separate skill sets and relinks agent directories to the active profile, preventing conflicts with third-party installers and symlink issues. Skillmux is available on GitHub under an MIT license. I started with three skills. A year later I had forty-something. Every Claude Code session loaded all of them. Every Codex run loaded all of them. Every .agents -based tool I tried loaded all of them. The folders are global. The work isn't. This post is about how skill accumulation became the quiet tax on every session, what I tried to fix it most of which broke , and the small Go CLI I ended up writing because the right answer wasn't a script — it was a model. I didn't sit down one day and install forty skills. They arrived in trickles: By the time I noticed the problem, the count was somewhere north of forty. Some of them I genuinely used every day. Some of them I'd used once. All of them were visible to my agents at startup. The cost of seeing every skill at every session isn't just startup latency, though that's real. It's the wrong skill suggested at the wrong moment. A few specific friction moments that made me start caring: None of these are catastrophic. But they're a constant low-grade friction, and they get worse as you accumulate more skills. The honest version is: the agent is doing what you told it to do. You told it about all of these skills, so all of them are fair game. The fix has to be: tell the agent about fewer skills. The naive first attempt: move skills out of ~/.claude/skills when I didn't need them. Drag-and-drop, basically. This broke immediately. Skill installers — and there are a lot of them now — write to the global path. So a week later ~/.claude/skills had grown back to its original size, plus or minus whatever new things I'd installed. Manual moves don't survive contact with installers. Next attempt: an alias for each context. alias claude-work='CLAUDE SKILLS DIR=~/.claude/work-skills claude' alias claude-personal='CLAUDE SKILLS DIR=~/.claude/personal-skills claude' The problem: not every agent respects an env var override for the skills path. Some do, some don't, some half-do. And even when they do, the third-party installers still write to the global location, so the directories drift apart immediately. This is the kind of solution that works on Tuesday and breaks on Thursday. Closer. I wrote a script that: ~/.claude/skills ~/.claude/skills as a symlink to ~/.claude/profiles/