@foxden-app/foxclaw 0.2.7 → 0.3.0
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 +1 -0
- package/README_EN.md +1 -0
- package/dist/controller/controller.d.ts +1 -0
- package/dist/controller/controller.js +18 -1
- package/dist/controller/presentation.js +12 -7
- package/dist/i18n.d.ts +18 -14
- package/dist/i18n.js +18 -14
- package/docs/install-for-beginners.md +4 -0
- package/docs/user-manual.md +460 -0
- package/docs/zh/install-for-beginners.md +4 -0
- package/docs/zh/user-manual.md +460 -0
- package/package.json +1 -1
- package/skills/npm-publish/SKILL.md +81 -0
- package/skills/npm-publish/agents/openai.yaml +4 -0
|
@@ -0,0 +1,460 @@
|
|
|
1
|
+
# FoxClaw User Manual
|
|
2
|
+
|
|
3
|
+
FoxClaw wraps your local Codex into a phone-controllable service. Telegram or Weixin provides the chat surface, FoxClaw handles auth, thread binding, approvals, setup panels, and account switching, and your local `codex app-server` performs the actual coding work.
|
|
4
|
+
|
|
5
|
+
Typical flow:
|
|
6
|
+
|
|
7
|
+
```text
|
|
8
|
+
Telegram/Weixin on your phone
|
|
9
|
+
-> FoxClaw bot
|
|
10
|
+
-> local FoxClaw service
|
|
11
|
+
-> codex app-server
|
|
12
|
+
-> DEFAULT_CWD or the current thread cwd
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Your code, shell access, Codex auth, and runtime state stay on the host machine. For a first install, use Telegram private chat before configuring groups, topics, or Weixin.
|
|
16
|
+
|
|
17
|
+
## 1. Full Setup
|
|
18
|
+
|
|
19
|
+
### 1.1 Install Node.js 24
|
|
20
|
+
|
|
21
|
+
FoxClaw requires Node.js 24. Check first:
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
node -v
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
If this is not `v24...`, install Node 24 with `nvm`:
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash
|
|
31
|
+
export NVM_DIR="$HOME/.nvm"
|
|
32
|
+
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"
|
|
33
|
+
nvm install 24
|
|
34
|
+
nvm use 24
|
|
35
|
+
node -v
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
### 1.2 Install And Log In To Codex
|
|
39
|
+
|
|
40
|
+
FoxClaw does not create a Codex account. It uses the Codex CLI already logged in on this machine.
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
npm install -g @openai/codex
|
|
44
|
+
codex login
|
|
45
|
+
codex --version
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
`codex --version` only proves the command exists. To verify auth, start Codex and run a tiny request:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
codex
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
Then type:
|
|
55
|
+
|
|
56
|
+
```text
|
|
57
|
+
Say ready and exit.
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
If Codex answers normally, FoxClaw has a working execution backend.
|
|
61
|
+
|
|
62
|
+
### 1.3 Create A Telegram Bot
|
|
63
|
+
|
|
64
|
+
1. Open Telegram.
|
|
65
|
+
2. Search for `@BotFather`.
|
|
66
|
+
3. Send `/newbot`.
|
|
67
|
+
4. Follow the prompts to choose a bot name and username.
|
|
68
|
+
5. Copy the bot token. It looks like `123456789:AA...`.
|
|
69
|
+
|
|
70
|
+
Keep this token private. Anyone with the token can control the bot.
|
|
71
|
+
|
|
72
|
+
### 1.4 Get Your Numeric Telegram User ID
|
|
73
|
+
|
|
74
|
+
FoxClaw only responds to the user configured in `TG_ALLOWED_USER_ID`.
|
|
75
|
+
|
|
76
|
+
1. Open Telegram.
|
|
77
|
+
2. Search for `@userinfobot`.
|
|
78
|
+
3. Send any message or press Start.
|
|
79
|
+
4. Copy the numeric `Id`.
|
|
80
|
+
|
|
81
|
+
Use the number, not your `@username`.
|
|
82
|
+
|
|
83
|
+
### 1.5 Install FoxClaw
|
|
84
|
+
|
|
85
|
+
If you use pnpm for global packages:
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
pnpm add -g @foxden-app/foxclaw
|
|
89
|
+
foxclaw init
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
If you use npm:
|
|
93
|
+
|
|
94
|
+
```bash
|
|
95
|
+
npm install -g @foxden-app/foxclaw
|
|
96
|
+
foxclaw init
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
Both install the same published npm package. Use one global package manager consistently on a machine to avoid multiple versions in PATH.
|
|
100
|
+
|
|
101
|
+
### 1.6 Fill In The Config
|
|
102
|
+
|
|
103
|
+
The default config file is `~/.foxclaw/.env`:
|
|
104
|
+
|
|
105
|
+
```bash
|
|
106
|
+
$EDITOR ~/.foxclaw/.env
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
Minimum private-chat config:
|
|
110
|
+
|
|
111
|
+
```dotenv
|
|
112
|
+
TG_BOT_TOKEN=123456789:replace_with_your_bot_token
|
|
113
|
+
TG_ALLOWED_USER_ID=123456789
|
|
114
|
+
TG_ALLOWED_CHAT_ID=
|
|
115
|
+
TG_ALLOWED_TOPIC_ID=
|
|
116
|
+
DEFAULT_CWD=/absolute/path/to/workspace
|
|
117
|
+
DEFAULT_APPROVAL_POLICY=on-request
|
|
118
|
+
DEFAULT_SANDBOX_MODE=workspace-write
|
|
119
|
+
```
|
|
120
|
+
|
|
121
|
+
Fields:
|
|
122
|
+
|
|
123
|
+
- `TG_BOT_TOKEN`: the token from `@BotFather`.
|
|
124
|
+
- `TG_ALLOWED_USER_ID`: your numeric Telegram user id.
|
|
125
|
+
- `TG_ALLOWED_CHAT_ID`: leave empty for the first private-chat setup.
|
|
126
|
+
- `TG_ALLOWED_TOPIC_ID`: leave empty unless binding a Telegram topic.
|
|
127
|
+
- `DEFAULT_CWD`: the default directory where Codex works; it must exist.
|
|
128
|
+
- `DEFAULT_APPROVAL_POLICY`: `on-request` is a good first value.
|
|
129
|
+
- `DEFAULT_SANDBOX_MODE`: `workspace-write` is a good first value.
|
|
130
|
+
|
|
131
|
+
### 1.7 Check And Start
|
|
132
|
+
|
|
133
|
+
```bash
|
|
134
|
+
foxclaw doctor
|
|
135
|
+
foxclaw start
|
|
136
|
+
foxclaw status
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
Linux service logs:
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
systemctl --user status foxclaw.service
|
|
143
|
+
journalctl --user -u foxclaw.service -f
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
On macOS, `foxclaw start` manages launchd. For foreground debugging, stop the background service and run:
|
|
147
|
+
|
|
148
|
+
```bash
|
|
149
|
+
foxclaw serve
|
|
150
|
+
```
|
|
151
|
+
|
|
152
|
+
### 1.8 First Telegram Test
|
|
153
|
+
|
|
154
|
+
Open a private chat with your bot and send:
|
|
155
|
+
|
|
156
|
+
```text
|
|
157
|
+
/help
|
|
158
|
+
```
|
|
159
|
+
|
|
160
|
+
```text
|
|
161
|
+
/status
|
|
162
|
+
```
|
|
163
|
+
|
|
164
|
+
```text
|
|
165
|
+
/setup
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
Then send a normal request:
|
|
169
|
+
|
|
170
|
+
```text
|
|
171
|
+
List files in DEFAULT_CWD.
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
If Codex replies, the basic path is working.
|
|
175
|
+
|
|
176
|
+
## 2. Groups And Topics
|
|
177
|
+
|
|
178
|
+
Private chat is the safest first mode. Configure a group or topic only after private chat works.
|
|
179
|
+
|
|
180
|
+
```dotenv
|
|
181
|
+
TG_ALLOWED_CHAT_ID=-1001234567890
|
|
182
|
+
TG_ALLOWED_TOPIC_ID=42
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
- Leave `TG_ALLOWED_CHAT_ID` empty for private chat only.
|
|
186
|
+
- Set only `TG_ALLOWED_CHAT_ID` to allow one group as the default conversation scope.
|
|
187
|
+
- Set both values to bind one topic.
|
|
188
|
+
- Private chat still works for `TG_ALLOWED_USER_ID` when a group is configured.
|
|
189
|
+
|
|
190
|
+
Find group or topic IDs:
|
|
191
|
+
|
|
192
|
+
1. Stop FoxClaw.
|
|
193
|
+
2. Send a message in the target group or topic.
|
|
194
|
+
3. Open:
|
|
195
|
+
|
|
196
|
+
```text
|
|
197
|
+
https://api.telegram.org/bot<YOUR_BOT_TOKEN>/getUpdates
|
|
198
|
+
```
|
|
199
|
+
|
|
200
|
+
4. Use `message.chat.id` as `TG_ALLOWED_CHAT_ID`.
|
|
201
|
+
5. Use `message.message_thread_id` as `TG_ALLOWED_TOPIC_ID`.
|
|
202
|
+
|
|
203
|
+
If FoxClaw is still running, it may consume the update before you inspect it.
|
|
204
|
+
|
|
205
|
+
For group messages:
|
|
206
|
+
|
|
207
|
+
- Add the bot to the group.
|
|
208
|
+
- Disable privacy mode in `@BotFather`.
|
|
209
|
+
- Promote the bot to administrator.
|
|
210
|
+
- Test with a plain natural-language message, not only `/status@botname`.
|
|
211
|
+
|
|
212
|
+
## 3. Commands
|
|
213
|
+
|
|
214
|
+
### 3.1 `/help`
|
|
215
|
+
|
|
216
|
+
`/help` returns the available command list. The top entries are pinned:
|
|
217
|
+
|
|
218
|
+
```text
|
|
219
|
+
/help
|
|
220
|
+
/setup
|
|
221
|
+
/status
|
|
222
|
+
/threads [query]
|
|
223
|
+
/auth
|
|
224
|
+
```
|
|
225
|
+
|
|
226
|
+
Later commands are sorted by recent usage. Plain text, photos, and files continue the currently bound thread; if no thread is bound, FoxClaw creates one.
|
|
227
|
+
|
|
228
|
+
### 3.2 `/status`, `/account`, `/quota`
|
|
229
|
+
|
|
230
|
+
- `/status`: FoxClaw, app-server, current thread binding, model, access, and Codex usage summary.
|
|
231
|
+
- `/account`: current Codex account.
|
|
232
|
+
- `/quota`: Codex usage and quota window.
|
|
233
|
+
|
|
234
|
+
### 3.3 `/config`, `/requirements`, `/provider`
|
|
235
|
+
|
|
236
|
+
- `/config`: reads the Codex config summary for the bound thread cwd or `DEFAULT_CWD`, including `model`, `approval_policy`, `sandbox_mode`, and `service_tier`.
|
|
237
|
+
- `/requirements`: shows app-server constraints such as allowed approval, sandbox, and web search modes.
|
|
238
|
+
- `/provider`: shows the current Codex provider summary.
|
|
239
|
+
|
|
240
|
+
These are useful when the phone-side model, permission, or provider behavior does not match what you expected.
|
|
241
|
+
|
|
242
|
+
## 4. The `/setup` Panel
|
|
243
|
+
|
|
244
|
+
`/setup` is one of the main mobile panels. Settings are scoped to the chat, so private chat, group, and topic can use different settings.
|
|
245
|
+
|
|
246
|
+
It controls:
|
|
247
|
+
|
|
248
|
+
- Model: server default, or a model returned by app-server.
|
|
249
|
+
- Reasoning effort: for example `low`, `medium`, `high`, or `xhigh`, depending on model support.
|
|
250
|
+
- Fast tier: available when supported by the selected model.
|
|
251
|
+
- Access: `read-only`, `default`, or `full-access`.
|
|
252
|
+
- Mode: `Agent` or `Plan`.
|
|
253
|
+
- Active turn behavior: steer the current turn, or queue the message for the next turn.
|
|
254
|
+
|
|
255
|
+
Telegram renders the HTML and buttons. This text block approximates the real panel:
|
|
256
|
+
|
|
257
|
+
```text
|
|
258
|
+
Session preferences
|
|
259
|
+
Current: gpt-5.5 · high · fast=off · default · Agent · Steer current turn
|
|
260
|
+
Focus: Model
|
|
261
|
+
|
|
262
|
+
Model: gpt-5.5
|
|
263
|
+
Effort: high
|
|
264
|
+
Fast: off
|
|
265
|
+
Access: Default (on-request / workspace-write)
|
|
266
|
+
Mode: Agent
|
|
267
|
+
Active turn: Steer current turn
|
|
268
|
+
|
|
269
|
+
[Auto] [gpt-5.5]
|
|
270
|
+
[low] [medium] [high]
|
|
271
|
+
[⚡ Fast on] [Fast off]
|
|
272
|
+
[👁️ Read-only] [🛡️ Default] [🔓 Full access]
|
|
273
|
+
[Agent] [📝 Plan]
|
|
274
|
+
[Steer current turn] [Queue next turn]
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
Command aliases:
|
|
278
|
+
|
|
279
|
+
- `/model <model|default>`: switch model.
|
|
280
|
+
- `/effort <effort|default>`: switch reasoning effort.
|
|
281
|
+
- `/permissions [read-only|default|full-access]`: switch access preset.
|
|
282
|
+
- `/mode [default|plan]`: switch Agent/Plan.
|
|
283
|
+
- `/active <steer|queue>`: control how new messages behave during an active turn.
|
|
284
|
+
|
|
285
|
+
## 5. Threads And Watch
|
|
286
|
+
|
|
287
|
+
FoxClaw chats are bound to Codex threads. Once you open a thread from your phone, normal messages continue that thread.
|
|
288
|
+
|
|
289
|
+
Common commands:
|
|
290
|
+
|
|
291
|
+
- `/threads [query]`: list recent threads, optionally filtered by keyword.
|
|
292
|
+
- `/threads archived [query]`: list archived threads.
|
|
293
|
+
- `/open <n>`: open item n from the latest `/threads` list and bind this chat.
|
|
294
|
+
- `/new [cwd]`: create a new thread in a cwd, or in the default cwd.
|
|
295
|
+
- `/where`: show the current thread, cwd, and settings.
|
|
296
|
+
- `/rename <name>`: rename the current thread.
|
|
297
|
+
- `/archive`: archive the current thread.
|
|
298
|
+
- `/interrupt`: interrupt the current running turn.
|
|
299
|
+
|
|
300
|
+
Threads panel approximation:
|
|
301
|
+
|
|
302
|
+
```text
|
|
303
|
+
Recent threads
|
|
304
|
+
Tap a button below to open or manage a thread.
|
|
305
|
+
Showing 1-5
|
|
306
|
+
Current: fix auth rotation
|
|
307
|
+
~/Projects/foxclaw | 3 minutes ago | idle
|
|
308
|
+
|
|
309
|
+
[🧵 1. fix auth rotation]
|
|
310
|
+
[✏️] [👀] [🗑️] [➕]
|
|
311
|
+
|
|
312
|
+
[🧵 2. polish README copy]
|
|
313
|
+
[✏️] [👀] [🗑️] [➕]
|
|
314
|
+
|
|
315
|
+
[➕ New]
|
|
316
|
+
[➡️ Next]
|
|
317
|
+
[🗄️ Archived]
|
|
318
|
+
```
|
|
319
|
+
|
|
320
|
+
### `/watch`
|
|
321
|
+
|
|
322
|
+
`/watch` observes a thread even if the task was started elsewhere. A common workflow is starting a long Codex CLI task at your desk, then watching it from your phone.
|
|
323
|
+
|
|
324
|
+
Usage:
|
|
325
|
+
|
|
326
|
+
- `/watch`: watch the currently bound thread.
|
|
327
|
+
- `/watch <n>`: watch item n from the latest `/threads` list.
|
|
328
|
+
- `/unwatch`: stop watching.
|
|
329
|
+
|
|
330
|
+
Watch mode mirrors live turn progress and approval requests. The watching chat is read-only for normal prompts during the observed turn. Send `/unwatch` before starting a new prompt from that chat, or wait for the turn to finish.
|
|
331
|
+
|
|
332
|
+
## 6. Codex Login And Auth Rotation
|
|
333
|
+
|
|
334
|
+
This is a key FoxClaw feature. Codex auth is usually stored at `~/.codex/auth.json`. FoxClaw stores multiple accounts as candidate files and switches which candidate the active `auth.json` points to.
|
|
335
|
+
|
|
336
|
+
### 6.1 File Format
|
|
337
|
+
|
|
338
|
+
Candidate files live in the Codex auth directory, usually `~/.codex/`. If `CODEX_AUTH_DIR` is set, FoxClaw uses that directory.
|
|
339
|
+
|
|
340
|
+
Recommended layout:
|
|
341
|
+
|
|
342
|
+
```text
|
|
343
|
+
~/.codex/
|
|
344
|
+
auth.json -> /home/alice/.codex/auth.json_personal
|
|
345
|
+
auth.json_personal
|
|
346
|
+
auth.json_team
|
|
347
|
+
auth.json_plus_trial
|
|
348
|
+
```
|
|
349
|
+
|
|
350
|
+
FoxClaw recognizes candidate names in these forms:
|
|
351
|
+
|
|
352
|
+
- `auth.json_<name>`
|
|
353
|
+
- `auth.json.<name>`
|
|
354
|
+
- `auth.json-<name>`
|
|
355
|
+
|
|
356
|
+
`auth.json` is what Codex currently uses. When switching accounts, FoxClaw points `auth.json` at one candidate. Candidate contents are Codex-generated JSON; FoxClaw treats those private fields as opaque and you should not hand-write them.
|
|
357
|
+
|
|
358
|
+
If you already have a working `auth.json`, you can save it as a candidate:
|
|
359
|
+
|
|
360
|
+
```bash
|
|
361
|
+
cp -L ~/.codex/auth.json ~/.codex/auth.json_personal
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
The safer path is adding candidates from the phone with `/auth add <name>`.
|
|
365
|
+
|
|
366
|
+
### 6.2 Login Commands
|
|
367
|
+
|
|
368
|
+
- `/login_device`: starts ChatGPT device login for the current `auth.json`. FoxClaw sends a login URL, short code, login id, and cancel command.
|
|
369
|
+
- `/login_cancel [id]`: cancels an in-progress device login.
|
|
370
|
+
- `/logout confirm`: logs out the current Codex account.
|
|
371
|
+
- `/auth add <name>`: adds a candidate account. For example, `/auth add work` creates `auth.json_work` and starts device login.
|
|
372
|
+
|
|
373
|
+
`/auth add <name>` flow:
|
|
374
|
+
|
|
375
|
+
1. FoxClaw prepares `auth.json_<name>`.
|
|
376
|
+
2. It temporarily points `auth.json` at that candidate.
|
|
377
|
+
3. It restarts app-server so Codex writes into the new candidate.
|
|
378
|
+
4. It sends the login URL and short code.
|
|
379
|
+
5. You complete login in the browser.
|
|
380
|
+
6. The candidate appears in `/auth`.
|
|
381
|
+
|
|
382
|
+
If the login is cancelled or fails, FoxClaw tries to restore the previous auth target and remove the unfinished candidate.
|
|
383
|
+
|
|
384
|
+
### 6.3 The `/auth` Panel
|
|
385
|
+
|
|
386
|
+
`/auth` lists candidate accounts, the current account, and the auth directory. It also provides buttons for switching, disabling, login, and reload.
|
|
387
|
+
|
|
388
|
+
Approximation:
|
|
389
|
+
|
|
390
|
+
```text
|
|
391
|
+
Codex auth
|
|
392
|
+
Current: auth.json_personal
|
|
393
|
+
Auth dir: /home/alice/.codex
|
|
394
|
+
Candidates: 2
|
|
395
|
+
1. auth.json_personal * [enabled]
|
|
396
|
+
2. auth.json_team [enabled]
|
|
397
|
+
|
|
398
|
+
[✅ auth.json_personal] [✅]
|
|
399
|
+
[🔐 auth.json_team] [✅]
|
|
400
|
+
[🛡️ Access] [🔑 Login]
|
|
401
|
+
[🔄 Reload auth]
|
|
402
|
+
```
|
|
403
|
+
|
|
404
|
+
The right-side `✅` / `⏸️` button shows the current state. Tapping it toggles enabled/disabled, and the refreshed list shows the new state.
|
|
405
|
+
|
|
406
|
+
Equivalent commands:
|
|
407
|
+
|
|
408
|
+
- `/auth` or `/auth list`: show candidates.
|
|
409
|
+
- `/auth use <n>`: switch to candidate n and restart app-server.
|
|
410
|
+
- `/auth enable <n>`: let candidate n participate in auto-rotation.
|
|
411
|
+
- `/auth disable <n>`: skip candidate n during auto-rotation.
|
|
412
|
+
- `/auth reload` or `/auth_reload`: restart app-server and reload the current `auth.json`.
|
|
413
|
+
|
|
414
|
+
If active turns, pending approvals, pending user inputs, or MCP elicitations exist, FoxClaw refuses manual auth switching to avoid changing accounts mid-request.
|
|
415
|
+
|
|
416
|
+
### 6.4 How Auto-Rotation Works
|
|
417
|
+
|
|
418
|
+
When Codex reports a usage limit, missing login, expired auth, or similar auth error, FoxClaw tries to rotate automatically:
|
|
419
|
+
|
|
420
|
+
1. Record the failed candidate.
|
|
421
|
+
2. Select the next enabled candidate that has not already failed in this retry cycle.
|
|
422
|
+
3. Point `auth.json` at that candidate.
|
|
423
|
+
4. Restart `codex app-server` so the new auth is loaded.
|
|
424
|
+
5. Retry the failed request with the new account.
|
|
425
|
+
|
|
426
|
+
Disabled candidates are skipped. If no candidate is available, FoxClaw reports the error back to the phone and stops retrying.
|
|
427
|
+
|
|
428
|
+
Example account layout:
|
|
429
|
+
|
|
430
|
+
```text
|
|
431
|
+
auth.json_personal # primary account
|
|
432
|
+
auth.json_team # Team or work account
|
|
433
|
+
auth.json_plus_trial # trial account
|
|
434
|
+
auth.json_backup # backup account, enable or disable as needed
|
|
435
|
+
```
|
|
436
|
+
|
|
437
|
+
## 7. Daily Workflow
|
|
438
|
+
|
|
439
|
+
1. Enter the project directory on your computer and make sure Codex works.
|
|
440
|
+
2. From your phone, send `/new /home/alice/Projects/app`, or use `/threads` to open an existing thread.
|
|
441
|
+
3. Use `/setup` to choose model, effort, access, and Agent/Plan mode.
|
|
442
|
+
4. Send a task, for example: `Fix the failing test and run the related test suite.`
|
|
443
|
+
5. Step away from the computer and watch progress on your phone.
|
|
444
|
+
6. Approve or deny command and file-change requests from Telegram.
|
|
445
|
+
7. To observe a task started from Codex CLI, use `/threads`, then tap `👀` or send `/watch <n>`.
|
|
446
|
+
8. When quota is hit, let `/auth` candidates auto-rotate, or switch manually with `/auth use <n>`.
|
|
447
|
+
|
|
448
|
+
## 8. Safety
|
|
449
|
+
|
|
450
|
+
- Do not share `TG_BOT_TOKEN`, `~/.codex/auth.json*`, or `.env`.
|
|
451
|
+
- Do not use `/`, `/home`, `/Users`, or your whole home directory as the first `DEFAULT_CWD`.
|
|
452
|
+
- When unsure, use `/permissions read-only` or select `Read-only` in `/setup`.
|
|
453
|
+
- Group mode still only accepts `TG_ALLOWED_USER_ID`, but use trusted groups.
|
|
454
|
+
- Multi-account files are Codex login credentials. Treat backups and sync tools accordingly.
|
|
455
|
+
|
|
456
|
+
## 9. More Reading
|
|
457
|
+
|
|
458
|
+
- [Beginner Install Guide](./install-for-beginners.md)
|
|
459
|
+
- [Agent-Assisted Install](./agent-assisted-install.md)
|
|
460
|
+
- [Troubleshooting](./troubleshooting.md)
|