# Én instruktionsfil til Claude Code, Codex og Cursor i 2026

> Én fælles kilde til Claude Code, Codex og Cursor i 2026: hvornår Claude Code selv læser AGENTS.md, import af @AGENTS.md i CLAUDE.md, et symbolsk link og /init.

Source: https://ailoot.ai/blog/da/agents-md-claude-md-one-instruction-file/
Canonical: https://ailoot.ai/blog/da/agents-md-claude-md-one-instruction-file/
Language: da
Publisher: Ailoot (https://ailoot.ai/)
Translation: guide-004
Revision: sha256-697d0e35b2a32f0b0eb94883dbd2175980c3f1559bae7ad8abb5bacc0c2c76af


Se [Ailoot-dokumentationen](https://ailoot.ai/docs/) for oplysninger om tjenesten.

## Hvad ændrer sig, når du bruger Claude Code, Codex og Cursor sammen?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Key takeaway">

Det vigtigste

I 2026 består en typisk vibe-koders opsætning ikke af ét værktøj, men af 3–5. Claude Code som hovedværktøj, Codex til lange autonome opgaver og Cursor til hurtige redigeringer i IDE'en. Hvert værktøj har sin egen instruktionsfil: `CLAUDE.md`, `AGENTS.md`, `.cursorrules`. Hvis du holder dem synkroniseret manuelt, redigerer du én linje fem steder, glemmer at opdatere Cursor, og en uge senere giver Claude og Codex forskellige resultater på den samme prompt.

</div>

I eksemplet, der beskrives, er Claude Code hovedværktøjet, mens Codex og Cursor bruges til bestemte opgaver. Min `CLAUDE.md` har omkring 250 linjer instruktioner: hvad der skal læses og i hvilken rækkefølge, hvad der ikke må røres, hvilke kommandoer der skal bruges til udrulning, og reglerne for commit-formatering. Da jeg først prøvede Codex CLI på projektet, kendte det ingen af reglerne: det kørte `git push --force`, snusede rundt i `.env` og omdøbte filer skødesløst.

Jeg kopierede først `CLAUDE.md` til `AGENTS.md` manuelt. To uger senere opdagede jeg, at projektet allerede havde fire versioner af den samme instruktion: i `CLAUDE.md`, `AGENTS.md`, `.cursorrules` og `.windsurf/rules/`. De var alle lidt forskellige. Det er ikke et Claude- eller Cursor-problem; det er den grundlæggende fælde i ethvert system med flere kilder til sandhed. Jeg behandler problemet mere indgående i [guiden til arbejde med flere agenter](https://ailoot.ai/blog/da/claude-code-codex-together/).

I juni 2026 gav Anthropics dokumentation om Claude Code-hukommelse ét svar: en fælles fil plus en import. Siden september 2026 læser Claude Code selv `AGENTS.md`, hvis projektet ikke har en `CLAUDE.md`, og en import er nødvendig, når du har regler, der gælder specifikt for Claude. Nedenfor forklarer jeg, hvornår én enkelt `AGENTS.md` er nok, hvordan du konfigurerer en import, og hvordan du adskiller fælles regler fra Claude-specifikke regler.

## Læser Claude Code selv AGENTS.md?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Key takeaway">

Det vigtigste

Ja, fra og med version 2.1.277, der blev udgivet den 18. september 2026, men kun hvis der ikke findes nogen `CLAUDE.md`, `.claude/CLAUDE.md` eller `CLAUDE.local.md` i arbejdsbiblioteket eller over det. Hvis `CLAUDE.md` findes, læser Claude Code som standard kun den fil, og `AGENTS.md` medtages med linjen `@AGENTS.md` i `CLAUDE.md` eller med et symbolsk link. Adfærden ændres i `/config` under Project instructions. Før september læste Claude Code slet ikke `AGENTS.md`, og import var den eneste mulighed.

</div>

Før september 2026 var svaret “nej”. Issue \#6235, hvor der blev bedt om understøttelse af AGENTS.md, havde været åben siden august 2025 og blev lukket den 17. august 2026. Dokumentationen om hukommelse pegede hele tiden på én løsning: Opret en CLAUDE.md, og medtag `AGENTS.md` i den som en import. Fra og med version 2.1.277 siger dokumentationen noget andet:

<figure>
<blockquote>
<p>Claude Code kan læse <code>AGENTS.md</code> som projektinstruktioner, så et repository, der allerede er sat op til andre agenter, fungerer uden <code>CLAUDE.md</code>, en import eller konfiguration.</p>
</blockquote>
<figcaption>— Anthropic, https://code.claude.com/docs/en/memory#agents-md</figcaption>
</figure>

Præcis hvad Claude Code læser, afhænger af, hvilke filer der findes i projektet:

| Filer i projektet | Hvad Claude Code læser |
|----|----|
| `AGENTS.md`, uden `CLAUDE.md` eller `CLAUDE.local.md` i arbejdsbiblioteket eller over det | `AGENTS.md` |
| `AGENTS.md` og `CLAUDE.md` (eller `CLAUDE.local.md`) i arbejdsbiblioteket eller over det | Kun `CLAUDE.md` |
| `CLAUDE.md` med linjen `@AGENTS.md` | `CLAUDE.md` og `AGENTS.md` indeni via importen |

I denne kontrol tæller `CLAUDE.md`, `.claude/CLAUDE.md` og `CLAUDE.local.md` i arbejdsbiblioteket og alle biblioteker over det. En personlig `~/.claude/CLAUDE.md`, en centralt administreret virksomhedsfil og regler fra `.claude/rules/` tæller ikke med: de indlæses sammen med `AGENTS.md`.

Når der ikke findes nogen `CLAUDE.md`, læser Claude Code alle `AGENTS.md`- og `.claude/AGENTS.md`-filer i arbejdsbiblioteket og over det ved opstart, og indlæser en `AGENTS.md` i et underbibliotek, når det åbner en fil i dette underbibliotek. `@path`-importer i `AGENTS.md` virker også. Claude Code læser ikke `AGENTS.local.md`, `AGENTS.override.md` eller indholdet af biblioteket `.agents/`.

Fælden: En personlig `CLAUDE.local.md` tæller også. Opretter du en for at gemme dine ikke-committede regler, holder Claude Code lydløst op med at læse `AGENTS.md`. Indstillingen nedenfor er løsningen.

Adfærden ændres i `/config` under Project instructions:

| Indstilling | Hvad Claude Code læser |
|----|----|
| `claude-md-or-agents-md` (standard) | `CLAUDE.md`, eller, hvis hverken den eller `CLAUDE.local.md` findes, `AGENTS.md` |
| `claude-md-and-agents-md` | Begge filer: i hvert bibliotek først `CLAUDE.md`, derefter `AGENTS.md` |
| `claude-md` | Kun `CLAUDE.md` |
| `managed-only` | Kun virksomhedens centralt administrerede `CLAUDE.md` og automatisk hukommelse |

Hvis du vil beholde `CLAUDE.local.md` uden at miste `AGENTS.md`, skal du vælge `claude-md-and-agents-md`. Der sker ingen dobbelt indlæsning: Hvis `AGENTS.md` allerede er inkluderet via linjen `@AGENTS.md` eller et symbolsk link, indlæser Claude Code den ikke igen, uanset indstillingen.

Du kan kontrollere, om filen blev indlæst, med kommandoen `/memory`: fra og med version 2.1.280 vises stien til `AGENTS.md` på listen. I versioner før 2.1.277 og i sessioner, hvor det indbyggede `agents-md`-plugin er deaktiveret, læser Claude Code kun `CLAUDE.md`, og der findes ikke noget Project instructions-element i `/config`. Før version 2.1.281 fungerede sessioner via Amazon Bedrock og sessioner med deaktiveret telemetri på samme måde. I den første session efter opdatering fra en ældre version bliver `AGENTS.md` muligvis heller ikke indlæst; det fungerer fra den næste session.

Hvad betyder det for en opsætning med én fil? Hvis du ikke har regler, der kun gælder Claude, kan du springe `CLAUDE.md` over: `AGENTS.md` er nok, og Claude Code, Codex og Cursor læser den. Hvis du har sådanne regler (plan mode for risikofyldte biblioteker, skills, hooks), skal du bruge `CLAUDE.md`, og så holder Claude Code op med selv at læse `AGENTS.md`. Medtag derefter `AGENTS.md` i `CLAUDE.md` med linjen `@AGENTS.md`; denne opsætning fungerer præcis som før september. Den hjælper også med ældre versioner af Claude Code. Jeg forklarer det nærmere nedenfor.

## Hvordan importerer du @AGENTS.md i CLAUDE.md?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Key takeaway">

Det vigtigste

En import er nødvendig, når projektet har en `CLAUDE.md`: Når den findes, læser Claude Code som standard ikke selv `AGENTS.md`. Skriv linjen `@AGENTS.md` øverst i filen `CLAUDE.md` for at konfigurere det. Når Claude Code starter en session, indsætter det indholdet af `AGENTS.md` i stedet for linjen og læser resultatet som én samlet tekst. Under importen kan du tilføje et afsnit med overskriften “Claude Code” med regler, der kun gælder Claude. Importer fungerer med relative og absolutte stier og kan indlejres op til fire niveauer dybt.

</div>

Et minimalt fungerende eksempel fra den officielle dokumentation:

```markdown
@AGENTS.md

## Claude Code

Use plan mode for changes under `src/billing/`.
```

Sådan fungerer det. Den første linje, `@AGENTS.md`, er en importdirektiv. Når Claude Code fortolker `CLAUDE.md` ved starten af en session, finder det importen og indsætter hele indholdet af `AGENTS.md` i stedet for den. Derefter kommer overskriften `## Claude Code`: Det er blot markdown, men fungerer som et afsnit med “Claude-specifikke tilføjelser”. Under den står en regel, der kun gælder Claude Code: Brug plan mode til ændringer i faktureringsbiblioteket. Codex CLI eller Cursor åbner slet ikke denne fil; de bruger den almindelige `AGENTS.md`.

Et citat fra dokumentationen om, hvordan importer fungerer:

<figure>
<blockquote>
<p>CLAUDE.md-filer kan importere yderligere filer ved hjælp af syntaksen <code>@path/to/import</code>. Importerede filer udvides og indlæses i konteksten ved sessionens start sammen med den CLAUDE.md-fil, der henviser til dem.</p>
</blockquote>
<figcaption>— Anthropic, https://code.claude.com/docs/en/memory</figcaption>
</figure>

Et par praktiske detaljer:

- **Relative og absolutte stier.** `@AGENTS.md` er relativ til filen, der indeholder importen. `@/Users/me/shared/rules.md` eller `@~/.claude/personal.md` er absolutte stier. Jeg bruger `@~/.claude/personal.md` til personlige præferencer, som jeg ikke vil lægge i repositoryet.
- **Dybde på fire niveauer.** `AGENTS.md` kan importere `@docs/coding-style.md`, og `coding-style.md` kan importere endnu en fil, op til fire niveauer. Det er nok til enhver reel struktur.
- **Backticks blokerer importer.** Hvis teksten siger `` `@README` ``, er det blot en omtale af navnet, ikke en import. Det er nyttigt, når man forklarer læsere, hvordan importer fungerer, uden at udløse en.
- **Godkendelse af filer uden for projektet.** Hvis en import peger uden for arbejdsbiblioteket, som `@~/.claude/personal.md`, viser Claude Code første gang en dialog med en liste over disse filer. Hvis du afslår, forbliver eksterne importer deaktiveret, og dialogen vises ikke igen. `@AGENTS.md` i projektets rod udløser ikke en dialog. Det beskytter dig mod ved et uheld at indlæse en uvedkommende fil i konteksten.

Efter jeg skiftede til denne opsætning i det beskrevne projekt, blev min `CLAUDE.md` forkortet fra 250 linjer til 60: `@AGENTS.md` plus fem til syv regler, der kun gælder Claude Code (plan mode for risikofyldte biblioteker, hvad man ikke må røre i adminområdet, og hvordan commits skal formuleres). Alt fælles ligger i `AGENTS.md`, som Codex og Cursor læser.

## Hvornår bør du vælge et symbolsk link, og hvornår en import?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Key takeaway">

Det vigtigste

Anthropic tilbyder to mekanismer: en import via `@AGENTS.md` eller et symbolsk link, `ln -s AGENTS.md CLAUDE.md`. Et symbolsk link er enklere – det er blot et alias og kræver ingen filændringer. Men det har tre ulemper: Windows kræver administratorrettigheder, du kan ikke tilføje Claude-specifikke regler til `CLAUDE.md`, og Git viser nogle gange et symbolsk link som rod i diffen. Import er den universelle metode. Hvis du ikke har regler, der kun gælder Claude, behøver du fra og med version 2.1.277 ingen af delene: Claude Code læser selv `AGENTS.md`.

</div>

Dokumentationen viser det symbolske link sådan her:

```bash
ln -s AGENTS.md CLAUDE.md
```

Og lige efter giver den en ærlig advarsel om Windows:

<figure>
<blockquote>
<p>Hvis du eller andre, der kloner repositoryet, arbejder på Windows, skal du bruge importen <code>@AGENTS.md</code>. Oprettelse af et symbolsk link kræver administratorrettigheder eller Developer Mode, og Git uden aktiveret <code>core.symlinks</code> checker et committet link ud som en almindelig tekstfil, så du ender med en `CLAUDE.md` på én linje i stedet for instruktionerne i den kopi.</p>
</blockquote>
<figcaption>— Anthropic, https://code.claude.com/docs/en/memory</figcaption>
</figure>

Sammenligningstabel:

| Kriterium | Importen `@AGENTS.md` | Symbolsk link `ln -s` |
|----|----|----|
| **Fungerer på Windows uden administratorrettigheder** | ja | nej (Developer Mode kræves) |
| **Kan tilføje regler, der kun gælder Claude** | ja, under importen | nej, filen er identisk |
| **Vises i Git som almindelig markdown** | ja | som et link (afhænger af `core.symlinks`) |
| **Kan importere flere filer** | ja, op til fire niveauer | nej, én til én |
| **Caching/ugyldiggørelse i Claude Code** | standard for CLAUDE.md | fungerer, men symbolske links har metaproblemer |
| **Standardvalg** | egnet til alle | kun hvis brug på tværs af platforme ikke betyder noget |

Jeg bruger importer i det beskrevne projekt. Årsagerne:

1.  **Teamet bruger forskellige platforme.** Jeg bruger Mac; i eksemplet er teamet omtrent ligeligt fordelt mellem Windows og Mac. Hvis der er et symbolsk link i repositoryet, bliver det for Windows-brugere uden Developer Mode checket ud som en almindelig tekstfil med én linje, `AGENTS.md`. Det skaber mærkelige fejl: Nogle gange virker reglerne, andre gange ikke, og det er uklart hvorfor.
2.  **Jeg vil have Claude-specifikke regler.** Under `@AGENTS.md` har min `CLAUDE.md` et afsnit med overskriften “Claude Code” og regler: Brug `--effort high` til arkitekturopgaver, kør `npm run build` før `git push`, og kald ikke `/api/v1/deploy` manuelt. Codex forstår ikke disse kommandoer.
3.  **Det er nemmere at fejlfinde.** Når noget går galt, åbner jeg `CLAUDE.md` og ser importen og mine tilsidesættelser. Et symbolsk link har ikke noget “dette blev tilføjet her”. Se [guiden til sikker tilstand](https://ailoot.ai/blog/da/claude-code-safe-mode-recovery/) for mere om fejlfinding af Claude Code-indstillinger.

Hvis du ikke har Claude-specifikke regler, er et symbolsk link ikke længere nødvendigt fra og med version 2.1.277: Slet `CLAUDE.md`, så læser Claude Code selv `AGENTS.md`. Behold kun det symbolske link, hvis nogen på teamet bruger en version ældre end 2.1.277 og ikke kan opdatere. Hvis du har Claude-specifikke regler, er en import mere praktisk i ni ud af ti tilfælde.

## Hvad læser Codex, Cursor, Copilot, Windsurf og Gemini CLI?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Key takeaway">

Det vigtigste

Hvert værktøj læser sin egen fil, nogle gange mere end én. Claude Code læser `CLAUDE.md` og har siden september 2026 også læst `AGENTS.md`, hvis projektet ikke har en `CLAUDE.md`. Codex CLI læser `AGENTS.md` plus `AGENTS.override.md`. Cursor læser enten det ældre `.cursorrules`-format eller det nyere `.cursor/rules/*.mdc`, og siden sommeren 2026 læser det også `AGENTS.md`. Copilot læser `.github/copilot-instructions.md` eller `.github/instructions/*.instructions.md`. Windsurf læser det ældre `.windsurfrules` eller det nyere `.windsurf/rules/`. Gemini CLI læser `GEMINI.md`. Aider og Cline har allerede taget `AGENTS.md` i brug.

</div>

Et overblik over de syv vigtigste værktøjer (baseret på hvert værktøjs officielle dokumentation):

| Værktøj | Vigtigste instruktionsfil | Alternativer | Læser AGENTS.md? |
|----|----|----|----|
| **Claude Code** | `CLAUDE.md` | `~/.claude/CLAUDE.md`, `./.claude/CLAUDE.md`, administreret politik | ja, hvis projektet ikke har en `CLAUDE.md` (siden 2.1.277), ellers via en import |
| **Codex CLI** (OpenAI) | `AGENTS.md` | `AGENTS.override.md` | ja (indbygget) |
| **Cursor** | `.cursor/rules/*.mdc` | `.cursorrules` (udfaset) | ja |
| **GitHub Copilot** | `.github/copilot-instructions.md` | `.github/instructions/*.instructions.md` | via udvidelser |
| **Windsurf** | `.windsurf/rules/` | `.windsurfrules` (udfaset) | ja |
| **Gemini CLI** | `GEMINI.md` | \- | nej |
| **Aider, Cline, opencode** | `AGENTS.md` | \- | ja (indbygget) |

Hvad følger der af dette? Hvis et repository har `AGENTS.md` (plus en `CLAUDE.md` med en import, når Claude-specifikke regler er nødvendige), får fem af de syv værktøjer automatisk opdaterede instruktioner. Cursor og Windsurf, som har deres egne indbyggede filer, kan enten blive, som de er (`AGENTS.md` læses også af dem), eller få tilføjet en `@AGENTS.md`-import – men deres syntaks er forskellig og understøttes ikke altid.

Den enkleste strategi for et nyt projekt:

1.  **Læg alle fælles regler i `AGENTS.md`** – 95 % af reglerne hører hjemme der.
2.  **Opret `CLAUDE.md`, hvis du har brug for regler, der kun gælder Claude:** Skriv `@AGENTS.md` på første linje, og tilføj derefter et afsnit med Claude-specifikke regler nedenunder. Hvis der ikke er sådanne regler, er `CLAUDE.md` unødvendig; Claude Code har selv læst `AGENTS.md` siden version 2.1.277.
3.  **Behold `.cursor/rules/` til Cursor** i de sjældne tilfælde, hvor noget specifikt for Cursor er nødvendigt (kommandoerne `@Codebase` og `@Docs`).
4.  **Gør det samme for Windsurf:** Glem den gamle `.windsurfrules`; brug kun den nye `.windsurf/rules/`, når du har brug for mønstre til dens syntaks.

Denne tilgang giver 80 % af udbyttet for 20 % af arbejdet. Min erfaring er, at det bliver besværligt at vedligeholde mere end to kilder til sandhed (fælles regler plus Claude-specifikke), når man arbejder med blandede teams i “Antigravity”. Hvis nogen på teamet føjer en regel til `.cursorrules` og glemmer `AGENTS.md`, er Cursor og Codex uenige en uge senere.

## Hvordan finder /init i Claude Code en eksisterende AGENTS.md?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Key takeaway">

Det vigtigste

`/init` bygger en `CLAUDE.md` ud fra det, der allerede findes i repositoryet, og sparer 20–30 minutters manuelt arbejde. Som standard henter den Cursor-regler (`.cursor/rules/`, `.cursorrules`) og Copilot-regler (`.github/copilot-instructions.md`), mens den læser `AGENTS.md`, `.windsurfrules` og `.clinerules` i tilstanden `CLAUDE_CODE_NEW_INIT=1`. Den samme tilstand starter et interaktivt forløb i flere faser: Den stiller spørgsmål, undersøger koden gennem en underagent og foreslår en plan, før den skriver. Siden september 2026 har `/init` en ulempe i et projekt med `AGENTS.md`: En ny `CLAUDE.md` deaktiverer direkte læsning af `AGENTS.md`, og reglerne ender i to filer.

</div>

Anthropic beskriver `/init` sådan i dokumentationen:

<figure>
<blockquote>
<p>Når du kører <code>/init</code>, læser den andre værktøjers instruktionsfiler og flytter relevante dele over i den genererede <code>CLAUDE.md</code>: Cursor-regler fra <code>.cursor/rules/</code> eller <code>.cursorrules</code>, Copilot-regler fra <code>.github/copilot-instructions.md</code> og, med <code>CLAUDE_CODE_NEW_INIT=1</code>, også <code>AGENTS.md</code>, <code>.devin/rules/</code>, <code>.windsurf/rules/</code> eller <code>.windsurfrules</code> samt <code>.clinerules</code>.</p>
</blockquote>
<figcaption>— Anthropic, https://code.claude.com/docs/en/memory</figcaption>
</figure>

Hvad betyder det i praksis? Repositoryet, jeg beskrev, havde en `.cursorrules` fra dengang, jeg prøvede Cursor (omkring 80 linjer), og en `AGENTS.md` (120 linjer, samlet manuelt). Da jeg kørte `claude /init`, tog kommandoen begge filer, fjernede lignende regler og sammensatte en ryddelig `CLAUDE.md` på et minut. Jeg kontrollerede den bagefter og lavede små ændringer – fjernede forældede punkter og tilføjede en struktur med overskrifter. Det gik hurtigere end at skrive alt om fra bunden.

Den interaktive tilstand, hvor `/init` også læser `AGENTS.md`, aktiveres via en miljøvariabel:

```bash
CLAUDE_CODE_NEW_INIT=1 claude
```

Når `/init` starter, stiller Claude en række opklarende spørgsmål: hvilke artefakter der skal konfigureres (`CLAUDE.md`, skills, hooks), hvilken stack projektet bruger, og hvilke kommandoer der skal bruges til tests. Derefter undersøger en underagent kodebasen – læser `package.json`, `README.md` og konfigurationsfiler – og udfylder de manglende dele. Til sidst viser den et forslag, som du kan redigere, før det gemmes. Se [den separate guide](https://ailoot.ai/blog/da/spec-kit-claude-code-spec-driven-development/) for mere om konfiguration af Claude Code ved projektstart.

Nu til ulempen. Hvis projektet allerede har en aktiv `AGENTS.md`, opretter `/init` en `CLAUDE.md` ved siden af med en kopi af dens regler. Fra det tidspunkt læser Claude Code som standard kun `CLAUDE.md`, så der igen er to kilder til sandhed: Du opdaterer `AGENTS.md`, mens Claude fortsætter med at arbejde ud fra den gamle kopi. Kommandoen `/import` gør noget lignende: Den føjer en engangskopi af `AGENTS.md` til `CLAUDE.md`. For at bevare én kilde skal du sætte importen `@AGENTS.md` på første linje i `CLAUDE.md` efter `/init` og fjerne alt fra `CLAUDE.md`, der gentager `AGENTS.md`.

`/init` er det rette udgangspunkt for et nyt projekt eller et projekt, du flytter fra Cursor eller Copilot. Du behøver ikke lede online efter den “bedste CLAUDE.md-skabelon” – Anthropic tager allerede højde for indholdet i repositoryet. Hvis projektet allerede har en aktiv `AGENTS.md`, og der ikke er Claude-specifikke regler, er `/init` unødvendig: Claude Code læser selv `AGENTS.md`.

## Hvordan adskiller du fælles instruktioner fra Claude-specifikke instruktioner?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Key takeaway">

Det vigtigste

Læg regler, som enhver AI-agent kan forstå, i `AGENTS.md`: hvad der ikke må røres, hvordan grene skal navngives, at `.env` indeholder en hemmelighed, og hvilke kommandoer der skal bruges til tests. Læg regler, der gælder specifikt for Claude Code, i `CLAUDE.md` (under importen): plan mode, skills, hooks, henvisninger til skills og modelnavne efter version. Skellet er enkelt: Hvis en regel begynder med “Claude bør”, hører den hjemme i `CLAUDE.md`. Hvis den begynder med “værktøjet bør”, hører den hjemme i `AGENTS.md`.

</div>

Jeg adskiller dem efter dette princip. Fælles regler, der hører hjemme i `AGENTS.md`:

- **Hvad der ikke må røres i koden.** Mapperne `.env`, `node_modules`, `prisma/migrations` (kun via `prisma migrate`), `.next/`, `.git/`.
- **Hvordan ting skal navngives.** Grene: `feat/`, `fix/`, `chore/`. Commits: præfikserne `feat:`, `fix:`, `docs:` plus en kort beskrivelse. Komponentfiler i `kebab-case`.
- **Test-/lint-kommandoer.** `npm run build`, `npm run lint`, `npm test`. Hvilken kommando der skal køres før `git push`.
- **Arkitekturprincipper.** Hvad der hører hjemme i `src/lib/`, hvad der hører hjemme i `src/components/`, hvor forretningslogikken ligger, og hvor brugergrænsefladen ligger.
- **Sikkerhed.** Commit aldrig hemmeligheder. Få kun adgang til produktionsdatabasen via `prod-psql`. Få kun adgang til produktion via SSH gennem aliaset `prod`, ikke `root@IP`.

Claude-specifikke regler, der hører hjemme i `CLAUDE.md` (under `@AGENTS.md`):

- **Plan mode.** Brug `plan mode` til ændringer i risikofyldte biblioteker (for eksempel `src/billing/`).
- **Arbejdsniveau.** Brug `--effort high` til arkitekturopgaver og `medium` til rutinearbejde.
- **Skills.** Hvilke AI-agenter og skills der skal køres i forskellige situationer. For eksempel: “kør skillen `build-masterskaya-guide`, når du arbejder på en guide”.
- **Claude-hukommelse.** Hvad der skal gemmes i automatisk hukommelse, og hvad der skal gemmes i `CLAUDE.local.md`. Se [guiden til Memory og CLAUDE.md](https://ailoot.ai/blog/da/claude-memory-claude-md-auto-memory/) for mere om Claude-hukommelse.
- **Hooks.** Hvis `.claude/settings.json` har konfigurerede hooks, skal du beskrive i `CLAUDE.md`, hvad de gør (Codex og Cursor kender dem ikke og behøver heller ikke kende dem).
- **Skills og kommandoer.** En liste over slash-kommandoer, jeg ofte bruger (`/init`, `/cd`, `/memory`, `/plan`).

Skellet er ikke altid tydeligt. For eksempel er “kør aldrig `git push --force` til `main`” klart fælles og hører hjemme i `AGENTS.md`. Men “brug plan mode, når du kører `git push` til en hot branch” er specifikt for Claude Code og hører derfor hjemme i `CLAUDE.md`. Testen er: “Hvis jeg fjernede Claude Code i morgen og kun beholdt Codex, ville denne regel så stadig gælde?” Hvis ja, skal den i `AGENTS.md`. Hvis nej, skal den i `CLAUDE.md`.

## Hvad hører hjemme i AGENTS.md, og hvad hører hjemme i CLAUDE.md eller .claude/rules?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Key takeaway">

Det vigtigste

I et stort projekt er én `AGENTS.md` ikke nok – den bliver for stor, og hver agent får unødvendigt materiale ind i sin kontekst. Løsningen er et bibliotek med `.claude/rules/`, separate filer efter emne og YAML-frontmatter `paths:` til stibaserede udløsere. For eksempel gælder en API-regel kun, når Claude arbejder i `src/api/`. Det sparer meget plads i kontekstvinduet. Det tilsvarende for Cursor er `.cursor/rules/`, og for Windsurf er det `.windsurf/rules/`.

</div>

Hvis reglerne overstiger 200 linjer, er det tid til at dele dem op. Anthropics dokumentation anbefaler at sigte efter 200 linjer pr. fil, fordi lange `CLAUDE.md`-filer begynder lydløst at miste efterlevelse: Claude ser ud til at læse dem, men følger dem sjældnere.

En struktur til et stort projekt, der fungerer for mig:

```
my-project/
├── AGENTS.md                    # 100-150 lines, shared
├── CLAUDE.md                    # 30-50 lines: @AGENTS.md + Claude-only
└── .claude/
    ├── CLAUDE.md                # alternative to root file, same file
    └── rules/
        ├── api.md               # with paths: ['src/api/**']
        ├── components.md        # with paths: ['src/components/**']
        ├── testing.md           # without paths, always active
        └── security.md          # without paths, always active
```

Hver fil i `.claude/rules/` kan have frontmatter:

```markdown
---
paths:
  - "src/api/**/*.ts"
---

# API rules
- Every endpoint validates input with zod
- Errors use the standard `{error, code}` format
- OpenAPI comments are required
```

Claude indlæser kun disse regler, når det arbejder med filer, der matcher dette mønster. Hvis det redigerer `src/components/Button.tsx`, føjes API-reglerne ikke til konteksten. På den måde bruges kontekstvinduet kun på det, der er relevant. Biblioteket `.claude/rules/` fungerer også uden `CLAUDE.md`: Hvis projektet kun indeholder `AGENTS.md`, indlæses reglerne sammen med den, og de deaktiverer ikke direkte læsning af `AGENTS.md`.

Cursor og Windsurf understøtter samme tilgang gennem deres biblioteker `.cursor/rules/` og `.windsurf/rules/`. AGENTS.md-standarden kan henvise til disse biblioteker, men syntaksen på tværs af værktøjer er endnu ikke helt stabil. Det er sikrere at holde fælles regler i `AGENTS.md` og duplikere stiafgrænsede regler i `.claude/rules/` og `.cursor/rules/` – det er sjældne specialtilfælde, ikke hovedparten af reglerne.

Nyttige placeringer for CLAUDE.md (sorteret fra bredeste til snævreste):

| Niveau | Placering | Formål |
|----|----|----|
| **Administreret politik** | `/Library/Application Support/ClaudeCode/CLAUDE.md` (Mac), `/etc/claude-code/CLAUDE.md` (Linux) | Virksomhedsregler, IT/DevOps |
| **Bruger** | `~/.claude/CLAUDE.md` | Personlige præferencer på tværs af alle projekter |
| **Projekt** | `./CLAUDE.md` eller `./.claude/CLAUDE.md` | Projektteamets regler |
| **Lokal** | `./CLAUDE.local.md` (i `.gitignore`) | Personlige præferencer for et bestemt projekt |

Et eksempel på en `~/.claude/CLAUDE.md` kunne indeholde to regler: “svar på brugerens foretrukne sprog” og “stav Ailoot præcis sådan”. Disse regler gælder for alle projekter, så der er ingen grund til at duplikere dem i hvert repository.

Af disse fire niveauer er det kun en projektbaseret `CLAUDE.md` og `CLAUDE.local.md`, der deaktiverer direkte læsning af `AGENTS.md`. En personlig `~/.claude/CLAUDE.md` og en centralt administreret politik står ikke i vejen; Claude Code læser dem sammen med `AGENTS.md`.

## Hvad skal du gøre, hvis AGENTS.md allerede er forældet i dit projekt?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Key takeaway">

Det vigtigste

Hvis `AGENTS.md` blev samlet tilbage i 2025 til Codex eller Aider og ikke er blevet redigeret siden, skal du åbne projektet i Claude Code og bede Claude om at redigere filen. AGENTS.md er et levende dokument; Linux Foundations specifikation bliver opdateret. Hovedreglen for at holde den aktuel: Hver regel skal besvare spørgsmålet “Hvad er jeg træt af at gentage for Claude/Codex?” Hvis den ikke gør det, skal den arkiveres.

</div>

I det projekt, jeg beskrev, havde jeg en `AGENTS.md` fra maj 2025 – 180 linjer, hvoraf mange var forældede (den nævnte Anthropic API-endpoints, der siden var blevet ændret; eksempler med `claude --tools`-syntaks, der ikke længere findes; og regler om `~/.claude/projects/` med en forældet struktur).

Den plan, jeg brugte til at opdatere den:

1.  **Gennemgå den med `claude` i plan mode.** Jeg åbner repositoryet, kører `claude --safe-mode` og spørger: “Læs `AGENTS.md` igen, og foreslå en liste over punkter, der er forældede eller gentagne. Rediger den ikke; angiv kun punkterne.” På to minutter fik jeg en liste med 23 punkter, der skulle gennemgås.
2.  **Fjern de tydeligt forældede punkter.** Af de 23 punkter var 9 tydeligt forældede – kommandosyntaks, endpoints og flagnavne. Jeg slettede de linjer.
3.  **Saml dubletter.** Yderligere 6 punkter gentog hinanden med andre formuleringer (“foretag ikke force-push”, “brug aldrig `--force`”, “undgå `git push -f`”). Jeg slog dem sammen til én linje.
4.  **Tilføj nye punkter.** Jeg tilføjede det, jeg havde bemærket, at Claude/Codex regelmæssigt havde gjort forkert den seneste måned, efter reglen “én linje pr. fejlmønster”. Det gav 8 nye punkter.
5.  **Brug en underagent til en afsluttende gennemgang.** Jeg bad Claude gennemgå den med instruktionen “find modsigelser, tvetydigheder og dubletter”. Den fandt tre formuleringer, der kunne gøres tydeligere. Jeg rettede dem.

Efter en time var `AGENTS.md` 110 linjer lang og opdateret, og jeg kendte hver linje personligt. Det var let at lave en `CLAUDE.md` på 30 linjer ud fra den. Codex blev også mærkbart mere omhyggelig med tests bagefter – jeg formoder, at nogle af dens “mærkelige” beslutninger skyldtes forældede instruktioner, som den i god tro havde fulgt.

Hovedprincipperne for en levende `AGENTS.md`:

- **Hver regel besvarer et tilbagevendende fejlmønster.** Hvis jeg ikke kom i tanke om en regel en eneste gang i løbet af måneden, er der ingen grund til at beholde den.
- **Skriv regler som anvisninger, ikke teori.** “Brug to mellemrum” er en regel. “Kodestilen bør være pæn” er det ikke.
- **Vær konkret.** “Kør `npm run build` før `git push`” er en regel. “Test dine ændringer” er det ikke.

## Hvad fungerer DEFINITIVT IKKE med denne opsætning?

<div class="aside" data-semantic="key-takeaway" role="note" aria-label="Key takeaway">

Det vigtigste

Import af `@AGENTS.md` får ikke forskellige værktøjer til at opføre sig ens. Hvert værktøj har sine egne særheder: Codex CLI kender ikke `.claude/rules/` eller hooks. Cursor har sin egen autocomplete-motor, som ikke læser CLAUDE.md, mens den fuldfører tekst. Copilot følger `.github/copilot-instructions.md`, og regler i AGENTS.md alene er ikke nok til det. Det er ikke “én fil = én adfærd”; det er “én kilde til grundreglerne, og derefter har hvert værktøj sine egne tilføjelser”.

</div>

Et par ting, jeg lærte på den hårde måde i løbet af seks måneders arbejde med denne opsætning:

**1. Cursor-autocomplete bruger ikke AGENTS.md.** Når Cursor foreslår at fuldføre en linje i editoren, læser det ikke `AGENTS.md` i realtid – der arbejder en separat, hurtig motor. Regler i AGENTS.md betyder kun noget, når du sender en chatforespørgsel i Cursor. Det betyder, at det ikke påvirker autocomplete at skrive “brug ikke `var`, brug `const`” i AGENTS.md; du skal konfigurere det gennem ESLint eller TypeScript-konfigurationen.

**2. Claude Code-hooks i AGENTS.md virker ikke for Codex.** Hvis `.claude/settings.json` har en PreToolUse-hook konfigureret til at blokere en bestemt handling, er oplysningerne kun nyttige for Claude. Codex kender ikke hooks; for Codex er det “værktøjet bestemmer selv”. Det giver mening at skrive “gør ikke X” i `AGENTS.md` og “der er en hook, som fysisk blokerer X” i `CLAUDE.md` under importen.

**3. Copilot og `.github/copilot-instructions.md`.** GitHub Copilot læser sin egen fil og læser stadig ikke AGENTS.md særlig godt. Hvis dit team bruger Copilot aktivt, kan du enten tilføje en separat `.github/copilot-instructions.md` med en forkortet version af reglerne eller bruge [Copilot Extensions](https://github.com/marketplace?type=apps&category=copilot-extensions), som kender AGENTS.md. Det ændrer sig hurtigt, så billedet kan se anderledes ud om tre til seks måneder.

**4. Git registrerer ikke et symbolsk link som en CLAUDE.md-ændring.** Hvis du kører `ln -s AGENTS.md CLAUDE.md` og opdaterer `AGENTS.md` en uge senere, viser Git kun en diff for `AGENTS.md`. Det er normalt, men en kollega, der gennemgår PR'en, opdager måske ikke, at `CLAUDE.md` også er blevet opdateret (via det symbolske link). Løsning: Skriv udtrykkeligt i PR-beskrivelsen: “opdaterede `AGENTS.md`; Claude Code ser den samme fil via det symbolske link”.

**5. Dybe importer er svære at fejlfinde.** Hvis `AGENTS.md` importerer `@docs/coding-style.md`, som importerer `@docs/typescript.md`, og en regel er i konflikt med en anden, er det svært at fejlfinde. Jeg begrænser importer til ét niveau (`CLAUDE.md` → `AGENTS.md`) og indlejrer ikke videre. Anthropic tilbyder en `InstructionsLoaded`-hook, der logger, hvilke filer der blev indlæst – nyttig til fejlfinding af lagdelte opsætninger. Bemærk: Hooken udløses for `AGENTS.md`, der er inkluderet via en import eller et symbolsk link, men ikke for `AGENTS.md`, som Claude Code selv har læst.

<div class="section" role="doc-bibliography" aria-label="Sources">

### Kilder

- [Claude Code-dokumentation om hukommelse – afsnittet AGENTS.md](https://code.claude.com/docs/en/memory#agents-md) – hvornår Claude Code selv læser AGENTS.md, Project instructions-indstillinger, importer og symbolske links samt `/init`-adfærd.
- [Claude Code-dokumentation om hukommelse – import af yderligere filer](https://code.claude.com/docs/en/memory#import-additional-files) – syntaksen `@path/to/file`, dybde på fire niveauer samt relative og absolutte stier.
- [agents.md – Linux Foundations standard](https://agents.md/) – den officielle AGENTS.md-standard og en liste over understøttende værktøjer.
- [Cursor Rules-dokumentation](https://docs.cursor.com/context/rules-for-ai) – hvad Cursor læser (`.cursor/rules/*.mdc`, AGENTS.md).
- [Brugerdefinerede instruktioner til GitHub Copilot](https://docs.github.com/en/copilot/customizing-copilot/adding-custom-instructions-for-github-copilot) – formatet `.github/copilot-instructions.md`.
- [AGENTS.md-specifikationen hos Linux Foundation](https://aaif.io/projects/agents-md/) – specifikation under udvikling.

</div>

Den komplette opsætning til vibe-kodning på en aften: **AI-klon + Second Brain + kontekstteknik**. 



Lær [Ailoot](https://ailoot.ai/) at kende.

## Spørgsmål og svar

### Hvornår skal jeg bruge en import frem for et symlink?

Brug `@AGENTS.md` i `CLAUDE.md`, når du kræver Claude-specifikke tilføjelser, eller kolleger bruger Windows. Et symlink lader begge navne henvise til samme indhold og kan derfor ikke indeholde et separat Claude-afsnit.

### Hvordan kontrollerer jeg indlæsning af fælles instruktioner?

Kør `/memory`, og kontrollér de viste instruktionsfiler. Tilføj importen, eller vælg indstillingen, der indlæser begge, hvis `CLAUDE.md` eller `CLAUDE.local.md` undertrykker direkte AGENTS.md-indlæsning i konfigurationen. Start derefter en frisk session.


## Ailoot · Virksomheden og dens projektportefølje

Ailoot bygger på solid driftserfaring, en stor kundebase, stabil service og løbende kontrol af KPI.

Virksomheden og dens projektportefølje: millioner af kunder; månedligt salg for milliarder.

Ailoot bruger denne driftserfaring til API-adgang til AI-funktioner i kundernes produkter, agenter, applikationer og automatiseringer.
