Skip to content

VinodAnbalagan/tendril

Repository files navigation

🌿 tendril

A personal research lab for nature-inspired architectures.

State Space Models · Geometric Deep Learning · Morphogenesis · World Models

CI Python 3.11+ Code style: ruff License: MIT


What is this?

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:

  1. 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.
  2. 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 in src/tendril/.


Research north star

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.


Quickstart

# 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.py

That's it. Three commands to go from clone → trained model → reactive notebook visualization.


Repository structure

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.


Design principles

  1. Device-agnostic by default. The same code runs on Mac MPS, a single GPU, or a cloud cluster.
  2. Configs over flags. Every experiment is a Hydra config — fully reproducible, diffable in git.
  3. Reactive notebooks. Marimo instead of Jupyter — notebooks as Python files, no hidden state, version-control-friendly.
  4. Cloud as a one-liner. Modal lets me develop locally and burst to A100s with a single command. No infrastructure rabbit holes.
  5. 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.

The roadmap

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.


Tech choices, briefly

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.

Status

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.


Inspiration & acknowledgments

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.

License

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}
}

🌿 Built slowly, in public, on a MacBook. Reaching toward something.

About

A personal research lab for nature-inspired architectures

Resources

License

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages