# 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: ```sql UPDATE agent_identities SET handler_mode = '' 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 ```bash 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 ""` > Marker ferdig: `/home/vegard/synops/scripts/vaktmester-complete.sh ` > 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 ```bash 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) ```bash 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 ""` | Skriv melding som Claude Code med access-propagering | | `scripts/vaktmester-complete.sh ` | Marker jobb som completed | ## Feilsøking **Jobber forblir deferred for lenge:** ```bash # 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:** ```bash 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:** ```bash docker exec sidelinja-postgres-1 psql -U sidelinja -d synops -c " SELECT agent_key, handler_mode, is_active FROM agent_identities; " ```