Repository navigation
cli: Gemini CLI support, clear permission errors, Codex hint without the CLI - #17
Merged
Merged
Conversation
…the CLI
- gemini-cli client on our JSON writer: ~/.gemini/settings.json,
mcpServers.box = {type: "http", url}; connect, doctor and remove, with
the same foreign-server guard, backups and box-control cleanup. The
next hint is `/mcp auth box` in a trusted folder.
- When a config can't be written (EACCES/EPERM), connect says so; for
Codex it prints the steps to add box in the Codex app's Settings.
- The Codex sign-in hint points at the app when `codex` is not on PATH.
- gemini-cli joins the real-client install matrix on Linux, macOS and
Windows (@google/gemini-cli@0.66.0).
Closes #16
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…r EBUSY From review of #17: the permission message printed err.path, which can be a temp file or a file whose folder is the real problem. It now names the client's config and says the file or its folder may belong to another user. EBUSY (Windows, app holds the file) gets the same help. The Codex app steps are offered for the case where the app holds the file. Refs #16 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This was referenced Nov 4, 2026
…ies (#19) * Move box to https://mcp.box.simular.ai/mcp and migrate old relay entries The box MCP server moved from relay.simular.cloud to mcp.box.simular.ai. The old address now returns protected-resource metadata naming the new URL, so MCP clients refuse to sign in through it. - CLI default URL, Claude Code / Hermes / dsh plugin configs and docs point at the new URL; plugin versions bumped (claude 0.1.1, hermes 0.1.1, dsh 0.2.1). - connect rewrites a box entry at the old address (it stays "ours"), and says the app may ask to sign in again. For Claude Code it runs `claude plugin marketplace update` + `claude plugin update` when the installed plugin still points at the old URL. - doctor flags an entry at the old address, and an endpoint whose metadata names a different resource. - Install matrix seeds a box at the old address for every client and, for Claude Code, installs the old plugin from a local git marketplace built from this checkout, so it tests this branch's plugin and the update path. Refs #18 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * cli: check the Claude Code plugin's URL after updating it Review follow-up: if the marketplace still serves the old .mcp.json (a fork or pinned ref), connect now fails with the fix instead of reporting success and re-running the update on every connect. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #16
Why
The add-mcp spike (#14, closed; decision in #15 (comment)) showed that Gemini CLI reads a plain
mcpServersentry and signs in with OAuth by itself. Box can support it with our existing JSON writer and no new dependency. The spike also found two first-run gaps that don't need add-mcp; this PR carries those over too.What
--client gemini-cli, aliasgemini), onjson-client.js. It writesmcpServers.box = {"type": "http", "url": "https://relay.simular.cloud/mcp"}into~/.gemini/settings.json, keeping comments and other settings.doctorandremovework as for the other JSON clients: only an entry that points at box is ours, a backup is kept, and oldbox-controlentries are removed. A foreignboxgiven ashttpUrlis recognised too.type: "http"makes Gemini CLI use streamable HTTP (urlwithout a type would fall back to SSE on errors)./mcp auth box./mcp authfinds the sign-in from theWWW-Authenticateheader, with nooauthblock needed. Withoutoauth.enabled, Gemini doesn't open a browser at every start; that matches the explicit sign-in step we use for the other clients.codexon PATH (the Codex app alone), the hint points at the app's Settings → Authenticate instead ofcodex mcp login box.gemini-cli(@google/gemini-cli@0.66.0) joins the real-client install matrix on Linux, macOS and Windows. The matrix seeds another server, runs connect, checks thatgemini mcp listshowsbox: … (http), re-runs connect (no change), runs doctor, removes, and checks that the other server survived. The smoke dry run includes it.Tests
httpUrlbox left alone.Review
An independent review (simular-code-review plus secure-coding invariant review) found nothing blocking.
/mcp authdiscovery with DCR andiss.err.path, which can be a temp file or a file whose folder is the real problem, so it now names the config. EBUSY is now covered.~/.codexbelongs to root. The app likely writes the same file, so the steps are worded for the case where the app holds the file. The interactive Gemini browser sign-in was not run end to end.🤖 Generated with Claude Code