ccairn

CLI 快速上手

cairn CLI 是 API 的命令列封裝——你(或你的 agent)在終端機操作租戶後台:處理流程、查資訊、產報表,走的是和後台網頁完全相同的業務規則與權限。

本篇帶你從零跑出第一個命令:安裝、登入、認識命令結構,以及對 production 該守的規矩。底層的概念(認證、權限、模組、錯誤格式)見 總覽

安裝

CLI 隨 repo 一起跑,用 bun run cairn 呼叫:

bun run cairn help

cairn help 列出所有可用資源;cairn <resource> help 列出單一資源的命令。整個 CLI 是自我描述的——不必背命令,問它就好。

說明

目前以 repo 內 bun run cairn … 形式發行。未來會提供 npm 套件 / 獨立執行檔,命令與認證方式不變。

認證

CLI 用 OAuth 2.0 Device Authorization Grant 登入——你從不在終端機輸入密碼。流程是:CLI 取一組驗證碼,你在瀏覽器裡(已登入、含 2FA)核准,CLI 拿到 bearer token。

先設定一個 target(要操作的租戶網域),再登入:

cairn target add demo https://your-tenant.example.com
cairn login
cairn whoami
  • 你打哪個租戶的網域,就操作哪個租戶。token 隨租戶網域天然隔離——一個租戶的 token 在別的租戶上自動失效。
  • token 帶 2FA:它是「完整登入(含 TOTP)之後」核發的工作階段,CLI 端零認證邏輯。
  • token 存在本機(限本人讀寫),每個 target 各自一份;過期會提示你重新 cairn login
  • 登出清除本機 token:cairn logout
注意

驗證碼與 token 等同於你的登入。別把它們貼進共用聊天室、log 或腳本明文裡。換機器 / 疑似外洩就 cairn logout 再重新登入。

權限沿用你帳號的角色——CLI 不會給你後台沒有的能力。角色與權限的全貌見 總覽 · 權限與角色,租戶層設定見 設定

第一個命令

登入後,列出待付款訂單:

cairn orders list --status pending_payment

--json 得到機器可讀輸出,方便管線 / agent 解析:

cairn orders list --status pending_payment --json
cairn orders get <id> --json
cairn whoami --json

不加 --json 時,輸出是給人看的精簡表格;加了就回 API 的原始 JSON。

命令結構

絕大多數命令都是同一個形狀:

cairn <resource> <verb> [positional] [--flags]
部位是什麼
<resource>操作的資源(共 32 種)orderstripsmembersreports
<verb>動作listgetmark-paidmonthly
positional主鍵(通常是 id)cairn orders get <id>
--flags篩選 / 欄位 / 選項--status--year--json

幾個全域旗標在所有命令通用:

旗標作用
--target <name>指定要操作的 target(預設為目前 target)
--json機器可讀輸出
--confirmproduction target 寫入時必帶(見下)

多個 target 之間切換:

cairn target list
cairn target use demo
cairn orders list --target staging        # 單次覆寫,不切換目前 target

CLI ↔ API 對應

CLI 不是另一條捷徑——它是 /api/v1 的薄封裝。每個命令都對應一個端點,走相同的權限檢查與稽核:

CLI 命令對應端點
cairn orders listGET /api/v1/orders
cairn orders get <id>GET /api/v1/orders/{id}
cairn orders mark-paid <id>POST /api/v1/orders/{id}/mark-paid
cairn reports monthly --year 2026 --month 6GET /api/v1/reports/monthly
cairn members get <userId>GET /api/v1/members/{userId}

CLI 參考 每個命令都標了它對應的端點;API 參考 每個端點都標了它要求的權限。兩份文件互為索引——用 CLI 還是直接打 API 隨你,行為一致。

Production 安全

把正式環境的 target 標成 production,CLI 就會在任何寫入命令上要求 --confirm,避免手滑打到正式資料:

cairn target add prod https://your-tenant.example.com --production

cairn orders mark-paid <id>             # ✗ 被擋下:production target 需 --confirm
cairn orders mark-paid <id> --confirm   # ✓ 明確確認後才送出
注意

--confirm 只是 client 端的減速丘,不是授權。真正的守衛永遠在 server:每個寫入端點都會重跑 requirePermission,權限不足一律回 403 forbidden,與你有沒有加 --confirm 無關。

讀取命令(list / get / 報表)不需要 --confirm。owner-scope 一律由 server 依你的 token 重算——例如業務經 CLI 也只看得到自己經手的訂單,和後台完全等價。

下一步

  • 總覽:認證、租戶隔離、權限、模組、錯誤格式的心智模型。
  • CLI 參考:32 個資源、255 個命令的逐命令參數與對應端點。
  • API 參考:逐端點的權限、輸入與回應。

Command Palette

Search for a command to run...