skillopt-sleep — Adaptation OpenClaw de Microsoft SkillOpt-Sleep
Une boucle d'auto-amélioration nocturne qui lit nos transcriptions de session, extrait les patterns de workflow récurrents, les rejoue avec les modifications de skill proposées, et valide les propositions sur un ensemble de test réservé. Seules les améliorations qui dépassent la baseline sont mises en attente pour adoption humaine.
Quand l'utiliser
- Après la Weekly Skill Review d'Hermes (ou en remplacement)
- Quand un skill est utilisé 10+ fois/semaine et pourrait être optimisé
- Avant de promouvoir un nouveau skill de
skill-proposals/versskills/ - Quand un skill régresse en qualité observée
Ce qu'il fait (Un cycle)
harvest session transcripts -> mine recurring task patterns
-> replay each pattern (current skill vs proposed)
-> GATE: must improve held-out score
-> stage proposal
-> Ethan adopts (manual)
Aucune modification ne s'applique en live tant qu'Ethan n'adopte pas. Chaque adoption crée d'abord une sauvegarde.
Architecture
skills/skillopt-sleep/
├── SKILL.md # this file
├── config.json # engine config (backend, budgets, etc.)
├── run_sleep.py # entry point
└── skillopt_sleep_openclaw.py # DeepSeek/Ollama backend
Le moteur lui-même se trouve à ~/.openclaw/workspace/SkillOpt/skillopt_sleep/ (cloné de microsoft/SkillOpt).
Utilisation
# Run one cycle with current config
cd ~/.openclaw/workspace/skills/skillopt-sleep
python3 run_sleep.py
# Dry run (report only, no staging)
python3 run_sleep.py --dry-run
# Use a pre-built task set (recommended for testing)
python3 run_sleep.py --tasks tests/research-cron-tasks.json
Planification
python3 slash_sleep.py schedule --hour 3 --minute 17
python3 slash_sleep.py unschedule
python3 slash_sleep.py unschedule --all
Installe une entrée cron nocturne utilisant le planificateur SkillOpt-Sleep partagé. C'est une alternative au script externe run_sleep_cron.sh.
Backends alternatifs
Bien qu'OpenClaw utilise par défaut openclaw-deepseek (DeepSeek V4 Pro + Ollama), le moteur partagé supporte aussi :
--backend mock— déterministe, aucun coût API (pour tester)--backend claude— utilise Claude CLI--backend codex— utilise Codex CLI--backend copilot— utilise GitHub Copilot CLI
Ceux-ci peuvent être utilisés via le moteur directement (python -m skillopt_sleep).
Flags du moteur partagé
Lors de l'invocation directe du moteur, tous les flags standards sont disponibles :
--source codex/--source auto— harvest à partir des sessions Codex Desktop--tasks-file PATH— utiliser un ensemble de tâches pré-construit--target-skill-path PATH— cible SKILL.md explicite--max-tasks N/--max-sessions N— limiter la charge--progress— afficher la progression des phases--json— sortie lisible par machine--auto-adopt— auto-adopt si la gate réussit
Clés de configuration : preferences, gate_mode, gate_metric, dream_rollouts, recall_k, evolve_memory, evolve_skill.
Configuration (config.json)
Paramètres clés :
backend: "openclaw-deepseek"— notre backend personnalisémodel: "deepseek-v4-pro"— modèle optimiseuredit_budget: 3— max éditions bornées par nuitgate_mode: "on"— validation-gated (rejette les régressions)auto_adopt: false— nécessite qu'Ethan adopte manuellementmax_tasks_per_night: 12— limite pour contrôler le coût
Estimation de coût
Par nuit : 12 tâches × (1 tentative + 1 juge + 1 réflexion) × ~$0,005/1K tokens × ~3K tokens/appel ≈ $0,50-2,00/nuit.
Sorties
- Rapport :
~/.skillopt-sleep/state.json(totaux cumulés) - Mise en attente :
~/.skillopt-sleep/staging/<night>/report.md— résumé lisiblebest_skill.md— skill proposéedits.json— liste d'éditions bornéesbefore.md/after.md— diffs
Ensembles de test réservés (Phase 2)
Situés à tests/<category>-tasks.json. Chaque tâche contient :
prompt— la tâche récurrentereference— réponse gold en correspondance exacterubric— rubrique de score souple (0-1)domain— research/devops/wiki/etc.
Actuellement en construction pour 3 catégories :
- research-cron-output
- devops-infrastructure-check
- wiki-canonical-guide
Quand ne PAS l'utiliser
- Pour un workflow ponctuel (pas un pattern récurrent)
- Pendant une crise/incident (les humains doivent diriger)
- Quand les transcriptions de session ont < 24h (pas assez de signal)
- Pour les skills < 300 tokens (risque de sur-optimisation)