fix: run agent commands through a verified MCP launcher - #115
Merged
Conversation
Ray-56
requested changes
Sep 8, 2026
Ray-56
left a comment
Collaborator
There was a problem hiding this comment.
Requesting changes on the exact current head (826905b). The package-selection direction is safer than a bare executable, but the agent-facing command contract is still unsafe and incomplete:
- [P1] Do not interpolate dynamic values into shell command templates. The synchronized command references place the latest user message verbatim inside single-quoted JSON and place remote
plan_id,confirm_token,run_id, and recovery values inside double quotes. A U+0027 quote can break the JSON/shell boundary, while$()and backticks are still executable inside double quotes. This can turn an ordinary call request or server-returned opaque value into local command execution or argument corruption before the verified CLI starts. Require shell-free argv execution for every dynamic value, usingJSON.stringifyplusspawn/execFilewithshell:false, or add a file/stdin input that avoids shell interpolation. Add adversarial quote, command-substitution, backtick, backslash, and newline tests and assert that no injected process runs and exact arguments reach only the verified entry. - [P1] The new mandatory entry syntax still blocks Windows PowerShell. The packaged skills continue to prefix commands with POSIX
env NAME=value, and the newly expanded standalone guidance usesnode "$CALLE_CLI_ENTRY"; stock PowerShell has noenvcommand and reads environment variables as$env:CALLE_CLI_ENTRY. This is already reproduced in #111, and this PR replaces previously runnable bare CLI examples with the incompatible form. Provide a cross-platform launcher or explicit Bash, PowerShell, and cmd forms selected before execution, fail closed for unknown shells, and add a Windows CI job that runs literal help/auth-status/no-call readiness commands while preserving attribution. - [P2] Automate the acceptance cases required by #109. The E2E test reads the repository copy of
@call-e/cliand shadows PATH with a fakecalle, but it does not install/exercise@call-e/callealongside it and has no runtime wrong-package-identity or incompatible-help fail-closed case. Add those fixtures and assert that no auth or confirmation argument reaches either the conflicting SDK binary or a mismatched executable.
The exact head has green GitHub CI and passes pnpm check, pnpm test, and pnpm pack:dry-run locally with pnpm 10.18.3, but the P1 findings block merge. Release decision: patch changesets for @call-e/cli and the three published plugins are appropriate; the private OpenClaw/skills.sh validation packages need no changeset.
Merged
This was referenced Sep 8, 2026
N-45div
added a commit
to N-45div/call-e-integrations
that referenced
this pull request
Sep 9, 2026
Resolve packages/cli/package.json so the syntax check keeps both lib/sanitize.js and scripts/run-agent-command.mjs. The shell-free launcher contract and per-command attribution flags from CALLE-AI#115/CALLE-AI#119 are preserved unchanged.
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.
Agent skills can select the SDK's shared
callebinary, and interpolating user text or opaque call IDs into shell commands can execute or corrupt those values. The five skills now use a bundled launcher that verifies a trusted@call-e/clipackage and its command help before forwarding a JSON argument array withshell: false.The launcher accepts a request file or stdin and applies integration attribution through the child process environment. The same documented command runs in Bash, PowerShell, and cmd. CLI responses include
login_argv,help_argv, andnext_argvfor exact follow-up execution; existing command-string fields remain available for display. Packaged skills, installation guides, CLI references, and version checks follow this contract.Fixes #109.
Validation:
4cf11b6ffe1b3a2ed9c67a278f1c2956739e7add. Linux passed 169 JavaScript tests, with one Windows-only skip, plus 8 Python OAuth tests. Windows passed 100 CLI tests with no skips.@call-e/calle@0.7.0and@call-e/cli@0.5.0together, reproduced npm selecting the SDK, and exercised the candidate CLI source in that installation. Wrong package identity and incompatible help fail before request arguments are forwarded; neither the SDK nor an earliercalleon PATH receives authentication or confirmation arguments.pnpm check,pnpm pack:dry-run,git diff --check, and isolated release-version synchronization passed. Test calls use synthetic credentials and a local server.Includes patch changesets for
@call-e/cli,@call-e/codex-plugin,@call-e/claude-plugin, and@call-e/cursor-plugin. OpenClaw and skills.sh receive the synchronized launcher and guidance through their existing repository distribution.