poppy@0.4.1
VERIFIED· install onlyPublisher claims: "Enables AI coding agents to store decisions, preferences, and lessons in a local SQLite store, then recall the most relevant ones on demand. Runs fully local — no cloud, API keys, or per-query cost — and also exposes forget and consolidate operations." Observed in sandbox: no network, touches nothing outside the project, writes no memory.
Coverage
Nothing executable in the bundle ran; the trace covers the install step only.- Tested
- every file read, file written and host contacted by what ran
- Not tested
- use of the skill by an agent
What this means for the label: Verified here covers what ran. The server's tools were not exercised with a real credential, so nothing about their behavior is asserted; the credential summary below says what to do with that.
Before you give it your token
- It will ask for
OPENAI_API_KEYPOPPY_CONSOLIDATE_API_KEYPOPPY_DAEMON_TOKENConfiguration, not credentials: CLAUDE_CODE_PLUGIN_CACHE_DIR, CLAUDE_CONFIG_DIR, CODEX_HOME, COPILOT_HOME, CURSOR_HOME, CURSOR_TRANSCRIPT_PATH, GOOSE_PATH_ROOT, HERMES_HOME, OPENAI_BASE_URL, PI_CODING_AGENT_DIR, POPPY_AUTOSYNC_DEBOUNCE, POPPY_AUTOSYNC_DISABLE, POPPY_CLAUDE_DESKTOP_CONFIG, POPPY_CONSOLIDATE_BASE_URL, POPPY_CONSOLIDATE_MAX_ITEMS, POPPY_CONSOLIDATE_MODEL, POPPY_DAEMON_PORT, POPPY_DIR, POPPY_FASTEMBED_CACHE, POPPY_FORWARDER_DRAIN_S, POPPY_GOOSE_CONFIG_DIR, POPPY_LAUNCH_AGENTS_DIR, POPPY_MCP_SOURCE, POPPY_MODEL_IDLE_S, POPPY_SERVE_NO_DAEMON, POPPY_SUPPRESS_HOOKS, POPPY_SYSTEMD_USER_DIR, POPPY_TELEMETRY_OFF, POPPY_TEST_FAIL_ON_ENGINE, POPPY_TEST_FAIL_ON_MODEL_LOAD, POPPY_UPDATE_CHECK_OFF, POPPY_VSCODE_MCP_CONFIG- Where it talks to
- no vendor host named in the codeAlso trags.ai, collector.example, evil.com, attacker.tld, posthog.com, evil.example — not the publisher's domain; check what for before connecting.
- What the honeypot saw
- no credential files read · no network
- What we could not test
- use of the skill by an agent
Connect it with a scoped credential, under the guard, and read the third-party hosts first. The code names trags.ai, collector.example, evil.com, attacker.tld, posthog.com, evil.example as well as its own vendor. The guard injects OPENAI_API_KEY, POPPY_CONSOLIDATE_API_KEY, POPPY_DAEMON_TOKEN only into requests to the host you bind (and its subdomains) and refuses the rest.
Never paste a credential into a chat, a ticket or a report, including ours. How the guard holds it.
Is [email protected] safe to install?
KillerSkills ran it in the KillerSkills honeypot sandbox (1 scenario; nothing executable in the bundle ran; the trace covers the install step only) on 2026-11-13 and scored it 85/100 (Verified). In what ran, nothing we could detect went wrong: no undeclared network egress, no credential reads, no persistent instruction writes. What it does with a real credential was not observed; the static findings and the publisher carry the rest of the score. Summary: no network, touches nothing outside the project, writes no memory.
Behavior trace
Honeypot run · 0 s · 1 scenarios · 0 deviationsStatic findings
hints.append(f"Restrict it with `chmod 600 {config_path}`.")Fix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.proc = subprocess.Popen(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.A plain ``write_text`` truncates first, so a crash, kill or full disk part wayFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.return subprocess.Popen(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.from poppy.mcp_server.assembly import lifecycle_markers, lookup_supersededFix: Namespace tool names and keep tool descriptions literal; no instructions to the agent inside them.proc = subprocess.run(cmd, input=prompt, capture_output=True, text=True, timeout=remaining, env=child_env)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.hint=f"run `chmod +x {shlex.quote(str(shim))}` "Fix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.cannot hold ACLs makes ``chmod -N`` fail). Linux needs nothing here:Fix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts."""Insert (or update) a managed Poppy block in ~/.claude/CLAUDE.md."""Fix: Remove the text that addresses the agent rather than the reader; describe behavior, do not instruct.result = subprocess.run([str(shim), "--version"], env=env, capture_output=True, timeout=30)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.pass # Best-effort; a chmod failure must not break the hook.Fix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.result = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out."users read the file, so nothing was written. Remove it with `chmod -N`, or re-run "Fix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts."""Leave the plugin's wiring alone; add only the CLAUDE.md block when asked by flag."""Fix: Remove the text that addresses the agent rather than the reader; describe behavior, do not instruct.subprocess.Popen(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.from poppy.mcp_server.assembly import assemble_recall_contextFix: Namespace tool names and keep tool descriptions literal; no instructions to the agent inside them.`--claude-md` to add the CLAUDE.md block next to the skill, so the primer loadsFix: Remove the text that addresses the agent rather than the reader; describe behavior, do not instruct.help="Add a managed CLAUDE.md block describing Poppy tools.",Fix: Remove the text that addresses the agent rather than the reader; describe behavior, do not instruct.the encryption gate) is never granted write back. Best-effort: a chmodFix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.runs the system ``chmod -N`` on the open file itself, which keeps it on theFix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.# for new dirs and ignored entirely for existing ones, so the explicit chmod isFix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.return subprocess.run(argv, check=False, capture_output=True, text=True)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.Cost to the agent
Tokens estimated at four characters each. Skills load their instruction text when triggered; the figure is what that costs.
Known vulnerabilities
Vulnerability advisories (OSV) cover npm and PyPI packages; this registry has no advisory database.