Spatio-Temporal Memory & Perception

OhhO OS gives every robot a persistent, queryable memory of what it has seen, where, and when (ohho.memory), fed by pluggable perception (ohho.perception). Pure standard library; persists as JSON per robot at ~/.ohho/memory/<robot>.json, shared by the CLI and the agent.

  • Object permanence — a sighting of the same label near a known position updates that entity instead of creating a duplicate
  • Spatial querieswhere is the cup? what's near (1, 2)?
  • Temporal queries — event timeline, "last seen 42 s ago", free-form notes
  • Perceptors — a deterministic sim perceptor (FOV + range over the sim world) and an optional Claude-vision perceptor for real camera frames

CLI

# Perceive the surroundings and remember them
ohho look omnibot --transport sim:// --world demo
#   chair at (1.50, 0.00) (conf 0.79)
#   table at (2.50, 1.20) (conf 0.60)
# remembered 2 object(s) → ~/.ohho/memory/omnibot.json

# Recall — works in a later session, no robot connection needed
ohho memory where omnibot chair
# chair last seen at (1.50, 0.00), 312s ago (seen 1×)

ohho memory show omnibot        # summary + recent events
ohho memory near omnibot --x 2.0 --y 1.0 --radius 1.5
ohho memory clear omnibot

Python

from ohho import Robot
from ohho.memory import SpatialMemory, default_memory_path
from ohho.perception import SimPerceptor, remember_detections

bot = Robot.connect("omnibot")
memory = SpatialMemory(path=default_memory_path("omnibot"))

detections = SimPerceptor(bot).look()          # sim world, FOV + range gated
remember_detections(memory, detections)

e = memory.where_is("cup")                     # Entity(x, y, last_seen, count…)
memory.near(1.0, 2.0, radius=1.5)              # entities around a point
memory.timeline(label="cup")                   # every sighting, time-stamped
memory.note("picked up the cup")               # free-form events
memory.save()

Claude-vision perception (real cameras)

With the [agent] extra and ANTHROPIC_API_KEY, VlmPerceptor turns camera frames into detections:

from ohho.perception import VlmPerceptor

vlm = VlmPerceptor()                       # model="claude-sonnet-5" by default
detections = vlm.look(jpeg_bytes)          # [Detection(label, confidence), …]

Agent integration

The agent's tool registry includes the memory suite automatically: look_around() (perceive + remember + report), where_is(label), objects_near(x, y, radius), and remember_note(text) — and the robot's memory summary is injected into the agent's context at the start of every goal, so "go back to where you saw the cup" works across sessions.