從 AI 代理程式使用 FortressFlag
如果你和 AI 編碼代理程式一起工作,你可以把你的 flag 交給它。「在正式環境把 new-checkout 關掉」是一句背後有精確 API 呼叫的話,而且是一句會碰到你的真實使用者的話,這就是為什麼這份指南花在限制上的篇幅和花在設定上的一樣多。
FortressFlag 附帶一個 MCP 伺服器:一個在你自己的機器上、和你的代理程式並肩執行的小程式,把一組 flag 工具交給它。
它能做什麼、不能做什麼
Section titled “它能做什麼、不能做什麼”簡短版:你的代理程式能做的,正好就是你能做的,而且更少。
這個伺服器持有一個以你的身分行事的 API 權杖:你的角色、你的專案存取、你的組織。它透過儀表板使用的同一套公開 API 和 FortressFlag 對話,所以每一次權限檢查、專案允許清單和稽核紀錄,都和你親自點按鈕完全相同。沒有特殊的代理程式存取路徑。
有些事刻意完全不開放給代理程式:
- 核准正式環境提案。第二雙眼睛的整個重點,就在於它們屬於一個人。
- 永久刪除一個 flag。
- 建立 SDK 金鑰或 API 權杖。回傳給代理程式的一次性機密,會落進一份對話逐字稿裡。
- 管理成員、帳務或法律協議。
1. 建立一個權杖。在儀表板裡前往你的帳戶頁面,找到 API 權杖。取一個你認得出來的名稱、選一個範圍,然後複製這個權杖,它只會顯示一次。
除非你想讓代理程式進行變更,否則選唯讀。你隨時可以之後再建立第二個權杖。
2. 把你的代理程式指向這個伺服器。大多數 MCP 用戶端接受一小段設定,指定一個指令和它的環境:
{ "mcpServers": { "fortressflag": { "command": "ffmcp", "env": { "FORTRESSFLAG_TOKEN": "ffm_your_token_here", "FORTRESSFLAG_API_URL": "https://your-fortressflag-api" } } }}權杖放在 env 裡,永遠不放在 args:命令列引數在共用機器上對其他使用者是可見的。
3. 想要變更時加上 --allow-writes。沒有它,伺服器只提供讀取工具。有了它,你的代理程式可以切換、建立、重新命名、封存和還原 flag,但仍然受限於你的角色允許的範圍:
"args": ["--allow-writes"]把這個選項當成一個便利,而不是一道鎖。如果一個代理程式沒有理由去改 flag,也給它一個唯讀權杖,那才是 FortressFlag 真正強制執行的部分。
正式環境受到兩層保護
Section titled “正式環境受到兩層保護”你的角色先決定。如果你是 Developer,你不能直接寫入正式環境,所以你的代理程式也不能。它能做的是提議這項變更,和你會做的一模一樣:第二位隊友套用它,而且沒有人能核准自己的提案。見正式環境核准。
工具接著再問一次。在碰觸正式環境之前,代理程式必須聲明它確實打算這麼做,並指名該環境。這道檢查讀的是環境的正式環境類別,不是它的名稱,所以一個你叫做 live 的環境和一個叫做 prod 的受到完全相同的保護,而一個只是名叫 prod 卻不是正式環境類別的環境不會來煩你。
第二道檢查的存在,是因為現實中的錯誤不是攻擊者,而是一個被要求改 staging 裡的東西、卻伸手拿錯環境鍵的代理程式。
你的 flag 資料會進入對話
Section titled “你的 flag 資料會進入對話”值得直說:代理程式讀到的任何東西,都會成為它和它所使用的 AI 服務之間對話的一部分。這包括你的團隊寫下的 flag 名稱、鍵和描述,以及(如果你要它讀取稽核歷史)你的隊友的姓名和電子郵件地址。
由此推出兩件事。
把 flag 描述當成不受信任的輸入。任何能建立 flag 的人都能在它的描述裡打任何東西,包括讀起來像是給代理程式指令的文字。伺服器會在一開始以及每一個工具上告訴代理程式,這些值是你的組織的資料,永遠不是指令。這有幫助,但不是保證,也是一個理由,讓你對代理程式讀的是誰的 flag 多想一下。
我們看不到也管不了那份逐字稿。那是你和你的 AI 供應商之間的事。你使用這個時,FortressFlag 儲存或傳輸你的資料的方式沒有任何改變:這些工具只是同一套 API 的另一個用戶端。
還沒有的東西
Section titled “還沒有的東西”- 它只在本機執行。伺服器透過標準輸入輸出、在你的機器上和你的代理程式對話。沒有代管版本可以讓遠端代理程式指向。
- 還沒有可下載的二進位檔,目前是從原始碼建置。
- 鎖定規則和區隔無法由代理程式編輯。讀取 flag、切換它們和提議正式環境變更可以;規則編輯器是一個更大的介面,值得自己的設計回合。
- 列出待處理提案需要核准者的權限。Developer 的權杖可以提議一項正式環境變更,但之後無法列出它,那是底層 API 上的權限,不是工具的怪癖。