SkillTotal

Is Boss Agent Cli safe?

No malicious indicators - review capabilities before installing
Notable — review in context (capabilities are not malware):
  • Python shell/command execution
  • Python filesystem read
  • Python filesystem write/delete

boss-agent-cli is an AI python_package analyzed by SkillTotal's deterministic static scanner. The scan found no malicious indicators, though 6 risky constructs are reported for review. It can: filesystem read, filesystem write, mcp tools detected, network egress and shell execution — capabilities are what the code can do, not a verdict on intent. Risk score 0/100 (low).

boss-agent-cli 1.18.0

python_package · https://github.com/can4hou6joeng4/boss-agent-cli
LOW
0
/ 100 risk score
Snapshot · scanned Aug 13, 2026 · boss-agent-cli@1.18.0 · engine 0.38.1 / ruleset 42

Automated static-analysis result. It can contain false positives and false negatives, and is not a claim about the intent of Boss Agent Cli's authors. Report a false positive.

Capabilities — what this component can do (not a risk score):
filesystem readfilesystem writemcp tools detectednetwork egressshell execution

Behavioral traits

How this component maps to the CSA agentic threat model. Descriptive — it never affects the risk score.

Tool surface
Tool Usage
Execution authority
Tool Access Control / Direct Tool Access
Filesystem reach
Tool Execution Context
Network egress
Interaction & Communication / Direct Communication

Findings (6)

HIGHPython shell/command executionST-SHELL-PY

The component can run operating-system commands or spawn processes.

completed = subprocess.run(
		command,
		cwd=cwd,
		input=input,
		capture_output=capture_output,
		text=text,
		timeout=timeout,
		check=check,
	)
result = subprocess.run(
		["uv", "build", "--wheel"],
		cwd=project_root,
		check=False,
		text=True,
		stdout=subprocess.PIPE,
		stderr=subprocess.PIPE,
	)
proc = subprocess.run(
		resolved,
		cwd=ROOT,
		env=env,
		text=True,
		stdout=subprocess.PIPE,
		stderr=subprocess.PIPE,
		check=False,
	)
completed = subprocess.run(
			command,
			check=check,
			cwd=cwd,
			capture_output=capture_output,
			text=text,
			timeout=timeout,
		)
result = subprocess.run(
						["ioreg", "-rd1", "-c", "IOPlatformExpertDevice"],
						capture_output=True,
						text=True,
						check=False,
					)
result = subprocess.run(
						["reg", "query", r"HKLM\SOFTWARE\Microsoft\Cryptography", "/v", "MachineGuid"],
						capture_output=True,
						text=True,
						check=False,
					)
proc = subprocess.Popen(
			[sys.executable, "-m", "boss_agent_cli.bridge.daemon", "--serve"],
			stdout=log_fd,
			stderr=log_fd,
			stdin=subprocess.DEVNULL,
			**kwargs,
		)
result = subprocess.run(
		["ollama", "pull", model],
		check=False,
		capture_output=True,
		text=True,
	)
subprocess.Popen(  # noqa: S603 - fixed interpreter and in-package entrypoint
		command,
		stdin=subprocess.DEVNULL,
		stdout=subprocess.DEVNULL,
		stderr=subprocess.DEVNULL,
		creationflags=getattr(subprocess, "CREATE_NO_WINDOW", 0),
	)
result = subprocess.run(
		cmd,
		capture_output=True,
		text=True,
		timeout=120,
		stdin=subprocess.DEVNULL,
	)

Why it matters: Powerful and often legitimate — confirm the commands aren't built from untrusted input.

Fix: Confirm the command and its arguments are fully controlled and not derived from untrusted input; avoid shell=True.

MEDIUMPython filesystem readST-FS-PY-READ

The component reads files from disk.

raw = json.loads(path.read_text(encoding="utf-8"))
text = pyproject_path.read_text(encoding="utf-8")
return salt_path.read_bytes()
plaintext = fernet.decrypt(self._key_path.read_bytes())
saved = json.loads(self._config_path.read_text(encoding="utf-8"))
rows = json.loads(path.read_text(encoding="utf-8"))
lines = port_file.read_text().strip().splitlines()
result: dict[str, Any] = yaml.safe_load(ref.read_text(encoding="utf-8"))
return machine_id.read_text().strip()
return self._salt_path.read_bytes()
encrypted = self._session_path.read_bytes()
return cast("dict[str, Any]", json.loads(self.state_path.read_text(encoding="utf-8")))
for line in path.read_text(encoding="utf-8").splitlines():
with (self.root / name).open("a", encoding="utf-8") as handle:
pid = int(_PID_FILE.read_text().strip())
pid = int(_PID_FILE.read_text().strip())
jd_text = file_path.read_text(encoding="utf-8")
jd_text = file_path.read_text(encoding="utf-8")
jd_text = file_path.read_text(encoding="utf-8")
return file_path.read_text(encoding="utf-8")
jd_text = file_path.read_text(encoding="utf-8")
chat_text = file_path.read_text(encoding="utf-8")
jd_text = file_path.read_text(encoding="utf-8")
jd_text = file_path.read_text(encoding="utf-8")
with open(snapshot_path, encoding="utf-8") as f:

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.

MEDIUMPython filesystem write/deleteST-FS-PY-WRITE

The component writes or deletes files on disk.

path.write_text(json.dumps(report, ensure_ascii=False, indent=2) + "\n", encoding="utf-8")
shutil.rmtree(bundle_dir)
shutil.copy2(wheel_path, bundle_dir / "wheels" / wheel_path.name)
(bundle_dir / "README-PORTABLE.md").write_text(_portable_readme(version), encoding="utf-8")
(bundle_dir / "examples" / "opencode.json").write_text(_opencode_example(), encoding="utf-8")
path.write_text(content, encoding="utf-8")
with open(args.output, "w", encoding="utf-8") as fp:
self._key_path.write_bytes(encrypted)
self._config_path.write_text(
			json.dumps(current, ensure_ascii=False, indent=2),
			encoding="utf-8",
		)
registry.write_text(
		json.dumps([asdict(item) for item in rows], ensure_ascii=False, indent=2),
		encoding="utf-8",
	)
self._salt_path.write_bytes(salt)
self._session_path.write_bytes(encrypted)
self.state_path.write_text(
			json.dumps(state, ensure_ascii=False, indent=2, sort_keys=True),
			encoding="utf-8",
		)
path.write_text(body, encoding="utf-8")
path.write_text("candidate_key,interview_time,reason\n", encoding="utf-8")
with open(_LOG_FILE, "a") as log_fd:
_PID_FILE.write_text(str(os.getpid()))
with open(output_path, "w", encoding="utf-8", newline="") as f:
with open(snapshot_path, "w", encoding="utf-8") as f:

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.

MEDIUMNode.js network egressST-NET-NODE

The component makes outbound network requests.

const res = await fetch(DAEMON_PING_URL, { signal: AbortSignal.timeout(1000) });

Why it matters: Usually legitimate, but confirm the destinations are expected and no sensitive data leaves.

Fix: Confirm the destination hosts are expected and that no sensitive data is sent off-host.

MEDIUMPython network egressST-NET-PY

The component makes outbound network requests.

from urllib.parse import urlparse
req = urllib.request.Request(url, headers={"User-Agent": "contributors-svg"})
if token and urlparse(url).hostname == "api.github.com":
with urllib.request.urlopen(req, timeout=30) as r:
response = httpx.post(url, json=payload, headers=headers, timeout=60)
self._client = httpx.Client(
				base_url=self._BASE_URL,
				cookies=token.get("cookies", {}),
				headers=headers,
				follow_redirects=True,
				timeout=30,
			)
resp = httpx.get(f"{http_url}/json/version", timeout=timeout)
full_url = f"{url}?{urllib.parse.urlencode(params)}"
with urllib.request.urlopen(list_url, timeout=3) as resp:
self._client = httpx.Client(
				cookies=token.get("cookies", {}),
				headers=headers,
				follow_redirects=True,
				timeout=30,
			)
from urllib.parse import urlparse
resp = httpx.get(f"{base}/json/version", timeout=_CDP_PROBE_TIMEOUT)

Why it matters: Usually legitimate, but confirm the destinations are expected and no sensitive data leaves.

Fix: Confirm the destination hosts are expected and that no sensitive data is sent off-host.

LOWMCP tool surface detectedST-MCP-DETECTED

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 component

How we determine this: deterministic static analysis (regex + AST), evidence-anchored, no code execution. Methodology →