leezo@DESKTOP-4EUQNQ6:~$ docker pull ghcr.io/openhands/agent-canvas:1.0.0-alpha.9 JECTS_PATH=~/projects # directory containing your project folders docker run -it --rm \ -p 8000:8000 \ -v ~/.openhands:/home/openhands/.openhands \ -v ${PROJECTS_PATH}:/projects \ ghcr.io/openhands/agent-canvas:1.0.0-alpha.91.0.0-alpha.9: Pulling from openhands/agent-canvas Digest: sha256:c731f73e46ff8ce8fb390903c9a7fd27b9b294015a80f30a7154284b23d6ce31 Status: Image is up to date for ghcr.io/openhands/agent-canvas:1.0.0-alpha.9 ghcr.io/openhands/agent-canvas:1.0.0-alpha.9 leezo@DESKTOP-4EUQNQ6:~$ leezo@DESKTOP-4EUQNQ6:~$ export PROJECTS_PATH=~/projects # directory containing your project folders leezo@DESKTOP-4EUQNQ6:~$ leezo@DESKTOP-4EUQNQ6:~$ docker run -it --rm \ > -p 8000:8000 \ > -v ~/.openhands:/home/openhands/.openhands \ > -v ${PROJECTS_PATH}:/projects \ > ghcr.io/openhands/agent-canvas:1.0.0-alpha.9 mkdir: cannot create directory ‘/home/openhands/.openhands/agent-canvas’: Permission denied /opt/agent-canvas/entrypoint.sh: line 58: /home/openhands/.openhands/agent-canvas/secret-key.txt: No such file or directory chmod: cannot access '/home/openhands/.openhands/agent-canvas/secret-key.txt': No such file or directory [agent-canvas] Generated OH_SECRET_KEY (persisted to /home/openhands/.openhands/agent-canvas/secret-key.txt) mkdir: cannot create directory ‘/home/openhands/.openhands/agent-canvas’: Permission denied /opt/agent-canvas/entrypoint.sh: line 74: /home/openhands/.openhands/agent-canvas/session-api-key.txt: No such file or directory chmod: cannot access '/home/openhands/.openhands/agent-canvas/session-api-key.txt': No such file or directory [agent-canvas] Generated session API key (persisted to /home/openhands/.openhands/agent-canvas/session-api-key.txt) [agent-canvas] Starting agent-server on port 18000... [agent-canvas] Starting automation server on port 18001... mkdir: cannot create directory ‘/home/openhands/.openhands/automation’: Permission denied [agent-canvas] Using SQLite database: sqlite+aiosqlite:////home/openhands/.openhands/automation/automations.db +----------------------------------------------------------------------+ | OpenHands SDK v1.24.0 | | | | Report a bug: github.com/OpenHands/software-agent-sdk/issues | | Get help: openhands.dev/joinslack | | Scale up: openhands.dev/product/sdk | | | | Set OPENHANDS_SUPPRESS_BANNER=1 to hide this message | +----------------------------------------------------------------------+ {"asctime": "2026-05-31 19:43:16,471", "levelname": "INFO", "name": "__main__", "filename": "__main__.py", "lineno": 76, "message": "Added to sys.path: /opt/agent-canvas/tools"} {"asctime": "2026-05-31 19:43:16,471", "levelname": "INFO", "name": "__main__", "filename": "__main__.py", "lineno": 80, "message": "Extended sys.path with 1 directory for custom tool imports"} Starting OpenHands Agent Server on 0.0.0.0:18000 API docs will be available at http://0.0.0.0:18000/docs Auto-reload: disabled DEBUG mode: DISABLED {"asctime": "2026-05-31 19:43:16,471", "levelname": "WARNING", "name": "uvicorn.error", "filename": "config.py", "lineno": 285, "message": "Current configuration will not reload as not all conditions are met, please refer to documentation."} {"asctime": "2026-05-31 19:43:17,164", "levelname": "INFO", "name": "uvicorn.error", "filename": "server.py", "lineno": 84, "message": "Started server process [32]", "color_message": "Started server process [\u001b[36m%d\u001b[0m]"} {"asctime": "2026-05-31 19:43:17,165", "levelname": "INFO", "name": "uvicorn.error", "filename": "on.py", "lineno": 48, "message": "Waiting for application startup."} {"asctime": "2026-05-31 19:43:17,165", "levelname": "INFO", "name": "openhands.agent_server.api", "filename": "api.py", "lineno": 79, "message": "TMUX_TMPDIR not set; defaulting to per-server tmux directory /tmp/openhands-agent-server-32"} {"asctime": "2026-05-31 19:43:17,171", "levelname": "INFO", "name": "openhands.agent_server.desktop_service", "filename": "desktop_service.py", "lineno": 214, "message": "VNC desktop is disabled in configuration"} {"asctime": "2026-05-31 19:43:17,172", "levelname": "INFO", "name": "openhands.agent_server.api", "filename": "api.py", "lineno": 151, "message": "Desktop service is disabled"} {"asctime": "2026-05-31 19:43:17,701", "levelname": "INFO", "name": "openhands.tools.browser_use.impl", "filename": "impl.py", "lineno": 320, "message": "Chromium is available for browser operations at /usr/bin/chromium"} {"asctime": "2026-05-31 19:43:17,736", "levelname": "INFO", "name": "openhands.agent_server.api", "filename": "api.py", "lineno": 157, "message": "Tool preload service started successfully"} {"asctime": "2026-05-31 19:43:17,807", "levelname": "INFO", "name": "openhands.agent_server.vscode_service", "filename": "vscode_service.py", "lineno": 205, "message": "VSCode server startup detected"} {"asctime": "2026-05-31 19:43:17,807", "levelname": "INFO", "name": "openhands.agent_server.vscode_service", "filename": "vscode_service.py", "lineno": 67, "message": "VSCode server started successfully on port 8001"} {"asctime": "2026-05-31 19:43:17,807", "levelname": "INFO", "name": "openhands.agent_server.api", "filename": "api.py", "lineno": 133, "message": "VSCode service started successfully"} {"asctime": "2026-05-31 19:43:17,807", "levelname": "INFO", "name": "openhands.agent_server.api", "filename": "api.py", "lineno": 187, "message": "Server initialization complete - ready to serve requests"} {"asctime": "2026-05-31 19:43:17,808", "levelname": "ERROR", "name": "uvicorn.error", "filename": "on.py", "lineno": 121, "message": "Traceback (most recent call last):\n File \"pathlib/_local.py\", line 722, in mkdir\nFileNotFoundError: [Errno 2] No such file or directory: '/home/openhands/.openhands/agent-canvas/conversations'\n\nDuring handling of the above exception, another exception occurred:\n\nTraceback (most recent call last):\n File \"starlette/routing.py\", line 694, in lifespan\n File \"contextlib.py\", line 214, in __aenter__\n File \"fastapi/routing.py\", line 201, in merged_lifespan\n File \"contextlib.py\", line 214, in __aenter__\n File \"fastapi/routing.py\", line 201, in merged_lifespan\n File \"contextlib.py\", line 214, in __aenter__\n File \"fastapi/routing.py\", line 201, in merged_lifespan\n File \"contextlib.py\", line 214, in __aenter__\n File \"fastapi/routing.py\", line 201, in merged_lifespan\n File \"contextlib.py\", line 214, in __aenter__\n File \"openhands/agent_server/api.py\", line 189, in api_lifespan\n File \"openhands/agent_server/conversation_service.py\", line 940, in __aenter__\n File \"pathlib/_local.py\", line 726, in mkdir\n File \"pathlib/_local.py\", line 722, in mkdir\nPermissionError: [Errno 13] Permission denied: '/home/openhands/.openhands/agent-canvas'\n"} {"asctime": "2026-05-31 19:43:17,808", "levelname": "ERROR", "name": "uvicorn.error", "filename": "on.py", "lineno": 59, "message": "Application startup failed. Exiting."} {"asctime": "2026-05-31 19:43:18,208", "levelname": "INFO", "name": "__main__", "filename": "__main__.py", "lineno": 180, "message": "Process exiting via atexit handler"} +----------------------------------------------------------------------+ | OpenHands SDK v1.22.1 | | | | Report a bug: github.com/OpenHands/software-agent-sdk/issues | | Get help: openhands.dev/joinslack | | Scale up: openhands.dev/product/sdk | | | | Set OPENHANDS_SUPPRESS_BANNER=1 to hide this message | +----------------------------------------------------------------------+ {"message": "Started server process [25]", "severity": "INFO", "color_message": "Started server process [\u001b[36m%d\u001b[0m]"} {"message": "Waiting for application startup.", "severity": "INFO"} {"message": "Starting OpenHands Automations Service", "severity": "INFO"} {"message": "Created SQLite engine: sqlite+aiosqlite:////home/openhands/.openhands/automation/automations.db", "severity": "INFO"} {"message": "setup plugin alembic.autogenerate.schemas", "severity": "INFO"} {"message": "setup plugin alembic.autogenerate.tables", "severity": "INFO"} {"message": "setup plugin alembic.autogenerate.types", "severity": "INFO"} {"message": "setup plugin alembic.autogenerate.constraints", "severity": "INFO"} {"message": "setup plugin alembic.autogenerate.defaults", "severity": "INFO"} {"message": "setup plugin alembic.autogenerate.comments", "severity": "INFO"} {"message": "Failed to apply SQLite migrations: (sqlite3.OperationalError) unable to open database file\n(Background on this error at: https://sqlalche.me/e/20/e3q8)", "severity": "ERROR"} {"message": "Traceback (most recent call last):\n File \"/usr/local/lib/python3.13/site-packages/sqlalchemy/engine/base.py\", line 144, in __init__\n self._dbapi_connection = engine.raw_connection()\n ~~~~~~~~~~~~~~~~~~~~~^^\n File \"/usr/local/lib/python3.13/site-packages/sqlalchemy/engine/base.py\", line 3319, in raw_connection\n return self.pool.connect()\n ~~~~~~~~~~~~~~~~~^^\n File \"/usr/local/lib/python3.13/site-packages/sqlalchemy/pool/base.py\", line 448, in connect\n return _ConnectionFairy._checkout(self)\n ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^\n File \"/usr/local/lib/python3.13/site-packages/sqlalchemy/pool/base.py\", line 1272, in _checkout\n fairy = _ConnectionRecord.checkout(pool)\n File \"/usr/local/lib/python3.13/site-packages/sqlalchemy/pool/base.py\", line 712, in checkout\n rec = pool._do_get()\n File \"/usr/local/lib/python3.13/site-packages/sqlalchemy/pool/impl.py\", line 178, in _do_get\n with util.safe_reraise():\n ~~~~~~~~~~~~~~~~~^^\n File \"/usr/local/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py\", line 122, in __exit__\n raise exc_value.with_traceback(exc_tb)\n File \"/usr/local/lib/python3.13/site-packages/sqlalchemy/pool/impl.py\", line 176, in _do_get\n return self._create_connection()\n ~~~~~~~~~~~~~~~~~~~~~~~^^\n File \"/usr/local/lib/python3.13/site-packages/sqlalchemy/pool/base.py\", line 389, in _create_connection\n return _ConnectionRecord(self)\n File \"/usr/local/lib/python3.13/site-packages/sqlalchemy/pool/base.py\", line 674, in __init__\n self.__connect()\n ~~~~~~~~~~~~~~^^\n File \"/usr/local/lib/python3.13/site-packages/sqlalchemy/pool/base.py\", line 900, in __connect\n with util.safe_reraise():\n ~~~~~~~~~~~~~~~~~^^\n File \"/usr/local/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py\", line 122, in __exit__\n raise exc_value.with_traceback(exc_tb)\n File \"/usr/local/lib/python3.13/site-packages/sqlalchemy/pool/base.py\", line 896, in __connect\n self.dbapi_connection = connection = pool._invoke_creator(self)\n ~~~~~~~~~~~~~~~~~~~~^^^^^^\n File \"/usr/local/lib/python3.13/site-packages/sqlalchemy/engine/create.py\", line 667, in connect\n return dialect.connect(*cargs_tup, **cparams)\n ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^\n File \"/usr/local/lib/python3.13/site-packages/sqlalchemy/engine/default.py\", line 630, in connect\n return self.loaded_dbapi.connect(*cargs, **cparams) # type: ignore[no-any-return] # NOQA: E501\n ~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^\nsqlite3.OperationalError: unable to open database file\n\nThe above exception was the direct cause of the following exception:\n\nTraceback (most recent call last):\n File \"/usr/local/lib/python3.13/site-packages/openhands/automation/app.py\", line 104, in lifespan\n command.upgrade(alembic_cfg, \"head\")\n ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^\n File \"/usr/local/lib/python3.13/site-packages/alembic/command.py\", line 483, in upgrade\n script.run_env()\n ~~~~~~~~~~~~~~^^\n File \"/usr/local/lib/python3.13/site-packages/alembic/script/base.py\", line 545, in run_env\n util.load_python_file(self.dir, \"env.py\")\n ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^\n File \"/usr/local/lib/python3.13/site-packages/alembic/util/pyfiles.py\", line 116, in load_python_file\n module = load_module_py(module_id, path)\n File \"/usr/local/lib/python3.13/site-packages/alembic/util/pyfiles.py\", line 136, in load_module_py\n spec.loader.exec_module(module) # type: ignore\n ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^\n File \"\", line 1023, in exec_module\n File \"\", line 488, in _call_with_frames_removed\n File \"/usr/local/lib/python3.13/site-packages/openhands/automation/migrations/env.py\", line 152, in \n run_migrations_online()\n ~~~~~~~~~~~~~~~~~~~~~^^\n File \"/usr/local/lib/python3.13/site-packages/openhands/automation/migrations/env.py\", line 129, in run_migrations_online\n with engine.begin() as connection:\n ~~~~~~~~~~~~^^\n File \"/usr/local/lib/python3.13/contextlib.py\", line 141, in __enter__\n return next(self.gen)\n File \"/usr/local/lib/python3.13/site-packages/sqlalchemy/engine/base.py\", line 3259, in begin\n with self.connect() as conn:\n ~~~~~~~~~~~~^^\n File \"/usr/local/lib/python3.13/site-packages/sqlalchemy/engine/base.py\", line 3295, in connect\n return self._connection_cls(self)\n ~~~~~~~~~~~~~~~~~~~~^^^^^^\n File \"/usr/local/lib/python3.13/site-packages/sqlalchemy/engine/base.py\", line 146, in __init__\n Connection._handle_dbapi_exception_noconnection(\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^\n err, dialect, engine\n ^^^^^^^^^^^^^^^^^^^^\n )\n ^\n File \"/usr/local/lib/python3.13/site-packages/sqlalchemy/engine/base.py\", line 2450, in _handle_dbapi_exception_noconnection\n raise sqlalchemy_exception.with_traceback(exc_info[2]) from e\n File \"/usr/local/lib/python3.13/site-packages/sqlalchemy/engine/base.py\", line 144, in __init__\n self._dbapi_connection = engine.raw_connection()\n ~~~~~~~~~~~~~~~~~~~~~^^\n File \"/usr/local/lib/python3.13/site-packages/sqlalchemy/engine/base.py\", line 3319, in raw_connection\n return self.pool.connect()\n ~~~~~~~~~~~~~~~~~^^\n File \"/usr/local/lib/python3.13/site-packages/sqlalchemy/pool/base.py\", line 448, in connect\n return _ConnectionFairy._checkout(self)\n ~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^\n File \"/usr/local/lib/python3.13/site-packages/sqlalchemy/pool/base.py\", line 1272, in _checkout\n fairy = _ConnectionRecord.checkout(pool)\n File \"/usr/local/lib/python3.13/site-packages/sqlalchemy/pool/base.py\", line 712, in checkout\n rec = pool._do_get()\n File \"/usr/local/lib/python3.13/site-packages/sqlalchemy/pool/impl.py\", line 178, in _do_get\n with util.safe_reraise():\n ~~~~~~~~~~~~~~~~~^^\n File \"/usr/local/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py\", line 122, in __exit__\n raise exc_value.with_traceback(exc_tb)\n File \"/usr/local/lib/python3.13/site-packages/sqlalchemy/pool/impl.py\", line 176, in _do_get\n return self._create_connection()\n ~~~~~~~~~~~~~~~~~~~~~~~^^\n File \"/usr/local/lib/python3.13/site-packages/sqlalchemy/pool/base.py\", line 389, in _create_connection\n return _ConnectionRecord(self)\n File \"/usr/local/lib/python3.13/site-packages/sqlalchemy/pool/base.py\", line 674, in __init__\n self.__connect()\n ~~~~~~~~~~~~~~^^\n File \"/usr/local/lib/python3.13/site-packages/sqlalchemy/pool/base.py\", line 900, in __connect\n with util.safe_reraise():\n ~~~~~~~~~~~~~~~~~^^\n File \"/usr/local/lib/python3.13/site-packages/sqlalchemy/util/langhelpers.py\", line 122, in __exit__\n raise exc_value.with_traceback(exc_tb)\n File \"/usr/local/lib/python3.13/site-packages/sqlalchemy/pool/base.py\", line 896, in __connect\n self.dbapi_connection = connection = pool._invoke_creator(self)\n ~~~~~~~~~~~~~~~~~~~~^^^^^^\n File \"/usr/local/lib/python3.13/site-packages/sqlalchemy/engine/create.py\", line 667, in connect\n return dialect.connect(*cargs_tup, **cparams)\n ~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^\n File \"/usr/local/lib/python3.13/site-packages/sqlalchemy/engine/default.py\", line 630, in connect\n return self.loaded_dbapi.connect(*cargs, **cparams) # type: ignore[no-any-return] # NOQA: E501\n ~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^\nsqlalchemy.exc.OperationalError: (sqlite3.OperationalError) unable to open database file\n(Background on this error at: https://sqlalche.me/e/20/e3q8)\n\nThe above exception was the direct cause of the following exception:\n\nTraceback (most recent call last):\n File \"/usr/local/lib/python3.13/site-packages/starlette/routing.py\", line 638, in lifespan\n async with self.lifespan_context(app) as maybe_state:\n ~~~~~~~~~~~~~~~~~~~~~^^^^^\n File \"/usr/local/lib/python3.13/contextlib.py\", line 214, in __aenter__\n return await anext(self.gen)\n ^^^^^^^^^^^^^^^^^^^^^\n File \"/usr/local/lib/python3.13/site-packages/fastapi/routing.py\", line 216, in merged_lifespan\n async with original_context(app) as maybe_original_state:\n ~~~~~~~~~~~~~~~~^^^^^\n File \"/usr/local/lib/python3.13/contextlib.py\", line 214, in __aenter__\n return await anext(self.gen)\n ^^^^^^^^^^^^^^^^^^^^^\n File \"/usr/local/lib/python3.13/site-packages/fastapi/routing.py\", line 216, in merged_lifespan\n async with original_context(app) as maybe_original_state:\n ~~~~~~~~~~~~~~~~^^^^^\n File \"/usr/local/lib/python3.13/contextlib.py\", line 214, in __aenter__\n return await anext(self.gen)\n ^^^^^^^^^^^^^^^^^^^^^\n File \"/usr/local/lib/python3.13/site-packages/fastapi/routing.py\", line 216, in merged_lifespan\n async with original_context(app) as maybe_original_state:\n ~~~~~~~~~~~~~~~~^^^^^\n File \"/usr/local/lib/python3.13/contextlib.py\", line 214, in __aenter__\n return await anext(self.gen)\n ^^^^^^^^^^^^^^^^^^^^^\n File \"/usr/local/lib/python3.13/site-packages/fastapi/routing.py\", line 216, in merged_lifespan\n async with original_context(app) as maybe_original_state:\n ~~~~~~~~~~~~~~~~^^^^^\n File \"/usr/local/lib/python3.13/contextlib.py\", line 214, in __aenter__\n return await anext(self.gen)\n ^^^^^^^^^^^^^^^^^^^^^\n File \"/usr/local/lib/python3.13/site-packages/fastapi/routing.py\", line 216, in merged_lifespan\n async with original_context(app) as maybe_original_state:\n ~~~~~~~~~~~~~~~~^^^^^\n File \"/usr/local/lib/python3.13/contextlib.py\", line 214, in __aenter__\n return await anext(self.gen)\n ^^^^^^^^^^^^^^^^^^^^^\n File \"/usr/local/lib/python3.13/site-packages/openhands/automation/app.py\", line 109, in lifespan\n raise RuntimeError(msg) from e\nRuntimeError: SQLite migration failed. Database may be inconsistent: (sqlite3.OperationalError) unable to open database file\n(Background on this error at: https://sqlalche.me/e/20/e3q8)\n", "severity": "ERROR"} {"message": "Application startup failed. Exiting.", "severity": "ERROR"} [agent-canvas] WARNING: Agent Server on port 18000 did not become ready within 60s [agent-canvas] WARNING: Automation Server on port 18001 did not become ready within 60s [agent-canvas] Starting frontend + proxy on port 8000... [agent-canvas] All services started. Unified entry point: http://0.0.0.0:8000/ [agent-canvas] ERROR: A service exited with code 0 [agent-canvas] Shutting down...