Communitygithub.com

GigleAI/cavil-loop

Des agents de codage asynchrones pilotés par les labels GitHub — votre IA travaille en parallèle pendant que vous dormez.

Qu'est-ce que cavil-loop ?

Cette compétence transforme les commentaires des issues et PR GitHub en entrées et sorties pour votre agent IA local, grâce à un timer systemd, quelques scripts shell et deux labels GitHub. Elle est agnostique vis-à-vis de l'agent : le worker CLI est sélectionné via la variable `WORKER_AGENT` dans le fichier `coding-agent.config`, et un système de pilotes (drivers) permet d'intégrer Claude Code, OpenCode, Codex CLI ou Cursor. L'architecture sépare strictement les scripts, unités systemd, logs et états du projet hôte (ils résident dans le répertoire de la compétence, `~/.config/` et `~/.local/state/`). Utile pour les développeurs qui souhaitent automatiser des tâches de codage asynchrones, paralléliser le travail sur plusieurs issues/PR, et interagir avec l'IA directement depuis l'interface web GitHub ou l'application mobile GitHub.

Compatible avec✓Claude Code✓Codex CLI✓Cursor✓OpenCode
npx skills add GigleAI/cavil-loop

Demander à votre IA préférée

Ouvre une nouvelle conversation avec cette compétence d'agent déjà préchargée.

Documentation

coding-agent-work-loop

English · 中文

Transformez les commentaires des issues / PR GitHub en entrée et sortie de votre IA locale. Un timer systemd + quelques scripts shell + deux labels GitHub vous permettent de dialoguer avec l'IA directement depuis l'interface web GitHub (ou l'application iOS gh).

Cette compétence est conçue pour être agnostique vis-à-vis de l'agent. Le worker CLI est sélectionné par WORKER_AGENT=<nom> dans coding-agent.config ; les scripts de démon / dispatch passent par une couche pilote fine qui branche différents agents CLI. Pilotes intégrés : claude (par défaut, Claude Code), opencode (sst/opencode), codex (OpenAI Codex CLI), cursor (Cursor Agent CLI). Ajoutez le vôtre via scripts/drivers/<nom>.sh — voir docs/drivers.md.

Quand l'invoquer

L'utilisateur appelle cette compétence depuis l'environnement d'exécution de l'agent hôte via /coding-agent-work-loop <commande> ou une requête en langage naturel. Formes courantes :

  • "Installe ce démon sur le projet X" → exécuter le flux setup
  • "Quel est l'état de l'agent de codage ?" → exécuter le flux status
  • "Désactive l'agent de codage sur le projet X" → exécuter le flux disable

Ce que vous (l'agent) devez faire lors de l'invocation

setup (déploiement sur un projet hôte)

L'utilisateur vous donne un chemin de projet hôte (par ex. ~/github/monprojet). Étapes :

  1. Vérifier que le chemin existe et est un dépôt git (contient .git)
  2. Vérifier les dépendances : git, gh (doit être connecté via gh auth login), tmux, jq, flock, systemctl, ainsi que le worker CLI sélectionné par WORKER_AGENT (par défaut claude ; autres pilotes intégrés : opencode, codex, cursor). Chacun doit être résolu via command -v.
  3. Exécuter :
    bash "${CLAUDE_PLUGIN_ROOT:-$HOME/.agents/skills/coding-agent-work-loop}/setup.sh" <chemin-du-projet-hote>
    
    $CLAUDE_PLUGIN_ROOT est la variable d'environnement de la racine de la compétence injectée par Claude Code ; si absente, utiliser le chemin canonique ~/.agents/skills/coding-agent-work-loop.
  4. setup.sh affiche des instructions pour la suite une fois terminé — relayez-les textuellement à l'utilisateur.

status

L'utilisateur veut l'état. Étapes :

  1. systemctl --user list-timers 'coding-agent-poll@*' --no-pager — santé du timer
  2. systemctl --user list-units 'coding-agent-poll@*.service' --no-pager — dernière exécution
  3. Pour chaque fichier ~/.config/coding-agent-work-loop/*.conf enregistré :
    • tail -20 $STATE_DIR/poll.log (lire STATE_DIR depuis le fichier de configuration)
    • gh issue list --repo $REPO --label pending/agent + gh pr list --repo $REPO --label pending/agent
  4. Résumer pour l'utilisateur

cleanup (après acceptation / rejet d'une PR)

L'utilisateur a fusionné une PR ou souhaite abandonner le travail sur une issue. Étapes :

  1. Confirmer que l'issue est terminée (PR fusionnée ou fermée)
  2. Exécuter :
    bash "$CLAUDE_PLUGIN_ROOT/scripts/cleanup-issue.sh" <numéro-issue>
    
    Drapeaux optionnels : --force (nettoyer même si le worker est occupé), --keep-worktree (ne tuer que la session), --delete-branch (supprimer également la branche locale)

Ce que fait cleanup-issue.sh :

  • Vérification d'occupation (refuse par défaut sauf si --force)
  • Exécute le CLEANUP_HOOK au niveau du projet (configuré dans coding-agent.config, par ex. démanteler les ports tailscale, arrêter le serveur de dev)
  • Tue la session tmux du worker
  • Supprime l'arbre de travail (par défaut)
  • Supprime optionnellement la branche locale

disable

L'utilisateur souhaite arrêter un projet. Étapes :

  1. Confirmer le nom de l'instance (systemctl --user list-timers 'coding-agent-poll@*')
  2. systemctl --user disable --now coding-agent-poll@<clé>.timer
  3. Optionnel : supprimer les liens symboliques d'instance ~/.config/systemd/user/coding-agent-poll@<clé>.{service,timer} (laisser le modèle réel intact)
  4. Optionnel : supprimer ~/.config/coding-agent-work-loop/<clé>.conf
  5. Rapporter

Ce qui n'atterrit PAS dans le projet hôte

Après setup, l'arbre de travail du projet hôte reçoit seulement deux choses :

  1. Une ligne .gitignore (excluant coding-agent.config)
  2. Un coding-agent.config (gitignoré, configuration)

Les scripts, unités systemd, état, journaux résident tous en dehors du projet hôte (répertoire de la compétence + ~/.config/ + ~/.local/state/).

Architecture complète

Voir le README.md associé.

Liste des fichiers

  • setup.sh — amorcer un projet hôte
  • scripts/ — scripts de démon et de dispatch (jamais copiés dans le projet hôte)
  • prompts/ — modèles de prompt initial du worker (surchargeables via .agents/skills/coding-agent-work-loop/prompts/ du projet hôte)
  • systemd/ — unités modèles [email protected]/.timer ; setup les copie dans ~/.config/systemd/user/
  • coding-agent.config.example — modèle de configuration

Skills associés