# Én instruksjonsfil for Claude Code, Codex og Cursor i 2026

> Én kilde til sannhet for Claude Code, Codex og Cursor i 2026: når Claude Code leser AGENTS.md selv, import av @AGENTS.md i CLAUDE.md, en symbolsk lenke og /init.

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


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

## Hva endrer seg når du bruker Claude Code, Codex og Cursor sammen?

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

Viktig poeng

I 2026 består et typisk oppsett for en vibe coder ikke av ett verktøy, men av 3–5. Claude Code som hovedverktøy, Codex for lange autonome oppgaver, Cursor for raske redigeringer i IDE-en. Hvert verktøy har sin egen instruksjonsfil: `CLAUDE.md`, `AGENTS.md`, `.cursorrules`. Hvis du holder dem synkronisert manuelt, redigerer du én linje fem steder, glemmer å oppdatere Cursor, og en uke senere gir Claude og Codex ulike resultater for samme prompt.

</div>

I eksempelet som beskrives, er Claude Code hovedverktøyet, mens Codex og Cursor brukes til bestemte oppgaver. `CLAUDE.md`-filen min har omtrent 250 linjer med instruksjoner: hva som skal leses og i hvilken rekkefølge, hva som ikke må røres, hvilke kommandoer som skal brukes for utrulling, og regler for commit-formatering. Da jeg prøvde Codex CLI på prosjektet for første gang, kjente det ikke til noen av reglene: det kjørte `git push --force`, snoket rundt i `.env` og ga filer nye navn på en skjødesløs måte.

Først kopierte jeg `CLAUDE.md` til `AGENTS.md` for hånd. To uker senere oppdaget jeg at prosjektet allerede hadde fire versjoner av den samme instruksjonen: i `CLAUDE.md`, `AGENTS.md`, `.cursorrules` og `.windsurf/rules/`. Alle var litt forskjellige. Dette er ikke et Claude- eller Cursor-problem; det er den grunnleggende fellen i ethvert system med flere sannhetskilder. Jeg drøfter dette problemet mer inngående i [veiledningen om arbeid med flere agenter](https://ailoot.ai/blog/nb/claude-code-codex-together/).

I juni 2026 ga Anthropic ett svar i dokumentasjonen om Claude Code-minne: en delt fil pluss en import. Siden september 2026 har Claude Code lest `AGENTS.md` selv hvis prosjektet ikke har `CLAUDE.md`, og en import trengs når du har regler som er spesifikke for Claude. Nedenfor forklarer jeg når én `AGENTS.md` er nok, hvordan du setter opp en import, og hvordan du skiller delte regler fra Claude-spesifikke regler.

## Leser Claude Code AGENTS.md selv?

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

Viktig poeng

Ja, fra og med versjon 2.1.277, som ble utgitt 18. september 2026, men bare hvis det ikke finnes noen `CLAUDE.md`, `.claude/CLAUDE.md` eller `CLAUDE.local.md` i arbeidskatalogen eller over den. Hvis `CLAUDE.md` finnes, leser Claude Code bare den filen som standard, og `AGENTS.md` tas med ved hjelp av linjen `@AGENTS.md` i `CLAUDE.md` eller en symbolsk lenke. Atferden endres i `/config`, under Project instructions. Før september leste Claude Code ikke `AGENTS.md` i det hele tatt, og import var den eneste løsningen.

</div>

Før september 2026 var svaret «nei». Issue \#6235, som ba om støtte for AGENTS.md, hadde vært åpen siden august 2025 og ble lukket 17. august 2026. Dokumentasjonen om minne viste til én løsning hele tiden: Opprett en CLAUDE.md og ta med `AGENTS.md` i den som en import. Fra og med versjon 2.1.277 sier dokumentasjonen noe annet:

<figure>
<blockquote>
<p>Claude Code kan lese <code>AGENTS.md</code> som prosjektinstruksjoner, slik at et repositorium som allerede er satt opp for andre agenter, fungerer uten <code>CLAUDE.md</code>, import eller konfigurasjon.</p>
</blockquote>
<figcaption>— Anthropic, https://code.claude.com/docs/en/memory#agents-md</figcaption>
</figure>

Nøyaktig hva Claude Code leser, avhenger av hvilke filer som finnes i prosjektet:

| Filer i prosjektet | Hva Claude Code leser |
|----|----|
| `AGENTS.md`, uten `CLAUDE.md` eller `CLAUDE.local.md` i arbeidskatalogen eller over den | `AGENTS.md` |
| `AGENTS.md` og `CLAUDE.md` (eller `CLAUDE.local.md`) i arbeidskatalogen eller over den | Bare `CLAUDE.md` |
| `CLAUDE.md` med linjen `@AGENTS.md` | `CLAUDE.md`, og `AGENTS.md` inne i den via importen |

I denne kontrollen teller `CLAUDE.md`, `.claude/CLAUDE.md` og `CLAUDE.local.md` i arbeidskatalogen og alle overordnede kataloger. En personlig `~/.claude/CLAUDE.md`, en bedriftsadministrert fil og regler fra `.claude/rules/` teller ikke: De lastes inn sammen med `AGENTS.md`.

Hvis det ikke finnes noen `CLAUDE.md`, leser Claude Code alle `AGENTS.md`- og `.claude/AGENTS.md`-filer i arbeidskatalogen og overordnede kataloger ved oppstart, og henter inn en `AGENTS.md` i en underkatalog når det åpner en fil der. `@path`-importer i `AGENTS.md` fungerer også. Claude Code leser ikke `AGENTS.local.md`, `AGENTS.override.md` eller innholdet i `.agents/`-katalogen.

Haken er at en personlig `CLAUDE.local.md` også teller. Opprett en for å holde orden på dine egne, ikke-innsendte regler, og Claude Code slutter i det stille å lese `AGENTS.md`. Innstillingen nedenfor løser dette.

Atferden endres i `/config`, under Project instructions:

| Innstilling | Hva Claude Code leser |
|----|----|
| `claude-md-or-agents-md` (standard) | `CLAUDE.md`, eller, hvis verken den eller `CLAUDE.local.md` finnes, `AGENTS.md` |
| `claude-md-and-agents-md` | Begge filene: i hver katalog først `CLAUDE.md`, deretter `AGENTS.md` |
| `claude-md` | Bare `CLAUDE.md` |
| `managed-only` | Bare den bedriftsadministrerte `CLAUDE.md` og automatisk minne |

Hvis du vil beholde `CLAUDE.local.md` uten å miste `AGENTS.md`, velger du `claude-md-and-agents-md`. Filene leses ikke dobbelt: Hvis `AGENTS.md` allerede er tatt med via linjen `@AGENTS.md` eller en symbolsk lenke, laster Claude Code den ikke inn en gang til, uansett innstilling.

Du kan kontrollere om filen ble hentet inn med kommandoen `/memory`: Fra og med versjon 2.1.280 vises banen til `AGENTS.md` i listen. I versjoner før 2.1.277 og i økter der den innebygde `agents-md`-pluginen er deaktivert, leser Claude Code bare `CLAUDE.md`, og `/config` har ikke noe Project instructions-element. Før versjon 2.1.281 oppførte økter via Amazon Bedrock og økter med deaktivert telemetri seg på samme måte. I den første økten etter oppdatering fra en eldre versjon kan `AGENTS.md` også bli oversett; det fungerer fra og med neste økt.

Hva betyr dette for et oppsett med én fil? Hvis du ikke har regler som bare gjelder Claude, kan du droppe `CLAUDE.md`: `AGENTS.md` er nok, og Claude Code, Codex og Cursor leser den. Hvis du har slike regler (plan mode for risikokataloger, skills, hooks), trenger du `CLAUDE.md`, og Claude Code slutter å lese `AGENTS.md` på egen hånd. Ta da med `AGENTS.md` i `CLAUDE.md` med linjen `@AGENTS.md`; dette oppsettet fungerer akkurat som før september. Det er også nyttig med eldre versjoner av 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">

Viktig poeng

Import er nødvendig når prosjektet har en `CLAUDE.md`: Når den finnes, leser ikke Claude Code `AGENTS.md` på egen hånd som standard. Sett det opp ved å skrive linjen `@AGENTS.md` øverst i `CLAUDE.md`-filen. Når Claude Code starter en økt, setter det innholdet i `AGENTS.md` inn i stedet for den linjen og leser resultatet som én samlet tekst. Under importen kan du legge til en «Claude Code»-seksjon med regler som bare gjelder Claude. Importer fungerer med relative og absolutte baner, og kan nøstes opptil fire nivåer dypt.

</div>

Et minimalt fungerende eksempel fra den offisielle dokumentasjonen:

```markdown
@AGENTS.md

## Claude Code

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

Dette er det som skjer. Den første linjen, `@AGENTS.md`, er et importdirektiv. Når Claude Code tolker `CLAUDE.md` ved starten av en økt, finner det denne importen og setter inn hele innholdet i `AGENTS.md` på dens plass. Deretter kommer overskriften `## Claude Code`: Det er vanlig markdown, men fungerer som en seksjon for «Claude-spesifikke tillegg». Under den står en regel som bare gjelder Claude Code: Bruk plan mode for endringer i billing-katalogen. Codex CLI eller Cursor åpner ikke denne filen i det hele tatt; de bruker den vanlige `AGENTS.md`.

Et sitat fra dokumentasjonen om hvordan importer fungerer:

<figure>
<blockquote>
<p>CLAUDE.md-filer kan importere flere filer med syntaksen <code>@path/to/import</code>. Importerte filer utvides og lastes inn i konteksten ved oppstart av en økt sammen med CLAUDE.md-filen som viser til dem.</p>
</blockquote>
<figcaption>— Anthropic, https://code.claude.com/docs/en/memory</figcaption>
</figure>

Noen praktiske detaljer:

- **Relative og absolutte baner.** `@AGENTS.md` er relativ til filen som inneholder importen. `@/Users/me/shared/rules.md` eller `@~/.claude/personal.md` er absolutte baner. Jeg bruker `@~/.claude/personal.md` for personlige preferanser jeg ikke vil legge i repositoriet.
- **Fire nivåer dypt.** `AGENTS.md` kan importere `@docs/coding-style.md`, og `coding-style.md` kan importere noe annet, opptil fire nivåer dypt. Det holder for enhver reell struktur.
- **Backticks blokkerer importer.** Hvis teksten sier `` `@README` ``, er det bare en omtale av navnet, ikke en import. Det er nyttig når du forklarer leserne hvordan importer fungerer uten å utløse en.
- **Godkjenning for filer utenfor prosjektet.** Hvis en import peker utenfor arbeidskatalogen, som `@~/.claude/personal.md`, viser Claude Code en dialog med en liste over disse filene første gang. Hvis du avslår, forblir eksterne importer deaktivert, og dialogen vises ikke igjen. `@AGENTS.md` i prosjektets rot utløser ikke en dialog. Dette beskytter deg mot å laste inn en uvedkommende fil i konteksten ved et uhell.

Etter at jeg gikk over til dette oppsettet i prosjektet som beskrives, krympet `CLAUDE.md` fra 250 linjer til 60: `@AGENTS.md` pluss fem til sju regler som bare gjelder Claude Code (plan mode for risikokataloger, hva som ikke må røres i adminområdet og hvordan commits skal formuleres). Alt felles ligger i `AGENTS.md`, som Codex og Cursor leser.

## Når bør du velge en symbolsk lenke, og når bør du velge en import?

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

Viktig poeng

Anthropic tilbyr to mekanismer: en import via `@AGENTS.md` eller en symbolsk lenke, `ln -s AGENTS.md CLAUDE.md`. En symbolsk lenke er enklere: Det er bare et alias og krever ingen filendringer. Men den har tre ulemper: Windows krever administratorrettigheter, du kan ikke legge Claude-spesifikke regler til `CLAUDE.md`, og Git viser noen ganger en symbolsk lenke som søppel i diffen. Import er den universelle løsningen. Hvis du ikke har regler som bare gjelder Claude, trenger du ingen av delene fra og med versjon 2.1.277: Claude Code leser `AGENTS.md` selv.

</div>

Dokumentasjonen viser alternativet med symbolsk lenke slik:

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

Og den gir straks en tydelig advarsel om Windows:

<figure>
<blockquote>
<p>Hvis du eller noen som kloner repositoriet, bruker Windows, bør du bruke importen <code>@AGENTS.md</code>. Der krever det administratorrettigheter eller Developer Mode å opprette en symbolsk lenke, og Git uten aktivert <code>core.symlinks</code> sjekker ut en innsendt lenke som en vanlig tekstfil, slik at det blir en énlinjes <code>CLAUDE.md</code> i den kopien i stedet for instruksjonene.</p>
</blockquote>
<figcaption>— Anthropic, https://code.claude.com/docs/en/memory</figcaption>
</figure>

Sammenligningstabell:

| Kriterium | Import med `@AGENTS.md` | Symbolsk lenke `ln -s` |
|----|----|----|
| **Fungerer på Windows uten administratorrettigheter** | ja | nei (Developer Mode kreves) |
| **Kan legge til regler bare for Claude** | ja, under importen | nei, filen er identisk |
| **Vises i Git som vanlig markdown** | ja | som en lenke (avhenger av `core.symlinks`) |
| **Kan importere flere filer** | ja, opptil fire nivåer | nei, én-til-én |
| **Bufring/ugyldiggjøring i Claude Code** | standard for CLAUDE.md | fungerer, men symbolsk lenke har metadatafallgruver |
| **Standardvalg** | passer for alle | bare hvis bruk på tvers av plattformer ikke er viktig |

Jeg bruker importer i prosjektet som beskrives. Grunnene er:

1.  **Teamet er blandet.** Jeg bruker Mac; i eksempelet er teamet omtrent likt fordelt mellom Windows og Mac. Hvis det ligger en symbolsk lenke i repositoriet, vil den for Windows-brukere uten Developer Mode bli sjekket ut som en vanlig tekstfil med én linje, `AGENTS.md`. Det skaper merkelige feil: Noen ganger fungerer reglene, andre ganger ikke, og det er uklart hvorfor.
2.  **Jeg vil ha Claude-spesifikke regler.** Under `@AGENTS.md` har `CLAUDE.md`-filen min en «Claude Code»-seksjon med regler: Bruk `--effort high` for arkitekturoppgaver, kjør `npm run build` før `git push`, og ikke kall `/api/v1/deploy` for hånd. Codex forstår ikke disse kommandoene.
3.  **Det er enklere å feilsøke.** Når noe går galt, åpner jeg `CLAUDE.md` og ser importen og overstyringene mine. En symbolsk lenke viser ikke at «dette ble lagt til her». Les [veiledningen om sikker modus](https://ailoot.ai/blog/nb/claude-code-safe-mode-recovery/) for mer informasjon om feilsøking av Claude Code-innstillinger.

Hvis du ikke har Claude-spesifikke regler, trengs ikke lenger en symbolsk lenke fra og med versjon 2.1.277: Slett `CLAUDE.md`, så leser Claude Code `AGENTS.md` selv. Behold lenken bare hvis noen på teamet bruker en versjon eldre enn 2.1.277 og ikke kan oppdatere. Hvis du har Claude-spesifikke regler, er import mer praktisk i ni av ti tilfeller.

## Hva leser Codex, Cursor, Copilot, Windsurf og Gemini CLI?

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

Viktig poeng

Hvert verktøy leser sin egen fil, noen ganger flere enn én. Claude Code leser `CLAUDE.md`, og siden september 2026 også `AGENTS.md` hvis prosjektet ikke har `CLAUDE.md`. Codex CLI leser `AGENTS.md` pluss `AGENTS.override.md`. Cursor leser det eldre `.cursorrules`-formatet eller det nyere `.cursor/rules/*.mdc`, og siden sommeren 2026 leser det også `AGENTS.md`. Copilot leser `.github/copilot-instructions.md` eller `.github/instructions/*.instructions.md`. Windsurf leser den eldre `.windsurfrules` eller den nyere `.windsurf/rules/`. Gemini CLI leser `GEMINI.md`. Aider og Cline har allerede tatt i bruk `AGENTS.md`.

</div>

En oversikt over de sju viktigste verktøyene (basert på den offisielle dokumentasjonen for hvert verktøy):

| Verktøy | Hovedfil for instruksjoner | Alternativer | Leser det AGENTS.md? |
|----|----|----|----|
| **Claude Code** | `CLAUDE.md` | `~/.claude/CLAUDE.md`, `./.claude/CLAUDE.md`, administrert policy | ja, hvis prosjektet ikke har `CLAUDE.md` (siden 2.1.277), ellers via en import |
| **Codex CLI** (OpenAI) | `AGENTS.md` | `AGENTS.override.md` | ja (innebygd) |
| **Cursor** | `.cursor/rules/*.mdc` | `.cursorrules` (utdatert) | ja |
| **GitHub Copilot** | `.github/copilot-instructions.md` | `.github/instructions/*.instructions.md` | via utvidelser |
| **Windsurf** | `.windsurf/rules/` | `.windsurfrules` (utdatert) | ja |
| **Gemini CLI** | `GEMINI.md` | \- | nei |
| **Aider, Cline, opencode** | `AGENTS.md` | \- | ja (innebygd) |

Hva følger av dette? Hvis et repo har `AGENTS.md` (pluss en `CLAUDE.md` med import når Claude-spesifikke regler trengs), får fem av de sju verktøyene oppdaterte instruksjoner automatisk. Cursor og Windsurf, som har egne filer, kan stå som de er (`AGENTS.md` leses også av dem), eller du kan legge til en import med `@AGENTS.md` — men syntaksen deres er forskjellig og støttes ikke alltid.

Den enkleste strategien for et nytt prosjekt:

1.  **Legg alle delte regler i `AGENTS.md`** — 95% av reglene hører hjemme der.
2.  **Opprett `CLAUDE.md` hvis du trenger regler bare for Claude:** Sett `@AGENTS.md` på første linje, og legg deretter til en seksjon med Claude-spesifikke regler. Hvis du ikke har slike regler, er `CLAUDE.md` unødvendig; Claude Code har lest `AGENTS.md` selv siden versjon 2.1.277.
3.  **Behold `.cursor/rules/` for Cursor** i sjeldne tilfeller der noe Cursor-spesifikt trengs (kommandoene `@Codebase` og `@Docs`).
4.  **Gjør det samme for Windsurf:** Glem den gamle `.windsurfrules`; bruk den nye `.windsurf/rules/` bare når det trengs mønstre for syntaksen der.

Denne tilnærmingen gir deg 80% av gevinsten for 20% av arbeidet. Etter min erfaring blir det krevende å vedlikeholde mer enn to sannhetskilder (delt pluss Claude-spesifikt) når jeg rydder opp i blandede team i «Antigravity». Hvis noen på teamet legger til en regel i `.cursorrules` og glemmer `AGENTS.md`, vil Cursor og Codex være uenige en uke senere.

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

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

Viktig poeng

`/init` bygger en `CLAUDE.md` ut fra det som allerede finnes i repositoriet, og sparer 20–30 minutter med manuelt arbeid. Som standard plukker det opp Cursor-regler (`.cursor/rules/`, `.cursorrules`) og Copilot-regler (`.github/copilot-instructions.md`), mens det leser `AGENTS.md`, `.windsurfrules` og `.clinerules` i modusen `CLAUDE_CODE_NEW_INIT=1`. Denne modusen starter også en interaktiv prosess i flere faser: Den stiller spørsmål, utforsker koden via en subagent og foreslår en plan før den skriver. Siden september 2026 har `/init` en ulempe i et prosjekt med `AGENTS.md`: En ny `CLAUDE.md` deaktiverer direkte lesing av `AGENTS.md`, og reglene ender opp i to filer.

</div>

Anthropic beskriver `/init` slik i dokumentasjonen:

<figure>
<blockquote>
<p>Når du kjører <code>/init</code>, leses instruksjonsfiler fra andre verktøy, og relevante deler flyttes til den genererte <code>CLAUDE.md</code>: Cursor-regler fra `.cursor/rules/` eller `.cursorrules`, Copilot-regler fra `.github/copilot-instructions.md` og, med <code>CLAUDE_CODE_NEW_INIT=1</code>, også <code>AGENTS.md</code>, `.devin/rules/`, `.windsurf/rules/` eller `.windsurfrules`, samt `.clinerules`.</p>
</blockquote>
<figcaption>— Anthropic, https://code.claude.com/docs/en/memory</figcaption>
</figure>

Hva betyr dette i praksis? Repositoriet jeg beskrev, hadde en `.cursorrules` fra den gangen jeg prøvde Cursor (omtrent 80 linjer) og en `AGENTS.md` (120 linjer) som var satt sammen for hånd. Da jeg kjørte `claude /init`, brukte kommandoen begge filene, fjernet gjentakelser av lignende regler og satte sammen en ryddig `CLAUDE.md` på ett minutt. Jeg kontrollerte den etterpå og gjorde små endringer — fjernet utdaterte punkter og la til en struktur med overskrifter. Det gikk raskere enn å skrive alt om fra bunnen av.

Den interaktive modusen, der `/init` også leser `AGENTS.md`, aktiveres med en miljøvariabel:

```bash
CLAUDE_CODE_NEW_INIT=1 claude
```

Når `/init` starter, stiller Claude en rekke oppklarende spørsmål: hvilke artefakter som skal konfigureres (`CLAUDE.md`, skills, hooks), hvilken stack prosjektet bruker, og hvilke kommandoer som skal brukes til tester. Deretter utforsker en subagent kodebasen — ved å lese `package.json`, `README.md` og konfigurasjonsfiler — og fyller inn manglende deler. Til slutt viser den et forslag du kan redigere før du lagrer. Se [den separate veiledningen](https://ailoot.ai/blog/nb/spec-kit-claude-code-spec-driven-development/) for mer om hvordan du konfigurerer Claude Code når du starter et prosjekt.

Så til ulempen. Hvis prosjektet allerede har en aktiv `AGENTS.md`, oppretter `/init` en `CLAUDE.md` ved siden av med en kopi av reglene. Fra da av leser Claude Code bare `CLAUDE.md` som standard, og dermed har du igjen to sannhetskilder: Du oppdaterer `AGENTS.md`, mens Claude fortsetter å bruke den gamle kopien. Kommandoen `/import` gjør noe lignende: Den legger en engangskopi av `AGENTS.md` til i `CLAUDE.md`. For å beholde én kilde legger du importen `@AGENTS.md` på første linje i `CLAUDE.md` etter `/init`, og fjerner alt i `CLAUDE.md` som gjentar `AGENTS.md`.

`/init` er et godt utgangspunkt for et nytt prosjekt eller et du flytter over fra Cursor eller Copilot. Du trenger ikke lete på nettet etter den «beste CLAUDE.md-malen» — Anthropic tar allerede hensyn til det som finnes i repositoriet. Hvis prosjektet allerede har en aktiv `AGENTS.md`, og det ikke finnes regler bare for Claude, er `/init` unødvendig: Claude Code leser `AGENTS.md` selv.

## Hvordan skiller du delte og Claude-spesifikke instruksjoner?

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

Viktig poeng

Legg regler som alle AI-agenter kan forstå, i `AGENTS.md`: hva som ikke må røres, hvordan grener skal navngis, at `.env` inneholder en hemmelighet, og hvilke kommandoer som skal brukes til tester. Legg regler som er spesifikke for Claude Code, i `CLAUDE.md` (under importen): plan mode, skills, hooks, referanser til skills og modellnavn etter versjon. Skillet er enkelt: Hvis en regel begynner med «Claude bør», hører den hjemme i `CLAUDE.md`. Hvis den begynner med «verktøyet bør», hører den hjemme i `AGENTS.md`.

</div>

Jeg skiller dem etter dette prinsippet. Delte regler som hører hjemme i `AGENTS.md`:

- **Hva som ikke må røres i koden.** `.env`, `node_modules`, `prisma/migrations`-katalogene (bare via `prisma migrate`), `.next/`, `.git/`.
- **Hvordan ting skal navngis.** Grener: `feat/`, `fix/`, `chore/`. Commits: prefiksene `feat:`, `fix:`, `docs:` pluss en kort beskrivelse. Komponentfiler i `kebab-case`.
- **Test-/lintkommandoer.** `npm run build`, `npm run lint`, `npm test`. Hvilken kommando som skal kjøres før `git push`.
- **Arkitekturprinsipper.** Hva som hører hjemme i `src/lib/` og `src/components/`, hvor forretningslogikken ligger, og hvor brukergrensesnittet ligger.
- **Sikkerhet.** Ikke send inn hemmeligheter i commits. Bruk bare `prod-psql` for å få tilgang til produksjonsdatabasen. Koble til produksjon over SSH bare via aliaset `prod`, ikke via `root@IP`.

Claude-spesifikke regler som hører hjemme i `CLAUDE.md` (under `@AGENTS.md`):

- **Plan mode.** Bruk `plan mode` for endringer i risikokataloger (for eksempel `src/billing/`).
- **Innsatsnivå.** Bruk `--effort high` for arkitekturoppgaver og `medium` for rutinearbeid.
- **Skills.** Hvilke AI-agenter og ferdigheter som skal kjøres i ulike situasjoner. For eksempel: «Kjør `build-masterskaya-guide`-skillen når du arbeider med en veiledning.»
- **Claude-minne.** Hva som skal legges i automatisk minne og hva som skal legges i `CLAUDE.local.md`. Les [veiledningen om Memory og CLAUDE.md](https://ailoot.ai/blog/nb/claude-memory-claude-md-auto-memory/) for mer om Claude-minne.
- **Hooks.** Hvis `.claude/settings.json` har konfigurerte hooks, beskriv i `CLAUDE.md` hva de gjør (Codex og Cursor kjenner dem ikke, og trenger ikke å gjøre det).
- **Skills og kommandoer.** En liste over skråstrekkommandoer jeg ofte bruker (`/init`, `/cd`, `/memory`, `/plan`).

Grensen er ikke alltid tydelig. «Kjør aldri `git push --force` mot `main`» er for eksempel klart delt og hører derfor hjemme i `AGENTS.md`. Men «bruk plan mode først når du kjører `git push` til en hot branch» er spesifikt for Claude Code og hører derfor hjemme i `CLAUDE.md`. Testen er: «Hvis jeg fjernet Claude Code i morgen og bare beholdt Codex, ville denne regelen fortsatt gjelde?» Hvis svaret er ja, legger du den i `AGENTS.md`. Hvis nei, legger du den i `CLAUDE.md`.

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

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

Viktig poeng

For et stort prosjekt er én `AGENTS.md` ikke nok — filen blir for stor, og hver agent får unødvendig materiale i konteksten sin. Løsningen er en `.claude/rules/`-katalog med egne filer for hvert emne og YAML-frontmatter med `paths:` for banebaserte utløsere. En API-regel gjelder for eksempel bare når Claude arbeider i `src/api/`. Det sparer mye plass i kontekstvinduet. Det tilsvarende for Cursor er `.cursor/rules/`, og for Windsurf `.windsurf/rules/`.

</div>

Hvis reglene overstiger 200 linjer, er det på tide å dele dem opp. Anthropic anbefaler i dokumentasjonen å sikte mot 200 linjer per fil, fordi Claude begynner å følge lange `CLAUDE.md`-filer dårligere uten å si fra: Det virker som om Claude leser dem, men følger dem sjeldnere.

En struktur for et stort prosjekt som fungerer for meg:

```
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 ha 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 laster bare inn disse reglene når det arbeider med filer som samsvarer med dette mønsteret. Hvis det endrer `src/components/Button.tsx`, legges ikke API-reglene til i konteksten. På denne måten brukes kontekstvinduet bare på det som er relevant. `.claude/rules/`-katalogen fungerer også uten `CLAUDE.md`: Hvis prosjektet bare inneholder `AGENTS.md`, lastes reglene inn sammen med den og de deaktiverer ikke direkte lesing av `AGENTS.md`.

Cursor og Windsurf støtter samme tilnærming via katalogene `.cursor/rules/` og `.windsurf/rules/`. AGENTS.md-standarden kan vise til disse katalogene, men syntaksen på tvers av verktøy er ennå ikke helt stabil. Det er tryggere å beholde delte regler i `AGENTS.md` og duplisere banebegrensede regler i `.claude/rules/` og `.cursor/rules/` — dette er sjeldne spesialtilfeller, ikke hoveddelen av reglene.

Nyttige plasseringer for CLAUDE.md (ordnet fra bredest til smalest):

| Nivå | Plassering | Formål |
|----|----|----|
| **Administrert policy** | `/Library/Application Support/ClaudeCode/CLAUDE.md` (Mac), `/etc/claude-code/CLAUDE.md` (Linux) | Bedriftsregler, IT/DevOps |
| **Bruker** | `~/.claude/CLAUDE.md` | Personlige preferanser på tvers av alle prosjekter |
| **Prosjekt** | `./CLAUDE.md` eller `./.claude/CLAUDE.md` | Regler for prosjektteamet |
| **Lokal** | `./CLAUDE.local.md` (i `.gitignore`) | Personlige preferanser for et bestemt prosjekt |

En eksempel-`~/.claude/CLAUDE.md` kan inneholde to regler: «svar på språket brukeren foretrekker» og «stav Ailoot akkurat slik». Disse reglene gjelder for alle prosjekter, så det er ikke nødvendig å gjenta dem i hvert repositorium.

Av disse fire nivåene er det bare prosjektets `CLAUDE.md` og `CLAUDE.local.md` som deaktiverer direkte lesing av `AGENTS.md`. En personlig `~/.claude/CLAUDE.md` og en administrert policy står ikke i veien; Claude Code leser dem sammen med `AGENTS.md`.

## Hva bør du gjøre hvis AGENTS.md allerede er utdatert i prosjektet?

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

Viktig poeng

Hvis `AGENTS.md` ble satt sammen i 2025 for Codex eller Aider og ikke har blitt redigert siden, åpner du prosjektet i Claude Code og ber Claude redigere filen. AGENTS.md er et levende dokument; Linux Foundation-spesifikasjonen oppdateres. Hovedregelen for å holde det oppdatert er at hver regel må svare på spørsmålet «Hva er jeg lei av å gjenta for Claude/Codex?» Hvis den ikke gjør det, arkiverer du den.

</div>

I prosjektet jeg beskrev, hadde jeg en `AGENTS.md` fra mai 2025 — 180 linjer, mange av dem utdaterte (den nevnte Anthropic API-endepunkter som siden var endret; eksempler med `claude --tools`-syntaks som ikke lenger finnes; og regler om `~/.claude/projects/` med en utdatert struktur).

Planen jeg brukte for å oppdatere den:

1.  **Gå gjennom den med `claude` i plan mode.** Jeg åpner repoet, kjører `claude --safe-mode` og spør: «Les `AGENTS.md` på nytt og foreslå en liste over utdaterte eller gjentatte punkter. Ikke rediger den; bare list dem opp.» På to minutter fikk jeg en liste med 23 punkter til gjennomgang.
2.  **Fjern åpenbart utdaterte punkter.** Av de 23 punktene var 9 tydelig utdaterte — kommandosyntaks, endepunkter og flaggnavn. Jeg slettet disse linjene.
3.  **Slå sammen duplikater.** Ytterligere 6 punkter gjentok hverandre med ulike formuleringer («ikke force-push», «bruk aldri `--force`», «unngå `git push -f`»). Jeg slo dem sammen til én linje.
4.  **Legg til nye punkter.** Jeg la til ting jeg hadde merket at Claude/Codex jevnlig gjorde feil den siste måneden, etter regelen «én linje per feiltype». Det resulterte i 8 nye punkter.
5.  **Kjør en subagent for en siste gjennomgang.** Jeg ba om en gjennomgang av Claude med instruksjonen «finn motsetninger, uklarheter og duplikater». Den fant tre formuleringer som kunne gjøres tydeligere. Jeg rettet dem.

Etter en time var `AGENTS.md` 110 linjer lang og oppdatert, og jeg kjente hver linje personlig. Det var enkelt å lage en `CLAUDE.md` på 30 linjer ut fra den. Codex ble merkbart mer nøye med tester etterpå — jeg mistenker at noen av de «merkelige» avgjørelsene skyldtes utdaterte instruksjoner det hadde fulgt i god tro.

Hovedprinsippene for en levende `AGENTS.md`:

- **Hver regel svarer på en tilbakevendende feil.** Hvis jeg ikke kom på en regel én eneste gang i løpet av måneden, er det ingen grunn til å beholde den.
- **Skriv regler som kommandoer, ikke teori.** «Bruk to mellomrom» er en regel. «Kodestilen bør være ryddig» er ikke det.
- **Spesifikke regler er bedre enn generelle.** «Kjør `npm run build` før `git push`» er en regel. «Test endringene dine» er ikke det.

## Hva fungerer definitivt IKKE med dette oppsettet?

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

Viktig poeng

Import av `@AGENTS.md` får ikke ulike verktøy til å oppføre seg likt. Hvert verktøy har sine særegenheter: Codex CLI kjenner ikke til `.claude/rules/` eller hooks. Cursor har sin egen motor for autofullføring, som ikke leser CLAUDE.md mens den fullfører tekst. Copilot følger `.github/copilot-instructions.md`, og regler i AGENTS.md alene er ikke nok for det. Det er ikke «én fil = én atferd», men «én kilde for grunnreglene, deretter har hvert verktøy sine egne tillegg».

</div>

Her er noen ting jeg lærte på den harde måten i løpet av seks måneder med dette oppsettet:

**1. Cursor-autofullføring bruker ikke AGENTS.md.** Når Cursor foreslår å fullføre en linje i redigeringsprogrammet, leser det ikke `AGENTS.md` i sanntid — en egen, rask motor gjør jobben. Regler i AGENTS.md har bare betydning når du sender en chatforespørsel i Cursor. Å skrive «ikke bruk `var`, bruk `const`» i AGENTS.md påvirker derfor ikke autofullføringen; det må konfigureres via ESLint eller TypeScript-konfigurasjonen.

**2. Claude Code-hooks i AGENTS.md fungerer ikke for Codex.** Hvis `.claude/settings.json` har en PreToolUse-hook konfigurert til å blokkere en bestemt handling, er denne informasjonen bare nyttig for Claude. Codex kjenner ikke til hooks; for Codex er dette «verktøyet bestemmer selv». Det er fornuftig å skrive «ikke gjør X» i `AGENTS.md`, og «det finnes en hook som fysisk blokkerer X» i `CLAUDE.md` under importen.

**3. Copilot og `.github/copilot-instructions.md`.** GitHub Copilot leser sin egen fil og leser fremdeles ikke AGENTS.md særlig godt. Hvis teamet ditt bruker Copilot aktivt, legger du enten til en egen `.github/copilot-instructions.md` med en forkortet versjon av reglene, eller bruker [Copilot Extensions](https://github.com/marketplace?type=apps&category=copilot-extensions) som kjenner til AGENTS.md. Dette endrer seg raskt, så bildet kan være annerledes om tre til seks måneder.

**4. Git sporer ikke en symbolsk lenke som en CLAUDE.md-endring.** Hvis du kjører `ln -s AGENTS.md CLAUDE.md` og oppdaterer `AGENTS.md` en uke senere, viser Git bare en diff for `AGENTS.md`. Det er normalt, men en kollega som gjennomgår pull requesten, skjønner kanskje ikke at `CLAUDE.md` også er oppdatert via den symbolske lenken. Løsning: Skriv uttrykkelig i PR-beskrivelsen: «`AGENTS.md` er oppdatert; Claude Code ser den samme filen via den symbolske lenken.»

**5. Det er vanskelig å feilsøke dype importer.** Hvis `AGENTS.md` importerer `@docs/coding-style.md`, som importerer `@docs/typescript.md`, og en regel kommer i konflikt med en annen, er feilsøkingen vanskelig. Jeg holder importer på ett nivå (`CLAUDE.md` → `AGENTS.md`) og nøster ikke videre. Anthropic tilbyr en `InstructionsLoaded`-hook som logger hvilke filer som ble lastet inn — nyttig for feilsøking av lagdelte oppsett. Merk: Hooken utløses for `AGENTS.md` som er tatt med via import eller symbolsk lenke, men ikke for `AGENTS.md` som Claude Code leste selv.

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

### Kilder

- [Dokumentasjonen om Claude Code Memory – AGENTS.md-delen](https://code.claude.com/docs/en/memory#agents-md) – når Claude Code leser AGENTS.md selv, innstillinger for Project instructions, importer og symbolske lenker, og `/init`-atferd.
- [Dokumentasjonen om Claude Code Memory – import av flere filer](https://code.claude.com/docs/en/memory#import-additional-files) – syntaksen `@path/to/file`, fire nivåer dybde, relative og absolutte baner.
- [agents.md – Linux Foundation-standarden](https://agents.md/) – den offisielle AGENTS.md-standarden og en liste over støttede verktøy.
- [Dokumentasjon for Cursor Rules](https://docs.cursor.com/context/rules-for-ai) – hva Cursor leser (`.cursor/rules/*.mdc`, AGENTS.md).
- [Egendefinerte instruksjoner for GitHub Copilot](https://docs.github.com/en/copilot/customizing-copilot/adding-custom-instructions-for-github-copilot) – formatet til `.github/copilot-instructions.md`.
- [AGENTS.md-spesifikasjonen hos Linux Foundation](https://aaif.io/projects/agents-md/) – den levende spesifikasjonen.

</div>

Det komplette vibe-coding-oppsettet for en kveld: **AI-klone + Second Brain + kontekstutvikling**. 



Bli kjent med [Ailoot](https://ailoot.ai/).

## Spørsmål om denne veiledningen: Én instruksjonsfil for Claude Code, Codex og Cursor i 2026

### Når bør jeg bruke import fremfor symlenke?

Bruk @AGENTS.md i CLAUDE.md når du trenger Claude-spesifikke tillegg eller kolleger bruker Windows. En symlenke gjør at begge navn viser samme innhold og kan derfor ikke inneholde en separat Claude-seksjon.

### Hvordan sjekker jeg at delte instruksjoner lastes?

Kjør /memory og kontroller listen over instruksjonsfiler. Hvis CLAUDE.md eller CLAUDE.local.md hindrer direkte AGENTS.md-lasting i ditt oppsett, legg til import eller velg innstillingen som laster begge. Start så en ny økt.


## Ailoot · Selskapet og dets prosjektportefølje

Ailoot bygger på etablert driftserfaring, en stor kundebase, stabil tjeneste og løpende KPI-kontroll.

Selskapet og dets prosjektportefølje: millioner av kunder; månedlig salg for milliarder.

Ailoot bruker denne driftserfaringen til API-tilgang til AI-funksjoner i kundenes produkter, agenter, applikasjoner og automatiseringer.
