Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 12 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -83,12 +83,18 @@ not a screenshot. Simultaneous typing races and plugin hot-loading remain unveri

### Want to connect your existing desktop tasks?

[Copy the native-task setup prompt](docs/06-guides/codex-native-tasks.md#1-paste-this-into-each-chosen-task)
into each chosen task: paste the other task's **chat link** and the allowed topic.
In Codex, **Copy chat deep link** is **⌘⌥L** on macOS or **Ctrl+Alt+L** on Windows.
It uses a pinned public workflow, not a local path or manually copied internal ID.
Setup sends no peer messages; wait for both confirmations, then work normally.
No terminal setup is needed for that route.
[**Open the pairing helper →**](https://fyaic.github.io/threadmesh/)

Paste two copied **chat links**, choose what they may share, and copy the setup
prepared for each task. No terminal, installation, account or hand-editing long
prompts. Inputs stay in the browser page; the helper does not read chats or send
messages. In Codex, **Copy chat deep link** is **⌘⌥L** on macOS or **Ctrl+Alt+L**
on Windows. Paste and send each setup yourself; wait for both confirmations,
then work normally. [Manual entry and limits](docs/06-guides/codex-native-tasks.md).

Another real case: A changed an API contract; original B updated its own client
and tests, retaining the earlier timeout and cursor-encoding decisions.
[Browser checks and the actual API handoff →](docs/09-reviews/2026-09-08-pairing-helper-acceptance.md)

**Tested, still experimental:** the [public-workflow + chat-link run](docs/09-reviews/2026-09-08-native-deep-link-acceptance.md)
resolved the original two tasks without a global task list. A chose to send;
Expand Down
16 changes: 10 additions & 6 deletions README.zh-CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,12 +77,16 @@ B 早已知道按钮名称不能改。明确配对后,只向 A 提出普通业

### 想连接已有的桌面任务?

把[原生任务设置提示词](docs/zh-CN/codex-native-tasks.md#1-分别把下面的提示词发给两个任务)
分别发给选中的两个任务,只填对方的**聊天链接**和允许话题。
Codex 的“复制聊天深链”快捷键为 macOS **⌘⌥L**、Windows **Ctrl+Alt+L**。
使用固定版本的公开工作流,
不用本地路径或手抄内部 ID。设置时不向对方发消息,等双方各自确认后正常工作。
这条路径不需要终端设置。
[**打开免安装配对页面 →**](https://fyaic.github.io/threadmesh/)

粘贴两个**聊天链接**,选择允许交流的话题,分别复制为它们生成的设置提示。
不用终端、安装、注册账号或手工修改长提示词。输入留在浏览器页面中,页面不读聊天、
不代发消息。Codex 的“复制聊天深链”快捷键是 macOS **⌘⌥L**、Windows **Ctrl+Alt+L**。
你仍需在两个原任务分别粘贴发送;等双方确认后正常工作。
[手动入口与限制](docs/zh-CN/codex-native-tasks.md)。

另一个真实案例:A 修改 API 约定后,原 B 自己更新客户端和测试,同时保留此前的
超时、特殊游标编码约定。[页面检查与实际 API 协作记录 →](docs/09-reviews/2026-09-08-pairing-helper-acceptance.md)

**已实测,仍属实验入口:** [公开工作流+聊天链接实测](docs/09-reviews/2026-09-08-native-deep-link-acceptance.md)
不查全局任务列表就定位了原来的两个任务;A 主动发送,原 B 自己改对文案并保留按钮和价格。
Expand Down
6 changes: 6 additions & 0 deletions ROADMAP.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,12 @@ policy layer; A2A, Cotal, ACP, or harness-native APIs may supply transport.

## Active priority — existing desktop clients (2026-09-08)

**Setup simplification shipped:** the bilingual [no-install pairing helper](https://fyaic.github.io/threadmesh/)
generates separate setups from two chat links and a chosen topic. Users still
paste/send and wait for both confirmations; it is not an automatic connection.
Browser checks and a second original-task API/client case passed with the
generated prompts. [Actual screenshot and receiver-owned results](docs/09-reviews/2026-09-08-pairing-helper-acceptance.md).

**Completed this slice:** [public workflow + chat-link pairing](docs/09-reviews/2026-09-08-native-deep-link-acceptance.md),
both original tasks enabled, ordinary request triggering A's chosen advice,
original B's correct own edit with prior decisions preserved, and both stopped.
Expand Down
7 changes: 7 additions & 0 deletions docs/06-guides/codex-native-tasks.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,13 @@ a new model, an MCP server or a polling daemon.

## No-terminal workflow

Prefer the [browser pairing helper](https://fyaic.github.io/threadmesh/) if you
do not want to edit the template below. Paste two local chat links, choose a
shared topic and advice mode, confirm, then copy each prepared setup and open
its original task. Inputs are not uploaded or saved by the page. It generates
text, not a connection: you still paste/send in both tasks and wait for their
confirmations. [Browser and generated-prompt acceptance](../09-reviews/2026-09-08-pairing-helper-acceptance.md).

Choose two disposable existing Codex tasks with useful prior context. For
example, a brand task maintains approved product facts; a website task already
has the instruction to keep the signup label **Create my workspace**. Keep
Expand Down
105 changes: 105 additions & 0 deletions docs/09-reviews/2026-09-08-pairing-helper-acceptance.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
# Pairing helper and original-task API handoff

**Outcome:** the [no-install pairing helper](https://fyaic.github.io/threadmesh/)
is live. Its generated setup was used in the original two Codex validation
tasks. After an ordinary API change request, A chose to contact original B;
B updated its own client and tests while preserving earlier decisions.

This reduces template editing. It does **not** automatically connect tasks:
users still paste/send both setups and wait for confirmations. Codex supplies
native messaging and continuation; ThreadMesh supplies optional scoped guidance.

## Actual browser entry

![Actual published pairing helper, Chinese desktop view](../assets/pairing-helper-public.png)

This is an actual screenshot of the published helper with empty inputs, not a
native handoff screenshot or a staged conversation. The page accepts two copied
local chat links, a limited topic, advice mode and explicit consent. Three topic
presets cover product facts/copy, API/client changes and retained preferences.
It generates separate setup text and links back to the two original tasks.

The static page has no account, analytics, backend or browser storage. Chat
links/topics are not put into requests or URLs. Copying writes the selected
setup to the system clipboard, where normal operating-system behavior applies.
The public workflow is fetched later by the agent after the user sends setup.

Actual Chrome checks covered Chinese and English, desktop and 390 px mobile,
light/dark rendering, generation, successful clipboard write, changed-input
invalidation and a controlled clipboard-rejection fallback. A reviewer found
an asynchronous clipboard race; the fix locks copy/generation while a write is
pending and warns when changed inputs make the completed copy stale. Four app
tests exercise these states; ten generator tests cover links, consent, modes,
topic boundaries and generated text. The full suite passed: **475 tests,
474 passed, one optional native test skipped**, plus schema/transition checks.

The [implementation PR](https://github.com/fyaic/threadmesh/pull/174) was merged.
The [Pages deployment](https://github.com/fyaic/threadmesh/actions/runs/34184259676)
succeeded. Anonymous requests returned HTTP 200 with correct content types for
all four deployed files, byte-identical to the tested source. The public page
also loaded in Chrome with empty inputs and only same-origin static resources.
Native-app opening and keyboard copying of real chat links were not tested in
this browser check.

## Useful original-receiver outcome

The two existing, opted-in validation tasks first prepared local fixtures while
cross-task advice was stopped. A owned an API contract; B owned a client and
five tests. B already had these decisions: a 3000 ms timeout, correctly encoded
special-character cursors, no empty cursor query and `null` for no next page.

The manager dispatched the exact two strings returned by `buildPair(...)` into
the original tasks. Both read the pinned public workflow, resolved only their
selected peer and confirmed setup without peer sends or file changes. This
tests generated-prompt use, **not automatic browser submission or independent
manual GUI onboarding**.

After both confirmations, the only business request to A was:

> 双方设置已确认完成。API 的新版决定是:GET 路径改为 /v2/items,请求游标字段改为 cursor,响应下一页字段改为 next_cursor,列表字段仍为 items。请更新维护的 API 约定;不涉及鉴权或部署变化。

It did not name a recipient or instruct A to send. A updated its contract,
checked that B was idle and made one native send. Original B received the
source-attributed message and made its own native file changes:

| Contract | Before | B's updated client |
|---|---|---|
| GET path | `/v1/items` | `/v2/items` |
| Request cursor | `pageToken` | `cursor` |
| Response next page | `nextPageToken` | `next_cursor` |
| Existing timeout | 3000 ms | Preserved |
| Cursor/no-next-page behavior | Encode cursor; omit empty query; return `null` | Preserved |

B updated and passed its own five tests. Independent maintainer assertions
also checked the exact contract, special-character round trip, absence of an
empty query, and that the old response field is no longer consumed. The three
earlier product/copy/price artifacts were unchanged. The manager did not relay
the business change directly to B or edit B's files.

The business handoff took approximately **70 seconds**, from A's request to B's
completion. Setup was separate: approximately **31 seconds for A and 23 seconds
for B**, run in parallel. Both tasks then acknowledged stop, with no further
peer sends or edits in those stop turns. An independent internal subagent
reviewed original turn items and artifacts and accepted this bounded case.

## Evidence and limits

Owner-only private retention includes generated prompts and the selected
setup/business/stop native turn items recovered using the official read-only
App Server. Public records omit task IDs, local paths and unrelated history.
SHA-256 commitments:

- Generated prompts: `ff58002a0135d2e90f92ff20468926f5117cd5bacc4ace3a3265758489dde282`
- Final selected-turn capture: `44ebcd8606738b820e5c8bb7d4c0e283fac924edd056ea418adef37efd79f3f6`

B's retained fetch contains the full pinned workflow. A's web result retains
page metadata/summary and its reading confirmation, not the full web response.
The archive is a selected run window, not a complete lifetime task export.

This is a **local API adapter case**, not an HTTP-service integration test.
There is no recording of the native exchange. It does not establish reliability
across accounts, simultaneous typing safety, universal desktop support, quota
recovery, or an incremental advantage over native-only Codex. An idle check
does not make the following send atomic. Review-only mode drafts advice; it is
not permission to send. Agent guidance is not a hard host-enforced security
boundary. Neither this case nor the helper repacks the alpha.3 CLI release.
1 change: 1 addition & 0 deletions docs/09-reviews/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ not count as live-product or independent external-verifier evidence.

## Live attempt audits

- [Published pairing helper, browser checks and original-task API handoff](2026-09-08-pairing-helper-acceptance.md)
- [Public workflow + chat link: original receiver-owned handoff and final stop passed](2026-09-08-native-deep-link-acceptance.md)
- [Why the agent-created native pair was omitted from task lists](2026-09-08-native-task-discovery.md)
- [Native desktop public entry: recovered readiness results and invalid-limit repair](2026-09-07-native-public-entry.md)
Expand Down
9 changes: 9 additions & 0 deletions docs/10-planning/project-status.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,15 @@

## Current product update — 2026-09-08

**The no-install pairing helper is now public:** [open it](https://fyaic.github.io/threadmesh/),
paste two chat links and choose a topic; copy the separately generated setups.
Chinese/English, browser interaction and clipboard-failure handling were tested.
Users still paste/send both setups themselves. The page neither reads chats nor
connects tasks. Its exact generated prompts also passed a second original-task
case: A chose to send an API change; B updated its own client and tests while
retaining timeout/encoding decisions. Business handoff: about 70 seconds;
setup separately 31/23 seconds. Both stopped. [Screenshot, tests and case evidence](../09-reviews/2026-09-08-pairing-helper-acceptance.md).

**The controlled public-entry gate is complete.** The
[public-workflow + chat-link run](../09-reviews/2026-09-08-native-deep-link-acceptance.md)
reused the original two Codex validation tasks: both resolved the selected peer,
Expand Down
Binary file added docs/assets/pairing-helper-public.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
5 changes: 4 additions & 1 deletion docs/evidence/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ adoption or proof of incremental value over the host's native capability.

| Recent case | Public record | Retained private originals |
|---|---|---|
| Browser pairing helper + original Codex API receiver, passed | [Actual helper screenshot, generated setup and 70-second API handoff](../09-reviews/2026-09-08-pairing-helper-acceptance.md) | Generated prompts and selected original setup/business/stop turn items |
| Codex public workflow + chat-link pair, passed | [Actual setup, 61-second business handoff, B's own diff and final stop](../09-reviews/2026-09-08-native-deep-link-acceptance.md) | Original selected setup/business/stop App Server turn items and verified artifacts |
| Codex desktop prior-context pair | [Actual exchange, B's diff and reduced audit](codex-native-2026-09-07/README.md) | Complete A/B native exports, original tasks and files |
| Codex public-entry readiness attempt, not accepted | [Recovered results, rejected inventory limits and unchanged artifacts](../09-reviews/2026-09-07-native-public-entry.md) | Empty desktop reads and recovered official App Server turn records retained separately |
Expand All @@ -19,7 +20,9 @@ archives are outside the public repository, in owner-only parent directories;
they are local retention, not off-device backup. No raw model logs, account data
or unrelated task histories were uploaded.

No screenshot or video was captured for these listed recent runs. Earlier
The pairing-helper record includes an actual screenshot of the helper page,
not of the native exchange. No native handoff screenshot or video was captured
for these listed recent runs. Earlier
concept images and staged animations are not retroactive proof. The desktop
[capture policy](codex-native-2026-09-07/README.md#screenshots-and-recordings)
describes consent, cropping, originals and truthful retrospective labels.
Expand Down
5 changes: 5 additions & 0 deletions docs/zh-CN/codex-native-tasks.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,11 @@

## 免终端工作流

不想手工改下面的长提示词,可以直接打开[配对页面](https://fyaic.github.io/threadmesh/):
填两个本地聊天链接,选择话题和建议方式,勾选确认,然后分别复制设置、打开原任务。
页面不上传或保存输入,只生成文字,不建立连接;你仍需在两个任务中分别粘贴发送,
等待它们确认。[页面与生成提示的验证记录](../09-reviews/2026-09-08-pairing-helper-acceptance.md)。

选择两个已有上下文、没有业务副作用的 Codex 测试任务。例如,一个维护品牌信息,
另一个维护网页,且已经约定按钮名称必须保留 **Create my workspace**。
不要选其他业务任务;测试期间不要同时向接收任务输入内容。仍需正常 Codex 额度。
Expand Down
Loading