Guider

Node, npm og pnpm i sandkassen

Det du trenger for at npm, pnpm og yarn skal virke når agenten kjører i cplt.

brew update
brew upgrade navikt/tap/nav-pilot navikt/tap/cplt
copilot update    # Copilot CLI
opencode upgrade  # hvis du bruker opencode

@navikt-pakker fra GitHub Packages

@navikt-pakkene ligger i GitHub Packages, og npm.pkg.github.com svarer 401 Unauthorized uten token, også for offentlige pakker. Tokenet ligger som regel i ~/.npmrc, og den fila stenger cplt. Det enkleste er å installere utenfor cplt før du starter agenten:

pnpm install        # i terminalen, utenfor cplt
nav-pilot

Må agenten installere selv, kommer det an på pakkebehandleren.

npm: token fra en miljøvariabel

npm leser en miljøvariabel i prosjektets .npmrc. Da trenger agenten ikke ~/.npmrc:

.npmrc
@navikt:registry=https://npm.pkg.github.com
//npm.pkg.github.com/:_authToken=${NODE_AUTH_TOKEN}

cplt fjerner miljøvariabler som kan være hemmeligheter, så variabelen må sendes inn. Bruk et token som bare kan lese pakker (read:packages):

cplt config set sandbox.pass_env NODE_AUTH_TOKEN   # alltid
cplt --pass-env NODE_AUTH_TOKEN                    # bare denne økten

Uten variabelen sender npm teksten ${NODE_AUTH_TOKEN} som token, og får 401.

pnpm: trenger ~/.npmrc

pnpm leser ikke miljøvariabler i prosjektets .npmrc, så tokenet må ligge i ~/.npmrc. Gi agenten lesetilgang til fila, og dermed til alle tokenene i den:

cplt config set allow.read ~/.npmrc

cplt init og cplt doctor sier fra når prosjektets .npmrc henter et scope fra GitHub Packages. Skal agenten også lese ~/.gradle/gradle.properties og ~/.m2/settings.xml, se Pakker fra GitHub Packages i oppsettguiden.

yarn 1

yarn 1 stopper med EPERM: operation not permitted, open …/.npmrc når ~/.npmrc finnes, også når prosjektet bare henter offentlige pakker. Det hjelper ikke å peke NPM_CONFIG_USERCONFIG et annet sted, for yarn 1 leter også oppover fra prosjektmappa. Gi lesetilgang til fila, som for pnpm. Har du en ~/.yarnrc, trenger den det samme, se .yarnrc.

Skript som kjører ved installasjon

Skript som postinstall og prepare kan kjøre hva som helst når en pakke installeres, og er en vanlig vei inn for skadelig kode. cplt slår dem av for npm. npm run build, npm test og andre skript du kjører selv, virker som vanlig.

Pakker som bygger noe ved installasjon, som sharp, bcrypt og esbuild, kan da feile. Installer dem utenfor cplt, eller slå skriptene på:

cplt --allow-lifecycle-scripts                                        # bare denne økten
cplt config set sandbox.allow_lifecycle_scripts true --force          # alltid
cplt config set --repo sandbox.allow_lifecycle_scripts true --force   # i .cplt.toml

cplt krever --force, fordi alle pakkene i treet da kan kjøre kode i sandkassen.

pnpm 11 og nyere og yarn 1 følger ikke sperren i dag, så prosjektets egne skript i package.json kjører også i cplt. pnpm stopper selv skriptene til avhengighetene, og sier ERR_PNPM_IGNORED_BUILDS til du godkjenner dem med pnpm approve-builds. yarn 1 kjører alle skriptene. Vil du stoppe dem, si det til pakkebehandleren selv:

pnpm install --ignore-scripts
yarn install --ignore-scripts

En rettelse i cplt er på vei, så sperren gjelder pnpm og yarn 1 også.

.env-filer

På macOS kan agenten verken lese eller skrive .env og .env.* i prosjektet. Next.js og dotenv får tomme variabler, og tester som lager slike filer, feiler med Operation not permitted. På Linux gjelder ikke sperren.

Trenger agenten filene, åpne dem:

cplt --allow-env-files                          # bare denne økten
cplt config set sandbox.allow_env_files true    # alltid

Da kan agenten lese alle hemmelighetene i filene, også .pem- og .key-filer. Er en .env-fil sporet i git, stopper git diff og git add, se cannot hash .env.local.

Utviklingsserveren på localhost

Agenten kan starte npm run dev i sandkassen, og du når serveren fra nettleseren som vanlig. Men agenten selv når ikke localhost, så den kan ikke hente sider fra serveren eller kjøre tester mot den. Åpne porten:

cplt config set allow.localhost 3000

Next.js med Turbopack, Vite og esbuild starter arbeidsprosesser som snakker sammen over tilfeldige porter på localhost. Med bare port 3000 åpen starter Next.js, men første side feiler. Da må alle portene åpnes:

cplt config set sandbox.allow_localhost_any true

Med allow_localhost_any når agenten alle tjenester som lytter på localhost, også en lokal database. På Linux koster den mer: kjernen der kan ikke skille localhost fra andre verter, så cplt slår av portfiltreringen for utgående TCP helt, og bare proxyen begrenser hvor agenten kan koble seg til.

Med proxy.forced slått på, som i --preset strict, ser cplt bort fra allow_localhost_any. Enkeltporter fra allow.localhost virker fortsatt, men de tilfeldige portene til Turbopack, Vite og esbuild kan ikke åpnes. Da må du kjøre uten tvungen proxy.

Begge kan stå i repoet, slik at hele teamet får dem. Bruk cplt config set --repo …, sjekk inn .cplt.toml og godkjenn med cplt trust accept, som beskrevet i Sett opp cplt i et repo.

Playwright og Cypress

Begge kjører nettleseren fra cache-mappa, og cplt lar ikke programmer kjøre derfra. Åpne mappa for verktøyet du bruker:

cplt config set sandbox.allow_cache_exec ms-playwright
cplt config set sandbox.allow_cache_exec Cypress

Innstillingen gjelder maskinen din og kan ikke stå i .cplt.toml. Cypress trenger i tillegg allow_localhost_any for å kjøre testene.

Chromium prøver å starte sin egen sandkasse, og det går ikke inne i cplt. For Playwright MCP slår cplt den av når ms-playwright er åpnet. Starter du Chromium på en annen måte, sett --no-sandbox selv. Feilmeldingene står under Playwright og Cypress i Feil i sandkassen.

pnpm-konfig og tokens

To feil med pnpm er rettet i cplt fra 29. september 2026. Ser du dem, oppgrader cplt:

pnpm login lagrer tokenet i auth.ini i pnpms konfigmappe (pnpm 10 og eldre: rc). På macOS er det ~/Library/Preferences/pnpm, der agenten bare får lese config.yaml. Installerer du fra et privat register med det tokenet, gi lesetilgang til fila:

cplt config set allow.read ~/Library/Preferences/pnpm/auth.ini

På Linux, og på macOS med XDG_CONFIG_HOME satt, ligger mappa i $XDG_CONFIG_HOME/pnpm, som regel ~/.config/pnpm. Den kan agenten både lese og skrive, også tokenfilene. Vil du stenge dem, slå på:

cplt config set sandbox.protect_pnpm_config true

Den er av som standard, fordi pnpm install fra et privat register da feiler med 401 hvis tokenet bare ligger i tokenfila, og pnpm login ikke virker i sandkassen. config.yaml kan pnpm fortsatt lese.

Hvorfor pnpm laster ned alle pakkene på nytt i hvert repo, og hvordan du bruker det felles lageret, står under pnpm i oppsettguiden.

Globale installasjoner

pnpm add -g og npm install -g feiler i cplt, det samme gjør pnpm setup og pnpm env use -g. Det er med vilje. Mappene de skriver til, ligger foran /usr/bin i PATH, så et program agenten la der, ville du selv kjørt neste gang, utenfor sandkassen. Kjør globale installasjoner i en vanlig terminal.

Installasjoner i prosjektet, som npm install og pnpm install, virker som vanlig.

npx <pakke> for en pakke som ikke ligger i prosjektet, stopper med /usr/bin/env: bad interpreter: Operation not permitted, fordi npx legger pakken i ~/.npm/_npx, og der får agenten ikke kjøre noe. Legg pakken i prosjektet først, så virker npx:

npm install -D semver
npx semver 1.2.3

Pakkeregistre og en liste over tillatte verter

I standardoppsettet stopper cplt bare kjente skadelige verter og verter med private adresser, og installasjoner virker som vanlig. Har du slått på en liste over tillatte verter, slipper cplt bare gjennom det som står på lista. Med proxy.default_allowlist er registry.npmjs.org og registry.yarnpkg.com med. npm.pkg.github.com kommer med fordi Copilot har github.com og alle undervertene på lista.

Vertene Playwright og Cypress laster ned nettlesere fra, er ikke med. Sjekk en vert og legg den til:

cplt check net cdn.playwright.dev
cplt config set allow.domains cdn.playwright.dev

Enklere er det å installere nettleserne utenfor cplt, med npx playwright install eller npx cypress install.

Når installasjonen feiler

Slå på loggen over blokkerte forbindelser, og kjør installasjonen i sandkassen selv:

cplt config set proxy.log_level blocked
cplt exec -- pnpm install

Linjer med [proxy] og BLOCKED viser hvilken vert som ble stoppet. Nektes du en fil, spør cplt om stien med cplt check path <sti>. Feilmeldingene står i Feil i sandkassen. Mer om hvorfor står i known-impacts.md (engelsk).

Kommandoene på denne siden er testet med cplt fra 30. september 2026 på macOS, med npm 11, pnpm 10, 11 og 12 og yarn 1.