2026年6月30日 星期二

Google Antigravity 學習筆記 : CLI 待辦清單 (to-do list) 專案

安裝好 Antigravity CLI 後, 接下來要透過實戰演練來熟悉如何使用此工具來開發專案, 本篇的目標是要用它來開發一個 CLI 介面的 to-do list. 

本系列之前的文章參考 :


以前開發專案的日常通常是打開程式編輯器 (Thonny, VS Code), 建立專案, 寫程式, 抓臭蟲, 修改程式 ... 直到滿意為止. 但使用 Antigravity, 只需要將需求寫清楚, 叫 AI 規劃要怎麼做, 檢視無誤後叫它開始按規劃完成專案. 


1. 建立專案目錄並啟動 agy : 

開啟 PS 視窗, 建立一個專案資料夾 (例如 todo-cli-app), 切換到專案資料夾, 下 agy 啟動 Google  Antigravity 工具 : 

PS D:\agy> mkdir todo-cli-app 
PS D:\agy> cd todo-cli-app  
PS D:\agy\todo-cli-app> agy   

然後輸入專案需求 :

請幫我建立一個 Todo CLI App
需求:
- Python CLI
- 支援 add / list / done / delete
- 使用 JSON 儲存資料
請先不要寫程式碼
先產出 Implementation Plan
以及檔案架構




agy 回應了下列規劃摘要 : 

### 本次工作摘要:

  1. 規劃了模組化的專案目錄結構。
  2. 設計了 JSON 資料儲存的 Schema。
  3. 定義了  add 、 list 、 done 、 delete  等 CLI 指令與對應的參數。
  4. 規劃了開發階段(儲存層 -> 邏輯層 -> CLI 解析層)。

請確認此計畫是否符合您的需求。若同意此規劃,請點擊「Proceed」或告知我,我將開始為您撰寫程式碼。

看起來此規劃沒問題, 輸入如下提示 : 

請依照剛剛的 Implementation Plan 逐步實作專案
每一步請先說明要做什麼再執行

按 Enter 後 agy 便開始執行它所規劃之專案 :

> 請依照剛剛的 Implementation Plan 逐步實作專案
  每一步請先說明要做什麼再執行

  ### 步驟 1:實作儲存層(Storage Layer)
  在這一步中,我們將建立專案的基礎結構與儲存模組:

  1. 建立  todo  套件目錄及空的  __init__.py 。
  2. 建立  todo/storage.py ,其中包含一個  Storage  類別。該類別負責讀取與寫入  todo_data.
  json ,並包含對應的錯誤處理(例如檔案不存在或 JSON 格式錯誤)。

  首先,我們來建立  todo/__init__.py  與  todo/storage.py 。

● Create(D:/agy/todo-cli-app/todo/__init__.py)
● Create(D:/agy/todo-cli-app/todo/storage.py) (ctrl+o to expand)

  ### 步驟 2:實作邏輯層(Logic Layer / Business Logic)

  接下來,我們將實作  todo/manager.py 。
  這個模組會包含  TodoManager  類別,它會調用剛剛建立的  Storage
  模組來載入與儲存資料,並實作核心業務邏輯:

  • 新增(Add):取得現有的 todo 列表,自動生成唯一的 ID(現有最大 ID +
  1),並記錄建立時間(ISO 8601 格式格式化字串),接著寫回檔案。
  • 列表(List):根據過濾條件(全部、已完成、未完成)傳回對應的 todo 項目。
  • 完成(Done):根據指定的 ID 將 todo 狀態改為  done = True 。
  • 刪除(Delete):根據指定的 ID 從列表中移除該項目。

  現在,我們來建立  todo/manager.py 。
● Create(D:/agy/todo-cli-app/todo/manager.py) (ctrl+o to expand)
▸ Thought for 7s, 527 tokens
  Defining CLI Interface
  ### 步驟 3:實作 CLI 解析層與進入點(CLI Parsing & Entry point)
  現在,我們將實作 CLI 解析邏輯。
  1. 建立  todo/cli.py :使用 Python 內建的  argparse  模組來定義 subcommands( add 、 list
  、 done 、 delete )。
      • 當使用者輸入對應指令時,它會調用  TodoManager
      ,並以友善的可讀格式輸出結果。例如,已完成事項標記為  [x] ,未完成標記為  [ ] 。
  2. 建立專案根目錄的  main.py :做為應用程式的啟動點,直接調用  todo/cli.py  中的主函式。

  首先,我們來建立  todo/cli.py 。

● Create(D:/agy/todo-cli-app/todo/cli.py) (ctrl+o to expand)

  接下來,我們在根目錄建立進入點檔案  main.py ,它會直接執行  todo.cli  模組中的  main()
  函式。

● Create(D:/agy/todo-cli-app/main.py) (ctrl+o to expand)

  ### 步驟 4:測試與驗證(Verification & Testing)

  現在我們來驗證實作是否正確運作。我們將執行以下測試步驟:

  1. 執行  python main.py --help  檢查說明選單是否正確。
  2. 新增兩個 todo 項目。
  3. 列出所有待辦事項。
  4. 標記其中一個待辦事項為已完成。
  5. 再次列出,確認狀態更新。
  6. 刪除一個事項,確認已被移除。

  首先,我們執行指令來新增事項並列出它們。

● Bash(python main.py add "Buy fresh milk"; python main.py add "Practice Py...) (ctrl+o to
expand)

Command
───────────────────────────────────────────────────────────────────────────────────────────────

  Requesting permission for:
     python main.py add "Buy fresh milk"; python main.py add "Practice Python coding";
  python main.py list

Do you want to proceed?
> 1. Yes
  2. Yes, and always allow in this conversation for commands that start with 'python main.py
add "Buy fresh milk"; python main.py add "Practice Python coding"...'
  3. Yes, and always allow for commands that start with 'python main.py add "Buy fresh milk";
python main.py add "Practice Python coding"...' (Persist to settings.json)
  4. No

按 1.Yes 讓 agy 繼續執行專案, 完成工作 ID 1 後會再次詢問是否允許執行下一步 :

接下來,我們測試將 ID 1 的待辦事項標記為「已完成」,然後刪除 ID 2,最後列出清單以驗證。

● Bash(python main.py done 1; python main.py delete 2; python main.py list) (ctrl+o to expand)

Command
───────────────────────────────────────────────────────────────────────────────────────────────

  Requesting permission for:
     python main.py done 1; python main.py delete 2; python main.py list

Do you want to proceed?
> 1. Yes
  2. Yes, and always allow in this conversation for commands that start with 'python main.py
done 1; python main.py delete 2; python main.py list'
  3. Yes, and always allow for commands that start with 'python main.py done 1; python main.py
delete 2; python main.py list' (Persist to settings.json)
  4. No

  ↑/↓ Navigate · tab Amend · ctrl+g edit/expand command · ctrl+r Review
esc to cancel                                                         Gemini 3.5 Flash (Medium)

完成所有規劃的工作 :

  ### 步驟 5:撰寫 README.md(Documentation)

  為了讓專案結構更完整,並方便您或其他人日後使用,我們將在專案根目錄下建立一個 README.md
  說明文件,內容會說明如何安裝以及如何執行這些指令。

● Create(D:/agy/todo-cli-app/README.md) (ctrl+o to expand)

  我們已經按照 Implementation Plan 逐步實作完成整個 Todo CLI App!

  ### 實作檔案與程式結構連結:

  1. __init__.py:初始化 todo 套件。
  2. storage.py:定義了 storage.py 類別,負責讀寫 JSON 檔案。
  3. manager.py:定義了 manager.py 類別,實作新增、刪除、完成、列出等核心邏輯。
  4. cli.py:處理指令列參數解析 ( argparse ) 與文字輸出格式化。
  5. main.py:專案啟動入口。
  6. README.md:專案的使用說明文檔。

  ### 測試結果:

  我們已在終端機中成功測試了下列功能:

  • 新增事項: python main.py add "Buy fresh milk"
  • 列出事項: python main.py list
  • 完成事項: python main.py done 1
  • 刪除事項: python main.py delete 2

  所有程式碼與功能皆已測試完畢並可正常運行!如果您有任何新功能需求或需要微調,請隨時告訴我。

以上就是 agy 執行此專案的過程, 至此已完成全部規劃的工作, 開啟一個新的 PS 視窗, 切換至專案目錄下, 檢視專案內容 :

PS D:\agy\todo-cli-app> dir  
    目錄: D:\agy\todo-cli-app

Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----       2026/6/30  下午 02:57                todo
-a----       2026/6/30  下午 12:39             65 main.py
-a----       2026/6/30  下午 03:01           1452 README.md
-a----       2026/6/30  下午 03:01            127 todo_data.json

其中 main.py 為程式進入點, 真正的邏輯寫在 todo 子目錄下的程式裡面, todo_data.json 為儲存代辦事項的資料檔, README.md 是整個專案的說明檔, 裡面有軟體的使用方法. 

手動來測試此軟體 :

首先用 python main.py list 檢視代辦清單內容 : 

PS D:\agy\todo-cli-app> python main.py list   
ID   Status   Title                                    Created At
------------------------------------------------------------------------
1    [x]      Buy fresh milk                

目前只有一筆資料, Status 欄為 x 表示該備忘事項已完成. 

用 python main.py add 新增一筆備忘後再次檢視就會顯示兩筆 : 

PS D:\agy\todo-cli-app> python main.py add "買 A4 影印紙"   
Added task: [ID: 2] "買 A4 影印紙"
PS D:\agy\todo-cli-app> python main.py list   
ID   Status   Title                                    Created At
------------------------------------------------------------------------
1    [x]      Buy fresh milk                           2026-06-30 14:57
2    [ ]      買 A4 影印紙                                 2026-06-30 15:15

Status 欄空白表示尚未完成. 接下來 python main.py done 2 指令將 ID=2 的備忘標示為已完成, 再次檢視清單就會看見兩筆都被標示為 x :

PS D:\agy\todo-cli-app> python main.py done 2     
Success: Marked task 2 as completed.
PS D:\agy\todo-cli-app> python main.py list   
ID   Status   Title                                    Created At
------------------------------------------------------------------------
1    [x]      Buy fresh milk                           2026-06-30 14:57
2    [x]      買 A4 影印紙                                 2026-06-30 15:15

最後來檢查刪除功能, 連續刪除兩筆後再次檢視清單應為空 :

PS D:\agy\todo-cli-app> python main.py delete 1   
Success: Deleted task 1.
PS D:\agy\todo-cli-app> python main.py delete 2   
Success: Deleted task 2.
PS D:\agy\todo-cli-app> python main.py list   
No  tasks found.

可見 agy 實作的專案成果符合預期之功能. 

完成後回 agy 命令列, 輸入 /usage 斜線指令檢視目前 token 用量餘額 :




此用量統計分為兩部分, 上層是 Gemini Flash 與 Gemini Pro 模型的用量餘額, 下層是第三方模型 CLAUDE (Claude Opus/Claude Sonnet) 與 GPT 用量餘額合計, 各自有分 Weekly Limit (每週上限) 與 Five Hour Limit (五小時滾動限制), 以及多久後重置, 98% 以上的周累計餘額表示過去一周都沒用到多少. 

沒有留言 :