@call-e/cli and @call-e/calle both publish a binary called calle, and they are not the same program.
@call-e/cli bin: { "calle": "./bin/calle.js" }
@call-e/calle bin: { "calle": "./dist/cli.js" }
One drives the Developer API and has calls create, calls get, goals run, keyed off CALLE_API_KEY against api.heycall-e.com. The other is the MCP and brokered-login tool with auth login, call plan, call run, call recover, defaulting to a different host entirely. Different commands, different auth, different service.
Install both and npm links one of them without a word:
npm install @call-e/calle@0.7.0 @call-e/cli@0.5.0
cat node_modules/.bin/calle | grep -o "@call-e/[a-z-]*/[a-z/.]*"
# @call-e/calle/dist/cli.js
The SDK wins. No warning, no error, nothing in the install output.
That would be a footnote if the plugins did not prescribe the bare command. packages/claude-plugin/plugin/skills/calle/references/commands.md offers three forms, and the middle one is plain calle:
env CALLE_SOURCE=claude ... node packages/cli/bin/calle.js call run --plan-id <plan_id> --confirm-token <confirm_token>
env CALLE_SOURCE=claude ... calle call run --plan-id <plan_id> --confirm-token <confirm_token>
env CALLE_SOURCE=claude ... npx -y @call-e/cli call run --plan-id <plan_id> --confirm-token <confirm_token>
In a project that has the SDK installed, the middle one runs the wrong program:
$ calle call run --plan-id p --confirm-token t
Unknown option: --plan-id
exit 1
An agent following the skill gets that back mid-workflow, with a plan already created and a confirm token in hand. The message does not hint that a different calle answered. The first and third forms are fine, so which of the three the agent happens to pick decides whether the call goes out.
Installing the SDK to write server code and the CLI to drive agent flows is a normal thing to want, and both are the shipped path for their own use case.
Suggested fix
Cheapest is to drop the bare calle form from the plugin references and keep the two unambiguous ones. npx -y @call-e/cli names the package, so it cannot be shadowed, and the explicit node packages/cli/bin/calle.js path is fine for a checkout.
The longer answer is one of the two binaries getting a different name. That is a breaking change, so it may not be worth it, but two published packages fighting over one command name will keep producing this.
@call-e/cliand@call-e/calleboth publish a binary calledcalle, and they are not the same program.One drives the Developer API and has
calls create,calls get,goals run, keyed offCALLE_API_KEYagainstapi.heycall-e.com. The other is the MCP and brokered-login tool withauth login,call plan,call run,call recover, defaulting to a different host entirely. Different commands, different auth, different service.Install both and npm links one of them without a word:
The SDK wins. No warning, no error, nothing in the install output.
That would be a footnote if the plugins did not prescribe the bare command.
packages/claude-plugin/plugin/skills/calle/references/commands.mdoffers three forms, and the middle one is plaincalle:In a project that has the SDK installed, the middle one runs the wrong program:
An agent following the skill gets that back mid-workflow, with a plan already created and a confirm token in hand. The message does not hint that a different
calleanswered. The first and third forms are fine, so which of the three the agent happens to pick decides whether the call goes out.Installing the SDK to write server code and the CLI to drive agent flows is a normal thing to want, and both are the shipped path for their own use case.
Suggested fix
Cheapest is to drop the bare
calleform from the plugin references and keep the two unambiguous ones.npx -y @call-e/clinames the package, so it cannot be shadowed, and the explicitnode packages/cli/bin/calle.jspath is fine for a checkout.The longer answer is one of the two binaries getting a different name. That is a breaking change, so it may not be worth it, but two published packages fighting over one command name will keep producing this.