Local File Manager

WarnAudited by ClawScan on May 10, 2026.

Overview

The skill is a plausible local file manager, but its implementation can let crafted inputs run shell commands or bypass the claimed working-directory sandbox.

Do not install this version unless you are comfortable reviewing and fixing the implementation. At minimum, it should avoid shell string execution, enforce a real cwd boundary, use package-relative paths, and add real confirmation for delete/overwrite operations.

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.

What this means

A crafted filename, pattern, content string, or working-directory value could cause arbitrary shell commands to run as the user, bypassing the intended local-file-only behavior.

Why it was flagged

User-controlled fields such as path, content, pattern, action, and cwd are interpolated into a shell command without escaping or an argument array.

Skill content
if (content) args.push("--content", content); ... await execAsync(`CWD="${cwd}" "${scriptPath}" ${args.join(" ")}`, { ... })
Recommendation

Replace exec with execFile/spawn using an argument array, validate the action against an allowlist, pass large content through stdin or a safe temporary file, and avoid shell interpretation entirely.

What this means

The agent may be able to read, overwrite, or delete files outside the session working directory despite the documented sandbox, for example through path-normalization edge cases or symlinks.

Why it was flagged

The path guard only strips one leading slash and rejects the substring '..'; it does not canonicalize paths or verify the resolved path remains inside cwd before read, write, or delete operations.

Skill content
p="${p#/}"; if [[ "$p" == *".."* ]]; then ...; echo "$p" ... cat "$FILE" ... printf "%s" "$CONTENT" > "$FILE" ... rm "$FILE"
Recommendation

Use realpath/canonicalization and enforce that every resolved target is under the intended cwd; reject absolute paths after normalization; consider disallowing symlink traversal for destructive operations.

What this means

On some systems the skill may fail; on others it could execute a local file outside the reviewed package if that hard-coded path exists or is replaced.

Why it was flagged

The runtime entry point uses a hard-coded absolute path rather than the packaged script location, creating a provenance gap between reviewed code and what may actually execute.

Skill content
const scriptPath = "/Users/nico/.openclaw/workspace/skills/local-file-manager/scripts/file_manager.sh";
Recommendation

Use a package-relative script path, remove stale or conflicting metadata, and declare a clear install/runtime entry point so the executed code is the reviewed code.

What this means

Users may believe destructive or large-file operations have stronger safeguards than the reviewed implementation actually provides.

Why it was flagged

The documentation promises confirmation and size-limit safety controls, but the provided shell script directly removes files and does not implement the stated max-file-size check.

Skill content
**Delete file**: Remove a file (with safety checks) ... # Delete file (with confirmation) ... **Size limit**: Max file size 10MB (configurable)
Recommendation

Update the documentation to match actual behavior, or implement explicit confirmation, default dry-run for deletion/overwrite, and enforced file-size limits.