Skip to content

luxsolari/three-axes-framework

Repository files navigation

Three Axes Framework

License: MIT Version

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.

What it does

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.

Installation

Via the lux-solari-plugins marketplace (recommended)

# 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-plugins

Or from inside Claude Code:

/plugin marketplace add luxsolari/lux-solari-plugins
/plugin install three-axes-framework@lux-solari-plugins

Local development / testing

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 needed

See CONTRIBUTING.md for the full contributor workflow.

Quickstart

# 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-status

That'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 it

Or tell Claude directly: "Walk me through this", "Let me try this", "Just do it".


How it works

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

Mode-switch signals

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

Three-tier profile system

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

Commands

/three-axes-setup

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).

/three-axes-status

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)

/three-axes-mode <preset>

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

/three-axes-set <axis>=<value> [--project|--global]

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 scope

Valid values:

  • mastery: low | medium | high
  • consequence: low | medium | high
  • intent: growth | balanced | output

/three-axes and /three-axes-framework

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.


Profile Configuration

Profile cascade

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.

Schema

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.

Project profiles

.three-axes.json is committable by default — useful for sharing team defaults. Add it to .gitignore if you want per-developer settings only.

Research basis


Troubleshooting

Installation fails with Permission denied (publickey)

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.pub

Copy 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.

License

MIT — free to use, fork, and adapt.

About

Always-active Claude Code plugin: Three Axes Framework — calibrates AI behavior across Mastery, Consequence, and Intent axes to prevent comprehension debt.

Topics

Resources

Contributing

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages