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 = TrueView on GitHub (pinned to 52a13f2a57)
Solutions
- Set a VNC password: await agent.initialize_sandbox_tools(password="strongpass")
- Or set it in config: [daytona] VNC_password = "strongpass" in config/config.toml, then call with no args
- 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
- Fail fast at startup when the daytona VNC_password config is blank
- Store the VNC password via environment variable and load it into config at boot
- Never call sandbox creation until the required secrets check passes
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
- Server URL is required for SSE connection
- Command is required for stdio connection
- Unsupported connection type: {self.connection_type}
- Failed to load MCP server config: {e}
- No configuration file found in config directory
AI-assisted analysis of FoundationAgents/OpenManus@52a13f2a57 (2026-08-15).
Data as JSON: /api/errors/5bbab2ecf8e0d228.
Report an issue: GitHub.