orto-skills/orto-suite/orto-init/SKILL.md

336 lines
9.7 KiB
Markdown

---
name: orto-init
description: Inizializzare un nuovo progetto di orto comunitario o domestico nel sistema di gestione Orto. Usare quando: (1) configurare un nuovo orto con localizzazione, dimensioni e dettagli ambientali, (2) creare la struttura di directory e template markdown per il progetto, (3) registrare l'orto nel registro centrale, (4) preparare blocchi di questionario per il profilo utente. Output: Config orto markdown, template questionari, audit trail, struttura di directory pronta per il workflow di onboarding.
---
# Orto Init — Inizializzazione Progetto Orto
Inizializzare un nuovo progetto orto da zero. Questo è il primo passo nel workflow Orto.
## Quando Usare Questa Skill
- **Setup nuovo orto:** L'utente vuole iniziare a gestire un orto con Orto
- **Registrazione orto:** Assegnare ID univoco, nome, localizzazione e dati ambientali base
- **Scaffolding directory:** Creare struttura di progetto (config, dati, log, media, cartelle report)
- **Preparazione template:** Generare template markdown per questionario, config, calendario, etc.
## Input
Codex raccoglie questi dettagli dall'utente (o usa default se non disponibili):
| Input | Tipo | Obbligatorio | Esempio |
|-------|------|----------|---------|
| `orto_id` | String | Sì | `orto_roma_testaccio_001` |
| `orto_name` | String | Sì | `Orto Testaccio Roma` |
| `provincia` | String | Sì | `Roma` |
| `regione` | String | Sì | `Lazio` |
| `latitude` | Float | Sì | `41.8782` |
| `longitude` | Float | Sì | `12.4922` |
| `area_mq` | Float | No (raccolto in onboarding) | `50` |
| `climate_zone` | Enum | No (inferito da lat/lon) | `centro` |
### Validazione Input
- `orto_id`: minuscolo, solo underscore/trattini, max 64 caratteri (es. `orto_NOME_NUMERO`)
- `provincia` + `regione`: normalizzare a lista regioni italiane (Roma → Lazio)
- `latitude`: -90 a 90, decimale
- `longitude`: -180 a 180, decimale
- `area_mq`: float positivo se fornito
## Processo
### Fase 1: Inferenza Zona Climatica
Mappare `latitude` a macro-zona italiana:
```
se lat >= 44.0:
zona = "nord" # Piemonte, Lombardia, Veneto, etc.
ultima_gelata ≈ 25 aprile
prima_gelata ≈ 15 ottobre
se no se lat >= 42.5:
zona = "centro" # Toscana, Lazio, Marche, etc.
ultima_gelata ≈ 15 aprile
prima_gelata ≈ 25 ottobre
se no:
zona = "sud" # Campania, Sicilia, Puglia, etc.
ultima_gelata ≈ 1 aprile
prima_gelata ≈ 5 novembre
```
### Fase 2: Genera Struttura Directory
Create base folder: `/home/<user>/.openclaw/workspace/Orti/<orto_id>/`
```
<orto_id>/
├── README.md # Project overview
├── config/
│ ├── garden_config.md # Base garden config (location, size, soil, etc.)
│ └── ambiente_vincoli.md # Environmental constraints
├── dati/
│ ├── questionario/
│ │ ├── blocco_1_localizzazione.md
│ │ ├── blocco_2_layout_spazio.md
│ │ ├── blocco_3_irrigazione.md
│ │ ├── blocco_4_comunita_dieta.md
│ │ └── blocco_5_obiettivi_vincoli.md
│ ├── calendario/
│ │ └── calendario_stagionale.md
│ ├── colture/
│ │ └── piano_colture_annuale.md
│ ├── layout/
│ │ ├── aiuole_dimensioni.md
│ │ └── zone_clima_microclimatico.md
│ ├── irrigazione/
│ │ ├── sistema_irrigazione.md
│ │ ├── sensori_monitoraggio.md
│ │ └── programmi_irrigazione.md
│ ├── meteo/
│ │ └── dati_meteo_giornalieri.md
│ ├── nutrizione/
│ │ ├── analisi_terreno.md
│ │ └── piano_concimazione.md
│ ├── trattamenti/
│ │ ├── diagnosi_problemi.md
│ │ └── piano_trattamenti.md
│ └── raccolti/
│ └── cicli_raccolta_previsti.md
├── log/
│ ├── audit_trail.md # Audit log
│ └── note_osservazioni.md # Field notes
├── media/
│ ├── foto/
│ └── video/
└── report/
└── (reports generated later)
```
### Fase 3: Genera Template Markdown
**garden_config.md** (dal template)
```markdown
# Configurazione Orto: [ORTO_ID]
## Dati Base
- **Nome:** [ORTO_NAME]
- **ID:** [ORTO_ID]
- **Provincia:** [PROVINCIA]
- **Regione:** [REGIONE]
- **Coordinate:** [LATITUDE], [LONGITUDE]
- **Zona climatica:** [ZONE] (Nord/Centro/Sud)
- **Ultima gelata (app.):** [LAST_FROST_DATE]
- **Prima gelata (app.):** [FIRST_FROST_DATE]
- **Lunghezza stagione:** ~[SEASON_LENGTH] giorni
## Spazio
- **Area disponibile:** ??? m² *(riempire in onboarding blocco 2)*
- **Tipologia terreno:** ??? *(riempire in onboarding blocco 2)*
- **Esposizione solare:** ??? *(riempire in onboarding blocco 2)*
## Vincoli Ambientali
- **Vincoli agua:** *(riempire in onboarding blocco 3)*
- **Vincoli manutenzione:** *(riempire in onboarding blocco 5)*
- **Note vincoli:** *(riempire in onboarding)*
## Status
- **Data creazione:** [TODAY]
- **Stato workflow:** Init completo, in attesa onboarding
```
**blocco_1_localizzazione.md** (template questionario)
```markdown
# Blocco 1 — Localizzazione Orto
## Domande
### Q1.1 — Dove si trova l'orto?
**Provincia:** [auto-filled]
**Regione:** [auto-filled]
**Indirizzo (opz.):** ___
### Q1.2 — Accessibilità
- [ ] Facile accesso da casa (< 10 min a piedi)
- [ ] Accesso moderato (10-30 min)
- [ ] Accesso difficile (> 30 min)
### Q1.3 — Proprietà/Gestione
- [ ] Proprietà privata personale
- [ ] Orto comunitario
- [ ] Terreno affittato
- [ ] Altro: ___
## Descrizione
[Spazio libero per note]
## Data risposta
[TODAY]
```
### Fase 4: Registra Orto nel Registro
Aggiungere al registro centrale (o creare se non esiste):
**orti_registry.json** (localizzazione: `/home/<user>/.openclaw/workspace/Orti/orti_registry.json`)
```json
{
"orti": [
{
"orto_id": "[ORTO_ID]",
"name": "[ORTO_NAME]",
"provincia": "[PROVINCIA]",
"regione": "[REGIONE]",
"latitude": [LAT],
"longitude": [LON],
"zone": "[ZONE]",
"created_at": "[TODAY_ISO]",
"status": "init_complete",
"path": "/home/<user>/.openclaw/workspace/Orti/[ORTO_ID]"
}
]
}
```
### Fase 5: Genera Voce Audit Trail
Creare `log/audit_trail.md`:
```markdown
# Audit Trail — [ORTO_ID]
## Evento: Init
| Campo | Valore |
|-------|-------|
| **Timestamp** | [TODAY_ISO] |
| **Evento** | orto_init |
| **Status** | success |
| **Orto ID** | [ORTO_ID] |
| **Coordinatore** | Codex (skill: orto-init) |
| **Dettagli** | Progetto orto inizializzato. Config creata, struttura directory scaffoldata, template questionari generati. |
---
```
## Output (Risultato)
**Struttura creata:**
- Directory `/Orti/<orto_id>/` con tutte le sottodirectory ✓
- File `garden_config.md` (template iniziale) ✓
- File `blocco_1...5.md` (template questionari, vuoti) ✓
- File `audit_trail.md` (evento init) ✓
- Voce registro in `orti_registry.json`
**Output console (Markdown):**
```markdown
# ✅ Orto Inizializzato
**Orto ID:** [ORTO_ID]
**Nome:** [ORTO_NAME]
**Localizzazione:** [PROVINCIA], [REGIONE]
**Zona:** [ZONE] (Gelate: [ULTIMA_GELATA]—[PRIMA_GELATA])
**Area:** ??? m² (raccolto in Blocco 2)
**Path:** /home/<user>/.openclaw/workspace/Orti/[ORTO_ID]
## Prossimo Passo
→ Eseguire skill **orto-onboarding** per raccogliere profilo orto tramite 5 blocchi di questionario.
**Tempo stimato:** 15-30 minuti
```
## Gestione Errori
| Errore | Fallback |
|-------|----------|
| Directory già esiste | Saltare creazione; aggiornare registro e confermare con utente |
| Coordinate non valide | Usare default centro-Italia (Lazio) e flaggare per verifica utente |
| File registro mancante | Creare nuovo registro con questa voce |
| Formato orto_id non valido | Suggerire ID normalizzato e chiedere conferma |
## Riferimenti
Vedere `references/calendario_it.md` bundled per dettagli date di gelata e zone climatiche.
## Script
Questa skill usa uno script Python bundled per creazione directory deterministica:
```bash
scripts/init_new_orto_bundled.sh \
--id <orto_id> \
--name "<orto_name>" \
--provincia <provincia> \
--regione <regione> \
--lat <latitude> \
--lon <longitude>
```
Lo script è completamente self-contained e idempotente (safe da re-eseguire).
---
## Esempi
### Esempio 1: Orto Roma
**Input:**
```
orto_id: orto_roma_testaccio_001
orto_name: Orto Testaccio Roma
provincia: Roma
regione: Lazio
latitude: 41.8782
longitude: 12.4922
```
**Output:**
- Directory creata: `/Orti/orto_roma_testaccio_001/`
- Zona inferita: `centro` (ultima gelata ~15 apr, prima gelata ~25 ott)
- Status: Init completato, pronto per onboarding
---
### Esempio 2: Orto Milano
**Input:**
```
orto_id: orto_milano_lambro_001
orto_name: Orto Lambro Milano
provincia: Milano
regione: Lombardia
latitude: 45.4642
longitude: 9.1900
```
**Output:**
- Directory creata: `/Orti/orto_milano_lambro_001/`
- Zona inferita: `nord` (ultima gelata ~25 apr, prima gelata ~15 ott)
- Status: Init completato
---
## Assunzioni
1. Codex è in esecuzione su una macchina con accesso filesystem a `/home/<user>/.openclaw/workspace/`
2. L'utente ha permessi di scrittura per creare directory e file
3. La zona climatica è inferita solo da latitudine (semplificazione; da raffinare se necessario)
4. Tutti i template sono in lingua italiana
5. Template questionari sono stub vuoti; compilati durante skill orto-onboarding
## Checklist di Validazione
-`orto_id` è univoco nel registro
- ✓ Path directory non conflitto con orti esistenti
- ✓ Coordinate valide (lat/lon bounds)
- ✓ Provincia e Regione corrispondono divisioni amministrative italiane
- ✓ Tutti file template creati e leggibili
---
**Skill: orto-init** | Versione 1.0 | Status: Pronto per Produzione