>_ DevTrendspl

Język

Strona główna

Języki

Sekcje

Frontend Backend Mobilne DevOps AI / ML GameDev Blockchain Systemy wbudowane Bezpieczeństwo
Rust

Jak uruchomić agenta AI lokalnie bez wycieku kluczy SSH

Gdy uruchamiasz narzędzie takie jak Claude Code, OpenCode lub jakiegokolwiek innego autonomicznego agenta bezpośrednio w konsoli, pojawia się lekkie poczucie niepokoju. Udzielamy zewnętrznemu modelowi językowemu prawa do wykonywania poleceń w terminalu, odczytu plików i modyfikacji kodu źródłowego. Tymczasem domyślnie proces zachowuje te same prawa co lokalny użytkownik. Model może przypadkowo odczytać plik .env, przeglądać zawartość ~/.ssh/id_rsa lub pobierać konfiguracje z katalogu domowego.

Zazwyczaj ludzie uruchamiają kontenery Docker lub maszyny wirtualne dla bezpieczeństwa. Ale to jest niewygodne w codziennej pracy. Uruchomienie kontenerów trwa wiecznie, zużywają gigabajty pamięci RAM i wymagają ciągłej konfiguracji montowania folderów.

Projekt nono oferuje inne rozwiązanie. Został stworzony przez zespół, który wcześniej uruchomił Sigstore — standard cyfrowego podpisywania pakietów używany przez PyPI, npm i Homebrew.

nono logo

Izolacja procesów w ułamku sekundy

Narzędzie tworzy piaskownicę dla dowolnego procesu AI bez użycia kontenerów, demonów w tle czy wirtualnych dysków. Wystarczy owinąć uruchomienie agenta jednym poleceniem CLI, a proces natychmiast trafia do ograniczonego środowiska.

Kod projektu jest napisany w Rust. Obsługiwane są macOS, Linux i Windows przez WSL2.

Oto jak wygląda uruchomienie agenta:

nono search opencode
nono run --profile nolabs-ai/opencode -- opencode

Po tym poleceniu opencode może odczytywać i edytować pliki tylko w bieżącym folderze. Wszystkie inne katalogi na dysku, prywatne klucze SSH i globalne zmienne systemowe stają się całkowicie niewidoczne dla procesu.

Praca z profilami bezpieczeństwa

Ustawienia dostępu są przechowywane w specjalnym rejestrze pod adresem registry.nono.sh. Istnieją gotowe profile dla popularnych narzędzi. Profil opisuje reguły dostępu do plików, dozwolone hosty sieciowe i opcje przekazywania tokenów.

Jeśli gotowy profil z rejestru ci nie odpowiada, łatwo go dostosować:

nono profile init opencode --extends nolabs-ai/opencode
nono run --profile opencode -- opencode

Polecenie wygeneruje plik JSON z konfiguracją deklaratywną. Możesz go edytować, zapisać w Git swojej firmy i używać w całym zespole.

Izolacja zewnętrznych narzędzi i proxy tokenów

Najciekawszą częścią nono jest to, jak projekt współpracuje z zewnętrznymi narzędziami. Agenci rzadko pracują w izolowanej próżni. Zazwyczaj wywołują narzędzia takie jak git, gh, kubectl lub uruchamiają serwery MCP.

Standardowe piaskownice dają agentowi pełny dostęp do sieci i kluczy albo odcinają wszystko. W nono narzędzia są uruchamiane w oddzielnych podrzędnych piaskownicach z własnymi zasadami.

Przepływ pracy wygląda następująco:

  • Agent chce uruchomić git, ale proces potomny otrzymuje dostęp tylko do katalogu repozytorium i plików serwisowych Git.
  • Agent żąda pracy z gh, ale surowy token GitHub nie dociera w ogóle do pamięci agenta.
  • Żądania przechodzą przez wbudowany serwer proxy, gdzie można skonfigurować filtrowanie na poziomie metody HTTP.
  • Możesz zezwolić agentowi tylko na odczyt listy issue'ów przez żądania GET do API, blokując usuwanie repozytoriów i pushy do gałęzi głównej.

Polityka dostępu jest ustalona w pliku konfiguracyjnym. Agent nie może zmienić tych reguł od wewnątrz ani wyodrębnić poświadczeń autoryzacji z pamięci.

Przykładowa konfiguracja z ograniczeniem dostępu do API GitHub:

{
  "command_policies": {
    "credentials": {
      "github-api": {
        "type": "proxy",
        "upstream": "https://api.github.com",
        "credential_key": "keyring://gh:github.com/example?decode=go-keyring",
        "env_var": "GH_TOKEN",
        "inject_header": "Authorization",
        "credential_format": "Bearer {}"
      }
    },
    "commands": {
      "gh": {
        "from": {
          "session": {
            "sandbox": {
              "fs_read": ["."],
              "credentials": [
                {
                  "name": "github-api",
                  "endpoint_policy": {
                    "default": "deny",
                    "allow": [
                      { "method": "GET", "path": "/repos/nolabs-ai/nono/issues/**" }
                    ]
                  }
                }
              ]
            }
          }
        }
      }
    }
  }
}

Gotowe biblioteki dla różnych języków

Deweloperzy nie ograniczyli projektu do narzędzia CLI. Jeśli piszesz własnego agenta AI lub framework serwisowy, możesz osadzić ograniczenie uprawnień bezpośrednio w kodzie aplikacji.

Repozytorium zawiera gotowe powiązania FFI:

  • Python (nono-py)
  • TypeScript (nono-ts)
  • Go (nono-go)
  • Rust (biblioteka natywna)

Szybki start

Instalacja narzędzia na macOS przez Homebrew zajmuje jedno polecenie:

brew install nono

Dla innych platform dostępny jest standardowy skrypt instalacyjny:

curl -fsSL https://nono.sh/install.sh | sh

Projekt jest rozpowszechniany na licencji Apache-2.0. Kod jest otwarty, a repozytorium ma już ponad 3000 gwiazdek na GitHub.

Czy warto zainstalować

Jeśli codziennie używasz agentów AI w konsoli, takich jak Claude Code, OpenCode, lub tworzysz własne narzędzia oparte na MCP, rzuć okiem na nono. To wygodny sposób, żeby przestać martwić się o bezpieczeństwo kluczy SSH i dostępu do chmury, nie rezygnując z szybkości terminala.

Powiązane projekty