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.
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