impel-cli 0.20.8 → 0.20.9

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/RELEASE_NOTES.md CHANGED
@@ -1,5 +1,16 @@
1
1
  # Release notes
2
2
 
3
+ ## 0.20.9 — Claude managed-tool permissions
4
+
5
+ - Lets eager Claude custom agents execute their fixed, tenant-bound MCP tools
6
+ in non-interactive `dontAsk` sessions without a permission prompt.
7
+ - Scopes prompt bypass to custom agents whose `tools` frontmatter contains only
8
+ the generated Impel run/resume/recovery allowlist; fallback profiles keep the
9
+ host's normal permission behavior.
10
+ - Preserves the terminal answer schema, status, and run id in the local result
11
+ so privacy-safe telemetry and native hosts can distinguish success from a
12
+ model process that merely exited cleanly.
13
+
3
14
  ## 0.20.8 — Claude direct-answer compatibility
4
15
 
5
16
  - Publishes the bound direct-answer tool with Claude's supported closed object
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "impel-cli",
3
- "version": "0.20.8",
3
+ "version": "0.20.9",
4
4
  "description": "Prepare isolated Claude and Codex workspaces for every accessible Impel tenant",
5
5
  "type": "module",
6
6
  "bin": {
package/src/agents.js CHANGED
@@ -706,7 +706,15 @@ function renderClaudeAgent({ tenantId, agent, name, invocation, recoveryOnly = f
706
706
  `description: ${JSON.stringify(description)}`,
707
707
  "model: haiku",
708
708
  ...(eager
709
- ? ["tools:", ...toolNames.map((tool) => ` - ${JSON.stringify(nativeToolName(tool))}`)]
709
+ ? [
710
+ // This agent receives only the exact fixed-binding MCP allowlist below,
711
+ // so bypassing prompts cannot grant filesystem, shell, connector, or
712
+ // arbitrary MCP access. It lets non-interactive/dontAsk hosts execute
713
+ // the selected managed adapter instead of auto-denying its sole call.
714
+ "permissionMode: bypassPermissions",
715
+ "tools:",
716
+ ...toolNames.map((tool) => ` - ${JSON.stringify(nativeToolName(tool))}`),
717
+ ]
710
718
  : []),
711
719
  "mcpServers:",
712
720
  ` - ${MANAGED_AGENT_MCP_SERVER}:`,
@@ -1735,10 +1735,13 @@ export class NativeAgentCompositeTransport {
1735
1735
  });
1736
1736
  if (result?.schema === NATIVE_AGENT_RESULT_SCHEMA && result.status === "succeeded") {
1737
1737
  return {
1738
+ schema: "impel.native-agent-answer.v1",
1739
+ status: "succeeded",
1738
1740
  forUser: result.finalText,
1739
1741
  answer: result.finalText,
1740
1742
  agentId: this.agentId,
1741
1743
  scopeParam: this.scopeParam,
1744
+ runId: state.upstreamRunId,
1742
1745
  };
1743
1746
  }
1744
1747
  return result;