codex-to-im 1.0.13 → 1.0.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,230 +1,158 @@
1
1
  # Codex-to-IM
2
2
 
3
- `codex-to-im` is a local bridge app that connects Codex desktop sessions to IM channels such as Feishu/Lark and Weixin.
3
+ [English](README_EN.md)
4
4
 
5
- The product is no longer centered around a Codex skill. The main path is:
5
+ `codex-to-im` 是一个本地桥接应用,用来把 Codex 接到飞书、微信等 IM 通道中使用。
6
6
 
7
- 1. Install `codex-to-im`
8
- 2. Open the local web workbench
9
- 3. Configure IM channels
10
- 4. Start the bridge in the background
11
- 5. Bind real desktop Codex threads to Feishu or Weixin chats
7
+ 它的主路径不是“改造 Codex 本体”,而是:
12
8
 
13
- Optional: if you want Codex to know it can send local files or images back to IM without relying on bridge-injected prompt text, install the bundled `codex-to-im` skill from the workbench.
9
+ 1. 在本机启动一个 Web 工作台和 bridge
10
+ 2. 配置飞书或微信
11
+ 3. 把桌面里的 Codex 会话接到 IM
12
+ 4. 在 IM 中继续对话、切线程、查看状态
14
13
 
15
- ## Project Origin
14
+ ## 核心能力
16
15
 
17
- The current codebase is a consolidated continuation of two earlier repositories:
16
+ - 共享桌面线程:把 Codex Desktop 中正在使用的 thread 绑定到 IM,在 IM 中继续同一条会话。
17
+ - IM 远程操作:支持查看当前状态、切线程、新建线程、切模式、切思考级别、切模型、停止当前任务、查看历史等常用命令。
18
+ - 本地 Web 工作台:集中完成配置、通道登录、日志查看、会话管理和绑定管理。
19
+ - 飞书流式卡片:飞书侧支持流式展示共享线程回复,也支持工具进度展示。
20
+ - 附件回传:支持把本地图片或文件发回到飞书;如果需要让 Codex 主动使用这个能力,可以安装仓库附带的 `codex-to-im` skill。
21
+ - 本地优先:服务、配置、日志和 bridge 都运行在本机,可选开启局域网访问 Web 控制台。
18
22
 
19
- - `Claude-to-IM`
20
- - `Claude-to-IM-skill`
23
+ ## 支持的通道
21
24
 
22
- `codex-to-im` is based on those two projects and has been reworked toward a single-package local app and shared-thread workflow.
25
+ - 飞书:支持 bot 配置、连通性测试、共享线程、流式卡片、图片和文件发送。
26
+ - 微信:支持扫码登录、共享线程和文本反馈。
23
27
 
24
- Windows host installation guide: [docs/install-windows.md](D:/codex/Claude-to-IM-skill/docs/install-windows.md)
28
+ ## 快速开始
25
29
 
26
- ## What It Includes
27
-
28
- - Local background bridge service
29
- - Local web workbench for configuration, testing, logs, and bindings
30
- - Feishu credential setup and connectivity testing
31
- - Weixin QR login flow
32
- - Desktop session discovery from `~/.codex/sessions`
33
- - Web-side binding updates for IM chats
34
-
35
- ## Install
36
-
37
- ### Prerequisites
30
+ ### 依赖
38
31
 
39
32
  - Node.js 20+
40
- - If you use the `codex` or `auto` runtime, complete Codex authentication under the same OS user account
41
-
42
- `codex-to-im` now ships with the required `@openai/codex-sdk` / Codex CLI platform dependency, so you do not need to install a separate global Codex CLI just to run the bridge.
33
+ - 当前系统用户下可用的 Codex 登录态或 API 凭据
43
34
 
44
- You still need Codex credentials to be available for the current user. Any of these is sufficient:
35
+ 满足以下任一条件即可:
45
36
 
46
- - a logged-in Codex Desktop App
47
- - an existing Codex CLI login state
48
- - `CTI_CODEX_API_KEY`, `CODEX_API_KEY`, or `OPENAI_API_KEY`
37
+ - 已登录 Codex Desktop App
38
+ - 已登录 Codex CLI
39
+ - 已配置 `CTI_CODEX_API_KEY`、`CODEX_API_KEY` `OPENAI_API_KEY`
49
40
 
50
- If the machine does not have any Codex login state yet, the simplest path is still to install the global CLI once and log in:
51
-
52
- ```bash
53
- npm install -g @openai/codex
54
- codex auth login
55
- ```
56
-
57
- ### Global install
41
+ ### 安装
58
42
 
59
43
  ```bash
60
44
  npm install -g codex-to-im
61
45
  ```
62
46
 
63
- ### Local development
64
-
65
- ```bash
66
- npm install
67
- npm run build
68
- ```
69
-
70
- Windows maintenance note:
71
-
72
- - The repo includes [patch-codex-sdk-windows-hide.js](D:/codex/Claude-to-IM-skill/scripts/patch-codex-sdk-windows-hide.js), which applies a conservative postinstall patch to `@openai/codex-sdk`.
73
- - This exists because on Windows the SDK may spawn the bundled Codex CLI without `windowsHide`, causing a black console window to flash for each IM-triggered run.
74
- - When upgrading `@openai/codex-sdk`, verify that the spawn block still matches; if upstream fixes this natively, remove the patch instead of carrying it forward.
75
-
76
- ## Run
77
-
78
- Start the local app:
47
+ ### 启动
79
48
 
80
49
  ```bash
81
50
  codex-to-im
82
51
  ```
83
52
 
84
- This launches the local workbench and opens it in your browser.
85
-
86
- By default the workbench runs at:
53
+ 默认会打开本地工作台:
87
54
 
88
55
  ```text
89
56
  http://127.0.0.1:4781
90
57
  ```
91
58
 
92
- If that port is already occupied, the app automatically finds an available local port and prints the actual address to the terminal when starting.
93
-
94
- By default, the web workbench only accepts local access.
95
-
96
- If you want to open it from your phone or another device on the same LAN, enable `允许局域网访问 Web 控制台` in the `配置` page. When enabled:
97
-
98
- - the workbench shows detected LAN URLs
99
- - the workbench displays an access token
100
- - LAN devices see a login page before they can view or modify settings
101
- - you can also copy a ready-to-use login link that includes `?token=...`
102
-
103
- If you forget the current address, run:
59
+ 如果想查看当前地址或运行状态:
104
60
 
105
61
  ```bash
106
62
  codex-to-im url
107
- ```
108
-
109
- Check the current local service state:
110
-
111
- ```bash
112
63
  codex-to-im status
113
64
  ```
114
65
 
115
- Stop the background UI and bridge:
66
+ 如果要停止本地 UI bridge
116
67
 
117
68
  ```bash
118
69
  codex-to-im stop
119
70
  ```
120
71
 
121
- ## Main Workflow
122
-
123
- 1. Open the workbench
124
- 2. Fill in Feishu credentials or trigger Weixin QR login
125
- 3. Save config and test connectivity
126
- 4. Start the bridge
127
- 5. Open the desktop sessions section
128
- 6. Bind a Feishu or Weixin chat to the target thread
129
- 7. Continue the same Codex thread from IM
72
+ ## 典型使用方式
130
73
 
131
- If LAN access is enabled, the easiest path is to copy the LAN login link from the local workbench and open it on your phone or another device on the same network.
74
+ ### 1. 接管桌面线程
132
75
 
133
- Useful commands:
76
+ Web 工作台里配置好飞书或微信后,启动 bridge。
77
+ 然后在 IM 中发送:
134
78
 
135
- - `/` / `/status` shows the current session
136
- - `/h` / `/help` shows help
137
- - `/t` / `/threads` lists recent desktop threads, and `/t 1` / `/thread 1` binds the first one
138
- - `/n` / `/new` creates a new thread in the current formal session directory; these IM-created threads are only guaranteed to continue inside IM and will not automatically appear in the Codex Desktop thread list
139
- - `/n proj1` / `/new proj1` creates a new project session under the default workspace root
140
- - `/m` / `/mode` shows or changes the current mode; options: `code` / `plan` / `ask`
141
- - `/r` / `/reasoning` shows or changes the current reasoning effort; options: `1|2|3|4|5`
142
- - `/his` / `/history` shows the summarized history, and `/his raw` / `/history raw` shows raw history
143
- - `/t 0` / `/thread 0` enters a temporary draft thread that does not pollute the main work thread
144
- - `1 / 2 / 3` or `/perm ...` handles permission prompts
145
- - N is configurable in the web workbench under the basic settings panel
146
- - The workbench command guide shows both short commands and compatible original commands
147
-
148
- If you enable Feishu streaming response cards, the Feishu app must have the required permissions published first, at minimum:
149
-
150
- - `cardkit:card:write`
151
- - `cardkit:card:read`
152
- - `im:message:update`
153
-
154
- If those permissions are missing, the bridge log will usually show `99991672` with `cardkit:card:write`, and the bridge falls back to a final-result message.
155
-
156
- Also note that under the current `codex` runtime, the `Codex CLI / SDK` typically emits the assistant text only when the `agent_message` item is completed, not as token-level deltas. In practice that means Feishu "streaming cards" currently behave more like:
157
-
158
- - early `Thinking / Tool Progress` updates
159
- - final response text written into the card at completion
160
-
161
- So character-by-character text streaming is not guaranteed in the current implementation.
162
-
163
- If creating a new session fails with `Not inside a trusted directory`, either:
164
-
165
- - switch to a trusted project with `/new /absolute/path` or `/new proj1`, or
166
- - enable `Allow Codex outside trusted Git repos` in the basic settings and restart the bridge
167
-
168
- The configuration page also includes Codex runtime controls:
79
+ ```text
80
+ /t
81
+ ```
169
82
 
170
- - `Default workspace root`
171
- - parent directory used for `/new proj1`
172
- - falls back to `~/cx2im` when left empty, expanded for the current OS
173
- - `Codex filesystem permission`
174
- - `read-only`, `workspace-write`, or `danger-full-access`
175
- - default: `workspace-write`
176
- - `Codex reasoning effort`
177
- - global default reasoning level
178
- - can be overridden per IM session with `/reasoning`
179
- - official runtime levels are `minimal`, `low`, `medium`, `high`, `xhigh`
180
- - IM numeric aliases are `1=minimal`, `2=low`, `3=medium`, `4=high`, `5=xhigh`
83
+ 查看最近 10 条桌面线程,发送:
181
84
 
182
- If you are using `codex-to-im` on your own development machine for real coding work, the more aggressive recommended setup is:
85
+ ```text
86
+ /t all
87
+ ```
183
88
 
184
- - set `Codex filesystem permission` to `danger-full-access`
185
- - set `Codex reasoning effort` to `xhigh`
89
+ 查看全部桌面线程。
90
+ 再通过:
186
91
 
187
- This is closer to a full-power `code` workflow. It fits a controlled local project, but is not a good default for unknown repositories or higher-risk environments.
92
+ ```text
93
+ /t 1
94
+ ```
188
95
 
189
- The channel pages also expose a “Use Markdown for bridge feedback” switch:
190
- - enabled by default for Feishu
191
- - disabled by default for WeChat
192
- - affects text sent through the bridge, including normal replies, shared-thread mirror messages, and system feedback such as `/h`, `/status`, and `/threads`
96
+ 切到对应线程。
193
97
 
194
- ## Update
98
+ ### 2. 在 IM 中继续对话
195
99
 
196
- On Windows, `npm update -g codex-to-im` can fail with `EBUSY` if the background UI or bridge is still running from the global install directory.
100
+ 绑定成功后,直接发送普通消息即可继续当前线程。
101
+ 桌面继续操作这条共享线程时,结果也会同步到 IM。
197
102
 
198
- Recommended update flow:
103
+ ### 3. 新建 IM 线程
199
104
 
200
- ```bash
201
- codex-to-im stop
202
- npm update -g codex-to-im
203
- codex-to-im
105
+ ```text
106
+ /new
204
107
  ```
205
108
 
206
- ## Repo Layout
109
+ 会在当前正式会话的工作目录下新建线程。
110
+ 如果当前没有正式会话,或当前是临时线程,会直接报错。
207
111
 
208
- - `src/ui-server.ts` — local workbench UI and HTTP API
209
- - `src/service-manager.ts` — bridge and UI lifecycle management
210
- - `src/desktop-sessions.ts` — desktop thread discovery from Codex session files
211
- - `src/session-bindings.ts` — binding summaries and web-side binding updates
212
- - `src/lib/bridge/` — bridge runtime and IM channel routing
213
- - `docs/` — PRD and shared-thread design docs
112
+ 也可以显式指定目录:
214
113
 
215
- ## Development
216
-
217
- ```bash
218
- npm run typecheck
219
- npm run build
114
+ ```text
115
+ /new my-project
116
+ /new D:\work\my-project
220
117
  ```
221
118
 
222
- ## Status
223
-
224
- Current product direction:
225
-
226
- - Standalone local app first
227
- - Web workbench first
228
- - Shared Codex thread model first
229
-
230
- [中文文档](README_CN.md)
119
+ ## 常用命令
120
+
121
+ - `/` 或 `/status`:查看当前会话、线程、模型、模式、思考级别、共享镜像状态。
122
+ - `/t`:查看最近 10 条桌面线程。
123
+ - `/t all`:查看全部桌面线程。
124
+ - `/t n 100`:查看最近 100 条桌面线程。
125
+ - `/t 1`:切换到第 1 条桌面线程。
126
+ - `/t 0`:切换到当前聊天的临时线程。
127
+ - `/new`:在当前正式会话目录下新建线程。
128
+ - `/new <路径或项目名>`:按指定目录新建线程。
129
+ - `/mode <ask|code>`:切换运行模式。
130
+ - `/reasoning <1-5>`:切换思考级别。
131
+ - `/model`:查看当前模型和可选模型。
132
+ - `/model <模型名>`:切换当前 IM 会话模型。
133
+ - `/history`:查看当前线程历史摘要。
134
+ - `/stop`:停止当前任务。
135
+ - `/unbind`:解除当前聊天与会话的绑定。
136
+
137
+ ## 关键配置
138
+
139
+ 工作台里的常用配置主要有:
140
+
141
+ - 默认工作空间:用于 `/new my-project` 这类相对路径。
142
+ - Codex 文件系统权限:如 `workspace-write`、`danger-full-access`。
143
+ - Codex 思考级别:`1-5`。
144
+ - 默认模型:从本机可用模型中选择。
145
+ - 反馈使用 markdown:控制 bridge 发到通道里的文本反馈是否走 markdown。
146
+ - 允许局域网访问 Web 控制台:便于手机或局域网设备访问。
147
+
148
+ ## 当前边界
149
+
150
+ - `/new` 创建的是 IM 线程,当前只保证在 IM 中可继续;不保证会自动出现在 Codex Desktop 会话列表中。
151
+ - 一个会话只能绑定一个聊天,跨飞书/微信也互斥。
152
+ - 飞书附件当前支持图片和文件;视频目前按文件发送,不承诺原生预览。
153
+ - `/t` 默认只显示最近 10 条桌面线程;需要更多时用 `/t all` 或 `/t n 100`。
154
+
155
+ ## 更多文档
156
+
157
+ - Windows 安装说明:[docs/install-windows.md](docs/install-windows.md)
158
+ - 英文文档:[README_EN.md](README_EN.md)
package/README_EN.md ADDED
@@ -0,0 +1,230 @@
1
+ # Codex-to-IM
2
+
3
+ [中文版](README.md)
4
+
5
+ `codex-to-im` is a local bridge app that connects Codex desktop sessions to IM channels such as Feishu/Lark and Weixin.
6
+
7
+ The product is no longer centered around a Codex skill. The main path is:
8
+
9
+ 1. Install `codex-to-im`
10
+ 2. Open the local web workbench
11
+ 3. Configure IM channels
12
+ 4. Start the bridge in the background
13
+ 5. Bind real desktop Codex threads to Feishu or Weixin chats
14
+
15
+ Optional: if you want Codex to know it can send local files or images back to IM without relying on bridge-injected prompt text, install the bundled `codex-to-im` skill from the workbench.
16
+
17
+ ## Project Origin
18
+
19
+ The current codebase is a consolidated continuation of two earlier repositories:
20
+
21
+ - `Claude-to-IM`
22
+ - `Claude-to-IM-skill`
23
+
24
+ `codex-to-im` is based on those two projects and has been reworked toward a single-package local app and shared-thread workflow.
25
+
26
+ Windows host installation guide: [docs/install-windows.md](docs/install-windows.md)
27
+
28
+ ## What It Includes
29
+
30
+ - Local background bridge service
31
+ - Local web workbench for configuration, testing, logs, and bindings
32
+ - Feishu credential setup and connectivity testing
33
+ - Weixin QR login flow
34
+ - Desktop session discovery from `~/.codex/sessions`
35
+ - Web-side binding updates for IM chats
36
+
37
+ ## Install
38
+
39
+ ### Prerequisites
40
+
41
+ - Node.js 20+
42
+ - If you use the `codex` or `auto` runtime, complete Codex authentication under the same OS user account
43
+
44
+ `codex-to-im` now ships with the required `@openai/codex-sdk` / Codex CLI platform dependency, so you do not need to install a separate global Codex CLI just to run the bridge.
45
+
46
+ You still need Codex credentials to be available for the current user. Any of these is sufficient:
47
+
48
+ - a logged-in Codex Desktop App
49
+ - an existing Codex CLI login state
50
+ - `CTI_CODEX_API_KEY`, `CODEX_API_KEY`, or `OPENAI_API_KEY`
51
+
52
+ If the machine does not have any Codex login state yet, the simplest path is still to install the global CLI once and log in:
53
+
54
+ ```bash
55
+ npm install -g @openai/codex
56
+ codex auth login
57
+ ```
58
+
59
+ ### Global install
60
+
61
+ ```bash
62
+ npm install -g codex-to-im
63
+ ```
64
+
65
+ ### Local development
66
+
67
+ ```bash
68
+ npm install
69
+ npm run build
70
+ ```
71
+
72
+ Windows maintenance note:
73
+
74
+ - The repo includes [patch-codex-sdk-windows-hide.js](scripts/patch-codex-sdk-windows-hide.js), which applies a conservative postinstall patch to `@openai/codex-sdk`.
75
+ - This exists because on Windows the SDK may spawn the bundled Codex CLI without `windowsHide`, causing a black console window to flash for each IM-triggered run.
76
+ - When upgrading `@openai/codex-sdk`, verify that the spawn block still matches; if upstream fixes this natively, remove the patch instead of carrying it forward.
77
+
78
+ ## Run
79
+
80
+ Start the local app:
81
+
82
+ ```bash
83
+ codex-to-im
84
+ ```
85
+
86
+ This launches the local workbench and opens it in your browser.
87
+
88
+ By default the workbench runs at:
89
+
90
+ ```text
91
+ http://127.0.0.1:4781
92
+ ```
93
+
94
+ If that port is already occupied, the app automatically finds an available local port and prints the actual address to the terminal when starting.
95
+
96
+ By default, the web workbench only accepts local access.
97
+
98
+ If you want to open it from your phone or another device on the same LAN, enable `允许局域网访问 Web 控制台` in the `配置` page. When enabled:
99
+
100
+ - the workbench shows detected LAN URLs
101
+ - the workbench displays an access token
102
+ - LAN devices see a login page before they can view or modify settings
103
+ - you can also copy a ready-to-use login link that includes `?token=...`
104
+
105
+ If you forget the current address, run:
106
+
107
+ ```bash
108
+ codex-to-im url
109
+ ```
110
+
111
+ Check the current local service state:
112
+
113
+ ```bash
114
+ codex-to-im status
115
+ ```
116
+
117
+ Stop the background UI and bridge:
118
+
119
+ ```bash
120
+ codex-to-im stop
121
+ ```
122
+
123
+ ## Main Workflow
124
+
125
+ 1. Open the workbench
126
+ 2. Fill in Feishu credentials or trigger Weixin QR login
127
+ 3. Save config and test connectivity
128
+ 4. Start the bridge
129
+ 5. Open the desktop sessions section
130
+ 6. Bind a Feishu or Weixin chat to the target thread
131
+ 7. Continue the same Codex thread from IM
132
+
133
+ If LAN access is enabled, the easiest path is to copy the LAN login link from the local workbench and open it on your phone or another device on the same network.
134
+
135
+ Useful commands:
136
+
137
+ - `/` / `/status` shows the current session
138
+ - `/h` / `/help` shows help
139
+ - `/t` / `/threads` lists the most recent 10 desktop threads, `/t all` / `/threads all` lists all of them, `/t n 100` / `/threads n 100` lists the most recent 100 desktop threads, and `/t 1` / `/thread 1` binds the first one
140
+ - `/n` / `/new` creates a new thread in the current formal session directory; these IM-created threads are only guaranteed to continue inside IM and will not automatically appear in the Codex Desktop thread list
141
+ - `/n proj1` / `/new proj1` creates a new project session under the default workspace root
142
+ - `/m` / `/mode` shows or changes the current mode; options: `code` / `plan` / `ask`
143
+ - `/r` / `/reasoning` shows or changes the current reasoning effort; options: `1|2|3|4|5`
144
+ - `/his` / `/history` shows the summarized history, and `/his raw` / `/history raw` shows raw history
145
+ - `/t 0` / `/thread 0` enters a temporary draft thread that does not pollute the main work thread
146
+ - `1 / 2 / 3` or `/perm ...` handles permission prompts
147
+ - N is configurable in the web workbench under the basic settings panel
148
+ - The workbench command guide shows both short commands and compatible original commands
149
+
150
+ If you enable Feishu streaming response cards, the Feishu app must have the required permissions published first, at minimum:
151
+
152
+ - `cardkit:card:write`
153
+ - `cardkit:card:read`
154
+ - `im:message:update`
155
+
156
+ If those permissions are missing, the bridge log will usually show `99991672` with `cardkit:card:write`, and the bridge falls back to a final-result message.
157
+
158
+ Also note that under the current `codex` runtime, the `Codex CLI / SDK` typically emits the assistant text only when the `agent_message` item is completed, not as token-level deltas. In practice that means Feishu "streaming cards" currently behave more like:
159
+
160
+ - early `Thinking / Tool Progress` updates
161
+ - final response text written into the card at completion
162
+
163
+ So character-by-character text streaming is not guaranteed in the current implementation.
164
+
165
+ If creating a new session fails with `Not inside a trusted directory`, either:
166
+
167
+ - switch to a trusted project with `/new /absolute/path` or `/new proj1`, or
168
+ - enable `Allow Codex outside trusted Git repos` in the basic settings and restart the bridge
169
+
170
+ The configuration page also includes Codex runtime controls:
171
+
172
+ - `Default workspace root`
173
+ - parent directory used for `/new proj1`
174
+ - falls back to `~/cx2im` when left empty, expanded for the current OS
175
+ - `Codex filesystem permission`
176
+ - `read-only`, `workspace-write`, or `danger-full-access`
177
+ - default: `workspace-write`
178
+ - `Codex reasoning effort`
179
+ - global default reasoning level
180
+ - can be overridden per IM session with `/reasoning`
181
+ - official runtime levels are `minimal`, `low`, `medium`, `high`, `xhigh`
182
+ - IM numeric aliases are `1=minimal`, `2=low`, `3=medium`, `4=high`, `5=xhigh`
183
+
184
+ If you are using `codex-to-im` on your own development machine for real coding work, the more aggressive recommended setup is:
185
+
186
+ - set `Codex filesystem permission` to `danger-full-access`
187
+ - set `Codex reasoning effort` to `xhigh`
188
+
189
+ This is closer to a full-power `code` workflow. It fits a controlled local project, but is not a good default for unknown repositories or higher-risk environments.
190
+
191
+ The channel pages also expose a “Use Markdown for bridge feedback” switch:
192
+ - enabled by default for Feishu
193
+ - disabled by default for WeChat
194
+ - affects text sent through the bridge, including normal replies, shared-thread mirror messages, and system feedback such as `/h`, `/status`, and `/threads`
195
+
196
+ ## Update
197
+
198
+ On Windows, `npm update -g codex-to-im` can fail with `EBUSY` if the background UI or bridge is still running from the global install directory.
199
+
200
+ Recommended update flow:
201
+
202
+ ```bash
203
+ codex-to-im stop
204
+ npm update -g codex-to-im
205
+ codex-to-im
206
+ ```
207
+
208
+ ## Repo Layout
209
+
210
+ - `src/ui-server.ts` — local workbench UI and HTTP API
211
+ - `src/service-manager.ts` — bridge and UI lifecycle management
212
+ - `src/desktop-sessions.ts` — desktop thread discovery from Codex session files
213
+ - `src/session-bindings.ts` — binding summaries and web-side binding updates
214
+ - `src/lib/bridge/` — bridge runtime and IM channel routing
215
+ - `docs/` — PRD and shared-thread design docs
216
+
217
+ ## Development
218
+
219
+ ```bash
220
+ npm run typecheck
221
+ npm run build
222
+ ```
223
+
224
+ ## Status
225
+
226
+ Current product direction:
227
+
228
+ - Standalone local app first
229
+ - Web workbench first
230
+ - Shared Codex thread model first