อภิธานศัพท์
เอนทิตีหลัก
หัวข้อที่มีชื่อว่า “เอนทิตีหลัก”เอเจนต์: ผู้ปฏิบัติงาน AI ที่มีตัวตน บทบาท สกิลและอะแดปเตอร์ สังกัดเวิร์กสเปซเดียวเท่านั้น เป็นผู้กระทำหลักของระบบ
อะแดปเตอร์: ตัวรันที่เล่นหนึ่งเทิร์นของเอเจนต์ มีสองตัวที่มาพร้อมระบบ: Control Center (built-in) — ฮาร์เนสในโปรเซสที่คุยกับผู้ให้บริการโมเดล — และ Claude Code ผ่าน claude -p ส่วน Cursor, Codex, Anthropic, OpenAI และรายอื่น ๆ เป็นผู้ให้บริการบนอะแดปเตอร์ในตัว ไม่ใช่ CLI แยกต่างหาก ดูจัดการอะแดปเตอร์และโมเดล
เวิร์กสเปซ: ผู้เช่าที่ใช้แยกโดเมนระดับสูงสุด จัดกลุ่มเอเจนต์ รีโป สเปซ ตั๋วงาน หน่วยความจำ และไปป์ไลน์ การแยกโดเมนเป็นเชิงโครงสร้าง ไม่ใช่เชิงธรรมเนียม: เวิร์กสเปซแต่ละแห่งมีไฟล์ SQLite ของตัวเอง (<dataDir>/<workspaceId>/workspace.db) การอ่านข้ามเวิร์กสเปซจึงคอมไพล์ไม่ผ่าน ทุกเส้นทางในแอปมีคำนำหน้า /workspaces/:workspaceId — ดูแผนที่เส้นทาง
ฟอร์จ: โฮสต์โค้ด — GitHub, GitLab หรือ Bitbucket Cloud ฟอร์จเป็นคุณสมบัติของรีโปแต่ละตัว อ่านจาก remote origin ตอนลงทะเบียน และเป็นตัวเลือกระบุอะแดปเตอร์ API กับข้อมูลรับรองของรีโปนั้น เวิร์กสเปซเดียวเก็บรีโปจากทั้งสามแห่งได้; พื้นผิวที่รวบรวมข้อมูล (กล่องขาเข้า คิว PR) จะกระจายไปยังทุกฟอร์จที่มีและรวมผลลัพธ์เข้าด้วยกัน โดยแยกความล้มเหลวออกจากกัน ฟอร์จที่เข้าถึงไม่ได้จึงไม่ทำให้ฟอร์จอื่นว่างเปล่า ฟอร์จต่างกันที่สิ่งที่รองรับ — ดูตารางความสามารถในเชื่อมต่อโฮสต์โค้ด
รีโป: รีโพซิทอรี Git ที่ลงทะเบียนไว้ในเวิร์กสเปซเดียว ผูกกับเวิร์กสเปซ — เช็กเอาต์เดียวกันที่ลงทะเบียนในสองเวิร์กสเปซคือสองแถวอิสระที่มีสองไอดี; ตัวตนของรีโปข้ามเวิร์กสเปซยึดตามเส้นทางในระบบไฟล์ ไม่ใช่ไอดี การลงทะเบียนต้องมี work tree ของ git ที่ remote origin ชี้ไปยังฟอร์จที่รองรับ รีโปแต่ละตัวพก ฟอร์จ ของมัน (github / gitlab / bitbucket) ซึ่งเป็นตัวเลือกระบุอะแดปเตอร์ API และข้อมูลรับรองที่ใช้กับมัน
รีโปแยกโดด: worktree ที่ผูกกับเวิร์กสเปซของรีโปที่ลงทะเบียนไว้ คัดลอกเมื่อเขียนผ่าน rift ทุกที่ที่มีเนทีฟนั้นมาด้วย; git worktree บน Windows จัดเตรียม ต่อสเปซ — ทุกบทสนทนาในสเปซนั้นใช้เช็กเอาต์ชุดเดียว — เอเจนต์จึงไม่เคยแก้ไขต้นฉบับ
สเปซ: คอนเทนเนอร์สำหรับการทำงานร่วมกันที่ผูกกับเวิร์กสเปซ มีผู้เข้าร่วมที่เป็นมนุษย์และเอเจนต์ มี Mode ที่จัดเก็บถาวร สถานะการจัดเตรียม และ SpaceKind (topic / agentPeer / system / pr / slack) ที่กำหนดว่าจะแบ่งส่วน ปิดเสียง ติดป้าย และเก็บกวาดมันอย่างไร มันเป็นเจ้าของ worktree แยกโดดที่บทสนทนาของมันใช้ร่วมกัน (คัดลอกเมื่อเขียนผ่าน rift; git worktree บน Windows)
การสนทนา: สตรีมข้อความหนึ่งสายภายในสเปซ พร้อมไอดี ประวัติ และบริบทการรันเอเจนต์ของตัวเอง บทสนทนาในสเปซเท่าเทียมกันทั้งหมด — ไม่มีสตรีมหลักหรือ “หลัก” บทสนทนาแต่ละอันเปิดเป็นแท็บเอดิเตอร์ และสถานะยังไม่อ่านของสเปซจะรวมทุกอันเข้าด้วยกัน
เธรด: บทสนทนาที่ตั้งค่า anchorMessageId ไว้: ยึดกับข้อความหนึ่งของบทสนทนาพี่น้องในสเปซเดียวกัน พร้อมบริบทเอเจนต์ใหม่ที่ตั้งต้นจากข้อความยึดนั้น ลึกได้ระดับเดียว — เธรดไม่เคยยึดกับเธรด
ตั๋วงาน: แอกกรีเกตของหน่วยงาน เป็นกลางต่อผู้ให้บริการ: local โดยค่าเริ่มต้น พร้อมอะแดปเตอร์ซิงก์สำหรับ Linear, GitHub Issues, Jira Cloud และ ClickUp — แม้ว่าจะไม่มีพื้นผิวใดในแอปที่สร้างการเชื่อมต่อซิงก์ รองรับลำดับชั้น ลิงก์ และการมอบหมาย การมอบหมายให้เอเจนต์บันทึกความเป็นเจ้าของและไม่จัดส่งสิ่งใด ส่วนการมอบหมายให้ทีมเป็นข้อยกเว้น (TeamRoutingService จัดส่งหัวหน้าทีม)
ไปป์ไลน์: เวิร์กโฟลว์แบบ DAG ที่เชื่อมขั้นตอนต่าง ๆ (การสั่งงานเอเจนต์ สคริปต์ เงื่อนไข) เข้าด้วยกัน นิยามด้วยเทมเพลต และรันเป็นรัน
ออบเจกต์ค่า
หัวข้อที่มีชื่อว่า “ออบเจกต์ค่า”AgentRole: บทบาทแบบอีนัม (CEO, coder, reviewer, QA, designer, security, devops, PM, general) กำหนดเพอร์โซนา การเข้าถึงหน่วยความจำ และลำดับชั้น
AgentSkills: เซตของตัวระบุสกิลที่ไม่คำนึงถึงตัวพิมพ์เล็กใหญ่ ซึ่งฉีดบริบทที่เกี่ยวข้องเข้าไปในพรอมป์ต์ตอนสั่งงาน
แหล่งที่มาของสกิล: รีโพซิทอรี GitHub ที่ลงทะเบียนไว้ต่อเวิร์กสเปซเป็นแค็ตตาล็อกสกิล ไม่น่าเชื่อถือโดยธรรมชาติ: เมทาดาทาของรีโพซิทอรีเป็นเพียงข้อมูลสำหรับแสดง และทุกการติดตั้งต้องผ่านเกตการสแกนแบบปิดเมื่อล้มเหลว ก่อนที่เนื้อหาใดจะไปถึงดิสก์หรือพรอมป์ต์ ดูติดตั้งและจัดการสกิล
skills-lock.json: แมนิเฟสต์ต่อเวิร์กสเปซของสกิลที่ติดตั้งไว้: สำหรับแต่ละรายการ มีรีโพซิทอรีต้นทาง เส้นทางในรีโป คอมมิตที่ปักหมุดไว้ และแฮชเนื้อหาที่รวบรวมแล้ว การติดตั้ง การอัปเดต และการถอนการติดตั้งจะทำให้มันเป็นปัจจุบันอยู่เสมอ; verify_skills ตรวจสอบมันเทียบกับดิสก์
เกตเวย์การรันเอเจนต์: เอนด์พอยต์ลูปแบ็กบน cc_server ที่บังคับใช้นโยบายการกระทำภายในแซนด์บ็อกซ์ของเอเจนต์ ทุกการพุชไปยัง GitHub จากเอเจนต์ถูกส่งมาที่นี่ ตรวจกับกฎ พุชไปยังรีโมต แล้วส่งต่อด้วยโทเคนเขียนที่เอเจนต์ไม่เคยถือ คำสั่ง Bash ของ Claude Code ถูกตรวจผ่านฮุกบนเอนด์พอยต์เดียวกัน ดูแซนด์บ็อกซ์และความปลอดภัย
Mode: chat, plan, review หรือ orchestrate เก็บ ต่อสเปซ เอเจนต์ตัวเดียวจึงอยู่ต่างโหมดในต่างสเปซได้; ทุกบทสนทนาในสเปซใช้โหมดร่วมกัน เป็นตัวกั้นพรอมป์ต์ระบบ กฎการเขียนของแซนด์บ็อกซ์ และรายการเครื่องมือ MCP ที่อนุญาต ตัวเขียนข้อความเสนอเพียง chat, plan และ orchestrate; chat มีป้ายกำกับว่า “เอเจนต์”
SandboxBackend: microvm (VM ปิดล้อม — แบ็กเอนด์เดียวที่มีขอบเขตเคอร์เนล ใช้กับเทอร์มินัลแบบโต้ตอบ), native (Seatbelt บน macOS, bubblewrap บน Linux และ WSL2) หรือ none ตรวจสอบครั้งเดียวตอนบูต; native จะถูกนำมาใช้กับการสั่งงานเอเจนต์เมื่อมีให้ใช้ โดยห่อ Claude Code CLI และเครื่องมือ bash ของฮาร์เนส Windows ไม่มีแบ็กเอนด์เนทีฟ และ Linux ต้องมี bwrap กับ socat การรันบนแพลตฟอร์มเหล่านั้นจึงไม่ถูกห่อ; --sandbox off เป็นการเลือกไม่ใช้อย่างจงใจ
ริก: เครื่องใช้แล้วทิ้งที่เอเจนต์ขับเคลื่อนแบบเรียลไทม์ — เบราว์เซอร์หรือเดสก์ท็อป Linux ในเอนโคลเจอร์ โปรแกรมจำลอง Android หรือเครื่องจำลอง iOS ที่โฮสต์จัดการเอง หรือเทอร์มินัลในเอนโคลเจอร์ ดูแบบสดผ่านเลนความละเอียดเต็มของตัวเอง โดยมีการเข้าควบคุมที่บังคับใช้ฝั่งเซิร์ฟเวอร์ ผูกกับบทสนทนา เพื่อให้แท็บของมนุษย์และการเรียก browser_use / computer_use / mobile_use / ios_use ของเอเจนต์เข้าถึงเครื่องเริ่มต้นเครื่องเดียวกัน ดูริกและเอนโคลเจอร์
เอนโคลเจอร์: ขอบเขตของริกที่หนุนด้วย VM ซึ่งแข็งแกร่งกว่า — ขอบเขตเคอร์เนล ดิสก์โอเวอร์เลย์แบบใช้แล้วทิ้ง เกตเครือข่ายแบบปฏิเสธโดยค่าเริ่มต้น และโบรกเกอร์ข้อมูลรับรอง ริก Android และ iOS เป็นแบบใช้แล้วทิ้งแต่ใช้เครือข่ายที่โฮสต์จัดการ และไม่ได้อ้างว่ามีขอบเขตนี้ การขับริกใด ๆ ใช้คลาสกฎคุม enclosureControl
RunCost: ยอดรวมโทเคนและต้นทุน (โทเคนขาเข้า โทเคนขาออก ต้นทุนประมาณการเป็นเซนต์) สำหรับการรันเอเจนต์หนึ่งครั้ง
WakeReason: เหตุผลที่เอเจนต์ถูกสั่งงาน มีหกค่า: ข้อความจากผู้ใช้ การมอบหมายตั๋วงาน การสั่งงานซ้ำเพื่อกู้คืนหลังความล้มเหลว ตั๋วงานลูกรายงานว่าเสร็จ ฮาร์ตบีตติดตามผลตามกำหนดเวลา และขั้นตอนไปป์ไลน์
SandboxPort: จัดการวงจรชีวิตของแซนด์บ็อกซ์ (probe, launch, events, exec, destroy)
CredentialBrokerPort: สร้างข้อมูลรับรองที่จำกัดขอบเขตสำหรับการเปิดแซนด์บ็อกซ์ — อ่านอย่างเดียวในสภาพแวดล้อมของเอเจนต์ สิทธิ์เขียนใช้เฉพาะในเส้นทางการพุชฝั่งเซิร์ฟเวอร์ — และเพิกถอนเมื่อรื้อถอน
GitRepoInspectorPort: ดึงเมทาดาทา (เจ้าของ รีโป สาขา) จากเส้นทางรีโป Git ในเครื่อง
EmbeddingPort: สร้างเวกเตอร์การฝังตัวข้อความแบบนอร์มหนึ่งหน่วยสำหรับการค้นหาเชิงความหมาย
NotificationPort: แสดงการแจ้งเตือนเดสก์ท็อปแบบเนทีฟโดยเคารพการกั้นตามหมวดหมู่และเส้นทาง
TicketProviderPort: ขอบเขตที่ไม่ยึดติดผู้ให้บริการสำหรับเข้าถึงระบบตั๋วงาน (create, get, list, update, transition, assign)
PipelineEnginePort: เริ่มรันไปป์ไลน์จากเทมเพลต เพื่อแยกผู้เรียกออกจากเอนจินตัวจริง
บริการโดเมน
หัวข้อที่มีชื่อว่า “บริการโดเมน”AgentDispatchService: เปิดการรันเอเจนต์: จัดเตรียมรีโปแยกโดด สร้างพรอมป์ต์ สร้างบันทึกรัน และคืนสตรีมเหตุการณ์สด
TicketWorkflowService: เอนจินวงจรชีวิตตั๋วงานแบบโดเมนล้วน มีจุดคอขวดของการแก้ไขภายใต้การทำงานพร้อมกันแบบมองโลกในแง่ดี และบังคับใช้การแยกโดเมนของเวิร์กสเปซ กราฟการเปลี่ยนสถานะที่มันบังคับใช้ผูกมัดเฉพาะเอเจนต์และระบบอัตโนมัติ; การเปลี่ยนที่ผู้ใช้สั่งใน UI ส่ง force: true และข้ามมันไป ไม่มีตัวจัดส่งตั๋วงานสำหรับผู้รับมอบหมายที่เป็นเอเจนต์ — AgentDispatchService เป็นเจ้าของการสั่งงาน และการมอบหมายตั๋วงานให้เอเจนต์ไม่เริ่มการรันใด ๆ การมอบหมายตั๋วงานให้ทีมเป็นข้อยกเว้น (TeamRoutingService จัดส่งหัวหน้าทีม)
PipelineEngine: ประสานการรัน: เริ่มรัน จัดตารางขั้นตอน เก็บสถานะถาวร จัดการเราเตอร์/จุดรวม/ทำงานต่อเมื่อล้มเหลว และรันที่ค้างอยู่กลับมาทำต่อหลังรีสตาร์ต
PipelineTriggerDispatcher: สมัครรับเหตุการณ์โดเมนและเริ่มรันไปป์ไลน์ที่ตรงกันโดยอัตโนมัติสำหรับทริกเกอร์ที่เปิดใช้
MemoryAccessPolicy: แปลงค่าและบังคับใช้สิทธิ์หน่วยความจำตามบทบาทเอเจนต์บนโดเมน
HarnessCostCalculator: คำนวณราคาการใช้โทเคนของฮาร์เนสในตัวออกเป็น RunCost จากแค็ตตาล็อก models.dev การสั่งงานบันทึกยอดนั้นลงบนบันทึกรัน
BudgetEnforcementService: คำนวณค่าใช้จ่ายรายเดือนต่อเอเจนต์และตัวบล็อกก่อนการสั่งงาน (checkInvocationBlock) ตัวบล็อกนั้นมีเพียงตัวกระทบยอดเพื่อกู้คืน (OrphanRunReaper, StrandedTicketReconciler) เท่านั้นที่ปรึกษา ไม่เคยใช้กับการสั่งงานของผู้ใช้หรือเอเจนต์ตามปกติ
BudgetGovernanceService: ประเมินค่าใช้จ่ายรายเดือนต่อเอเจนต์หลังการรันแต่ละครั้ง — การข้ามเกณฑ์อ่อนบันทึกอุบัติการณ์ระดับคำเตือน; การใช้จนหมดบันทึกอุบัติการณ์ระดับรุนแรงและพลิกวงจรชีวิตของเอเจนต์เป็น paused
เหตุการณ์
หัวข้อที่มีชื่อว่า “เหตุการณ์”DomainEventBus: บัสเผยแพร่/สมัครรับแบบกระจายภายในโปรเซสสำหรับการสื่อสารข้ามฟีเจอร์ เหตุการณ์มีชนิดข้อมูลชัดเจน; ผู้สมัครรับบริโภคสตรีม on<T>()
DomainEvent: อินเทอร์เฟซฐาน ทุกเหตุการณ์มี occurredAt หมวดหมู่สำคัญ: เวิร์กสเปซ/เอเจนต์, PR/รีวิว, การส่งข้อความ, ตั๋วงาน, ไปป์ไลน์, การประชุม/ปฏิทิน, ตัวตน, ริก, การสังเกตการณ์
การประชุมและปฏิทิน
หัวข้อที่มีชื่อว่า “การประชุมและปฏิทิน”การประชุม: เซสชันการประชุมที่บันทึกและถอดเสียงไว้ในเครื่อง เก็บเสียงไมโครโฟนและเสียงระบบ ถอดเสียงบนอุปกรณ์ด้วยโมเดล ASR ที่เลือกได้ (ค่าเริ่มต้นคือ Parakeet TDT v3; Parakeet TDT v2, Whisper large-v3-turbo และ Whisper base.en เป็นทางเลือกอื่น) แยกผู้พูด และสรุปเป็นโน้ต รายการดำเนินการ และการตัดสินใจ โมเดล ASR ที่เลือกจะถูกบังคับติดตั้งตอนบูต และงานบันทึกจะพร้อมใช้หลังรีสตาร์ตหนึ่งครั้ง ผูกกับเวิร์กสเปซ; อยู่ในเครื่องเท่านั้น
MeetingSegment: ช่วงเสียงที่ถอดเสียงแล้วหนึ่งช่วง ติดแท็กผู้พูด (me/them) พร้อมป้ายการแยกผู้พูดและออฟเซตระดับมิลลิวินาที
MeetingActionItem / MeetingDecision: เอาต์พุตเชิงโครงสร้างที่สกัดโดยไปป์ไลน์สรุปและเก็บเป็นแถวแยกกัน รายการดำเนินการเชื่อมกับตั๋วงานได้
CalendarEvent: รายการ Google Calendar ที่ซิงก์แล้ว ผูกกับเวิร์กสเปซและบัญชีที่เชื่อมไว้ ต่างจากการประชุม: เหตุการณ์คือนัดหมายที่จัดตารางไว้; การประชุมคือเซสชันที่บันทึกไว้ เชื่อมกันแบบหนึ่งต่อหนึ่งผ่าน MeetingCalendarLink
CalendarAccount: บัญชี Google ที่เชื่อมไว้ แยกตามเวิร์กสเปซและอีเมล โทเคนรีเฟรช OAuth ถูกเก็บฝั่งเซิร์ฟเวอร์เป็นคีย์ google_* ใน <dataDir>/secrets.json และไม่เคยไปถึงไคลเอนต์; ขั้นตอน device code เสร็จสิ้นบนเซิร์ฟเวอร์ แฟล็ก authExpiredAt เป็นตัวขับแบนเนอร์ให้เชื่อมต่อใหม่
คำศัพท์ด้านสถาปัตยกรรม
หัวข้อที่มีชื่อว่า “คำศัพท์ด้านสถาปัตยกรรม”สถาปัตยกรรมแบบคลีน: กฎการพึ่งพา: Presentation → Application/Providers → Domain ← Infrastructure โดเมนไม่มีการนำเข้าจากโครงสร้างพื้นฐานเลย
พอร์ตและอะแดปเตอร์: โดเมนนิยามอินเทอร์เฟซแบบนามธรรม (พอร์ต); โครงสร้างพื้นฐานให้อิมพลีเมนเตชันจริง (อะแดปเตอร์) รากการประกอบเป็นตัวผูกเข้าด้วยกัน
เคอร์เนลที่ใช้ร่วมกัน: เอนทิตี ออบเจกต์ค่า พอร์ต และบริการใน core/domain/ ที่ใช้ร่วมกันตั้งแต่ 3 ฟีเจอร์ขึ้นไป
ยึดฟีเจอร์เป็นหลัก: โค้ดจัดโครงสร้างตามโดเมนธุรกิจ (เอเจนต์ ไปป์ไลน์ การส่งข้อความ) ไม่ใช่ตามชั้นเทคนิค
การทำงานร่วมกันแบบหลายคน ตัวตน และความเร็ว
หัวข้อที่มีชื่อว่า “การทำงานร่วมกันแบบหลายคน ตัวตน และความเร็ว”Principal: ค่าที่ปิดผนึกซึ่งรวมมนุษย์และเอเจนต์เป็นนามธรรมของผู้กระทำเดียว — UserPrincipal(userId) หรือ AgentPrincipal(agentId) ทุกข้อความ ตั๋วงาน รีวิว แผน และบันทึกรันระบุที่มาผ่าน Principal
ผู้ใช้: ตัวตนของมนุษย์ เก็บใน global.db จึงเป็นส่วนกลางข้ามเวิร์กสเปซ ผู้กระทำที่สร้างเวิร์กสเปซกลายเป็นเจ้าของเวิร์กสเปซนั้น — ประทับบน Workspace.ownerUserId พร้อมแถวสมาชิกภาพบทบาทเจ้าของในการดำเนินการเดียวกัน คนอื่นเข้าร่วมด้วยคำเชิญหรือ SSO
WorkspaceMember / WorkspaceRole: แถวสมาชิกภาพที่ผูกผู้ใช้เข้ากับเวิร์กสเปซที่บทบาทหนึ่ง (owner / admin / member / viewer / guest) สมาชิกภาพ — ไม่ใช่คีย์จับคู่ — คือขอบเขตการเข้าถึง สิทธิ์รายรีโปช่วยไม่ให้สมาชิกภาพให้สิทธิ์เกินกว่าโฮสต์โค้ด
ParticipantPresence: สถานะรับรู้ชั่วคราวสำหรับ Principal หนึ่งราย (สถานะ ตำแหน่ง เคอร์เซอร์ การพิมพ์ สถานะสดของเอเจนต์และต้นทุนที่กำลังรัน) ไม่ถูกเก็บถาวรเลย; รวมศูนย์ที่เซิร์ฟเวอร์; กรองตามสิทธิ์รายรีโปก่อนกระจาย
โหมดติดตาม: คลิกอวตารเพื่อตามมุมมองของมันไปจนกว่าคุณจะลงมือ แล้วจึงแยกออก ใช้ได้ทั้งกับมนุษย์และกับเอเจนต์ (“ดูเอเจนต์ทำงาน”)
ปุ่มปรับความเป็นอิสระ: ตัวควบคุมต่อสเปซต่อเอเจนต์ — propose-only / act-with-approval / act-freely — ที่ทำเป็นโปรไฟล์มีชื่อบนที่เก็บกฎคุมการกระทำ
ActionClass: ชุดปิดของคลาสเอฟเฟกต์ 13 คลาส (fileDelete, gitPush, prCreate, networkEgress, processSpawn, enclosureControl, …) เครื่องมือที่เปลี่ยนแปลงทุกตัวประกาศคลาสของมัน; เอนจินกฎคุมแปลงค่าเป็น allow / prompt / deny ต่อขอบเขต (space > agent > workspace > mode preset > built-in default)
WriteLedger / คีย์ idempotency: ทุกการเปลี่ยนแปลงพกคีย์ idempotency ที่ไคลเอนต์สร้างขึ้น (UUIDv7 ต่อการกระทำเชิงตรรกะ) บัญชีแยกประเภทที่ผูกกับเวิร์กสเปซตัดรายการซ้ำก่อนที่ตัวจัดการจะรัน; การเล่นซ้ำจะคืนผลลัพธ์เดิมแบบไบต์ต่อไบต์ ทำให้การเชื่อมต่อใหม่และหลายไคลเอนต์ปลอดภัยโดยธรรมชาติ
กล่องขาเข้า “Needs me”: คิวที่พาดผ่านทุกเสาหลักด้วยกฎเข้มงวด — รายการจะปรากฏก็ต่อเมื่อมัน ปิดกั้น อะไรบางอย่าง (เอเจนต์ การรวมโค้ด การซิงก์) หรือขอผู้ปฏิบัติงานอย่างชัดเจน
Plan Studio: พื้นผิวการวางแผนแบบโต้ตอบ — แผน DAG แบบมีชนิดข้อมูลที่แก้ไขได้ พร้อมต้นทุน เวลา และความเสี่ยงต่อขั้นตอน และการอนุมัติบางส่วน
การคำนวณรีวิว: การคำนวณรีวิว PR ฝั่งเซิร์ฟเวอร์ (cohort ที่ได้จากกราฟ แผนภาพแบบมีชนิดข้อมูล diff ภาพ diff สัญญา API เกตหลายแกน) ให้บริการผ่าน review_studio.* และพับเข้าเป็นคำตัดสินของแท็บรีวิว
สเปซรีวิว: สเปซ backing เพียงหนึ่งเดียวของ PR (โหมด review ชนิด pr) ที่ถูกสร้างแบบ idempotent และเชื่อมกับ PR ด้วย ReviewSpaceAssociation รีวิวเวอร์ทุกคนยื่นข้อค้นพบที่นี่ ซึ่งเป็นสิ่งที่ทำให้ข้อค้นพบเทียบกันได้; worktree แยกโดดของมันมี PR เช็กเอาต์ไว้ที่ head ของมัน
โหนดรีวิว: หน่วยเชิงโครงสร้างของข้อค้นพบจากการรีวิวด้วย AI: ชนิด (bug, suggestion, recommendation, question, ticket), ลำดับความสำคัญ P0–P3, ชุดคัดแยกสามค่าอย่างหมวดหมู่/ความรุนแรง/ความพยายาม, จุดยึดไฟล์และบรรทัด, วิธีแก้ไขที่แนะนำแบบไม่บังคับ และคะแนนความมั่นใจ ยื่นด้วย add_review_node; คำตัดสินคำนวณจากโหนด ไม่ใช่จากข้อความร้อยเรียง
พร้อมฉันทามติ: สถานะของโหนดรีวิวที่จะไปถึงได้ก็ต่อเมื่อรีวิวเวอร์เพื่อนร่วมงานยืนยันข้อค้นพบ — เอเจนต์ยืนยันข้อค้นพบของตัวเองไม่ได้ ปุ่ม เผยแพร่ไปยัง GitHub บนแท็บรีวิวส่งข้อค้นพบที่ยังเปิดอยู่ทั้งหมดที่เหลือ (selection: all_open); เครื่องมือ MCP publish_review_to_github ยังคงมีค่าเริ่มต้นเป็นเฉพาะข้อค้นพบที่เพื่อนยืนยันแล้ว
ระดับรีวิว: นโยบายของเวิร์กสเปซ (light, balanced, thorough) ที่กำหนดว่ารีวิวเวอร์ตัวใดกระจายออกไป (เฉพาะวิศวกร; +qa+architect; +security+perf) และข้อค้นพบที่ต่ำกว่าเกณฑ์แสดงที่ใด ไม่เคยลบข้อค้นพบ
แกนรีวิว: หนึ่งในห้าเลนให้คะแนนต่อการรีวิว: correctness, security และ testGap มาจากข้อค้นพบของรีวิวเวอร์; visual และ apiContract กำหนดแน่นอน แกนที่มีเกตจะพับเข้าคำตัดสินและทำได้เพียงทำให้รุนแรงขึ้น — เกตที่ partial หรือ unavailable จะยึดคำตัดสินไว้แทนที่จะปล่อยผ่าน
คำตัดสินรีวิว: ship, hold หรือ block ข้อค้นพบ P0 ใด ๆ ที่ความมั่นใจ ≥ 0.7 ให้ block; P0 อื่นใดหรือ P1 ใด ๆ ให้ hold; ไม่เช่นนั้นคือ ship แกนที่มีเกตและล้มเหลวบังคับให้ block และข้อค้นพบลงมติชนะมันไม่ได้
ฟลีตและการประเมิน
หัวข้อที่มีชื่อว่า “ฟลีตและการประเมิน”cc_worker: ไบนารีตัวรันงานฟลีตแบบไม่มีส่วนติดต่อที่เขียนด้วย Dart ล้วน จับคู่กับ cc_server ประกาศความสามารถของโฮสต์ตัวเอง ดึงงานที่เช่าไป รันมัน และสตรีมเหตุการณ์ของโปรเซสกลับ ไม่ถือสถานะถาวรใดเลย — เซิร์ฟเวอร์ผู้ตัดสินหนึ่งตัว แขนขาโง่ ๆ N แขน
JobSpec: สเปกแบบมีชนิดข้อมูลของทุกสิ่งที่เป็นงานรันได้ (การรันเอเจนต์ ขั้นตอนไปป์ไลน์ ดัชนีโค้ด golden-render เบนช์มาร์ก ชุดการประเมิน)
ชุดการประเมิน: นิยามการประเมินที่ผูกกับเวิร์กสเปซ (พรอมป์ต์ เอเจนต์เป้าหมายและโหมด ตัวให้คะแนน) มีห้าชุดเริ่มต้นถูกสร้างเมื่อสร้างเวิร์กสเปซ; การสังเกตการณ์ → คุณภาพ แสดงรายการเหล่านี้
การปรับใช้และไคลเอนต์
หัวข้อที่มีชื่อว่า “การปรับใช้และไคลเอนต์”สถาปัตยกรรมไคลเอนต์แบบบาง: ไม่มีไคลเอนต์ใดเปิดฐานข้อมูล; โพรเซส cc_server แบบไม่มีส่วนติดต่อเป็นเจ้าของข้อมูลและให้บริการผ่าน WebSocket RPC ไคลเอนต์ทุกตัว (เดสก์ท็อป เว็บ โทรศัพท์) เป็นตัวแสดงผลบนการเชื่อมต่อ RPC เดียวกันนั้น
cc_server: ไบนารีเซิร์ฟเวอร์แบบไม่มีส่วนติดต่อ (Dart ล้วน ไม่มีเอนจิน Flutter) เป็นเจ้าของฐานข้อมูล Drift/SQLite ให้บริการ repo-RPC ผ่าน WebSocket และรันบริการเบื้องหลัง (ไปป์ไลน์, MCP, ตัวกระทบยอด)
ServerConnectionMode: วิธีที่เดสก์ท็อปเข้าถึงเซิร์ฟเวอร์ของตัวเอง — local (สปอว์น cc_server บนเครื่องนี้ เป็นค่าเริ่มต้น) หรือ remote (ต่อกับตัวที่อยู่ที่อื่น) ไคลเอนต์เว็บเป็น remote เสมอ
RemoteRpcClient: ไคลเอนต์ JSON-RPC ที่ไม่ยึดติดทรานสปอร์ต ซึ่งไคลเอนต์แบบบางทุกตัวใช้คุยกับเซิร์ฟเวอร์ — ผ่าน WSS ลูปแบ็ก หรือรีเลย์ที่โบรกเกอร์ไว้
การกำหนดขอบเขตเวิร์กสเปซต่อการเรียก: เซิร์ฟเวอร์ไร้สถานะ — ไม่มีการผูกเวิร์กสเปซต่อเซสชัน ไคลเอนต์หลายตัวบนเซิร์ฟเวอร์เดียวจึงไม่เคยใช้ “เวิร์กสเปซปัจจุบัน” ร่วมกัน ทุก repo/call และ sub/subscribe ที่ผูกกับเวิร์กสเปซต้องพก workspace_id มาในอาร์กิวเมนต์; ไอดีที่หายไปหรือไม่ได้ลงทะเบียนจะถูกปฏิเสธก่อนที่ฐานข้อมูลใดจะเปิด การเข้าถึงจึงถูกกั้นด้วยสมาชิกภาพและบทบาทในเวิร์กสเปซ ไม่ใช่ด้วยเซสชัน
cc_remote: ไคลเอนต์แบบบางบนโทรศัพท์ — PWA เว็บ Flutter ที่ควบคุมฟลีตจากระยะไกลผ่านรีเลย์ที่โบรกเกอร์ไว้ ด้วยนโยบายเครื่องมือแบบปฏิเสธโดยค่าเริ่มต้น
cc_signaling_server: โบรกเกอร์รีเลย์ WebSocket ไร้สถานะที่โฮสต์ห้องที่ต้องมีคำเชิญ — รีเลย์โง่ ๆ ที่ส่งต่อเฉพาะเฟรมที่ปิดผนึกแบบต้นทางถึงปลายทาง ไม่เก็บข้อมูลแอปใดเลย และไม่เคยเห็น PSK สำหรับจับคู่