Canvas Os 1.0.1
Analysis
Canvas OS is mostly a coherent Canvas UI skill, but it should be reviewed because it can run local web servers, inject JavaScript, terminate port listeners, and let Canvas apps send messages back to the agent.
Findings (4)
Artifact-based informational review of SKILL.md, metadata, install specs, static scan signals, and capability signals. ClawScan does not execute the skill or run runtime probes.
Checks for instructions or behavior that redirect the agent, misuse tools, execute unexpected code, cascade across systems, exploit user trust, or continue outside the intended task.
APP_NAME="${1:-my-app}"
PORT="${2:-9876}"
...
lsof -ti:$PORT 2>/dev/null | xargs kill -9 2>/dev/null
...
cd "$APPS_DIR/$APP_NAME"
python3 -m http.server $PORT > /dev/null 2>&1 &The helper takes app name and port from arguments, kills any listener on that port, then serves the resulting path without canonicalizing it under the intended apps directory.
canvas.present(url="about:blank") canvas.eval(javaScript='document.open(); document.write(`<html>...</html>`); document.close();')
Direct JavaScript evaluation and document.write injection are explicitly part of the Canvas rendering approach. This is purpose-aligned, but it means supplied HTML/JS must be trusted or sanitized.
openclaw nodes status --json 2>/dev/null | jq -r '.nodes[0].displayName' ... lsof -ti:$PORT ... curl -s "http://localhost:$PORT/"
The registry requirements declare only python3, but the runnable helper also relies on openclaw, jq, lsof, and curl. This is purpose-aligned, but the runtime assumptions are under-declared.
Checks for exposed credentials, poisoned memory or context, unclear communication boundaries, or sensitive data that could leave the user's control.
Apps send commands back via deep links:
function sendToAgent(message) {
window.location.href = `openclaw://agent?message=${encodeURIComponent(message)}`;
}
// Button click → agent commandCanvas app JavaScript can create messages to the agent, but the artifacts do not define origin checks, permissions, or confirmation requirements for those app-originated commands.
