2026 年 6 月 18 日之前,要把一次排查的結果拿給同事看,得自己想辦法。貼一整面終端機捲軸,或者請 Claude 寫一個獨立的 HTML 檔,自己按兩下打開確認沒破版,再把檔案丟進 Slack。對方下載、打開,看到的是你按下產生那一刻的樣子。之後任務又跑出什麼,那個檔案不知道。

那天 Anthropic 的部落格宣布 Claude Code 的 session 成果可以直接變成 claude.ai 上的一個網址,原文寫的是「live, shareable visual pages… that update themselves as your session works」。技術文件那邊的界線則很清楚,我查證當天讀到的版本是這樣寫的:

“An artifact is a capture of work: one self-contained page with no backend, so it can’t serve multiple routes. For a hosted internal tool with a backend, deploy it on your own infrastructure instead.”

本站 6 月 22 日那篇Artifacts 教學就是照這條線寫的。我在裡面用了照片跟店面的比方:artifact 像你拍的一張照片,不像你開的一家店,照片裡的收銀機不會真的收錢。

三個月後,收銀機開始收錢了。而那句話還在原地。

另一條線的持久化,早了將近八個月

這裡有個同名的東西很容易混掉。claude.ai 網頁跟桌面版的「聊天」裡也有 Artifacts,那套從 2025 年 6 月 25 日就在,比 Claude Code 這邊早了將近一年,2025 年 7 月上了 iOS 跟 Android,同年 7 月底擴大到 Team 與 Enterprise 方案。

真正該記住的是 2025 年 10 月 21 日那次更新,標題直接寫了 Artifacts now support MCP and persistent storage。聊天版的 Artifacts 從那時候起可以存資料,而且 Help Center 對這套寫得相當完整:Pro、Max、Team、Enterprise 方案可用;儲存分個人跟共用兩種模式,個人模式每個人只看得到自己那份,共用模式所有人看同一份;每個 artifact 上限 20 MB,只收純文字,圖片、檔案、二進位資料都不行;而且只有發布之後才存得進去,開發跟測試階段的寫入一律不會成功。連退場路徑都交代了:取消發布會把個人跟共用的資料一起永久刪除,同一個 artifact 之後不能再發布一次。

開發者實際要呼叫什麼,官方反而沒給出精確的方法簽名。社群觀察到的用法大致是 window.storage 上的 set 跟 get,第三個參數決定資料進個人還是共用。這個簽名只有社群專案佐證,Anthropic 沒有逐字文件承認過。

落差在這裡。Claude Code 這邊的版本,連方法名稱都還沒進過主文件。

讓頁面看起來是活的

回到 Claude Code 這條線。

2026 年 7 月 13 到 17 日那一週(官方週報 Week 29,release v2.1.207 到 v2.1.212),已發布的 artifact 學會了一件事:每次有人打開它,它可以去呼叫 MCP connector。

呼叫不是用發布者的帳號跑的。每一次呼叫走的是「正在看這一頁的那個人」自己的 claude.ai 帳號連線,由 claude.ai 代為發出,頁面本身從頭到尾看不到任何人的憑證。第一次呼叫之前,claude.ai 會先跟這位檢視者要權限。這個設計後來讓「沒有後端」那句話很難講得乾脆。

所以你發布一份 dashboard 給團隊,每個人打開看到的是各自帳號權限下的即時資料,而不是你建置那一刻的快照。你的本機 MCP server 不算在內:.mcp.json 裡設定的那些只在 Claude 建置頁面的當下派得上用場,發布出去的頁面呼叫不到它們,只有掛在 claude.ai 帳號底下的 connector 才行。

這一步解掉的是資料會過期。它沒有解掉另一件事:使用者能不能在這頁上留下任何東西。讀的來源從快照換成即時了,頁面上還是沒有一個地方可以寫。

留言是掛在一次對話後面的尾巴

接下來兩版把「寫」開了一條縫,但開在旁邊。v2.1.221 之後,Team 或 Enterprise 方案可以讀 artifact 上的留言;v2.1.228 之後,Claude 可以自動回覆那些留言。這兩版各自落在哪一天,官方文件只寫了「需要這個版本以上」,沒給日曆日期,我也不打算估。

綁定條件很硬。Claude Code 只在那個 session 還跑著的期間 watch 那份 artifact 的留言,session 一結束,自動回覆就停。文件還補了一條節流:同一份 artifact 在一小時內處理滿 60 則留言或討論串觸發之後,Claude 會自己停下來不再回。

這仍然不是一個常駐的服務。對話結束,尾巴就不動了。

changelog 裡開始出現 artifact database

2026 年 9 月 10 日到 19 日之間,v2.1.268 到 v2.1.278 這一串版本的 changelog 裡,出現了一個在主文件裡完全不存在的名詞。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
v2.1.271 (2026-09-14)
Changed artifact database reads that save into the session scratchpad
so they no longer stop for working-folder approval

v2.1.272 (2026-09-15)
Fixed artifact database writes: an update can now remove a single field
instead of rewriting the whole document

v2.1.278 (2026-09-19)
Improved the Artifact tool's error when a page declares a capability its
contract version lacks: it now lists every supported capability and notes
when a newer contract version has it

v2.1.278 (2026-09-19)
Improved artifact watching: a session can now watch up to 10 published
artifacts at once for republishes made elsewhere, up from 5

這四句話沒有一句在介紹功能。它們是 bug 修正跟改良條目,寫給已經在用的人看。但正因為這樣,它們洩漏的結構比任何一篇公告都具體。

先從寫入那條看。「an update can now remove a single field instead of rewriting the whole document」這句話裡,document 是名詞。有 document,就有一個把欄位包起來的單位;而「刪掉單一欄位」跟「整份重寫」被寫成兩條不同的路徑,代表這個儲存層支援部分更新的語意,不是把整坨 JSON 蓋過去了事。這是資料庫的講法,不是瀏覽器本機儲存的講法。

讀的那一側落在別的地方。讀出來的東西會進 session 的 scratchpad,而且原本會觸發工作目錄的權限確認。也就是說讀取這個動作是 Claude Code 這邊的工具在做,落地在你的檔案系統上,不是純粹在瀏覽器裡跑完就算。

最值錢的是 capability 那條。「a page declares a capability its contract version lacks」,頁面要「宣告」自己需要哪些 capability,而這些 capability 掛在一個帶版本號的 contract 上面,版本不夠新就缺。這是一整套權能協商機制的輪廓,跟「一頁自己包好的靜態 HTML」那個形象差得非常遠。

配額是順帶交代的:一個 session 可以同時盯著 10 份已發布的 artifact,看它們有沒有在別處被重新發布,上限從 5 提到 10。

把這幾條擺在一起,「沒有後端」那句話就開始搖晃。

我原本的讀法是主詞不一樣。文件那句 no backend 講的是頁面本身那個 HTML 沙盒,它確實還是靜態的、不能自己認證檢視者;而 read_dbwrite_db 是 Claude 手上那個 Artifact 工具的能力,資料放在 Anthropic 那一側,跟頁面是兩件事。兩句話各說各的,都不算錯。

這個讀法撐不太住。

官方沒有任何一份文件做過這個區分。code.claude.com/docs/en/artifacts 通篇沒有 database、capabilities、contract 這三個字。連官方自己的「這週新功能」摘要都還沒寫到:那系列目前最新一期是 Week 37,涵蓋 9 月 7 日到 11 日,裡面跟 artifact 有關的唯一一行是「Claude 可以替它發布的每個 artifact 挑一個瀏覽器分頁圖示」。Week 38 的網址回 404。9 月 14 日之後那批修正,到查證當下還沒被摘要進任何一篇對外的東西。

PHX-1014 那張單

9 月 15 日,有人在 claude-code 的 repo 開了 issue #94426,標題是 [BUG] Artifact db capability — live sync doesn't deliver updates to the page on reload。重現步驟寫得很乾淨:

“Edit a document via the page’s own UI (adds/changes a field), confirm the write succeeded via read_db. Fully reload the page (not just close/reopen a panel within the same tab). The reload shows the pre-edit state, not the current database state.”

實際案例是一個派工系統。某個 job(編號 PHX-1014)透過頁面自己的編輯表單新增了第二台車輛並存檔,用 read_db 查,兩台車都在、版本號有遞增。然後把頁面完整重新整理。桌機、無痕視窗、手機都試過,畫面上還是只有原本那一台。回報者把 contract 版本從 0.2.43 一路升到 0.2.49,沒有改善。他標的 Claude Code 版本是 2.1.272,正好就是前面那條 Fixed artifact database writes 的同一版。

那一版修的是「更新可以只動一個欄位,不用整份重寫」,不是「重新整理之後讀得到最新狀態」。這是兩個不同的洞。

這張單開到今天還是 Open,底下沒有任何一則 Anthropic 員工的回覆。

回頭看我前面那個「主詞不一樣」的讀法。重現步驟的第一句就是 Edit a document via the page’s own UI,寫入是從頁面上那個表單按下去的。這條線不是只在 Claude 那一側跑,它穿過頁面。所以把「沒有後端」解釋成「那句話只在講沙盒」,我沒有把握。目前我只敢說兩件事:那句話現在至少不完整,而且沒有任何一份官方文件說明它現在完整到哪裡。

會讓我改掉這個判斷的條件很具體。如果 artifacts 那份文件之後補上 read_db,而且寫在「頁面能做什麼」那一節底下,那就代表頁面自己確實能呼叫,那句 no backend 是單純過期,跟主詞無關。如果補在「Claude 這個工具能做什麼」底下、並且明講頁面不能直接碰,那我前面那個讀法才成立。現在兩種都有可能。

這篇的一切都來自官方文件、官方 changelog 與週報、官方部落格、Claude Help Center,以及那一則公開的 GitHub issue。我只讀了文件與 changelog,沒有發布過任何帶資料庫的 artifact,也沒有呼叫過 read_dbwrite_db,這整套能力我一次都沒有實際操作過。版本號對應的確切日期,除了 v2.1.207 到 v2.1.212 那段有官方週報 Week 29 佐證之外,其餘只有文件裡「需要這個版本以上」「在這個版本之前」的相對敘述,我沒有自己估。

那四個字什麼時候消失

要決定現在敢不敢把這個能力用在正式的東西上,手上的材料就這些。能力是真的,有人在真實案例上用它,Anthropic 正在逐版修它。但沒有一份完整的官方說明描述它,而且一個會讓使用者看到舊資料的同步問題還開著。

接下來那幾格會怎麼填,比這些材料本身有意思。Week 38 的週報遲早要發。它可能正式介紹這個資料庫能力,也可能跳過不提,而 artifacts 那份文件裡的 No backend 被安靜地改掉。也可能兩件事都沒發生,這個能力繼續只活在逐版 changelog 裡,#94426 底下繼續沒有人回。

這幾種走向分別代表一個正在成形的功能、一份落後的文件,跟一個被放著的實驗。要判斷是哪一種,不必等公告。去看那份文件的 Page constraints 表格,No backend 那一列什麼時候消失就知道了。