เริ่มต้นใช้งาน Endeavor Hands

ภาพประกอบ: เริ่มต้นใช้งาน Endeavor Hands

Endeavor Hands คือ MCP server ฝั่งเครื่อง Mac ที่ทำให้ ChatGPT Web เรียกใช้ไฟล์, Terminal, Git, Python และแอปบนเครื่องของคุณได้จริง ตัวนี้ไม่มี LLM และไม่มี agent loop อยู่ข้างหลัง — ChatGPT เป็นฝ่ายคิด วางแผน เลือก tool และตีความผลลัพธ์ ส่วน Hands เป็น “มือ” ที่ทำงานตามขอบเขตความปลอดภัยของแต่ละ tool

โควตาแยกจาก Codex — การแชทกับ ChatGPT Web มีการใช้งานและ rate limit ของตัวเอง ไม่ใช่โควตาเดียวกับ OpenAI Codex (coding agent) เมื่อ Codex ติด rate limit กลางงาน คุณอาจสลับมาให้ ChatGPT Web ทำงานต่อผ่าน Hands ได้ แต่สิ่งนี้ ไม่ได้เพิ่มหรือ bypass โควตาของบริการใด และยังขึ้นกับสิทธิ์/นโยบายของบัญชี ChatGPT ที่ใช้งานอยู่

เหมาะกับใคร

เหมาะกับคนที่ต้องการให้ ChatGPT Web อ่านหรือแก้ไฟล์ รัน test/build ตรวจ repository หรือควบคุมแอปบน Mac ของตัวเอง โดยไม่ต้องเปิด MCP server เป็น public endpoint ให้คนภายนอกเข้ามาโดยตรง ต้องใช้ ChatGPT Web ใน workspace ที่เปิด Developer mode และสร้างแอป/connector แบบ Tunnel ไว้แล้ว (ไม่ใช่แอป ChatGPT desktop หรือมือถือ)

มีอะไรให้ใช้บ้าง: 12 MCP tool names

Tool ใช้ทำอะไร ขอบเขตสำคัญ
bash ค้นไฟล์ ตรวจระบบ รันคำสั่งสั้นๆ test และ build ใช้ sandbox ของ macOS; คำสั่งลบไฟล์ถูกปฏิเสธ และ GUI scripting ผ่าน osascript ใช้ไม่ได้
git status, diff, add แบบระบุ path, commit และ push repo ต้องอยู่ใน approved workspace, ไม่รับการ stage ทั้ง repo แบบ implicit และไม่ force-push
bash_bg เริ่ม/ตรวจ/หยุด shell job ที่รันนาน สูงสุด 5 งาน; log และ registry อยู่ใต้ Endeavor_Hands/work/
python_exec วิเคราะห์ข้อมูล สถิติ regression และ machine learning ใช้ interpreter เดียวกับ server และ library ที่ติดตั้งไว้; อยู่ใต้ sandbox เดียวกับ bash
read_file อ่าน text, source code, PDF, Word, Excel, รูปภาพ, เสียง และวิดีโอ อ่านได้ทั่วเครื่องยกเว้น protected paths; เอกสารใหญ่มีการ sample แบบ local และไฟล์ภาพส่งกลับเป็น PNG
write_file สร้างไฟล์ใหม่หรือแทนที่ทั้งไฟล์ด้วย overwrite=true การแทนที่ไฟล์เดิมใช้ permission gate เดียวกับ edit; นอก workspace จะ redirect ไป working copy
edit แก้ไฟล์เดิมแบบ string, line หรือ atomic batch ครั้งแรกของแต่ละ top-level folder ใน session ต้องถามผู้ใช้และส่ง nonce กลับมา
computer ดูหน้าจอ คลิก พิมพ์ scroll ลาก เปิดแอป และเปิด URL ใช้ Accessibility/OCR, บังคับ observe → act → verify, ไม่พิมพ์ password/OTP/payment และปฏิเสธ action ที่ดูเหมือนลบ
mcp_list_tools สำรวจ tool ของ MCP server อื่น ต้องเรียกก่อน mcp_call_tool เพื่อรู้ชื่อและ arguments ที่ถูกต้อง
mcp_call_tool เรียก tool ของ MCP server อื่น รองรับทั้ง Streamable HTTP และ local stdio; output ถูก cap และมี timeout
mcp_add_server ลงทะเบียน MCP server เพิ่มระหว่างสนทนา HTTP ใช้ URL/headers; stdio ใช้ executable path แบบ absolute, args และ cwd ใน workspace
mcp_remove_server เอา server ที่ลงทะเบียนเองออก จัดการได้เฉพาะ dynamic registry ไม่แตะ server ที่ developer กำหนดใน config.py

สี่รายการ mcp_* ไม่ได้ทำให้ Hands กลายเป็นโมเดลอีกตัว แต่เป็น bridge สำหรับต่อ capability เฉพาะทางเพิ่ม โดย local stdio child จะถูกเปิดตรงโดยไม่ผ่าน shell และอยู่ใต้ sandbox ของ Hands

สิ่งที่เปลี่ยนในรุ่นปัจจุบัน

  • มี git แยกจาก bash สำหรับงาน repository ที่ต้องเปลี่ยน Git metadata โดยยังบล็อกการลบ source file, force-push และ transport ที่ไม่ปลอดภัย
  • MCP bridge รองรับทั้ง Streamable HTTP และ local stdio พร้อม registry แบบ dynamic ที่เก็บใน Endeavor_Hands/work/tool_mcp/
  • output recovery, background-job log และ dynamic MCP registry รวมอยู่ใต้ work/ ไม่กระจายปะปนกับ workspace ของผู้ใช้
  • ทุก tool call มี diagnostic metadata; activity แสดงสดทาง stderr และบันทึกใน logs/agent_activity.jsonl โดย stdout สงวนไว้ให้ MCP protocol
  • computer ส่งภาพหน้าจอพร้อม [OBS] element list, ตรวจ semantic/visual change หลัง action และมี expect= สำหรับตรวจผลแบบมีหลักฐาน แทนการเดาว่าคลิกสำเร็จ

สถาปัตยกรรมโดยย่อ

ChatGPT Web (Developer-mode app)
   │  HTTPS ขาออก
   ▼
OpenAI Secure MCP Tunnel
   │
   ▼
tunnel-client (รันบน Mac ของคุณ)
   │  stdio
   ▼
server.py (FastMCP)
   ├─ bash / git / bash_bg / python_exec
   ├─ read_file / write_file / edit
   ├─ computer
   └─ mcp_* bridge

server.py คุยกับ tunnel-client ผ่าน stdio และไม่มี public MCP port ให้เปิดรอจากอินเทอร์เน็ต เมื่อใช้ launcher อาจมี health/control endpoint แบบ loopback ที่พอร์ตซึ่ง launcher กำหนด (เช่น 127.0.0.1:8765 หรือ deployment ที่ SERVER_MONITOR ดูแลใช้ 127.0.0.1:8768) สำหรับตรวจ readiness และดูแล process — endpoint นี้เข้าถึงได้จากเครื่องเดียวกันและไม่ใช่ MCP endpoint สาธารณะ

ChatGPT เป็นผู้วางแผนทั้งหมด ไม่มีโมเดลซ่อนอยู่ในเครื่อง Hands จึงทำงานกับ MCP client อื่นได้ด้วย เช่น Claude Desktop, mcp dev หรือ Codex CLI หาก client นั้น spawn server.py ได้โดยตรง

ความต้องการของเครื่อง

  • macOS บน Apple Silicon
  • Python 3.11
  • พื้นที่สำหรับ virtual environment และ dependency ของ read_file/computer
  • สิทธิ์ Accessibility และอาจต้องใช้ Screen Recording สำหรับ computer
  • ChatGPT Web workspace ที่เปิด Developer mode สำหรับการเชื่อมต่อแบบ Tunnel

ไม่มี GPU หรือ RAM ขั้นต่ำแบบโมเดล Local AI เพราะไม่มีโมเดล AI รันอยู่ในเครื่อง

ติดตั้ง

คำสั่งติดตั้งจาก public repository คือ:

git clone https://github.com/halochamp/Endeavor_Hands.git
cd Endeavor_Hands
bash install_library/install.sh

ตัวติดตั้งสร้าง .venv เฉพาะโปรเจกต์และติดตั้ง dependency ที่ lock hash ไว้ เช่น mcp, langchain-core, opencv-python, Pillow, markitdown, PyMuPDF และ pyobjc ที่ computer ต้องใช้ หากมี Xcode Command Line Tools จะ build Swift helper สำหรับ screen accessibility, Vision OCR และ speech transcription เพิ่มให้ด้วย ถ้าไม่มี toolchain นี้ เฉพาะฟีเจอร์เสริมจะถูกปิด แต่ server หลักยังทำงานได้

เชื่อมต่อกับ ChatGPT Web

ตั้งค่า tunnel ครั้งแรก

  1. สร้าง tunnel ใน OpenAI Platform และ associate กับ ChatGPT workspace ที่จะใช้

  2. สร้าง runtime API key ที่จำกัดสิทธิ์เฉพาะ Tunnels: Read + Use อย่าวาง key ใน source, profile หรือแชท

  3. ดาวน์โหลด tunnel-client สำหรับ Darwin arm64 จาก OpenAI Platform แล้ววางไว้ที่ bin/tunnel-client

  4. รันตัวช่วยครั้งแรก ซึ่งถาม Tunnel ID และ runtime key แบบไม่ echo และไม่บันทึก credential ลงไฟล์:

    cd Endeavor_Hands
    ./start_tunnel.sh
  5. รอ tunnel-client doctor --explain และให้ profile endeavor-chatgpt เริ่มทำงาน จากนั้นเปิด Terminal นี้ค้างไว้

  6. ตรวจ /readyz และ /ui ที่ loopback port ตามที่ launcher กำหนด (ตัวอย่าง public launcher ใช้ http://127.0.0.1:8765/readyz; deployment ที่ SERVER_MONITOR ดูแลอาจใช้ http://127.0.0.1:8768/readyz) ให้ตอบ ready และเปิดหน้า UI เพื่อดูสถานะ local tunnel

สำหรับการเปิดครั้งถัดไป ใช้ scripts/start_tunnel.command ซึ่งอ่าน runtime key จาก macOS Keychain แล้วส่งต่อให้ process เท่านั้น ไม่เก็บ key ไว้ใน launcher หรือ tunnel profile

เพิ่มแอปใน ChatGPT

  1. เปิด ChatGPT บนเว็บ ใน workspace เดียวกับที่ associate tunnel และเปิด Developer mode
  2. ไปที่ Settings → Apps & Connectors (ชื่อเมนูอาจแสดงเป็น Plugins ตาม rollout) แล้วสร้าง Developer-mode app/connector
  3. ใน Connection เลือก Tunnel ไม่ใช่ URL แล้วเลือก tunnel ที่สร้างไว้
  4. กด Scan Tools ควรเห็นครบ 12 tool names ตามตารางด้านบน
  5. บันทึก app แล้วเปิดแชตใหม่ เลือก Endeavor Hands จาก tools/apps picker หรือเรียกด้วย @ชื่อแอป
  6. เริ่มด้วยคำสั่ง read-only ที่ไม่เสี่ยง เช่น “อ่านรายชื่อโฟลเดอร์โปรเจกต์ใต้ ~/Desktop แล้วสรุปให้ฉัน ห้ามแก้ไขไฟล์”

หากเพิ่งแก้ schema หรือ docstring ของ tool ให้ restart tunnel และกด Refresh/Scan Tools หรือสร้างแชตใหม่ เพราะแชตเดิมอาจถือ tool schema ชุดก่อนหน้าไว้

Workspace และขอบเขตไฟล์

ถ้ารัน server.py ตรงๆ โดยไม่ตั้งค่าอะไร V2_WORKSPACE จะชี้ไปที่ workspace/ ใน repo แต่ launcher สำหรับใช้งานบน Mac จะตั้ง V2_WORKSPACE=~/Desktop เพื่อให้ทำงานกับโปรเจกต์บน Desktop ได้จริง ตรวจค่า workspace ก่อนสั่งงานทุกครั้ง โดยเฉพาะเมื่อใช้ client อื่นหรือเปลี่ยน launcher

การอ่านกับการเขียนมีขอบเขตต่างกัน: read_file อ่านได้กว้างกว่ายกเว้น protected paths ส่วน edit/write_file ใช้ permission gate และนโยบาย create-only นอก workspace ถ้าไฟล์เดิมอยู่นอก workspace จะถูกเขียนไปยัง sibling working copy เช่น report.edited.md แทนการแตะต้นฉบับ

ความปลอดภัยที่ต้องรู้

  • Tunnel เป็น connection ขาออกจาก Mac ไป OpenAI; ไม่ต้องเปิด MCP server เป็น public port
  • การลบไฟล์ถูกปิดไว้ใน code: shell/Python ปฏิเสธ remove/unlink, computer ปฏิเสธ action ที่ดูเหมือนลบ และ Git ยังบล็อก source-file deletion
  • edit และ write_file(overwrite=true) ต้องได้รับ “ใช่” จากผู้ใช้ก่อนครั้งแรกของแต่ละ top-level folder ต่อ session; nonce เป็น friction และ audit trail ไม่ใช่การรับรอง cryptographic ว่าเป็นมนุษย์
  • shell, background shell และ Python ใช้ macOS sandbox-exec แบบ deny-list: protected/system paths ถูก deny อย่างชัดเจน ขณะที่ workspace และ /private/tmp ถูก allow เพิ่มท้าย profile ไม่ควรตีความว่าเป็น allow-list ที่ครอบคลุมทุก path
  • computer ไม่พิมพ์ password, OTP, payment information หรือ credential และต้องมี Accessibility ก่อนจึงจะเห็น/ควบคุมจอได้
  • Git จำกัด repo ให้อยู่ใน approved workspace, รับ add เฉพาะ path ที่ระบุ, commit เฉพาะสิ่งที่ stage ไว้ และ push ไปยัง remote ที่มีอยู่แล้วแบบไม่ force
  • activity log มีการ redact ค่า sensitive; อย่าใส่ runtime key, password, OTP หรือข้อมูลบัตรลงใน prompt

รายละเอียดเชิงลึกของแต่ละชั้นอยู่ในบทความ Endeavor Hands ทำงานอย่างไร และบทความ tool ที่เกี่ยวข้อง

ตัวอย่างคำสั่งที่ควรใช้

ใช้ Endeavor Hands อ่าน ~/Desktop/my-project/src/app.py
หาจุดที่ทำให้ login validation ผิดพลาด แก้เฉพาะไฟล์นี้
รัน test ที่เกี่ยวข้อง แล้วแสดง git diff ก่อนสรุป
ห้ามลบไฟล์ และถ้าต้องแก้ไฟล์เดิมให้ถาม permission ก่อน

ถ้าต้องทำงานนานเกิน timeout ของ bash ให้ใช้ bash_bg(action="start", ...) แล้วติดตามด้วย status โดยอ่าน log tail ล่าสุดทุกครั้ง อย่าเริ่มงานซ้ำเพียงเพราะยังไม่ได้ผลลัพธ์ทันที

อ่านเพิ่มเติม

ความคิดเห็น

กำลังโหลดความคิดเห็น...