Files
agent-helm/doc/plan.md
claude 12ffcaa2bd
All checks were successful
helmd-image / build (push) Successful in 36s
helmd-release / build-release (push) Successful in 1m6s
helmd: inbäddad webbklient (vanilla SPA) + Docker-image för Pi5 (LAN-only)
- web/: token-login, sessionslista, ANSI-skärmvy (SSE+poll), promptfält,
  frågekort, tangentrad, delningsflik (bild/HTML-sandbox/markdown), inställningar
- go:embed via webfs.go — servern förblir en enda binär, strikt CSP
- browser-verifierad mot riktig agy (fråga -> kort -> svar -> kört)
- Dockerfile (alpine + tmux/bash) + helmd-image.yaml -> localhost:5000/helmd
- integrationstest utökat till 29 gröna

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-05 22:17:12 +02:00

3.8 KiB

agent-helm v2 — plan

Mål

Fjärrstyra CLI-agenter (agy i första hand) som "claude-desktop-appen fast för Googles agent": se sessionen, skicka prompts, svara på frågor/godkännanden, byta läge, ändra inställningar och ta emot delade filer — från webb och Android, utan att exponera något publikt.

Varför v2

v1 (Node: daemon→server-på-Pi5→web, Gemini-hooks) dog med Gemini CLI:s OAuth-nedläggning, och hook-integrationen visade sig skör per agent. v2 vänder på det: tmux är sanningskällan. Servern läser skärmen och skickar tangenter — då spelar det ingen roll vilken agent som kör eller hur dess hooks ser ut.

Arkitektur

Android (egen SSH-tunnel) ─┐
webb-PWA (LAN/tunnel) ─────┼──► helmd :8788 (Go, REST+SSE, token) ──tmux──► agy
                           │        │
                           └────────┴──► ntfy.brasse-pc.eu (topics: agent-helm, claude)
  • Ingen publik exponering: bind 127.0.0.1 eller LAN; utifrån via SSH-tunnel (mobilklienten sätter upp sin egen mot Pi5 → vidare till värddatorn, alt. helmd på Pi5 direkt).
  • v1-koden (packages/) ligger kvar tills webbklienten är portad.

Steg

  1. helmd (helmd/): Go-server, enskild statisk binär.
    • tmux-hantering: skapa/adoptera/döda sessioner (helm-*), paste+Enter för prompts, tangenter, skärmdump med/utan ANSI.
    • Frågedetektor (question.go): agy-godkännanden, trust-prompts, numrerade/onumrerade listor; stabil hash per fråga; testad mot riktiga agy-dumpar + mock.
    • REST+SSE-API, bearer-token, fildelning (helmd share), ntfy (event-pushar + POST /api/notify, topics agent-helm/claude).
    • Isolerat integrationstest i Docker (26 tester), CI-release helmd-latest (x64 + arm64).
  2. Webbklient v2 (helmd/web/): ramverksfri ES-modul-SPA, inbäddad i binären med go:embed — hela v2 är fortfarande EN fil, ingen Node-toolchain i CI. (Beslut: vanilla i stället för Vue-port — UI-ytan är liten, eslint/byggkedjan försvinner, agenter underhåller koden lättare.)
    • Token-login (localStorage), sessionslista med status/-badge, ANSI-färgad skärmvy (SSE + poll-fallback), promptfält, frågekort med knappar, tangent-verktygsrad (Esc/pilar/Enter/ ^C/Läge), delningsflik (bilder, sandboxad HTML-iframe, egen md-renderare), inställningsvy mot PUT /api/config.
    • Browser-verifierad mot riktig agy: prompt → godkännandefråga → svar via kort → kommandot kört; delningar renderade.
    • Deploy på Pi5: docker-stack helmd (arm64-image via .gitea/workflows/helmd-image.yamllocalhost:5000/helmd), LAN-only — ingen NPM-vhost; sessioner kör bash/agenter i containern.
  3. Android-klient: nytt projekt eller Capacitor-port av PWA:n.
    • Egen SSH-tunnel (t.ex. sshj/JSch) → Pi5 → helmd; token + värdprofil i appen; push via ntfy-appen eller UnifiedPush.

Beslut

  • REST + SSE, inte GraphQL/WS i v1 — enklast att testa med curl, räcker för kort-UI. WS-terminal kan läggas till senare.
  • Go, statisk binär — samma modell som agent-tools; trivial cross-compile till Pi (arm64).
  • tmux-scraping i stället för hooks — agentoberoende, överlever omstarter (adoption), fallback är alltid rå tangentkanal.
  • ntfy-topics: agent-helm (serverhändelser), claude (Claudes direktnotiser). Allowlist i config.

Öppna frågor

  • Verifiera agy:s lägesbytes-tangent (Shift+Tab antas).
  • Webbklient: behålla Vue 3 eller byta till ren Vite+TS utan ramverk?
  • Android: Capacitor-wrap av PWA:n (snabbast) vs native Kotlin (bäst tunnel-kontroll). Lutar åt Capacitor + termux-liknande tunnel-lib.
  • helmd på Pi5 i container med tmux? (Kör agenter direkt på Pi:n.)