Zentrales Management der AGENTS.md

• M. Borst • 4 min read
Tags: agents, md, management, sync
Groups:

Hast du schon einmal in einem Repository mit Cursor oder Copilot gearbeitet und plötzlich ganz andere Vorschläge bekommen als noch im letzten Repository, obwohl eigentlich dieselben Konventionen gelten sollten?

Genau diese Beobachtung hatten wir im Kunden-Projekt immer häufiger. Die Qualität und Verlässlichkeit der KI-gestützten Entwicklerwerkzeuge hängt maßgeblich davon ab, welche Regeln, Schreibstile und Konventionen sie berücksichtigen sollen. Genau dafür gibt es die AGENTS.md. Sie legt pro Repository fest, wie sich die KI-Tools verhalten sollen. Wenn diese Datei jedoch uneinheitlich gepflegt wird, führt das zwangsläufig zu unterschiedlichen KI-Ergebnissen, selbst wenn Teams eigentlich dieselben Standards verfolgen möchten.

Damit die AGENTS.md ihren Zweck zuverlässig erfüllen kann, muss sie überall aktuell, einheitlich und vollständig vorliegen. In der Realität gab es jedoch zahlreiche Varianten. Manche Repositories hatten ältere Stände, manche nutzten leicht abweichende Beschreibungen und in einigen existierte die Datei noch gar nicht. Das führte zu widersprüchlichen KI-Vorschlägen und insgesamt zu einer weniger konsistenten Entwicklererfahrung.

Um dieses Problem nachhaltig zu lösen, haben wir ein neues zentrales Repository erstellt. Dort wird die AGENTS.md künftig als gemeinsame und verlässliche Quelle gepflegt. Ein automatisierter Prozess synchronisiert diese Datei anschließend in alle konfigurierten Ziel-Repositories. Dadurch greifen Cursor, Copilot und andere Werkzeuge immer auf denselben Regelstand zu, unabhängig davon, in welchem Repository man arbeitet. Falls erforderlich, können weiterhin repositoryspezifische Varianten genutzt werden, wenn unterschiedliche Technologien oder fachliche Anforderungen dies notwendig machen.

name: Sync AGENTS.md to other repos

on:
  push:
    paths:
    - 'java/AGENTS.md'    # only trigger when this file changes
  workflow_dispatch:      # allow manual trigger from Actions tab

jobs:
  sync-java-agents-md:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout AI repo
      uses: actions/checkout@v4

    - name: Sync AGENTS.md to target repos
      uses: actions/github-script@v7
      with:
        github-token: ${{ secrets.REPO_SYNC_TOKEN }}
        script: |
          const fs = require('fs');
          const path = require('path');
          
          // 1) Read the source file
          const filePath = path.join(process.cwd(), 'java/AGENTS.md');
          const content = fs.readFileSync(filePath, 'utf8');
          const encodedContent = Buffer.from(content, 'utf8').toString('base64');
          
          // 2) Define the repos you want to sync to
          const targetRepos = [
            'repo-1',
            'repo-2',
            'repo-3',
            'repo-4',
            'repo-5',
            'repo-6',
            'repo-7',
            'repo-8',
            'repo-9'
          ];
          
          // 3) Function to upsert AGENTS.md in a repo root
          async function upsertAgents(owner, repo) {
            const filePath = 'AGENTS.md';
            let sha = undefined;
          
            // Try to get existing file (to keep history via sha)
            try {
              const { data: file } = await github.rest.repos.getContent({
                owner,
                repo,
                path: filePath,
              });
          
              // Only if it's a file
              if (!Array.isArray(file)) {
                sha = file.sha;
              }
            } catch (err) {
              if (err.status === 404) {
                // File does not exist yet – that's fine, we'll create it
                console.log(`AGENTS.md does not exist in ${owner}/${repo}, will create it.`);
              } else {
                throw err;
              }
            }
          
            // Create or update the file
            await github.rest.repos.createOrUpdateFileContents({
              owner,
              repo,
              path: filePath,
              message: 'Sync AGENTS.md from AI prompt library repo',
              content: encodedContent,
              sha,
              committer: {
                name: 'Agents Bot',
                email: '[email protected]',
              },
              author: {
                name: 'Agents Bot',
                email: '[email protected]',
              },
            });
          
            console.log(`Synced AGENTS.md to ${owner}/${repo}`);
          }
          
          // 4) Iterate over all target repos
          (async () => {
            for (const full of targetRepos) {
              const [owner, repo] = full.split('/');
              console.log(`Syncing to ${owner}/${repo}...`);
              await upsertAgents(owner, repo);
            }
          })();

Der technische Aufbau umfasst eine zentrale AGENTS.md Datei, eine einfache Konfiguration aller Ziel-Repositories und einen Sync-Prozess, der sämtliche Änderungen zuverlässig verteilt. Das Ganze ist als GitHub Actions Pipeline umgesetzt. Parallel entwickeln wir die Struktur der AGENTS.md im CDSE-Projekt weiter, damit die KI-Werkzeuge künftig auf einer klar definierten und für alle nachvollziehbaren Grundlage arbeiten können.

Auf diese Weise erreichen wir konsistentere KI-Ergebnisse, weniger manuellen Pflegeaufwand und eine deutlich einheitlichere Arbeitsweise. Je stärker wir KI-gestützte Entwicklungswerkzeuge einsetzen, desto wichtiger wird eine zentrale Steuerung der Regeln, auf denen sie basieren.

Weitere Verbesserungen wie der Sync spezifischer AGENTS.md Varianten sind bereits geplant.