Skip to content

Repository files navigation

ZackLLMGUI

Ollama 的網頁前端,單一 HTML 檔 —— 不需要建置、不需要 Node.js、不吃任何 CDN。

它不只是聊天介面:接上工作區之後,模型會自己讀檔、寫檔、建環境、跑測試, 全程在你自己的機器上,可以關進沙盒,每一次改檔案都留得住還原點。

主畫面

30 秒開始

python serve.py --ollama http://192.168.1.20:11434

Python 3.8+,只用標準函式庫,不用 pip install 任何東西。瀏覽器會自己打開。

想直接按兩下 zackllmgui.html 也可以,只是 Ollama 那台要設 OLLAMA_ORIGINS, 而且解析 PDF / Word 與本機工具用不了。兩種方式的差別見使用手冊

平台支援狀態

Linux 與 Windows 11 都已實機驗證;macOS 路徑已實作但尚未實機驗證:

狀態
Linux ✅ 實測。工具、沙盒(bubblewrap)、C/C++ 那四條回饋線、python -m sandbox 全部跑過
Windows 11 ✅ 實測。本機工具、cmd 程序管理、CPU/RAM/NVIDIA GPU 資訊、Docker Desktop 沙盒與容器 GPU 全部跑過。MSVC/MinGW 的實際編譯還沒跑過(那台沒有 C++ 工具鏈)
macOS 🛠️ 寫好了沒驗。seatbelt 後端走系統內建的 sandbox-exec
C# 🛠️ 三條回饋線寫好了,但沒有 .NET 的機器跑過。符號抽取拿手寫的 .cs 驗過,dotnet test 那條是用假的 dotnet 驗的

會踩到平台差異的是本機工具那一塊:沙盒挑哪個後端、run_shell 走哪個 shell、 編譯器怎麼呼叫、危險指令怎麼寫。純聊天(不開工作區、不開工具)跑得動 Python 就行。

每個平台各走各的,不互相影響。 危險指令的規則、程序樹怎麼收、CPU/RAM 從哪裡讀、 compile_commands.json 怎麼拆,都是照這台的作業系統挑一套,不是兩套疊著跑 —— 所以 Windows 的 del /s 規則不會在 Linux 上把 python3 -c "del cache[k]" 判成危險。

沒驗過的那幾條刻意寫成失敗就退回沒有,不會退回亂報:認不出來的編譯器直接 跳過語法檢查,挑不出沙盒後端就告訴你這台該裝什麼,缺工具鏈就跳出來問你。 到那台機器上先跑一次 python -m sandbox —— 它會實際執行一遍逐項驗證, 不是讀設定檔猜的。要幫忙補驗的話, tech.md 有一份逐條的清單

功能一覽

思考模式 控制項依模型能力自動變形:gpt-oss 給四段、qwen3 給開關、沒有的整組停用並完全不送 think 欄位
本機工具 讀檔、寫檔、列目錄、搜尋、run_shellrun_testssetup_env、git、連網瀏覽、看圖
它看得到瀏覽器的錯 頁面丟出的 JS 例外、沒接住的 promise、console.error 會送回 serve.py,模型用 read_console 讀。改壞前端最常見的樣子是「頁面照樣載入、某顆按鈕不動」——那種錯原本只留在 F12 裡。讀完就清空,所以重新整理再讀一次,還有東西就是沒修好
改前端不必手動重整 frontend/ 一改,頁面自己重新整理(serve.py 沒變就不重啟,重啟會殺掉正在跑的工具)。改 → 重載 → 壞了就回報 → 模型讀得到,這一圈自己會轉
它看得到圖 view_image 把工作區裡的 png/jpg 放進模型的 context —— 截圖、設計稿、測試產出的圖表都算。沒有內建的截圖工具是刻意的:讓它自己寫腳本、run_shell 跑出一張圖,再用這支看結果,你手上有 selenium 還是 scrot 它就用哪個。模型沒有 vision 就不送這支工具
語言支援(Linux 完整實測) Python 與 C/C++ 有完整的一套(專案地圖的符號、寫檔後語法檢查、驗證指令預填、測試辨識);JS/TS 有地圖與 eslint。Windows 的一般工具流程已驗,MSVC/MinGW 的完整 C/C++ 流程尚未實測。其他語言用 run_shell 一樣做得完,只是少了這幾條回饋
塞不進 context 的輸出不會消失 跑壞的測試、大 diff、裝套件的錯誤動輒好幾萬字。截掉就丟的話最該細看的那些永遠找不回來 —— 所以全文落地成 .zackllmgui-out/ 底下的檔案,只把頭尾與路徑給模型,它自己 search_files 去挖。那個資料夾會寫進 .git/info/exclude,不會變成你 git status 上的雜訊
長指令丟背景 npm installcargo build 這種跑幾分鐘的加 background,模型先去做別的再回來收;關掉分頁它還在跑
沙盒 Linux 用 bubblewrap、macOS 用 sandbox-exec、Windows 用 Docker Desktop 容器;Linux 與 Windows 11 已實測。預設關,按鈕開。bwrap 自動接 GPU,容器要明確加 --sandbox-gpu
權限規則 確認卡上的「以後都放行」把這次的判斷寫成一條規則,不用每天重新點。allow / ask / deny 寫成檔案,專案與全域兩份都讀,denyserve.py 強制
專案地圖 開工作區時就算好「有哪些檔案、每個檔案裡有什麼」放進系統提示。模型不必再花三五輪 list_dirsearch_files 猜檔名 —— 而每一輪的成本是重吃一次整份 context
上一則對話學到的,這一則還記得 remember 把「測試要先 source .venv」「gen/ 是產生出來的別改」這種讀原始碼看不出來的事寫進 <工作區>/.zackllmgui-notes.md,下一則對話開頭自己讀進去。AGENTS.md 是你寫給它看的,只進不出 —— 少了這一份,每開一則新對話它就重新學一次同樣的東西。純文字,你自己編輯或整份刪掉都可以
改完自動檢查 模型寫完 .py.js 自動跑 linter,錯誤直接回灌給它。不用設定、沒有開關
檢查換成你自己那套 內建的 linter 只認 ruff/eslint/-fsyntax-only.zackllmgui-hooks.json 裡寫一行就能改掛 mypy、shellcheck、clippy、gofmt -l,輸出走跟內建同一條回灌路徑。專案與全域兩份都讀。不過 shell —— 那個檔跟著專案走,要管道就自己包成腳本再掛上來
收工前攔一次 寫了測試卻沒跑過就說「做完了」?推回去讓它跑完再收工
收尾要驗過才算 設一條驗證指令(pytestnpm test…),模型說做完時自動跑一次,沒過就把輸出丟回去讓它接著修。兩次沒過交還給你,並且留一顆「退回這一輪」
做到了沒不由它自己說 收尾複查(預設關,選單開):模型說做完時,另外開一次乾淨的呼叫,只給它原始要求與這一輪的 git diff,不給它自己的推理過程。沒做到就把具體漏了什麼丟回去
型別檢查排在測試前面 tsconfig.json 就預填 npx tsc --noEmit && npm test:jest 多半不做型別檢查,而「改了簽名沒改呼叫端」正是自主改多檔最常犯的錯。專案自己設了 mypy 也會加上去
子代理可以用別的模型 選單裡選一個「子代理模型」,或在 agents/*.md 裡指定。只 load 得動一個模型的機器維持預設(跟主模型一樣)就好
中斷可以續跑 按停止之後一鍵接著跑,從斷掉的字接下去,不是重講一遍
排一串放著跑一晚 輸入框裡用單獨一行 --- 隔開就是一串任務:第一件立刻送,其餘的等前一件真的做完(含收尾驗證與複查)才送。跟「跑到一半可以插話」是兩回事 —— 插話會併進正在跑的那一輪,任務各自是完整的一輪,各自有還原點。佇列存在對話上,頁面重整還在
沒有人在的時候它會自己接著跑 全自動模式下停在輪數上限、或停在「收尾驗證沒過」,它自己按「繼續」,最多三次 —— 而且每次都要先講一句「還差什麼」。使用者按停止不算:那是明確的指令
問了沒人答不會卡死 自動模式下 ask_user_question 等三分鐘就讓模型自己判斷繼續,並要它交代假設了什麼。放著跑一整晚,一張沒人按的卡原本等於整輪靜靜地掛著
它知道自己在哪個分支 分支與未 commit 的檔案數寫進系統提示。不講的話它會直接 commit 到 main,或把你原本就沒 commit 的改動算成自己的成果
跑到一半可以插話 打字按 Enter 排進佇列,不中斷正在跑的工具,下一輪跟工具結果一起送過去
看得出它在幹嘛 進度條顯示已跑多久(秒數自己走)、背景有幾條在跑、「現在:<第一個未完成的待辦>」;一輪跑完在對話裡留下總計
跑了多久留得住 沒東西在跑的時候那一條顯示「這則對話累計 18 分 4 秒 · 42 輪 · 96 次工具」。數字存在訊息上,關掉瀏覽器再開還在
放著跑就跑到完 本機模型沒有時間與用量上限;只有 200 輪的失控煞車,撞到也是留一顆「繼續」。外部 API 按量計費,所以那邊有 token 上限
模型知道還剩幾輪 剩五輪以內開始提醒,剩兩輪叫它收尾 —— 不然它會把時間花在探索,最後停在一半
改待辦不用打斷它 待辦清單同時是工作區裡的一份 markdown,跑的時候直接編輯,下一輪就同步進去
檔案:行號 可點 模型寫的 wafer_counter.py:42 點一下就跳到檔案分頁那一行並亮起來
待辦有相依 可以標「要等 #2」,卡住的與可以做的分開算,不會看起來像五件事都沒動
連不上會重試 三次退避重試並倒數,連不上時送出鍵也不再是灰的
改了就自己重開 動過 serve.py 的程式碼,它會自己重啟、網頁跟著重整 —— 不會出現「改好了卻沒生效」
每個分頁各做各的 工作區、修改權限、自動模式、待辦、計畫、MCP 連線都跟著分頁走 —— 兩個分頁開兩個專案不會互相蓋掉
重開接回設定 那些狀態住在 serve.py 的行程裡,重啟就沒了;開頁面時自動接回來並告訴你接了哪幾項
側欄可拖寬 左右兩側都能拖,雙擊還原,寬度記住
還原點 一輪一個:每則提示送出前照一張 git shadow commit,那一輪動過的檔案掛在底下(含 run_shell 改的)。commit 只記變更數,不寫提示、對話 id 或本機絕對路徑。點一列會先跳到你當時說的那句話再問,只動檔案不動對話。沒改到東西的那一輪不會多長一列,那一列會改名成新的那句話
子代理 把一段查找丟給另一個 context 去做,只把結論帶回來。型別是 agents/*.md 裡的檔案,加一種不必改程式;工具清單由 serve.py 強制,唯讀的就是唯讀的。會改檔案的跑在自己的 git worktree 裡(.venv 用讀的借、node_modules 用連的借,不必重建環境),所以可以平行跑
子代理停得住、收得回來 每張卡片一顆「中斷」,或打 /agents 挑一個,連後代與背景指令一起停。改完自動 commit 到自己的分支,回報時附上 git diff --stat 與一句可以直接貼的 git mergeserve.py 重啟過也不會留下「沒人認得的資料夾」
對話存 IndexedDB 不再卡在 localStorage 的 5MB;一則對話一筆,只寫改動的那一則。資料不出這台瀏覽器,伺服器只出算力
skills 對話框打 / 叫出,也可以讓模型自己判斷要不要載入。正文寫 !`git status` 就能帶著現場狀態載入;用不到的(工作區唯讀而它要改檔案)不會列給模型看
新增資料夾 檔案分頁上的「+資料夾」,打 src/utils 一次開好幾層。跟檔案工具同一道邊界,但不必勾「允許修改檔案」——那道開關管的是模型
@ 提檔案 @ 列出工作區檔案或資料夾;選資料夾會一次附整包(有上限,超過會講清楚少了幾個)
context 管理 用量條、到 80% 先瘦身工具輸出、壓縮後告訴你省了幾 K;過 75% 在背景先把摘要算好,放著跑到 85% 就自己壓 —— context 滿了不會報錯,是默默把最前面的訊息丟掉
附加檔案 純文字、程式碼、PDF、Word、圖片(vision 模型);貼上大段文字自動收成附件
多模型比較 同一個問題同時送給多個模型,並排看
模型管理 拉取、刪除、看 Modelfile,帶進度條
外部 API 同一個介面也能接 OpenAI 相容端點,工具也能用(勾「送出工具定義」)

它會動你的檔案,所以邊界寫在這

功能與工具

上面每一個開關都在網頁裡按,不用重開 serve.py,也不用去改設定檔。 python serve.py 起來之後,工具、連網、沙盒、自動模式、允許規則 全部在這個選單裡調 —— 指令列的旗標只是「開機就是這個狀態」的預設值。

四道關卡,由外而內:

  1. 子代理的工具清單決定「這一個子代理能叫哪幾支」—— 寫在 agents/*.md, 由 serve.pyagent_guard() 強制。explore 就算吐出 write_file 這個字串 (模型幻覺、提示詞注入)也會被拒絕。網頁那端的過濾只是「不給它看到」,不算關卡。 (只對子代理生效;主代理沒有這一層。)
  2. 自動模式決定「要不要問你」——五檔,每一檔的名字就是它多放行的東西: 每次都問/唯讀自動/改檔案自動/跑指令自動/工作區內全自動。 平常待在「改檔案自動」:改檔案有還原點,跑指令沒有。 最後那一檔連 rmmvchmod 也不問,但只限路徑全都在工作區裡的serve.pyws_scoped() 判,動到工作區外、sudo、裝套件照樣問)—— 放著讓它自己跑測試用的。沙盒開著時它會放行全部 ⚠ 級指令,因為那時候 「動不動得到工作區外」不必再從指令去猜。它管的是問不問,不是能不能做
  3. 權限規則deny 決定「能不能做」—— 在 serve.py 裡強制,網頁怎麼點都繞不過。
  4. 沙盒決定「做了會影響到哪」—— 工作區以外唯讀、憑證目錄蓋掉、斷網。

改檔案前一律備份到 <工作區>/.zackllmgui-backup/run_shell 的高風險指令直接擋下來。 這支程式會在你的專案裡動的只有三樣,都是它自己的東西:那份備份、塞不進 context 的工具輸出落地用的 <工作區>/.zackllmgui-out/,以及模型自己的筆記 <工作區>/.zackllmgui-notes.md(三個都寫進 .git/info/exclude,不會出現在你的 git status 上;.gitignore 是你的檔案,這支程式不動它)。 .zackllmgui-hooks.json.zackllmgui-rules.json你的設定檔,只讀不寫。 另外,只有這支服務自己開出來的那一頁叫得動它、也才讀得到它 —— 你開著它的時候 逛到的別的網頁不行(same_site();沒有這一道的話,一張跨站的表單就能跳過上面每一格, 而網域指回 127.0.0.1 的那種把戲連 GET 都繞得過去)。 擋得住什麼、擋不住什麼寫在 safety/README.md,別跳過那份。

順帶一提:沙盒裡裝得動套件,也吃得到 GPU。Linux bwrap 實測 torch.cuda.is_available()True;Windows 11 的 Docker Desktop 容器也已透過 --sandbox-gpu 看到 RTX 3080。bwrap 不換掉檔案系統,宿主機的 pytest、gcc、node、 CUDA 驅動本來就在那裡;容器則必須自行準備映像檔內的工具鏈與 CUDA runtime。 細節見 sandbox/README.md

支援哪些語言

專案地圖的符號 寫檔後語法檢查 驗證指令預填 測試辨識
Python ast ruff,沒裝退回 ast pytest -q
C / C++ 正規表示式 -fsyntax-only(需 compile_commands.json;MSVC 走 /Zs,沒驗過) ctest / make test
C# 正規表示式 ❌(見下) dotnet test
JS / TS 正規表示式 eslint(沒裝就跳過) npm test
其他 只列檔名

沒列到的語言照樣做得完——run_shell 不限語言,收尾驗證指令是你自己填的字串。 少的只是上面那幾條回饋,模型得多花幾輪自己補。

工具鏈不在就先問你。 開了一個 C# 專案但這台沒裝 .NET SDK(或 C/C++ 專案沒有 編譯器),介面會跳一次確認告訴你要裝什麼、要不要開下載頁。只提醒,不代裝 —— 裝 SDK 是你的決定,而且沙盒裡本來就沒有網路。裝好之後重新整理, dotnet test 的預填與 C# 的操作規則就自己出現了。

C/C++ 專案裡 run_testssetup_env 不會出現在工具清單上:那兩支是 pytest 與 .venv 專用的,送出去只會讓模型拿去跑一個沒有 pytest 的專案。編譯測試用 run_shellcmake / ctest,這件事會寫在送給模型的規則裡。

沙盒沒有網路,所以 FetchContent、vcpkg、conan 一定失敗。 相依套件要先在 沙盒外準備好(apt install libgtest-dev,或先跑一次 cmake 讓它下載完)。 Python 那邊有 setup_env 當唯一的連網入口,C/C++ 刻意不開第二個 —— 每一個連得出去的入口都是安全邊界上的洞。

C# 少的是「寫檔後語法檢查」那一格。 C 有翻譯單元,所以 gcc -fsyntax-only a.c 成立;C# 的一個 class 拆在幾個檔案裡是常態,csc 單獨編一個檔會對每個寫在 別處的型別噴 CS0246 —— 那不是缺 -I 能補的,是語言本身沒有這個概念。 整包 dotnet build 每寫一個檔跑一次撐不住,所以這一格留白。其餘三格都在。

compile_commands.json 會在這幾個地方找:專案根目錄、build/cmake-build-*/(CLion)、out/build/(Visual Studio 的開啟資料夾模式)。 沒有就跳過 —— CMake 加 -DCMAKE_EXPORT_COMPILE_COMMANDS=ON 就會生一份。

上面這一整套是在 Linux 上驗的:bubblewrap 沙盒裡 cmake configure → build → ctest 全過,edit_file 拿掉一個分號馬上回語法錯誤,gccg++nvcc 與 顯示卡在沙盒裡都看得到。

Windows 11 的服務、本機工具、系統資訊與 Docker 沙盒已實測;MSVC/MinGW 的完整 C/C++ 流程與 macOS 尚未實機驗證。 編譯器辨識支援 MSVC(cl.exe/Zs)、 MinGW 與 Clang,交叉編譯器與版號(arm-none-eabi-gccclang++-18)也算。 Windows 沙盒走容器,預設映像檔沒有編譯器,用 --sandbox-image gcc:14 換掉; NVIDIA GPU 再加 --sandbox-gpu(需要 NVIDIA Container Toolkit)。 認不出來的編譯器一律跳過不做檢查,所以最壞的情況是少一條回饋,不是一排誤報。

改完就自動檢查

模型寫完 .py.js,馬上跑一次 linter,錯誤接在工具結果後面回灌給它 —— 下一輪它自己就修掉了,不用等你發現。

已寫入 wafer_counter.py(412 字元)

[ruff] 這是剛剛寫入的檔案的檢查結果,請修掉:
wafer_counter.py:3:8: F401 [*] `os` imported but unused

沒有設定檔,也沒有開關。 裝了 ruff 就用 ruff、eslint 就用 eslint, 兩個都沒有的話 .py 還是會用標準函式庫的 ast 檢查語法 —— 模型最常寫壞的就是那個。 什麼都沒裝就安靜跳過,不會變成噪音。

C/C++ 走 -fsyntax-only,但編譯旗標一定要是真的

已修改 calc.c(1 處)

[語法檢查] 這個檔案編不過,請修:
calc.c:2:37: error: expected ';' before '}' token

旗標從 compile_commands.json 讀(CMake 開 CMAKE_EXPORT_COMPILE_COMMANDS=ON 就會生,clangd/clang-tidy 也吃它)。沒有那個檔就跳過 —— 直接 gcc -fsyntax-only 在任何有自訂 include 路徑的專案上都會噴「找不到標頭檔」,那是缺 -I 不是程式碼有錯, 而誤報比沒有更糟

只跑唯讀的檢查,不跑 blackprettier 這種會改檔案的。 在模型背後改掉檔案,它手上的內容就過期了,下一次 edit_file 的比對會對不上。 這是 aider 的 --auto-lint(預設開)那一套 —— 不用設定就有。 要換成 mypy/shellcheck/clippy 才需要寫那一行 .zackllmgui-hooks.json, 而且那條也一樣只該掛唯讀的檢查。

一個實際跑過的例子

上面那些湊起來實際長什麼樣。工作區裡只有一批標注資料:12 個 labelme 標注檔。沒有程式、沒有 README、沒有任何說明。 跑指令自動 + 沙盒開啟,丟一句話進去:

N_wafer_json/ 底下的 labelme 標注檔(每個 shapes 元素是一片 wafer),算出這批資料 總共標了幾片。寫成 wafer_counter.py,附上 pytest 測試,最後跑一次測試確認會過。

然後就沒有再按過任何確認:

agent 跑起來的樣子

11 輪、12 次工具呼叫。 它做的事情按順序是:

工具 做了什麼
load_skill 自己決定要載入 run-pytest 這份技能,沒有人叫它載
list_dir 先看資料夾裡有什麼
run_shell ×2 開一個 JSON 出來看格式,再掃過全部確認,沒有用猜的
write_file wafer_counter.py
write_fileedit_file ×2 test_wafer_counter.py,再自己改兩版
setup_env 在沙盒裡建 .venvpip install pytest
run_tests 5 passed in 0.01s
run_shell 真的跑一次程式,答案是 380 片

從第一個檔案落地(10:11:52)到測試變綠(10:14:24),2 分 32 秒

值得看的是它沒有猜資料格式:先用 run_shell 開一個檔案出來確認 shapes 長什麼樣, 才動手寫程式。測試也是它自己想的五個案例,其中一個是拿真實的那 12 個檔案做整合檢查 —— 不是只測會過的路徑。

這個任務先前用另一個模型跑過一次,答案一樣是 380。 那一輪的完整痕跡比對(怎麼從硬碟上反推它確實在沙盒裡跑完)在使用手冊

產出的檔案就在右邊的檔案分頁裡,點一下直接看:

檔案分頁

這個例子錄的是單一代理跑完一件事。後來加的子代理、worktree、自動壓縮不在裡面 —— 那些在上面的功能一覽。裡面每一支工具現在跑起來都還是一樣。

venv 還是沙盒?兩個都是。 沙盒是箱子,venv 是箱子裡的環境: setup_env 在沙盒裡建 .venvrun_tests 再用那個 .venv 的 python 跑,全程沒有離開箱子。

文件

文件 回答什麼問題
README.md(這份) 這是什麼、能做到什麼
manual.md 每個功能怎麼用、快捷鍵、資料存在哪、專案結構。功能分成八組,段首有目錄
tech.md 為什麼這樣做 —— 看程式碼之前先看這份。分七組,開頭有「這份文件怎麼讀」
safety/README.md 安全邊界:擋得住什麼、擋不住什麼
sandbox/README.md 各平台的沙盒支援到什麼程度,以及 GPU 哪些驗過哪些沒有
skills/README.md 內建 skills,以及怎麼寫自己的
agents/README.md 子代理型別怎麼寫,哪幾支工具永遠不給
docs/shots/README.md 上面那幾張截圖怎麼來的、要重截的話怎麼跑
plan-agent.md 還沒做的,與為什麼是這個順序

「這裡為什麼不能做某件事」有三個答案,分別在三個地方 —— 它們的下一步不一樣, 所以刻意不寫在一起:

問題 去哪找
知道有更完整的做法,但目前這樣就夠 tech.md〈刻意的簡化(ponytail 紀錄)〉,每條都寫了天花板與升級路徑
做不到或不打算做 tech.md〈已知限制〉
還沒做,但可能要做 plan-agent.md 第 2 節(做完就從那裡刪掉,所以那份永遠只有待辦)

還沒做的

下一輪要動的是體感那三項 —— 不是做不到,是同一件事要多按幾下:

現在 想要
切換自動模式 扳手 → 自動模式 → 選一項 Shift+Tab 循環,輸入框旁邊一直看得到在哪一檔
中斷 滑鼠移到右下角點停止 Esc 就停
還原 只倒得回檔案 連對話一起倒回去

能力上還缺的兩項都卡在「值不值得」而不是「怎麼做」: 子代理的改動要人自己下最後那句 git merge(自動合撞到衝突會把工作區弄成 一半合完的狀態,比自己 merge 更難收拾),以及子代理是同步的 (要「跑完再通知」得把整個工具迴圈從瀏覽器搬進 serve.py)。

向量檢索(RAG) 也還沒有 —— 附加檔案是整份塞進 context,沒有切塊也沒有向量庫。 它卡在一個還不存在的答案:找程式碼時 search_files(grep)幾乎都贏過向量檢索, RAG 真正的價值在文件,所以要先知道使用者到底都丟什麼進來。 (「模型找不到東西」那一半已經不歸它管了 —— 專案地圖把那件事變成了固定成本。)

每一項的成本、做完長什麼樣、卡在哪,見 plan-agent.md

不做的

圖片生成 —— Ollama 的 API 沒有影像輸出,vision 指的是「看得懂圖片」不是「畫得出圖片」。 VS Code 擴充套件 —— 那是另一個專案(TypeScript、擴充 API、打包發佈), 跟這份單一 HTML 檔的設計完全相反。 語意索引取代 search_files —— 找函式名要的是精確比對。 其餘的(LSP、跨對話 memory 工具、MCP 的 HTTP 傳輸)與理由見 plan-agent.md 第 5 節。

自我檢查

python tests/test_serve.py    # 後端 122 項
python tests/test_core.py     # core/ 各模組的介面 13 項
node   tests/test_gui.js      # 網頁 83 項

兩支 Python 測試只用專案本身與標準函式庫,三支都不需要 Ollama 在跑;網頁測試需要 Node.js。

另外兩支是不同用途,不在這條線上:tests/test_skills.pyskills/ 的格式, tests/test_agent.py 需要 Ollama —— 它讓真的模型修好一個壞掉的專案, 也是拿來東西的(--no-rules 量系統提示值多少、--tools=a,b 量工具定義值多少)。

About

Ollama 的單檔網頁前端,本機 coding agent:讀寫檔案、跑測試、 長指令丟背景、沙盒隔離、每次改檔都有還原點。一個 HTML 檔加一支 只用標準函式庫的 Python。

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages