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:
@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:
- EPERM på …/Library/Preferences/pnpm/config.yaml: pnpm fikk ikke lese sin egen konfig.
- ERR_PNPM_EPERM i node_modules: pakker med en
.claude-mappe kunne ikke installeres.
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.