Is Claude Skill Social Post safe?
- Python filesystem read
- Python filesystem write/delete
- MCP tool surface detected
repo is an AI directory analyzed by SkillTotal's deterministic static scanner. The scan found no malicious indicators, though 3 risky constructs are reported for review. It can: filesystem read, filesystem write and mcp tools detected — capabilities are what the code can do, not a verdict on intent. Risk score 0/100 (low).
repo
Automated static-analysis result. It can contain false positives and false negatives, and is not a claim about the intent of Claude Skill Social Post's authors. Report a false positive.
Behavioral traits
How this component maps to the CSA agentic threat model. Descriptive — it never affects the risk score.
Findings (3)
The component reads files from disk.
metadata_value = json.loads(METADATA.read_text(encoding="utf-8-sig"))
text = source.read_text(encoding="utf-8-sig")
bundle = json.loads(args.bundle.read_text(encoding="utf-8-sig"))
value = json.loads(path.read_text(encoding="utf-8-sig"))
for line_no, raw in enumerate(path.read_text(encoding="utf-8-sig").splitlines(), start=1):
digest.update(path.read_bytes())
originals = {path: path.read_bytes() if path.exists() else None for path in records}elif path.read_text(encoding="utf-8-sig") != expected:
manifest = json.loads(MANIFEST.read_text(encoding="utf-8-sig"))
normalized = path.read_text(encoding="utf-8-sig").replace("\r\n", "\n")original = SOURCE.read_text(encoding="utf-8-sig")
text = SOURCE.read_text(encoding="utf-8-sig")
heading = HEADING.search(path.read_text(encoding="utf-8-sig"))
actual = path.read_text(encoding="utf-8-sig")
text = path.read_text(encoding="utf-8-sig")
manifest = json.loads(MANIFEST.read_text(encoding="utf-8-sig"))
if normalized_hash(path.read_text(encoding="utf-8-sig")) != record["sha256"]:
prefix, rules = parse(SOURCE.read_text(encoding="utf-8-sig"))
config = json.loads(CONFIG.read_text(encoding="utf-8-sig"))
if destination.exists() and destination.read_bytes() == source.read_bytes():
Why it matters: Usually legitimate, but worth confirming it can't be steered into reading sensitive files.
Fix: Confirm which files are read and that paths cannot be influenced by untrusted input to reach sensitive locations.
The component writes or deletes files on disk.
OUTPUT.write_text(rendered, encoding="utf-8")
path.write_text(content, encoding="utf-8")
shutil.copyfile(staged, temporary)
destination.write_bytes(original)
MANIFEST.write_text(json.dumps({"schema_version": "1.0", "cases": records}, ensure_ascii=False, indent=2) + "\n", encoding="utf-8")(CASE_DIR / f"case-{case_id:02d}.md").write_text(content, encoding="utf-8")SOURCE.write_text(index_text(prefix, cases), encoding="utf-8")
(TARGET / filename).write_text(section, encoding="utf-8")
SOURCE.write_text(prelude + "\n" + "\n".join(navigation) + "\n", encoding="utf-8")
(TARGET / "manifest.json").write_text(json.dumps(manifest, ensure_ascii=False, indent=2) + "\n", encoding="utf-8")
(TARGET / "manifest.json").write_text(json.dumps(manifest, ensure_ascii=False, indent=2) + "\n", encoding="utf-8")
MANIFEST.write_text(json.dumps({"schema_version": "1.0", "rules": records}, ensure_ascii=False, indent=2) + "\n", encoding="utf-8")(RULE_DIR / f"R{rule_id:02d}.md").write_text(content, encoding="utf-8")SOURCE.write_text(index_text(prefix, rules), encoding="utf-8")
shutil.copy2(source, destination)
Why it matters: Usually legitimate, but worth confirming the paths can't be controlled by untrusted input.
Fix: Confirm which files are written/deleted and that paths cannot be influenced by untrusted input.
An MCP tool surface (manifest or tool definitions) was found.
Why it matters: Just context — review which tools it offers and their permissions.
Fix: Review the declared MCP tools and their permissions.
Check your own component
Run the same evidence-backed scan on any MCP server, agent skill, or package.
Scan your own componentHow we determine this: deterministic static analysis (regex + AST), evidence-anchored, no code execution. Methodology →