diff --git a/README.md b/README.md
index 94a8f95..53ebc4d 100644
--- a/README.md
+++ b/README.md
@@ -91,9 +91,10 @@ AI 要傳檔案給你:寫進工作目錄的 `.tgbot-outbox/`,bot 回覆後自動
4. **工作目錄**:按「📂 瀏覽…」會在這台機器桌面跳出原生資料夾視窗,選完自動帶入
5. **模型 / 推理強度**:下拉選單,預設值自動帶你機器上該引擎的全域設定;換模型時強度選項會連動
6. **會話模式**:各聊天室獨立 / 所有聊天室共用 / 每則訊息獨立(不保留記憶,最快)
-7. **可讀寫成員**(選填):填 Telegram username(逗號分隔),清單外的人一律以 read-only 沙盒執行,由 CLI 層硬擋;留空 = 所有人都依沙盒設定
-8. **回覆規範**(選填):每則訊息開頭附加的規則,例如「只回答本專案相關問題」「@xxx 是後端工程師,回覆用 API 契約視角」;專案本身的規範仍放工作目錄的 `AGENTS.md` / `CLAUDE.md`
-9. 勾「建立後立即啟動」→ 儲存,bot 就上線了
+7. **額外選項**(打勾才展開;取消打勾儲存會清空):
+ - **可讀寫成員**:填 Telegram username(逗號分隔),清單外的人一律以 read-only 沙盒執行,由 CLI 層硬擋;留空 = 所有人都依沙盒設定
+ - **回覆規範**:每則訊息開頭附加的規則,例如「只回答本專案相關問題」「@xxx 是後端工程師,回覆用 API 契約視角」;專案本身的規範仍放工作目錄的 `AGENTS.md` / `CLAUDE.md`
+8. 勾「建立後立即啟動」→ 儲存,bot 就上線了

diff --git a/docs/02-create.png b/docs/02-create.png
index 240ae34..9f67f76 100644
Binary files a/docs/02-create.png and b/docs/02-create.png differ
diff --git a/docs/05-edit-claude.png b/docs/05-edit-claude.png
index ccc8c78..db1e2a4 100644
Binary files a/docs/05-edit-claude.png and b/docs/05-edit-claude.png differ
diff --git a/src/web/public/index.html b/src/web/public/index.html
index 57a7eea..c510bbe 100644
--- a/src/web/public/index.html
+++ b/src/web/public/index.html
@@ -255,14 +255,20 @@
workspace-write 沙盒預設禁網;要呼叫外部 API(例如生圖服務)才需要打開。目前只有 Codex 引擎有此選項
-
-
-
有填時,清單外的人一律以 read-only 沙盒執行(只能查詢、不能改檔或跑指令),由 CLI 層硬擋
+
+
打勾才會設定;取消打勾儲存時會清空這兩項
-
-
-
-
選填。適合放「專案守門」「成員身分」這類每輪都要提醒的規則;專案本身的規範請放工作目錄的 AGENTS.md / CLAUDE.md
+
@@ -365,6 +371,12 @@ const ENGINE_UI = {
},
};
function currentEngine() { return document.getElementById('f-engine').value || 'codex'; }
+// 額外選項(可讀寫成員、回覆規範):打勾才顯示;沒打勾儲存時兩項清空
+function toggleExtra(on) {
+ const cb = document.getElementById('f-extra');
+ if (on !== undefined) cb.checked = !!on;
+ document.getElementById('f-extra-fields').style.display = cb.checked ? '' : 'none';
+}
function engineData() { return enginesCache[currentEngine()] || { models: [], defaults: {} }; }
function engineTag(engine) {
const e = engine === 'claude' ? 'claude' : 'codex';
@@ -549,6 +561,7 @@ function openCreate() {
document.getElementById('f-network').checked = false;
document.getElementById('f-writeusers').value = '';
document.getElementById('f-rules').value = '';
+ toggleExtra(false);
document.getElementById('f-timeout').value = '30';
document.getElementById('f-autostart-wrap').style.display = '';
document.getElementById('f-autostart').checked = true;
@@ -575,6 +588,7 @@ function openEdit(name) {
document.getElementById('f-network').checked = !!b.networkAccess;
document.getElementById('f-writeusers').value = (b.writeUsers || []).join(', ');
document.getElementById('f-rules').value = b.promptRules || '';
+ toggleExtra(!!((b.writeUsers && b.writeUsers.length) || b.promptRules));
document.getElementById('f-timeout').value = b.timeoutMinutes || 30;
document.getElementById('f-autostart-wrap').style.display = 'none';
document.getElementById('bot-modal').classList.add('show');
@@ -598,8 +612,8 @@ async function saveBot() {
reasoningEffort: document.getElementById('f-effort').value,
sessionMode: document.getElementById('f-session').value,
networkAccess: document.getElementById('f-network').checked,
- writeUsers: document.getElementById('f-writeusers').value,
- promptRules: document.getElementById('f-rules').value,
+ writeUsers: document.getElementById('f-extra').checked ? document.getElementById('f-writeusers').value : '',
+ promptRules: document.getElementById('f-extra').checked ? document.getElementById('f-rules').value : '',
timeoutMinutes: document.getElementById('f-timeout').value,
};
try {