วิธีส่งความลับให้ AI Coding Agent โดยไม่ต้องใส่ไว้ในพรอมต์

เอเจนต์ต้องใช้คีย์ Stripe หรือรหัสผ่านฐานข้อมูลเพื่อรันคำสั่งของมัน ถ้าคุณวางค่านั้นลงในแชต มันจะไปอยู่ในไฟล์ทรานสคริปต์บนดิสก์ของคุณ ไปอยู่ที่ผู้ให้บริการโมเดล และบางครั้งก็ไปอยู่ในคอมมิท กฎที่เราได้มาหลังจากพลาดเองสามครั้ง : ความลับไปถึงเอเจนต์ผ่านตัวแปรสภาพแวดล้อม และผ่านทางอื่นไม่ได้เลย

สถานการณ์เป็นแบบเดิมเสมอ เอเจนต์ทำงานไปได้ครึ่งทาง แล้วมันต้องเรียก Stripe test API ของคุณ รันไมเกรชันกับฐานข้อมูล staging หรือพุชขึ้น registry ส่วนตัว มันขอคีย์ คุณมีคีย์อยู่ในโปรแกรมจัดการรหัสผ่าน เอเจนต์กำลังรอ และสิ่งที่เร็วที่สุดในโลกก็คือวางคีย์นั้นลงในแชต

การวางครั้งนั้นคือจังหวะที่คีย์หลุดออกจากการควบคุมของคุณ ไม่ใช่เพราะโมเดลมีเจตนาร้าย แต่เพราะพรอมต์เป็นวัตถุที่ถูกเก็บและถูกส่งต่อ : มันไปอยู่ในไฟล์ทรานสคริปต์บนดิสก์ของคุณ มันไปถึงผู้ให้บริการโมเดล และมันถูกคัดลอกโดยการรันซ้ำทุกครั้งและโดย subagent ทุกตัวที่รับบทสนทนาต่อ

เราพัฒนา AgentsRoom แอปเดสก์ท็อปที่รันเอเจนต์เขียนโค้ด เราจึงต้องแก้เรื่องนี้ให้ตัวเองก่อน เราทำพลาดสามครั้งในเดือนกันยายน 2026 นี่คือกฎที่เราได้มาในท้ายที่สุด สามความผิดพลาดที่ทำให้เกิดกฎนั้น และวิธีนำไปใช้ ไม่ว่าคุณจะใช้แอปของเราหรือไม่ก็ตาม

คำตอบสั้น ๆ

  • ความลับไปถึงเอเจนต์ผ่านตัวแปรสภาพแวดล้อม และผ่านทางอื่นไม่ได้เลย ไม่ใช่ข้อความ ไม่ใช่ทิกเก็ต ไม่ใช่ skill ไม่ใช่ออปชันบนบรรทัดคำสั่ง
  • เอเจนต์ใช้ $NAME ไม่เคยใช้ค่าจริง เชลล์จะขยายมันตอนคำสั่งทำงาน
  • เก็บค่าจริงไว้ครั้งเดียว นอกที่เก็บโค้ด เข้ารหัสด้วยคีย์เชนของระบบปฏิบัติการ แล้วอ้างอิงมันด้วยชื่อในที่อื่นทั้งหมด
  • ความลับที่ผ่านบทสนทนาไปแล้วถือว่าไหม้แล้ว เปลี่ยนมันใหม่ แล้วค่อยเก็บกวาด
  • การปิดบังค่าเป็นตาข่ายนิรภัย ไม่ใช่แผน มันจับสิ่งที่หน้าตาเหมือนคีย์ ไม่ใช่รหัสผ่านฐานข้อมูลที่อ่านแล้วเหมือนคำธรรมดา

ทำไมการวางครั้งนั้นแย่กว่าที่เห็น

สามอย่างเกิดขึ้นพร้อมกัน และมีแค่อย่างแรกที่เห็นได้ชัด

มันไปถึงผู้ให้บริการโมเดล นี่คือส่วนที่ทุกคนมองเห็น ตอนนี้คีย์ของคุณอยู่ในเนื้อหาของคำขอบนโครงสร้างพื้นฐานของคนอื่น ภายในบทสนทนาที่คุณแก้ไขไม่ได้

มันลงไปอยู่บนดิสก์ของคุณ ในรูปข้อความธรรมดา Claude Code, Codex, Antigravity CLI และตัวอื่น ๆ เก็บทรานสคริปต์ของบทสนทนาไว้เพื่อให้คุณกลับมาทำต่อได้ ไฟล์นั้นวางอยู่ในโฟลเดอร์บ้านของคุณ ไม่ถูกเข้ารหัส นานเท่าที่ CLI ยังเก็บประวัติของมันไว้ ลองค้นสตริง sk- ในทรานสคริปต์ของคุณสักครั้งแล้วดูว่าเจออะไรบ้าง

มันแพร่ออกไปด้านข้าง บทสนทนาคือความจำของเอเจนต์ ดังนั้นทุกอย่างที่คัดลอกบทสนทนาก็คัดลอกคีย์ไปด้วย : เซสชันที่ถูกเปิดต่อ เอเจนต์ที่ถูกฟอร์ก subagent ที่ถูกเปิดพร้อมบริบทของตัวแม่ สรุปที่ถูกเขียนลงไฟล์ในโปรเจกต์ เราเคยเห็นคีย์เดินทางจากข้อความในแชตไปอยู่ในคำอธิบายทิกเก็ต แล้วไปอยู่ในข้อความแรกของเอเจนต์ตัวที่สอง โดยที่ไม่มีใครทำอะไรผิดเลย

และตาข่ายนิรภัยตามปกติก็รับไม่ไหว การปิดบังค่าในเอาต์พุตทำงานด้วยรูปแบบ : sk-…, glpat-…, รูปทรงของ JWT มันไม่มีทางรู้ว่า thursday-harbour-71 คือรหัสผ่านฐานข้อมูล staging ของคุณ ในแอปของเราเอง เราปิดบังค่าที่ตรงกับรายการในเอาต์พุตของเทอร์มินัล และเราก็ยังถือว่านั่นเป็นตาข่ายใต้ห่วงกายกรรม ไม่ใช่ตัวห่วงกายกรรมเอง

กฎประตูเดียว

กฎอยู่ตรงนี้ ในบรรทัดเดียว : ข้อมูลรับรองไปถึงเอเจนต์ผ่านตัวแปรสภาพแวดล้อมของโปรเซสที่เอเจนต์ทำงานอยู่ และไม่ผ่านช่องทางอื่นใดทั้งสิ้น

ทุกอย่างที่เหลือเป็นข้อความตามตัวอักษร ข้อความที่คุณพิมพ์ คำอธิบายทิกเก็ต ไฟล์ skill, system prompt, ออปชันบนบรรทัดคำสั่ง : ทั้งหมดนั้นถูกอ่านโดยมนุษย์หรือโดยโมเดล ดังนั้นความลับที่ถูกเขียนไว้ตรงนั้นคือความลับที่ถูกเผยแพร่แล้ว

บรรทัดคำสั่งสมควรมีประโยคของตัวเอง เพราะมันให้ความรู้สึกปลอดภัยกว่าข้อความในแชต ทั้งที่ไม่ใช่ ค่าที่อยู่ใน --api-key=… มองเห็นได้จากทุกโปรเซสบนเครื่องผ่าน ps มันไปตกอยู่ในประวัติเชลล์ของคุณ มันถูกบันทึกโดยทุกอย่างที่จดคำสั่งที่ถูกเปิดขึ้นมา และมันโผล่ขึ้นมาอีกในเครื่องมือวินิจฉัยที่พิมพ์บรรทัดของโปรเซสกลับมาให้คุณดู ส่วนตัวแปรสภาพแวดล้อมของโปรเซสเดียวนั้นอ่านได้โดยโปรเซสนั้นกับ root พื้นผิวเล็กกว่า ความสะดวกเท่าเดิม

ส่วนเอเจนต์เองก็ไม่เคยต้องใช้ค่าจริงเลย มันแค่ต้องเขียนแบบนี้ :

curl -H "Authorization: Bearer $STRIPE_SECRET_KEY" https://api.stripe.com/v1/charges

เชลล์จะขยาย $STRIPE_SECRET_KEY ตอนรัน เอเจนต์เขียนตัวอักษรสิบเจ็ดตัวกับเครื่องหมายดอลลาร์หนึ่งตัว ทรานสคริปต์ของมันก็เก็บตัวอักษรสิบเจ็ดตัวกับเครื่องหมายดอลลาร์หนึ่งตัว

มันทำงานอย่างไรในแอปของเรา

กลไกสำคัญน้อยกว่ารูปทรง แต่รูปทรงจะลอกตามได้ง่ายกว่าถ้าคุณได้เห็นการนำไปใช้จริงสักตัว

ห้องนิรภัยเดียว ไฟล์เดียว AgentsRoom เก็บความลับไว้ในไฟล์เดียวในโฟลเดอร์บ้านของคุณ สิทธิ์ 0600 เข้ารหัสผ่านคีย์เชนของระบบปฏิบัติการ และยืนยันซ้ำทุกครั้งที่เขียน ไม่มีอะไรถูกซิงก์ขึ้นเซิร์ฟเวอร์ และไม่มีอะไรข้ามไปยังคอมพิวเตอร์เครื่องอื่น : ความลับเป็นของเครื่องที่ถือมันไว้ ถ้าคีย์เชนใช้งานไม่ได้ การบันทึกจะล้มเหลว แทนที่จะถอยไปเขียนเป็นข้อความธรรมดา

คุณบันทึกค่าจริงครั้งเดียว คำสั่งและการเชื่อมต่อ > ข้อมูลลับ ในโปรเจกต์ไหนก็ได้ ชื่อหนึ่งชื่อ (ตัวอักษร ตัวเลข จุด ขีด ขีดล่าง ยาว 64 ตัว เพื่อให้ใช้เป็นชื่อตัวแปรสภาพแวดล้อมได้เลย) และค่าหนึ่งค่า ที่พิมพ์ลงในช่องแบบรหัสผ่าน แถวที่ปรากฏขึ้นจะแสดงชื่อกับการอ้างอิงของมัน {{secret:STRIPE_SECRET_KEY}} และปุ่มที่คัดลอกการอ้างอิงนั้น ไม่มีปุ่มเปิดเผยค่า และไม่มีปุ่มคัดลอกค่า เพราะไม่มีเส้นทางโค้ดใดที่คืนค่าจริงกลับไปให้อินเทอร์เฟซ

คุณอ้างอิงมันตรงที่สภาพแวดล้อมถูกประกอบขึ้น แก้ไขเอเจนต์ > ขั้นสูง > ตัวแปรสภาพแวดล้อม หรือการตั้งค่าของโปรเจกต์ หรือการตั้งค่าของ provider หรือบรรทัดคำสั่งสำหรับงานพัฒนา :

STRIPE_SECRET_KEY={{secret:STRIPE_SECRET_KEY}}

ตอนเปิดใช้งาน โปรเซสหลักจะแทนค่าจริงลงในสภาพแวดล้อมของเทอร์มินัลที่มันกำลังจะสร้าง ชั้นอินเทอร์เฟซไม่เคยเห็น เอเจนต์ไม่เคยเห็น โทรศัพท์ก็ไม่เคยเห็น หน้าตัวจัดการความลับ พาคุณดูทีละหน้าจอ

เอเจนต์ค้นพบชื่อ ไม่ใช่ค่าจริง เอเจนต์ที่ต่อกับเครื่องมือ MCP ของเราเรียก secrets_list ได้ และจะได้รายการชื่อที่มีอยู่บนเครื่องนั้นกลับไป แค่นั้นก็พอให้มันมีประโยชน์แล้ว : มันพูดได้ว่า "คุณมี STRIPE_SECRET_KEY บันทึกไว้ ลองเพิ่ม STRIPE_SECRET_KEY={{secret:STRIPE_SECRET_KEY}} เข้าไปในสภาพแวดล้อมของเอเจนต์ตัวนี้ แล้วผมจะใช้ $STRIPE_SECRET_KEY" มันอ่านค่าจริงไม่ได้ แม้ในขณะที่กำลังรันคำสั่งที่ใช้ค่านั้นอยู่

สามความผิดพลาดที่เราปล่อยออกไป

กฎข้างบนฟังดูชัดเจนเมื่อเขียนออกมาแล้ว แต่มันคือแผลเป็นจากบั๊กสามตัว ทั้งหมดเกิดในเดือนกันยายน 2026 และทั้งหมดถูกแจ้งโดยผู้ใช้

การอ้างอิงที่เขียนไว้ในทิกเก็ตกลับออกมาเป็นค่าจริง

19 กันยายน Robert เขียนการจับคู่ไว้ในคำอธิบายทิกเก็ต ซึ่งก็คือ STRIPE_SECRET_KEY={{secret:STRIPE_SECRET_KEY}} ที่สมเหตุสมผลทุกประการ เพื่อให้ใครก็ตามที่หยิบทิกเก็ตนี้ไปทำรู้ว่าต้องตั้งค่าอะไร เมื่ออ่านทิกเก็ตผ่าน API ระบบคืนการอ้างอิงมาเหมือนเดิมไม่มีผิดเพี้ยน แต่เอเจนต์ที่ถูกเปิดจากทิกเก็ตนั้นกลับได้รับ ค่าจริง ในข้อความแรกของมัน

สาเหตุเป็นรายละเอียดของท่อน้ำภายในที่มีผลจริงจัง บรีฟของทิกเก็ตจะกลายเป็นพรอมต์แรกของเอเจนต์ ซึ่งเดินทางอยู่ภายในตัวแปรสภาพแวดล้อมของคำสั่งเปิดใช้งาน ตัวแก้การอ้างอิงของเราแทนค่าทุกค่าในสภาพแวดล้อม มันจึงแทนค่าในพรอมต์ไปด้วย คีย์เลยลงไปบนดิสก์และไปถึงผู้ให้บริการโมเดล ต้องเปลี่ยนคีย์ใหม่ ไม่มีทางเลี่ยง

การแก้ไขคือทำให้คำสั่งเปิดใช้งานของเอเจนต์เป็นข้อความตามตัวอักษร : เมื่อสภาพแวดล้อมมีไอดีของเอเจนต์อยู่ ตัวแปรที่ถือพรอมต์แรกจะไม่ถูกแตะต้อง ส่วนคำสั่งสำหรับงานพัฒนาที่ใช้ตัวแปรเดียวกันจะไม่มีไอดีของเอเจนต์ และยังแทนค่าเหมือนเดิม เรายอมรับผลข้างเคียงอย่างตั้งใจ : การอ้างอิงที่พิมพ์ไว้ในออปชัน CLI ของเอเจนต์ก็จะไม่ถูกแทนค่าเช่นกัน ซึ่งถูกต้องแล้ว เพราะบรรทัดคำสั่งลงเอยอยู่ใน ps และในล็อกอยู่ดี

บทเรียน : ประตูต้องแคบอย่างตั้งใจ "แทนค่าทุกที่ที่มันอาจมีประโยชน์" คือวิธีที่ทำให้ความลับไปจบลงในที่ที่มันไม่ควรอยู่เลย

การอ้างอิงที่ถูกวางลงในข้อความ ซึ่งไม่เคยถูกแทนค่า

22 กันยายน Cs040618 แจ้งปัญหาตรงกันข้าม : "ผมวางการอ้างอิงลงในบทสนทนา แล้วเอเจนต์ก็ไม่เข้าใจว่าคีย์นี้คืออะไร"

ไม่ใช่บั๊ก ข้อความเป็นข้อความตามตัวอักษรโดยการออกแบบ ซึ่งก็คือการแก้ไขจากสามวันก่อนหน้านั้นพอดี แต่ไม่มีอะไรในแอปที่บอกเรื่องนี้ในจังหวะที่ผู้ใช้ลงมือ และเอเจนต์ที่ได้รับ {{secret:…}} ในข้อความก็ไม่รู้เลยว่าจะตอบอะไร

เราแก้สามจุด ทั้งหมดเพื่อบอกว่าประตูอยู่ตรงไหน : คำแนะนำที่โผล่ขึ้นมาเมื่อคุณวางการอ้างอิงลงในช่องพิมพ์ข้อความและชี้ไปที่ตัวแปรสภาพแวดล้อม ข้อความช่วยเหลือเหนือรายการความลับที่ระบุชื่อสามช่องซึ่งการอ้างอิงจะถูกแทนค่า พร้อมบอกว่า "ไม่ใช่ในข้อความเด็ดขาด" และอีกหนึ่งบรรทัดในคำสั่งประจำตัวของเอเจนต์เอง ที่บอกมันว่าต้องตอบอะไรเมื่อมีการอ้างอิงมาถึงในข้อความ

"การตั้งค่า > ข้อมูลลับ" ไม่มีอยู่จริง

28 กันยายน เอเจนต์ของ Mohammad ส่งรายงานเข้ามา : ผู้ใช้บอกว่าเขาเพิ่ม OTPIQ_API_KEY ไว้ใน การตั้งค่า > ข้อมูลลับ บันทึกซ้ำหลายรอบตลอดสามสิบนาที แต่ secrets_list ก็ยังคืนความลับเก่าสามตัวเดิมอยู่ดี

เส้นทางการบันทึกไม่มีปัญหาเลย ความลับไม่เคยไปถึงห้องนิรภัยต่างหาก เพราะ ไม่มีหน้าความลับอยู่ในการตั้งค่า ข้อความช่วยเหลือหกจุดในแอปเดสก์ท็อป หนึ่งหน้าบนเว็บไซต์นี้ และคำสั่งประจำตัวของเอเจนต์ ต่างก็ส่งผู้คนไปยังหน้าจอที่ไม่มีอยู่จริง สิ่งที่มีอยู่จริงในการตั้งค่าคือบล็อกตัวแปรสภาพแวดล้อม เขาจึงพิมพ์โทเค็นลงไปตรงนั้น ในวงเล็บปีกกา ซึ่งไม่ใช่การอ้างอิง : ไม่เคยถูกแทนค่า ถูกส่งให้เอเจนต์ตามตัวอักษร และถูกซิงก์ไปกับโปรเจกต์ โทเค็นจึงออกจากเครื่องไปเรียบร้อย

เราแก้ข้อความให้ระบุเส้นทางจริง ทำให้เครื่องมือฝั่งเอเจนต์บอกได้ว่าความลับถูกเพิ่มที่ไหน และเพิ่มการตรวจสอบบนบล็อกสภาพแวดล้อมที่คอยเตือนเมื่อเจอข้อมูลรับรองที่ดูเหมือนค่าดิบ ชื่อในวงเล็บปีกกาที่ไม่ใช่การอ้างอิง และการอ้างอิงถึงความลับที่ไม่มีอยู่บนเครื่องนี้

บทเรียนตรงนี้ไม่เกี่ยวกับความลับเลยด้วยซ้ำ : เส้นทางที่ผิดในข้อความช่วยเหลือคือบั๊กด้านความปลอดภัย มันพาผู้ใช้ไปยังช่องที่ใกล้ที่สุดซึ่งดูเหมือนจะใช่

ถ้าคุณไม่ได้ใช้ AgentsRoom

กฎนี้เดินทางไปได้ เลือกวิธีที่เข้ากับการตั้งค่าของคุณ ทุกวิธีจบลงที่จุดเดียวกัน คือตัวแปรสภาพแวดล้อมในโปรเซสที่เอเจนต์ทำงานอยู่

  • CLI ของโปรแกรมจัดการรหัสผ่าน op run -- claude กับ 1Password หรือตัวเทียบเท่าใน Bitwarden และ Doppler : เครื่องมือจะอ่านการอ้างอิงจากเทมเพลต ฉีดค่าจริงเข้าไปในสภาพแวดล้อมของโปรเซสลูก และไม่มีอะไรถูกเขียนลงดิสก์
  • direnv กับ .envrc ที่อยู่ใน gitignore ง่าย อยู่บนเครื่อง แยกตามไดเรกทอรี เพิ่ม .envrc และ .env* ลงใน .gitignore ก่อนที่ค่าแรกจะเข้าไป ไม่ใช่หลังจากนั้น
  • ไฟล์ .env ที่เอเจนต์ไม่เคยอ่าน เก็บมันไว้นอกที่เก็บโค้ดและโหลดมันในเชลล์ที่เปิดเอเจนต์ ถ้าไฟล์อยู่ในที่เก็บโค้ด สุดท้ายเอเจนต์ก็จะเปิดมัน ยกมันมาอ้างในข้อความ และพาคุณกลับไปที่จุดเริ่มต้น
  • ข้อมูลรับรองบนคลาวด์ : ใช้แบบอายุสั้น ใช้ GitHub OIDC ใน CI แทนคีย์ AWS ที่มีอายุยาว และใช้ workload identity แทนไฟล์คีย์ของ service account

ไม่ว่าคุณจะเลือกอะไร ใส่กฎนี้ลงในคำสั่งประจำตัวของเอเจนต์ด้วย เพื่อให้มันเลิกถาม แค่ย่อหน้าเดียวใน CLAUDE.md หรือ AGENTS.md ก็พอ : ห้ามขอค่าของข้อมูลรับรอง ห้ามเขียนค่านั้นลงในไฟล์ ให้ใช้ $NAME และบอกผู้ใช้ว่าต้องตั้งตัวแปรไหน เราเผยแพร่ skill เล็ก ๆ ตัวหนึ่ง ที่พูดแบบนั้นเป๊ะ ๆ และมันยาวแค่ห้าบรรทัด

ถ้าคีย์ผ่านบทสนทนาไปแล้ว

ทำตามลำดับนี้ และขั้นแรกไม่ใช่ทางเลือก

  1. เปลี่ยนคีย์ใหม่ คุณเรียกพรอมต์กลับคืนไม่ได้ ให้ถือว่าค่านั้นถูกเปิดเผยแล้วและออกค่าใหม่ออกมา
  2. ตามหาทรานสคริปต์ CLI เก็บไฟล์บทสนทนาไว้ในโฟลเดอร์บ้านของคุณ ค้นหาค่าเก่าในนั้นแล้วลบหรือตัดส่วนที่ตรงกันทิ้ง
  3. ตรวจที่ทางที่คัดลอกข้อความ ประวัติของโปรแกรมจัดการคลิปบอร์ด ทิกเก็ตหรืออิชชูที่ใช้บรีฟเอเจนต์ สรุปทุกอันที่เอเจนต์เขียนลงในที่เก็บโค้ด และ git log -p ถ้าเอเจนต์คอมมิทระหว่างที่ถือคีย์นั้นอยู่
  4. แล้วค่อยสร้างประตู ค่าใหม่อยู่หลังตัวแปรสภาพแวดล้อม อ้างอิงด้วยชื่อ และอัปเดตคำสั่งประจำตัวของเอเจนต์เพื่อให้ตัวถัดไปไม่ต้องถาม

ขั้นที่ 4 มาท้ายสุด เพราะกลไกที่สะอาดสะอ้านรอบคีย์ที่รั่วไปแล้วก็เป็นแค่การรั่วที่จัดวางเรียบร้อยขึ้นเท่านั้น

คำถามที่คนถามกันจริง ๆ

ทำไมคีย์ API ถึงไม่ควรอยู่ในพรอมต์ที่ส่งให้เอเจนต์ AI ?

เพราะพรอมต์เป็นสิ่งที่ถูกเก็บและถูกส่งต่อ Claude Code, Codex และ CLI ตัวอื่นเขียนบทสนทนาลงในไฟล์ทรานสคริปต์บนดิสก์ของคุณ และตัวข้อความเองก็ถูกส่งไปที่ผู้ให้บริการโมเดล จากตรงนั้นคีย์ยังอยู่ในประวัติคลิปบอร์ดของคุณ อยู่ในล็อกทุกตัวที่พิมพ์ข้อความซ้ำ และอยู่ในการรันซ้ำกับ subagent ทุกตัวที่คัดลอกบทสนทนาต่อไป การปิดบังค่าแบบจับรูปแบบจะจับสิ่งที่หน้าตาเหมือน sk- หรือ glpat- ได้ แต่จับรหัสผ่านฐานข้อมูลที่อ่านแล้วเหมือนคำธรรมดาไม่ได้

เอเจนต์เขียนโค้ดใช้ความลับที่มันอ่านไม่ได้อย่างไร ?

ผ่านตัวแปรสภาพแวดล้อม คุณใส่ค่าจริงไว้ในตัวแปรสภาพแวดล้อมของโปรเซสที่เอเจนต์ทำงานอยู่ แล้วเอเจนต์เขียน $STRIPE_SECRET_KEY ลงในคำสั่งแทนค่าจริง เชลล์จะขยายมันตอนคำสั่งทำงาน เอเจนต์ไม่เคยเห็นตัวอักษรเหล่านั้น ค่าจริงจึงไม่เคยเข้าไปในบทสนทนาหรือในทรานสคริปต์ของมัน

ส่งความลับเป็นอาร์กิวเมนต์บนบรรทัดคำสั่งแทนได้ไหม ?

ได้ แต่ไม่ควรทำ บรรทัดคำสั่งมองเห็นได้จากทุกโปรเซสบนเครื่องผ่าน ps มันเข้าไปอยู่ในประวัติของเชลล์ ในล็อกของโปรเซส และในเครื่องมือวินิจฉัยทุกตัวที่อ่านคำสั่งที่ถูกเปิดขึ้นมา ส่วนตัวแปรสภาพแวดล้อมของโปรเซสเดียวนั้นอ่านได้โดยโปรเซสนั้นกับ root เท่านั้น ซึ่งเป็นพื้นผิวที่เล็กกว่ามาก

AgentsRoom เก็บความลับที่เอเจนต์ใช้ไว้ที่ไหน ?

ในไฟล์เดียวในโฟลเดอร์บ้านของคุณ สิทธิ์ 0600 เข้ารหัสผ่านคีย์เชนของระบบปฏิบัติการ และอยู่บนเครื่องนั้นเครื่องเดียว ไม่มีอะไรถูกซิงก์ขึ้นเซิร์ฟเวอร์ และไม่มีปุ่มสำหรับแสดงค่าจริงอีกครั้ง แอปแสดงชื่อ เอเจนต์เห็นชื่อ และค่าจริงจะถูกถอดรหัสในโปรเซสหลักเท่านั้น ในจังหวะที่เทอร์มินัลหรือคำสั่งเริ่มทำงาน

จะเกิดอะไรขึ้นถ้าผมวางการอ้างอิงความลับลงในข้อความถึงเอเจนต์ ?

ไม่มีอะไรถูกแทนค่า และนั่นคือความตั้งใจ ข้อความ คำอธิบายทิกเก็ต skill และ system prompt ล้วนเป็นข้อความตามตัวอักษร การอ้างอิงที่เขียนไว้ตรงนั้นจึงไปถึงเอเจนต์ในสภาพเดิม มีเพียงค่าของตัวแปรสภาพแวดล้อมเท่านั้นที่ถูกแทนค่า เราเรียนรู้เรื่องนี้จากความเจ็บปวดจริง : การอ้างอิงที่เขียนไว้ในคำอธิบายทิกเก็ตเคยออกมาเป็นค่าจริงในข้อความแรกของเอเจนต์ที่ถูกเปิดจากทิกเก็ตนั้น

คีย์ผ่านบทสนทนาไปแล้ว ต้องทำอย่างไร ?

เปลี่ยนคีย์ใหม่ก่อนเป็นอย่างแรก ก่อนทำอะไรทั้งหมด เพราะคุณเรียกพรอมต์กลับคืนไม่ได้ : มันอยู่ฝั่งผู้ให้บริการแล้ว และอยู่ในไฟล์ทรานสคริปต์บนดิสก์ของคุณ จากนั้นลบหรือตัดทรานสคริปต์ที่มีคีย์อยู่ ตรวจโปรแกรมจัดการคลิปบอร์ดของคุณ และ grep ในที่เก็บโค้ดเผื่อว่าเอเจนต์เขียนคีย์ลงไฟล์ไว้ แล้วค่อยเอาค่าใหม่ไปไว้หลังตัวแปรสภาพแวดล้อม

สรุปสั้น

เอเจนต์ไม่จำเป็นต้องอ่านคีย์ของคุณ มันต้องการโปรเซสที่สภาพแวดล้อมของมันถือคีย์นั้นอยู่แล้วต่างหาก

บันทึกค่าจริงไว้ครั้งเดียว นอกที่เก็บโค้ด เข้ารหัสโดยระบบปฏิบัติการ อ้างอิงมันด้วยชื่อตรงที่สภาพแวดล้อมถูกประกอบขึ้น ปล่อยให้เอเจนต์เขียน $NAME และเก็บช่องทางอื่นทั้งหมดให้เป็นข้อความตามตัวอักษร รวมถึงช่องทางที่การแทนค่าน่าจะสะดวกดี เพราะช่องทางที่สะดวกนั่นแหละคือช่องทางที่ถูกเก็บและถูกส่งต่อ

และเมื่อคุณพลาด ซึ่งคุณจะพลาดแน่ ๆ ให้เปลี่ยนคีย์ก่อน แล้วค่อยเก็บกวาดทีหลัง

ดาวน์โหลด AgentsRoom

รันเอเจนต์ AI ทั้งหมดของคุณในทุกโปรเจกต์ จากหน้าต่างเดียว

ฟรีดาวน์โหลด AgentsRoom

แอปคู่หู: ตรวจสอบเอเจนต์ของคุณได้ทุกที่

นำของคุณเอง: Claude, Codex, Antigravity CLI, หรือผู้ให้บริการ AI อื่น ๆ

รับส่วนขยาย
Chrome Web Store

ส่งข้อบกพร่องและคำขอไปยังแบ็คล็อกสาธารณะของคุณโดยตรง

หลายโปรเจกต์
ผู้ให้บริการหลายราย
หลาย agents
สถานะสด
ไฟล์ diff & commit
คู่หูมือถือ
ตัวอย่างสด
ทีมเอเจนต์
การทำงานอัตโนมัติในเบราว์เซอร์
การพัฒนาที่ขับเคลื่อนด้วย backlog
ห้องสมุดคำสั่ง
ห้องสมุดทักษะ
ดูฟีเจอร์ทั้งหมด

อ่านต่อ