Forklaring

Sandkassen

nav-pilot starter klienten i cplt, sandkassen for kodeagenter. Her er hvorfor, og hva sikkerhetsnivåene gjør.

Isolasjon er påkrevd på Nav-utstyr

En KI-agent på Nav-utstyr skal kjøre i en sandkasse eller tilsvarende isolasjon. Kravet gjelder både arbeid for Nav og eget arbeid.

Bruk cplt. Det er det enkleste. Velger du noe annet, må du selv slå på isolasjonen i klienten, eller isolere på en annen måte, for eksempel med en VM eller en container. Ikke kjør agenter med full tilgang til maskinen.

Kortversjonen av kravet er en lenke du kan dele med andre.

Prosjektkatalogen

nav-pilot gir cplt katalogen du står i som prosjektkatalog, med --project-dir. Agenten kan lese og skrive der og under, ikke i mapper ved siden av. Står du i en undermappe, gjelder sandkassen bare den, men instruksjonene i roten av repoet, som .github/ og AGENTS.md, kan agenten likevel lese. Trenger den hele repoet, start fra roten eller kjør nav-pilot --project-dir <katalog>. Hjemmekatalogen og / avviser cplt, fordi de gir for mye tilgang.

Trenger repoet mer enn standard, for eksempel localhost til Gradle eller en database, se Sett opp cplt i et repo. Står du i et git-worktree, se Worktrees med nav-pilot og cplt. Feilmeldinger fra sandkassen slår du opp i Feil i sandkassen.

Sikkerhetsnivå i cplt

Nivået er sandbox.preset i cplt. Det avgjør hva cplt stopper:

  • standard (anbefalt, og det du har hvis du ikke har valgt noe): agenten kan committe, pushe egne brancher og åpne pull requests. cplt stopper gh pr merge, push til default branch og force push.
  • strict: som standard, men agenten når bare hoster på en liste, og all push er stoppet. Velg det bare hvis du vil låse nettverket. Se Strict i detalj.
  • permissive og full-trust: vaktene er av, og cplt stopper ingenting av dette.

Veiviseren i nav-pilot endrer ikke nivået du har. Vil du bytte, kjør nav-pilot config setup --advanced. Tabellen over innstillingene står i referansen.

Kommandoer og git i sandkassen

Oppsettet i nav-pilot stiller to spørsmål om hva agenten får gjøre selv. Med standard og strict stopper cplt likevel gh pr merge, push til default branch og force push, uansett hva du svarer.

  • How should the agent run commands? (bare Copilot CLI). Det anbefalte valget lar agenten kjøre kommandoer uten å spørre hver gang. nav-pilot sender da --allow-all-tools --allow-all-paths --allow-all-urls, men bare når klienten kjører i cplt. «Ask before each command» gjør at Copilot CLI spør før hver kommando. OpenCode og pi styrer dette selv. For OpenCode er det nøkkelen permission i opencode.json.
  • What may the agent do with git? Det anbefalte valget lar agenten committe, pushe egne brancher og åpne pull requests. «Commit only» stopper all push. Med permissive eller full-trust kommer ikke spørsmålet, fordi git- og gh-vaktene er av.

Svaret på det første spørsmålet er nøkkelen autonomy:

nav-pilot config set autonomy conservative   # spør før hver kommando
nav-pilot config set autonomy sandbox        # kjør kommandoer selv

Brukte du Copilot CLI med nav-pilot før, og valgte aldri selv at den skulle spørre, kjører den nå kommandoer på egen hånd i cplt. nav-pilot sier fra om det én gang. En autonomy = "conservative" som en eldre nav-pilot skrev selv, teller ikke som et valg. nav-pilot config set autonomy skriver også autonomy_chosen = true, så valget ditt blir stående.

Kjører du nav-pilot config setup på nytt, starter hvert spørsmål på det du har nå. Trykker du bare Enter, blir fila som den er.

Strict i detalj

strict slår på tvungen proxy og proxy.default_allowlist. Da når agenten bare hostene på lista til cplt og det proxy.allowed_domains peker på. Hoster som ikke står der, blir blokkert, også interne hoster du tar i bruk senere. Verken nav-pilot doctor eller innstillingssiden anbefaler strict.

Lista til cplt dekker GitHub Copilot og de offentlige pakkeregistrene, men ingenting hos Nav. Setter du strict for hånd, slutter telemetrien fra nav-pilot å komme fram. Skills som aksel-builder, observability-debugging og nav-auth mister hostene de er bygget rundt, og ingenting på skjermen sier hvorfor.

Sett det derfor med nav-pilot:

nav-pilot config setup --advanced   # velg «Allowlist only (cplt strict)»
nav-pilot config                    # eller raden «cplt strict preset (blocks all pushes)»

nav-pilot skriver lista over hoster til ~/.nav-pilot/cplt-allowed-domains.txt, peker proxy.allowed_domains dit, og setter nivået til slutt, så låsen aldri blir aktiv uten hostene. Har du en egen proxy.allowed_domains, lar nav-pilot den være og sier at du må legge til hostene selv. Nøkler du har satt selv, gjelder foran nivået.

Fila har hele lista: Nav-hostene, cplts egen liste og pakkeregistrene. Agenten når derfor pakkeregistrene selv om proxy.default_allowlist er av. nav-pilot henter lista med cplt config hosts. Er cplt for gammel til det, skriver nav-pilot en frosset liste med GitHub, Copilot og pakkeregistrene som fantes da, uten dem cplt har lagt til siden. Lista til cplt er per agent: lista for copilot har GitHub og Copilot, den for opencode har opencode.ai og models.dev.

Push. Strict stopper all push, så agenten kan ikke pushe en branch eller åpne en pull request. Velger du strict med nav-pilot config setup --advanced, kan du i neste spørsmål la agenten pushe brancher likevel. Da setter nav-pilot git_guard.protect_default_branch_only = true, og cplt stopper bare push til default branch og force push. Har du satt den nøkkelen fra før, gjelder den foran nivået, også når du slår på strict fra nav-pilot config. Vil du stoppe all push, velg «Commit only» i git-spørsmålet.

Lokal modell. Den lokale modellen går gjennom en loop guard (stopper modellen når den gjentar seg) på 127.0.0.1. cplt blokkerer localhost som standard, så nav-pilot sender porten med som --allow-localhost <port> ved hver oppstart. Én port slipper gjennom tvungen proxy på både macOS og Linux, så strict og lokal modell går sammen.

Tilbake til standard. Bytter du fra strict til standard, spør nav-pilot (fra 29. september 2026): Remove the network allowlist nav-pilot set up for strict? Spørsmålet kommer bare for lista nav-pilot la inn selv. Svarer du nei, eller har du en egen liste, blir lista stående, og agenten når fortsatt bare hostene på den. Kommandoen under fjerner lista som gjelder, uansett hvem som la den inn:

cplt config set proxy.allowed_domains --unset --global

Strict på Linux

På Linux krever proxy.forced at kjernen kan begrense nettverket med Landlock: ABI v4, altså kjerne 6.7 eller nyere med Landlock slått på. Under det starter ikke cplt med strict. Derfor nekter nav-pilot å sette strict der, både i oppsettet og på innstillingssiden, og sier hvorfor. Har du allerede strict på en slik maskin, melder nav-pilot doctor det som en feil.

nav-pilot spør kjernen med samme systemkall som cplt, ikke uname. Landlock kan være kompilert bort eller slått av ved oppstart, og da ville versjonsnummeret sagt «går fint» rett før cplt nektet å starte. macOS har ingen slik grense. Der gjør Seatbelt jobben.