FoundationAgents/OpenManus · error · ValueError

password must be provided

Error message

password must be provided

What it means

Raised by SandboxAgent.initialize_sandbox_tools() when the password argument is empty. The function creates a Daytona sandbox whose noVNC desktop (port 6080) is protected by this password; a sandbox with no VNC password cannot be created through this path. The default comes from config.daytona.VNC_password, so this also fires when that config value is unset/blank.

Source

Thrown at app/agent/sandbox_agent.py:82

    async def create(cls, **kwargs) -> "SandboxManus":
        """Factory method to create and properly initialize a Manus instance."""
        instance = cls(**kwargs)
        await instance.initialize_mcp_servers()
        await instance.initialize_sandbox_tools()
        instance._initialized = True
        return instance

    async def initialize_sandbox_tools(
        self,
        password: str = config.daytona.VNC_password,
    ) -> None:
        try:
            # 创建新沙箱
            if password:
                sandbox = create_sandbox(password=password)
                self.sandbox = sandbox
            else:
                raise ValueError("password must be provided")
            vnc_link = sandbox.get_preview_link(6080)
            website_link = sandbox.get_preview_link(8080)
            vnc_url = vnc_link.url if hasattr(vnc_link, "url") else str(vnc_link)
            website_url = (
                website_link.url if hasattr(website_link, "url") else str(website_link)
            )

            # Get the actual sandbox_id from the created sandbox
            actual_sandbox_id = sandbox.id if hasattr(sandbox, "id") else "new_sandbox"
            if not self.sandbox_link:
                self.sandbox_link = {}
            self.sandbox_link[actual_sandbox_id] = {
                "vnc": vnc_url,
                "website": website_url,
            }
            logger.info(f"VNC URL: {vnc_url}")
            logger.info(f"Website URL: {website_url}")
            SandboxToolsBase._urls_printed = True

View on GitHub (pinned to 52a13f2a57)

Solutions

  1. Set a VNC password: await agent.initialize_sandbox_tools(password="strongpass")
  2. Or set it in config: [daytona] VNC_password = "strongpass" in config/config.toml, then call with no args
  3. Check the password was not read as empty from environment/config before calling (log bool(config.daytona.VNC_password))

Example fix

# before
await agent.initialize_sandbox_tools()  # config VNC_password empty -> ValueError

# after
# config/config.toml:
# [daytona]
# VNC_password = "my-secret"
await agent.initialize_sandbox_tools()
Defensive patterns

Strategy: validation

Validate before calling

from app.config import config

def sandbox_ready() -> bool:
    return bool(getattr(getattr(config, "daytona", None), "VNC_password", None))

Prevention

When it happens

Trigger: Calling initialize_sandbox_tools(password=""), initialize_sandbox_tools(password=None), or calling it with no args while config.daytona.VNC_password is empty or missing in config.toml.

Common situations: Fresh clone using config.example.toml with a blank VNC_password; env var for the Daytona VNC password not exported; trailing-whitespace or empty-string default in the TOML config.

Related errors


AI-assisted analysis of FoundationAgents/OpenManus@52a13f2a57 (2026-08-15). Data as JSON: /api/errors/5bbab2ecf8e0d228. Report an issue: GitHub.