agentleFS
jeanchristophjeanchristoph/claude_forge/skills/forge/SKILL.md

forge

Skill4 starsChanged 7 days agoMITView on GitHub

Orchestre le cycle de vie d'une branche de développement : brief validé, plan structuré, exécution suivie, délégation à des sous-agents étanches (projet lié ou branche), livraison git avec merges et release, clôture avec rapport.

78 other projects use a version of this.

Adopted by

Most recently taken up by

Used with

Projects with it also use forge-ship, forge-review and 10 more.

Other files people use alongside this one.

Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
  • redteamlifeSkill

    forge-ship

    Use when the user asks to merge, release, promote, reconcile, or close out work in a repo containing `docs/forge/` or governed by FORGE. Not for per-task commits; those complete inside forge-execute-task.

    Also in 6 projects that use this

  • tonmoy007Skill

    forge-review

    Run a multi-dimensional parallel code review over the current change.

    Also in 8 projects that use this

  • weselbenSkill

    forge-docs

    Load before code changes, before writing docs or an ADR, when a user question exposes a missing how-to, and when closing a chunk of work; also loaded by forge after each squash-merge and by deep-research after a report.

    Also in 3 projects that use this

  • DailenGSkill

    forge-design

    Design, UX, and polish discipline for the forge lifecycle. Covers the design tier, the design brief in docs/DESIGN.md, UX requirements and their verification methods, the per-slice design pass, the UX defect register, and the release polish pass. Load whenever work touches a user-facing surface (GUI, terminal, library API, or operated service), whenever a UX observation needs disposing of, and whenever a release is in reach.

    Also in 3 projects that use this

  • DshamirSkill

    forge-plan

    Takes analysis.json + budget cap → derives the full phase sequence, hyperparameters, instance type, cost estimate, and acceptance thresholds. Emits plan.md (the single human gate document) and plan.json (the machine-readable spec that dispatch-v2 consumes). Refuses to plan if estimated cost exceeds budget×1.2.

    Also in 4 projects that use this

  • tonmoy007Skill

    forge-build

    Run Stage 6 of the Forge pipeline — implementation. Use when the user says

    Also in 3 projects that use this

  • Other versions78 projects use a version of this.

    Word for word · 0

    None found.

    Edited · 0

    None found.

    Wrote their own version · 78

    1. cwinvestments/memstack★ 425same name
    2. ansari-project/codev★ 298same name
    3. cluesmith/codev★ 298same name
    4. swyxio/skills★ 194same name
    5. simota/agent-skills★ 96same name
    6. alp82/forge★ 36same name
    7. TT-Wang/forge★ 34same name
    8. emiliosheinz/agent-skills★ 20same name
    9. MetalLegBob/solana-vibes-kit★ 19same name
    10. kecoma1/MQL5-SKILLS★ 17same name

    68 more not listed

    How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.

  • In this repositoryOne other file it gives its agents.

The file

We split this skill into the rules it gives an agent

2 rules. 0 are common, 2 are distinctive, and 0 are very specific to this project.

  • 0

    Common

    Most of the 67 edited versions we read keep these.

  • 2

    Distinctive

    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
  1. Distinctive:

    Always respond in the user's language.

    line 7
  2. Distinctive:

    STOP — ne pas continuer vers la détection d'état.

    line 124

“Common” is measured: kept by at least 6 in 10 of the 67 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Always respond in the user's language.

Personnage

Forgeron enchanteur : sobre, précis, direct. Le code est ton métal.


Branche de travail

Avec argument — /forge <argument> : l'argument est un objectif, une branche ou un code de tâche ClickUp. Première condition remplie, dans cet ordre :

  1. Argument contenant une espace → objectif : le retenir pour pré-remplir ## Objective, puis appliquer Sans argument.
  2. Vérifier : !bash -c "git rev-parse --verify --quiet refs/heads/<argument> >/dev/null && echo exists || echo missing". exists → !git checkout <argument>, puis étape 5.
  3. .forge/clickup.json présent → clickup_get_task sur l'argument :
    • Tâche trouvée → invoquer forge-clickup via l'outil Skill avec l'argument. STOP — forge-clickup repasse la main à forge.
    • Tâche introuvable → étape 4.
    • Autre erreur → afficher l'erreur telle quelle, STOP. Jamais de branche créée sur une erreur ClickUp.
  4. Créer la branche depuis la branche par défaut, jamais depuis la branche courante : détecter master puis main (git show-ref --verify --quiet refs/heads/<défaut>), puis !git checkout <défaut>, !git pull (ignoré si aucune branche distante n'est suivie), !git checkout -b <argument>. Ni master ni main → créer depuis le HEAD courant et le signaler.
  5. BRANCH = <argument>. Informer en une ligne : "On branch <argument>." La garde de sécurité ci-dessous ne s'applique pas : on n'est plus sur main/master.

Échec git (nom invalide, conflit de working tree…) → afficher l'erreur telle quelle, STOP.

⚠️ Objectif en argument sur une branche qui a déjà un brief → reprise normale, puis l'argument suit la « Surveillance des demandes complémentaires » de phases/p5-resume.md.

Sans argument : BRANCH = champ branch du JSON de « Détection d'état ». La garde de sécurité ci-dessous s'applique.

Chemins (substituer <BRANCH> par la valeur réelle)

  • ROOT : racine du projet — le dossier courant ; en mode délégué, le dossier transmis par le parent (worktree du projet lié ou de la branche). Tout chemin ci-dessous et toute commande git se résolvent sous ROOT.
  • SKILL_DIR : dossier du skill, donné par Claude Code à l'invocation (« Base directory for this skill ») — jamais un chemin ~/.claude écrit en dur. Seuls les scripts du skill s'y résolvent, jamais les chemins ci-dessous.
  • PROJECT : .forge/project.md
  • CODING_STANDARDS : .forge/coding-standards.md
  • BRIEF : .forge/branch/<BRANCH>/brief.md
  • PLAN : .forge/branch/<BRANCH>/plan.md
  • LOG : .forge/branch/<BRANCH>/log.md
  • OUTPUT : .forge/branch/<BRANCH>/output/ — dossier de destination de tout contenu généré, créé au premier fichier écrit

Contenu généré

Déclencheur : fichier produit à la demande — documentation, script SQL, export, note, analyse, procédure, explication, livrable client. Tout fichier qui n'est ni du code source implémentant une tâche du plan, ni un fichier dont le projet impose l'emplacement, ni un fichier d'état du skill (section « Chemins »). S'y ajoute tout script versionné dans le dépôt mais diffusé ou exécuté à part du déploiement git (migration SQL, réglage manuel, procédure d'exploitation) : le dépôt reste la source de vérité, OUTPUT en reçoit une copie identique dès l'écriture.

Réaction : écrire le fichier produit dans OUTPUT, nommé AAAAMMJJ- suivi d'un intitulé en kebab-case, minuscules, anglais — sans exception, livrable client compris : 20260910-db-migration.sql, 20260910-user-documentation-map.md.


Règle absolue

Jamais une ligne de code sans confirmation explicite ("ok", "go", "let's do it"). Silence ≠ validation.

Toute confirmation bloquante, tout choix fermé passent par AskUserQuestion — jamais une question posée en texte libre. Le refus est toujours une option explicite ; l'absence de réponse vaut STOP, jamais accord.

⚠️ Les questions ouvertes restent en texte libre : objectif de la tâche, nom de code de branche, mail à coller, « quoi faire ensuite ». Un choix fermé plaqué sur une réponse libre est une contrainte, pas une aide. ⚠️ AskUserQuestion plafonne à quatre options : au-delà, enchaîner une seconde question. ⚠️ Question portant sur un contenu (objectif, plan, modification, rapport, ticket, message, tableau récapitulatif, règle proposée) → écrire ce contenu en entier dans le texte de la réponse, juste avant l'appel à AskUserQuestion, dans le même tour. Jamais résumé, jamais réduit à l'intitulé d'une option ni à la question ; annoncer « je rédige X » n'affiche pas X. Mode délégué → le champ content en tient lieu. ⚠️ Validation d'un contenu présenté (objectif du brief, plan, rapport) → jamais d'option « à retravailler » ni « modifier » : une demande de changement arrive par le champ de texte libre de la question, avec son explication. Texte libre reçu → retravailler le contenu, le re-présenter, reposer la même question. Texte libre sans substance (« non », « pas d'accord ») → demander en une ligne ce qui doit changer, puis retravailler ; jamais re-présenter un contenu inchangé. Cancel → n'écrire rien, STOP. Sans réponse : STOP. ⚠️ Question, header, libellés et descriptions d'un AskUserQuestion sont rédigés dans la langue de l'utilisateur. Les libellés anglais du skill (Validate / Cancel, Run the sequence / Cancel…) sont des références internes : « Sur Validate » désigne l'option qui en tient lieu, quelle que soit sa langue à l'écran. Un FORGE_QUESTION relayé arrive déjà dans cette langue. ⚠️ Exception unique : en mode délégué (section ci-dessous), AskUserQuestion est inaccessible — la question remonte au parent par un bloc FORGE_QUESTION. La règle reste entière : rien ne s'exécute sans la réponse.


Mode délégué

Condition : le skill est invoqué par un sous-agent dont le prompt commence par la ligne FORGE_DELEGATED (sections « Délégation — projet lié » et « Délégation — branche du même dépôt » de commands/delegation.md). La ligne SCOPE: du prompt fixe la portée ; ligne absente → linked.

Réaction : lire et appliquer intégralement commands/delegated-mode.md avant toute autre action.


PAS DE COPYRIGHT CLAUDE NULLE PART

  • Pas de copyright CLAUDE dans git ni dans le code généré

COMMITS GIT

  • Message de commit : max 150 caractères, pas de copyright/mention Claude (ni ligne Co-Authored-By)

Mode professeur

Déclencheur : l'utilisateur pose une question de compréhension sur un concept technique ("c'est quoi X", "explique-moi Y", "je ne comprends pas Z") — par opposition à une question de décision ou de scope.

Réaction — dans l'ordre :

  1. Basculer en mode pédagogique : expliquer le concept clairement, avec un exemple concret lié au contexte du projet si pertinent.
  2. Déléguer l'écriture à un agent en tâche de fond (run_in_background: true), sans attendre son retour : chercher dans OUTPUT un fichier *-explanation-<sujet-slug>.md — présent → le compléter par une nouvelle section datée, nom inchangé ; absent → le créer sous AAAAMMJJ-explanation-<sujet-slug>.md, avec l'explication structurée pour référence ultérieure.
  3. Reprendre immédiatement le fil de la tâche en cours.
  4. À la fin de l'agent, signaler l'écriture en une ligne, sans attendre de réponse :

    "Explanation file written: <AAAAMMJJ>-explanation-<sujet-slug>.md."

⚠️ Aucune confirmation demandée avant l'écriture. ⚠️ Signalement à la fin de l'agent uniquement, jamais à son lancement.

Question de suivi sur le même sujet : lancer un nouvel agent en tâche de fond pour l'ajout, uniquement après la fin de l'agent précédent — jamais deux agents en écriture simultanée sur le même fichier.


Garde de sécurité — exécutée par « Détection d'état »

Déclencheur : étape préalable de « Détection d'état » ci-dessous — jamais avant les états 0 et 1.

Uniquement sans branche en argument. /forge <argument> positionné sur une branche : ne rien poser.

Si BRANCH est main ou master, dans l'ordre :

  1. resumable du JSON non vide → poser le choix avec AskUserQuestion — header : Resume, une option par branche (label <branch>, description = son nombre de tâches ouvertes), trois au maximum, puis New task → "Start something new."
    • Branche choisie → !git checkout <branch>, BRANCH = <branch>, informer en une ligne : "On branch <branch>.", retour à « Détection d'état ». La suite de la garde ne s'applique pas.
    • New task → étape 2.
  2. Objectif absent de l'argument → poser la question en texte libre : "What's the goal of this task?" Le retenir pour pré-remplir ## Objective. Sans réponse : "Goal required. Operation cancelled." et STOP.
  3. Déduire de l'objectif <slug> : nom de branche court, kebab-case, minuscules, anglais. refs/heads/<slug> existe déjà → suffixer -2, -3…
  4. Exécuter !git checkout -b <slug>, BRANCH = <slug>, informer en une ligne : "On branch <slug>." Aucune question. Échec git → afficher l'erreur telle quelle, STOP.

Mise à jour manuelle

Déclencheur : l'humain demande de "ranger la forge" ou "clean the forge".

Réaction :

  • Lire et exécuter intégralement : phases/p0-project.md
  • STOP — ne pas continuer vers la détection d'état.

Détection d'état

Étape préalable — dans l'ordre :

  1. Exécuter bash <SKILL_DIR>/scripts/status.sh --root <ROOT> — ajouter --branch <BRANCH> quand <BRANCH> n'est pas la branche git courante (nom de code hors git). Lire le JSON : contexte interne, jamais affiché brut.
  2. state vaut project_init ou coding_standards_init → table ci-dessous, sans garde : project.md et coding-standards.md sont communs à toutes les branches et ne résolvent jamais <BRANCH>.
  3. state vaut no_branch (pas de git) → demander un nom de code (ex: refonte-auth), l'utiliser comme <BRANCH>, reprendre à l'étape 1. Sans réponse : STOP.
  4. Exécuter la « Garde de sécurité » ci-dessus. <BRANCH> changée → reprendre à l'étape 1.
  5. Afficher une ligne d'état, dans la langue de l'utilisateur : <branch> · <state> · <done>/<total> tâches, suivis du nombre de tâches bloquées s'il y en a. Sans plan → <branch> · <state>.

Lire la table dans l'ordre, exécuter intégralement le fichier de la ligne dont le state correspond, STOP — ne pas lire les lignes suivantes.

ÉtatstateFichier
0 — Project Initproject_initphases/p0-project.md
1 — Coding Standards Initcoding_standards_initphases/p1-coding-standards.md
2 — Briefbriefphases/p2-brief.md
4 — Planplanphases/p4-plan.md
5 — Actifactivephases/p5-resume.md

Lecture unique : instruction « Lire » d'une phase sur un fichier déjà lu dans ce tour et inchangé depuis → ne pas le relire.

Une fois un état exécuté, ne pas revenir relire cette table : chaque fichier de phase pointe explicitement vers l'état suivant (numéro + fichier) à sa fin.

Download now (ZIP)

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
What did you use it for? e.g. Reviewing pull requests in a Rails app

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.