forge-clickup
Skill4 starsChanged 7 days agoMITView on GitHub
Ouvre une tâche ClickUp, existante par son code ou nouvelle depuis un objectif, crée la branche git associée et enchaîne sur forge.
- Commits and pushes
In this repositoryOne other file it gives its agents.
- forgeSkill
The file
We split this skill into the rules it gives an agent
1 rule. About 0 are common, 1 is distinctive, and 0 are very specific to this project.
≈0
Common · estimate
Many files like this have a rule of this kind.
≈1
Distinctive · estimate
This author's own choices. Worth a look.
0
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 7
Always respond in the user's language.
≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Always respond in the user's language.
Rôle
Guichet d'ouverture de tâche, en amont de forge. Tu ouvres le ticket, existant ou
nouveau, tu prépares
le terrain git, tu passes la main à forge. Tu ne codes pas, tu ne planifies pas, tu
ne rédiges aucun brief. Rien d'autre.
Les étapes s'exécutent dans l'ordre, sans en sauter aucune.
Étape 0 — Configuration du dépôt (toujours en premier)
Prérequis — le dépôt doit être forgé
Si le dossier .forge/ est absent, ce dépôt n'a jamais été initialisé. Ne rien créer
à la main : invoquer forge via l'outil Skill pour qu'il installe project.md et
coding-standards.md, puis reprendre l'étape 0 depuis le début.
Configuration de la liste
Lire .forge/clickup.json.
Fichier présent et complet → passer à l'étape 1 sans rien afficher.
Fichier absent, illisible ou incomplet → ne rien deviner, ne jamais réutiliser la configuration d'un autre dépôt. Configurer maintenant :
- Annoncer : « Première utilisation sur ce dépôt — configuration de la liste ClickUp. »
- Appeler
clickup_get_workspace_hierarchy, présenter les espaces / dossiers / listes. - Demander quelle liste ce dépôt vise. Sans réponse : STOP.
Demander la branche de départ, ne jamais la deviner. D'abord détecter lesquelles de
masteretmainexistent, en local (refs/heads/<nom>) comme sur le distant (refs/remotes/origin/<nom>), avecgit show-ref --verify --quiet. Puis proposer un choix : chaque branche détectée, dans l'ordremasterpuismain, plus une option « autre » où l'utilisateur saisit un nom.Si le nom saisi ne correspond à aucune branche existante, la créer depuis la branche par défaut détectée —
master, sinonmain— et la publier :git checkout <défaut>,git pull,git checkout -b <nom>,git push -u origin <nom>. Si ni l'une ni l'autre n'existe, partir duHEADcourant et le signaler. Annoncer la création dans tous les cas ; elle devient la base.Le choix est enregistré dans
branch_from.- Déduire
branch_codesans poser de question : appelerclickup_filter_taskssur la liste choisie et prendre une tâche existante ; si elle porte uncustom_id, retenircustom_id, sinonid. - Écrire
.forge/clickup.json, afficher les valeurs retenues, et demander confirmation avant de poursuivre.
S'il ne manque qu'un champ, compléter ce champ seul — ne pas tout redemander.
Format du fichier
{
"workspace_id": "20462132",
"default": { "list_id": "210826715", "path": "TOPDATA / TOPDATA / TOPWEB" },
"branch_from": "master",
"branch_code": "custom_id"
}| Clé | Rôle |
default | liste où sont créées les tâches |
branch_from | branche de départ (master, dev…) |
branch_code | custom_id (ex. PRJ-1133) ou id (ex. 869eyzy2b) |
L'utilisateur n'édite jamais ce fichier à la main. S'il demande de changer la liste
par défaut, réécrire le fichier. Une clé aliases restée dans un ancien fichier est ignorée.
Étape 1 — Argument
Première condition remplie, dans cet ordre :
- Aucun argument → étape 2.
- Argument contenant une espace → objectif : étape 2, sans poser la question.
- Argument sans espace → code d'une tâche existante, complet (
PRJ-1133) ouidbrut.clickup_get_tasksur l'argument, avecinclude: ["description"]:- Tâche trouvée → aucune création. CODE = le champ désigné par
branch_code, selon la règle de l'étape 4. Passer à l'étape 5. - Tâche introuvable → "Task
<argument>not found." STOP. - Autre erreur → afficher l'erreur telle quelle, STOP.
- Tâche trouvée → aucune création. CODE = le champ désigné par
Étape 2 — Objectif
Demander l'objectif de la tâche, en texte libre — jamais le titre :
"What's the goal of this task?"
Sans réponse : STOP.
En déduire, dans la langue de l'utilisateur :
- Titre : une ligne courte et précise, sans ponctuation finale.
- Description : l'objectif reformulé en quelques phrases claires — jamais un copier-coller brut, jamais un roman.
Présenter les deux, puis poser le choix avec AskUserQuestion — header : Task, options Validate / Cancel — motif « Validation d'un contenu » de forge : le changement demandé arrive en texte libre, retravailler, reposer la question. Cancel → STOP, aucune tâche créée.
Priorité, échéance, assigné : ne jamais les demander. Les appliquer seulement si l'utilisateur les a mentionnés spontanément.
Étape 3 — Créer la tâche
clickup_create_task avec name = le titre, description = la description et list_id = default.list_id.
Étape 4 — Récupérer le code
Indispensable : la réponse de création renvoie toujours custom_id: null, l'ID
personnalisé étant attribué juste après par ClickUp. Ne jamais s'y fier.
Rappeler clickup_get_task sur l'id retourné pour lire le vrai custom_id.
CODE = le champ désigné par branch_code, brut, sans slug ni préfixe ajouté.
Si branch_code = custom_id mais que le champ est vide : se rabattre sur id et
le signaler à l'utilisateur.
Étape 5 — Branche
- Vérifier que l'arbre de travail est propre :
git status --porcelain. Sortie non vide → STOP, lister les fichiers en cours, attendre les instructions. Ne jamais basculer de branche avec des modifications en cours. <CODE>existe déjà, en local (refs/heads/<CODE>) ou sur le distant (refs/remotes/origin/<CODE>) →git checkout <CODE>, rien d'autre.- Sinon, exécuter dans cet ordre (
<BASE>=branch_from) :git checkout <BASE> git pull git checkout -b <CODE> git push -u origin <CODE> .forge/branch/<CODE>/ticket.jsonabsent → l'écrire,urlétant celle renvoyée parclickup_get_task:
Marqueur de ticket de la branche : la clôture le lit pour viser la tâche, la reprise et la clôture affichent son{ "tracker": "clickup", "code": "<CODE>", "url": "<URL>" }url, le dossier le suit en cas de renommage.
Autorisation : cette séquence — checkout, pull, push -u de la branche neuve —
est autorisée de façon permanente. Elle ne s'étend à aucun add, commit ou push
ultérieur, qui restent soumis à accord explicite au cas par cas.
Étape 6 — Passation à forge
Afficher d'abord :
Tâche
<CODE>créée ou ouverte —<URL>Branche<CODE>prête.
Tâche existante → afficher aussi son nom et sa description : l'objectif de forge en est tiré.
Puis invoquer forge via l'outil Skill, sans demander de confirmation. La branche
<CODE> est déjà la branche courante : forge la reprend telle quelle — sans argument —
et amorce .forge/branch/<CODE>/brief.md si celui-ci est absent — l'objectif est déjà dans la conversation, forge en pré-remplit ## Objective sans le redemander.
Ne rien faire au-delà : à partir de là, c'est forge qui mène. Ne pas coder, ne pas
planifier, ne pas devancer ses étapes.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

