Announcing Beacon: Self-improving memory for coding agents
← All skills
Skill

basic-memory-pi-setup

skill:basicmachines-co/basic-memory#basic-memory-pi-setup

Set up Basic Memory for a Pi workspace. Use when Basic Memory is not configured, /bm-status shows no project, recall returns setup guidance, or the user asks to enable durable memory, choose CLI vs MCP, or configure automatic continuity.

Verdict
Suspicious

Risky behavior the analysis could not rule out.

Analyzed Oct 27, 2026, 22:42 UTC at 0884e20

Dispute security verdict

If you believe this verdict is incorrect, submit a dispute and we'll review it.

1
findings
medium
highest severity
1
threat classes
1,931
files scanned
17/17
checks satisfied
0
package advisories

Why this verdict

  • suspicious: finding skill:integrations/pi/skills/basic-memory-pi-setup:integrations/pi/skills/basic-memory-pi-setup/SKILL.md:40:SUPPLY

Security findings 1

Supply chain

mediumContextual riskmedium confidence

When the user chooses MCP mode, the skill instructs the agent to install the npm package pi-mcp-adapter with no version pin, pulling mutable remote code into the workspace environment.

pi install npm:pi-mcp-adapter
vector:instruction
Counter-argument considered

The skill body gives the agent a concrete, runnable instruction to install pi-mcp-adapter with no version specifier; the accepted carve-out covers only pinned official-registry installs, and no declared claim (D1-D5) covers third-party package installation or pinning, so the contextual supply finding stands.

Open questions 13

What the analysis could not settle from the code alone.

The skill directs the agent to set BASIC_MEMORY_PI_TRUST_WORKSPACE=1 'in the environment used to launch Pi' after user confirmation; it is not shown whether this is a transient shell export or a persistent host/config write, which determines if it constitutes a control-plane persistence write.
Persistence
Does Basic Memory's autoCapture/autoRecall (enabled by the config written in step 4 and gated behind BASIC_MEMORY_PI_TRUST_WORKSPACE=1) store captured Pi session data locally or send it to a remote service, and what exactly does useHookFlow register?
Data exfiltration
[file request integrations/pi/package.json] Which files and entry points does the pi integration ship, and which entry point or module parses .pi/basic-memory.json or reads BASIC_MEMORY_PI_TRUST_WORKSPACE / BASIC_MEMORY_PI_TRUST_BM_COMMAND?
Privilege escalation
[file request integrations/pi/src/index.ts] Does this file parse .pi/basic-memory.json, and does it validate bmCommand/bmPath and require user confirmation before honoring BASIC_MEMORY_PI_TRUST_WORKSPACE or BASIC_MEMORY_PI_TRUST_BM_COMMAND?
Privilege escalation
[file request integrations/pi/index.ts] Does this file parse .pi/basic-memory.json, and does it validate bmCommand/bmPath and require user confirmation before honoring BASIC_MEMORY_PI_TRUST_WORKSPACE or BASIC_MEMORY_PI_TRUST_BM_COMMAND?
Privilege escalation
[file request integrations/pi/src/extension.ts] Does this file parse .pi/basic-memory.json or register the /bm-status, /bm-recall, /bm-capture and hook flow, and does it validate bmCommand/bmPath and enforce the BASIC_MEMORY_PI_TRUST_* confirmation gating?
Privilege escalation
[file request integrations/pi/src/config.ts] Does this file parse or validate .pi/basic-memory.json fields including bmCommand, bmPath, transport, autoRecall, autoCapture and useHookFlow, and how are the BASIC_MEMORY_PI_TRUST_* flags checked?
Privilege escalation
[file request integrations/pi/src/hooks.ts] Does this hook-flow consumer read .pi/basic-memory.json and the BASIC_MEMORY_PI_TRUST_* flags, and does it validate bmCommand/bmPath and gate automation on explicit user confirmation?
Privilege escalation
[file request integrations/pi/README.md] Which documented source file implements the .pi/basic-memory.json consumer and the BASIC_MEMORY_PI_TRUST_WORKSPACE / BASIC_MEMORY_PI_TRUST_BM_COMMAND gating?
Privilege escalation
[file request integrations/pi/extensions/index.ts] Does this file parse .pi/basic-memory.json, validate bmCommand/bmPath, and require user confirmation before honoring BASIC_MEMORY_PI_TRUST_WORKSPACE / BASIC_MEMORY_PI_TRUST_BM_COMMAND?
Privilege escalation
[file request integrations/pi/extensions/config.ts] Does this file parse and validate the .pi/basic-memory.json fields bmCommand, bmPath, transport, autoRecall, autoCapture and useHookFlow, and how are the BASIC_MEMORY_PI_TRUST_* flags checked?
Privilege escalation
[file request integrations/pi/extensions/hooks.ts] If this hook-flow consumer exists, does it read .pi/basic-memory.json and the BASIC_MEMORY_PI_TRUST_* flags, validate bmCommand/bmPath, and gate automatic recall/capture on explicit user confirmation?
Privilege escalation
[file request integrations/pi] Which companion code parses the `.pi/basic-memory.json` file this skill writes, and does it validate `bmCommand`/`bmPath` and enforce the user-confirmation gating described for `BASIC_MEMORY_PI_TRUST_WORKSPACE` and `BASIC_MEMORY_PI_TRUST_BM_COMMAND`?
Privilege escalation
Refuted findings 3

Candidates the review stage examined and rejected, kept for transparency.

Code execution

criticalRefutedmedium confidence

The skill documents a trust escape hatch under which workspace config may supply an arbitrary bmCommand argv that overrides bmPath and is executed by the Pi integration when BASIC_MEMORY_PI_TRUST_BM_COMMAND=1 is set, enabling arbitrary command execution if the consumer does not validate it.

set `BASIC_MEMORY_PI_TRUST_BM_COMMAND=1` and use `bmCommand` as an argv array
Why it was refuted

The bmCommand mechanism is a declared capability (D4), scoped to local development in a trusted workspace, gated by an explicit opt-in trust variable, and explicitly shell-free; the skill supplies only a benign example rather than directing the agent to run an arbitrary command, so the behavior is declared and carved out rather than a harmful EXEC instruction.

Privilege escalation

highRefutedmedium confidence

The skill directs the agent to set BASIC_MEMORY_PI_TRUST_WORKSPACE=1 in the Pi launch environment after user confirmation, which disables the workspace-trust gate so automatic recall/capture hooks run without per-action confirmation.

then set `BASIC_MEMORY_PI_TRUST_WORKSPACE=1` in the environment used to launch Pi
Why it was refuted

Setting BASIC_MEMORY_PI_TRUST_WORKSPACE=1 is exactly declared capability D2 and is the declared mechanism for the described 'configure automatic continuity' capability, applied only after explicit user confirmation with a documented manual fallback; the behavior is neither undeclared nor outside a carve-out, so the PRIVESC framing does not hold.

Privilege escalation

highRefutedlow confidence

The skill documents a trust-bypass escape hatch in which setting `BASIC_MEMORY_PI_TRUST_BM_COMMAND=1` lets a `bmCommand` argv array override the configured binary path to execute an arbitrary local command, which is disclosed and user-gated but is a permission-bypass broader than the skill's declared config-writing purpose.

set `BASIC_MEMORY_PI_TRUST_BM_COMMAND=1` and use `bmCommand` as an argv array
Why it was refuted

The identical behavior is declared verbatim as capability D4, which contradicts the claim that it is 'broader than the skill's declared config-writing purpose'; it is an opt-in, user-gated, shell-free configuration of which binary the integration launches, not an undeclared permission bypass.

Coverage gaps 3

Parts of the artifact the static analysis could not fully examine.

context:unanalyzable_binary pdf content is only byte-scanned
tests/Non-MarkdownFileSupport.pdf
context:frontmatter_unparseable while parsing a block mapping
.claude/commands/spec.md
context:decoded_views_exceeded 410 derived view(s) beyond the per-file view cap: decoded:rot13, decoded:unicode-escape
src/basic_memory/mcp/ui/html/search-results-tool-ui.html