A Claude Code plugin that installs the Three Axes Framework — an always-active AI development philosophy that calibrates AI behavior to prevent comprehension debt while maximizing productivity.
The framework governs every coding interaction by evaluating tasks across three independent axes:
| Axis | Question | Range |
|---|---|---|
| Mastery | How well does the developer know this domain? | Low → High |
| Consequence | What breaks if something goes wrong? | Low → High |
| Intent | Optimizing for output or growth? | Output → Growth |
Based on where a task sits on these axes, the AI adjusts its six core principles — from full mentor mode (low mastery, growth intent) to efficient pair-programmer mode (high mastery, output intent).
Core insight: The tool doesn't destroy understanding. Passive delegation does.
# 1. Add the marketplace (one-time)
claude plugin marketplace add luxsolari/lux-solari-plugins
# 2. Install the plugin
claude plugin install three-axes-framework@lux-solari-pluginsOr from inside Claude Code:
/plugin marketplace add luxsolari/lux-solari-plugins
/plugin install three-axes-framework@lux-solari-plugins
git clone https://github.com/luxsolari/three-axes-framework
claude plugin validate ./three-axes-framework # verify structure
claude --plugin-dir ./three-axes-framework # load it for a real session, no install neededSee CONTRIBUTING.md for the full contributor workflow.
# 1. Install
claude plugin marketplace add luxsolari/lux-solari-plugins
claude plugin install three-axes-framework@lux-solari-plugins
# 2. Configure your profile (run once)
/three-axes-setup
# 3. Check what's active at any time
/three-axes-statusThat's it. The framework runs automatically from this point on — no further setup needed.
Need a quick mode change? Use presets for the current session:
/three-axes-mode learning # exploring something new
/three-axes-mode production # high-stakes work
/three-axes-mode output # just ship itOr tell Claude directly: "Walk me through this", "Let me try this", "Just do it".
Once installed, the framework is truly always active via a SessionStart hook that fires on every session startup, resume, clear, and compact event. The hook injects the full framework into Claude's context before any conversation begins — no slash command, no keyword trigger, no manual invocation needed.
A companion skill also loads contextually whenever conversations involve coding, architecture, debugging, or design — providing a second activation path as a fallback.
Context window cost: The hook injects approximately ~2,400 tokens per session (the framework rules + your active profile). This is a one-time cost paid at session start — it does not grow during the conversation. On a 200k-token context window that's about 1.2% overhead.
The framework operates as a background behavioral ruleset that shapes every development conversation:
- AI presents plans before implementing non-trivial changes
- AI calibrates explanation depth to your mastery level
- AI flags comprehension debt accumulation
- AI steps aside when you want to write code yourself
- AI enforces readable-over-clever as a universal standard
You can explicitly shift AI behavior mid-conversation:
| Say | Mode | Effect |
|---|---|---|
| "Let me try this" | Mentor | AI steps aside, reviews on request |
| "Just do it" / "Ship it" | Output | AI is efficient, minimal ceremony |
| "Walk me through this" | Growth | AI teaches thoroughly, explains tradeoffs |
| "What are the tradeoffs?" | Design | AI presents alternatives, no default recommendation |
The framework operates across three tiers. Each tier has narrower scope and higher priority:
Tier 1 — Persistent Profile ~/.claude/three-axes-profile.json (global)
.three-axes.json (project root, committable)
↓ overridden by
Tier 2 — Session Commands ~/.claude/three-axes-session.json
written by /three-axes-mode and /three-axes-set
cleared on session start, preserved across compact/resume
↓ overridden by
Tier 3 — Conversational Signals natural language, no files written, task-scoped
Tier 3 mode-switch signals:
| Say | Mode | Effect | Duration |
|---|---|---|---|
| "Let me try this" | Mentor | AI steps aside, reviews on request | Until attempt completes |
| "Just do it" | Output | Efficient, minimal ceremony | Single task |
| "Walk me through this" | Growth | AI teaches thoroughly | Until topic closes |
| "What are the tradeoffs?" | Design | AI presents alternatives, no recommendation | Single response |
Interactive first-run setup. Asks about each axis and writes your profile to ~/.claude/three-axes-profile.json. Run this once after installation — until you do, the framework operates on defaults (mastery: medium, consequence: medium, intent: balanced).
Shows the resolved profile for the current session, with source label for each axis (global, project, session, or default).
Three Axes Framework — current session
mastery: high (global)
consequence: high (project)
intent: balanced (default)
Applies a named preset to the session (ephemeral — cleared on next startup).
| Preset | mastery | consequence | intent |
|---|---|---|---|
learning |
low | low | growth |
output |
high | medium | output |
production |
high | high | output |
explore |
low | medium | growth |
balanced |
medium | medium | balanced |
Sets individual axis values. Default scope is session.
/three-axes-set mastery=high # session (ephemeral)
/three-axes-set consequence=high --project # writes .three-axes.json
/three-axes-set intent=growth --global # writes ~/.claude/three-axes-profile.json
/three-axes-set mastery=low intent=growth # multiple axes, session scopeValid values:
mastery:low|medium|highconsequence:low|medium|highintent:growth|balanced|output
Bare invocation (no arguments) — either name works, so it's discoverable whether you remember the framework's short name or its full plugin name. Shows the active profile (equivalent to /three-axes-status) plus a quick command reference.
1. ~/.claude/three-axes-profile.json global default (all projects)
2. .three-axes.json project override (repo root, committable)
3. ~/.claude/three-axes-session.json session override (ephemeral, auto-cleared)
Keys not set in a layer fall through to the layer below. A project file with only { "consequence": "high" } overrides just that axis, inheriting the rest from the global profile.
All three files share the same optional-key shape:
{
"mastery": "low" | "medium" | "high",
"consequence": "low" | "medium" | "high",
"intent": "growth" | "balanced" | "output"
}Defaults (when no layer specifies a value): mastery=medium, consequence=medium, intent=balanced.
.three-axes.json is committable by default — useful for sharing team defaults. Add it to .gitignore if you want per-developer settings only.
- Shen, J.H. & Tamkin, A. (2026). How AI Impacts Skill Formation. Anthropic Research. arXiv:2601.20245
- Osmani, A. (2026). Comprehension Debt. addyosmani.com
- Storey, M.A. (2026). Cognitive Debt. margaretstorey.com
Claude Code's plugin installer uses SSH (git@github.com:) by default. If you don't have GitHub SSH keys configured — common on WSL, Docker, CI, or fresh machines — the install will fail even though this is a public repository.
Known issue: As of Claude Code v2.1.80, the TUI Discover screen and claude plugin install command both still use the SSH path, regardless of whether SSH is configured. This is tracked at anthropics/claude-code#18001 — check that issue for current status before assuming this still applies.
Fix — generate and configure SSH keys for GitHub:
# 1. Generate a new SSH key (accept defaults, optionally add a passphrase)
ssh-keygen -t ed25519 -C "your_email@example.com"
# 2. Print the public key
cat ~/.ssh/id_ed25519.pubCopy the output and add it to GitHub: Settings → SSH and GPG keys → New SSH key.
# 3. Verify the connection
ssh -T git@github.com
# Expected: "Hi <username>! You've successfully authenticated..."Then retry the plugin installation.
Quick workaround (no GitHub account needed) — tell git to use HTTPS instead:
git config --global url."https://github.com/".insteadOf "git@github.com:"This redirects all SSH clone attempts to HTTPS. Useful for WSL, Docker, or CI environments where setting up SSH keys isn't practical.
MIT — free to use, fork, and adapt.