# Overview (/docs)
Get started
Core concepts
openhorizon.so ↗
## Core concepts [#core-concepts]
Every OpenHorizon-powered machine runs the same loop: perception turns sensor streams
into structure, spatial memory persists it into a world model, and reasoning plans
against both.
## For your tools [#for-your-tools]
These docs are built to be read by machines too: every page has a **Copy Markdown**
button, and the full corpus is available at [/llms.txt](/llms.txt) and
[/llms-full.txt](/llms-full.txt) for agents and LLM pipelines.
# Quickstart (/docs/quickstart)
This quickstart is scaffolding for your docs — replace the package names and code with
your real SDK surface as it lands.
## Requirements [#requirements]
* Python 3.10+ or Node.js 20+
* A camera, recorded sensor log, or the bundled sample dataset
* Optional: ROS 2 Humble or newer for robot integration
## Install [#install]
Python
TypeScript
```bash
pip install openhorizon
```
```bash
bun add @openhorizon/sdk
```
## Run your first pipeline [#run-your-first-pipeline]
Point the SDK at a sensor source and subscribe to structured perception events:
Python
TypeScript
```python
from openhorizon import Pipeline
pipeline = Pipeline.from_source("sample://warehouse-run-01")
for event in pipeline.perception():
print(event.objects, event.pose)
```
```ts
import { Pipeline } from '@openhorizon/sdk';
const pipeline = await Pipeline.fromSource('sample://warehouse-run-01');
for await (const event of pipeline.perception()) {
console.log(event.objects, event.pose);
}
```
You should see a stream of perception events: detected objects, estimated poses, and
surface geometry, updated in real time.
## Where to go next [#where-to-go-next]
# Perception (/docs/concepts/perception)
Perception is the first stage of the cognition loop: it turns raw camera, lidar, and
IMU streams into a structured, machine-usable description of the scene.
## What perception produces [#what-perception-produces]
Each perception event describes the world at one moment:
| Field | What it tells you |
| ---------- | -------------------------------------------------------- |
| `objects` | Detected objects with class, confidence, and 3D position |
| `surfaces` | Ground planes, walls, and traversable geometry |
| `pose` | The machine's estimated position and orientation |
| `motion` | Velocity estimates for the machine and tracked objects |
## Design principles [#design-principles]
**Structured over raw.** Downstream stages never touch pixels or point clouds — they
work with typed objects and geometry. This keeps memory and reasoning independent of
the sensor suite.
**Real time first.** Perception is budgeted per frame. When compute is tight, the
pipeline degrades gracefully — lower-priority detectors shed load before core geometry
and pose estimation do.
**Sensor-agnostic.** The same event schema is produced whether the source is a single
RGB camera, a full lidar rig, or a recorded log.
## Next [#next]
# Real-time reasoning (/docs/concepts/reasoning)
Reasoning closes the cognition loop: it takes live perception and spatial memory and
decides what the machine should do next — continuously, and fast enough for hardware
in motion.
## The contract [#the-contract]
Reasoning in a physical system is different from reasoning in a chat window:
* **It never blocks.** The world keeps moving while the machine thinks. Decisions are
produced on a fixed cadence, using the best available context at that moment.
* **It is grounded.** Every plan references real entities from memory — places the
machine has mapped, objects it has seen — not free-floating text.
* **It degrades safely.** When confidence is low or context is stale, the output is a
conservative action (slow down, re-observe, ask), never a guess at full speed.
## Fast and slow paths [#fast-and-slow-paths]
Reasoning runs at two speeds:
1. **Reactive** — millisecond-scale responses to immediate perception: obstacle
avoidance, stability, safety stops.
2. **Deliberative** — second-scale planning against spatial memory: routing, task
sequencing, and handling instructions expressed in natural language.
The reactive path always has authority to override the deliberative one.
## Back to the start [#back-to-the-start]
Actions change the world, which changes what the machine senses — and the loop
continues: **sense → remember → reason**.
# Spatial memory (/docs/concepts/spatial-memory)
Spatial memory is what separates a machine that *sees* from a machine that
*understands where it is*. It accumulates perception over time into a persistent world
model the machine can query.
## What spatial memory holds [#what-spatial-memory-holds]
* **Places** — a topological and metric map of the environment
* **Things** — objects the machine has observed, with their last known state and location
* **Relationships** — what is on, inside, near, or attached to what
* **Change** — a history of what appeared, moved, or disappeared, and when
## Why it matters [#why-it-matters]
Live perception only answers "what is around me *right now*." Real tasks need more:
* "Return to the loading dock" requires remembering places beyond sensor range.
* "Find the pallet that was here this morning" requires object permanence.
* "Something changed in aisle 3" requires comparing now against then.
## Querying memory [#querying-memory]
Memory is queryable by location, by object, and by time — so reasoning can ask
questions like *"what traversable route reaches the dock?"* or *"where was this object
last seen?"* without re-processing raw sensor history.
## Next [#next]