自動化更新 Claude Projects 知識庫:完整設定指南

自動化更新 Claude Projects 知識庫:完整設定指南

透過 Playwright、Claude in Chrome、或 Claude Cowork 自動上傳/更新 Claude Projects 的知識檔案


背景:為什麼需要這個?

Claude Projects 目前沒有提供 API 來直接上傳或管理知識庫檔案。唯一的方式是透過 claude.ai 的網頁介面手動操作。但對於像 Tenten 這樣需要頻繁更新多個 Project(ALUXE、JOY COLORi、KGI Life 等)的團隊來說,手動操作不切實際。

解決方案:用瀏覽器自動化來模擬人類操作


方案總覽

方案 難度 適合場景 需要的東西
A. Playwright 腳本 :star::star: 排程自動化、CI/CD 整合 Node.js + 已登入的 Chrome session
B. 遠端 Chrome + Claude in Chrome :star::star::star: 已有跑 Claude 帳號的伺服器 Mac Mini / 任何有 Chrome 的伺服器
C. Claude Cowork + Plugin :star: 桌面操作、低頻率更新 Claude Desktop App(macOS / Windows)
D. Cowork 排程任務 :star: 定時自動執行 Claude Desktop App + Paid Plan

方案 A:Playwright 自動化腳本

這是什麼?

用 Playwright(微軟的瀏覽器自動化框架)寫腳本,模擬登入 claude.ai → 進入 Project → 上傳檔案。可以在任何伺服器上跑,配合 cron 或 n8n 做排程。

第一步:安裝環境

# 在你的伺服器上(Mac Mini、VPS、或本機)
mkdir claude-project-uploader && cd claude-project-uploader
npm init -y
npm install playwright
npx playwright install chromium

第二步:手動登入一次,儲存 Session

這是最關鍵的步驟——你需要先手動登入 claude.ai,讓 Playwright 記住你的登入狀態。

# 啟動互動式瀏覽器,手動登入 claude.ai
npx playwright codegen --save-storage=claude-auth.json https://claude.ai

這會打開一個 Chromium 視窗:

  1. 正常登入你的 Claude 帳號(Google OAuth 或 Email)
  2. 確認你已經進入 claude.ai 主畫面
  3. 關閉視窗

此時 claude-auth.json 已儲存你的完整 session(cookies + localStorage)。

:warning: 注意:Session 會過期。建議每 1-2 週重新跑一次這個步驟,或在腳本中加入「偵測登入頁面 → 重新認證」的邏輯。

第三步:建立上傳腳本

// upload-to-claude-project.js
const { chromium } = require('playwright');
const path = require('path');

async function uploadToProject({
  projectUrl,    // 例如 https://claude.ai/project/abc123
  filePaths,     // 要上傳的檔案路徑陣列
  authFile = 'claude-auth.json',
  deleteOld = false,  // 是否先刪除舊檔案
  oldFileName = null  // 要刪除的舊檔案名稱
}) {
  const browser = await chromium.launch({
    headless: true,  // 伺服器上用 headless,本機除錯改 false
  });

  const context = await browser.newContext({
    storageState: authFile
  });

  const page = await context.newPage();
  
  try {
    // 1. 前往 Project 頁面
    console.log(`正在前往 Project: ${projectUrl}`);
    await page.goto(projectUrl, { waitUntil: 'networkidle' });
    await page.waitForTimeout(3000);

    // 2. 檢查是否需要重新登入
    if (page.url().includes('/login')) {
      throw new Error('Session 過期,請重新執行 codegen 登入');
    }

    // 3. 如果需要,先刪除舊檔案
    if (deleteOld && oldFileName) {
      console.log(`正在刪除舊檔案: ${oldFileName}`);
      // 找到檔案名稱元素並點擊刪除
      const fileItem = page.locator(`text="${oldFileName}"`).first();
      if (await fileItem.isVisible()) {
        await fileItem.hover();
        // 點擊檔案旁邊的「...」選單
        const menuButton = fileItem.locator('..').locator('button').last();
        await menuButton.click();
        await page.click('text=Delete');
        await page.click('text=Confirm'); // 確認刪除
        await page.waitForTimeout(2000);
        console.log(`已刪除: ${oldFileName}`);
      }
    }

    // 4. 上傳新檔案
    console.log('正在上傳檔案...');
    
    // 點擊「Add content」按鈕
    await page.click('button:has-text("Add content")');
    await page.waitForTimeout(1000);
    
    // 選擇「Upload files」
    await page.click('text=Upload files');
    await page.waitForTimeout(1000);

    // 處理檔案上傳對話框
    const fileInput = page.locator('input[type="file"]');
    await fileInput.setInputFiles(filePaths);
    
    // 等待上傳完成
    await page.waitForTimeout(5000);
    
    console.log('✅ 上傳完成!');
    
    // 5. 儲存更新後的 session
    await context.storageState({ path: authFile });
    console.log('Session 已更新');

  } catch (error) {
    console.error('❌ 錯誤:', error.message);
    // 截圖以便除錯
    await page.screenshot({ path: 'error-screenshot.png' });
  } finally {
    await browser.close();
  }
}

// 使用範例
uploadToProject({
  projectUrl: 'https://claude.ai/project/YOUR_PROJECT_ID',
  filePaths: [
    '/path/to/updated-system-prompt.md',
    '/path/to/knowledge-base.md'
  ],
  deleteOld: true,
  oldFileName: 'system-prompt-v3.md'
});

第四步:配合 n8n 排程

在 n8n 中建立 Workflow:

觸發器(Cron / Webhook)
    ↓
Code Node: 產生新的知識檔案(呼叫 AI API)
    ↓
Write File Node: 儲存到 /tmp/updated-knowledge.md
    ↓
Execute Command Node:
    node /opt/scripts/upload-to-claude-project.js \
      --project "https://claude.ai/project/XXX" \
      --file "/tmp/updated-knowledge.md"

方案 B:遠端 Chrome + Claude in Chrome

這是什麼?

如果你已經有一台伺服器(例如 Mac Mini M4)跑著你的 Claude 帳號,且安裝了 Claude in Chrome 擴充功能——你可以利用這台機器作為「瀏覽器自動化中繼站」。

架構圖

你的工作機 / n8n                  Mac Mini(遠端伺服器)
┌──────────────────┐             ┌─────────────────────────────┐
│ 觸發器            │── HTTP ──→ │ Chrome(已登入 Claude)       │
│ - n8n webhook    │             │ + Claude in Chrome Extension │
│ - cron job       │             │ + Remote Debugging Port 9222 │
│ - OpenClaw       │             │                             │
└──────────────────┘             └─────────────────────────────┘

第一步:在遠端伺服器上啟動 Chrome(帶 Remote Debugging)

# macOS
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome \
  --remote-debugging-port=9222 \
  --user-data-dir="$HOME/chrome-claude-profile" \
  --no-first-run &

# Linux
google-chrome \
  --remote-debugging-port=9222 \
  --user-data-dir="$HOME/chrome-claude-profile" \
  --no-first-run &

:light_bulb: 重要:用 --user-data-dir 指定專用的 Chrome Profile,這樣你的 Claude 登入狀態會一直保持。

第二步:確認 Chrome 可遠端連線

# 在遠端伺服器上測試
curl http://localhost:9222/json/version

# 從你的工作機測試(確保防火牆有開 9222)
curl http://YOUR_SERVER_IP:9222/json/version

第三步:從任何機器連線操控

// remote-upload.js
const { chromium } = require('playwright');

async function remoteUpload() {
  // 連接到遠端 Chrome 實例
  const browser = await chromium.connectOverCDP(
    'http://YOUR_MAC_MINI_IP:9222'
  );
  
  // 取得已有的 context(已登入的 session)
  const contexts = browser.contexts();
  const page = await contexts[0].newPage();
  
  // 接下來跟方案 A 一樣操作
  await page.goto('https://claude.ai/project/YOUR_PROJECT_ID');
  // ... 上傳邏輯 ...
  
  await page.close();
  // 注意:不要 browser.close(),這會關掉遠端的 Chrome
}

第四步:用 Claude in Chrome 直接操作

另一個更簡單的方式——直接在遠端機器的 Claude in Chrome 擴充功能裡貼上指令:

前往我的 Claude Project:https://claude.ai/project/xxxxx

執行以下步驟:
1. 進入 Project Knowledge 區域
2. 刪除名為「system-prompt-v3.md」的舊檔案
3. 點擊「Add content」→「Upload files」
4. 從我的桌面上傳「system-prompt-v4.md」
5. 確認上傳完成後回報

Claude in Chrome 會利用已經登入的 Chrome session 來執行這些操作。


方案 C:Claude Cowork Plugin

這是什麼?

Claude Cowork 是 Anthropic 在 2026 年初推出的桌面 Agent 工具。它可以直接存取你電腦上的檔案、搭配 Claude in Chrome 操作瀏覽器。你可以建立一個自訂 Plugin 來自動化 Claude Projects 的檔案更新。

重要前提

  • 需要 Claude Desktop App(macOS 或 Windows)
  • 需要付費方案(Pro $20/月 以上)
  • Cowork 目前尚不支援直接操作 Projects(官方表示尚未整合)
  • 但可以透過 Claude in Chrome connector 來操作 claude.ai 網頁介面

第一步:啟用 Cowork

  1. 下載/更新 Claude Desktop App:claude.com/download
  2. 打開 App → 點擊上方的「Cowork」分頁
  3. 在 Settings → Cowork 中設定 Global Instructions

第二步:啟用 Claude in Chrome Connector

  1. 在 Chrome 安裝 Claude in Chrome 擴充功能
  2. 在 Claude Desktop → Settings → Connectors 中啟用「Claude in Chrome」
  3. 這讓 Cowork 可以操控你的瀏覽器

第三步:建立自訂 Plugin

在你的電腦上建立以下資料夾結構:

claude-project-updater/
├── .claude-plugin/
│   └── plugin.json
├── commands/
│   └── update-project.md
└── skills/
    └── project-upload.md

.claude-plugin/plugin.json(Plugin 設定檔):

{
  "name": "claude-project-updater",
  "description": "自動更新 Claude Projects 知識庫檔案",
  "version": "1.0.0",
  "author": "Tenten"
}

commands/update-project.md(Slash 指令):

---
description: 更新指定 Claude Project 的知識庫檔案
arguments:
  - name: project_name
    description: "Project 名稱(例如:ALUXE、JOY-COLORi、KGI-Life)"
    required: true
  - name: file_path
    description: "要上傳的檔案路徑"
    required: true
  - name: old_file_name
    description: "要替換的舊檔案名稱(可選)"
    required: false
---

# 更新 Claude Project 知識庫

你需要透過 Claude in Chrome 來完成以下任務:

## Project URL 對照表
- ALUXE: https://claude.ai/project/[ALUXE_PROJECT_ID]
- JOY-COLORi: https://claude.ai/project/[JOYCOLORI_PROJECT_ID]
- KGI-Life: https://claude.ai/project/[KGI_PROJECT_ID]
- Neteon: https://claude.ai/project/[NETEON_PROJECT_ID]
- SD-Health: https://claude.ai/project/[SDHEALTH_PROJECT_ID]

## 執行步驟

1. 根據 `$ARGUMENTS.project_name` 找到對應的 Project URL
2. 使用 Claude in Chrome 瀏覽器工具前往該 URL
3. 等待頁面載入完成
4. 如果提供了 `$ARGUMENTS.old_file_name`:
   a. 在 Project Knowledge 區域找到該檔案
   b. 點擊檔案旁的選單 → 刪除
   c. 確認刪除
5. 點擊「Add content」→「Upload files」
6. 上傳 `$ARGUMENTS.file_path` 指定的檔案
7. 等待上傳完成
8. 回報結果:成功/失敗 + 截圖

## 錯誤處理
- 如果頁面導向登入頁 → 提醒使用者需要先登入
- 如果找不到舊檔案 → 跳過刪除步驟,直接上傳
- 如果上傳失敗 → 截圖並回報錯誤訊息

skills/project-upload.md(自動觸發的技能):

---
description: 當使用者提到更新 Claude Project 或上傳知識庫時自動啟用
globs:
  - "**/*system-prompt*"
  - "**/*knowledge*"
  - "**/*project-update*"
---

# Claude Project 知識庫管理技能

當偵測到使用者想要更新 Claude Project 的知識庫檔案時,使用此技能。

## 核心原則
- 永遠先確認目標 Project 名稱
- 上傳前先備份舊檔案(複製到本地 backup 資料夾)
- 使用 Claude in Chrome 來操作 claude.ai 網頁
- 操作完成後截圖確認

## 支援的檔案格式
- .md(Markdown)
- .txt(純文字)
- .pdf(PDF 文件)
- .csv(資料檔)

## 注意事項
- Claude Projects 沒有「取代」功能,必須先刪除再上傳
- 單次最多上傳 5 個檔案
- 檔案大小限制請參考 claude.ai 的規定

第四步:安裝 Plugin

在 Cowork 中安裝你的自訂 Plugin:

  1. 打開 Claude Desktop → 切換到 Cowork 模式
  2. 點擊左側欄的「Customize」
  3. 點擊「Browse plugins」→「Upload custom plugin」
  4. 選擇 claude-project-updater/ 資料夾
  5. 安裝完成

第五步:使用

在 Cowork 中輸入:

/update-project ALUXE ~/Documents/aluxe-system-prompt-v4.md system-prompt-v3.md

或用自然語言:

幫我把桌面上的「aluxe-knowledge-2026-03.md」上傳到 ALUXE 的 Claude Project,
替換掉舊的「aluxe-knowledge-2026-02.md」

方案 D:Cowork 排程任務(Scheduled Tasks)

這是什麼?

Cowork 最近推出了排程任務功能。你可以設定一個任務,讓 Claude 每天/每週自動執行——例如自動檢查某個資料夾是否有新的知識檔案,有的話就自動上傳到 Claude Projects。

設定方式

  1. 在 Cowork 中開始一個新任務
  2. 輸入 /schedule
  3. Claude 會問你幾個問題:
    • 任務描述:「檢查 ~/claude-projects-sync/ 資料夾,如果有新的 .md 檔案,使用 Claude in Chrome 上傳到對應的 Claude Project」
    • 執行頻率:Daily / Weekly / 自訂
    • 執行時間:例如每天早上 9:00

排程任務範例 Prompt

我想設定一個每日排程任務:

1. 掃描 ~/claude-projects-sync/ 資料夾
2. 資料夾結構如下:
   - ~/claude-projects-sync/aluxe/     → ALUXE Project
   - ~/claude-projects-sync/joycolori/ → JOY COLORi Project
   - ~/claude-projects-sync/kgi-life/  → KGI Life Project

3. 如果某個子資料夾中有 .md 或 .txt 檔案:
   a. 用 Claude in Chrome 前往對應的 Claude Project
   b. 刪除 Project 中同名的舊檔案
   c. 上傳新檔案
   d. 上傳成功後,將檔案移到 ~/claude-projects-sync/uploaded/ 備份

4. 產生一份簡短的更新報告,存到 ~/claude-projects-sync/logs/

執行頻率:每個工作日早上 9:00

:warning: 限制:排程任務只在 Claude Desktop App 開啟且電腦未休眠時才會執行。


實務建議

Session 管理(最重要的問題)

不管用哪個方案,最大的挑戰是 claude.ai 的 session 會過期。建議:

  1. Playwright 方案:在腳本中加入 session 過期偵測,發現過期時發 Slack/Telegram 通知你手動重新登入
  2. 遠端 Chrome 方案:Chrome Profile 的 session 通常比 cookie 檔更持久,只要不手動登出就會一直有效
  3. Cowork 方案:Cowork 使用你的 Claude Desktop App 登入狀態,只要 App 保持登入就沒問題

建議的整合架構(for Tenten)

n8n / OpenClaw 觸發
      ↓
產生更新的知識檔案
(例如:更新後的 ALUXE 商品資料、KGI 最新 FAQ)
      ↓
儲存到 ~/claude-projects-sync/{project-name}/
      ↓
┌─ 方案 A:Playwright 腳本自動上傳(推薦用於伺服器)
│
├─ 方案 C/D:Cowork 排程任務自動偵測並上傳(推薦用於桌面)
│
└─ 方案 B:遠端 Chrome CDP 連線上傳(推薦用於已有伺服器的情境)

哪個方案最適合你?

你的情境 推薦方案
Mac Mini M4 伺服器已跑 Chrome + Claude 帳號 方案 B(遠端 Chrome + CDP)
想要最簡單、不寫程式碼 方案 C + D(Cowork Plugin + 排程)
需要跟 n8n / CI/CD 整合 方案 A(Playwright 腳本)
低頻率、手動觸發就好 方案 C(Cowork 手動指令)
全自動、無人值守 方案 A + B 組合

快速上手(最快 10 分鐘搞定)

如果你只是想最快開始用,推薦這個路徑:

  1. 打開 Claude Desktop App → 切換到 Cowork
  2. 確保已啟用 Claude in Chrome connector
  3. 直接在 Cowork 中輸入:
幫我把這個檔案上傳到我的 Claude Project。

Project URL: https://claude.ai/project/YOUR_ID
檔案位置: ~/Desktop/updated-knowledge.md
要替換的舊檔案: knowledge-v2.md

請用 Claude in Chrome 瀏覽器工具來操作 claude.ai 網頁完成這件事。

就這麼簡單。Cowork 會透過 Chrome 擴充功能幫你完成整個操作。


附錄:完整 Playwright 腳本(含錯誤處理)

如果你要走方案 A 的完整版本,我可以在下一輪對話中提供包含以下功能的完整腳本:

  • Session 過期自動偵測
  • Slack/Telegram 通知
  • 多 Project 批次上傳
  • 上傳前/後截圖記錄
  • n8n webhook 整合
  • retry 機制

需要的話請告訴我!