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
5 changes: 5 additions & 0 deletions .changeset/grokbot-sideload-876.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"grok-bot-cli": patch
---

`gbot-install install grokbot` uses agent-bundle 0.4.0 (bf98f04, agent-bundle #876): the sideload reuses Grok Bot's existing `scriptedalchemy/plugins` marketplace clone commit, adds gbot to that clone's `marketplace.json`, writes `plugins/cache/scriptedalchemy-plugins/gbot/<commit>/` with `.cache-complete`, and records every written path in the install receipt so `uninstall grokbot` removes exactly those paths. `--json` output carries a `sideload` field. Retarget or disable it with `--sideload-repo`, `--sideload-slug`, `--no-sideload` (or `GROK_BOT_SIDELOAD_REPO`, `GROK_BOT_SIDELOAD_SLUG`, `GROK_BOT_SIDELOAD=0`; `GROK_BOT_AGENT_DATA_DIR` and `GROK_BOT_HOME` locate Grok Bot's data). `GROK_BOT_SIDELOAD_MARKETPLACE` must now name a single repository. The next install retires the 0.12.3 sideload record, and `gbot-install doctor --host grokbot` reports the sideload state as `AB7335`.
24 changes: 24 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -317,12 +317,36 @@ Install the bundled host projections from the same npm package:
gbot-install install codex
gbot-install install claude
gbot-install install cursor
gbot-install install grokbot
gbot-install doctor
```

Add `--replace` to an install command to overwrite an existing copy. The bundle is
registered as `gbot`.

`gbot-install install grokbot` stages the Cursor projection as a marketplace
repository under `~/.grokbot/agent-bundle/marketplaces/gbot` (`GROK_BOT_HOME`
overrides `~/.grokbot`). On the Grok Bot computer it also sideloads gbot into Grok
Bot's existing clone of the `scriptedalchemy/plugins` marketplace: it adds `gbot/`
and a `marketplace.json` entry under the clone commit Grok Bot already uses, and
writes `plugins/cache/scriptedalchemy-plugins/gbot/<commit>/` with `.cache-complete`.
Every path it writes is recorded in the install receipt, and `uninstall grokbot`
removes exactly those paths. `--json` reports the outcome in its `sideload` field.

| Option | Environment | Default |
| --- | --- | --- |
| `--sideload-repo <owner/repo>` | `GROK_BOT_SIDELOAD_REPO` | `scriptedalchemy/plugins` |
| `--sideload-slug <slug>` | `GROK_BOT_SIDELOAD_SLUG` | `<owner>-<repo>` (`scriptedalchemy-plugins`) |
| `--no-sideload` | `GROK_BOT_SIDELOAD=0` | sideload on |
| | `GROK_BOT_AGENT_DATA_DIR` | first of `/home/box/agent-data`, `~/.grokbot/agent-data`, `~/Library/Application Support/Grok Bot/agent-data` with a `plugins/` folder |

`GROK_BOT_SIDELOAD_MARKETPLACE` from 0.12.3 is still read but must name one
repository; prefer `GROK_BOT_SIDELOAD_REPO`. The next install or uninstall removes
the 0.12.3 sideload record. `gbot-install doctor --host grokbot` reports the Grok Bot
plugin id (`AB7334`) and the sideload state (`AB7335`). Grok Bot keeps the sideloaded
cache copy only while its account plugin listing names gbot; for a durable install,
add gbot from the `ScriptedAlchemy/plugins` marketplace in Grok Bot.

`gbot_thread` returns a small receipt by default: deterministic `summary`, opaque
`cursor`, `entryCount`, and `gapReset`.
Pass the cursor back as `after` for an exclusive client-side delta. Pass `full:true`
Expand Down
2 changes: 1 addition & 1 deletion artifact/agent-bundle.compile-evidence.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion artifact/agent-bundle.manifest.json

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion artifact/install.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -235,7 +235,7 @@ const safeRelative = (value) => typeof value === 'string' && value.length > 0 &&
[...segment].every((character) => character.charCodeAt(0) >= 0x20) &&
!segment.endsWith('.') && !segment.endsWith(' '));

const registrationKinds = ["amp-project-plugin","amp-system-plugin","claude-marketplace","claude-plugin","codex-marketplace","codex-plugin","cursor-local-plugin","cursor-marketplace-staging","grokbot-marketplace-staging"];
const registrationKinds = ["amp-project-plugin","amp-system-plugin","claude-marketplace","claude-plugin","codex-marketplace","codex-plugin","cursor-local-plugin","cursor-marketplace-staging","grokbot-marketplace-staging","grokbot-sideload"];
const isScope = (value) => value === 'local' || value === 'project' || value === 'user';
const isRegistration = (value) => value !== null && typeof value === 'object' && !Array.isArray(value) &&
registrationKinds.includes(value.kind) &&
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,11 @@ recipient. A mismatch fails instead of selecting one destination silently.
## CLI automation

The bundled `gbot` and `gbot-install` executables require Node.js 22.19.0 or newer.
`gbot-install install grokbot --json` reports its sideload into Grok Bot's
`scriptedalchemy/plugins` marketplace clone and plugin cache in the `sideload` field;
retarget it with `--sideload-repo`/`--sideload-slug` (`GROK_BOT_SIDELOAD_REPO`,
`GROK_BOT_SIDELOAD_SLUG`) or skip it with `--no-sideload` (`GROK_BOT_SIDELOAD=0`).
`gbot-install doctor --host grokbot` reports its state as `AB7335`.
For `gbot send`, `gbot codex status`, and `gbot codex send` with `--json`, read the result
document from stdout and branch on its `exitCode`, `mode`, `reason`, and `delivery`.
Framework argument/schema errors use stderr and exit 2. `--json` is reserved before
Expand Down
30 changes: 15 additions & 15 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -55,13 +55,13 @@
"LICENSE"
],
"devDependencies": {
"@agent-bundle/runtime": "https://pkg.pr.new/ScriptedAlchemy/agent-bundle/@agent-bundle/runtime@0bbc7c3274f7f9f13743b139ce1660a16d39c8ff",
"@agent-bundle/runtime": "https://pkg.pr.new/ScriptedAlchemy/agent-bundle/@agent-bundle/runtime@bf98f04f4620b8ff416f040245c6b7a007b7a677",
"@changesets/cli": "3.0.3",
"@modelcontextprotocol/server": "2.3.0",
"@rstest/core": "0.12.3",
"@types/node": "^24.0.0",
"@types/react": "^19.2.18",
"agent-bundle": "https://pkg.pr.new/ScriptedAlchemy/agent-bundle/agent-bundle@0bbc7c3274f7f9f13743b139ce1660a16d39c8ff",
"agent-bundle": "https://pkg.pr.new/ScriptedAlchemy/agent-bundle/agent-bundle@bf98f04f4620b8ff416f040245c6b7a007b7a677",
"react": "19.3.0",
"react-dom": "19.3.0",
"typescript": "7.0.2",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,6 +75,11 @@ recipient. A mismatch fails instead of selecting one destination silently.
## CLI automation

The bundled `gbot` and `gbot-install` executables require Node.js 22.19.0 or newer.
`gbot-install install grokbot --json` reports its sideload into Grok Bot's
`scriptedalchemy/plugins` marketplace clone and plugin cache in the `sideload` field;
retarget it with `--sideload-repo`/`--sideload-slug` (`GROK_BOT_SIDELOAD_REPO`,
`GROK_BOT_SIDELOAD_SLUG`) or skip it with `--no-sideload` (`GROK_BOT_SIDELOAD=0`).
`gbot-install doctor --host grokbot` reports its state as `AB7335`.
For `gbot send`, `gbot codex status`, and `gbot codex send` with `--json`, read the result
document from stdout and branch on its `exitCode`, `mode`, `reason`, and `delivery`.
Framework argument/schema errors use stderr and exit 2. `--json` is reserved before
Expand Down