Dependency graph¶
┌─────────────────┐
│ installer │ ←── user entry point
│ (brew, curl|sh) │
└────────┬────────┘
│ installs
┌─────────────────┼──────────────────┐
▼ ▼ ▼
┌──────────┐ ┌──────────┐ ┌──────────┐
│ esml │◀────┤turboquant│ │ tide │
│ (core) │ │ (PIP VCS)│ │ (Go) │
└────┬─────┘ └──────────┘ └──────────┘
│
│ depends on
▼
┌──────────┐ ┌──────────┐
│ perseus │◀─────│autoresear│
│ (PIP VCS│ │ch (MPS / │
└────┬─────┘ │ CUDA) │
│ └────┬─────┘
│ talks to │ PTQ via
▼ ▼
┌──────────┐ ┌──────────┐
│ Ollama │◀─────│turboquant│
│ (daemon) │ │ │
└──────────┘ └──────────┘
Pi-specific:
┌──────────┐ ┌──────────┐
│ luci │─────▶│ perseus- │─────▶ Ollama
│ (agent) │ │ relay │
└──────────┘ └──────────┘
┌──────────┐
│ kronos │ (Rust, Pi-native terminal multiplexer)
└──────────┘
Meta:
┌───────────────────────────────────┐
│ llamaclaw (umbrella) │
│ submodules: all 10 sub-repos │
│ scripts: init / status / release │
└───────────────────────────────────┘
┌───────────────────────────────────┐
│ yoda (diary) │
│ .claude/*, yodavision/* │
└───────────────────────────────────┘
┌───────────────────────────────────┐
│ deploy (configs) │
│ mac launchd, pi systemd │
└───────────────────────────────────┘
Runtime dependencies¶
esml (pyproject.toml):
dependencies = [
"numpy>=1.26", "scipy>=1.12", "pandas>=2.0",
"statsmodels>=0.14", "scikit-learn>=1.3",
"turboquant @ git+https://github.com/llamaclaw/turboquant.git@dev",
"perseus @ git+https://github.com/llamaclaw/perseus.git@dev",
]
turboquant (pyproject.toml):
dependencies = ["numpy>=1.24", "scipy>=1.10"]
perseus (pyproject.toml):
dependencies = ["httpx>=0.27"]
Perseus has an optional esml dependency at import time: when
esml.cpads and esml.modules are available (i.e. esml is installed
alongside), Perseus uses them for richer context injection. Otherwise
it falls back to empty context — the cross-package coupling is
graceful, not required.
Build-time dependencies¶
Repo |
What you need |
|---|---|
esml |
Python 3.10+, R 4.3+, gfortran, libopenblas, pkg-config |
turboquant |
Python 3.10+, C compiler (for the GGML bridge) |
perseus |
Python 3.10+ |
autoresearch |
Python 3.10, PyTorch with MPS or CUDA |
tide |
Go 1.26+ |
kronos |
Rust 1.75+ |
luci |
bash, ssh |
yoda |
— (Markdown only) |
deploy |
— (config files) |
installer |
Ruby (Homebrew formula), bash (curl installer) |
Why pip VCS URLs instead of PyPI?¶
During the private incubation phase, the sub-repos aren’t on PyPI.
git+ssh:// VCS URLs let us iterate quickly across repos without
version-bump ceremony. Once the ecosystem stabilizes and a sub-repo
goes public, it gets a PyPI release and the VCS URL becomes a
semver pin.