Pipe

Backend

Pipe v0.50.5

Backend agenta. Działa na serwerze (Docker, natywnie z systemd albo w Kubernetesie – deploy.md) i wystawia lokalny Unix socket i port TCP 127.0.0.1:7379 dla klientów.

Wymagania

Moduly

ModulRola
server.pyUnix socket + TCP, ramki JSON lines, komendy klientów, subskrypcja zdarzeń, start czuwania
core/agent.pyPętla LLM z tool calling (AGENT_MAX_ITERATIONS), potwierdzenia, redakcja i przycinanie wyników, historia
core/handlers/Jeden modul na obszar narzędzi; handle_<nazwa> = narzędzie <nazwa>
core/security.pyKlasyfikator komend (fail-closed, tokenowy, świadomy cudzysłowów), workspace
core/runtime.pyTryb działania (docker / native / kubernetes) i mapowanie ścieżek hosta
core/hostinfo.pyStan hosta z /proc: RAM, CPU, dyski, gniazda – bez uruchamiania komend
core/infra.pyOdkrywanie infrastruktury (Docker, nginx, Caddy, Traefik, systemd, git, Kubernetes) i mapa Mermaid
core/diagram.pyMermaid → PNG + ASCII (mermaidx, offline)
core/targets.pyZdalne cele: rejestr, walidacja, budowanie komend ssh / docker exec / kubectl
core/workers.pyWorkery: pod-agenci na pętli agenta, tylko odczyty, równolegle
core/routines.pyRutyny: harmonogram cron, rejestr
core/watch.pyCzuwanie: sprawdzenia, alerty, powiadomienia (pub/sub), uruchamianie rutyn i pętle poniżej
core/metrics.pyHistoria pomiarów (load, RAM, dyski) i wykresy Mermaid xychart-beta
core/snapshots.pyMigawki stanu hosta i różnice – "co się zmieniło"
core/checks.pySprawdzenia bez konfiguracji: certyfikaty, strony, DNS, świeżość backupów
core/digest.pyPoranny raport (bez LLM)
core/usage.pyLicznik tokenów i kosztów LLM, dzienne limity
core/posture.pyAudyt bezpieczeństwa hosta (ocena, poprawki), strażnik zmian bezpieczeństwa, log SSH
core/vulns.pyPodatności bez LLM (OSV.dev, CISA KEV): pakiety hosta, obrazy kontenerów, zdalne serwery, aplikacje; raporty i kroki łatek
core/lockfiles.pyZależności aplikacji z lockfile'i (npm, yarn, pnpm, PyPI, uv, Go, crates.io, Packagist, RubyGems)
core/patching.py/zalataj: łatanie w tle bez pytań o każdą komendę, części przez bezpiecznik, warstwa z poprawkami w obrazie, sprzątanie, wynik
core/fleet.pyZdalne serwery w skanie i łatkach: baza pakietów przez ssh, komendy jako root albo sudo -n
core/welcome.pyPowitanie po instalacji: mapa, ocena bezpieczeństwa, co Pipe pilnuje
core/feed.pySkrzynka: wiadomości, które Pipe wysłał sam, z akcjami; decyzja o powiadomieniu (poziom, cisza nocna, limit, wyciszenia)
core/insights.pyPodpowiedzi bez LLM: prognoza zapełnienia dysku, miejsce do odzyskania, restarty, czekający restart, rosnący RAM
core/overview.pyStan serwera bez LLM (pulpit, /status): nagłówek, wskaźniki, przebieg doby
core/cleanup.pyZwolnij miejsce: obrazy bez tagu, cache budowania, pobrane paczki (/sprzataj, przycisk podpowiedzi)
core/projects.pyWarsztat: klonowanie, rozpoznanie projektu, plan uruchomienia, piaskownica (docker run bez uprawnień)
core/toolsets.pyNarzędzia na żądanie: grupy narzędzi włączane słowami kluczowymi albo load_tools
skills_builtin/, skills_builtin_en/Wbudowane skille (polskie i angielskie), instalowane do data/skills przy starcie według PIPE_LANG
core/i18n.pyJęzyk Pipe (PIPE_LANG=en|pl): tr("polski", "english") obok tekstu źródłowego, prompt() wybiera prompts_en.py / tools_en.py
core/selfupdate.pyAktualizacja samego Pipe: kontener pomocniczy (git pull, obraz wydania z GHCR albo docker-compose up -d --build), raport po restarcie
core/reminders.pyPrzypomnienia: jednorazowe wiadomości i zadania o czasie (reminders.json), odpala je czuwanie
core/incidents.pyPamięć incydentów: alert → ustalenia z "Zbadaj" → co pomogło (dziennik)
core/webhooks.pySerwer HTTP alertów z zewnątrz (Alertmanager, Grafana, Uptime Kuma, GitHub)
core/voice.pyTranskrypcja wiadomości głosowych (endpoint Whisper zgodny z OpenAI albo model Gemini z wejściem audio)
core/attachments.pyZałączniki wiadomości: limity, obraz / tekst / plik binarny po zawartości, DATA_DIR/uploads/
tokens.pyTokeny klientów z rolami admin/viewer (python3 -m backend.tokens)
core/mcp/MCP: server.py (Pipe jako serwer, obie ery protokołu, Streamable HTTP)
core/hostexec.pyTryb docker: komenda na hoście przez kontener pomocniczy (--privileged --pid=host, nsenter -t 1), po TAK
core/approvals.pyZgody administratora dla operacji zewnętrznych agentów
core/auth.pyUwierzytelnienie tokenem (JSON lines i MCP HTTP)
core/safety.pyBezpiecznik: plan zmiany (kopie, sprawdzenie przed, weryfikacja po) i strzeżone wykonanie
core/journal.pyDziennik zmian: kopie plików, stan gita i crontaba, komendy odwrotne, /cofnij
core/memory.pySERVER.md, DIRECTORY, skille, VIBE, wykrywanie i redakcja sekretów
core/vibe.pyNauka stylu rozmowy w tle
core/events.pyZdarzenia strumienia: tekst, Attachment, Progress
core/executor.pyexecute (limit czasu, zabijanie grupy procesów), read_file, write_file
core/audit.pyAppend-only audit log
core/tools.pySchematy narzędzi (OpenAI function calling)
config/settings.py (zmienne .env), providers.py (presety LLM), prompts.py
configure.pyKreator providera (--check, --models, --providers, --from-env)

Konfiguracja

Skonfiguruj providera LLM

Z katalogu głównego repozytorium uruchom kreator (sam utworzy backend/.env z .env.example):

python3 -m backend.configure

Kreator:

  1. pokaże listę providerów i zapyta o klucz API (z linkiem, gdzie go zdobyć),
  2. pobierze aktualna listę modeli prosto z API providera – nowe modele są widoczne od razu, bez aktualizacji Pipe,
  3. sprawdzi na żywo, czy wybrany model obsługuje tool calling (bez tego agent nie wykona żadnej komendy),
  4. zapisze backend/.env (utworzy go z .env.example, jeśli nie istnieje; uprawnienia 600).

Kreator używa wyłącznie biblioteki standardowej Pythona – nie trzeba niczego instalować.

Przydatne tryby:

python3 -m backend.configure --check      # test obecnej konfiguracji (lista modeli + tool calling)
python3 -m backend.configure --models     # aktualne modele obecnego providera
python3 -m backend.configure --providers  # wszyscy dostepni providerzy

Wbudowani providerzy

Wszyscy przez API zgodne z OpenAI Chat Completions. Adresy zweryfikowane we wrześniu 2026.

LLM_PROVIDERProviderDomyślny modelUwagi
geminiGoogle Geminigemini-3.8-flashDomyślny. Darmowy tier dla modeli Flash, ale patrz niżej (prywatność)
openaiOpenAIgpt-5.6-terraGPT-6 wymaga Responses API do tool callingu – użyj GPT-5.6
anthropicAnthropic Claudeclaude-sonnet-5Przez warstwę zgodności z OpenAI SDK
openrouterOpenRoutergoogle/gemini-3.8-flashJeden klucz, kilkaset modeli (DeepSeek, Qwen, GLM, Kimi...)
groqGroqopenai/gpt-oss-120bBardzo szybka inferencja
deepseekDeepSeekdeepseek-flash
mistralMistral AImistral-large-latestProvider z UE
xaixAI Grokgrok-4.6
zaiZ.ai (GLM)glm-5.3
kimiMoonshot Kimikimi-k3
togetherTogether AImeta-llama/Llama-3.3-70B-Instruct-Turbo
cerebrasCerebrasgpt-oss-120b
fireworksFireworks AI-- (wybierz z listy)
ollamaOllama (lokalnie)-- (wybierz z listy)Bez klucza, patrz niżej

Domyślny model to tylko punkt startowy. Przy starcie backend sprawdza, czy skonfigurowany model nadal jest na liście providera, i wypisuje ostrzeżenie z propozycjami, jeśli został wycofany.

Prywatność: Pipe wysyła providerowi logi, konfiguracje i wyniki komend z serwera (sekrety redaguje). W darmowym tierze Gemini API Google może używać treści zapytań do ulepszania swoich usług i mogą je czytać ludzie. Kreator, pipe web i CLI ostrzegają o tym przy wyborze Gemini. Na serwerze produkcyjnym włącz płatności w Google AI Studio albo wybierz innego providera, np. lokalna Ollame.

Bez modelu (LLM_PROVIDER=none)

Pipe może działać bez żadnego modelu. Wtedy nic nie wychodzi z serwera i nic nie kosztuje, a dalej działają: czuwanie i alerty, migawki i „co się zmieniło”, poranny raport, monitoring certyfikatów i stron, audyt bezpieczeństwa, dziennik i /cofnij, diagramy, webhooki (alert dociera, ale nikt go nie bada) oraz bramka MCP dla innych agentów (bez ask_pipe). Rozmowa, rutyny i badanie alertów odpowiadają komunikatem, że modelu nie ma. Gdy później dodasz providera w pipe web albo /providerzy, rozmowa włącza się bez restartu.

W kreatorze to ostatnia pozycja listy, a bez pytań: LLM_PROVIDER=none bash scripts/install-server.sh -y.

Ręczna konfiguracja .env

Zamiast kreatora możesz edytować backend/.env ręcznie:

LLM_PROVIDER=openai
LLM_API_KEY=sk-...
LLM_MODEL=            # pusty = domyslny model providera

Zamiast LLM_API_KEY możesz ustawić zmienna specyficzna dla providera, np. OPENAI_API_KEY, GEMINI_API_KEY, ANTHROPIC_API_KEY – LLM_API_KEY ma pierwszeństwo.

Provider z .env jest bazowy – z nim backend startuje. Kolejnych można dodać bez restartu w pipe web (ekran wyboru providera, /provider): klucz trafia do DATA_DIR/llm_keys.json (0600), a przełącznik w rozmowie zmienia providera całego agenta. Zmienne presetów ustawione obok LLM_API_KEY (np. OPENAI_API_KEY, GROQ_API_KEY) też liczą się jako gotowi providerzy w przełączniku. WORKER_MODEL, LLM_REASONING_EFFORT i ceny LLM_PRICE_* dotyczą tylko providera bazowego.

Opcjonalnie:

LLM_BASE_URL=https://proxy.example.com/v1   # nadpisuje adres z presetu (np. proxy firmowe)
LLM_REASONING_EFFORT=low                     # dla modeli, ktore obsluguja ten parametr
LLM_TIMEOUT=120                              # limit czasu odpowiedzi LLM w sekundach

Stare pliki .env (tylko LLM_BASE_URL + LLM_API_KEY + LLM_MODEL, bez LLM_PROVIDER) działają dalej – provider jest rozpoznawany po adresie.

Własny provider

Dowolny endpoint zgodny z OpenAI (vLLM, LM Studio, LiteLLM, firmowe proxy...) dodasz kreatorem – wybierz opcje Inny i podaj adres. Provider zostanie zapisany w backend/data/providers.json i od tej pory jest dostępny jak wbudowany (LLM_PROVIDER=<id>).

Możesz też edytować ten plik ręcznie:

{
  "providers": [
    {
      "id": "moj-vllm",
      "name": "Moj vLLM",
      "base_url": "http://192.168.1.10:8000/v1",
      "default_model": "qwen3",
      "requires_key": false
    }
  ]
}

Wpis o id wbudowanego providera nadpisuje go – tak poprawisz nieaktualny adres bez czekania na nową wersję Pipe. Katalog backend/data/ jest zamontowany w kontenerze, więc zmiany nie wymagają przebudowy obrazu – wystarczy docker-compose restart vps-agent.

Ollama (modele lokalne)

Kontener widzi hosta pod adresem host.docker.internal (ustawione w docker-compose.yml). Ollama domyślnie nasłuchuje tylko na 127.0.0.1, więc musisz ją uruchomić z OLLAMA_HOST=0.0.0.0, żeby kontener ją widział. Model musi obsługiwać tool calling – kreator to sprawdzi.

Zabezpieczenie tokenem

# Zabezpieczenie (Opcjonalne, ale bardzo zalecane)
# Jesli jest ustawione, kazde zadanie -- takze potwierdzenie operacji -- musi zawierac
# ten token. Chroni socket i interfejs TCP przed innymi procesami na serwerze.
# Ten sam token podaj klientom: CLI przez --token (lub zmienna AGENT_TOKEN),
# botowi Telegrama przez AGENT_TOKEN w clients/telegram/.env.
# Puste = brak wymogu tokenu.
AGENT_TOKEN=twoj-tajny-token

Pamięć agenta: SERVER.md i skille

Agent ma kilka rodzajów trwałej pamięci: SERVER.md, skille (poniżej), a także DIRECTORY (mapa repozytoriów i katalogów) i VIBE (styl rozmowy) – te dwie opisuje features.md. Wszystko leży na hoście w backend/data/ (w kontenerze /app/data, zmienna DATA_DIR), przetrwa restart i przebudowe obrazu i nie trafia do gita. Tam są też targets.json, routines.json, reminders.json, watch_state.json i audit log.

SERVER.md

Notatki agenta o serwerze – jak AGENTS.md, ale dla serwera. Agent aktualizuje je sam (narzędzie server_md), gdy pozna trwały fakt: usługi, kontenery, domeny, porty, ważne ścieżki, Twoje decyzje. Cały plik jest dołączany do system promptu każdej rozmowy (do 12 000 znaków; sam plik może mieć do 20 000).

Na start możesz poprosić: "zbadaj serwer i utwórz SERVER.md". Plik możesz też edytować ręcznie: backend/data/SERVER.md.

Skille

Zapisane procedury wielokrotnego użytku, w formacie Agent Skills:

backend/data/skills/<nazwa>/SKILL.md
---
name: odnow-certyfikat
description: Odnowienie certyfikatu TLS dla nginx
---

1. `certbot renew`
2. `nginx -t && systemctl reload nginx`
3. Sprawdz date waznosci certyfikatu.

W system prompcie jest tylko lista skilli (nazwa i opis). Pełna treść agent wczytuje narzędziem skill_manage, gdy zadanie pasuje do opisu – dzięki temu wiele skilli nie zapycha kontekstu. Agent tworzy skill po wykonaniu wieloetapowej procedury, która się powtórzy, albo na Twoją prośbę.

Każdy skill ma też własną komendę w Telegramie i CLI: myślniki zamieniają się na _, a nazwa jest skracana do 32 znaków (limit Telegrama), np. odnow-certyfikat → /odnow_certyfikat. Skill o nazwie zajętej przez komendę wbudowana (status, server, skille, ...) nie dostaje komendy – uruchomisz go przez /skille albo zwykłym tekstem.

Bezpieczeństwo pamięci

Uruchomienie

docker-compose up -d

Weryfikacja

docker logs vps-agent --tail 20

Powinieneś zobaczyć:

[VPS Agent] Unix socket : /tmp/vps-agent.sock
[VPS Agent] TCP         : 0.0.0.0:7379 (tylko localhost)
[VPS Agent] Provider    : Google Gemini (https://generativelanguage.googleapis.com/v1beta/openai/)
[VPS Agent] Model       : gemini-3.8-flash
[VPS Agent] Runtime     : docker (host: /hostfs, proc: /hostproc)
[VPS Agent] Diagramy    : mermaidx
[VPS Agent] Czuwanie    : co 120 s
[VPS Agent] Serwer gotowy. Ctrl+C aby zatrzymac.

Narzędzia agenta

NarzędzieOpisWymaga potwierdzenia
execute_commandKomendy shell; w trybie docker z host: true na hoście (kontener pomocniczy)Zależne od klasyfikacji; host: zawsze
read_fileOdczyt plików (sekrety redagowane)Nie
write_fileZapis plików (tworzy brakujące katalogi)Tak; w warsztacie (WORKSPACE_DIR): nie
change_directoryKatalog roboczyNie
git_commandOperacje GitModyfikujące: tak
system_statsCPU/RAM/dyski/procesy z /proc hostaNie
network_infoPorty hosta, połączenia, ping, curl, DNSNie
cron_manageCron hosta (edycja tylko w trybie native)Modyfikujące: tak
diagramMapa infrastruktury / własny diagram Mermaid jako obrazNie
target_manageRejestr zdalnych celówDodanie: tak
remote_execKomenda na zdalnym celuZależne od klasyfikacji
delegateWorkery (tylko odczyty)Nie – zmiany wracają jako propozycje
routine_manageRutyny według harmonogramuDodanie: tak
reminderJednorazowe przypomnienie albo zadanie o określonym czasieZadanie: tak; wiadomość: nie
pipe_updateAktualizacja samego Pipe (check / apply)apply: tak
security_auditAudyt bezpieczeństwa z oceną i komendami poprawekNie (poprawki: tak)
security_patchŁatki podatności jak /zalataj: pakiety, obrazy, zdalne serwery, sprzątanieRaz na całą łatkę (YOLO: nie)
web_searchWyszukiwanie w internecie bez klucza (DuckDuckGo → Stack Exchange → Wikipedia)Nie
web_fetchCzytanie strony; z question stronę czyta osobny model bez narzędziNie dla adresow z wyników i od użytkownika, inne: tak
software_infoeol (endoflife.date), vulns (OSV.dev)Nie
journalDziennik zatwierdzonych zmian i ich cofanieCofnięcie: tak
server_historyCo się zmieniło, wykresy load/RAM/dyskow, certyfikaty/strony/DNS/backupyNie
server_md, directory, skill_manage, vibePamięć agenta; skill_manage install – skille i pluginy z repozytorium gitNie; zapis skilla i install: tak
projectWarsztat: clone, inspect, exec (izolowany kontener), run, logs, stop/start, pull, removerun i remove: tak; reszta: nie
mcp_manageZewnętrzne serwery MCP: list, add (izolowany kontener albo HTTP), remove, reloadadd: tak
mcp__<serwer>__<narzedzie>Narzędzia podłączonych serwerów MCP (grupa mcp:<serwer> ładowana na żądanie)Odczyty (readOnlyHint): nie; reszta: tak
load_toolsWłącza grupę narzędzi, których opisów model jeszcze nie dostał (narzędzia na żądanie)Nie

Przy TOOLS_MODE=lazy (domyślnie) model dostaje na start tylko podstawowe narzędzia (komendy, pliki, git, stan systemu, Docker, sieć, historia serwera, project, load_tools). Grupy memory, security, schedule, fleet, web, diagram i update włączają się same, gdy wiadomość ich potrzebuje, albo przez load_tools.

Dodatkowe ustawienia .env

ZmiennaDomyślnieOpis
PIPE_RUNTIMEautodocker / native / kubernetes
PIPE_LANGenJęzyk agenta: en albo pl (prompty, opisy narzędzi, komunikaty, alerty, raporty, wbudowane skille, kreator). Bot Telegrama czyta tę samą zmienną ze swojego .env, CLI – --lang / PIPE_LANG
HOST_ROOT, HOST_PROCwg trybuNadpisanie ścieżek hosta
AGENT_MAX_ITERATIONS15Limit kroków pętli na jedna wiadomość
SESSION_KEEP_DAYS7Ile dni rozmowy leżą w DATA_DIR/sessions (0600) i wracają po restarcie backendu; 0 = bez zapisu
CONFIRMED_COMMAND_TIMEOUT900Limit czasu (s) komend zatwierdzonych przez użytkownika; odczyty mają 30 s
REDACT_SECRETS1Redakcja sekretów w wynikach narzędzi
WEB_SEARCHonInternet dla agenta (web_search, web_fetch, software_info); off wyłącza
WORKER_MODELmodel agentaModel workerów i nauki VIBE
WORKER_MAX_ITERATIONS, WORKER_TIMEOUT, MAX_WORKERS8, 240, 6Limity workerów
VIBE_EVERY6Co ile wiadomości odświeżać VIBE (0 = wyłączone)
WATCH_ENABLED, WATCH_INTERVAL1, 120Czuwanie
WATCH_DISK_PCT, WATCH_MEM_PCT, WATCH_LOAD_FACTOR90, 92, 2Progi alertów
METRICS_KEEP_DAYS8Jak długo trzymać historię pomiarów (wykresy)
SNAPSHOT_INTERVAL, SNAPSHOT_KEEP_DAYS3600, 30Migawki stanu hosta ("co się zmieniło")
CHECKS_INTERVAL3600Co ile sekund sprawdzać certyfikaty, strony, DNS i backupy
VULN_INTERVAL21600Co ile sekund pytać OSV.dev o podatności wszystkich pakietów (zmienione pakiety od razu); 0 = wyłączone
WATCH_SITES10 wyłącza sprawdzenia sieciowe (certyfikaty, strony, DNS)
WATCH_CERT_DAYS, WATCH_BACKUP_HOURS14, 26Progi: dni do wygaśnięcia certyfikatu, wiek najnowszego backupu
WATCH_SSH_FAILURES60Alert przy tylu nieudanych logowaniach SSH w 10 min (0 = wyłączone)
WATCH_SSH_LOGINS1Alert przy logowaniu SSH z nowego adresu
WATCH_IGNORE--Domeny i ścieżki pomijane w sprawdzeniach (po przecinku)
DIGEST_TIME07:00Godzina porannego raportu (czas serwera); off wyłącza
LLM_PRICE_IN, LLM_PRICE_OUT--Ceny modelu w USD za milion tokenów – /koszt pokaże koszt
WORKER_PRICE_IN, WORKER_PRICE_OUTjak LLMCeny WORKER_MODEL
AGENT_VIEWER_TOKEN--Token roli viewer (tylko odczyt); wymaga AGENT_TOKEN
WEBHOOK_PORT, WEBHOOK_HOST, WEBHOOK_TOKEN0, 127.0.0.1, --Serwer alertów z zewnątrz (0 = wyłączony; bez tokenu nie wystartuje)
WEBHOOK_INVESTIGATE1Nowy alert z webhooka bada worker (tylko odczyty), ustalenia z przyciskiem Napraw; limit raz na 6 h na alert, 10/dzien
MCP_PORT, MCP_HOST, MCP_ALLOWED_ORIGINS0, 127.0.0.1, --Pipe jako serwer MCP po HTTP (/mcp, token Pipe jako Bearer)
MCP_<NAZWA> (dowolne)--Sekrety dla serwerów MCP, z których korzysta Pipe – w konfiguracji serwera jako ${MCP_<NAZWA>}
STT_BASE_URL, STT_API_KEY, STT_MODEL, STT_LANGUAGEwg providera, język PipeTranskrypcja głosu (gemini/openai/groq – automatycznie; STT_* ma pierwszeństwo)
SAFE_AUTO_ROLLBACK1Nieudana weryfikacja zmiany plików konfiguracji → automatyczne przywrócenie kopii
AUTONOMY1Rutynowe zmiany bez pytania (przez bezpiecznik), o sprawy ważne Pipe pyta (docs/security.md, Samodzielność); 0 = pytanie o każdą zmianę
DAILY_TOKEN_LIMIT, DAILY_COST_LIMIT0Dzienny limit tokenów / kosztu w USD (0 = bez limitu)
TOOLS_MODElazylazy – narzędzia na żądanie; all – opisy wszystkich narzędzi przy każdym zapytaniu
CONTEXT_KEEP_TURNS2Wyniki narzędzi starsze niż tyle tur idą do modelu skrócone (0 = zawsze w całości)
NOTIFY_LEVELimportantKiedy powiadamiać: all, important, critical (zmiana w trakcie pracy: /powiadomienia)
QUIET_HOURS--Cisza nocna, np. 22:00-07:00: niekrytyczne wiadomości czekają do rana
INSIGHTS_PER_DAY3Najwyżej tyle podpowiedzi dziennie z powiadomieniem (reszta w skrzynce)
INSIGHTS_INTERVAL3600Co ile sekund szukać podpowiedzi (0 = wyłączone)
AUTO_INVESTIGATE, AUTO_INVESTIGATE_DAILYcritical, 4Pipe sam bada przyczynę alertu (critical, all, off) i limit badań dziennie
WORKSPACE_DIR/root/pipe-workspaceWarsztat: katalog hosta na projekty i skrypty agenta
WORKSPACE_AUTONOMY1W warsztacie zapis plików i project exec bez pytania (0 = pytanie o każdą operację)
PROJECT_MEMORY, PROJECT_CPUS1g, 1Limity kontenerów projektów (piaskownica i usługi)
PROJECT_EXEC_TIMEOUT, PROJECT_BUILD_TIMEOUT600, 1800Limit czasu (s) komendy w piaskownicy i budowania/uruchomienia
PROJECT_MAX_MB1024Największy rozmiar sklonowanego repozytorium

Zatrzymanie

docker-compose down          # tryb docker
systemctl stop pipe          # tryb native

Popraw tę stronę na GitHubie