Sesja 2026-03-07 — Podsumowanie

Długa sesja konfiguracyjno-deweloperska. Główne tematy: rozbudowa ekosystemu agentów, integracja Docker/CI, automatyzacja powiadomień pipeline.


1. Konta API i klucze

OpenAI ($20 kredytów)

  • Dodano klucz OPENAI_API_KEY do ~/.config/environment.d/openai.conf
  • Klucz skonfigurowany w acpx (~/.acpx/config.json) dla agenta Kodek

Anthropic ($32 kredytów)

  • Odkryto że używaliśmy OAuth tokenu (sk-ant-oat01-...) zamiast klucza API
  • Nowy klucz API (sk-ant-api03-...) podmieniony we wszystkich 11 agentach
  • Stary OAuth token zachowany jako profil anthropic:oauth (backup)

OpenRouter ($10 limit)

  • Nowy klucz skonfigurowany przez openclaw models auth paste-token
  • Zaktualizowany w auth-profiles.json agentów: Lamia, Głębek, Gemka, dc1

2. Zmiany w ekosystemie agentów

Dodany agent: Kodek ⚡

  • Model: OpenAI Codex CLI przez ACP (npx @zed-industries/codex-acp)
  • Workspace: ~/.openclaw/agents/kodek/workspace/
  • Repo: https://git.example.org/Orwil/kodek
  • Charakter: Agent developerski — pisze kod, naprawia bugi, bez gadania
  • Uwaga: acpx nonInteractivePermissions: "deny" powoduje blokowanie zadań — Kodek nie może autonomicznie pisać plików bez TTY

Usunięte agenty (Ollama)

Usunięto 3 agenty korzystające z lokalnego serwera Ollama (nabu.internal:11434):

  • functiongemma — FunctionGemma 270M
  • bielik — Bielik (PL)
  • qwen3 — Qwen3 30B

Zmiana: Llamka → Lamia 🦙

  • Zmieniona nazwa i charakter
  • Poprzedni model: openrouter/meta-llama/llama-3.3-70b-instruct:free (rate-limited)
  • Nowy model: openrouter/meta-llama/llama-4-maverick (płatny, 0.60/1M out)
  • Charakter: Wnikliwa, zgryźliwa, malkontentna — z westchnieniem ale robi robotę
  • Wygląd w ClaWHarbor: blondynka z długimi włosami, fioletowa koszulka

3. ClaWHarbor — wyglądy agentów

Zaktualizowano ~/clawharbor/clawharbor.config.json:

AgentKolorKarnacjaWłosy
Kodek ⚡Pomarańczowy #f97316Ciemna #5c3317Czarne
Lamia 🦙Fioletowy #a855f7Jasna #fde8d0Złote długie
claude (Klaudynka)Bursztynowy #d97706Jasna #fde8d0Brązowe

4. Infrastruktura Docker i CI/CD

Repo: container-quartz

URL: https://git.example.org/Orwil/container-quartz

Obraz Docker zawierający pełne środowisko do budowania i deployowania vaultu Obsidian:

  • Quartz SSG sklonowany z Orwil/orwil-site (customizowany fork)
  • npm ci — zależności zainstalowane
  • awscli — do sync z Cloudflare R2
  • Skrypt publish.sh — build + S3 sync + CF cache purge

Pipeline:

  • push na mastergit.example.org/orwil/container-quartz:latest
  • push taga v*.*.* → tagi semver

Skill: docker-repo

Plik: ~/.openclaw/workspace/skills/docker-repo/SKILL.md

Instrukcje do tworzenia repozytoriów Docker na git.example.org z pipeline Gitea Actions, wzorowane na Docker/oauth2_mock.

Pipeline orwil-site — uproszczony

Przed: checkout orwil-site + vault → npm ci → quartz build → aws sync → CF purge (5 kroków, ~3 min)

Po: checkout vault → docker run container-quartz (build+sync+purge w jednym kroku)

- checkout vault
- docker login gitea registry
- docker run git.example.org/orwil/container-quartz:latest  # zawiera wszystko

5. Webhook Forwarder

Repo: webhook-forwarder

URL: https://git.example.org/Orwil/webhook-forwarder

Serwis Python (aiohttp) działający na server.example.com:9000:

  • Odbiera webhooki z Gitea (workflow_run events)
  • Weryfikuje podpis HMAC-SHA256
  • Formatuje wiadomość i przesyła do OpenClaw hooks endpoint przez Tailscale

Deployment: Docker Compose na dc1, restart: always


Diagramy

Ekosystem agentów

graph LR
    A[Aleksander] -->|webchat/Telegram| OC[OpenClaw Gateway\n:18789]
    
    OC --> main[🐹 Orwil\nAnthropic Sonnet]
    OC --> gpt[🤖 Gepetto\nGPT-4o]
    OC --> mini[✨ Minette\nGPT-4o-mini]
    OC --> o3[🔭 Orion\no3-mini]
    OC --> gemini[💎 Gemka\nGemini Flash]
    OC --> lamia[🦙 Lamia\nLlama-4-Maverick]
    OC --> deepseek[🌊 Głębek\nDeepSeek-R1]
    OC --> mirela[🌸 Mirela\nSonnet]
    OC --> dc1a[🖥️ dc1\nGPT-4.1]
    OC --> kodek[⚡ Kodek\nCodex ACP]
    
    main -->|spawns| kodek
    main -->|spawns| lamia
    
    style OC fill:#1a1a2e,color:#fff
    style main fill:#7c3aed,color:#fff
    style kodek fill:#f97316,color:#fff
    style lamia fill:#a855f7,color:#fff

Pipeline publikowania vaultu Obsidian

sequenceDiagram
    participant V as Vault (Obsidian)
    participant VR as vault repo\ngit.example.org
    participant WH as Webhook\nVault→orwil-site
    participant OS as orwil-site\npipeline
    participant CQ as container-quartz\nimage
    participant R2 as Cloudflare R2
    participant CF as Cloudflare CDN
    participant U as orwil.eiac.dev

    V->>VR: git push
    VR->>WH: webhook → dispatch orwil-site
    WH->>OS: workflow_dispatch
    OS->>VR: checkout vault content
    OS->>CQ: docker pull :latest
    OS->>CQ: docker run (build + sync + purge)
    CQ->>CQ: npx quartz build
    CQ->>R2: aws s3 sync
    CQ->>CF: purge cache
    U->>R2: HTTP request
    R2-->>U: static files

Budowanie obrazu container-quartz

graph TD
    A[push to master] --> B[Gitea Actions\ndocker-build.yml]
    B --> C[docker/build-push-action]
    C -->|FORGEJO_TOKEN build-arg| D[git clone orwil-site]
    D --> E[npm ci]
    E --> F[pip install awscli]
    F --> G[COPY publish.sh]
    G --> H[push to\ngit.example.org registry]
    H --> I[git.example.org/orwil/container-quartz:latest]
    
    style I fill:#059669,color:#fff

Flow webhooków CI/CD

graph LR
    G[Gitea\ncynarski-git\nHetzner] -->|POST /webhook\nHTTP| DC[webhook-forwarder\server-n.example.com:9000\nPython aiohttp]
    DC -->|POST /hooks/agent\nTailscale| OC[OpenClaw Gateway\nopenlaw node\n10.64.0.2:18789]
    OC --> OR[🐹 Orwil]
    OR -->|powiadomienie| A[Aleksander]
    
    subgraph Tailscale VPN
        DC
        OC
    end
    
    style DC fill:#0ea5e9,color:#fff
    style OC fill:#1a1a2e,color:#fff
    style OR fill:#7c3aed,color:#fff

Dostawcy AI — kredyty

pie title Kredyty API (USD)
    "Anthropic ($32)" : 32
    "OpenAI ($20)" : 20
    "OpenRouter ($10)" : 10

Wnioski

✅ Co zadziałało dobrze

  1. Tailscale jako backbone — wszystkie nasze serwery (cynarski-git, openclaw, dc1) są w jednej sieci. Eliminuje konieczność wystawiania portów na zewnątrz.

  2. Gitea Container Registry — decyzja o przejściu z Docker Hub na własne registry to dobry ruch. Żadnych limitów, wszystko prywatne, w jednym miejscu.

  3. container-quartz jako all-in-one — obraz zawierający Quartz + awscli + skrypt publish znacząco upraszcza pipeline. Zamiast 5 kroków — 1 docker run.

  4. webhook-forwarder jako bridge — dc1 jako publiczny webhook receiver który tuneluje do prywatnego OpenClaw przez Tailscale to eleganckie rozwiązanie.

⚠️ Co wymaga uwagi

  1. Kodek (ACP Codex)nonInteractivePermissions w acpx nie obsługuje allow-all. Kodek blokuje się na pytaniach o pozwolenie. Wymaga albo trybu TTY albo innego podejścia do automatyzacji.

  2. container-quartz buduje się ~5 min — klonowanie orwil-site + npm ci za każdym razem jest wolne. Rozwiązanie: cache npm w pipeline lub multi-stage build z pre-cache layer.

  3. Webhook forwarder nie jest jeszcze spięty z Gitea — serwis działa, OpenClaw hooks skonfigurowane, ale webhooki w repo Gitea (container-quartz, orwil-site) nie są jeszcze dodane. Wymaga dokończenia.

  4. OpenClaw gateway restart — kilka razy sesja była przerywana przez restart gateway. Warto skonfigurować graceful restart.

  5. Klaudynka (Claude ACP) — podobny problem co Kodek. Sesja ACP wygasła przy pierwszym zadaniu. Drugi spawn zadziałał ale wolno.

💡 Następne kroki

  • Dokończyć konfigurację: dodać webhooki Gitea w repo → http://server.example.com:9000/webhook
  • Przetestować cały flow: push do vault → pipeline → powiadomienie od Orwila
  • Rozwiązać problem z Kodkiem (tryb autonomiczny)
  • Zoptymalizować czas budowania container-quartz (npm cache layer)
  • Dodać agenta Klaudynkę do openclaw.json (widoczna w ClaWHarbor)
  • Zaktualizować tabelę agentów w vault (dodać Kodka, usunąć Ollama agentów)