Command Palette

Search for a command to run...

UnylyUnyly
Весь каталог

Oneiros Server

БесплатноНе проверен

Exposes a JEPA latent world model for planning in a 2D point-mass environment via MCP tools like encode_observation, predict_rollout, and plan_to_goal.

GitHubEmbed

Описание

Exposes a JEPA latent world model for planning in a 2D point-mass environment via MCP tools like encode_observation, predict_rollout, and plan_to_goal.

README

CI

Status: complete research artifact — results verified. v0.2 adds image-based perception as a demonstrated result (the four pixel gates below), closing v0.1's documented next step; the V-JEPA 2 scale-up remains future work (needs GPU + pretrained weights).

A JEPA-style latent world model that an agent calls as a tool — over MCP — to plan.

Oneiros is a small, CPU-only research artifact at the intersection of agentic systems and world models. It trains a Joint Embedding Predictive Architecture (JEPA) world model on a 2D point-mass environment, then exposes that model as a set of Model Context Protocol tools. An agent plans by calling the learned predictive world model as a tool — encoding observations into latents, rolling latent dynamics forward, and running model-predictive control entirely in latent space — rather than the usual pattern of an LLM calling hand-written functions.

Why predict in latent space

A JEPA predicts the future in a learned latent space, not in pixels or tokens. Given an observation o_t and an action a_t, it learns an encoder f and a predictor g such that g(f(o_t), a_t) matches f(o_{t+1}) — there is no decoder and no pixel-reconstruction loss. This matters because reconstruction wastes capacity modeling perceptually salient but control-irrelevant detail (texture, lighting, background), while a latent predictor is free to discard everything that does not help it anticipate the future. The cost is a well-known failure mode: latent prediction can collapse to a constant (every observation maps to the same point, making prediction trivially perfect). Oneiros defeats collapse with an EMA target encoder, stop-gradients, and a VICReg-style variance + covariance penalty, and then uses the resulting latent dynamics for planning.

Architecture

flowchart LR
    subgraph Env["Point-mass environment (numpy)"]
        O["obs o_t"]
        ON["obs o_t+1"]
    end

    subgraph WM["JEPA world model (torch, CPU)"]
        F["encoder f"]
        FT["EMA target f_target<br/>(stop-grad)"]
        G["predictor g"]
        O --> F --> Z["latent z_t"]
        Z --> G
        A["action a_t"] --> G
        G --> ZH["z_hat_t+1"]
        ON --> FT --> ZT["z_t+1 (target)"]
        ZH -. "MSE + VICReg<br/>variance/covariance" .-> ZT
    end

    subgraph MCP["MCP server (agentic interface)"]
        T1["encode_observation"]
        T2["predict_rollout"]
        T3["plan_to_goal"]
        T4["reset_env / step_env"]
    end

    subgraph Agent["Agent loop"]
        P["latent MPC planner<br/>(CEM over g)"]
    end

    WM --> MCP
    MCP <--> Agent
    P -->|"first action"| Env

The agent never sees the environment's dynamics. It calls plan_to_goal, which encodes the current and goal observations, searches action sequences by rolling the predictor g forward H steps in latent space (cross-entropy method), scores each candidate by predicted-latent distance to the goal, and returns the first action. The planner replans every step (receding-horizon MPC).

Verified results

Numbers below are from an actual run on this machine (CPU only, seed 0). Train with python -m oneiros.train and reproduce the diagnostics with python -m oneiros.demo_agent.

Honesty gate Metric Result
(a) Predictor beats no-op baseline next-latent MSE vs identity baseline 0.0185 vs 0.1076 (ratio 0.17 — ~5.8x better)
(b) Latent not collapsed per-dim latent std (mean / min) 1.04 / 1.00 (threshold 0.1)
(c) MPC beats random goal-reaching success over 20 seeds MPC 95% vs random 15-20%

Training takes about 21 seconds for 4000 steps. The checkpoint (oneiros/checkpoint.pt, ~240 KB) is committed so the demo, MCP server, and planning tests run without retraining.

The pixel gates (v0.2): image-based perception, demonstrated

v0.1 documented why the image encoder could not beat the identity baseline. The diagnosis had two parts, and each got a principled fix rather than a knob-twiddle:

  1. Consecutive frames were nearly identical (the blob moves ~a pixel per step), so "predict no change" was already an excellent predictor. Fix: the swift environment preset (PointMassConfig.swift()) — larger dt and acceleration so the agent moves several pixels per frame, plus speed-proportional drag so the dynamics are genuinely non-linear.
  2. A single frame hides velocity — the dynamics are second-order, so no single-frame predictor can recover the next state, and the convolutional encoder exploited this by temporal smoothing (mapping consecutive frames to nearly identical latents; the dataset-wide variance penalty does not forbid it — more training made it worse, 0.89 → 0.94 MSE ratio). Fixes: two-frame stacking (velocity becomes observable from pixels, the same reason pixel world models from DQN to V-JEPA consume clips, not stills) and a delta-variance penalty (VICReg-style hinge on the std of z_{t+1} - z_t) that forbids the temporal collapse outright.

Results from the committed checkpoint_image.pt (~735 KB), heldout data, enforced as tests in tests/test_gates_image.py:

Pixel gate Metric Result
(d) Image predictor beats no-op heldout next-latent MSE ratio vs identity 0.11 (vector model: 0.17)
(e) Latent not collapsed, incl. temporally per-dim std / one-step delta MSE 1.10 / 1.08 (pre-fix delta was 0.012)
(f) Pixel MPC beats random goal-reach rate + median steps over 20 seeds 20/20, median 9.5 steps vs 27.5 random
(g) Imagination useful at horizon compounded H-step rollout MSE ratio 0.45 at H=4, 0.86 at H=12

One honest negative, measured and deliberately not gated: a privileged linear-dynamics MPC reading the true 4D state still reaches the goal about twice as fast as the pixel planner (median ~5 vs ~9.5 steps). Planning from pixels has not caught planning from privileged state, and gate (g) shows open-loop imagination degrading by horizon 12 — which is exactly why the planner replans every step. The baselines live in oneiros/baselines.py; reproduce with python -m oneiros.train --obs-mode image --env swift.

Latent-MPC plan to goal

The agent drives the point-mass to the goal (green star) using only the world-model planning interface.

Latent prediction error Planning success
latent prediction planning vs random

What this is — and isn't

This is a genuine, end-to-end demonstration that (1) a non-trivial latent dynamics model can be learned without collapse and without reconstruction, and (2) planning in that latent space solves a control task far better than chance, all behind an agentic tool interface.

It is not at scale. The environments are toy 2D point-masses, the models are tiny (a few hundred KB). The default committed model uses a vector-state observation on the original environment; the committed image model (v0.2, checkpoint_image.pt) perceives stacked 32x32 frames on the swift environment and clears its own four gates above — v0.1's "image-based perception is the documented next step" is now a demonstrated result, with the diagnosis (frame similarity + hidden velocity + temporal smoothing) and fixes documented rather than hand-waved. What remains future work is the scale-up: a frozen pretrained perception encoder such as V-JEPA 2 with a learned latent dynamics head on top, exactly the recipe this toy mirrors — that step needs a GPU and pretrained weights, which this CPU-only artifact deliberately does not assume.

Install

Requires Python 3.12. A project-local virtual environment is recommended.

python -m venv .venv
# Windows: .venv\Scripts\activate    |    Unix: source .venv/bin/activate
pip install torch --index-url https://download.pytorch.org/whl/cpu
pip install -e ".[dev]"

torch is installed from the CPU wheel index — no GPU is needed or used.

Run

# Train the JEPA world model (writes oneiros/checkpoint.pt). ~21s on CPU.
python -m oneiros.train --obs-mode vector --steps 4000

# Train the image world model on the swift environment (~3 min on CPU;
# writes oneiros/checkpoint_image.pt when pointed there via --checkpoint).
python -m oneiros.train --obs-mode image --env swift --steps 6000

# Run the scripted agent: drive to the goal via latent MPC, write the GIF +
# diagnostic plots to assets/.
python -m oneiros.demo_agent --seed 0 --k 20

# Tests, including the three honesty gates (uses the committed checkpoint).
pytest -q

# Lint.
ruff check oneiros tests

MCP server

The world model is exposed over MCP as a stdio server:

python -m oneiros.mcp_server

Tools:

Tool Purpose
encode_observation observation -> latent z (the trained JEPA encoder)
predict_rollout roll latent dynamics g forward over an action sequence
plan_to_goal latent-space MPC; returns the next action toward a goal
plan_trajectory full best action sequence + the imagined latent path
model_info loaded model's obs mode, dims, and honesty-gate metrics
reset_env / step_env drive the point-mass environment; a session id keeps concurrent agent sessions independent

To register the server with Claude Desktop, add this to claude_desktop_config.json (use absolute paths for your checkout):

{
  "mcpServers": {
    "oneiros": {
      "command": "C:/path/to/Oneiros/.venv/Scripts/python.exe",
      "args": ["-m", "oneiros.mcp_server"],
      "cwd": "C:/path/to/Oneiros"
    }
  }
}

On Unix the command is .venv/bin/python.

Repository layout

oneiros/
  env.py          # deterministic 2D point-mass environment (numpy)
  model.py        # JEPA encoder + predictor + VICReg regularizers
  data.py         # random-policy rollout replay buffer
  train.py        # JEPA training loop, evaluation, checkpoint I/O
  planner.py      # latent-space MPC (CEM / random shooting)
  baselines.py    # pixel episode runners + privileged linear-MPC baseline
  mcp_server.py   # MCP tools exposing the world model
  demo_agent.py   # scripted agent + diagnostics (GIF, plots)
  checkpoint.pt        # committed vector model (~240 KB)
  checkpoint_image.pt  # committed image model, swift env (~735 KB)
tests/            # determinism, shapes, and the three honesty gates
assets/           # generated GIF and diagnostic figures

See SYNERGY.md for how the same latent-dynamics idea connects to regime-aware modeling in time series.

License

MIT — see LICENSE.

from github.com/mal0ware/Oneiros

Установка Oneiros Server

У этого сервера нет опубликованного пакета — он собирается из исходников. Открой репозиторий и следуй инструкции в README.

▸ github.com/mal0ware/Oneiros

FAQ

Oneiros Server MCP бесплатный?

Да, Oneiros Server MCP бесплатный — установка в пару кликов через Unyly без оплаты.

Нужен ли API-ключ для Oneiros Server?

Нет, Oneiros Server работает без API-ключей и переменных окружения.

Oneiros Server — hosted или self-hosted?

Self-hosted: сервер запускается локально на твоей машине командой из раздела установки.

Как установить Oneiros Server в Claude Desktop, Claude Code или Cursor?

Открой Oneiros Server на unyly.org, выбери вкладку своего клиента (Claude Desktop, Claude Code, Cursor) и нажми Install — конфиг сгенерируется автоматически, без правки JSON.

Похожие MCP

Compare Oneiros Server with

Не уверен что выбрать?

Найди свой стек за 60 секунд

Автор?

Embed-бейдж для README

Похожее

Все в категории development