การตั้งค่า CLI (config.json)
ทุกฟิลด์ของ config.json กำหนดวิธีการทำงานของ openspec CLI บนเครื่องของคุณ
ตำแหน่งที่ตั้ง
CLI จะเก็บการตั้งค่าระดับเครื่องที่ ~/.config/openspec/config.json บน macOS และ Linux และ %APPDATA%\openspec\config.json บน Windows หาก $XDG_CONFIG_HOME ถูกตั้งค่าไว้ จะมีผลบังคับใช้บนทุกแพลตฟอร์ม คำสั่ง openspec config จะอ่านและแก้ไขไฟล์นี้
ฟิลด์
| คีย์ | ประเภท | จำเป็น | ผล |
|---|---|---|---|
profile | string: core หรือ custom | ไม่จำเป็น | เลือกชุดการทำงานที่ openspec init ติดตั้ง |
delivery | string: both, skills, หรือ commands | ไม่จำเป็น | กำหนดว่า init จะติดตั้งทักษะ, คำสั่งทับ, หรือ ทั้งสองอย่าง |
workflows | list of strings | ไม่จำเป็น | รายการการทำงานที่โปรไฟล์ custom จะติดตั้ง |
featureFlags | map: flag → boolean | ไม่จำเป็น | สวิตช์เปิดปิดคุณสมบัติที่เป็นบูลีน |
defaultStore | string | ไม่จำเป็น | ร้านค้าสำรองระดับเครื่องสำหรับการระบุราก |
openers | map: tool id → settings | ไม่จำเป็น | ชุดเครื่องมือที่เปิดอยู่ และวิธีการเรียกใช้งานแต่ละรายการ |
telemetry | map | ไม่จำเป็น | การยกเลิกการส่งข้อมูล, id ไม่ระบุตัวตน, และสถานะการเห็นการแจ้งเตือน |
profile
ชุดการทำงานที่ openspec init ติดตั้ง ค่าดีฟอลต์คือ core: เสนอ, สำรวจ, ใช้, อัปเดต, ซิงค์, และ เก็บถาวร การตั้งค่า custom จะติดตั้งรายการการทำงาน workflows แทน
delivery
กำหนดว่า init จะติดตั้งการทำงานในรูปแบบทักษะ, คำสั่งทับ, หรือ ทั้งสองอย่าง ค่าดีฟอลต์คือ both
workflows
การทำงานที่โปรไฟล์ custom จะติดตั้ง; ถูกละเว้นเมื่อโปรไฟล์เป็น core id ที่ถูกต้อง: propose, explore, new, continue, apply, update, ff, sync, archive, bulk-archive, verify, onboard
featureFlags
สวิตช์เปิดปิดที่เป็นบูลีน โดยคีย์ตามชื่อสวิตช์ ตั้งค่าด้วย openspec config set featureFlags.<flag> true ไม่มีสวิตช์ใดที่ถูกอ่านโดย CLI ในปัจจุบัน
defaultStore
id ร้านค้าสำรองระดับเครื่องสำหรับการระบุราก, ถูกใช้เฉพาะเมื่อไม่มีการระบุ --store, openspec/ ในพื้นที่, หรือ pointer store: ของโปรเจกต์ ขั้นตอนแบบเต็มคือ Root resolution
openers
เครื่องมือที่ชุดเครื่องมือสามารถเปิดได้, โดยคีย์ตาม id ของเครื่องมือ แก้ไข openers ใน config.json ระดับโลกด้วย openspec config edit ใน terminal ของคุณ
| ฟิลด์ | สัญญา |
|---|---|
style | workspace-file หรือ attach-dirs. จำเป็นสำหรับการใช้เครื่องมือใหม่; ไม่จำเป็นสำหรับ เครื่องมือที่มีอยู่ |
label | สตริงที่ไม่ว่างเปล่าแสดงในตัวเลือกเครื่องมือ ค่าดีฟอลต์คือ id สำหรับเครื่องมือใหม่ |
command | ชื่อหรือพาธที่สามารถดำเนินการได้ ไม่ว่างเปล่า ค่าดีฟอลต์คือ id สำหรับเครื่องมือใหม่ ใส่อาร์กิวเมนต์ใน args, ไม่ใช่ในสตริงนี้ |
args | อาร์เรย์ของสตริงที่ส่งก่อนสปาเซเวิร์กไฟล์หรือแฟล็กแนบ ค่าดีฟอลต์คือ [] สำหรับเครื่องมือใหม่ |
attach_flag | สตริงที่ไม่ว่างเปล่าที่จับคู่กับแต่ละเส้นทางใน attach-dirs. ค่าดีฟอลต์คือ --add-dir สำหรับเครื่องมือใหม่ ถูกละเว้นสำหรับ workspace-file |
Built-in overrides: code, cursor, claude, และ codex จะเก็บฟิลด์ที่คุณไม่กำหนดไว้ การตั้งค่า args จะเปลี่ยนรายการอาร์กิวเมนต์ทั้งหมด; [] จะล้างมัน
สไตล์การเปิด: workspace-file จะส่งพาธ .code-workspace ที่สร้างขึ้นไปยังโปรแกรมที่ดำเนินการ attach-dirs จะส่งคู่แฟล็ก/เส้นทางหนึ่งต่อหนึ่ง, รวมถึงเส้นทางหลัก
ความพร้อมใช้งาน: openers ของ attach-dirs, รวมถึง Claude Code และ Codex, จะถูกปิดใช้งานโดยค่าเริ่มต้น คุณไม่สามารถเลือกหรือบันทึกมันได้ด้วย --tool, และ OpenSpec จะปฏิเสธที่จะเปิดชุดเครื่องมือที่ระบุหนึ่งไว้แล้ว การกำหนดค่า override จะไม่ทำให้สไตล์การเปิด attach-dirs เปิดใช้งาน
การตรวจสอบ: ฟิลด์ที่ไม่รู้จัก, ประเภทที่ไม่ถูกต้อง, และเครื่องมือใหม่โดยไม่มี style จะล้มเหลวเมื่อคำสั่งชุดเครื่องมืออ่านโต๊ะเครื่องมือ
ตัวอย่างนี้เพิ่ม VS Code Insiders และส่ง --new-window เมื่อ openers VS Code ที่มีอยู่ใช้งาน:
{
"openers": {
"code-insiders": {
"style": "workspace-file",
"label": "VS Code Insiders"
},
"code": {
"args": ["--new-window"]
}
}
}โปรแกรมที่ดำเนินการ code-insiders หรือ code ที่สอดคล้องกันจะต้องติดตั้งและพร้อมใช้งานบน PATH
telemetry
CLI จะเก็บ id ไม่ระบุตัวตนของคุณและว่าการแจ้งเตือนครั้งแรกถูกแสดงหรือไม่ ตั้งค่า telemetry.enabled เป็น false เพื่อปิดการส่งข้อมูล คุณยังสามารถยกเลิกได้ด้วย OPENSPEC_TELEMETRY=0 หรือ DO_NOT_TRACK=1 ในสภาพแวดล้อมของคุณ
ตัวอย่าง
config.json ที่เติมข้อมูล:
{
"profile": "core",
"delivery": "both",
"featureFlags": {},
"telemetry": {
"anonymousId": "5f8a2c1e-4b6d-4f9a-9c3d-7e1b2a8d4c6f",
"noticeSeen": true
}
}