跳到內容

環境變數

roundtable init 會在 roundtable.config.ts 旁邊寫出一個 .env.example。 把它複製成 .env 並填好,設定檔就會從行程的環境變數讀到這些值。

終端機視窗
cp .env.example .env

Bun 會自己載入 .env,所以不需要 dotenv 這一步。 roundtable 指令要在專案目錄裡執行,因為設定檔也是在那裡找的。 init 寫出的 .gitignore 已經列了 .env,所以這個檔案不會進 Git。

變數 值從哪裡來 給誰用
DISCORD_TOKEN Discord developer portal 上,你的應用程式的 Bot 頁面。 discord.token
DISCORD_GUILD_ID 在 Discord 開啟開發者模式,在伺服器上按右鍵,複製它的 id。 discord.guild
DISCORD_ENTRY_CHANNEL_ID 同樣的做法:在協調者要住的頻道上按右鍵,複製它的 id。 discord.entryChannel
OWNER_ID 你自己,也就是唯一能改動一切的 owner:在你的名字上按右鍵,選 Copy User ID。 owner.id
OWNER_NAME 你的名字,agent 會這樣稱呼你。 owner.name
DATABASE_URL PostgreSQL。檔案裡的預設值跟 init 寫出的 docker-compose.yml 一致:postgres://roundtable:roundtable@localhost:5432/roundtable。 database.url
MODEL agent 使用的模型,寫成 <provider>/<id>。檔案裡建議的是 anthropic/claude-sonnet-5-5。 model
PUBLIC_URL 能從網際網路連到這個行程的位址。agent 的頭像從這裡提供。 http.publicUrl
ANTHROPIC_API_KEY 供應商的 API key。檔案裡是註解掉的;見下面。 由模型登入讀取,設定檔不讀。

前八個變數,由 roundtable.config.ts 透過它的 env("NAME") 輔助函式設定。 你可以用同樣的方式讀更多變數:那個檔案就是普通的 TypeScript。

Discord 的值一步一步怎麼拿,見設定 Discord bot。

roundtable doctor 和 roundtable start 把 .env.example 裡每一行沒有註解掉的 NAME=,都當成必填。 變數沒有值,或值是空白,環境檢查就會失敗:

✗ environment: no value for DISCORD_TOKEN, DISCORD_GUILD_ID, DISCORD_ENTRY_CHANNEL_ID, OWNER_ID, OWNER_NAME, DATABASE_URL, MODEL, PUBLIC_URL.
Copy .env.example to .env and fill them in; .env.example says where each one comes from.

.env 已經存在時,修正的那一行會寫成 Fill them in .env,不再有複製的步驟。 專案裡沒有 .env.example 的話,這項檢查會略過。

ANTHROPIC_API_KEY 是註解掉的,所以是選填。 改用 Pi 登入的話就不用填。 兩種做法都在模型裡說明。

你自己在 .env.example 加了變數,doctor 也會開始要求它。 前面加 # 註解掉,它就變成選填。

設定檔會把沒設的變數變成空字串,而每個必填設定都必須是非空字串。 所以 .env 裡留空的值,在檢查設定時也會被抓到:

config owner.id: expected a non-empty string, got "". Fix the value in roundtable.config.ts.

PUBLIC_URL 必須是 http:// 或 https:// 開頭的位址。 doctor 會檢查它的格式是否正確。 加上 --reachable 時,它還會真的請求這個位址,而這只有在 bot 執行中才會有回應。 旗標見 CLI,訊息見錯誤。

行程監聽 http.port,沒改的話是 3000。 PUBLIC_URL 的位址必須能通到那裡,例如透過通道(tunnel)。