---
URL: "/todo/v1"
LLMS_URL: "/todo/v1.md"
---

# TO DO `Smartplant`

## ✅ Done in v3.0

- [x] Kernel with a real plugin API (`use`, `registerPlugin`, `getSensor`, `analyze`)
- [x] Sensor abstraction layer + 7 drivers (mock, manual, serial, mqtt, http, homeassistant, electrode)
- [x] Persistent plant memory with care log, species profile and 1.x migration
- [x] Multi-provider AI with retries, caching, structured output and offline fallback
- [x] First-person voice with 5 personas across 10 languages
- [x] Semantic event bus (`plant:thirsty`, `plant:stressed`, …)
- [x] All 10 plugins rewritten on the kernel, each with a passing test
- [x] CLI split from the library, with one-shot commands for scripts and cron
- [x] Electrophysiology, vision, symbolic knowledge and semantic memory
- [x] Symbiosis layers: fusion, control, safety, evidence, personalization
- [x] Hardware autodetection, firmware generation, OpenClaw adapter

## ☀️ Core

- [ ] TypeScript declaration files (`.d.ts`) generated from the JSDoc
- [ ] Reading downsampling — keep minute resolution for a day, hourly beyond that,
      so long-lived plants don't grow an unbounded memory file
- [ ] Actuator drivers: `plant.body.control` decides *what* to do and safety approves it,
      but executing it still means writing your own `execute()`. A driver contract for
      pumps, valves, smart plugs and motors is the missing half.
- [ ] Multi-plant manager: one process, one memory root, many plants

## 🌡️ Sensors

- [ ] Bluetooth driver for Xiaomi Mi Flora / HHCC (very common, very cheap)
- [ ] Camera input — leaf colour and wilting as additional signals via a vision model
- [ ] Sensor calibration offsets per driver

## 🧠 AI

- [ ] Embed the species profile once and reuse it, instead of resending it each call
- [ ] Token accounting exposed on `plant.ai.stats`
- [ ] Streaming replies for `speak()`

## 💡 Ideas

- [ ] Web dashboard reading the memory JSON directly
- [ ] Export to Home Assistant as a set of entities, closing the loop both ways
- [ ] Community species-profile registry so the first AI call is unnecessary
