# แอปคู่หู ## แอปคู่หูคืออะไร? แอปคู่หูคือแอปพลิเคชันแบบ native สำหรับ iOS, Android และ macOS ที่เชื่อมต่อกับ Gateway ของคุณในฐานะ **node** Node เปิดเผยความสามารถของอุปกรณ์, กล้อง canvas การบันทึกหน้าจอ ตำแหน่ง เสียง และการรันระบบ, ให้กับเอเจนต์ของคุณ ลองคิดดูแบบนี้: Gateway คือสมอง และแอปคู่หูคือมือและตาบนอุปกรณ์ของคุณ ## วิธีทำงานของ Node 1. **เชื่อมต่อ**, แอปคู่หูเชื่อมต่อกับ Gateway ของคุณผ่าน WebSocket 2. **จับคู่**, อุปกรณ์ใหม่ผ่านกระบวนการอนุมัติการจับคู่ 3. **ลงทะเบียนความสามารถ**, แอปบอก Gateway ว่าทำอะไรได้บ้าง (กล้อง canvas ตำแหน่ง เป็นต้น) 4. **เอเจนต์เรียกใช้**, ระหว่างการสนทนา เอเจนต์สามารถขอให้ node ถ่ายรูป บันทึกหน้าจอ เรนเดอร์ canvas และอื่น ๆ Node **ไม่ใช่ gateway**, พวกมันไม่รัน AI ของตัวเอง พวกมันคืออุปกรณ์ peripheral ที่ขยายสิ่งที่เอเจนต์ของคุณสามารถทำได้ ## macOS Companion App แอป macOS อยู่ในแถบเมนูและทำหน้าที่เป็นทั้ง companion node และตัวจัดการ gateway ### ความสามารถ - **Canvas**, เรนเดอร์เนื้อหาเว็บแบบโต้ตอบในหน้าต่าง native - **Camera**, ถ่ายรูปและวิดีโอ (กล้องหน้า/หลัง) - **Screen Recording**, การบันทึกเต็มหน้าจอหรือต่อแอป - **System Execution**, รันคำสั่งเชลล์บน Mac (ควบคุมโดยการอนุมัติ exec) - **Notifications**, ส่งการแจ้งเตือน macOS แบบ native พร้อมตัวเลือกลำดับความสำคัญ - **Location**, GPS เมื่อมี ### ฟีเจอร์เพิ่มเติม - **Gateway Management**, เริ่ม หยุด และตรวจสอบ Gateway - **Permission Ownership**, จัดการ macOS TCC permissions (Notifications, Accessibility, Screen Recording, Microphone, Speech Recognition, AppleScript) - **Deep Links**, รูปแบบ URL `neotask://` สำหรับเปิดใช้งานเอเจนต์พร้อมพารามิเตอร์ - **CLI Install**, ติดตั้งเครื่องมือ command-line `neotask` ## iOS App แอป iOS เชื่อมต่อเป็น node กับ Gateway ของคุณ นำความสามารถมือถือมาสู่เอเจนต์ของคุณ ### ความสามารถ - **Canvas**, การเรนเดอร์เนื้อหาแบบโต้ตอบบน SwiftUI - **Camera**, รูปภาพและวิดีโอ (กล้องหน้า/หลัง) - **Audio Recording**, การจับเสียงจากไมโครโฟน - **Location**, GPS พร้อมการเลือกความแม่นยำ - **Notifications**, การแจ้งเตือน push iOS แบบ native ### ฟีเจอร์ - **Discovery**, ค้นหา Gateway ผ่าน Bonjour (LAN), Tailscale (VPN) หรือการป้อนด้วยตนเอง - **Pairing**, การจับคู่อุปกรณ์ที่ปลอดภัยพร้อมการอนุมัติจาก Gateway - **Voice Wake**, การเปิดใช้งาน wake word สำหรับการโต้ตอบแบบ hands-free - **Talk Mode**, การสนทนาด้วยเสียงอย่างต่อเนื่อง - **Share Extension**, แชร์เนื้อหาจากแอปอื่นโดยตรงไปยังเอเจนต์ของคุณ - **A2UI**, การเรนเดอร์ UI ที่ขับเคลื่อนโดยเอเจนต์บน canvas ของอุปกรณ์ ### ข้อจำกัด - การออกแบบที่ foreground เป็นหลัก (iOS ระงับการเชื่อมต่อ WebSocket ในพื้นหลัง) - ข้อจำกัดคำสั่งพื้นหลังที่เข้มงวด - ปัจจุบันอยู่ใน internal preview ## Android App แอป Android เชื่อมต่อเป็น node พร้อมความสามารถที่คล้ายกับ iOS ### ความสามารถ - **Canvas**, การเรนเดอร์ UI บน Jetpack Compose - **Camera**, รูปภาพและวิดีโอ (กล้องหน้า/หลัง, ควบคุมด้วยสิทธิ์) - **Screen Recording**, การจับหน้าจอระบบ (Android 10+) - **Location**, GPS พร้อมโหมดความแม่นยำ - **SMS Sending**, บนอุปกรณ์ที่รองรับ telephony - **Chat & History**, ดูประวัติการสนทนาบนอุปกรณ์ ### ฟีเจอร์ - **Foreground Service**, การแจ้งเตือนแบบถาวรรักษาการเชื่อมต่อให้มีชีวิต - **Shared Sessions**, เซสชันเดียวกันข้ามทุก node ที่เชื่อมต่อ - **Modern Android**, ต้องการ Android 12+ (API 31) ## Headless Node Host รัน node โดยไม่มี UI, เหมาะสำหรับ build server เครื่องระยะไกล หรือกล่อง Linux แบบ headless ### ความสามารถ - **System Execution**, รันคำสั่งบน node host - **Command Allowlist**, กำหนดค่าคำสั่งที่ node สามารถรัน - **Persistent Service**, ติดตั้งเป็น launchd/systemd service ### กรณีการใช้งาน - CI/CD build agent, ให้เอเจนต์ AI ของคุณทริกเกอร์ build บน server ระยะไกล - Home lab automation, รันคำสั่งบน Raspberry Pi หรือ home server - การออร์เคสเตรชันหลายเครื่อง, ประสานงานข้ามหลายเครื่อง ## การจับคู่อุปกรณ์ ### ขั้นตอนการจับคู่ 1. แอปคู่หูแสดง identity อุปกรณ์ (fingerprint + public key) 2. Gateway ออกคำขออนุมัติการจับคู่ 3. คุณอนุมัติอุปกรณ์ผ่านแอปเดสก์ท็อปหรือแดชบอร์ด 4. Gateway ออก device token สำหรับการเชื่อมต่อในอนาคต ### โมเดลความเชื่อถือ - **อุปกรณ์ local** (loopback) ได้รับการอนุมัติอัตโนมัติเพื่อความสะดวก - **อุปกรณ์ที่ไม่ใช่ local** ต้องการการอนุมัติอย่างชัดแจ้ง - Device token ถูกจัดเก็บในเครื่องและนำกลับมาใช้เมื่อเชื่อมต่อซ้ำ ## การอนุมัติ Exec สำหรับ node ที่สามารถรันคำสั่งระบบ (macOS, headless host) การอนุมัติ exec ควบคุมสิ่งที่อนุญาต: - **โหมด Allowlist**, เฉพาะคำสั่งที่อนุมัติล่วงหน้าเท่านั้นที่สามารถรัน - **โหมด Ask**, คำสั่งที่ไม่รู้จักจะแจ้งให้คุณอนุมัติ - **โหมด Full**, ไม่มีข้อจำกัด (ใช้ด้วยความระมัดระวัง) กำหนดค่า allowlist ต่อ node เพื่อควบคุมอย่างแม่นยำว่าแต่ละอุปกรณ์สามารถทำอะไรได้บ้าง