A personal research lab for nature-inspired architectures.
State Space Models · Geometric Deep Learning · Morphogenesis · World Models
A tendril is a plant's exploratory organ — it reaches, senses, and grows toward what it needs. This repo is mine.
tendril is the foundation of an ongoing research program exploring nature-inspired architectures for world models that can reason about structure.
It is two things at once:
- A reusable training & experimentation framework — opinionated, minimal, device-agnostic (Apple Silicon MPS / CUDA / CPU), with first-class support for cloud bursts via Modal and Lightning AI.
- A growing collection of experiments that compose into a single research thesis: that locality (Neural Cellular Automata), symmetry (Geometric Deep Learning), and efficient long-range dynamics (State Space Models / Mamba) are the right inductive biases for predictive world models — tested on benchmarks like ARC-AGI.
🚧 This is a living lab notebook. Expect rough edges in
experiments/, polish insrc/tendril/.
Inspired by the work of Sakana AI, Yann LeCun's JEPA program, Michael Levin's morphogenesis research, and the geometric deep learning community.
Open questions I'm chasing:
- Can a JEPA-style world model with an NCA-like local update rule learn abstract reasoning tasks (ARC-AGI) more sample-efficiently than transformer baselines?
- Does giving each NCA cell an SSM as its update function (instead of an MLP) yield more stable, longer-horizon dynamics?
- How does equivariance to grid symmetries interact with learned local rules?
Each experiment in this repo is a tendril reaching toward one of these questions.
# Install uv if you don't have it
curl -LsSf https://astral.sh/uv/install.sh | sh
# Clone and set up
git clone https://github.com/YOUR_HANDLE/tendril.git
cd tendril
uv sync
# Train a small MLP on MNIST locally (auto-detects MPS on Mac, CUDA elsewhere)
uv run train model=mlp data=mnist
# Same training, but on a cloud GPU via Modal
uv run modal run scripts/launch_modal.py -- model=mlp data=mnist
# Inspect a finished run with Marimo
uv run marimo edit notebooks/inspect.pyThat's it. Three commands to go from clone → trained model → reactive notebook visualization.
tendril/
├── pyproject.toml # uv-managed dependencies
├── Dockerfile # reproducible container
├── .github/workflows/ci.yml # ruff + pytest on every push
├── configs/ # Hydra configs
│ ├── train.yaml
│ ├── model/
│ │ ├── mlp.yaml
│ │ └── cnn.yaml
│ └── data/
│ ├── mnist.yaml
│ └── cifar10.yaml
├── src/tendril/ # the reusable core
│ ├── data/ # dataset wrappers
│ ├── models/ # model definitions
│ ├── training/
│ │ └── trainer.py # device-agnostic training loop
│ ├── eval/
│ └── utils/
├── experiments/ # research experiments (rougher)
│ ├── 01_mamba_from_scratch/
│ ├── 02_neural_ca/
│ ├── 03_ssm_nca/ # ← first novel contribution
│ └── ...
├── notebooks/ # Marimo notebooks (git-friendly!)
├── scripts/
│ ├── train.py
│ └── launch_modal.py
└── tests/
Why the split between src/tendril/ and experiments/?
The core (src/tendril/) is the framework I trust and reuse. Experiments are write-once research code — they import from the core but live independently, so I can move fast without breaking things.
- Device-agnostic by default. The same code runs on Mac MPS, a single GPU, or a cloud cluster.
- Configs over flags. Every experiment is a Hydra config — fully reproducible, diffable in git.
- Reactive notebooks. Marimo instead of Jupyter — notebooks as Python files, no hidden state, version-control-friendly.
- Cloud as a one-liner. Modal lets me develop locally and burst to A100s with a single command. No infrastructure rabbit holes.
- Boring infra, novel research. The goal is to make running experiments so frictionless that I can spend my brain cycles on architectures, not yak-shaving.
tendril grows in composable blocks that build toward a capstone:
- Block 0 — Foundation (this repo's core) ✨ in progress
- Block A — SSM + NCA: Mamba from scratch, NCA from scratch, SSM-NCA fusion experiment
- Block B — Geometric DL: GNNs from scratch, equivariant networks, SSM-on-graphs
- Block C — JEPA / World Models: I-JEPA, V-JEPA, DreamerV3-mini
- Capstone —
tendril-arc: a nature-inspired world model evaluated on ARC-AGI
Each block produces a standalone repo + a blog post + (ideally) an open-source contribution somewhere upstream.
| Tool | Why |
|---|---|
uv |
Fastest Python package manager. No more pip waiting. |
pytorch |
MPS-aware, the lingua franca of research. |
hydra |
Config composition, multirun, sweeps for free. |
wandb |
Experiment tracking that survives my chaotic energy. |
marimo |
Reactive, git-friendly notebooks. Vastly better than Jupyter. |
modal |
Cloud GPU as a Python decorator. Magical. |
ruff + pytest + pre-commit |
Boring tools that make me a better engineer. |
v0.1.0 — minimal but complete training framework. MNIST + CIFAR-10. MPS + CUDA + Modal verified.
Follow my blog or Twitter for updates as new tendrils branch out.
This work stands on the shoulders of:
- Andrej Karpathy — for showing the world that re-implementing things from scratch is the way.
- Sakana AI — for proving nature-inspired AI research is a viable, beautiful path.
- Albert Gu, Tri Dao — for Mamba and the broader SSM line of work.
- Alexander Mordvintsev — for the Growing Neural Cellular Automata work that started this whole rabbit hole.
- Petar Veličković, Michael Bronstein — for making geometric deep learning legible.
- Yann LeCun & the FAIR JEPA team — for the world-model agenda.
MIT — use it, fork it, build on it. If it helps your research, a citation or a star is appreciated.
@software{tendril_2026,
author = {Vinod Anbalagan},
title = {tendril: A personal research lab for nature-inspired architectures},
year = {YOUR_YEAR},
url = {https://github.com/VinodAnbalagan/tendril}
}