Skip to content

CLI deploy of a browser agent fails: missing StartBrowserSession in the generated role, and lost exec bit on the Playwright driver #2311

Description

@sundargthb

Deploying a LangChain Deep Agent that uses AgentCore Browser through the CLI fails at two points. Both are in the deployment path rather than in the agent, and together they blocked me from using the CLI at all: I fell back to a boto3 deploy script, which is roughly 220 lines a sample should not need to carry.

1. The generated execution role is missing browser permissions.

An agent that calls AgentCore Browser needs bedrock-agentcore:StartBrowserSession. The role the CLI creates does not include it, so the deploy succeeds and the first invocation fails:

AccessDeniedException: User: arn:aws:sts::<account>:assumed-role/<generated-role>/...
is not authorized to perform: bedrock-agentcore:StartBrowserSession

The same agent works when the role is created by hand with that action added. Code interpreter agents are unaffected, so this looks specific to the browser tool actions being absent from the generated policy.

2. The deployment zip drops the executable bit on the Playwright driver.

With the role fixed, the browser still does not start:

PermissionError: [Errno 13] Permission denied:
'/var/task/playwright/driver/node'

playwright ships a bundled node binary that must stay executable. The zip the CLI builds appears not to preserve file modes, so the extracted binary is not executable in the runtime. Anything with a bundled executable in its wheel hits this, not only Playwright.

Reproduce

An agent built with create_deep_agent from deepagents, with subagents using create_browser_toolkit from langchain-aws, deployed with the CLI. Dependencies: langchain-aws[tools]>=1.7.6, deepagents>=0.7.13, bedrock-agentcore>=1.23.0, aws-opentelemetry-distro, opentelemetry-instrumentation-langchain. Region us-west-2, CLI 0.29.0.

Separately: --include-domains is missing for the web search connector.

translateWebSearch in src/cli/operations/connectors/translators.ts builds parameterValues.domainFilter from excludeDomains only, and there is no includeDomains anywhere in src/. The SDK's GatewayClient.create_web_search_target() accepts both include and exclude lists, so a target that restricts search to a set of trusted domains cannot be created through the CLI today. Restricting to trusted sources is the more common of the two filters in my experience.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions