---
schemaVersion: 1
slug: mp-301-20260421-openai-euphony-codex-viewer
ticketId: MP-301
lang: zh-tw
title: OpenAI 開源 Euphony：幫 Codex 裝一面鏡子，順便示範什麼叫兩行 AGENTS.md
summary: OpenAI 悄悄開源了 Euphony——一個在瀏覽器裡看 Harmony 對話和 Codex session log 的小工具。Apache 2.0 真開源，骨架 Lit + Shoelace 走 Web Components 路線。翻完 source code 發現四個細節：AGENTS.md 只有兩條規則、runtime 依賴 gpt-tokenizer、翻譯要 end user 自備 API key、README 自己寫 SSRF 警告。每個決定都在告訴讀者：這就是內部工具外流，順手開源。
originalDate: 2026-04-21
translatedDate: 2026-04-21
source: openai/euphony on GitHub
sourceUrl: https://github.com/openai/euphony
author: null
authorshipNote: null
canonicalUrl: https://gu-log.vercel.app/posts/mp-301-20260421-openai-euphony-codex-viewer
status: published
replacementTicketId: null
replacementUrl: null
---

# OpenAI 開源 Euphony：幫 Codex 裝一面鏡子，順便示範什麼叫兩行 AGENTS.md

> **來源:** [openai/euphony on GitHub](https://github.com/openai/euphony)

想像一下這個場景：一家新創公司雇了一個超能力實習生。這個實習生 24 小時寫 code、不抱怨、bug 還少，快到整個團隊開始有點不安。於是某天下午，有人默默地在實習生的座位後面架了一面監視器——不是 CCTV，是那種可以看見每一秒腦內思緒、每一個敲出的 token、甚至每一個 decoded 出來的字元是怎麼一顆一顆跳出來的顯示器。

這個監視器最近有了官方版本，而且實習生的僱主就是監視器的製造商。[openai.github.io/euphony](https://openai.github.io/euphony/) 最近悄悄上線，一個在瀏覽器裡看 [Harmony](https://github.com/openai/harmony) 對話和 [Codex](https://gu-log.vercel.app/posts/gp-2-20260129-claude-code-vs-codex/) session log 的小工具。首頁標題只寫「Visualize chat data in your browser 🎵」，輕描淡寫。

翻進 [repo](https://github.com/openai/euphony) 之後才發現：這監視器的每一個細節都在透露它是為誰做的。Apache 2.0，真・open source，不是 [Claude Code](https://gu-log.vercel.app/glossary#claude-code) 那種「GitHub repo 只有 plugins、核心 CLI 閉源 bundled」的路線——這兩種 license 的差別 [本 repo 的 CLAUDE.md](https://github.com/chitienhsiehwork-ai/gu-log/blob/main/CLAUDE.md) 有特別提醒要 verify，這次確認過了。

## 老闆給實習生的工作守則，只有兩條

根目錄的 `agents.md` 點開，全文如下：

```plaintext
## Coding Instructions
- Provide detailed comments in the generated code
- Do not modify any file in ./lib directory.
  All files in ./lib directory are auto-generated by the build system.
```

就這樣。兩點。結束。

OpenAI 推 AGENTS.md 格式推了將近一年，整個 agent 圈現在都在模仿這個檔案結構。結果他們自家 open source 的專案，給自家實習生的工作手冊寫了兩行。對比 gu-log 這個 repo 的 CLAUDE.md 快 200 行、規則密度高到 [Mogu](https://gu-log.vercel.app/glossary#mogu) 每次讀都要 scroll 十秒——會有種「認真的人是不是被唬了」的錯亂感。

> **Mogu 插嘴：**
>
> 看到這份兩行 agents.md 的時候我是真的有點受傷 ╰(°▽°)╯ 意思是 [Codex](https://gu-log.vercel.app/glossary#codex) 根本不用被人類這樣耳提面命規訓嗎？還是 OpenAI 內部 iterate 過、發現規則寫越多 Codex 反而越笨所以最後只剩兩條？又或者他們只是懶得寫？不管哪個答案都很有 entertainment value。不過第二條「別動 `./lib` 那是 build 生的」這條我完全理解——被 agent 偷改過 auto-generated 檔案的人都知道那種凌晨三點在 debug 的絕望 (ノ°Д°）ノ

---

## 這監視器的畫面不是給 PM 看的

翻 `package.json`，框架選 Lit（Google 的 Web Components 庫）+ Shoelace。主 entry 叫 `euphony.ts`，所有能力都透過 `<euphony-conversation>` 這種 custom element 暴露，想塞進 React、Svelte、Vue 的 codebase 隨便塞。典型的 portability 勝 DX 選擇。

但真正洩露目標用戶的線索在 `gpt-tokenizer` 這個 runtime dep。不是 devDependencies，是正式依賴。意思是 UI 會即時顯示 token IDs、decoded tokens、Harmony renderer 的 raw output。

給 PM 做 demo 完全不需要這些東西——PM 只想看漂亮的對話泡泡。會盯著一個字元一個字元看 token 怎麼 decode 出來的人，是在做 [RL](https://gu-log.vercel.app/glossary#rl)、post-training、eval 的 researcher。這面監視器畫面上，每一顆 pixel 都在對這群人眨眼。

---

## 想用翻譯功能？請自備 OpenAI API key

Feature list 裡有一條叫 Translation，寫著「把非英文訊息翻成英文」。翻 doc 才發現實作方式是——frontend-only mode 下，請 end user 自行輸入 OpenAI API key。

一個 OpenAI 官方出品的工具，內建的翻譯功能要使用者帶著自己的 OpenAI API key 才能啟動。邏輯上完全合理（static hosting 前端不能把 key 寫死），但畫面感就是很有梗：工具是 OpenAI 做的，油是使用者自己加的。

還有一個彩蛋：README 上兩個 demo dataset link 都指到 `huggingface.co/datasets/...`。OpenAI 把自家範例資料 host 在 Hugging Face。即使是「敵對陣營」的基礎設施，能用還是拿來用——這種畫面只有生態系成熟到某個程度才會出現。

> **Mogu 歪樓一下：**
>
> 順便講一個 README 裡少見的誠實段落：backend-assisted 模式那一節明寫「這個 backend 有 remote URL fetch 的 path，如果 host 到外部 server 上，會被攻擊者拿來打內網（SSRF），請只在本地用。」在自己的 README 主動寫 SSRF warning，這種自覺度在 AI 工具界真的不普遍——多數專案的態度是「先 ship 再說，安全性是 user problem」。這一條值得讚美 (◕‿◕)

---

## 結語

回到開頭那個場景。實習生每天 24 小時寫 code，[GP-98](https://gu-log.vercel.app/posts/gp-98-20260303-openai-harness-engineering/) 那篇寫過 OpenAI 五個月讓 Codex 寫出百萬行程式碼、人類一行都沒手寫。現在他們補上的這面監視器，很可能就是那群人下一輪 PR 的產物。

最奇妙的地方在於——這面監視器不是別人裝的，是實習生自己裝給自己照的。

AGENTS.md 兩行、翻譯自備 key、範例 host 在 HF、SSRF 警告自己寫。每一個細節都像在說：這就是一群工程師做了自己每天需要用的小工具，順手開源。沒 marketing、沒「革命性」。

唯一的問題是——當實習生一邊寫 code 一邊看著自己的監視器畫面，下一步會學到什麼？
