№ 01 / 2026 An Internal Field Manual Tenten · Engineering Notes
2026.05.18 · Taipei Reading time: 18 min Classification: 🟢 SHARE-OK
Everything I Need to Know

Agent Browser 自動化 X 發文 用瀏覽器自動化取代 X API,在 Mac Mini 上以 Browser-Use 從 Blog 發佈推文

LinkedIn、Threads、Facebook、IG 的發文已透過 API 自動化。X 的 Basic API 費用為 $200/月,Browser-Use 提供以瀏覽器自動化取代 API 的替代方案。本文涵蓋架構設計、安裝步驟、Reddit 社群案例,以及合規風險評估。

TL;DR — 如果你只有 60 秒

  1. 結論先講:可行,但有風險。用 Agent Browser 操作已登入的 X 帳號發推,技術上 2026 年已經是 turnkey 等級,整個社群有大量現成方案。
  2. 推薦堆疊:Browser-Use(93k★)+ Claude Sonnet 4.6 + 持久化 Chrome Profile + n8n trigger。整套 BYOM 月成本約 $30–50。
  3. X 官方政策明確禁止「非 API 形式的自動化」,違反者「可能被永久停權」。這條紅線你必須知道。
  4. 實務上的安全做法:單帳號、低頻率(1–3 推/天)、人類化延遲、避開自動按讚/追蹤、用主帳號而非新建帳號。
  5. Plan B 已備好:若被風控,立刻切回 X API Basic($200/mo)或用 Typefully 半自動排程。
01
Chapter One · The Problem

為什麼 X 的發文自動化
比其他平台複雜?

其他平台的整合已完成。當 Blog 發佈新文章,LinkedIn、Threads、Facebook、Instagram 的 API 或 OAuth 接收 token 並將貼文送至各平台時間軸。流程穩定、可預測、有 SLA 保障。

X 在 Elon Musk 接手後調整 API 定價,最低方案 Basic 為 $200/月,Free tier 每月僅允許極少量寫入。對於只需要發佈自家 Blog 文章的需求,這筆費用不符比例:我們需要的只是一個發文動作,而非抓取百萬則資料。

替代方案由此產生:直接讓 AI 操作已登入的瀏覽器,點擊「Post」按鈕送出推文。X 帳號在 Mac Mini 上保持常駐登入狀態,不需要每次重新驗證。

這個做法在 2024 年屬於實驗性 hack,到了 2026 年,Browser-Use 已累積 93,000+ GitHub 星,成為具備社群支持的穩定方案。這類工具統稱 Agent Browser。

Agent Browser 以 LLM 解讀整個頁面,識別元素意圖,而非依賴固定的 CSS selector 或 XPath。 Browser-Use 設計原理

傳統的 Selenium、Playwright 依賴 CSS selector 和 XPath,X 前端一旦改版,腳本即失效。Agent Browser 以 LLM 解讀整個頁面,識別元素的語意意圖。當 X 調整「Post」按鈕的位置或 class 名稱,AI 仍可透過文字語意定位目標,不需要手動更新 selector。

02
Chapter Two · The Landscape

2026 年 Agent Browser
工具比較

以下比較表涵蓋 GitHub、Reddit r/AI_Agents、Hacker News 上討論度較高的選項,篩選條件為:具備持久化 session 支援、有活躍維護紀錄、可自架部署。

工具 核心模式 適合場景 GitHub 支援登入 Cookie / Session?
Browser-Use Python · 開源 · BYOM(自帶模型) 程式化工作流、自架部署、Mac Mini 24/7 93.3k★ ✅ 內建 profile.sh 工具
Skyvern LLM + 電腦視覺 · 多 Agent 架構 跨網站、頁面常變動、需 OCR / 2FA ~25k★ ✅ 可連既有 Chrome(chrome://inspect)
Stagehand TypeScript · Playwright extension 偏 deterministic、想要 selector caching 15k★ ✅ Browserbase 雲端持久化
Vercel Agent Browser Rust CLI · 給 coding agent 用 跟 Cursor / Claude Code 整合的腳本 12.1k★ ✅ Session profile
Claude for Chrome Anthropic 官方 · Chrome 擴充 個人桌面助理、不適合 server 化 ✅ 直接用你登入的 Chrome
Perplexity Comet 消費型 AI 瀏覽器 人類陪同操作,不是無人值守 ✅ 但無 headless 模式

建議選用 Browser-Use。GitHub 星數 93k,文件完整,支援 BYOM(可接 Claude、GPT、Gemini、Ollama 本地模型),在 Mac Mini 上以 Python venv 即可部署,無需額外基礎設施。

Skyvern 適合需要處理 2FA 或 captcha 的場景,其多 agent 架構(Planner → Actor → Validator)更為穩定。但 Skyvern Cloud 為付費方案,自架設定複雜,對單一發文用途而言成本偏高。

為什麼不直接用 Claude in Chrome? Claude in Chrome 為 Chrome extension,適合人機協作場景,無法以 headless 模式在無人值守的 Mac Mini 上執行,也不支援 webhook 觸發的自動流程。
03
Chapter Three · The Architecture

Blog PublishX Post
的端對端流程

整個系統由六個步驟組成:從 Blog 系統發出 webhook 到 X 出現推文,中間由 n8n、Claude、Browser-Use 分別負責觸發、生成與執行。

Blog → X Auto-Post Pipeline · v1.0
1
Trigger · Blog WebhookGhost / WordPress 發布新文章時,觸發 webhook 到 n8n。Payload 包含標題、摘要、URL、封面圖。
2
Generator · LLM 寫推文n8n 把內容丟給 Claude Sonnet 4.6,按照 prompt 模板(見 Ch 05)產生一則 ≤ 280 字的推文 + 1–2 個 hashtag + 短連結。
3
Queue · 任務寫進 Redis / SQLite把 tweet 字串 + 文章 URL + 預定時間寫進輕量隊列。預設延遲 5–30 分鐘(避免「網站發文 → 推特同時跳出來」的機械感)。
4
Worker · Mac Mini 上的 Browser-UsePython script 從隊列取任務 → 啟動有持久化 profile 的 Chromium → 已登入 X 帳號狀態 → Claude 視覺判斷介面 → 點 Compose → 貼上文字 → 點 Post。
5
Verify · 截圖回報發完後等 3 秒,截圖、抓 URL,回寫到 Notion / Slack。如果失敗,retry 一次後丟錯誤到 Slack。
6
Cooldown · 進入冷卻該帳號至少 90 分鐘內不再發推。每天硬上限 3 則。週末延遲到平日。這些是降低風控的關鍵。

架構中有兩個關鍵設計:持久化的 Chrome profile冷卻機制。前者避免每次重新登入(頻繁重新登入是觸發帳號風控的常見原因),後者讓發文行為符合人類使用頻率,降低被自動偵測的機率。

04
Chapter Four · The Setup

Mac Mini 上的安裝步驟

以下步驟適用於 M4 Mac Mini(macOS 14+)。在乾淨環境中約需 45 分鐘完成安裝並送出第一則推文。

步驟一 · 環境準備

用 uv 建專案、灌 browser-use、預載 Chromium:

# 0. 安裝 uv(Python 套件管理器,比 pip 快 100x) curl -LsSf https://astral.sh/uv/install.sh | sh # 1. 建專案目錄 mkdir ~/x-poster && cd ~/x-poster uv init && uv add browser-use anthropic redis python-dotenv # 2. 預載 Chromium(browser-use 自帶下載) uvx browser-use install # 3. 建一個 .env 放金鑰 cat > .env <<EOF ANTHROPIC_API_KEY=sk-ant-... X_USERNAME=tenten_co USER_DATA_DIR=/Users/$(whoami)/x-poster/chrome-profile EOF

步驟二 · 第一次手動登入 X

此步驟僅執行一次。用以下腳本開啟專屬 Chrome profile,手動登入 X 帳號(包含 2FA)。完成後 profile 持久化於硬碟,後續可直接以 headless 模式啟動:

# bootstrap.py · 只跑一次,做完就刪 from browser_use import Browser import asyncio async def bootstrap(): browser = Browser( user_data_dir="./chrome-profile", headless=False, # 你要看得到瀏覽器才能手動操作 ) page = await browser.new_page() await page.goto("https://x.com/login") print("👉 請在瀏覽器手動登入 X,包含 2FA") print(" 登入完成後,按 Enter 繼續...") input() await browser.close() print("✅ Profile 已存好。之後可以 headless 跑了。") asyncio.run(bootstrap())

完成後,chrome-profile/ 目錄將儲存 cookies、session storage、local storage,下次啟動 Chrome 即為已登入狀態。

步驟三 · 建立主要 worker

# worker.py · 這是會被 24/7 跑的主程式 from browser_use import Agent, Browser, ChatAnthropic import asyncio, os, time, random async def post_to_x(tweet_text: str): browser = Browser( user_data_dir=os.getenv("USER_DATA_DIR"), headless=True, # 正式跑時 headless ) agent = Agent( task=f""" 前往 https://x.com/home 確認已登入(如未登入,停止並回報錯誤)。 點擊「Post」或「發文」按鈕(左側面板上的鉛筆 icon)。 在彈出的編輯框內輸入以下文字(不要修改任何字元): --- {tweet_text} --- 確認字數沒有超過 280。 點擊「Post」送出按鈕。 等待 3 秒後截圖回報。 """, llm=ChatAnthropic(model="claude-sonnet-4-6"), browser=browser, ) # 人類化延遲:在這個任務真正執行前先等 30-180 秒 await asyncio.sleep(random.uniform(30, 180)) result = await agent.run() await browser.close() return result # 從 Redis 隊列取任務 if __name__ == "__main__": import redis r = redis.Redis() while True: _, payload = r.blpop("x:queue") tweet = payload.decode() try: asyncio.run(post_to_x(tweet)) print(f"✅ Posted: {tweet[:60]}...") except Exception as e: print(f"❌ Failed: {e}") time.sleep(90 * 60) # 強制冷卻 90 分鐘

步驟四 · 以 launchd 設為系統服務

建立 plist 檔,使 worker 在 Mac Mini 開機時自動啟動,並在異常退出後自動重啟:

<!-- ~/Library/LaunchAgents/co.tenten.xposter.plist --> <?xml version="1.0"?> <plist version="1.0"> <dict> <key>Label</key> <string>co.tenten.xposter</string> <key>WorkingDirectory</key> <string>/Users/tenten/x-poster</string> <key>ProgramArguments</key> <array> <string>/Users/tenten/.local/bin/uv</string> <string>run</string> <string>python</string> <string>worker.py</string> </array> <key>RunAtLoad</key> <true/> <key>KeepAlive</key> <true/> <key>StandardOutPath</key> <string>/tmp/xposter.log</string> </dict> </plist> # 載入 launchctl load ~/Library/LaunchAgents/co.tenten.xposter.plist
Mac Mini 硬體規格建議 M4 Mac Mini 基礎款(16GB RAM,$499)可滿足此工作負載,Browser-Use + Claude Sonnet 4.6 單次發文記憶體峰值約 800MB。需同時處理多帳號或多平台時,建議升級至 M4 Pro 24GB($999)。待機功耗約 5W。
05
Chapter Five · The Prompt

推文生成 Prompt
設計說明

推文品質直接影響整個系統的輸出效果。AI 生成的推文若語氣機械或過於行銷化,即使成功發布也難以獲得互動。以下是給 Claude Sonnet 4.6 使用、歷經多次調整的 prompt 範本:

system_prompt.md · v3.2 PRODUCTION
## 角色 你是 Tenten(tenten.co)的社群編輯。你的任務是把一篇剛發布的 Blog 文章,改寫成一則 X 推文。 ## 輸入 - 文章標題:{{title}} - 文章摘要(150 字內):{{summary}} - 文章 URL:{{url}} - 文章 tag:{{tags}} ## 寫作風格 - 用第一人稱「我們」或第三人稱觀察者口吻,不要用「您」或「親愛的讀者」 - 開頭一句要有 hook:一個反直覺的觀察、一個具體數字、或一個尖銳的問題 - 結尾不要寫「點擊閱讀更多」「歡迎留言」這類客套話 - 避免:「在這個快速變化的世界」「讓我們一起」「值得一讀」這類 AI 口吻 - 允許:粗口(輕度)、自嘲、技術梗 ## 硬規則 1. 總字數含 URL ≤ 270 字元(給 X 預留 buffer) 2. URL 直接放結尾,不要用 markdown 包 3. 最多 2 個 hashtag,放在最後一行 4. 不要用 emoji(除非文章主題真的需要,例如音樂或表情包) 5. 如果文章是技術教學,第一行直接破題講重點;如果是觀點文章,第一行用一句斷言 ## 輸出格式 直接輸出推文內容本體,不要前綴、不要解釋、不要 markdown code block。一個換行代表一個段落。 ## 範例 輸入標題:「為什麼我們把 UnoPim 放在 AWS Lightsail」 輸出: 我們花了兩週把整個 PIM 從 self-hosted Kubernetes 搬到 AWS Lightsail。 帳單從 $340 變 $40,部署時間從 12 分鐘變 90 秒。 寫了一份 19 章節的 self-hosting guide,包括我們踩過的所有坑。 https://tenten.co/blog/unopim-lightsail #PIM #AWS

此 prompt 的結構要點:(1) 提供充分上下文(風格、規則、範例)(2) 以「硬規則」+ 「軟風格」雙層約束輸出(3) 附上一個高品質範例讓 LLM 對齊目標調性。依內部測試,此版本推文的人工 reviewer 修改率約 15%,多數情況可直接通過。

建議先執行兩週 dry-run 正式上線前,先讓系統以 dry-run 模式運行兩週:生成推文、寫入 Slack,但不實際發佈。這個階段通常會發現 5–6 個需要修補的 edge case(例如連結超長、標題本身接近 250 字元、原文為英文時的處理方式)。提前迭代可減少上線後的修正成本。
06
Chapter Six · The Reddit Wisdom

社群討論摘要
已知問題與替代方案

以下整理自 r/AI_Agents、r/LLMDevs、r/n8n、Hacker News 過去 6 個月的相關討論,選取出現頻率較高且具參考價值的案例:

▲ 389
r/n8n · n8n workflow
$40 月成本就能跑全套

一個爆紅的 n8n 模板:Content Ingestion → AI Research → Platform-Specific Writing → Publishing。整套自架月成本 $20(n8n cloud)+ $5–15(Claude API)。有人把它包成 $18 賣模板,也有人收 $600 幫客戶部署。

▲ 1.2k
r/AI_Agents · Eliza
Eliza 1.0.6 可繞過 X API

Eliza agent 框架的舊版本 plugin-twitter 1.0.6 曾支援直接發 X 不依賴 API,後因 X 要求而修改。部分用戶仍使用 1.0.6 版本,屬於社群已知的非官方用法。

▲ 567
r/Mac · Mac Mini 24/7
M4 Mac Mini 作為常駐 agent 主機

r/Mac 過去半年出現多個 24/7 agent 部署案例。Clawdbot 累積 9k★,以 Mac Mini 作為 Telegram/Slack/iMessage agent host。相較 VPS,Mac Mini 無月費、功耗低、可在本地保管登入憑證。

▲ 234
r/Twitter · 被封號的人
死刑通常是大量自動互動

翻了 30 篇「被封號」的事後檢討,共通點是:自動按讚、自動追蹤、自動回覆、相似內容多帳號發布。單純「自動發自己的原創推文」被封的案例極少,但仍有風險。

▲ 178
r/AI_Agents · Nitter
Nitter 可作為讀取側替代方案

需要讀取 X 內容(例如自動回覆 mentions)時,Nitter 替代前端可抓取資料,無需使用 X API。寫入(發推)仍需瀏覽器自動化,但讀取側可節省 API 費用。

▲ 91
HN · Skyvern thread
用「explore → replay」省 LLM 錢

Skyvern 的設計:第一次跑用 LLM 學會流程、產生 Playwright code,後續直接 replay。2.7x 便宜、2.3x 快、deterministic。如果你發推流程穩定,跑久了根本不需要每次都呼叫 LLM。

托管型方案比較

以下列出社群討論度較高的托管型選項,各有不同限制:

Postbase
SaaS · 訓練 AI agent 用你的 brand voice 自動發 X / LinkedIn / IG。是付費黑箱,你看不到底層怎麼處理 X。
OpenTweet
RSS-to-X 自動發文 SaaS。它走的是 X 官方 API,所以合規,但要付 X API 的錢。
Apify Post Tweet Actor
$10/月 · 用 Cookie 模擬登入發推。本質就是個瀏覽器自動化,跟我們要做的事一樣,只是託管在 Apify 雲上。
Typefully + Zapier
半自動:AI 寫、Typefully 排程、人類審 → 自動發。合規、安全、但需要每天花 5 分鐘按按鈕。
GeeLark
Antidetect 雲端手機。主要給多帳號 farming 用,正規企業用不太上,提一下讓你知道有這種東西。

結論:單一帳號、僅發自家 Blog 的場景,自架 Browser-Use 成本最低、控制權最高。若需要托管方案且不想支付 X API 費用,Apify Post Tweet Actor 以 $10/月提供相同功能,但合規風險與自架相同。

07
Chapter Seven · The Risk

X 自動化政策與合規風險

執行前必須了解 X 的官方政策立場。本章說明政策條文、實際執行強度,以及降低風險的具體做法。

X 官方政策原文(中譯)如下:

「禁止使用非 API 形式的自動化,
例如腳本化操作 X 網站。
使用這些技術可能導致
你的帳號被永久停權。」 — X Help Center · Automation Rules · 2026 版本

Browser-Use 操作已登入的 Chrome 點擊按鈕,符合 X 政策所定義的「腳本化操作 X 網站」,屬於明確禁止的行為。政策條文無模糊空間。

X 的風控系統優先針對傷害平台健康度的自動化:自動按讚、自動追蹤、自動 DM 推銷、多帳號協同發布相同內容。單一帳號、低頻率、發布原創內容的場景雖技術上違規,依社群案例被主動執法的機率相對較低,但此評估可能隨 X 政策調整而改變。

風險評估儀表

針對「Tenten 用 Browser-Use 從 Mac Mini 發自家 Blog 推文」這個具體場景:

違反 ToS
100%
被技術偵測
~25%
短期被停權
~8%
永久停權
~4%
能否申訴
很低

以上數字為根據社群案例的估算,非科學數據。需特別注意的是「永久停權且申訴成功率極低」的尾部風險。一旦觸發,Tenten 的 X 帳號及累積的 followers 將全數歸零。

降低風險的 7 條操作規範

08
Chapter Eight · The Backup Plan

備援計畫:帳號被封時
的處理流程

建議提前將以下 incident response 步驟寫成 runbook,而非等到帳號被封時才處理:

Incident Response Playbook
A
偵測 · Worker 失敗 3 次如果 Browser-Use 連續 3 次回報「找不到 Post 按鈕」或「需要驗證」,立刻 Slack 警報、暫停隊列。
B
判斷 · 是技術問題還是封號用手機(非 Mac Mini IP)打開 X 看帳號狀態。如果還活著,可能是 X 改了 UI,等 24 小時或更新 prompt 即可。
C
如果是封號 · 立刻申訴X 對「自動化違規」的申訴成功率很低,但仍要試。準備話術:「個人帳號,所有內容皆為原創,無法解釋為何被停權」。
D
過渡 · 切到 Typefully 半自動用同個帳號(或新帳號)接 Typefully。AI 仍然產推文,但人類點「Post」。發布不會中斷,只是慢一點。
E
長期 · 評估付 API 錢若 X 對 Tenten 真的重要(高流量轉換、品牌曝光),$200/月買 Basic API 換合規與穩定,從商業 ROI 看可能划算。
不建議使用的反偵測方案 Reddit 上部分討論涉及 antidetect browser、指紋偽裝、代理 IP 等方法。這些技術主要用於 multi-account farming,在多數地區屬於法律灰色或違法範圍。本場景的目標僅是替自家 Blog 節省 API 費用,不需要引入此類方案。
09
Chapter Nine · The Verdict

給 Tenten 的
決策矩陣

以下將本文件重點濃縮為決策矩陣,供 go / no-go 評估使用:

建議方案
Browser-Use + Claude Sonnet 4.6 + Mac Mini M4 + 既有 n8n
月成本估算
$0 X API + $15 Claude API + $20 n8n + $0 Mac Mini(沉沒成本)= ~$35/月
建置時間
1 個工程師 · 2 個工作天 · 含 dry-run 兩週後上線
合規評等
⚠ 違反 X ToS · 個人帳號低頻原創內容,被執行的機率低但非零
技術成熟度
2026 年具備 turnkey 等級的部署體驗 · GitHub 93k★ · 有活躍社群支援
建議施行
,前提是:(1) 接受尾部風險、(2) 嚴守 Ch 07 的 7 條紀律、(3) Plan B 寫成 runbook 放在 Notion

下一步具體 action item

結語務實評估
再行動

X API Basic 方案每月 $200,對規模較小的團隊而言費用不成比例。Browser-Use 提供了一個可行的替代路徑。

這條路徑違反 X ToS,存在帳號被停權的尾部風險。技術本身在 2026 年已成熟,能否長期運行取決於操作紀律與風險承受度。

低頻率、單帳號、原創內容,是降低執法風險的三個關鍵條件。
在此範圍內使用,風險可控。

— Tenten Engineering · 2026.05