grok-bot-cli 0.10.0 → 0.10.1
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/CHANGELOG.md +6 -0
- package/README.md +9 -2
- package/dist/.claude-plugin/marketplace.json +1 -1
- package/dist/.claude-plugin/plugin.json +1 -1
- package/dist/.codex-plugin/plugin.json +1 -1
- package/dist/.cursor-plugin/marketplace.json +1 -1
- package/dist/.cursor-plugin/plugin.json +1 -1
- package/dist/INSTALL.md +2 -2
- package/dist/README.md +9 -2
- package/dist/agent-bundle.compile-evidence.json +1 -1
- package/dist/agent-bundle.manifest.json +1 -1
- package/dist/bin/gbot-flight.mjs +70 -8
- package/dist/bin/gbot.mjs +72 -10
- package/dist/install.mjs +1 -1
- package/dist/mcp/mcp-claude-channel-8029413c.mjs +44 -2
- package/dist/mcp/mcp-grok-bot-b8c2461e-flight.mjs +81 -19
- package/dist/mcp/mcp-grok-bot-b8c2461e.mjs +82 -20
- package/dist/package.json +1 -1
- package/dist/plugin.json +1 -1
- package/dist/rules/codex-claude-on-user-machines.mdc +18 -0
- package/dist/scripts/gbot-relay.mjs +42 -6
- package/dist/skills/talk-to-grok-bot/SKILL.md +26 -11
- package/dist/skills/talk-to-grok-bot/references/bridge-administration.md +8 -3
- package/package.json +1 -1
|
@@ -7062,7 +7062,7 @@ var __webpack_modules__ = {
|
|
|
7062
7062
|
var _core_claude_routes_js__rspack_import_2 = __webpack_require__("./src/core/claude-routes.ts");
|
|
7063
7063
|
const __rspack_default_export = (0, agent_bundle_routes__rspack_import_1.uO)({
|
|
7064
7064
|
title: 'Message Claude Code',
|
|
7065
|
-
description: 'Send to a named, opted-in live Claude Code channel and wait for its reply. Unknown delivery must not be retried automatically.',
|
|
7065
|
+
description: 'Send to a named, opted-in live Claude Code channel and wait for its reply. Unknown delivery must not be retried automatically. Runs on the user\'s registered machine via its local socket, not the Grok Bot box. From the box, use Grok Bot Shell with a machineId to run gbot there after codex app-server daemon start or bootstrap; gbot has no remote transport.',
|
|
7066
7066
|
annotations: {
|
|
7067
7067
|
readOnlyHint: false
|
|
7068
7068
|
},
|
|
@@ -7132,7 +7132,7 @@ var __webpack_modules__ = {
|
|
|
7132
7132
|
excludeClients: [
|
|
7133
7133
|
'codex'
|
|
7134
7134
|
],
|
|
7135
|
-
description: 'Send to Codex. With replyToGrok or bindingId, managed delivery returns the terminal answer to Grok automatically. Otherwise optional wait observes completion and explicit steer requires expectedTurnId. Acceptance is not completion.',
|
|
7135
|
+
description: 'Send to a Codex thread. Runs on the user\'s registered machine via its local socket, not the Grok Bot box. From the box, use Grok Bot Shell with a machineId to run gbot there after codex app-server daemon start or bootstrap; gbot has no remote transport. With replyToGrok or bindingId, managed delivery returns the terminal answer to Grok automatically. Otherwise optional wait observes completion and explicit steer requires expectedTurnId. Acceptance is not completion.',
|
|
7136
7136
|
title: 'Codex send',
|
|
7137
7137
|
annotations: {
|
|
7138
7138
|
readOnlyHint: false
|
|
@@ -7243,7 +7243,7 @@ var __webpack_modules__ = {
|
|
|
7243
7243
|
excludeClients: [
|
|
7244
7244
|
'codex'
|
|
7245
7245
|
],
|
|
7246
|
-
description: 'Discover a bounded page of Codex daemon threads.',
|
|
7246
|
+
description: 'Discover a bounded page of Codex daemon threads. Runs on the user\'s registered machine via its local socket, not the Grok Bot box. From the box, use Grok Bot Shell with a machineId to run gbot there after codex app-server daemon start or bootstrap; gbot has no remote transport.',
|
|
7247
7247
|
title: 'Codex threads',
|
|
7248
7248
|
annotations: {
|
|
7249
7249
|
readOnlyHint: true
|
|
@@ -7294,7 +7294,7 @@ var __webpack_modules__ = {
|
|
|
7294
7294
|
excludeClients: [
|
|
7295
7295
|
'codex'
|
|
7296
7296
|
],
|
|
7297
|
-
description: 'Explicit diagnostic observation of one Codex turn; returns execution and final reply without interrupting it.',
|
|
7297
|
+
description: 'Explicit diagnostic observation of one Codex turn; returns execution and final reply without interrupting it. Runs on the user\'s registered machine via its local socket, not the Grok Bot box. From the box, use Grok Bot Shell with a machineId to run gbot there after codex app-server daemon start or bootstrap; gbot has no remote transport.',
|
|
7298
7298
|
title: 'Codex wait',
|
|
7299
7299
|
annotations: {
|
|
7300
7300
|
readOnlyHint: true
|
|
@@ -7363,7 +7363,7 @@ var __webpack_modules__ = {
|
|
|
7363
7363
|
excludeClients: [
|
|
7364
7364
|
'codex'
|
|
7365
7365
|
],
|
|
7366
|
-
description: 'Watch bounded Codex thread events for diagnostics without answering approvals.',
|
|
7366
|
+
description: 'Watch bounded Codex thread events for diagnostics without answering approvals. Runs on the user\'s registered machine via its local socket, not the Grok Bot box. From the box, use Grok Bot Shell with a machineId to run gbot there after codex app-server daemon start or bootstrap; gbot has no remote transport.',
|
|
7367
7367
|
title: 'Codex watch',
|
|
7368
7368
|
annotations: {
|
|
7369
7369
|
readOnlyHint: true
|
|
@@ -56173,7 +56173,7 @@ var __webpack_modules__ = {
|
|
|
56173
56173
|
const route10 = Object.assign({}, Reflect.get(_src_mcp_grok_bot_tools_gbot_grok_respond_tsx__rspack_import_13, 'default'), _src_mcp_grok_bot_tools_gbot_grok_respond_tsx__rspack_import_13);
|
|
56174
56174
|
const route11 = Object.assign({}, Reflect.get(_src_mcp_grok_bot_tools_gbot_send_tsx__rspack_import_14, 'default'), _src_mcp_grok_bot_tools_gbot_send_tsx__rspack_import_14);
|
|
56175
56175
|
const route12 = Object.assign({}, Reflect.get(_src_mcp_grok_bot_tools_gbot_thread_tsx__rspack_import_15, 'default'), _src_mcp_grok_bot_tools_gbot_thread_tsx__rspack_import_15);
|
|
56176
|
-
const ARTIFACT_EPOCH = "gbot@0.10.
|
|
56176
|
+
const ARTIFACT_EPOCH = "gbot@0.10.1";
|
|
56177
56177
|
const pluginRoot = (0, _agent_bundle_runtime__rspack_import_16.E7)({
|
|
56178
56178
|
fallback: (0, node_url__rspack_import_0.fileURLToPath)(new URL('..', import.meta.url)),
|
|
56179
56179
|
stateAnchor: 'user-data'
|
|
@@ -56188,7 +56188,7 @@ var __webpack_modules__ = {
|
|
|
56188
56188
|
"annotations": {
|
|
56189
56189
|
"readOnlyHint": false
|
|
56190
56190
|
},
|
|
56191
|
-
"description": "Send to a named, opted-in live Claude Code channel and wait for its reply. Unknown delivery must not be retried automatically.",
|
|
56191
|
+
"description": "Send to a named, opted-in live Claude Code channel and wait for its reply. Unknown delivery must not be retried automatically. Runs on the user's registered machine via its local socket, not the Grok Bot box. From the box, use Grok Bot Shell with a machineId to run gbot there after codex app-server daemon start or bootstrap; gbot has no remote transport.",
|
|
56192
56192
|
"inputJsonSchema": {
|
|
56193
56193
|
"additionalProperties": false,
|
|
56194
56194
|
"properties": {
|
|
@@ -56223,7 +56223,7 @@ var __webpack_modules__ = {
|
|
|
56223
56223
|
"annotations": {
|
|
56224
56224
|
"readOnlyHint": false
|
|
56225
56225
|
},
|
|
56226
|
-
"description": "Send to Codex. With replyToGrok or bindingId, managed delivery returns the terminal answer to Grok automatically. Otherwise optional wait observes completion and explicit steer requires expectedTurnId. Acceptance is not completion.",
|
|
56226
|
+
"description": "Send to a Codex thread. Runs on the user's registered machine via its local socket, not the Grok Bot box. From the box, use Grok Bot Shell with a machineId to run gbot there after codex app-server daemon start or bootstrap; gbot has no remote transport. With replyToGrok or bindingId, managed delivery returns the terminal answer to Grok automatically. Otherwise optional wait observes completion and explicit steer requires expectedTurnId. Acceptance is not completion.",
|
|
56227
56227
|
"excludeClients": [
|
|
56228
56228
|
"codex"
|
|
56229
56229
|
],
|
|
@@ -56303,7 +56303,7 @@ var __webpack_modules__ = {
|
|
|
56303
56303
|
"annotations": {
|
|
56304
56304
|
"readOnlyHint": true
|
|
56305
56305
|
},
|
|
56306
|
-
"description": "Discover a bounded page of Codex daemon threads.",
|
|
56306
|
+
"description": "Discover a bounded page of Codex daemon threads. Runs on the user's registered machine via its local socket, not the Grok Bot box. From the box, use Grok Bot Shell with a machineId to run gbot there after codex app-server daemon start or bootstrap; gbot has no remote transport.",
|
|
56307
56307
|
"excludeClients": [
|
|
56308
56308
|
"codex"
|
|
56309
56309
|
],
|
|
@@ -56336,7 +56336,7 @@ var __webpack_modules__ = {
|
|
|
56336
56336
|
"annotations": {
|
|
56337
56337
|
"readOnlyHint": true
|
|
56338
56338
|
},
|
|
56339
|
-
"description": "Explicit diagnostic observation of one Codex turn; returns execution and final reply without interrupting it.",
|
|
56339
|
+
"description": "Explicit diagnostic observation of one Codex turn; returns execution and final reply without interrupting it. Runs on the user's registered machine via its local socket, not the Grok Bot box. From the box, use Grok Bot Shell with a machineId to run gbot there after codex app-server daemon start or bootstrap; gbot has no remote transport.",
|
|
56340
56340
|
"excludeClients": [
|
|
56341
56341
|
"codex"
|
|
56342
56342
|
],
|
|
@@ -56385,7 +56385,7 @@ var __webpack_modules__ = {
|
|
|
56385
56385
|
"annotations": {
|
|
56386
56386
|
"readOnlyHint": true
|
|
56387
56387
|
},
|
|
56388
|
-
"description": "Watch bounded Codex thread events for diagnostics without answering approvals.",
|
|
56388
|
+
"description": "Watch bounded Codex thread events for diagnostics without answering approvals. Runs on the user's registered machine via its local socket, not the Grok Bot box. From the box, use Grok Bot Shell with a machineId to run gbot there after codex app-server daemon start or bootstrap; gbot has no remote transport.",
|
|
56389
56389
|
"excludeClients": [
|
|
56390
56390
|
"codex"
|
|
56391
56391
|
],
|
|
@@ -56766,7 +56766,7 @@ var __webpack_modules__ = {
|
|
|
56766
56766
|
lineage: lineage.registry,
|
|
56767
56767
|
plugin: {
|
|
56768
56768
|
"name": "gbot",
|
|
56769
|
-
"version": "0.10.
|
|
56769
|
+
"version": "0.10.1"
|
|
56770
56770
|
},
|
|
56771
56771
|
pluginRoot: pluginRoot.identity,
|
|
56772
56772
|
routes
|
|
@@ -57007,6 +57007,7 @@ var __webpack_modules__ = {
|
|
|
57007
57007
|
var node_net__rspack_import_2 = __webpack_require__("node:net");
|
|
57008
57008
|
var node_os__rspack_import_3 = __webpack_require__("node:os");
|
|
57009
57009
|
var node_path__rspack_import_4 = __webpack_require__("node:path");
|
|
57010
|
+
var _user_machine_guidance_js__rspack_import_5 = __webpack_require__("./src/core/user-machine-guidance.js");
|
|
57010
57011
|
const MAX_BYTES = 65536;
|
|
57011
57012
|
const FRAME_BYTES = MAX_BYTES * 6 + 1024;
|
|
57012
57013
|
const defaultDirectory = ()=>(0, node_path__rspack_import_4.join)((0, node_os__rspack_import_3.homedir)(), '.grok-bot-cli', 'claude');
|
|
@@ -57017,6 +57018,18 @@ var __webpack_modules__ = {
|
|
|
57017
57018
|
if (Buffer.byteLength(path) >= 104) throw Error('Claude channel socket path is too long');
|
|
57018
57019
|
return path;
|
|
57019
57020
|
}
|
|
57021
|
+
function absentClaudeChannelMessage(path, directory) {
|
|
57022
|
+
if ((0, _user_machine_guidance_js__rspack_import_5.R)({
|
|
57023
|
+
path,
|
|
57024
|
+
home: directory
|
|
57025
|
+
})) {
|
|
57026
|
+
return [
|
|
57027
|
+
'No Claude channel socket at ' + path + '.',
|
|
57028
|
+
_user_machine_guidance_js__rspack_import_5.M
|
|
57029
|
+
].join('\n');
|
|
57030
|
+
}
|
|
57031
|
+
return 'No Claude channel socket at ' + path + '. Start an opted-in Claude Code session with GROK_BOT_CLAUDE_CHANNEL on this machine (gbot has no remote transport).';
|
|
57032
|
+
}
|
|
57020
57033
|
function messageText(message) {
|
|
57021
57034
|
if (typeof message !== 'string' || !message.trim() || Buffer.byteLength(message) > MAX_BYTES) throw Error('Message must contain text within 64 KiB');
|
|
57022
57035
|
return message;
|
|
@@ -57150,8 +57163,21 @@ var __webpack_modules__ = {
|
|
|
57150
57163
|
const path = socketPath(name, directory);
|
|
57151
57164
|
messageText(message);
|
|
57152
57165
|
timeout(timeoutMs);
|
|
57153
|
-
|
|
57154
|
-
|
|
57166
|
+
try {
|
|
57167
|
+
await privateDirectory(directory);
|
|
57168
|
+
} catch (error) {
|
|
57169
|
+
if (error && (error.code === 'ENOENT' || /no such file|ENOENT/i.test(String(error.message)))) {
|
|
57170
|
+
throw Error(absentClaudeChannelMessage(path, directory));
|
|
57171
|
+
}
|
|
57172
|
+
throw error;
|
|
57173
|
+
}
|
|
57174
|
+
let info;
|
|
57175
|
+
try {
|
|
57176
|
+
info = await (0, node_fs_promises__rspack_import_1.lstat)(path);
|
|
57177
|
+
} catch (error) {
|
|
57178
|
+
if (error && error.code === 'ENOENT') throw Error(absentClaudeChannelMessage(path, directory));
|
|
57179
|
+
throw error;
|
|
57180
|
+
}
|
|
57155
57181
|
if (!info.isSocket() || info.uid !== process.getuid() || info.mode & 63) throw Error('Claude channel socket is not private to this user');
|
|
57156
57182
|
return new Promise((resolve, reject)=>{
|
|
57157
57183
|
const socket = (0, node_net__rspack_import_2.connect)(path);
|
|
@@ -57201,6 +57227,7 @@ var __webpack_modules__ = {
|
|
|
57201
57227
|
var _package_json__rspack_import_6 = __webpack_require__("./package.json");
|
|
57202
57228
|
var _codex_contract_js__rspack_import_7 = __webpack_require__("./src/core/codex/contract.js");
|
|
57203
57229
|
var _desktop_shim_js__rspack_import_8 = __webpack_require__("./src/core/desktop-shim.js");
|
|
57230
|
+
var _user_machine_guidance_js__rspack_import_9 = __webpack_require__("./src/core/user-machine-guidance.js");
|
|
57204
57231
|
const PINNED_CODEX_VERSION = "0.154.0";
|
|
57205
57232
|
const UPSTREAM_DESKTOP_ISSUES = [
|
|
57206
57233
|
"https://github.com/openai/codex/issues/41014",
|
|
@@ -57234,20 +57261,34 @@ var __webpack_modules__ = {
|
|
|
57234
57261
|
function singleLine(text) {
|
|
57235
57262
|
return stripTerminalControls(text).replace(/[\t\n\r\u2028\u2029]+/g, " ");
|
|
57236
57263
|
}
|
|
57237
|
-
function
|
|
57264
|
+
function boxUnreachableMessage(path) {
|
|
57265
|
+
return [
|
|
57266
|
+
"No Codex app-server control socket at " + path + ".",
|
|
57267
|
+
_user_machine_guidance_js__rspack_import_9.M
|
|
57268
|
+
].join("\n");
|
|
57269
|
+
}
|
|
57270
|
+
function unreachableMessage(path, desktopAttached = "unknown", env = process.env) {
|
|
57271
|
+
if ((0, _user_machine_guidance_js__rspack_import_9.R)({
|
|
57272
|
+
path,
|
|
57273
|
+
env,
|
|
57274
|
+
home: env.HOME || (0, node_os__rspack_import_3.homedir)()
|
|
57275
|
+
})) {
|
|
57276
|
+
return boxUnreachableMessage(path);
|
|
57277
|
+
}
|
|
57238
57278
|
if (desktopAttached === "private-stdio") {
|
|
57239
57279
|
return [
|
|
57240
57280
|
"ChatGPT Desktop is running its private stdio app-server, which external clients cannot reach",
|
|
57241
57281
|
"(" + UPSTREAM_DESKTOP_ISSUES.join(", ") + ").",
|
|
57242
|
-
"No Codex app-server control socket at " + path + ": start a managed standalone daemon with `codex app-server daemon start
|
|
57243
|
-
"gbot codex targets daemon-managed threads only."
|
|
57282
|
+
"No Codex app-server control socket at " + path + ": start a managed standalone daemon with `codex app-server daemon start` (or bootstrap).",
|
|
57283
|
+
"gbot codex targets daemon-managed threads only; gbot has no remote transport."
|
|
57244
57284
|
].join("\n");
|
|
57245
57285
|
}
|
|
57246
57286
|
return [
|
|
57247
57287
|
"No Codex app-server control socket at " + path + ".",
|
|
57248
|
-
"Either no daemon is running (start one with `codex app-server daemon start`),",
|
|
57288
|
+
"Either no daemon is running (start one with `codex app-server daemon start` or bootstrap),",
|
|
57249
57289
|
"or ChatGPT Desktop is running a private stdio app-server that external clients cannot reach",
|
|
57250
57290
|
"(" + UPSTREAM_DESKTOP_ISSUES.join(", ") + ").",
|
|
57291
|
+
"gbot connects only to this machine's local socket; it has no remote transport.",
|
|
57251
57292
|
"gbot codex targets daemon-managed threads only."
|
|
57252
57293
|
].join("\n");
|
|
57253
57294
|
}
|
|
@@ -57980,7 +58021,7 @@ var __webpack_modules__ = {
|
|
|
57980
58021
|
session = await openSession(env);
|
|
57981
58022
|
} catch (err) {
|
|
57982
58023
|
if (err instanceof CodexRouteError) {
|
|
57983
|
-
const message = err.mode === "socket-absent" ? unreachableMessage(path, desktopAttached) : err.message;
|
|
58024
|
+
const message = err.mode === "socket-absent" ? unreachableMessage(path, desktopAttached, env) : err.message;
|
|
57984
58025
|
return withStatusExitCode({
|
|
57985
58026
|
...base,
|
|
57986
58027
|
reachable: false,
|
|
@@ -60907,9 +60948,30 @@ ts() { date -u +%Y-%m-%dT%H:%M:%SZ; }
|
|
|
60907
60948
|
fp: ()=>redactSecrets
|
|
60908
60949
|
});
|
|
60909
60950
|
},
|
|
60951
|
+
"./src/core/user-machine-guidance.js" (__unused_rspack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
60952
|
+
const USER_MACHINE_CODEX_CLAUDE_GUIDANCE = [
|
|
60953
|
+
"Codex and Claude sessions live on the user's registered machines (for example their Linux desktop or Mac), not on the Grok Bot agent box (/home/box).",
|
|
60954
|
+
"gbot connects only to a local Unix socket ($CODEX_HOME/app-server-control/app-server-control.sock, or CODEX_APP_SERVER_SOCK). There is no remote transport.",
|
|
60955
|
+
"When running on the box (HOME=/home/box), do not call codex_* or claude_send there. Run the gbot CLI on the user's machine through Grok Bot Shell with a machineId (the host's machine-targeted shell).",
|
|
60956
|
+
"On that machine, provide the socket with `codex app-server daemon start` (or bootstrap). Auth stays with each machine's native Codex or Claude login; gbot does not store or export credentials."
|
|
60957
|
+
].join("\n");
|
|
60958
|
+
function looksLikeGrokBotBox({ path = "", env = process.env, home = env.HOME || "" } = {}) {
|
|
60959
|
+
const values = [
|
|
60960
|
+
home,
|
|
60961
|
+
env.HOME,
|
|
60962
|
+
path
|
|
60963
|
+
].filter((value)=>value != null && value !== "").map(String);
|
|
60964
|
+
return values.some((value)=>value === "/home/box" || value.startsWith("/home/box/"));
|
|
60965
|
+
}
|
|
60966
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
60967
|
+
R: ()=>looksLikeGrokBotBox
|
|
60968
|
+
}, {
|
|
60969
|
+
M: USER_MACHINE_CODEX_CLAUDE_GUIDANCE
|
|
60970
|
+
});
|
|
60971
|
+
},
|
|
60910
60972
|
"./package.json" (module) {
|
|
60911
60973
|
module.exports = {
|
|
60912
|
-
"rE": "0.10.
|
|
60974
|
+
"rE": "0.10.1"
|
|
60913
60975
|
};
|
|
60914
60976
|
}
|
|
60915
60977
|
};
|
package/dist/package.json
CHANGED
package/dist/plugin.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"$schema":"https://agent-plugins.org/schemas/1.0.0/plugin.schema.json","author":{"name":"Zack Jackson","url":"https://github.com/ScriptedAlchemy"},"description":"Message Grok Bot from Codex, Claude Code, and Cursor,
|
|
1
|
+
{"$schema":"https://agent-plugins.org/schemas/1.0.0/plugin.schema.json","author":{"name":"Zack Jackson","url":"https://github.com/ScriptedAlchemy"},"description":"Message Grok Bot from Codex, Claude Code, and Cursor. Codex/Claude tools use local sockets on the user's registered machines only (no remote transport); from the Grok Bot box, run gbot via Grok Bot Shell with a machineId.","homepage":"https://github.com/ScriptedAlchemy/grok-bot-cli#readme","keywords":["grok","grok-bot","grokbot","gbot","cursor","ai-agents","automation","terminal","cli","agent-bundle"],"license":"MIT","name":"gbot","repository":"https://github.com/ScriptedAlchemy/grok-bot-cli","version":"0.10.1"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Codex and Claude tools run on the user's registered machines via local sockets — never on the Grok Bot box
|
|
3
|
+
alwaysApply: true
|
|
4
|
+
---
|
|
5
|
+
# Codex and Claude run on the user's machines
|
|
6
|
+
|
|
7
|
+
`codex_*` and `claude_send` talk only to a **local** Unix socket on the machine
|
|
8
|
+
where the process runs. gbot has **no remote transport**.
|
|
9
|
+
|
|
10
|
+
- Codex/Claude sessions live on the user's registered computers (Linux desktop,
|
|
11
|
+
Mac, …), not on the Grok Bot agent box (`HOME=/home/box`, no Codex install).
|
|
12
|
+
- When you are on the box, **do not** call those MCP tools. Run the `gbot` CLI on
|
|
13
|
+
the user's machine through **Grok Bot Shell with a machineId** (the host's
|
|
14
|
+
machine-targeted shell).
|
|
15
|
+
- On that machine, start the daemon with `codex app-server daemon start` (or
|
|
16
|
+
bootstrap) so `$CODEX_HOME/app-server-control/app-server-control.sock` exists.
|
|
17
|
+
- Auth stays with each machine's native Codex or Claude login. Do not invent
|
|
18
|
+
token files or export credentials.
|
|
@@ -22134,6 +22134,7 @@ var __webpack_modules__ = {
|
|
|
22134
22134
|
var _package_json__rspack_import_6 = __webpack_require__("./package.json");
|
|
22135
22135
|
var _codex_contract_js__rspack_import_7 = __webpack_require__("./src/core/codex/contract.js");
|
|
22136
22136
|
var _desktop_shim_js__rspack_import_8 = __webpack_require__("./src/core/desktop-shim.js");
|
|
22137
|
+
var _user_machine_guidance_js__rspack_import_9 = __webpack_require__("./src/core/user-machine-guidance.js");
|
|
22137
22138
|
const PINNED_CODEX_VERSION = "0.154.0";
|
|
22138
22139
|
const UPSTREAM_DESKTOP_ISSUES = [
|
|
22139
22140
|
"https://github.com/openai/codex/issues/41014",
|
|
@@ -22167,20 +22168,34 @@ var __webpack_modules__ = {
|
|
|
22167
22168
|
function singleLine(text) {
|
|
22168
22169
|
return stripTerminalControls(text).replace(/[\t\n\r\u2028\u2029]+/g, " ");
|
|
22169
22170
|
}
|
|
22170
|
-
function
|
|
22171
|
+
function boxUnreachableMessage(path) {
|
|
22172
|
+
return [
|
|
22173
|
+
"No Codex app-server control socket at " + path + ".",
|
|
22174
|
+
_user_machine_guidance_js__rspack_import_9.M
|
|
22175
|
+
].join("\n");
|
|
22176
|
+
}
|
|
22177
|
+
function unreachableMessage(path, desktopAttached = "unknown", env = process.env) {
|
|
22178
|
+
if ((0, _user_machine_guidance_js__rspack_import_9.R)({
|
|
22179
|
+
path,
|
|
22180
|
+
env,
|
|
22181
|
+
home: env.HOME || (0, node_os__rspack_import_3.homedir)()
|
|
22182
|
+
})) {
|
|
22183
|
+
return boxUnreachableMessage(path);
|
|
22184
|
+
}
|
|
22171
22185
|
if (desktopAttached === "private-stdio") {
|
|
22172
22186
|
return [
|
|
22173
22187
|
"ChatGPT Desktop is running its private stdio app-server, which external clients cannot reach",
|
|
22174
22188
|
"(" + UPSTREAM_DESKTOP_ISSUES.join(", ") + ").",
|
|
22175
|
-
"No Codex app-server control socket at " + path + ": start a managed standalone daemon with `codex app-server daemon start
|
|
22176
|
-
"gbot codex targets daemon-managed threads only."
|
|
22189
|
+
"No Codex app-server control socket at " + path + ": start a managed standalone daemon with `codex app-server daemon start` (or bootstrap).",
|
|
22190
|
+
"gbot codex targets daemon-managed threads only; gbot has no remote transport."
|
|
22177
22191
|
].join("\n");
|
|
22178
22192
|
}
|
|
22179
22193
|
return [
|
|
22180
22194
|
"No Codex app-server control socket at " + path + ".",
|
|
22181
|
-
"Either no daemon is running (start one with `codex app-server daemon start`),",
|
|
22195
|
+
"Either no daemon is running (start one with `codex app-server daemon start` or bootstrap),",
|
|
22182
22196
|
"or ChatGPT Desktop is running a private stdio app-server that external clients cannot reach",
|
|
22183
22197
|
"(" + UPSTREAM_DESKTOP_ISSUES.join(", ") + ").",
|
|
22198
|
+
"gbot connects only to this machine's local socket; it has no remote transport.",
|
|
22184
22199
|
"gbot codex targets daemon-managed threads only."
|
|
22185
22200
|
].join("\n");
|
|
22186
22201
|
}
|
|
@@ -22913,7 +22928,7 @@ var __webpack_modules__ = {
|
|
|
22913
22928
|
session = await openSession(env);
|
|
22914
22929
|
} catch (err) {
|
|
22915
22930
|
if (err instanceof CodexRouteError) {
|
|
22916
|
-
const message = err.mode === "socket-absent" ? unreachableMessage(path, desktopAttached) : err.message;
|
|
22931
|
+
const message = err.mode === "socket-absent" ? unreachableMessage(path, desktopAttached, env) : err.message;
|
|
22917
22932
|
return withStatusExitCode({
|
|
22918
22933
|
...base,
|
|
22919
22934
|
reachable: false,
|
|
@@ -27365,9 +27380,30 @@ ts() { date -u +%Y-%m-%dT%H:%M:%SZ; }
|
|
|
27365
27380
|
fp: ()=>redactSecrets
|
|
27366
27381
|
});
|
|
27367
27382
|
},
|
|
27383
|
+
"./src/core/user-machine-guidance.js" (__unused_rspack___webpack_module__, __webpack_exports__, __webpack_require__) {
|
|
27384
|
+
const USER_MACHINE_CODEX_CLAUDE_GUIDANCE = [
|
|
27385
|
+
"Codex and Claude sessions live on the user's registered machines (for example their Linux desktop or Mac), not on the Grok Bot agent box (/home/box).",
|
|
27386
|
+
"gbot connects only to a local Unix socket ($CODEX_HOME/app-server-control/app-server-control.sock, or CODEX_APP_SERVER_SOCK). There is no remote transport.",
|
|
27387
|
+
"When running on the box (HOME=/home/box), do not call codex_* or claude_send there. Run the gbot CLI on the user's machine through Grok Bot Shell with a machineId (the host's machine-targeted shell).",
|
|
27388
|
+
"On that machine, provide the socket with `codex app-server daemon start` (or bootstrap). Auth stays with each machine's native Codex or Claude login; gbot does not store or export credentials."
|
|
27389
|
+
].join("\n");
|
|
27390
|
+
function looksLikeGrokBotBox({ path = "", env = process.env, home = env.HOME || "" } = {}) {
|
|
27391
|
+
const values = [
|
|
27392
|
+
home,
|
|
27393
|
+
env.HOME,
|
|
27394
|
+
path
|
|
27395
|
+
].filter((value)=>value != null && value !== "").map(String);
|
|
27396
|
+
return values.some((value)=>value === "/home/box" || value.startsWith("/home/box/"));
|
|
27397
|
+
}
|
|
27398
|
+
__webpack_require__.d(__webpack_exports__, {
|
|
27399
|
+
R: ()=>looksLikeGrokBotBox
|
|
27400
|
+
}, {
|
|
27401
|
+
M: USER_MACHINE_CODEX_CLAUDE_GUIDANCE
|
|
27402
|
+
});
|
|
27403
|
+
},
|
|
27368
27404
|
"./package.json" (module) {
|
|
27369
27405
|
module.exports = {
|
|
27370
|
-
"rE": "0.10.
|
|
27406
|
+
"rE": "0.10.1"
|
|
27371
27407
|
};
|
|
27372
27408
|
}
|
|
27373
27409
|
};
|
|
@@ -4,8 +4,23 @@ description: Message Grok Bot, Codex threads, or opted-in local Claude Code chan
|
|
|
4
4
|
---
|
|
5
5
|
# Talk to Grok Bot
|
|
6
6
|
|
|
7
|
-
The `grok-bot` MCP server and `gbot` CLI share Grok gateway access and
|
|
8
|
-
|
|
7
|
+
The `grok-bot` MCP server and `gbot` CLI share Grok gateway access. Codex and
|
|
8
|
+
Claude tools use **local sockets only** on the user's registered machines.
|
|
9
|
+
|
|
10
|
+
## MCP instructions (Codex / Claude)
|
|
11
|
+
|
|
12
|
+
gbot connects only to a local Unix socket
|
|
13
|
+
(`$CODEX_HOME/app-server-control/app-server-control.sock`, or
|
|
14
|
+
`CODEX_APP_SERVER_SOCK`). There is **no remote transport**.
|
|
15
|
+
|
|
16
|
+
- Codex app-server threads and opted-in Claude Code channels live on the user's
|
|
17
|
+
registered computers (Linux desktop, Mac, …) — **never** on the Grok Bot agent
|
|
18
|
+
box (`HOME=/home/box`, no Codex install).
|
|
19
|
+
- When this MCP server is running on the box, **do not** call `codex_*` or
|
|
20
|
+
`claude_send`. Run the `gbot` CLI on the user's machine through **Grok Bot Shell
|
|
21
|
+
with a machineId** (the host's machine-targeted shell).
|
|
22
|
+
- On that machine, provide the socket with `codex app-server daemon start` (or
|
|
23
|
+
bootstrap). Auth stays with each machine's native Codex or Claude login.
|
|
9
24
|
|
|
10
25
|
## When to load this
|
|
11
26
|
|
|
@@ -49,12 +64,12 @@ which source is present.
|
|
|
49
64
|
|
|
50
65
|
## Claude Code channel
|
|
51
66
|
|
|
52
|
-
`claude_send` sends to a named live Claude Code session on
|
|
53
|
-
|
|
54
|
-
`
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
67
|
+
`claude_send` sends to a named live Claude Code session on the user's registered
|
|
68
|
+
machine (local socket under `~/.grok-bot-cli/claude/`) and waits for its explicit
|
|
69
|
+
`claude_reply`. From the Grok Bot box, do not call this tool — use Grok Bot Shell
|
|
70
|
+
with a machineId to run `gbot claude send` on that machine instead. The destination
|
|
71
|
+
must enable the native `claude-channel` with `GROK_BOT_CLAUDE_CHANNEL=NAME` and
|
|
72
|
+
Claude's development-channel opt-in. Supply `name`, `message`, and optional
|
|
73
|
+
`timeoutMs` (1..120000). `replied` means the reply tool ran; `unknown` is not
|
|
74
|
+
rejection and must not be automatically retried. Normal Claude tool approvals remain
|
|
75
|
+
in its session. CLI: `gbot claude send NAME "message" --json`.
|
|
@@ -30,9 +30,14 @@ cookie/payment approvals and other unsupported requests require the owning Grok
|
|
|
30
30
|
## Codex conversation tools
|
|
31
31
|
|
|
32
32
|
The generated Codex, Cursor, and Claude plugins and portable MCP artifact expose these
|
|
33
|
-
additional tools on the same `grok-bot` MCP server. Codex tools
|
|
34
|
-
app-server control socket
|
|
35
|
-
|
|
33
|
+
additional tools on the same `grok-bot` MCP server. Codex tools connect only to a
|
|
34
|
+
**local** Codex app-server control socket on the process's machine
|
|
35
|
+
(`$CODEX_HOME/...` or `CODEX_APP_SERVER_SOCK`). gbot has **no remote transport**.
|
|
36
|
+
When the MCP server runs on the Grok Bot agent box (`HOME=/home/box`), do not call
|
|
37
|
+
these tools — run the `gbot` CLI on the user's registered machine through Grok Bot
|
|
38
|
+
Shell with a machineId, after `codex app-server daemon start` (or bootstrap) there.
|
|
39
|
+
Grok tools use the Grok gateway. Portable MCP artifacts must be configured in an
|
|
40
|
+
MCP-capable host; they are not automatically loaded by the Grok app.
|
|
36
41
|
|
|
37
42
|
- `codex_threads`: bounded discovery of daemon-managed Codex threads.
|
|
38
43
|
- `codex_send`: submit a message with a correlation envelope. Default delivery is
|
package/package.json
CHANGED