การตั้งค่า
ZenCopy ใช้งานได้ทันทีโดยไม่ต้องตั้งค่าอะไรเลย หน้านี้มีไว้สำหรับตอนที่คุณอยากให้แอปเข้ากับตัวคุณมากขึ้น ครึ่งแรกว่าด้วยหน้าต่างการตั้งค่าสำหรับทุกคน ส่วนครึ่งหลังว่าด้วยไฟล์ตั้งค่าสำหรับผู้ใช้ขั้นสูง
หน้าต่างการตั้งค่า
หัวข้อที่มีชื่อว่า “หน้าต่างการตั้งค่า”เปิดได้จากเมนูของไอคอนถาดระบบ หรือไอคอนรูปเฟืองบนป๊อปอัป มีสามแท็บ: ทั่วไป, AI และแอ็กชัน
- ตำแหน่งป๊อปอัป — ผลลัพธ์จะปรากฏที่มุมใดของหน้าจอ
- ธีม — สว่าง / มืด / ตามระบบ
- ภาษา — ภาษาที่แสดง (ค่าเริ่มต้นตาม OS ของคุณ)
- เริ่มเมื่อเข้าสู่ระบบ — ให้ ZenCopy พร้อมรออยู่เสมอเมื่อคอมพิวเตอร์เปิดอยู่
- ยืนยันก่อนส่งรูปภาพและไฟล์ — จะให้ถามหนึ่งครั้งก่อนที่รูปภาพหรือไฟล์จะถูกส่งไปยัง AI หรือไม่
นี่คือที่สำหรับเปลี่ยนบริการ AI (ผู้ให้บริการ โมเดล คีย์ API) ปุ่ม ทดสอบ จะบอกทันทีว่าการเชื่อมต่อใช้งานได้หรือไม่
แท็บนี้ยังมีช่อง เกี่ยวกับคุณ ด้วย เป็นที่สำหรับบรรยายบทบาทและความชอบของคุณด้วยประโยคธรรมดาไม่กี่ประโยค ภาษาใดก็ได้
ตัวอย่าง: “ฝ่ายขาย ส่วนใหญ่เขียนอีเมลถึงลูกค้า สุภาพแต่ไม่แข็งทื่อ สรุปก่อน”
เมื่อกรอกไว้ ทุกแอ็กชันจะปรับผลลัพธ์ให้เหมาะกับคุณ คำอธิบายจะมาในระดับความรู้ของคุณ และร่างข้อความจะกลับมาในน้ำเสียงที่คุณชอบ มันไม่กระทบงานที่ไม่เกี่ยวข้อง และตัวข้อความเองจะไม่โผล่ในผลลัพธ์
แอ็กชัน
หัวข้อที่มีชื่อว่า “แอ็กชัน”รายการของ “สิ่งที่เกิดขึ้นหลังคัดลอกสองครั้ง”
- แอ็กชันที่ติดตั้งมาให้เปิดอ่านได้ — ใช้เป็นตัวอย่างการเขียนจริงได้ในตัว
- แอ็กชันใหม่ใช้แค่ชื่อกับสิ่งที่อยากให้ทำเท่านั้น เช่น ชื่อ “สรุป 3 บรรทัด” คำสั่ง “สรุปเนื้อหานี้เป็น 3 บรรทัด”
- ไม่มั่นใจในการเขียนคำสั่งก็ไม่เป็นไร จดสิ่งที่ต้องการแบบคร่าว ๆ แล้วกด ร่างด้วย AI — AI ที่คุณตั้งค่าไว้จะเรียบเรียงให้เป็นคำสั่งที่สมบูรณ์
- การกำหนดเส้นทางให้คุณเลือกแอ็กชันต่างกันได้ตามประเภทของเนื้อหา (ข้อความ / รูปภาพ / ไฟล์)
แอ็กชันที่คุณสร้างแชร์ให้คนอื่นได้: ส่งออก (.md) จะเขียนออกมาเป็นไฟล์หนึ่งไฟล์ ส่วนฝ่ายผู้รับแค่วางลงใน นำเข้า หรือเลือกไฟล์นั้น
หากคุณต้องการยกหน้าที่ทั้งหมดให้ AI จัดการ? แชท AI ใดๆ ก็สามารถเขียนแอ็กชันที่พร้อมนำเข้าให้คุณได้ เพียงคัดลอกข้อความนี้แล้วเติมคำในช่องว่าง:
อ่าน https://zencopy.app/llms-full.txt — เอกสารประกอบฉบับเต็มของ ZenCopy รวมถึงรูปแบบไฟล์แอ็กชัน ตัวแปรเทมเพลต และวิธีการทำงานของเส้นทาง (routing) จากนั้นเขียนแอ็กชันของ ZenCopy ที่ทำสิ่งต่อไปนี้: [สิ่งที่คุณต้องการ] แสดงผลไฟล์แอ็กชันที่สมบูรณ์หนึ่งไฟล์ (Markdown พร้อม frontmatter) ในบล็อกโค้ดเดียว ซึ่งพร้อมสำหรับนำไปวางใน การตั้งค่า → แอ็กชัน → นำเข้า ของ ZenCopy หากแอ็กชันนี้ใช้งานได้เฉพาะในแอปหรือเว็บไซต์ใดเว็บไซต์หนึ่งโดยเฉพาะ ให้เพิ่มข้อความหนึ่งประโยคเพื่อบอกฉันว่าต้องตั้งค่ากฎเส้นทางใดบล็อกโค้ดในคำตอบจะถูกนำไปใส่ใน การตั้งค่า → แอ็กชัน → นำเข้า ได้ทันที สำหรับคำถามที่เอกสารประกอบไม่สามารถให้คำตอบได้ (“ZenCopy สามารถทำ… ได้ด้วยหรือ?”) คลิกเพียงครั้งเดียวเพื่อแพ็กซอร์สโค้ดที่เกี่ยวข้อง — แล้วส่งผลลัพธ์นั้นให้กับ AI ตัวเดิม
ไฟล์ตั้งค่า (สำหรับผู้ใช้ขั้นสูง)
หัวข้อที่มีชื่อว่า “ไฟล์ตั้งค่า (สำหรับผู้ใช้ขั้นสูง)”จากตรงนี้เป็นต้นไปคือเรื่องการแก้ไขไฟล์ข้อความโดยตรง ทุกอย่างที่จำเป็นมีให้ในหน้าต่างการตั้งค่าแล้ว จะหยุดอ่านตรงนี้ก็ได้ตามสบาย
ไฟล์จะถูกอ่านจากไดเรกทอรีตั้งค่าแอปของผู้ใช้แต่ละคน เส้นทางที่แน่นอนจะถูกพิมพ์ลงบันทึกตอนเปิดแอปด้วย:
%APPDATA%\app.zencopy~/Library/Application Support/app.zencopy~/.config/app.zencopyค่าเริ่มต้นของการกำหนดเส้นทางฝังอยู่ในตัวแอป routing.json ทำหน้าที่เขียนทับค่าเหล่านั้นเท่านั้น
ไฟล์แอ็กชันเป็นแบบเพิ่มเข้าอย่างเดียว:
มันใช้นิยามแอ็กชันใหม่ และแอ็กชันในตัวแตะต้องไม่ได้ (ไฟล์ในเครื่องที่อ้าง id ของแอ็กชันในตัวจะถูกละเว้น)
การแก้ไขมีผลตั้งแต่ทริกเกอร์ครั้งถัดไป — ไม่ต้องรีสตาร์ต
ai-sdk-catalog.json
หัวข้อที่มีชื่อว่า “ai-sdk-catalog.json”ผู้ให้บริการ บวกการจับคู่ role → โมเดล
บ้านของรูปแบบไฟล์นี้คือ ai-sdk-catalog — ทุกฟิลด์มีเอกสารอธิบายอยู่ที่นั่น (รวมถึง $schema สำหรับให้เอดิเตอร์ตรวจสอบและเติมข้อความอัตโนมัติ) และใน examples/ มีตัวอย่างการตั้งค่าสามขนาด
สำหรับจุดเริ่มต้นแบบฉบับ ZenCopy (รูปแบบที่ UI การตั้งค่าเขียน, Ollama ในเครื่อง, role สำหรับแอ็กชัน) ดูที่สูตรสำเร็จ
ข้อกำหนดหนึ่งมาจากตัว ZenCopy เอง ไม่ใช่จากรูปแบบไฟล์: roles ต้องมี default เสมอ
ทุกแอ็กชันจะรันด้วย role นี้ เว้นแต่ frontmatter ของแอ็กชันระบุ role อื่น และการทดสอบการเชื่อมต่อในหน้าตั้งค่าก็ ping role นี้เช่นกัน
คีย์ API เขียนลงไฟล์ในเครื่องนี้โดยตรง (UI การตั้งค่าก็เขียนรูปแบบเดียวกัน) และไม่มีวันออกไปนอกเครื่องของคุณ
ตัวแปรสภาพแวดล้อมจะไม่ถูกอ่าน — แอป GUI ถูกเปิดโดย OS ไม่ใช่เชลล์ของคุณ ตัวแปรที่ export ไว้ใน .zshrc และไฟล์ทำนองเดียวกันจึงส่งไปไม่ถึงอยู่แล้ว
ไฟล์นี้ถูกตรวจสอบกับ schema ทุกครั้งที่อ่าน
การแก้ไขที่ผิดพลาดจะปรากฏเป็นข้อความชัดเจนทั้งในป๊อปอัปและในเอดิเตอร์ของการตั้งค่า — ไม่มีอะไรล้มเหลวแบบเงียบ ๆ
routing.json
หัวข้อที่มีชื่อว่า “routing.json”แอ็กชันใดจัดการการจับประเภทใด:
แผนที่ kind → action แบบแบน บวกรายการ overrides ที่มีลำดับความสำคัญสูงกว่า (ไม่บังคับ ข้อแรกที่ตรงชนะ)
ประเภทมีสี่แบบคือ text, rich_text, image และ files ค่าเริ่มต้นคือข้อความไปที่ Zen ส่วนรูปภาพและไฟล์ไปที่อธิบาย
แผนที่แบบแบนแก้ไขได้ในแอป (ตั้งค่า → แอ็กชัน → การกำหนดเส้นทาง) คุณจึงต้องแตะไฟล์นี้เฉพาะเมื่อจะใช้ overrides เท่านั้น
{ "text": "zencopy-zen", "rich_text": "zencopy-zen", "image": "zencopy-explain", "files": "zencopy-explain", "overrides": [{ "when": { "app_name": "Slack", "min_chars": 200 }, "action": "summarize" }]}เงื่อนไขของ when: kind, app_name, exec_name, window_title, url (ทั้งหมดรองรับไวลด์การ์ด *), file_name (ไวลด์การ์ดสำหรับจับคู่ชื่อไฟล์ที่คัดลอกมาทั้งหมด โดยไม่คำนึงถึงตัวพิมพ์เล็ก-ใหญ่ — เช่น *.pdf) รวมทั้ง min_chars / max_chars
สำหรับการจับแบบ image และ files เนื้อหาจะถูกส่งไปยังโมเดลโดยตรง (รวมสูงสุด 10 MB ต่อการจับหนึ่งครั้ง)
ประเภทของไฟล์ตรวจจากเนื้อหา ไม่ใช่ชื่อไฟล์:
รูปภาพ, PDF และเสียงจะถูกแนบไปตามเดิม ส่วนไฟล์ข้อความ (Markdown, ซอร์สโค้ด, CSV, …) จะกลายเป็นข้อความของการจับ ({{ text }}) และทำงานเหมือนกับว่าคุณคัดลอกเนื้อหาข้างในมาทุกประการ
เอกสาร Office (Word, Excel, PowerPoint) ก็จะกลายเป็นข้อความเช่นกัน: เนื้อหาของเอกสารจะถูกแยกและส่ง แต่เค้าโครงและรูปภาพจะไม่ถูกส่ง
การเข้ารหัสอักขระถูกตรวจจับอัตโนมัติ โดยแปลงรูปแบบเก่าอย่าง Shift_JIS และ UTF-16 ให้ด้วย
ไฟล์นอกเหนือจากนี้จะถูกปฏิเสธพร้อมข้อความที่ชัดเจน
เส้นทางแบบเต็มจะถูกส่งไปพร้อมเนื้อหา เพื่อให้โมเดลแยกไฟล์ออกจากกันได้และรู้ว่าไฟล์อยู่ที่ไหน
เนื่องจากไฟล์แนบไบนารีอาจมีค่าใช้จ่ายมากกว่าข้อความ ป๊อปอัปจะถามก่อนส่ง (ไฟล์ข้อความทำงานได้โดยไม่ถาม) — การยืนยันปิดได้ทั้งตรงนั้นเองหรือในการตั้งค่า
actions/*.md
หัวข้อที่มีชื่อว่า “actions/*.md”หนึ่งไฟล์ = หนึ่งแอ็กชัน: frontmatter แบบ YAML + เนื้อหาพรอมต์แบบ Liquid ไฟล์เดียวกันนี้คือรูปแบบสำหรับแชร์ด้วย — ตั้งค่า → แอ็กชัน → นำเข้า รับได้ทั้งการวางเป็นข้อความและการเลือกไฟล์
---id: summarizelabel: สรุปrole: defaultinstructions: คุณคือผู้ช่วยที่ตอบอย่างกระชับ---
สรุปเนื้อหาต่อไปนี้เป็นภาษา {{ locale }} ความยาว 3 บรรทัด:
{{ text }}| Frontmatter | ความหมาย |
|---|---|
id | ชื่อที่ถูกอ้างถึงจาก routing.json (ค่าเริ่มต้น: ชื่อไฟล์) — คำนำหน้า zencopy- สงวนไว้สำหรับแอ็กชันที่ติดตั้งมาให้ |
label | แสดงบนป๊อปอัป |
role | role ของ catalog ที่ใช้เรียก (ค่าเริ่มต้น: default) |
instructions | พรอมต์ระบบ (เทมเพลต Liquid) |
ตัวแปรเทมเพลต พร้อมตัวอย่างค่าเมื่อคัดลอกย่อหน้าหนึ่งในเบราว์เซอร์:
| ตัวแปร | ตัวอย่าง |
|---|---|
{{ text }} | ข้อความที่คัดลอก (การคัดลอกแบบ HTML จะกลายเป็น Markdown) |
{{ markup }} | ซอร์ส HTML/RTF ของการคัดลอกแบบมีรูปแบบ |
{{ format }} | html (หรือ rtf และว่างสำหรับการคัดลอกธรรมดา) |
{{ file_name }} | report.pdf (ชื่อของไฟล์ที่คัดลอกมาไฟล์แรก) |
{{ file_names }} | ชื่อของไฟล์ที่คัดลอกมาทั้งหมด รายการละหนึ่งบรรทัด |
{{ file_paths }} | เส้นทางเต็มของไฟล์ที่คัดลอกมาทั้งหมด รายการละหนึ่งบรรทัด |
{{ app_name }} | Safari |
{{ exec_name }} | Safari / chrome.exe |
{{ exec_path }} | /Applications/Safari.app/Contents/MacOS/Safari |
{{ window_title }} | ราคา – Example |
{{ url }} | https://example.com/pricing (เฉพาะเบราว์เซอร์) |
{{ process_id }} | 8123 |
{{ now }} | 2026-07-08 20:15:00 |
{{ locale }} | th |
นอกจากนี้ยังมีฟิลเตอร์เฉพาะของ ZenCopy ชื่อ language_name: {{ locale | language_name }} จะขยายเป็น “Thai” แทนที่จะเป็น “th” ซึ่งอ่านเป็นธรรมชาติกว่าในพรอมต์
หากอยากเห็นค่าจริง ให้เปิดโหมดนักพัฒนาในการตั้งค่า — ตัวแปรเทมเพลตของการจับแต่ละครั้งจะปรากฏในป๊อปอัปเป็น JSON
แอ็กชันแบบง่าย (ชื่อกับคำสั่ง) สร้างจากหน้าต่างการตั้งค่าก็ได้เช่นกัน สิ่งที่มันเขียนออกมาก็คือไฟล์รูปแบบนี้เป๊ะ ๆ
เทมเพลตขั้นสูง
หัวข้อที่มีชื่อว่า “เทมเพลตขั้นสูง”ทั้ง frontmatter instructions และเนื้อหาเป็นเทมเพลต LiquidJS เต็มรูปแบบ: เงื่อนไข ลูป และฟิลเตอร์ใช้ได้ทั้งหมด
แอ็กชันเดียวจึงปรับตัวตามที่มาของการคัดลอกได้:
---id: context-awarelabel: ปรับตามบริบท---
{% if url contains "github.com" %}รีวิวโค้ดนี้และชี้ความเสี่ยงที่ใหญ่ที่สุดเพียงข้อเดียว:{% elsif app_name == "Slack" %}สรุปเธรดแชตนี้เป็น 2 บรรทัด:{% else %}อธิบายสิ่งนี้เป็นภาษา {{ locale }}:{% endif %}
{{ text | truncate: 8000 }}บันทึกแบบมีโครงสร้าง (ข้อมูลลับและเนื้อหาที่คัดลอกถูกปกปิด) จะออกทางเทอร์มินัลในโหมด dev และเขียนลงไฟล์แบบหมุนเวียนในรุ่น release:
%LOCALAPPDATA%\app.zencopy\logs~/Library/Logs/app.zencopy/~/.local/share/app.zencopy/logs