Guider
Sett opp cplt i et repo
Første gang agenten skal jobbe i et repo, trenger sandkassen ofte litt mer enn standard. Legg det i .cplt.toml, så får hele teamet det samme.
brew update brew upgrade navikt/tap/nav-pilot navikt/tap/cplt copilot update # Copilot CLI opencode upgrade # hvis du bruker opencode
Første gang i et repo
Uten egen konfig slipper cplt agenten til prosjektkatalogen og de offentlige pakkeregistrene. Docker og filene med tokenene dine er stengt, og på macOS også localhost. Det repoet trenger i tillegg, skriver teamet i .cplt.toml i roten av repoet.
Start med å se hva cplt init foreslår. Uten flagg skriver den ingenting:
cplt init
Se over forslaget. Under [propose] står det som åpner sandkassen. Linjer som er kommentert ut, peker på filer i hjemmekatalogen din og hører hjemme i din egen konfig, ~/.config/cplt/config.toml, ikke i repoet. cplt init finner ikke alt: for Go foreslår den ingenting, og for Gradle mangler localhost. Sammenlign med tabellen under.
Er forslaget riktig, skriv fila, sjekk den inn og godkjenn den:
cplt init --write git add .cplt.toml git commit -m "chore: add cplt sandbox config" cplt trust accept --all
cplt leser fila slik den er i siste commit, så agenten kan ikke gi seg selv mer midt i en økt. Hver utvikler godkjenner forslaget på sin egen maskin med cplt trust accept. cplt trust show viser hva som er godkjent, og hva som venter.
Har repoet allerede en .cplt.toml, legg til én nøkkel om gangen, eller ta med det init finner nå:
cplt config set --repo allow.localhost 5432 # legger forslaget i .cplt.toml cplt init --write --merge # legger til nye funn, fjerner ingenting
Det stakken din trenger
Feilen du ser i sandkassen på macOS, og hva du skriver i .cplt.toml. localhost står under [propose.allow], de andre nøklene under [propose]. Feilmeldingene lenker til oppslaget i Feil i sandkassen.
| Stakk | Feilen | I .cplt.toml |
|---|---|---|
| Go, tester med httptest | dial tcp 127.0.0.1:…: connect: operation not permitted | allow_localhost_any = true |
| Gradle | Could not connect to the Gradle daemon. | allow_localhost_any = true |
| MockK, Mockito inline | Could not self-attach to current VM | allow_jvm_attach = true |
| Next.js dev-server med Turbopack | node process exited before we could connect to it | allow_localhost_any = true |
| Database eller Docker Compose på egen maskin | connect EPERM 127.0.0.1:5432 | localhost = [5432] |
| @navikt-pakker fra GitHub Packages | 401 Unauthorized … authentication token not provided | Ingenting. Se Pakker fra GitHub Packages. |
En Kotlin-app med Gradle, MockK og PostgreSQL i Docker Compose får denne fila:
[propose] allow_localhost_any = true # Gradle-daemonen, httptest og Turbopack bruker tilfeldige porter allow_jvm_attach = true # MockK [propose.allow] localhost = [5432] # PostgreSQL fra docker compose
Go-tester med httptest, Gradle-daemonen og Turbopacks arbeidsprosesser lytter på tilfeldige porter, så én port er ikke nok. Med bare port 3000 åpen starter Next.js, men første side feiler. Databasen har fast port, og da holder det å åpne den.
Bruk localhost, ikke ports, for tjenester på din egen maskin. ports åpner porten mot alle maskiner på nettet, og på macOS gir den ikke tilgang til localhost. Det gjelder også når cplt init foreslår ports eller cplt check net foreslår --allow-port: bruk localhost eller --allow-localhost.
Pakker fra GitHub Packages
@navikt-pakker på npm og Maven ligger i GitHub Packages, og der må du logge inn. Tokenet ligger i ~/.npmrc, ~/.gradle/gradle.properties eller ~/.m2/settings.xml. cplt stenger disse filene, så npm install svarer 401 Unauthorized og Gradle finner ikke pakken. På Linux er bare ~/.npmrc stengt. De to andre ligger i mapper agenten har tilgang til.
For npm og pnpm er det enklest å installere utenfor cplt før du starter agenten:
pnpm install # i terminalen, utenfor cplt nav-pilot
Må agenten hente pakker selv, gi den lesetilgang til de tre filene:
cplt config set sandbox.allow_build_credentials true --force
Da kan agenten lese alle tokenene i filene, ikke bare det prosjektet trenger. Derfor krever cplt --force, og derfor kan ikke nøkkelen stå i .cplt.toml. Bruk et token som bare kan lese pakker (read:packages). Trenger du bare én av filene, gi lesetilgang til den, for eksempel cplt config set allow.read ~/.gradle/gradle.properties.
pnpm
I sandkassen legger pnpm lageret i repoet, i .pnpm-store/ eller node_modules/.pnpm-store/, og laster ned alle pakkene på nytt i hvert repo og hvert worktree. Årsaken er at pnpm vil lage en mappe i $PNPM_HOME, der agenten ikke får skrive (cplt#637). Pek pnpm på det felles lageret, her på macOS:
export pnpm_config_store_dir=$HOME/Library/pnpm/store # i skallet, for eksempel ~/.zshrc cplt config set sandbox.pass_env pnpm_config_store_dir # send den inn i sandkassen
Ellers legger du lageret i .gitignore:
echo ".pnpm-store/" >> .gitignore
Skript som kjører når en pakke installeres, er slått av i sandkassen. Trenger en pakke dem, installer utenfor cplt.
mise
Verktøy mise allerede har installert, kan agenten bruke, og mise run virker. Mangler en versjon, stopper mise med denne feilen:
failed create_dir_all ~/.local/share/mise/installs/…: Operation not permitted
Det er med vilje. Et program agenten laster ned og kjører selv, kan gjøre det sandkassen ellers stopper. Installer utenfor cplt før du starter agenten:
mise install
Docker
Docker er stengt i sandkassen. Den som kan snakke med Docker-daemonen, kan starte en container som monterer hele disken, og da er sandkassen borte. Det gjelder også Testcontainers, se Testcontainers og Docker.
cplt init foreslår allow_docker når repoet har en Dockerfile. Ta den ut av forslaget. I Nav bygger CI-en imagene, så agenten trenger ikke Docker. Start tjenestene selv i en egen terminal, og åpne portene agenten skal nå:
docker compose up -d # i en terminal utenfor cplt cplt config set --repo allow.localhost 5432 # agenten når databasen på localhost
Brytere for hele maskinen
Det som gjelder alle repoene dine, hører hjemme i din egen konfig, ~/.config/cplt/config.toml. nav-pilot config sandbox viser bryterne for hele maskinen, for eksempel localhost og Docker, og skriver dit. Det samme gjør cplt config set:
nav-pilot config sandbox cplt config set sandbox.allow_localhost_any true
Sikkerhetsnivået setter du med nav-pilot config, se Sandkassen. Får du en feil du ikke finner her, slå den opp i Feil i sandkassen.