Skip to content

Overview

Murano is a Python framework for mechanistic interpretability research on large language models. It gives you a clean, composable API to inspect what’s happening inside a model’s residual stream — and to intervene on it.

Record activations

Extract hidden states from any layer, module, or token position with a single call. Works on any HuggingFace causal LM.

Find directions

Compute contrastive steering vectors from paired positive/negative datasets using mean difference in activation space.

Steer generations

Ablate concepts by projecting them out of the residual stream, or amplify them with a scaled addition — all during generation.

Probe representations

Train linear classifiers per layer to quantify what information is linearly encoded and where.

Ablate model weights

Apply orthogonal projections directly to weight matrices for stronger, generation-independent ablation.

Inspect SAE features

Encode residual activations through a Sparse Autoencoder loaded from HuggingFace and find the top-activating contexts per feature.

Pipeline API

Compose steps into validated, reproducible experiment pipelines. Each step declares what it reads and writes.

Murano ships with two layers of API that share the same underlying machinery.

Quick API — for exploration and prototyping:

import murano
model = murano.Model("meta-llama/Llama-3.2-1B-Instruct")
direction = model.find_direction(
positive=["What a wonderful, delightful day"],
negative=["What a miserable, dreadful day"],
)
ablated = model.generate("The movie was", ablate=direction)

Pipeline API — for structured, reproducible experiments:

from murano import MuranoDataset, MuranoModel, Pipeline
from murano.steps import Load, Record, SteeringVector, Intervene
from murano.steps.intervene import ablate_direction
results = Pipeline([
Load(dataset),
Record(model, layers="all", position="last"),
SteeringVector(normalize=True),
Intervene(model, ablate_direction(...)),
]).run()

Both APIs produce the same artifacts — ActivationStore, SteeringResult, GenerationComparison — so you can mix and match.

Explicit data flow. Every pipeline step declares what keys it reads from and writes to the Results object. The pipeline validates the chain before running, catching missing steps at configuration time rather than mid-experiment.

Separation of concerns. MuranoModel is a thin wrapper around nnsight. All analysis logic lives in pipeline steps, not in the model. Steps are small, testable, and easy to replace.

Reproducibility. Pipeline outputs are typed artifacts with a consistent save format. Steering vectors, generation comparisons, probe results, and metadata all serialize to a structured directory tree.

Installation

Install Murano and set up your HuggingFace environment.

Install →

Quickstart

Record activations, find a direction, and steer a model in five minutes.

Get started →