synops/docs/infra/claude_code_polling.md
vegard 7d0ccdfa06 Docs: Claude Code polling — komplett oppsett og feilsøking
Handler-moduser (internal/external/paused), chat-ID, scripts,
start/stopp-prosedyrer, feilsøking. Alt en ny sesjon trenger
for å starte polling uten forkunnskaper.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-20 05:59:10 +00:00

3.5 KiB

Claude Code polling — chat-integrasjon

Oversikt

Claude Code (denne terminalen) kan svare på meldinger i Synops-chatten ved å polle for deferred jobber. Maskinrommet ruter meldinger basert på handler_mode i agent_identities.

Forutsetninger

  • Claude Code kjører i tmux-sesjon på serveren
  • Maskinrommet kjører (systemctl status maskinrommet)
  • PostgreSQL kjører (Docker)

Handler-moduser

Sett med:

UPDATE agent_identities SET handler_mode = '<modus>' WHERE agent_key = 'claude-main';
Modus Oppførsel
internal Maskinrommet kjører synops-respond (eksternt API). Standard.
external Jobb deferred → Claude Code poller og svarer.
paused Maskinrommet svarer "AI utilgjengelig". Ingen AI-kall.

Claude Code chat

  • Chat-ID: abe2edfd-986b-45ba-8c2e-4461a8a7e480
  • Tittel: "Claude Code"
  • Deltakere: Vegard + Claude Code agent
  • URL: https://ws.synops.no/chat/abe2edfd-986b-45ba-8c2e-4461a8a7e480

Starte polling

1. Sett handler_mode til external

docker exec sidelinja-postgres-1 psql -U sidelinja -d synops -c "
UPDATE agent_identities SET handler_mode = 'external', is_active = true
WHERE agent_key = 'claude-main';
"

2. Start polling i Claude Code

Si til Claude Code:

Start vaktmester-polling. Sjekk for deferred jobber hvert minutt. Poll med: /home/vegard/synops/scripts/vaktmester-poll.sh Svar med: /home/vegard/synops/scripts/chat-reply.sh <chat-id> "<svar>" Marker ferdig: /home/vegard/synops/scripts/vaktmester-complete.sh <job-id> Chat-ID: abe2edfd-986b-45ba-8c2e-4461a8a7e480

Eller bruk /loop 1m vaktmester-poll for automatisk polling.

3. Flyten

Bruker skriver i chat
  → Maskinrommet: create_node + agent_respond jobb
  → Handler: handler_mode=external → status='deferred'
  → Claude Code poller: finner deferred jobb
  → Leser melding fra payload
  → Behandler (svarer, utfører kommandoer, etc.)
  → Skriver svar: scripts/chat-reply.sh
  → Markerer done: scripts/vaktmester-complete.sh

Stoppe polling

Tilbake til eksternt API

docker exec sidelinja-postgres-1 psql -U sidelinja -d synops -c "
UPDATE agent_identities SET handler_mode = 'internal'
WHERE agent_key = 'claude-main';
"

Pause (ingen AI)

docker exec sidelinja-postgres-1 psql -U sidelinja -d synops -c "
UPDATE agent_identities SET handler_mode = 'paused'
WHERE agent_key = 'claude-main';
"

Scripts

Script Funksjon
scripts/vaktmester-poll.sh Returner JSON med eldste deferred jobb, eller "none"
scripts/chat-reply.sh <chat-id> "<melding>" Skriv melding som Claude Code med access-propagering
scripts/vaktmester-complete.sh <job-id> Marker jobb som completed

Feilsøking

Jobber forblir deferred for lenge:

# Sjekk deferred jobber
docker exec sidelinja-postgres-1 psql -U sidelinja -d synops -c "
SELECT id, created_at FROM job_queue WHERE status = 'deferred' ORDER BY created_at;
"

Bytt tilbake til internal hvis Claude Code er nede:

docker exec sidelinja-postgres-1 psql -U sidelinja -d synops -c "
UPDATE agent_identities SET handler_mode = 'internal' WHERE agent_key = 'claude-main';
UPDATE job_queue SET status = 'pending' WHERE status = 'deferred' AND job_type = 'agent_respond';
"

Sjekk handler_mode:

docker exec sidelinja-postgres-1 psql -U sidelinja -d synops -c "
SELECT agent_key, handler_mode, is_active FROM agent_identities;
"