diff --git a/docs/DEPLOYMENT.md b/docs/DEPLOYMENT.md index a7819bf..5dc5a25 100644 --- a/docs/DEPLOYMENT.md +++ b/docs/DEPLOYMENT.md @@ -260,7 +260,10 @@ Brazilian Portuguese lives at `/pt-br/` and carries `hreflang="pt-BR"` (registry the script tag rather than `zh-CN` because it names what the text is (Simplified) and not a country, and it makes the browser pick Simplified glyphs. Both have one plural form (`other`). `tightenCjk` (`scripts/locales.mjs`) drops the English space around links between CJK characters; - `"latinSpacing": false` (Japanese) also drops it beside Latin names. `styles.css` ends with the + `"latinSpacing": false` (Japanese) also drops it beside Latin names. It also drops the English + space at an emphasis join (``, ``, ``) between CJK characters, so a heading whose + second half is emphasised reads 从一台空白的电脑到你的第一个智能体 (SITE-048); Korean, + written with spaces, keeps it. `styles.css` ends with the CJK block: system CJK font stacks, no negative tracking, taller headings. `"phraseBreaks": true` (Japanese, 2026-10-11) cuts the text of h1–h3 into phrases with BudouX (`budoux`, a pinned dev dependency) and marks each boundary with ``; the CJK block sets `word-break: keep-all` on those diff --git a/docs/HANDOFF.md b/docs/HANDOFF.md index 427e4a1..91c1f17 100644 --- a/docs/HANDOFF.md +++ b/docs/HANDOFF.md @@ -1,3 +1,24 @@ +# Current handoff — SITE-048: no space at an emphasis join in Chinese and Japanese — 2026-10-15 + +Objective (backlog SITE-048): a heading whose second half is emphasised kept the English source's space at the +join in languages written without spaces: zh-hans /start/ read "从一台空白的电脑 到你的第一个智能体". Record: +[evidence/2026-10-15-site-048/README.md](evidence/2026-10-15-site-048/README.md). + +Done: the cause is the generator, not a catalog — `localizePage` keeps the English fragment's trailing space +before ``, and `tightenCjk` (`scripts/locales.mjs`) dropped it only around links and code. It now also drops it +at an ``/``/`` join between CJK characters (or after full-width punctuation closing the emphasis). +Korean keeps it (written with spaces; Hangul is not in the CJK class), as do the spaced languages. One catalog value +carried the same stray space (zh-hans /start/ meta description, `i18n/zh-hans/start.json`). Pages regenerated with +`npm run locales`, copy projections refreshed; DEPLOYMENT "Languages" names the rule. + +Checks run: two new tests in `scripts/locales.test.mjs` (failed before the fix with 19 hits on 14 zh-hans/ja pages, +pass after); `npm run check` exit 0; `npm run build` 224 entries; WebKit check (see the record). + +Open: kicker/caption spans (`工具包成员 状态…`, form ``) keep their space on purpose: they are +separate visual elements, not an emphasis join. SITE-040, SITE-041, SITE-026 as before. + +Next task: SITE-040. + # Current handoff — SITE-047: /start/ says per system what setup installs — live, 2026-10-15 Objective (backlog SITE-047): /start/ said "Fabric needs macOS on Apple silicon or Intel". Fabric 0.3.5 ships Windows and Linux builds, and the launcher installs apps only on macOS. Record: [evidence/2026-10-15-site-047/README.md](evidence/2026-10-15-site-047/README.md). diff --git a/docs/backlog.md b/docs/backlog.md index 7b98c36..49521f2 100644 --- a/docs/backlog.md +++ b/docs/backlog.md @@ -52,3 +52,4 @@ rows into the workspace’s agent-workplace goal. IDs persist; completion does n | SITE-045 | One door to setup and Fabric as the home (operator D1–D4, 2026-10-14): the home H1 with one subline; `setup` (not `update`) wherever a visitor starts; header "Set up ↓" → /start/#setup on every page; /start/ command and copy-prompt side by side, manual downloads folded, task-pipeline on /vision/; home #products Fabric first, no launcher card; /fabric/ #works-with and SoftwareApplication data; /fabric/agents/ at Fabric 0.3.5; /business/ one hero action, admin line, size line; /#about notes for investors, contributors and press; the home video's transcript and VideoObject written from its files; ten languages | closed 2026-10-15 — #137 merged as `6729661`; #138 (`9719852`, `releases:sync`: Switchboard 0.6.32, launcher 0.2.4) so the source snapshot matched the live one; deployed from `main` as Worker version `8f40f4bd-db81-4546-967f-9a0f560c60d1`; `verify-live.py` PASS, 257 of 257 | [evidence](evidence/2026-10-14-site-045/README.md), [live check](evidence/2026-10-14-site-045/live.json) | | SITE-046 | Fabric 0.3.5 ships Windows (x64, arm64, Authenticode-signed) and Linux (AppImage, .deb) builds; /fabric/ and /fabric/download/ still offer only the Mac build ("the download page on passioncode.ai offers the Mac build until its own change", v0.3.5 notes); add the Windows and Linux downloads, requirements (Docker Desktop with WSL2 / Docker Engine, Supabase CLI) and limits (signed-in state not read, CO-244; Observatory secret connect on Windows, CO-245), and the facts rows | closed 2026-10-15 — #140 merged as `991691b`; deployed from `main` as Worker version `2c9d1f94-d81b-412c-804e-ba3f95e9e7de`; `verify-live.py` PASS, 263 of 263 checks, 13 download routes (the seven Fabric routes 302 to the v0.3.5 assets) | [evidence](evidence/2026-10-15-site-046/README.md), [live check](evidence/2026-10-15-site-046/live.json); follow-up SITE-047 | | SITE-047 | Found in SITE-046: /start/ still says "Fabric needs macOS on Apple silicon or Intel" (hero caption) and SCN-020's preconditions say the same, now that Fabric 0.3.5 ships Windows and Linux builds. What is true depends on the launcher: whether `setup` installs Fabric on Windows and Linux (launcher README names no platform for it). Read the launcher's code at its released tag, then say on /start/ (ten languages) and in `llms.txt` which systems the one command sets Fabric up on, and that the Windows and Linux builds are on /fabric/#download | closed 2026-10-15 — #142 merged as `52d8c1a`; deployed from `main` as Worker version `1d762e44-8e28-4af1-9e1c-2464417a2337`; `verify-live.py` PASS, 263 of 263 checks, 13 download routes | [evidence](evidence/2026-10-15-site-047/README.md), [live check](evidence/2026-10-15-site-047/live.json) | +| SITE-048 | Headings whose second half is emphasised kept the English space at the join in Chinese and Japanese: zh-hans /start/ read "从一台空白的电脑 到你的第一个智能体" (also /404, /business/thanks/, ja /start/, /404; inline ``/`` in /fabric/, /switchboard/, /vision/, /business/, /inbox/). Drop the space at an emphasis join between CJK characters in the generator (`tightenCjk`, `scripts/locales.mjs`), keep it in Korean and the spaced languages; a test pins it for every generated zh-hans and ja page | in progress 2026-10-15 | [evidence](evidence/2026-10-15-site-048/README.md) | diff --git a/docs/brand/copy/ja-404.md b/docs/brand/copy/ja-404.md index 6176488..eb6a807 100644 --- a/docs/brand/copy/ja-404.md +++ b/docs/brand/copy/ja-404.md @@ -48,7 +48,7 @@ Português (Brasil) エラー 404 -# ページが 見つかりません +# ページが見つかりません リンクが古いか、入力に誤りがある可能性があります。passioncode.ai のすべての情報は、次のページから辿れます diff --git a/docs/brand/copy/ja-business-index.md b/docs/brand/copy/ja-business-index.md index 6eaf18f..8ba07ce 100644 --- a/docs/brand/copy/ja-business-index.md +++ b/docs/brand/copy/ja-business-index.md @@ -172,7 +172,7 @@ Fabric Dashboards 10–25% -例: 時間あたり$50で、ほぼ手作業の業務が週40時間あれば、月173時間になります。エージェントがその25~50%を引き受けると、月43~87時間、つまり月額$2,150~4,350です。 +例:時間あたり$50で、ほぼ手作業の業務が週40時間あれば、月173時間になります。エージェントがその25~50%を引き受けると、月43~87時間、つまり月額$2,150~4,350です。 これは見積もりであり、約束ではありません。展開の前に、パイロットで実際の数値をお客様自身のベースラインと比較して計測します。 diff --git a/docs/brand/copy/ja-inbox-index.md b/docs/brand/copy/ja-inbox-index.md index 268e731..cce4326 100644 --- a/docs/brand/copy/ja-inbox-index.md +++ b/docs/brand/copy/ja-inbox-index.md @@ -211,7 +211,7 @@ macOS DMG · SHA-256 ### エージェントに一文を渡す -アプリで 設定 → Agent accessを開きます。まず、コーディングエージェントに渡す一文が表示されます。エージェントがお客様のCloudflareアカウントにサーバーを作成し、Allowを選ぶと自分で接続します。アドレスもシークレットもコピーしません。エージェントの手順は次のガイドにあります:エージェント向けセットアップガイド。 +アプリで設定 → Agent accessを開きます。まず、コーディングエージェントに渡す一文が表示されます。エージェントがお客様のCloudflareアカウントにサーバーを作成し、Allowを選ぶと自分で接続します。アドレスもシークレットもコピーしません。エージェントの手順は次のガイドにあります:エージェント向けセットアップガイド。 02 diff --git a/docs/brand/copy/ja-start-index.md b/docs/brand/copy/ja-start-index.md index d03ae39..04d10bf 100644 --- a/docs/brand/copy/ja-start-index.md +++ b/docs/brand/copy/ja-start-index.md @@ -48,7 +48,7 @@ Português (Brasil) はじめる · 無料のオープンソース -# 何もないコンピューターから 最初のエージェントまで +# 何もないコンピューターから最初のエージェントまで 働き続け、ほかのエージェントがしたことを知っているエージェントを作りましょう。コマンド1つでツールをセットアップし、あとで同じコマンドが点検します diff --git a/docs/brand/copy/ja-switchboard-agents-index.md b/docs/brand/copy/ja-switchboard-agents-index.md index 88000ec..4fe23d2 100644 --- a/docs/brand/copy/ja-switchboard-agents-index.md +++ b/docs/brand/copy/ja-switchboard-agents-index.md @@ -68,9 +68,9 @@ Switchboard をダウンロード 以下のどのエージェントも Switchboard のツールを使えます。リクエストを処理しているアカウントと残りの利用枠を確認でき、アカウントを切り替えることもできます。カスタムエンドポイントを受け付けるエージェントは、リクエストを Switchboard 経由で送信でき、Switchboard がアカウントを切り替えます。一部のエージェントは Switchboard から直接起動できます。 -ツールのみ。 エージェントは Switchboard のツールに接続し、リクエストはエージェント自身のサービスに送られます。 +ツールのみ。エージェントは Switchboard のツールに接続し、リクエストはエージェント自身のサービスに送られます。 -Switchboard 経由。 エージェントで一度設定するだけです。必要な行は Switchboard が表示します。 +Switchboard 経由。エージェントで一度設定するだけです。必要な行は Switchboard が表示します。 Switchboard から起動。 Switchboard が、プロジェクトフォルダー内で、そのフォルダーのアカウントを使ってエージェントを起動します。 diff --git a/docs/brand/copy/ja-switchboard-index.md b/docs/brand/copy/ja-switchboard-index.md index be76fbe..b27c77a 100644 --- a/docs/brand/copy/ja-switchboard-index.md +++ b/docs/brand/copy/ja-switchboard-index.md @@ -154,7 +154,7 @@ Windows ZIP · SHA-256 長いセッションでは、作業の途中でアカウントの使用量の上限に達することがあります。すると、サインアウトして別のアカウントを探し、サインインし直す間、作業が止まってしまいます。 -Switchboard は 作業 を止めません。ローテーションをオンにすると、次のリクエストは同じプールの別のアカウントに移り、セッションは開いたままです。 +Switchboard は作業を止めません。ローテーションをオンにすると、次のリクエストは同じプールの別のアカウントに移り、セッションは開いたままです。 SWITCHBOARD の中身 diff --git a/docs/brand/copy/zh-hans-404.md b/docs/brand/copy/zh-hans-404.md index b48eebc..0dd4011 100644 --- a/docs/brand/copy/zh-hans-404.md +++ b/docs/brand/copy/zh-hans-404.md @@ -48,7 +48,7 @@ Português (Brasil) 错误 404 -# 这里没有页面 位于此地址 +# 这里没有页面位于此地址 链接可能已过期或输入有误。passioncode.ai 上的内容都可以从下面的页面进入 diff --git a/docs/brand/copy/zh-hans-business-index.md b/docs/brand/copy/zh-hans-business-index.md index 30ce598..16bf1ed 100644 --- a/docs/brand/copy/zh-hans-business-index.md +++ b/docs/brand/copy/zh-hans-business-index.md @@ -172,7 +172,7 @@ Fabric Dashboards 10–25% -示例: 每周 40 小时、大部分靠手工的工作,按每小时 US$50 计,每月是 173 小时;智能体接手其中 25–50%,即 43–87 小时,或每月 US$2,150–4,350。 +示例:每周 40 小时、大部分靠手工的工作,按每小时 US$50 计,每月是 173 小时;智能体接手其中 25–50%,即 43–87 小时,或每月 US$2,150–4,350。 这是估算,不是承诺。在任何推广之前,试点会对照你自己的基线,测出真实的数字。 diff --git a/docs/brand/copy/zh-hans-business-thanks-index.md b/docs/brand/copy/zh-hans-business-thanks-index.md index b916109..5f1911d 100644 --- a/docs/brand/copy/zh-hans-business-thanks-index.md +++ b/docs/brand/copy/zh-hans-business-thanks-index.md @@ -48,7 +48,7 @@ Português (Brasil) 已收到申请 -# 谢谢,申请 已送达 +# 谢谢,申请已送达 我们会阅读每一份申请,并在两个工作日内回复,通常会就你提到的流程问几个问题。确认邮件通常几分钟内送达 diff --git a/docs/brand/copy/zh-hans-fabric-index.md b/docs/brand/copy/zh-hans-fabric-index.md index c3a0801..5072316 100644 --- a/docs/brand/copy/zh-hans-fabric-index.md +++ b/docs/brand/copy/zh-hans-fabric-index.md @@ -96,7 +96,7 @@ Fabric 把每个项目的目标、看板、决策和版本保存在你的电脑 智能体可以完成一项任务,团队却仍然丢掉任务背后的原因。上下文散落在各个聊天里,决策需要重复说明,还得有人把工作重新拼起来。 -我们围绕 项目来构建 Fabric:目标、团队、决策和历史,都应当在下一次会话之后依然保留。 +我们围绕项目来构建 Fabric:目标、团队、决策和历史,都应当在下一次会话之后依然保留。 运行循环 · 发展方向 diff --git a/docs/brand/copy/zh-hans-start-index.md b/docs/brand/copy/zh-hans-start-index.md index 550b71b..4fc01c9 100644 --- a/docs/brand/copy/zh-hans-start-index.md +++ b/docs/brand/copy/zh-hans-start-index.md @@ -48,7 +48,7 @@ Português (Brasil) 开始使用 · 免费且开源 -# 从一台空白的电脑 到你的第一个智能体 +# 从一台空白的电脑到你的第一个智能体 构建持续工作、并且知道其他智能体做过什么的智能体。一条命令安装工具,同一条命令之后也能检查它们 diff --git a/docs/brand/copy/zh-hans-switchboard-agents-index.md b/docs/brand/copy/zh-hans-switchboard-agents-index.md index cc864e9..9a8cfa5 100644 --- a/docs/brand/copy/zh-hans-switchboard-agents-index.md +++ b/docs/brand/copy/zh-hans-switchboard-agents-index.md @@ -68,9 +68,9 @@ Switchboard 可配合 Claude Code、Codex 以及其他热门编码智能体使 下面的每个智能体都可以使用 Switchboard 的工具:它能看到由哪个账号处理自己的请求、还剩多少额度,也可以切换账号。接受自定义端点的智能体还可以把请求经由 Switchboard 发送,由 Switchboard 为它们切换账号。部分智能体可以直接从 Switchboard 启动。 -仅工具。 智能体连接 Switchboard 的工具;它的请求仍发往自己的服务。 +仅工具。智能体连接 Switchboard 的工具;它的请求仍发往自己的服务。 -经由 Switchboard。 在智能体中设置一次即可;Switchboard 会给出需要填写的具体内容。 +经由 Switchboard。在智能体中设置一次即可;Switchboard 会给出需要填写的具体内容。 从 Switchboard 启动。 Switchboard 在项目文件夹中启动智能体,并使用该文件夹的账号。 diff --git a/docs/brand/copy/zh-hans-switchboard-index.md b/docs/brand/copy/zh-hans-switchboard-index.md index 8eb8b8d..0439596 100644 --- a/docs/brand/copy/zh-hans-switchboard-index.md +++ b/docs/brand/copy/zh-hans-switchboard-index.md @@ -154,7 +154,7 @@ Windows ZIP · SHA-256 一次长会话可能在任务进行到一半时达到账号的用量限制。接着工作只能等待:你要退出登录、找到另一个账号,再重新登录。 -Switchboard 让 工作 继续进行。开启轮换后,下一次请求会转到同一账号池中的另一个账号,会话保持打开。 +Switchboard 让工作继续进行。开启轮换后,下一次请求会转到同一账号池中的另一个账号,会话保持打开。 SWITCHBOARD 内部 diff --git a/docs/brand/copy/zh-hans-vision-index.md b/docs/brand/copy/zh-hans-vision-index.md index 2ead37e..40e5689 100644 --- a/docs/brand/copy/zh-hans-vision-index.md +++ b/docs/brand/copy/zh-hans-vision-index.md @@ -72,7 +72,7 @@ Português (Brasil) ## 而在托住模型的东西 -大多数组织已经在试用智能体,但在任何一个职能里,能规模化的不超过 10% 在任何一个职能里,孤立的智能体在会话之间会遗忘,也跟不上自己的账号。它不留下自己做过什么的记录,下一个智能体对它一无所知。我们把托住它的东西称为 支撑框架(harness):模型周围的一切,让智能体随时间持续工作。实验室也用这个词:Anthropic, OpenAI。 +大多数组织已经在试用智能体,但在任何一个职能里,能规模化的不超过 10% 在任何一个职能里,孤立的智能体在会话之间会遗忘,也跟不上自己的账号。它不留下自己做过什么的记录,下一个智能体对它一无所知。我们把托住它的东西称为支撑框架(harness):模型周围的一切,让智能体随时间持续工作。实验室也用这个词:Anthropic, OpenAI。 01 diff --git a/evidence/2026-10-15-site-048/README.md b/evidence/2026-10-15-site-048/README.md new file mode 100644 index 0000000..ff1fdb9 --- /dev/null +++ b/evidence/2026-10-15-site-048/README.md @@ -0,0 +1,30 @@ +# SITE-048 — no space at an emphasis join in Chinese and Japanese (2026-10-15) + +Problem: a heading whose second half is emphasised kept the English source's space at the join in languages +written without spaces. zh-hans /start/ read "从一台空白的电脑 到你的第一个智能体". + +Cause: `localizePage` (`scripts/locales.mjs`) keeps the English fragment's surrounding spaces +("From an empty computer to␠" before ``), and `tightenCjk` removed that space only around links and code. + +Fix: `tightenCjk` drops the space at an ``, `` or `` join between CJK characters, or after full-width +punctuation that closes the emphasis (`示例: 每…`). Korean keeps it (it is written with spaces; +Hangul is not in the CJK class), and so do the spaced languages. One catalog value carried the same stray space: +the zh-hans /start/ meta description (`i18n/zh-hans/start.json`). + +Scan before the fix (the new whole-site test): 19 hits on 14 pages. +- Headings: zh-hans /start/, /404, /business/thanks/; ja /start/, /404. +- Inline emphasis: zh-hans /fabric/, /switchboard/, /switchboard/agents/, /vision/, /business/; ja /switchboard/, + /switchboard/agents/, /business/, /inbox/. + +Kept on purpose: kicker and caption spans (`工具包成员 状态…`) and form `` labels are separate +visual elements, not emphasis joins. + +Checks run: +- `node --test scripts/locales.test.mjs`: the two new tests failed before the fix and pass after. + - "a heading split by emphasis joins without a space in Chinese and Japanese, and keeps it in spaced languages" + - "no generated Chinese or Japanese page puts a space between CJK text and an emphasis or a heading join" +- `npm run check`: exit 0. +- `npm run build`: 224 entries. +- WebKit 26.5 (Playwright 1.62.1), 1440 and 390 px, on built `dist/`. Pages: zh-hans /start/, /404, /fabric/, + /business/thanks/; ja /start/, /switchboard/, /404; ko /start/. The h1 join is "的电脑|到你的", "ーから|最初の", + "ージが|見つか"; ko keeps "에서 |첫 에". No overflow: 16 of 16 PASS. diff --git a/i18n/zh-hans/start.json b/i18n/zh-hans/start.json index 8d59769..6c08798 100644 --- a/i18n/zh-hans/start.json +++ b/i18n/zh-hans/start.json @@ -54,7 +54,7 @@ "branch. You get a contract, a dashboard, tests and a conformance report.": "分支上进行。你会得到一份契约、一个仪表盘、测试和一份符合性报告。", "adapt": "适配", "Set up PassionCode.ai with one command, or one prompt for Claude Code or Codex: the tools, their MCP servers and the skills. The same command checks and repairs a setup you already have. Free and open source.": "一条命令安装 PassionCode.ai,或者把一条提示词交给 Claude Code 或 Codex:工具、对应的 MCP 服务器和技能。同一条命令也能检查并修复已有的配置。免费且开源。", - "From an empty computer to your first agents at work: one command, or five steps by hand. Free and open source.": "从一台空电脑 到第一批智能体开始工作:一条命令,或者手动五步完成。免费且开源。", + "From an empty computer to your first agents at work: one command, or five steps by hand. Free and open source.": "从一台空电脑到第一批智能体开始工作:一条命令,或者手动五步完成。免费且开源。", "Build agents that keep working and know what the others did. One command sets up the tools, and the same command checks them later": "构建持续工作、并且知道其他智能体做过什么的智能体。一条命令安装工具,同一条命令之后也能检查它们", "One command": "一条命令", "ONE COMMAND": "一条命令", diff --git a/ja/404.html b/ja/404.html index f03cb16..08ba4f4 100644 --- a/ja/404.html +++ b/ja/404.html @@ -21,7 +21,7 @@

エラー 404

-

ページが 見つかりません

+

ページが見つかりません

リンクが古いか、入力に誤りがある可能性があります。passioncode.ai のすべての情報は、次のページから辿れます

diff --git a/ja/business/index.html b/ja/business/index.html index 00243ea..1a5507e 100644 --- a/ja/business/index.html +++ b/ja/business/index.html @@ -97,7 +97,7 @@

組織を AIネイティブに

週あたりの時間 × 4.33×エージェントが引き受ける割合×1時間あたりの総コスト

-

例: 時間あたり$50で、ほぼ手作業の業務が週40時間あれば、月173時間になります。エージェントがその25~50%を引き受けると、月43~87時間、つまり月額$2,150~4,350です。

+

例:時間あたり$50で、ほぼ手作業の業務が週40時間あれば、月173時間になります。エージェントがその25~50%を引き受けると、月43~87時間、つまり月額$2,150~4,350です。

これは見積もりであり、約束ではありません。展開の前に、パイロットで実際の数値をお客様自身のベースラインと比較して計測します。

diff --git a/ja/inbox/index.html b/ja/inbox/index.html index 70e87f8..e9c901a 100644 --- a/ja/inbox/index.html +++ b/ja/inbox/index.html @@ -74,7 +74,7 @@

これは開発中のプレビュー版です。エージェントの返信は、まだ実際のモデル呼び出しで試されておらず、Gmailもまだ実際のアカウントで受け入れられていません。汎用のIMAPとOutlookへの対応は計画中で、どちらも現時点では動作する連携として提供していません。

エージェント向け

アプリでできることは
エージェントにもできます

お使いのサーバーは、次の場所でModel Context Protocolに応答します:/mcp。アプリの各機能はMCPツールでもあるため、Claude Codeなどの別のMCPクライアントが、キーの権限レベルの範囲でメールの読み取り、仕分け、送信、アドレスの管理を行えます。

-
  1. 01

    エージェントに一文を渡す

    アプリで 設定 → Agent accessを開きます。まず、コーディングエージェントに渡す一文が表示されます。エージェントがお客様のCloudflareアカウントにサーバーを作成し、Allowを選ぶと自分で接続します。アドレスもシークレットもコピーしません。エージェントの手順は次のガイドにあります:エージェント向けセットアップガイド。

  2. 02

    または自分でキーを作成する

    同じ画面で、名前、レベル(read、mail、admin)、送信を許可するかどうかを選びます。シークレットは1回だけ表示されます。

  3. 03

    エージェントを接続する

    自分で作成したキーなら、アプリがコマンド全体を表示します:claude mcp add --transport http fabric-inbox https://<your-server>/mcpキーの2つのヘッダーが含まれます。その後、次のように依頼します:list_accounts。

+
  1. 01

    エージェントに一文を渡す

    アプリで設定 → Agent accessを開きます。まず、コーディングエージェントに渡す一文が表示されます。エージェントがお客様のCloudflareアカウントにサーバーを作成し、Allowを選ぶと自分で接続します。アドレスもシークレットもコピーしません。エージェントの手順は次のガイドにあります:エージェント向けセットアップガイド。

  2. 02

    または自分でキーを作成する

    同じ画面で、名前、レベル(read、mail、admin)、送信を許可するかどうかを選びます。シークレットは1回だけ表示されます。

  3. 03

    エージェントを接続する

    自分で作成したキーなら、アプリがコマンド全体を表示します:claude mcp add --transport http fabric-inbox https://<your-server>/mcpキーの2つのヘッダーが含まれます。その後、次のように依頼します:list_accounts。

02 / PASSIONCODEツールキット

それぞれに役割のあるツール

Inboxはメールを扱います。SwitchboardはClaude CodeとCodexのアカウントを管理します。Project Observatoryは、それらのエージェントが作業するプロジェクトを見渡せるようにします。早期プレビュー版のFabricは、プロジェクトとそのエージェントのための拠点です。

はじめる前に

Inboxの現状

diff --git a/ja/start/index.html b/ja/start/index.html index db2c0b1..5773b81 100644 --- a/ja/start/index.html +++ b/ja/start/index.html @@ -42,7 +42,7 @@

はじめる · 無料のオープンソース

-

何もないコンピューターから 最初のエージェントまで

+

何もないコンピューターから最初のエージェントまで

働き続け、ほかのエージェントがしたことを知っているエージェントを作りましょう。コマンド1つでツールをセットアップし、あとで同じコマンドが点検します

Node.js 18 以降と、Claude Code または Codex が必要です Fabric にはどのシステムでも Docker と Supabase CLI が必要です

diff --git a/ja/switchboard/agents/index.html b/ja/switchboard/agents/index.html index 33e1d99..6a065dc 100644 --- a/ja/switchboard/agents/index.html +++ b/ja/switchboard/agents/index.html @@ -31,7 +31,7 @@

FABRIC SWITCHBOARD · エージェント

対応する
あなたのエージェント

Switchboard は Claude Code、Codex をはじめ、Hermes、Kilo Code、Cline、Goose、OpenCode など、人気のコーディングエージェントに対応しています

3つの接続方法

各エージェントの接続方法

以下のどのエージェントも Switchboard のツールを使えます。リクエストを処理しているアカウントと残りの利用枠を確認でき、アカウントを切り替えることもできます。カスタムエンドポイントを受け付けるエージェントは、リクエストを Switchboard 経由で送信でき、Switchboard がアカウントを切り替えます。一部のエージェントは Switchboard から直接起動できます。

-
  • ツールのみ。 エージェントは Switchboard のツールに接続し、リクエストはエージェント自身のサービスに送られます。
  • Switchboard 経由。 エージェントで一度設定するだけです。必要な行は Switchboard が表示します。
  • Switchboard から起動。 Switchboard が、プロジェクトフォルダー内で、そのフォルダーのアカウントを使ってエージェントを起動します。
+
  • ツールのみ。エージェントは Switchboard のツールに接続し、リクエストはエージェント自身のサービスに送られます。
  • Switchboard 経由。エージェントで一度設定するだけです。必要な行は Switchboard が表示します。
  • Switchboard から起動。 Switchboard が、プロジェクトフォルダー内で、そのフォルダーのアカウントを使ってエージェントを起動します。

サブスクリプションのサインインは、Anthropic と OpenAI の要件に従い、Claude Code と Codex に限られます。その他のエージェントは API キーのアカウントを使います。プロジェクトのアカウントは、そのプロジェクトのフォルダーでのみ使われます。

30のエージェント

一覧

最初の13件は OpenRouter のアプリランキングに従っています。各項目はエージェントへのリンクで、セットアップページには出典を記載しています。

diff --git a/ja/switchboard/index.html b/ja/switchboard/index.html index 4e41f9b..f82ce6f 100644 --- a/ja/switchboard/index.html +++ b/ja/switchboard/index.html @@ -59,7 +59,7 @@

アップグレードする前に、リリースノートを確認してください。各プラットフォームで実際のプロバイダーアカウントを使った受け入れ確認は、リポジトリで公開して追跡しています。

-

課題

上限は
作業より先に尽きる

長いセッションでは、作業の途中でアカウントの使用量の上限に達することがあります。すると、サインアウトして別のアカウントを探し、サインインし直す間、作業が止まってしまいます。

Switchboard は 作業 を止めません。ローテーションをオンにすると、次のリクエストは同じプールの別のアカウントに移り、セッションは開いたままです。

+

課題

上限は
作業より先に尽きる

長いセッションでは、作業の途中でアカウントの使用量の上限に達することがあります。すると、サインアウトして別のアカウントを探し、サインインし直す間、作業が止まってしまいます。

Switchboard は作業を止めません。ローテーションをオンにすると、次のリクエストは同じプールの別のアカウントに移り、セッションは開いたままです。

SWITCHBOARD の中身

アカウントをひと目で確認

実際の Switchboard の画面です。アカウントは合成したデモ用のものです。

ダークテーマの Switchboard 0.6.13 のアカウント画面:Claude Code と Codex CLI で使用中のアカウント、使用量とリセット時刻が表示された Claude Code アカウントのプール 2 つ、プロジェクトルール 1 つ。上部にデモバナーがある合成デモデータです。
0.6.13 のブラウザーデモ · 実際のアカウント、認証情報、プロバイダーへのリクエストはありません

ローカルの作業環境

アカウントの切り替え作業を減らす
状況をひと目で把握

diff --git a/scripts/locales.mjs b/scripts/locales.mjs index bd84891..13a6952 100644 --- a/scripts/locales.mjs +++ b/scripts/locales.mjs @@ -324,6 +324,11 @@ export function tightenCjk (html, locale) { [`(${C}) +(]*>)(?=${C})`, '$1$2'], [`(${C}) +(?=${C})`, '$1'] ] + // A heading whose second half is emphasised (From an empty computer to your first agent) + // and an emphasised word inside a sentence inherit the English space at the join; between CJK + // characters (or after full-width punctuation closing the emphasis) it is dropped. Korean is + // written with spaces and keeps it: its Hangul is not in C. + rules.push([`(${C}) +(<(?:em|strong|b)\\b[^>]*>)(?=(?:)?${C})`, '$1$2'], [`(${C}) +(?=${C})`, '$1']) // A space the English source keeps inside a bracket, against a link or a live value, is a typo in any language. rules.push([`(\\() +(?=<(?:a|code|em|strong|b|span)\\b)`, '$1'], [`() +(?=\\))`, '$1']) // Korean particles (은/는, 을/를, 에, 에서, 로…) attach to the word before them, so the space the diff --git a/scripts/locales.test.mjs b/scripts/locales.test.mjs index 683b6e6..6a23898 100644 --- a/scripts/locales.test.mjs +++ b/scripts/locales.test.mjs @@ -201,6 +201,36 @@ test('Japanese headings break between phrases, never inside a word; titles, meta assert.doesNotMatch(ru, //, 'only a locale with phraseBreaks gets them') }) +test('a heading split by emphasis joins without a space in Chinese and Japanese, and keeps it in spaced languages', () => { + const html = page('

From an empty computer to your first agent

We build around projects.

') + const strings = { zh: { 'From an empty computer to': '从一台空白的电脑', 'your first agent': '到你的第一个智能体', 'We build': '我们围绕', around: '项目', 'projects.': '来构建。' }, ja: { 'From an empty computer to': '何もないコンピューターから', 'your first agent': '最初のエージェントまで', 'We build': '私たちは', around: 'プロジェクト', 'projects.': 'を中心に作ります。' }, ko: { 'From an empty computer to': '빈 컴퓨터에서', 'your first agent': '첫 에이전트까지', 'We build': '우리는', around: '프로젝트를', 'projects.': '중심으로 만듭니다.' } } + const zh = localizePage(html, { sourceFile: 'x/index.html', locale: 'zh-hans', catalog: catalog(strings.zh) }).html + assert.match(zh, /

从一台空白的电脑到你的第一个智能体<\/em><\/h1>/) + assert.match(zh, /我们围绕项目<\/strong>来构建。/, 'inline emphasis between Chinese characters takes no space either side') + const ja = localizePage(html, { sourceFile: 'x/index.html', locale: 'ja', catalog: catalog(strings.ja) }).html + assert.match(ja, /から最初の/, 'Japanese: no space at the join') + assert.match(ja, /私たちはプロジェクト<\/strong>を中心に/) + const ko = localizePage(html, { sourceFile: 'x/index.html', locale: 'ko', catalog: catalog(strings.ko) }).html + assert.match(ko, /빈 컴퓨터에서 첫 에이전트까지<\/em>/, 'Korean separates words with spaces and keeps this one') + assert.match(ru(html, { 'From an empty computer to': 'С пустого компьютера', 'your first agent': 'до первого агента' }).html, /компьютера до первого агента<\/em>/) +}) + +test('no generated Chinese or Japanese page puts a space between CJK text and an emphasis or a heading join', () => { + const C = '[\\p{Script=Han}\\p{Script=Hiragana}\\p{Script=Katakana}、。,.:;!?()「」『』【】〔〕〈〉《》ー]' + const join = new RegExp(`${C} +<(?:em|strong|b)\\b[^>]*>(?:)?${C}|${C} +${C}`, 'u') + const heading = new RegExp(`]*>(?:(?!)[\\s\\S])*?${C} +(?:<[^>]+>)*${C}`, 'u') + const bad = [] + for (const locale of ['zh-hans', 'ja']) { + for (const source of SOURCE_PAGES) { + const file = source === 'index.html' ? `${locale}/index.html` : `${locale}/${source}` + if (!existsSync(resolve(root, file))) continue + const text = read(file).replace(//g, '') + for (const re of [join, heading]) { const m = re.exec(text); if (m) bad.push(`${file}: ${m[0].slice(-40)}`) } + } + } + assert.deepEqual(bad, []) +}) + test('a translation that carries markup or changes its placeholders is refused', () => { assert.throws(() => ru(page('

Plain

'), { Plain: 'Жирный' }), /markup/) assert.throws(() => ru(page('

Hi {name}

'), { 'Hi {name}': 'Привет, {имя}' }), /placeholders/) diff --git a/zh-hans/404.html b/zh-hans/404.html index 118d622..3105689 100644 --- a/zh-hans/404.html +++ b/zh-hans/404.html @@ -21,7 +21,7 @@

错误 404

-

这里没有页面 位于此地址

+

这里没有页面位于此地址

链接可能已过期或输入有误。passioncode.ai 上的内容都可以从下面的页面进入

diff --git a/zh-hans/business/index.html b/zh-hans/business/index.html index 48bab64..b79246f 100644 --- a/zh-hans/business/index.html +++ b/zh-hans/business/index.html @@ -97,7 +97,7 @@

让你的组织成为 AI 原生

每周工时 × 4.33×智能体接手的比例×每小时综合成本

-

示例: 每周 40 小时、大部分靠手工的工作,按每小时 US$50 计,每月是 173 小时;智能体接手其中 25–50%,即 43–87 小时,或每月 US$2,150–4,350。

+

示例:每周 40 小时、大部分靠手工的工作,按每小时 US$50 计,每月是 173 小时;智能体接手其中 25–50%,即 43–87 小时,或每月 US$2,150–4,350。

这是估算,不是承诺。在任何推广之前,试点会对照你自己的基线,测出真实的数字。

diff --git a/zh-hans/business/thanks/index.html b/zh-hans/business/thanks/index.html index ada8d1a..ee69917 100644 --- a/zh-hans/business/thanks/index.html +++ b/zh-hans/business/thanks/index.html @@ -21,7 +21,7 @@

已收到申请

-

谢谢,申请 已送达

+

谢谢,申请已送达

我们会阅读每一份申请,并在两个工作日内回复,通常会就你提到的流程问几个问题。确认邮件通常几分钟内送达

一小时内没有收到邮件副本?请写信至 commercial@passioncode.ai

diff --git a/zh-hans/fabric/index.html b/zh-hans/fabric/index.html index ce09d4a..cb1fa71 100644 --- a/zh-hans/fabric/index.html +++ b/zh-hans/fabric/index.html @@ -45,7 +45,7 @@

FABRIC · 早期预览版

你的项目的家
及其智能体

Fabric 把每个项目的目标、看板、决策和版本保存在你的电脑上,供参与工作的每一个智能体使用。我们正在把它构建成你的智能体的 CEO

工具包成员 一个项目里每个智能体共享的家:目标、看板、决策和版本。第 2 步和第 5 步,见工作原理。全部工具

一条命令全部装好

早期预览版 0.3.5 · macOS、Windows 和 Linux

-

问题所在

项目的存续时间
比一次对话更长

智能体可以完成一项任务,团队却仍然丢掉任务背后的原因。上下文散落在各个聊天里,决策需要重复说明,还得有人把工作重新拼起来。

我们围绕 项目来构建 Fabric:目标、团队、决策和历史,都应当在下一次会话之后依然保留。

+

问题所在

项目的存续时间
比一次对话更长

智能体可以完成一项任务,团队却仍然丢掉任务背后的原因。上下文散落在各个聊天里,决策需要重复说明,还得有人把工作重新拼起来。

我们围绕项目来构建 Fabric:目标、团队、决策和历史,都应当在下一次会话之后依然保留。

运行循环 · 发展方向

从意图
到经过核对的结果

这是我们正在朝着设计的工作流程。它描述的是 Fabric 的发展方向,并不表示每一步现在都已可用。

  1. 01

    理解项目

    把项目的目标、当前状态和相关上下文汇集到同一个地方。

  2. 02

    把工作说清楚

    把目标转化为有负责人、预期结果和明确边界的工作。

  3. 03

    协调执行

    在人、智能体和可重复的流程之间分配工作,同时不丢失项目的上下文。

  4. 04

    复盘并持续学习

    对照凭证核对结果。把决策和经验留给下一个周期。

走进 Fabric

上次做到哪里
需要你处理的事

真实的 Fabric 窗口,使用合成演示空间:四个项目和 28 天的工作。

Fabric 主页:最近 28 天的工作节奏、上次做到哪里、看板上三个需要你处理的话题、你的项目,以及智能体今天做了什么。合成演示数据。
主页 · 合成演示项目,没有真实账号或仓库
看板:智能体停下来等待回答的问题和等待审阅的结果,每项都标明所属项目、负责人和它阻塞了什么。合成演示数据。
看板 · 等你决定的事
附有依据的版本:每个版本、适用范围、纳入的任务、背后的决策,以及用来核验它的凭据。合成演示数据。
版本 · 纳入了什么、为什么、由什么确认
创建一个智能体:名称为 release-notes-agent,用一句话说明它的功能、文件夹存放位置,以及由哪个编码智能体执行工作。合成演示数据。
创建一个智能体 · 一个名称,一句话,一个文件夹,一个编码智能体
适配现有智能体:四个步骤,Fabric 从 legacy-reports-agent 文件夹中读取的内容,以及将执行工作的编码智能体。合成演示数据。
适配智能体 · Fabric 读取文件夹,仅此而已
Fabric 在点击「创建」后打开的编码智能体控制台:它正在询问 release-notes-agent 的六个入门问题中的第二个。这是一个文字示例,而非录屏。
点击「创建」后的控制台 · 逐一提出问题
按下「适配」后,编码智能体的控制台显示 legacy-reports-agent 的计划:配置文件、影响范围、分支、所有将要变更的文件,等待确认。这是书面示例,不是录制回放。
「适配」后的控制台 · 任何变更前的计划

「创建」和「适配」界面是 Fabric 自身的界面,使用示例数据从其源代码渲染而成。控制台文本是编码智能体工作方式的文字示例,并非录屏。

我们如何构建它

责任仍在人

协调是 Fabric 的发展方向,它不会取代你。项目为了什么、每个智能体被允许做什么,都由你决定。

权限

许可保持明确

目标、职责和限制属于项目。智能体有把握,并不等于获得了行动的许可。

选择

智能体可以替换

更换服务商或执行工作的智能体时,项目应当保留它的目标和历史。

凭证

结果要有凭据

完成的任务应当附带人可以核对的东西,而不只是智能体说一句“做完了”。

diff --git a/zh-hans/start/index.html b/zh-hans/start/index.html index c50efc0..e181552 100644 --- a/zh-hans/start/index.html +++ b/zh-hans/start/index.html @@ -7,7 +7,7 @@ - + @@ -42,7 +42,7 @@

开始使用 · 免费且开源

-

从一台空白的电脑 到你的第一个智能体

+

从一台空白的电脑到你的第一个智能体

构建持续工作、并且知道其他智能体做过什么的智能体。一条命令安装工具,同一条命令之后也能检查它们

需要 Node.js 18+ 以及 Claude Code 或 Codex Fabric 在所有系统上都需要 Docker 和 Supabase CLI

diff --git a/zh-hans/switchboard/agents/index.html b/zh-hans/switchboard/agents/index.html index deefa7f..2b5b80c 100644 --- a/zh-hans/switchboard/agents/index.html +++ b/zh-hans/switchboard/agents/index.html @@ -31,7 +31,7 @@

FABRIC SWITCHBOARD · 智能体

适用于
你的智能体

Switchboard 可配合 Claude Code、Codex 以及其他热门编码智能体使用:Hermes、Kilo Code、Cline、Goose、OpenCode 等

三种接入方式

各智能体如何连接

下面的每个智能体都可以使用 Switchboard 的工具:它能看到由哪个账号处理自己的请求、还剩多少额度,也可以切换账号。接受自定义端点的智能体还可以把请求经由 Switchboard 发送,由 Switchboard 为它们切换账号。部分智能体可以直接从 Switchboard 启动。

-
  • 仅工具。 智能体连接 Switchboard 的工具;它的请求仍发往自己的服务。
  • 经由 Switchboard。 在智能体中设置一次即可;Switchboard 会给出需要填写的具体内容。
  • 从 Switchboard 启动。 Switchboard 在项目文件夹中启动智能体,并使用该文件夹的账号。
+
  • 仅工具。智能体连接 Switchboard 的工具;它的请求仍发往自己的服务。
  • 经由 Switchboard。在智能体中设置一次即可;Switchboard 会给出需要填写的具体内容。
  • 从 Switchboard 启动。 Switchboard 在项目文件夹中启动智能体,并使用该文件夹的账号。

按 Anthropic 和 OpenAI 的要求,订阅登录仅限 Claude Code 和 Codex 使用。其他智能体使用 API 密钥账号。项目的账号只服务于该项目的文件夹。

30 个智能体

列表

前十三个按 OpenRouter 的应用排名排列。每一项都链接到对应的智能体,设置页面会注明信息来源。

diff --git a/zh-hans/switchboard/index.html b/zh-hans/switchboard/index.html index 6e65735..b4b93f8 100644 --- a/zh-hans/switchboard/index.html +++ b/zh-hans/switchboard/index.html @@ -59,7 +59,7 @@

升级前请先阅读版本说明。各平台使用真实服务商账号的验收情况,在代码仓库中公开跟踪。

-

问题所在

限额用完了
工作却还没做完

一次长会话可能在任务进行到一半时达到账号的用量限制。接着工作只能等待:你要退出登录、找到另一个账号,再重新登录。

Switchboard 让 工作 继续进行。开启轮换后,下一次请求会转到同一账号池中的另一个账号,会话保持打开。

+

问题所在

限额用完了
工作却还没做完

一次长会话可能在任务进行到一半时达到账号的用量限制。接着工作只能等待:你要退出登录、找到另一个账号,再重新登录。

Switchboard 让工作继续进行。开启轮换后,下一次请求会转到同一账号池中的另一个账号,会话保持打开。

SWITCHBOARD 内部

一个视图看全部账号

Switchboard 的真实界面,使用合成的演示账号。

Switchboard 0.6.13 的账号界面,深色主题:正在用于 Claude Code 和 Codex CLI 的账号、两个附带用量和重置时间的 Claude Code 账号池,以及一条项目规则。合成的演示数据,顶部有演示横幅。
0.6.13 的浏览器演示 · 无真实账号、凭据或服务商请求

本地工作台

少一些账号切换的折腾
一眼看到更多上下文

diff --git a/zh-hans/vision/index.html b/zh-hans/vision/index.html index c0bbf6e..7d2423e 100644 --- a/zh-hans/vision/index.html +++ b/zh-hans/vision/index.html @@ -55,7 +55,7 @@

从一个智能体到 AI 原生组织

-

01 / 什么托住一个智能体

问题不在模型
而在托住模型的东西

大多数组织已经在试用智能体,但在任何一个职能里,能规模化的不超过 10% 在任何一个职能里,孤立的智能体在会话之间会遗忘,也跟不上自己的账号。它不留下自己做过什么的记录,下一个智能体对它一无所知。我们把托住它的东西称为 支撑框架(harness):模型周围的一切,让智能体随时间持续工作。实验室也用这个词:Anthropic, OpenAI。

+

01 / 什么托住一个智能体

问题不在模型
而在托住模型的东西

大多数组织已经在试用智能体,但在任何一个职能里,能规模化的不超过 10% 在任何一个职能里,孤立的智能体在会话之间会遗忘,也跟不上自己的账号。它不留下自己做过什么的记录,下一个智能体对它一无所知。我们把托住它的东西称为支撑框架(harness):模型周围的一切,让智能体随时间持续工作。实验室也用这个词:Anthropic, OpenAI。

  1. 01

    归属之处

    每个项目都有一个地方,存放它的目标、看板、决策和版本,由所有参与该项目的智能体共用。这就是 Fabric。

  2. 02

    账号

    每个智能体都在应该使用的账号上运行,其额度一目了然。这就是 Fabric Switchboard。