Expand playbook: AI agent, observability stack, self-hosted services#247
Closed
PaznerA wants to merge 17 commits intogeerlingguy:masterfrom
Closed
Expand playbook: AI agent, observability stack, self-hosted services#247PaznerA wants to merge 17 commits intogeerlingguy:masterfrom
PaznerA wants to merge 17 commits intogeerlingguy:masterfrom
Conversation
…python, go, dotnet, nemoclaw - INSTALLATION QUEUE: jedno místo v default.config.yml kde stačí zakomentovat řádek pro přeskočení libovolné komponenty - Nginx: robustní nginx.conf (kqueue, gzip, rate limiting, SSL/TLS, proxy cache) + 5 vhost šablon (PHP-FPM, Node.js, Python, Go, statický web) - PHP 8.3: instalace přes Homebrew, PHP-FPM pool optimalizovaný pro 36GB RAM, Composer, konfigurace php.ini přes Ansible ini_file - Node.js: NVM, LTS instalace, globální balíčky (yarn, pnpm, typescript, pm2, eslint, prettier, @anthropic-ai/sdk) - Bun: Homebrew instalace, zshrc integrace, globální balíčky - Python: pyenv, Python 3.13, pip balíčky (fastapi, uvicorn, anthropic, ruff…) - Go: workspace setup, globální nástroje (gopls, golangci-lint, air, task) - .NET SDK: Homebrew Cask, globální tools (dotnet-ef, dotnet-script) - NVIDIA NemoClaw: instalace DMG z GitHub releases, macOS workarounds (inference.local DNS, NVM Node24 alias), agentický systémový profil JSON, OpenShell security policy.yml, onboarding přes NVIDIA API klíč - main.yml: přehledná struktura s komentáři, wszystechny tasky s when podmínkou https://claude.ai/code/session_01AWvPu5JLWciDsLSafwPMgQ
…ersona ## OpenClaw (self-hosted, bez API klíče) - Nahrazuje NemoClaw – žádná závislost na NVIDIA API klíči - tasks/openclaw.yml: instalace Ollama + `ollama launch openclaw` - Primární model: qwen3.5:27b (ideální pro 36GB RAM) - Fallback npm install pokud ollama launch selže - launchd daemon pro always-on provoz (autorestart) - files/openclaw/openclaw.json.j2: Ollama provider config (api: "ollama", reasoning: false kvůli Ollama kompatibilitě, contextWindow: 131072 pro 36GB RAM) ## Inspektor Klepítko – DevOps Lead Agent - files/openclaw/SOUL.md: kompletní persona – DevOps Lead Engineer - Zná celou adresářovou strukturu serveru - Ví jak nasadit projekt přes nginx (vhost workflow) - Port konvence pro všechny stacky (PHP/Node/Python/Go/.NET) - Pravidla logování každé operace do ~/pazny/agents/log/ - files/openclaw/AGENTS.md: 6 specializovaných sub-agentů (CodeAgent, InfraAgent, DeployAgent, SecurityAgent, MonitorAgent, DataAgent) - files/openclaw/TOOLS.md: povolené operace pro agenta - files/openclaw/onboard.sh: interaktivní onboarding script - Verifikace všech závislostí - Kontrola Ollama modelu - Nginx test + autostart - Vytvoří inicializační log TASK-000 - files/openclaw/log-template.md: šablona pro strukturované .md logy - files/openclaw/com.openclaw.agent.plist.j2: launchd daemon plist ## Adresářová struktura - ~/pazny/agents/ ← instalace, config agentů - ~/pazny/agents/log/ ← strukturované .md logy agentic práce - ~/pazny/projects/ ← projekty hostované přes nginx ## Nginx - Všechny vhost šablony přepsány z /Users/Shared/Sites/ na ~/pazny/projects/ https://claude.ai/code/session_01AWvPu5JLWciDsLSafwPMgQ
…, oprava handlerů ## Modulárnost a oprava handlerů - Centralizované handlery v main.yml (handlers: sekce) Odstraněny broken "inline handler" tasks z nginx.yml a php.yml (tasks s listen: v tasks bloku se nechaly jako regular tasks → BUG opravena) - main.yml: přehledná sekce handlers s Restart nginx/php-fpm/mariadb/openclaw ## Build tools (cmake, ninja, llvm, openblas, protobuf, meson) - Přidány do homebrew_installed_packages s komentářem proč nejsou toggleable - Nutné pro: Ollama CPU inference, nativní Python/Node extensions, kiwix-build ## default.config.yml – INSTALLATION QUEUE rozšířen - enable_ssh / enable_samba / enable_vnc / enable_remote_management - configure_macos_defaults: true - install_mariadb / install_wordpress / install_nextcloud - install_kiwix / install_offline_maps - Nové config sekce: SSH, Samba, VNC, macOS defaults (keyboard/finder/dock/safari), MariaDB, WordPress, Nextcloud, Kiwix (ZIM files), Maps (MBTiles) ## tasks/macos-defaults.yml (nové) Automatizuje vše z "Manual settings to automate someday" v full-mac-setup.md: - Finder: hidden files, extensions, path/status bar, search scope, column view, no DS_Store on network, no extension change warning - Keyboard: KeyRepeat=2 (fast), InitialKeyRepeat=15 (short), press-hold off - Accessibility: reduceTransparency, reduceMotion - Screenshot: custom location + format - Dock: autohide, no recents, tilesize, minimize effect - Safari: full URL, Developer menu, Web Inspector - System: no smart quotes/dashes/autocorrect, expand save/print panels - Note: Caps Lock→Esc + Full Disk Access = NELZE automatizovat (SIP/HW-specific) ## tasks/system-services.yml (nové) - SSH: systemsetup -setremotelogin, sshd_config (port, password auth, groups) - Samba: launchctl load smbd, SMB workgroup, sharing -a pro konfigurované paths - VNC: kickstart ARDAgent, password z config (fail-safe pokud prázdné) - ARD: Apple Remote Desktop plná správa ## IIAB služby (nové tasks/iiab/) - mariadb.yml: MariaDB via brew, mysql_secure_installation, create DB+users - wordpress.yml: download latest WP, wp-config.php, security keys, nginx vhost - nextcloud.yml: download latest NC, occ install, cron, trusted_domains, nginx vhost - kiwix.yml: Docker kiwix-serve, launchd daemon, download-zim.sh helper, nginx proxy - maps.yml: tileserver-gl (npm), launchd daemon, download-maps.sh helper, nginx proxy ## Nginx vhosty (nové) - wordpress.conf: WP security (xmlrpc rate limit, upload PHP block) - nextcloud.conf: CalDAV/CardDAV, .well-known, Nextcloud-specific headers - kiwix.conf: simple proxy na Docker port 8888 - maps.conf: proxy + CORS + tile cache ## SOUL.md aktualizován - IIAB sekce: WordPress, Nextcloud, Kiwix, Mapy – přesné cesty a příkazy https://claude.ai/code/session_01AWvPu5JLWciDsLSafwPMgQ
…d, vlc, spotify, lastpass, openvpn, balenaetcher, fl-studio, blender Přidány všechny požadované aplikace + reorganizace do kategorií pro snadné budoucí rozšiřování: Editory/IDE: windsurf (Codeium AI IDE), sublime-text, vscode Terminály: ghostty (GPU-accelerated, nový standard), iterm2 Prohlížeče: brave-browser (primary), chrome + firefox (testování) Produktivita: raycast (Spotlight replacement s AI + snippets) Komunikace: slack, discord Správa: transmit, sequel-ace, tableplus Dev nástroje: insomnia, balenaetcher, licecap Bezpečnost/VPN: lastpass, openvpn-connect Media: vlc, spotify, handbrake Kreativa: blender (3D), fl-studio (DAW) Systém: dropbox Přidány zakomentované alternativy (warp, arc, postman, 1password, mullvad, plex, gimp, inkscape, davinci-resolve, stats, rectangle, alt-tab) pro snadné budoucí přidání. https://claude.ai/code/session_01AWvPu5JLWciDsLSafwPMgQ
- Grafana + Prometheus + Loki + Tempo + Grafana Alloy plně nakonfigurovaný
- Alloy config (River syntax): systémové metriky, nginx/phpfpm/redis scrape,
log tailing (nginx + agent logy), OTLP traces přijímač → Tempo
- Grafana auto-provisioning: datasources (Prometheus, Loki, Tempo s cross-linking)
a dashboard provider z ~/pazny/observability/dashboards/
- Community dashboardy staženy přes Grafana API (node exporter, nginx, php-fpm, loki, tempo)
- Nginx reverse proxy pro Grafana s WebSocket podporou (live panels)
- Shell extras:
- Starship prompt (gruvbox-rainbow tema, Ansible template)
- Zoxide, fzf init v ~/.zshrc
- Moderní CLI aliasy (bat, eza, fd, rg) z default.config.yml
- IIAB rozšíření:
- n8n (Docker) – workflow automation + nginx vhost s WebSocket
- Gitea (Homebrew) – self-hosted Git + nginx vhost (512MB upload limit)
- Uptime Kuma (Docker) – monitoring/status page
- Calibre-Web (Docker) – e-book library (linuxserver image s Calibre CLI)
- main.yml: přidány importy pro shell-extras, observability, n8n, gitea,
uptime-kuma, calibreweb + handlers pro grafana, alloy, prometheus
- SOUL.md: přidána sekce Observability (LGTM), rozšířena port tabulka,
přidány IIAB služby (n8n, Gitea, Uptime Kuma, Calibre-Web)
https://claude.ai/code/session_01AWvPu5JLWciDsLSafwPMgQ
Nahrazen původní geerlingguy README novým dokumentem pokrývajícím: - Přehledová tabulka všeho co playbook nainstaluje (dev stacks, CLI, apps) - AI Agent (Inspektor Klepítko) a Ollama sekce - LGTM observability stack s porty a architekturou - IIAB services tabulka (WordPress, Kiwix, Gitea, n8n, …) - INSTALLATION QUEUE ukázka s komentáři - Rychlý start (xcode-select → pip install ansible → ansible-playbook) - Přizpůsobení přes config.yml (hesla, model, dotfiles, balíčky) - Adresářová struktura ~/pazny/ - Všechny dostupné Ansible tagy - Manuální kroky po instalaci (Caps Lock, Full Disk Access, /etc/hosts) - Struktura repozitáře (tasks/, files/, iiab/) https://claude.ai/code/session_01AWvPu5JLWciDsLSafwPMgQ
…de Code Opravy bugů: - Gitea port conflict: gitea_http_port:3000 → gitea_port:3003 (kolize s Grafana) - nginx-prometheus-exporter + php-fpm_exporter nyní správně instalovány (prometheus/prometheus tap + hipages/tap) a startovány jako brew services - nginx.conf: SSL adresář se vytváří PŘED generováním certifikátu (task order fix) - node_exporter přidán do LGTM stacku pro systémové metriky (nahrazuje prometheus.exporter.unix) Nové nástroje: - Tailscale (tasks/tailscale.yml) – WireGuard mesh VPN, zpřístupní všechny self-hosted služby odkudkoliv bez portforwardingu; post-install guide v debug msg - dnsmasq (tasks/dnsmasq.yml) – automatický *.dev.local DNS resolver; /etc/resolver/dev.local → dnsmasq → 127.0.0.1; odstraňuje manuální /etc/hosts editaci - restic přidán do homebrew_installed_packages (šifrované zálohy ~/pazny/) - UTM přidán jako zakomentovaný cask (Apple Silicon virtualizace) - @anthropic-ai/claude-code přidán do node_global_packages - Sekce TAILSCALE + DNSMASQ + RESTIC přidány do default.config.yml README: mkcert a .dev.local DNS označeny jako automatizované (ne manuální) https://claude.ai/code/session_01AWvPu5JLWciDsLSafwPMgQ
Opravy bugů:
- tasks/shell-extras.yml: alias.name → alias.alias (proměnná nesouhlasila
s definicí v default.config.yml kde jsou aliasy jako `alias:` ne `name:`)
- tasks/shell-extras.yml: odstraněno Jinja2 v task name (yamllint varování)
- requirements.yml: přidány chybějící kolekce:
community.general (homebrew, ini_file, osx_defaults, …)
community.docker (docker_image v n8n, kiwix, uptime-kuma, calibreweb)
community.mysql (mysql_db, mysql_user v mariadb.yml)
CI pipeline:
- ci.yml: přidán `syntax` job (Linux, rychlý – ansible --syntax-check)
- ci.yml: CI nyní běží i na `claude/**` větvích (nejen master)
- ci.yml: integration job má fail-fast: false (macos-14 a macos-15 nezastaví
navzájem při selhání)
- ci.yml: aktualizovány actions/checkout@v4, actions/setup-python@v5
- tests/config.yml: kompletní přepsání – všechny nové boolean flagy nastaveny
na bezpečné CI hodnoty (openclaw/observability/docker services vypnuty,
zachovány: nginx, php, node, python, go, dotnet, shell-extras, dnsmasq)
- tests/config.yml: dummy hesla pro CI (nepoužívají se – docker services off)
https://claude.ai/code/session_01AWvPu5JLWciDsLSafwPMgQ
Kritické bugy:
- tasks/iiab/gitea.yml: gitea_port default 3001→3003 (konflikty s Uptime Kuma)
- tasks/iiab/n8n.yml: odstraněn mrtvý template task referující neexistující
soubor launchd/com.n8n.plist.j2 + phantom notify 'Load n8n launchd'
- files/observability/alloy/config.alloy.j2: OTLP exporter hardcoded port
4317 → {{ tempo_otlp_grpc_port | default(4317) }} (konzistentní s receiverem)
- tasks/observability.yml: failed_when opraveno z YAML list (AND logic) na
inline výraz: rc!=0 and 'already started' not in stdout
High priority:
- tasks/iiab/n8n.yml, uptime-kuma.yml, calibreweb.yml: přidáno vytvoření
~/pazny/agents/log/ před startem launchd (plist zapisuje sem logy)
- default.config.yml: přidány chybějící proměnné:
gitea_secret_key, gitea_internal_token, gitea_disable_registration
n8n_version, uptime_kuma_version, calibreweb_version
(vše s výchozími hodnotami + komentáře "PŘEPIŠ!")
https://claude.ai/code/session_01AWvPu5JLWciDsLSafwPMgQ
- tasks/iiab/uptime-kuma.yml: port default 3002→3001 (shoduje se s config)
- files/observability/alloy/config.alloy.j2:
- hardcoded /opt/homebrew/var/log/ → {{ homebrew_prefix }}/var/log/
(3× nginx access/error/homebrew services – portable Intel i M-series)
- OTLP HTTP receiver port 4318 → {{ alloy_otlp_http_port | default(4318) }}
- main.yml handler 'Reload nginx':
- přidán `register: nginx_reload` + `changed_when: nginx_reload.rc != 0`
- bez changed_when hlásil Ansible vždy changed → vždy spustil 'Restart nginx'
- nyní restartuje jen pokud reload selže (nginx neběží)
- tasks/system-services.yml: opraven komentář u no_log: true
(byl "Neskrývat" → správně "Skrýt heslo v logu")
https://claude.ai/code/session_01AWvPu5JLWciDsLSafwPMgQ
KRITICKÝ BUG (nginx nespustí):
- tasks/nginx.yml: 7 service nginx conf souborů mělo Jinja2 syntax
({{ grafana_domain }}, {{ gitea_port }}, {{ wordpress_dir }}…) ale bylo
nasazováno přes ansible.builtin.copy → Ansible vykopíroval literální text
'{{ }}' → nginx config test na konci playbooku selhal → nginx neběžel.
OPRAVA: copy → ansible.builtin.template pro celý sites-available loop.
- tasks/nginx.yml: failed_when list (AND místo OR) → opraveno na inline výraz
Hardcoded /opt/homebrew → {{ homebrew_prefix }} ve všech service conf souborech:
grafana.conf, n8n.conf, kiwix.conf, maps.conf, wordpress.conf,
nextcloud.conf, gitea.conf (7 souborů × 2 cesty SSL + log)
Další opravy v nginx conf:
- nextcloud.conf: hardcoded PHP socket php8.3-fpm.sock
→ php{{ php_version | default('8.3') }}-fpm.sock
- gitea.conf: port proxy default 3001 → 3003 (konzistentní s config)
- default.conf: hardcoded /Users/pazny/projects/default
→ {{ openclaw_projects_dir | default(…) }}/default
Observability alloy config:
- PHP-FPM exporter port 9253 → {{ phpfpm_exporter_port | default(9253) }}
- Redis port 6379 → {{ redis_port | default(6379) }}
- Přidány proměnné phpfpm_exporter_port, redis_port do default.config.yml
https://claude.ai/code/session_01AWvPu5JLWciDsLSafwPMgQ
SSH handler (KRITICKÝ):
- tasks/system-services.yml: odstraněna falešná handler-task
('listen: Restart ssh' na regular tasku) – spouštěla se vždy nepodmíněně
- main.yml: přidán správný handler 'Restart ssh' do handlers sekce
main.yml pořadí tasků:
- PHP přesunut PŘED nginx: php-fpm socket musí existovat
před 'nginx -t' validací na konci nginx.yml
Observability config soubory (copy → template, KRITICKÝ):
- prometheus.yml, loki/local-config.yaml, tempo.yaml byly nasazovány
přes ansible.builtin.copy → Jinja2 se nerendrovalo → hardcoded /opt/homebrew
OPRAVA: copy → ansible.builtin.template pro všechny tři soubory
- prometheus.yml: porty parametrizovány (prometheus_port, alloy_ui_port,
grafana_port, loki_port, tempo_port)
- loki/local-config.yaml: /opt/homebrew → {{ homebrew_prefix }}
- tempo.yaml: /opt/homebrew → {{ homebrew_prefix }}, porty parametrizovány
(tempo_port, tempo_otlp_grpc_port, tempo_otlp_http_port, prometheus_port)
Prometheus remote-write-receiver:
- tasks/observability.yml: přidán task, který zapíše
{{ homebrew_prefix }}/etc/prometheus.args s --enable-feature=remote-write-receiver
Bez tohoto flagu Alloy nemůže zapisovat metriky do Prometheuse
alloy_tail_php_logs:
- config.alloy.j2: přidán chybějící blok pro PHP-FPM logy
(proměnná alloy_tail_php_logs byla v configu, ale nikdy implementována)
Logy: {{ homebrew_prefix }}/var/log/php@{{ php_version }}-fpm.log
https://claude.ai/code/session_01AWvPu5JLWciDsLSafwPMgQ
KRITICKÝ – port konflikt OTLP (Alloy vs Tempo oba na 4317):
- default.config.yml: tempo_otlp_grpc_port: 4317 → 4327
tempo_otlp_http_port: 4318 → 4328
Alloy (apps → Alloy): 4317/4318 | Tempo (Alloy → Tempo): 4327/4328
- config.alloy.j2 receiver: tempo_otlp_grpc_port → alloy_otlp_grpc_port
(receiver musí bindovat na Alloy port, ne Tempo port)
Hardcoded hostname 'mac-studio-local':
- default.config.yml: přidána proměnná observability_hostname: "{{ ansible_hostname }}"
- prometheus.yml, tempo.yaml, config.alloy.j2: mac-studio-local
→ {{ observability_hostname | default(ansible_hostname) }}
Redis service:
- tasks/observability.yml: přidán task 'Start Redis service'
(Alloy scrape-uje Redis metriky ale Redis nebyl startován)
Podmíněno: when: alloy_scrape_redis | default(true)
Prometheus storage dir:
- tasks/observability.yml: přidán task 'Ensure Prometheus data directory exists'
{{ homebrew_prefix }}/var/prometheus (stejný pattern jako Loki/Tempo)
https://claude.ai/code/session_01AWvPu5JLWciDsLSafwPMgQ
- calibreweb: replace hardcoded PUID/PGID=1000 with ansible_user_uid/gid - kiwix: copy → template for nginx vhost (Jinja2 vars would not render) - kiwix: add when: install_nginx guard on nginx tasks - kiwix: fix tilde in launchd log paths (~/pazny → ansible_env.HOME+'/pazny') - maps: copy → template for nginx vhost - maps: add when: install_nginx guard on nginx tasks - maps: fix tilde in launchd log paths (~/pazny → ansible_env.HOME+'/pazny') - nextcloud: copy → template for nginx vhost - nextcloud: add when: install_nginx guard on nginx tasks - wordpress: fix template src path (remove playbook_dir prefix) - wordpress: add when: install_nginx guard on nginx tasks https://claude.ai/code/session_01AWvPu5JLWciDsLSafwPMgQ
- nginx.conf: replace 5x hardcoded /opt/homebrew → {{ homebrew_prefix }}
- nginx.conf: deploy via template (not copy) so Jinja2 vars are rendered
- php-app.conf, node-proxy.conf, python-proxy.conf, go-proxy.conf,
static-site.conf: replace SSL cert + log paths with {{ homebrew_prefix }}
- tasks/php.yml: Composer install-dir /opt/homebrew/bin → {{ homebrew_prefix }}/bin
- config.alloy.j2: fix Tempo OTLP gRPC endpoint default port 4317 → 4327
(Alloy receives on 4317, Tempo listens on 4327 — different ports required)
- main.yml: php_version handler uses | default('8.3') for safety
https://claude.ai/code/session_01AWvPu5JLWciDsLSafwPMgQ
New toggle `configure_external_storage` redirects all large data paths (IIAB services, observability, Ollama models, caches) to an external SSD mount point (/Volumes/SSD1TB by default). MariaDB and source code stay on internal SSD for low-latency I/O. Implementation: - default.config.yml: new external storage config section - tasks/external-storage.yml: validates mount, creates dirs, overrides path variables via set_fact, configures shell env vars (OLLAMA_MODELS, HOMEBREW_CACHE, npm/pip/composer caches), prints Docker manual step - main.yml: imports external-storage before IIAB/observability tasks https://claude.ai/code/session_01AWvPu5JLWciDsLSafwPMgQ
…leshooting Covers: prerequisites, manual steps, expected output, port map, directory structure, failure recovery, and post-install checklist. https://claude.ai/code/session_01AWvPu5JLWciDsLSafwPMgQ
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
This is a major expansion of the mac-dev-playbook, transforming it from a basic macOS dev environment setup into a comprehensive platform for self-hosted services, observability, and local AI agents. The playbook now supports a full LGTM observability stack, multiple language runtimes, self-hosted knowledge/productivity services (WordPress, Nextcloud, Kiwix, etc.), and an OpenClaw-based AI agent system.
Key Changes
Configuration & Documentation
default.config.yml: Expanded from ~110 lines to ~510 lines with organized installation queue sections (Homebrew, web server, languages, AI, macOS config, system services, IIAB services, networking)New Task Files (Language Runtimes & Web Server)
tasks/php.yml: PHP 8.x installation with PHP-FPM and extensionstasks/node.yml: Node.js via NVM with global npm packagestasks/bun.yml: Bun JavaScript runtime installertasks/python.yml: Python via pyenv with virtualenv supporttasks/golang.yml: Go language with development tools (gopls, air, golangci-lint)tasks/dotnet.yml: .NET SDK for C#/F# developmenttasks/nginx.yml: Nginx web server with mkcert for local SSL certificatesObservability Stack (LGTM)
tasks/observability.yml: Complete Grafana + Prometheus + Loki + Tempo + Grafana Alloy setupfiles/observability/alloy/config.alloy.j2: Unified collector configurationfiles/observability/prometheus/prometheus.yml: Prometheus scrape configfiles/observability/loki/local-config.yaml: Loki log aggregationfiles/observability/tempo/tempo.yaml: Distributed tracingfiles/observability/grafana/provisioning/: Datasources and dashboard provisioningSelf-Hosted Services (IIAB)
tasks/iiab/mariadb.yml: MariaDB database (dependency for WordPress/Nextcloud)tasks/iiab/wordpress.yml: WordPress CMS installation and configurationtasks/iiab/nextcloud.yml: Nextcloud self-hosted cloud storagetasks/iiab/kiwix.yml: Kiwix offline Wikipedia/Gutenberg (Docker-based)tasks/iiab/maps.yml: Offline maps via tileserver-gl + MBTilestasks/iiab/n8n.yml: n8n workflow automation (Docker)tasks/iiab/gitea.yml: Gitea self-hosted Git servertasks/iiab/uptime-kuma.yml: Uptime Kuma monitoring dashboard (Docker)tasks/iiab/calibreweb.yml: Calibre-Web e-book server (Docker)AI Agent System (OpenClaw)
tasks/openclaw.yml: OpenClaw installation with Ollama backend (no API keys, fully local)files/openclaw/SOUL.md: System persona definition (Inspector Klepítko - DevOps Lead)files/openclaw/AGENTS.md: Sub-agent specializations and activationfiles/openclaw/TOOLS.md: Permitted operations and tool accessfiles/openclaw/log-template.md: Structured logging templatehttps://claude.ai/code/session_01AWvPu5JLWciDsLSafwPMgQ