A local-first training factory for embodied AI: build worlds, validate physical assets,
evaluate robot behavior, produce training evidence, and operate the loop from one control plane.
Trainable joins the physical-AI workflow into a single desktop-ready system:
- Registers robot embodiments and validates their kinematics, cameras, actuators, and simulation runtime.
- Builds evidence-backed rigid and articulated assets with explicit physical-validation gates.
- Authors persistent 3D worlds and resolves natural-language tasks against objects in the active scene.
- Runs deterministic MuJoCo oracles and learned-policy evaluations with measurable predicates and durable evidence.
- Exports successful demonstrations as versioned LeRobot datasets and manages bounded policy-training candidates.
- Exposes approval-aware agent tools without silently replacing a failed model call with fabricated behavior.
- Correlates browser, API, agent, model, tool, and simulation activity in self-hosted SigNoZ.
- Projects robots, skills, assets, worlds, evaluations, failures, and training runs into Port.
The deterministic oracle is a privileged validation and demonstration controller. It is not presented as learned-policy performance. Learned-policy runs require an actual configured checkpoint.
flowchart LR
UI[Mission Control] --> API[FastAPI control plane]
API --> AGENT[Governed agent tools]
AGENT --> WORLD[World and asset compiler]
WORLD --> SIM[MuJoCo / Isaac adapter]
SIM --> EVAL[Evaluation evidence]
EVAL --> DATA[LeRobot datasets]
DATA --> TRAIN[Policy candidates]
API --> SIGNOZ[SigNoZ telemetry]
API --> PORT[Port context lake]
| Surface | Purpose |
|---|---|
| Mission Control | Models, robots, and approval-aware agent operations in one workspace |
| Worlds | Persistent scene authoring, physical asset placement, and live simulation |
| Assets & Evidence | Provenance, geometry, collision, scale, articulation, and validation records |
| Training | Demonstration datasets, training preflight, candidate execution, and promotion gates |
| Observability | In-product telemetry views plus the embedded self-hosted SigNoZ experience |
| Port | Governed workflows and a continuously reconciled operational catalog |
backend/ FastAPI, SQLite state, simulation, agents, training, and telemetry
frontend/ React/Vite mission control and Electron desktop packaging
model_services/ Local model gateway contracts and adapters
ops/signoz/ SigNoZ Foundry casting configuration for Docker Compose
docs/ Architecture notes
port.yml Port service metadata
- Windows 11, Linux, or macOS
- Python 3.11
- Node.js 22+
- Docker Engine with Docker Compose v2 and at least 4 GB of memory
- Optional local model/runtime directories configured in Settings
Default local ports:
| Service | Address |
|---|---|
| Trainable UI | http://127.0.0.1:3000 |
| Trainable API | http://127.0.0.1:8100 |
| SigNoZ UI/API | http://127.0.0.1:8010 |
| OTLP gRPC / HTTP | 127.0.0.1:4317 / 127.0.0.1:4318 |
| SigNoZ MCP | http://127.0.0.1:8001/mcp |
Clone and configure the repository:
git clone https://github.com/meowshmalloww/Trainable.git
Set-Location Trainable
Copy-Item .env.example .env
py -3.11 -m venv backend\.venv
.\backend\.venv\Scripts\python.exe -m pip install -r backend\requirements-dev.txt
Set-Location frontend
npm.cmd ci
Set-Location ..Start the API in one PowerShell terminal:
.\backend\.venv\Scripts\python.exe -m uvicorn app.main:app `
--app-dir backend --host 127.0.0.1 --port 8100Start the UI in another terminal:
Set-Location frontend
npm.cmd run devOpen http://127.0.0.1:3000. Check API readiness at http://127.0.0.1:8100/api/health.
The checked-in Foundry casting installs SigNoZ and its MCP server with Docker Compose. From ops/signoz:
foundryctl cast -f casting.yaml
docker ps
Invoke-RestMethod http://127.0.0.1:8010/api/v1/health
Invoke-RestMethod http://127.0.0.1:8001/livezTrainable exports browser and backend OpenTelemetry data to the local OTLP receiver. The trace path covers UI requests, FastAPI, agent turns, LLM calls, tool execution, simulation, and persistence. Prompts, credentials, raw tool arguments, and raw tool results are excluded from exported attributes.
To enable SigNoZ query and MCP access, create a service-account key in Settings → Service Accounts and place it in the local SIGNOZ_API_KEY variable. Do not commit .env.
Port application publishing and Port MCP authentication are separate:
PORT_CLIENT_IDandPORT_CLIENT_SECRETauthenticate Trainable's background catalog publisher.- Port MCP uses its own OAuth session for AI-driven catalog queries and governed workflow execution.
After application credentials are configured, Trainable's background reconciler detects changed durable records and publishes idempotent merge updates without blocking simulations. It never deletes Port entities.
Invoke-RestMethod http://127.0.0.1:8100/api/integrations/port/status
Invoke-RestMethod -Method Post http://127.0.0.1:8100/api/integrations/port/reconcileThe catalog model includes services, workloads, robots, skills, assets, simulation worlds, scenarios, evaluations, failure events, and training runs. Evaluation entities retain signoz_trace_id when a trace identifier is available.
Run the automated checks:
Set-Location backend
.\.venv\Scripts\python.exe -m pytest tests -q
Set-Location ..\frontend
npm.cmd run typecheck
npm.cmd run lint
npm.cmd run buildFor a release check, also exercise the application in the browser, run a real simulation or governed operation, confirm its durable record, verify telemetry in SigNoZ, and confirm the corresponding Port entity or workflow run.
Trainable is available under the MIT License.