SkillOpt-Sleep : auto-évolution hors ligne pour un agent Codex local
SkillOpt-Sleep donne à l'agent Codex de l'utilisateur un cycle de sommeil. Pendant que l'utilisateur est hors ligne ou sur demande, il examine les sessions locales passées, réexécute les tâches récurrentes avec le budget de l'utilisateur, et consolide ce qu'il apprend dans la mémoire et les compétences. Il ne garde que les modifications qui passent une barrière de validation réservée, et les fichiers en direct changent uniquement après que l'utilisateur ait explicitement adopté une proposition par étapes. Il n'y a pas d'entraînement de poids de modèle.
Quand l'utiliser
Déclencher quand l'utilisateur veut l'une des actions suivantes :
- Codex apprendre des sessions passées ou s'améliorer au fur et à mesure de son utilisation;
- une exécution de sommeil/rêve/auto-amélioration hors ligne programmée ou sur demande;
- examiner les sessions passées et distiller les tâches récurrentes;
- consolider les retours dans la mémoire ou les compétences gérées;
- exécuter
status,harvest,dry-run,run, ouadoptpour SkillOpt-Sleep.
Le cycle
- Harvest - lire les transcriptions locales de sessions selon la configuration du moteur et les normaliser en synthèses de session.
- Mine - transformer les synthèses en
TaskRecords récurrents avec résultats et références vérifiables si possible. - Replay - réexécuter les tâches extraites hors ligne avec la compétence et la mémoire actuelles.
- Consolidate - réfléchir aux échecs et proposer des éditions limitées.
- Gate - accepter les éditions uniquement quand le score de validation réservé s'améliore.
- Stage - écrire la proposition sous
<project>/.skillopt-sleep/staging/<date>/; aucun fichier en direct ne change. - Adopt - uniquement après approbation explicite de l'utilisateur, copier les fichiers par étapes sur les fichiers en direct avec sauvegardes.
Comment le piloter
Invoquer le runner fourni via shell (Codex exec a accès au shell). Le runner trouve automatiquement le moteur et Python >= 3.10.
# pointer vers le repo s'il n'est pas auto-détecté depuis CWD :
export SKILLOPT_SLEEP_REPO=/path/to/SkillOpt-Sleep
bash "$SKILLOPT_SLEEP_REPO/plugins/run-sleep.sh" status --project "$(pwd)"
bash "$SKILLOPT_SLEEP_REPO/plugins/run-sleep.sh" harvest --project "$(pwd)"
bash "$SKILLOPT_SLEEP_REPO/plugins/run-sleep.sh" dry-run --project "$(pwd)" --backend mock
bash "$SKILLOPT_SLEEP_REPO/plugins/run-sleep.sh" run --project "$(pwd)" --backend codex
bash "$SKILLOPT_SLEEP_REPO/plugins/run-sleep.sh" run --project "$(pwd)" --source codex # harvest from Codex Desktop
bash "$SKILLOPT_SLEEP_REPO/plugins/run-sleep.sh" adopt --project "$(pwd)"
Les actions sont status, harvest, dry-run, run, adopt, schedule, et unschedule.
- Le backend par défaut est
mock, qui est déterministe et ne dépense aucun budget API. --backend codexutilise le budget Codex de l'utilisateur pour une véritable amélioration.--source codexlit les sessions archivées de Codex Desktop depuis~/.codex/archived_sessions; utiliser--codex-home /path/to/.codexsi l'archive se trouve ailleurs.- Garder
dry-run --backend mockcomme premier test de fumée sauf si l'utilisateur a explicitement demandé une exécution d'optimisation réelle.
Programmation
bash "$SKILLOPT_SLEEP_REPO/plugins/run-sleep.sh" schedule --project "$(pwd)" --hour 3 --minute 17
bash "$SKILLOPT_SLEEP_REPO/plugins/run-sleep.sh" unschedule --project "$(pwd)"
Installe une entrée cron nocturne. unschedule --all supprime chaque entrée gérée.
Tous les backends
--backend mock— déterministe, aucune dépense API (défaut)--backend claude— utilise le CLI Claude--backend codex— utilise le CLI Codex--backend copilot— utilise le CLI GitHub Copilot
Drapeaux supplémentaires
| Drapeau | Description |
|---|---|
--auto-adopt |
Adopter automatiquement si la barrière passe (défaut : étapes uniquement) |
--edit-budget N |
Max éditions limitées par nuit (défaut : 4) |
--lookback-hours N |
Fenêtre de moisson en heures (défaut : 72) |
--json |
Sortie JSON lisible par machine |
Clés de configuration (~/.skillopt-sleep/config.json)
preferences— règles libres pour l'optimiseurgate_mode—on(validation-gated, défaut) ouoff(greedy)gate_metric—hard|soft|mixed(défaut)dream_rollouts— >1 pour réflexion contrastive multi-rolloutrecall_k— >0 rappelle des tâches similaires passées de l'archive
Consolidation de la mémoire
Le cycle de sommeil consolide à la fois la mémoire (AGENTS.md / CLAUDE.md) et les compétences (SKILL.md) par défaut. Chacune est indépendamment basculable via les clés de configuration evolve_memory / evolve_skill. Les deux sont bridées par le même score de validation réservé.
Étapes
- Exécuter l'action demandée; capturer stdout.
- Pour
dry-runetrun, rapporter la baseline de validation tenue -> score candidat, action de barrière, nombre de tâches, nombre de sessions, et éditions proposées exactes. - Si un répertoire de staging est imprimé, lire
report.mdavant de résumer. runne stage qu'une proposition; aucun fichier en direct ne change jusqu'àadopt.- Offrir l'adoption uniquement après que l'utilisateur a examiné la proposition par étapes.
- Ne jamais éditer manuellement
AGENTS.md, la mémoire ou les compétences de l'utilisateur comme substitut àadopt; l'adoption est la limite de sécurité et écrit les sauvegardes d'abord.
Règles strictes
- Harvest est en lecture seule. Ne pas éditer les sessions archivées ou les transcriptions brutes.
- Garder les secrets bruts, les identifiants, les données privées de l'utilisateur, et les contenus de transcription non assainis hors des messages, journaux, artefacts générés, et commits.
- Montrer la preuve de validation avant de recommander l'adoption.
- Traiter les éditions générées comme des propositions, non comme source de vérité.
- Ne pas s'appuyer sur les invites personnalisées dépréciées ou les commandes slash
/sleeppour cette intégration Codex. Cette compétence est le point d'entrée.
Valider
python -m skillopt_sleep dry-run --project "$(pwd)" --backend mock --json
python -m skillopt_sleep.experiments.run_gbrain --backend codex \
--seeds brief-writer --data-root /path/to/gbrain-evals/eval/data/skillopt-v1 \
--nights 2 --limit-replay 3 --limit-holdout 3
Une compétence insuffisante passe de 0.00 à 1.00 sur un ensemble réservé; les éditions de l'optimiseur sont bridées sur la performance réelle des tâches.