Povežite Agent-a na WeChat pomoću Codex + iLink Bot API, na osnovu ovog open-source Skill-a
Juče sam video open-source rešenje wechat-claude-code od korisnika Guāngguāng, koje omogućava udobno korišćenje Claude Code-a u WeChat-u, pa sam želeo da uvedem tu funkciju u PaiCLI.
Sada, sa Codex-om i Claude Code-om, uglavnom ako imate ideju, možete je brzo sprovesti u delo.
Pokazaću vam — osnovna interakcija je već implementirana.

Markdown je takođe podržan, a segmentacija izgleda sasvim pristojno.
Ovde još jedna stvar.
PaiCLI je Agent alat sličan Qoder CLI-ju, koji sam razvio koristeći Claude Code + Codex (uglavnom želim da vam pružim praktično iskustvo sa Agent CLI-jem).

Ukupno interaktivno iskustvo je inspirisano Qoder CLI-jem i prilično je dobro — iako se ne može uporediti sa vrhunskim komercijalnim proizvodima, čitanje koda, izvođenje istraživanja sa više agenata i korišćenje Chrome Devtools MCP-a za otvaranje WeChat članaka — sve su to osnovne operacije koje su već implementirane.
Zapravo, dok sam ranije pisao rešenje za OpenClaw-ovu WeChat interakciju, mislio sam da je vrlo zanimljivo.

Danas imam vremena, sjajna prilika da probam u praksi.
Takođe ću podeliti svoj kompletan razvojni plan, kao referencu kada koristite Claude Code/Codex za razvoj.
U redu, vežite sigurnosne pojaseve, idemoooo.
01. Codex istražuje rešenje za povezivanje WeChat-a sa CC
Ovaj korak je ključan.
Prvo moramo da razumemo tehničke principe povezivanja WeChat-a sa CC.
Pošaljite ovaj prompt direktno Codex-u.
Istražite princip rada wechat-claude-code, zašto može da poveže Claude Code u WeChat-u

- Na strani WeChat-a oslanja se na iLink Bot API, prijavu skeniranjem koda, dugotrajno ispitivanje za primanje poruka, slanje poruka, slanje "trenutno kucam". Ove ključne reči moramo istražiti.
- Lokalni daemon je zadužen za prijem, slanje i redosled, što odgovara Gateway-u koji je OpenClaw tada imao — rešenje je dugotrajno ispitivanje WeChat poruka, po prijemu poruke ulazi u red, a zatim se poziva Claude.
- Na strani Claude Code-a pokreće se lokalni claude proces tako što se WeChat poruke upisuju u stdin, a iz stdout-a čita stream-json izlaz Claude Code-a, parsira inkrementalni tekst i zatim ga prenosi u WeChat.
Ukupno tehničko rešenje nije komplikovano.
Ali da ne bi bilo grešaka, posebno sam dodao još jedan izvor informacija.
U vezi sa https://paicoding.com/wechat-openclaw i @tencent-weixin/openclaw-weixin-cli@latest pomenutim u tekstu, koja je veza između ova dva

Pošto sam nedavno napisao post dok sam u praksi probao zvanično WeChat clawbot rešenje, u kom je pomenut openclaw-weixin-cli dodatak.
Kombinovanjem ova dva pristupa možemo potvrditi rešenje.

Skeniranje za dobijanje tokena, getupdates dugotrajno ispitivanje za prijem poruka, sendmessage za odgovor na poruke, context_token za rutiranje razgovora, medije preko CDN/AES, sendtyping za prikaz "trenutno kucam".
Kada to razjasnimo, tražimo od Codex-a da nam da kompletno tehničko rešenje.

Obavezno potvrdite da li se razumevanje Codex-a poklapa sa našim razumevanjem.
Ako nešto ne razumete, komunicirajte sa Codex-om iznova i iznova.

Inače je lako napraviti greške u kasnijoj fazi razvoja.
Zato, da li primećujete da je AI zaista moćan, ali da i dalje mi programeri moramo da održavamo sinhronizaciju sa AI.
Ako nismo sinhronizovani, nećemo moći jasno da opišemo zahteve, a kada AI pogreši, to nećete ni primetiti.
Ovo je jako, jako ključno.
02. Claude ponovo potvrđuje istraživanje
Za zahteve koji prelaze moje sposobnosti, obično tražim od Claude-a da još jednom potvrdi.
Metod je jednostavan.
Tako što Codex izbaci plan u fajl, a zatim taj fajl predate Claude-u.
Imam najtop Fable 5 na raspolaganju, pa nek analizira.

- Ne treba "isključiti HITL", već zameniti interaktivno odobrenje neinteraktivnom strategijom.
- Prijava skeniranjem koda iLink-a odnosi se na jedan WeChat nalog, getupdates će primiti poruke od svih koji šalju tom nalogu. Ako se proverava samo boundUserId == sender, šta onda raditi sa porukama koje šalju nepovezani ljudi?
Ako mislite da Claude ima pravo, možete izmeniti razvojni plan.

Ako nemate Claude-a, otvaranje novog subagenta u Codex-u za ovu svrhu je takođe u redu.
Otvori subagenta da ponovo pregleda naš plan, vidi ima li rupa.

Zapamtite, obavezno mora biti podređeni Agent — posmatrač jasno vidi, učesnik je zbunjen.
Glavni Agent vrlo lako može da upadne u učvršćenje razmišljanja i smatra da je njegov prethodni plan tačan.
Vidite, u doba AI-ja to ne znači da programeri mogu da isključe mozak — naprotiv, mislim da programeri moraju više da razmišljaju nego ranije.
Inače nećete moći da pratite AI-jevo razumevanje i sposobnosti.
Tako nećete iskoristiti punu moć AI-ja.
Tako-tako.
03. Razvoj i testiranje
Faza razvoja je onda vrlo jednostavna.
Stavio sam u docs/phase-23-wechat-channel.md, kreni sa implementacijom.

Ovaj korak možete prepustiti i jeftinijim LLM modelima, poput DeepSeek V4 Pro — uglavnom neće napraviti grešku.
Jer smo već razjasnili zahteve za razvoj.
Ostalo, zapravo, zavisi od našeg ličnog osećaja za proizvod.
Na primer:
Mislim da celokupno interaktivno iskustvo ima problema. Prvo, odgovor koji se prima u WeChat-u je čudan — ako se proces razmišljanja vraća na stranu WeChat-a, trebalo bi da postoji i normalan SSE proces, ili ne treba prikazivati proces razmišljanja. Proces razmišljanja bi trebalo da se prikazuje na strani PaiCLI.

Ili, način interakcije bi trebalo optimizovati tako da, nakon ulaska u glavnu PaiCLI interakciju, unos /wechat skenira kod, povezuje se i u pozadini pokreće WeChat kanal.

Kakav efekat želite, samo komunicirajte sa Claude Code/Codex iznova i iznova.

Kodne sposobnosti top modela su po mom mišljenju već vrlo jake — koju god funkciju i interaktivno iskustvo želite, uglavnom se može ostvariti.
04. Princip WeChat + PaiCLI
Ukupna arhitektura je trostruktura.

WeChat korisnik pošalje poruku, lokalni proces PaiCLI je primi i prosledi Agent-u, a izlaz Agent-a se zatim vraća u WeChat.
Sloj veze: iLink Bot API
iLink Bot API je Bot mrežni prolaz koji obezbeđuje zvanični WeChat — sva komunikacija sa WeChat-om prolazi kroz njega.

Prvi korak povezivanja je prijava skeniranjem koda.
PaiCLI poziva iLink-ov interfejs za QR kod, dobija privremeni QR kod, a nakon što korisnik na WeChat-u skenira i potvrdi, iLink vraća bot_token.
Svi naknadni zahtevi moraju nositi ovaj token, koji služi kao identifikacija.
Nakon prijave, PaiCLI čuva token, ID naloga, povezani ID korisnika i putanju radnog prostora u lokalnom JSON fajlu. Pri sledećem pokretanju WeChat kanala samo se pročitaju lokalni akreditivi, nema potrebe za ponovnim skeniranjem.

Samo kada iLink vrati session expired (kod greške -14) potrebno je ponovo povezati.
Za prijem poruka koristi se dugotrajno ispitivanje.
PaiCLI šalle iLink-u zahtev getUpdates sa sinhronizacionim kursorom (syncBuf), iLink drži taj zahtev otvorenim dok ne stigne nova poruka ili dok ne istekne vreme (podrazumevano 35 sekundi).
Ako ima poruka, vraća se lista poruka i novi kursor; ako nema, vraća se prazno. Sledeći zahtev nosi novi kursor, u krug.
iLink ima context_token polje koje identifikuje kontekst razgovora. Poruke istog korisnika u različitim prozorima za razgovor imaaju različit context_token — pri odgovaranju na poruke obavezno morate dodati odgovarajući token, inače će poruka biti poslata u pogrešan prozor.
Vreme čekanja dugotrajnog ispitivanja je takođe prilagodljivo.

Pri prvom pokretanju koristi se 35 sekundi kao podrazumevana vrednost, a zatim iLink server u odgovoru dostavlja preporučeno vreme čekanja, na osnovu koga PaiCLI prilagođava vreme čekanja sledećeg zahteva.
Tokom izvršavanja zadatka Agent-a, vreme ispitivanja se skraćuje na 3 sekunde, kako bi se pravovremenije proverilo da li je Agent završio i osvežilo typing status.

Slanje poruka koristi sendMessage interfejs, a za slanje statusa "trenutno kucam" koristi se sendTyping interfejs.
sendTyping je poseban — prvo morate pozvati getConfig da dobijete privremeni typing_ticket, a zatim pomoću tog tiketa podesiti status. Osvežava se na svakih 5 sekundi, inače će na strani WeChat-a nestati podatak "sagovornik trenutno kuca".
Motor poruka
Motor poruka je centralno čvorište za raspoređivanje celog WeChat kanala.
Jezgro je petlja događaja. Nakon što PaiCLI pokrene WeChat kanal, ulazi u while petlju koja u svakom krugu radi tri stvari: proverava da li je trenutni zadatak Agent-a završen, obrađuje red poruka i pokreće sledeći krug dugotrajnog ispitivanja.

Po prijemu poruke, prvo se rade dve provere. Prva je deduplikacija poruka pomoću ID-a poruke, kako bi se izbeglo da ista poruka bude obrađena dva puta zbog mrežnih tremiranja. Druga je provera identiteta — obrađuju se samo poruke povezanih korisnika, dok se poruke drugih odbacuju i zapisuju u log.

Nakon toga sledi parsiranje komandi. WeChat korisnik može slati komande sa kosom crtom za kontrolu kanala.
/helpprikazuje pomoć/statusprikazuje status kanala i dubinu reda/clearbriše istoriju trenutnog razgovora/compactručno komprimuje kontekst/pausepauzira obradu poruka/resumenastavlja obradu/stopotkazuje zadatak Agent-a koji se izvršava
Red poruka je FIFO red — svaki put kada je Agent slobodan, uzima se jedna poruka sa početka reda i prosleđuje se sesiji Agent-a.
Pre prosleđivanja šalje se WeChat korisniku status "trenutno kucam", koji se tokom rada Agent-a osvežava na svakih 5 sekundi, kako bi korisnik znao da PaiCLI radi.
Pri parsiranju poruka takođe se obrađuju različiti tipovi poruka. Svaka poruka koju vrati iLink sadrži niz item_list, gde svaka stavka može biti tekst, govor-u-tekst, slika ili fajl. Tekst i govor-u-tekst se direktno nadovezuju u prompt, dok se slike i fajlovi označavaju kao medijski prilozi.
Agent
Agent je zadužen za prosleđivanje WeChat korisnikove poruke velikom modelu na obradu.
Pri pokretanju WeChat kanala PaiCLI kreira instancu Agent sesije koja sadrži jednonitni asinhroni izvršilac.
Kada se prosledi korisnička poruka, Agent se izvršava u pozadinskoj niti i ne blokira petlju događaja motora poruka. Na taj način motor poruka može nastaviti da ispituje nove poruke, odgovara na sporedne komande i osvežava typing status.
U pogledu upravljanja kontekstom, /clear briše celu istoriju razgovora, dok /compact poziva LLM da napravi sažetak trenutne istorije.
Prilagođavanje ispisa
Prvo, pojednostavljivanje Markdown-a. Uklanjaju se jezičke oznake blokova koda (java →), uklanja se prefiks # naslova i oznake ** za podebljano.
Drugo, segmentacija poruka. WeChat ima ograničenje dužine za jednu poruku, pa adapter deli odgovore preko 3800 znakova po prelomu reda u više poruka koje šalje redom.
Treće, proces razmišljanja i detalji poziva alata se ne šalju u WeChat — WeChat korisnik dobija samo konačni tekstualni odgovor.

WeChat renderer takođe radi slanje u toku. Ne čeka da se Agent potpuno izvrši pa onda gurne poruku, već na svakih 180 znakova ili na svakih 1,2 sekundi radi flush, tako da WeChat korisnik može u realnom vremenu da vidi odgovor koji "kuca" — iskustvo je bliže razgovoru uživo nego čekanju imejla.
05. Kako dodati PaiCLI u CV?
Naziv projekta: PaiCLI WeChat kanal
Kratak opis projekta: Rešenje za WeChat integraciju zasnovano na iLink Bot API-ju koje korisnicima omogućava da komuniciraju sa lokalno pokrenutim AI Agent-om putem WeChat poruka, podržavajući čitanje koda, operacije nad fajlovima, prebacivanje između više modela i druge funkcije.
Tehnološki stek: Java 21, OkHttp, Jackson, iLink Bot API, dugotrajno ispitivanje, neinteraktivna bezbednosna strategija

Ključne odgovornosti:
- Implementacija prijave skeniranjem koda i prijema i slanja poruka putem dugotrajnog ispitivanja na osnovu iLink Bot API-ja, sa kašnjenjem poruka kontrolisanim na manje od 1 sekunde
- Dizajn petlje događaja motora poruka i raspoređivanja asinhronog reda, podrška za trenutne odgovore na sporedne komande i obradu u redu za redovne poruke
- Razvoj arhitekture sa dva renderera — izlaz Agent-a se istovremeno šalje na lokalni terminal i u WeChat, pri čemu WeChat strana automatski filtrira proces razmišljanja, ANSI kodove i Markdown format
- Podrška za upravljanje daemon pozadinskim procesom, realizacija rada 7x24 časa bez nadzora, uz pun set operativnih komandi start/stop/restart/logs
