DEV Community

J Now
J Now

Posted on

skill-tree: mapping which Claude Code habits you've never tried

I've been using Claude Code daily for months. My throughput went up. Whether my collaboration patterns actually changed — I couldn't tell.

Anthropic published a study in February 2026 analyzing 9,830 Claude conversations against 11 observable behaviors (from Dakan & Feller's 4D AI Fluency Framework — Description, Discernment, Delegation, plus a fourth axis, Diligence, that doesn't show up in chat logs). I wanted to run that same classification on my own sessions and see where my distribution sat.

skill-tree does that. You install it as a Claude Code plugin:

claude plugin marketplace add robertnowell/ai-fluency-skill-cards
claude plugin install skill-tree-ai@ai-fluency-skill-cards
Enter fullscreen mode Exit fullscreen mode

It reads your session history, runs a remote classifier (Claude Haiku on Fly.io), assigns one of seven archetype cards rendered as tarot cards with curated museum art, and picks one behavior you haven't touched as a growth quest for your next session. Full 7-step orchestration takes 30–60 seconds and returns a stable URL — live example at skill-tree-ai.fly.dev/fixture/illuminator.

The design wrinkle worth writing up: the dual state-path problem.

Growth quests need to persist across sessions. In Claude Code that's straightforward — write to ~/.skill-tree/ and it's there next time. Cowork has a different constraint: $HOME is ephemeral. Anything written there during a session is gone when the session ends. No persistent quest, no longitudinal tracking.

The fix was to key state storage off the environment rather than hardcode a path:

const statePath = process.env.CLAUDE_PLUGIN_ROOT
  ? path.join(process.env.CLAUDE_PLUGIN_ROOT, '.user-state')
  : path.join(os.homedir(), '.skill-tree');
Enter fullscreen mode Exit fullscreen mode

$CLAUDE_PLUGIN_ROOT is stable across Cowork sessions even when $HOME isn't. So Cowork writes to $CLAUDE_PLUGIN_ROOT/.user-state/ and the quest survives. Claude Code, which sets $HOME to a durable path, falls through to ~/.skill-tree/.

The SessionStart hook reads that path on every session open, so the active quest is always current regardless of which client you're in.

skill-tree also ships as an MCP server (npm install skill-tree-ai) for Cursor, VS Code, and Windsurf — same classifier, same archetypes, same persistence logic.

github.com/robertnowell/skill-tree-ai

Top comments (0)