Record activations
Extract hidden states from any layer, module, or token position with a single call. Works on any HuggingFace causal LM.
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, Pipelinefrom murano.steps import Load, Record, SteeringVector, Intervenefrom 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.
Quickstart
Record activations, find a direction, and steer a model in five minutes.