MCP, MCP server
Hive Mind
HiveMind is shared memory for your AI agents: a fact one agent writes on one machine is there for the next agent and the next machine, with no server in between.
Compatibility: Not stated.
Grade D
Two or more Medium findings, or a High finding. Only try it in a sandbox.
Not a guarantee. A hygiene check of the source at the commit shown, not a security audit.
Rescanned at commit 296dc41b1512.
INSTALL_REMOTE_SCRIPT NETWORK_HOST_FROM_INPUT
Why this grade
- INSTALL_REMOTE_SCRIPT Medium
Fetches a script from the network and runs it (a pipe to a shell, or an install hook with a URL).
integrations/mcp/install.sh, line 36
err "uv not found on PATH. Install it (curl -LsSf https://astral.sh/uv/install.sh | sh) and re-run." - NETWORK_HOST_FROM_INPUT Medium
A file takes a URL or endpoint as input and has no fixed host list.
hivemind/parts/14_peers.py, line 233
return requests.get(url, headers=headers or None, timeout=timeout).json()
Any High, or two or more Medium findings, give D. One Medium gives C. Low findings or a security Note give B. Each code names a finding behind the letter.
If you think this grade is wrong, email [email protected] with the entry link and your evidence. We aim to acknowledge within two working days and decide within seven. If we confirm an error, we aim to correct it within 24 hours of confirming it. These are aims, not guarantees.
Grades are a hygiene check of the source at the commit shown, on the date checked, not a security audit or a guarantee. The free directory grades are automated. Before release, a PlugVet engineer reviews every paid report and any grade we hold back, including all F grades, against the source code and the evidence we quote.
What was checked
Plain notes from the hygiene checks.
Permissions
Concern
can delete files.
PERMISSION_DELETE_FILES
hive_modules.py, line 733
subprocess.run(["git", "clone", "--quiet", "--depth", "1", "--", repo, str(dest)], env=env,
hive_modules.py, line 735
ls = subprocess.run(["git", "-c", "core.fsmonitor=false", "-C", str(dest), "ls-files", "-z"], check=True, capture_output=True, timeout=30)
hive_modules.py, line 736
head = subprocess.run(["git", "-C", str(dest), "rev-parse", "HEAD"], check=True, capture_output=True,
Show more
hive_modules.py, line 748
shutil.rmtree(staging)
hive_modules.py, line 854
shutil.rmtree(modules_dir() / f".{name}.staging", ignore_errors=True)
hive_modules.py, line 856
shutil.rmtree(Path(lib._ensure_key_dir()) / "modules" / name, ignore_errors=True)
hive_modules.py, line 894
shutil.rmtree(staging, ignore_errors=True)
hive_modules.py, line 897
shutil.rmtree(Path(lib._ensure_key_dir()) / "modules" / name, ignore_errors=True)
hive_modules.py, line 1010
return subprocess.run(["systemctl", "--user", *args], capture_output=True,
hive_modules.py, line 1027
r = subprocess.run(["systemctl", "--user", "is-system-running"], capture_output=True, text=True, timeout=30)
hive_modules.py, line 1211
r = subprocess.run(["systemctl", "--user", "is-active", unit], capture_output=True, text=True, timeout=10)
hive_modules.py, line 1477
rc = subprocess.run(argv, env=module_env(lib, args.name, recorded_path(rec))).returncode
hive_modules.py, line 1513
proc = subprocess.Popen(argv, cwd=str(cwd), env=env, stdin=subprocess.DEVNULL, stdout=subprocess.DEVNULL,
hive_modules.py, line 1564
shutil.rmtree(d, ignore_errors=True)
hive_modules.py, line 2172
shutil.rmtree(staging, ignore_errors=True)
hive_modules.py, line 2193
shutil.rmtree(staging, ignore_errors=True)
Install and update
Serious
install fetches a script from the network. The docs document an installer that pipes a download into a shell.
INSTALL_REMOTE_SCRIPT INSTALL_DOCUMENTED_INSTALLER
integrations/mcp/install.sh, line 36
err "uv not found on PATH. Install it (curl -LsSf https://astral.sh/uv/install.sh | sh) and re-run."
scripts/installer/_install_node.sh, line 280
curl -fsSL https://tailscale.com/install.sh | sh
scripts/installer/_install_node.sh, line 358
curl -LsSf https://astral.sh/uv/install.sh | sh
Show more
scripts/installer/install.sh, line 6
# curl -fsSL https://raw.githubusercontent.com/projectmentor/hive-mind/main/scripts/installer/install.sh | bash
README.md, line 8
curl -fsSL https://raw.githubusercontent.com/projectmentor/hive-mind/main/scripts/installer/install.sh | bash
README.md, line 110
curl -fsSL https://raw.githubusercontent.com/projectmentor/hive-mind/main/scripts/installer/install.sh | bash
README.md, line 146
curl -fsSL https://raw.githubusercontent.com/projectmentor/hive-mind/main/scripts/installer/install.sh | bash
requirements.txt, line 1
requests>=2.32.4,<3
Network
Serious
accepts a host from input, with no fixed list in this file.
NETWORK_HOST_FROM_INPUT
hivemind/parts/14_peers.py, line 233
return requests.get(url, headers=headers or None, timeout=timeout).json()
scripts/common/sync_auth_smoke.sh, line 90
CODE=$(curl -s --max-time 10 -o /dev/null -w '%{http_code}' "http://$LAN:$PA/sync/chunk?node=$DEVA&start=1&end=9")
Secrets
Concern
reads a credential or environment file.
SECRETS_ENV_READ SECRETS_PATH_DOTENV
hivemind/parts/01_identity.py, line 22
env = os.environ.get("HIVE_KEY_DIR")
scripts/common/sign_release.py, line 19
seed_b64 = os.environ.get("HIVE_SIGNING_KEY", "").strip()
hivemind/parts/11_release_node.py, line 775
"""Provision a `kind:tool` cell: ensure required credentials (from the per-device `.env` for now),
Show more
hivemind/parts/11_release_node.py, line 779
ef = env_file or "~/.claude/.env"
hivemind/parts/11_release_node.py, line 781
# Prefer sealed CAPSULES (encrypt-to-device); fall back to the per-device .env for un-sealed creds.
hivemind/parts/12_capsules_keys.py, line 124
--env-file [--name VAR] (default ~/.claude/.env), else an interactive getpass. bytes or None."""
hivemind/parts/12_capsules_keys.py, line 134
ef = getattr(args, "env_file", None) or "~/.claude/.env"
hivemind/parts/17_cli.py, line 219
help="Dotenv file to read tool credentials from (default ~/.claude/.env)")
hivemind/parts/17_cli.py, line 226
cap_put.add_argument("--env-file", dest="env_file", metavar="PATH", help="Dotenv file to read the value from (default ~/.claude/.env)")
integrations/claude-code/wire-up/SKILL.md, line 21
hv wire <name> --env-file PATH # read tool credentials from a dotenv file (default ~/.claude/.env)
Agent instructions
Pass
No instruction to ignore earlier instructions or to hide a step.
Obfuscation
Pass
No encoded or minified payload found.
Licence
Pass
A licence file is present (LICENSE).
Maintainer activity
Pass
The latest commit is within the last 365 days.
Note
Hygiene check of commit 296dc41b1512. can delete files. install fetches a script from the network. accepts a host from input, with no fixed list in this file. reads a credential or environment file.
Date and source
Date checked:
github.com
Commit graded: 296dc41b15126280d40b9cfdb18aca5f2286f3f5
This link goes to the original host. PlugVet does not host or check what you download from there, and installing it is your own decision and risk.