vibe-coding-auto-resume

Reprise automatique de claude après le reset du quota.

English · 中文 · Français · Русский

Le problème

Les limites 5 h et hebdomadaires de Claude Code interrompent les longues boucles agentiques. Les déconnexions SSH tuent la session. On se réveille avec une tâche à moitié finie et un terminal périmé.

Ce qu'il fait

Installation (une fois)

git clone https://github.com/zhihuiyuze/vibe-coding-auto-resume.git ~/vibe
cd ~/vibe
./install.sh
source ~/.bashrc

Idempotent. Symlink les outils dans ~/.local/bin/, ajoute une fonction shell vibe, ajoute un snippet tmux. Ne touche jamais à ~/.claude/ ; ne lance jamais sudo à votre place.

Trois scénarios — choisissez le vôtre

1. Je démarre une nouvelle tâche Claude

cd ~/dev/<votre-projet>
vibe work                  # cd ici + ouvre une session tmux nommée
vibe run                   # remplace `claude` — mêmes flags, même UI

Utilisez Claude normalement. Quand le bloc 5 h est épuisé, vibe run dort jusqu'au reset et relance le même UUID de session automatiquement. La nouvelle modale interactive (What do you want to do? 1. Stop and wait …) est auto-gérée — seule l'option sûre « Stop and wait » est jamais sélectionnée.

Détacher : Ctrl+b d. Revenir : vibe work.

2. Je veux reprendre une session démarrée plus tôt

Si vous vous souvenez du UUID :

cd ~/dev/<votre-projet>
vibe work
vibe run --resume <session-uuid>

Sinon, mais c'est la dernière session sur ce projet :

vibe run --mode continue                    # équivalent `claude --continue` + reprise auto

Lister les candidats depuis les noms de fichier JSONL :

ls -t ~/.claude/projects/$(pwd | sed 's|/|-|g')/*.jsonl | head -5
# nom de fichier moins `.jsonl` = UUID de session

3. SSH a sauté — comment vérifier que ça tourne encore et y revenir

tmux possède le process, pas votre shell. SSH meurt, la session vit. Étape par étape :

ssh vous@server                             # 1. reconnexion
tmux ls                                     # 2. la session vibe-* est-elle toujours là ?
                                            #    attendu : ex. "vibe-default: 1 windows (...)"
vibe work                                   # 3. rattacher (ou `vibe work <name>` si nommée)
                                            #    vous atterrissez exactement où vous étiez

Une fois rattaché, scrollback pour voir ce qui s'est passé pendant votre absence : Ctrl+b [, puis PageUp / flèches, q pour sortir. Si un rate limit est tombé, le wrapper l'a géré — vous verrez [vibe-run] Sleeping … until … et la reprise dans le scrollback.

Jeter un œil sans rattacher (depuis une autre machine, juste un check) :

ssh vous@server "tmux ls"
ssh vous@server "tmux capture-pane -t vibe-default -p | tail -50"
ssh vous@server "vibe status"

Si tmux ls répond no server running, la machine a redémarré ou tmux s'est fait OOM-killer. La session tmux est perdue mais le log JSONL de Claude non — utilisez le scénario 2 ci-dessus pour reprendre.

Découvrir et jongler avec les sessions

vibe ls liste toutes les sessions tmux vibe-* avec leur cwd, l'état d'attachement, et un marqueur ← here quand le cwd correspond au vôtre :

$ vibe ls
  vibe-boldfox              /home/u/dev/projectA  ← here  [attached]
  vibe-feature-x            /home/u/dev/projectA  ← here
  vibe-quietowl             /home/u/dev/scratch

vibe work sans argument utilise désormais cette découverte avant de retomber sur le nom par hash de cwd :

vibe work <name> explicite saute la découverte — le nom gagne toujours. Pour les projets fréquents, donnez un nom explicite (vibe work projectA) — ça résiste aux renommages de chemin et c'est lisible dans vibe ls.

Optionnel : détection LLM plus intelligente

L1 (parsing JSONL) et L2 (regex sur le pane) couvrent les rate limits courants sans appel externe. Pour gérer les changements de wording du TUI et extraire les heures de reset que la regex manque, activez L3 :

echo 'DEEPSEEK_API_KEY=sk-...' >> ~/.config/vibe/env   # chmod 600, créé par l'installeur
chmod 600 ~/.config/vibe/env
source ~/.bashrc

Providers : DeepSeek (~0,05 $/bloc), Anthropic Claude Haiku, OpenAI gpt-4o-mini, Ollama (local, [untested]). Avec L3 off (défaut tant qu'aucune clé n'est ajoutée), rien ne quitte votre machine.

Comment marche la détection

Quand claude termine, trois signaux décident de la suite :

CoucheLitQuand elle brille
L1~/.claude/projects/<cwd>/*.jsonl — le log natif de ClaudeToujours actif. Suit l'usage de tokens et début/fin du bloc.
L2tmux capture-pane + scrollbackMessage de limite visible dans le panneau principal.
L2.5Scan texte du tail JSONLMessages de sous-agent qui ont défilé hors du panneau visible.
L3Classifieur LLM (DeepSeek / Claude Haiku / OpenAI / Ollama)Opt-in. Robuste aux changements de formulation ; extrait l'heure de reset sémantiquement.

L1 et L2/L2.5 sont 100 % locales. L3 est opt-in et coûte environ 0,05 $/bloc avec DeepSeek.

Flags CLI

vibe run [...args]
  --resume <uuid>        reprendre une session spécifique (passé une fois, utilisé pour tous les cycles)
  --threshold <0..1>     plafond souple opt-in (off par défaut — brûle le bloc)
  --max-cycles <n>       cycles de reprise par invocation (0 = illimité, défaut 1)
  --mode auto|session-id|continue
  --provider deepseek|claude|openai|ollama
  --no-l3                force L1+L2 seulement
  --dangerously-skip-permissions
  -p "prompt"
  ... tous les autres flags passent tels quels à claude

Configuration

Quoi
~/.config/vibe/envClés LLM + paramètres (chmod 600). Sourcé par le bloc bashrc avec set -a.
~/.local/state/vibe/<name>/Cache UUID par session. Isolé entre vibe work foo et vibe work bar.
<votre-projet>/HANDOFF.mdFichier de continuité inter-session. Créé seulement si vous lancez vibe setup-workspace depuis ce projet.

Ce qu'il ne fait jamais

Docs