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
npm.pkg.github.com svarer 401 Unauthorized uten token, også for offentlige pakker, og cplt stenger ~/.npmrc der tokenet ligger. Det enkleste er å kjøre pnpm install utenfor cplt før du starter agenten. Hvorfor, og hva det koster å åpne tokenfilene, står i Pakker fra GitHub Packages. 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.
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, pnpm og yarn 1. 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.
Sperren gjelder også pnpm 11 og nyere og yarn 1, men ikke yarn 2 og nyere: de kjører prosjektets eget postinstall. Bruker du cplt fra før 30. september 2026, kjører de prosjektets egne skript. Da må du si fra selv:
pnpm install --ignore-scripts yarn install --ignore-scripts
.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
Hva det åpner, hva det koster på Linux, hvorfor det ikke virker med tvungen proxy, og hvordan du legger det i repoet for hele teamet, står i Tjenester på localhost.
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.
Puppeteer og Mermaid-diagrammer
Med mermaid-cli (mmdc) kan agenten gjøre Mermaid-diagrammene sine om til PNG og se på bildet selv. mmdc starter Chrome gjennom Puppeteer, og det stopper i cplt på tre steder:
- Puppeteer laster ned Chrome til
~/.cache/puppeteer. På macOS får ingenting kjøre derfra, og--allow-cache-execnår ikke den mappa. Feilen erError: spawn EPERM. - Chromium må startes med
--no-sandbox. - Puppeteer snakker med nettleseren over en WebSocket på localhost, og cplt stenger localhost.
mmdcskriver da bare[object Object].
Bruk nettleseren fra Playwright i stedet. Installer mmdc i prosjektet, installer nettleseren utenfor cplt og åpne mappa:
npm install -D @mermaid-js/mermaid-cli npx playwright install chromium-headless-shell cplt config set sandbox.allow_cache_exec ms-playwright ls ~/Library/Caches/ms-playwright # finn versjonen, f.eks. chromium_headless_shell-1243
Pek Puppeteer på nettleseren med full sti. "pipe": true gjør at Puppeteer snakker med nettleseren over en pipe i stedet for localhost. Stien under gjelder Mac med Apple-brikke; på Mac med Intel heter mappa chrome-headless-shell-mac-x64:
{
"executablePath": "/Users/<deg>/Library/Caches/ms-playwright/chromium_headless_shell-1243/chrome-headless-shell-mac-arm64/chrome-headless-shell",
"args": ["--no-sandbox"],
"pipe": true
}npx mmdc -p puppeteer.json -i diagram.mmd -o diagram.png
Vil du heller bruke Puppeteers egen Chrome, legg cachen under Playwright-mappa, som allerede er åpnet, og last ned nettleseren dit utenfor cplt. Da trenger du ikke executablePath, men args og pipe må fortsatt stå i puppeteer.json:
export PUPPETEER_CACHE_DIR=~/Library/Caches/ms-playwright/puppeteer npx puppeteer browsers install chrome-headless-shell cplt --pass-env PUPPETEER_CACHE_DIR
pnpm-konfig og tokens
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
Det samme gjelder npx -y @mermaid-js/mermaid-cli, se Puppeteer og Mermaid-diagrammer. Trenger agenten npx for pakker utenfor prosjektet, flytt npm-cachen inn i cache-mappa og åpne bare npx-mappa der. Legg variabelen i ~/.zshrc eller ~/.bashrc. cplt config set-linjene kjører du én gang:
export npm_config_cache="$HOME/Library/Caches/npm" # macOS cplt config set sandbox.pass_env npm_config_cache cplt config set sandbox.allow_cache_exec npm/_npx
npm starter da med en ny cache, og alle pakkene npx henter, kan kjøre i sandkassen. På Linux er cache-mappa ~/.cache, så der blir stien $HOME/.cache/npm.
Pakkeregistre og en liste over tillatte hoster
Uten en liste over tillatte hoster virker installasjoner som vanlig. npm og yarn er med både i proxy.default_allowlist og i fila nav-pilot skriver (se Pakkeregistre og en liste over tillatte hoster), men ikke hostene Playwright og Cypress laster ned nettlesere fra. Sjekk en host 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 host 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.