Back to DevLog

MemStack v3: NTFS Junctions Changed Everything

3 min read

MemStack v3 shipped this week, and the biggest change isn't a feature — it's the deployment model. NTFS junctions changed everything.

The old problem

MemStack gives Claude Code persistent memory, skills, and hooks. But I have 30+ projects, and each one needs its own .claude/ directory with MemStack files. In v2, I was copying files into each project manually. When I updated a skill or fixed a hook, I had to propagate that change across all 30 projects. It was unsustainable.

I tried git submodules. Too fragile. I tried npm packages. Too slow to iterate. I tried a symlink approach. Windows doesn't love symlinks — they require elevated permissions and some tools don't follow them correctly.

NTFS junctions to the rescue

NTFS junctions are like symlinks but better on Windows. They work at the directory level, don't require admin privileges, and are transparent to every tool I've tested — git, Node.js, Claude Code, VS Code, all of them.

Here's the setup:

# Create a junction from project's .claude to the shared MemStack
mklink /J "C:\Projects\my-app\.claude" "C:\Projects\memstack\.claude"

That's it. Now my-app/.claude/ points to the single MemStack installation. Every project shares the same skills, hooks, commands, and rules. Update once, deploy everywhere.

The deploy script

I wrote a simple script that creates junctions for all my projects:

for dir in /c/Projects/*/; do
  if [ -d "$dir" ] && [ "$dir" != "/c/Projects/memstack/" ]; then
    target="$dir.claude"
    if [ ! -L "$target" ] && [ ! -d "$target" ]; then
      cmd //c "mklink /J \"$(cygpath -w "$target")\" \"C:\Projects\memstack\.claude\""
    fi
  fi
done

What this means for MemStack

With junctions, MemStack becomes a true framework instead of a template. The mental model shifts from "copy these files into your project" to "point your project at MemStack." This is how frameworks should work — one source of truth, many consumers.

v3 features beyond junctions

  • Skill levels — skills now have versioned levels (Lv.1, Lv.2, etc.) so they can evolve without breaking existing behavior
  • Hook-based automation — deploy, monitor, and notify are now deterministic hooks instead of AI-interpreted skills
  • SQLite state tracking — session logs, plan tasks, and project state all live in a queryable database
  • Deprecated skill detection — old skills are marked deprecated and replaced by hooks automatically

The numbers

30 projects, 1 MemStack installation, 0 sync issues. When I update a skill, all 30 projects get it immediately. When I fix a bug in a hook, it's fixed everywhere. The cognitive overhead of maintaining MemStack across my entire portfolio just dropped to near zero.

If you're running Claude Code across multiple projects on Windows, NTFS junctions are the way. It's one of those solutions that makes you wonder why you didn't do it sooner.

Share this post