Skills/npm/anti-slop-engineering

anti-slop-engineering@1.7.0

BLOCKED· install only

Publisher claims: "An Engineering Discipline Playbook, Agent Skill & Triage Guard for AI Coding Agents" Observed in sandbox: reads credential files, sends data to fd12:ea5f:789c:1:d000:2b:95f6:3c3a, 10.246.60.58.

Registry npm (MCP server)Publisher immamdouhaboammar · publishing for 159 daysInstalls 3,209Last detonated 2d ago

Coverage

Install scripts ran; no agent task scenario for this bundle.
Tested
install scripts, with decoy credentials in place · second launch with the clock 45 days ahead · every file read, file written and host contacted by what ran
Not tested
use of the skill by an agent

Is [email protected] safe to install?

KillerSkills ran it in the KillerSkills honeypot sandbox (2 scenarios; install scripts ran; no agent task scenario for this bundle) on 2026-11-12 and scored it 25/100 (Blocked). Do not install it: the sandbox observed behaviour consistent with credential theft, exfiltration or persistence. Notable findings: Credential pass-through configuration; Pipe-to-shell pattern; Access to sensitive file paths. Summary: reads credential files, sends data to fd12:ea5f:789c:1:d000:2b:95f6:3c3a, 10.246.60.58.

Behavior trace

Honeypot run · 49 s · 2 scenarios
t+CategoryObserved action
0.1sfilesystemread ~/.agents/skills/anti-slop-engineering/ outside project
0.1sprocessexec /usr/bin/dirname
0.1sprocessexec /usr/bin/mkdir
0.1sprocessexec /usr/bin/rm
0.1sprocessexec /usr/bin/cp
0.1sprocessexec /usr/bin/chmod
0.2sprocessscript backend runs setup only
0.2sprocessscript backend runs setup only
0.3sprocesssecond launch, clock +45 days, CI unset
0.5sfilesystemread ~/.agents/skills/anti-slop-engineering · ~/.agents/skills/anti-slop-engineering/ outside project
0.5sprocessexec /usr/bin/dirname
0.5sprocessexec /usr/bin/mkdir
0.5sprocessexec /usr/bin/rm
0.5sprocessexec /usr/bin/cp
0.5sprocessexec /usr/bin/chmod
49snetworkdirect connection to fd12:ea5f:789c:1:d000:2b:95f6:3c3a:0, bypassing the egress proxy · undeclared
49snetworkdirect connection to 10.246.60.58:0, bypassing the egress proxy · undeclared
49sfilesystemread ~/.npmrc
49sfilesystemread ~/.npm/_logs · ~/.npm/_cacache/index-v5/94/20/9f7736468c664df22baf94367fc1ed384cf4bfc32d8f36e1d2ad5afcaa7d · ~/.npm/_npx/ac0ed6aa23b37c1e/package.json · ~/.npm/_npx/ac0ed6aa23b37c1e/node_modules/.package-lock.json · ~/.npm/_npx/ac0ed6aa23b37c1e/yarn.lock · ~/.npm/_npx/ac0ed6aa23b37c1e/node_modules outside project
49sfilesystemwrote ~/.npm/_cacache/tmp/ef677428 · ~/.npm/_cacache/index-v5/94/20/9f7736468c664df22baf94367fc1ed384cf4bfc32d8f36e1d2ad5afcaa7d · ~/.npm/_cacache/tmp/fa1dc3f3 · ~/.npm/_cacache/tmp/3f888055 · ~/.npm/_cacache/tmp/21da71c8 · ~/.npm/_cacache/tmp/01c4b23f
49snetworkCONNECT tcp://registry.npmjs.org:443
49snetworkCONNECT tcp://registry.npmjs.org:443
49snetworkCONNECT tcp://registry.npmjs.org:443
49snetworkCONNECT tcp://registry.npmjs.org:443
49snetworkCONNECT tcp://registry.npmjs.org:443
49snetworkCONNECT tcp://registry.npmjs.org:443
49snetworkCONNECT tcp://registry.npmjs.org:443
49snetworkCONNECT tcp://registry.npmjs.org:443
49snetworkCONNECT tcp://registry.npmjs.org:443
49snetworkCONNECT tcp://registry.npmjs.org:443
49snetworkCONNECT tcp://api.github.com:443
49snetworkCONNECT tcp://github.com:443
49sprocessexec /app/apps/web/node_modules/.bin/npx
49sprocessexec /root/.cache/node/corepack/v1/pnpm/10.28.0/dist/node-gyp-bin/npx
49sprocessexec /app/node_modules/.bin/npx
49sprocessexec /pnpm/npx
49sprocessexec /usr/local/sbin/npx
49sprocessexec /usr/local/bin/npx
49sprocessexec /tmp/ks-detonate-lUmZCu/later/home/.npm/_npx/ac0ed6aa23b37c1e/node_modules/.bin/skills
49sprocessexec /tmp/ks-detonate-lUmZCu/later/home/.npm/_npx/ac0ed6aa23b37c1e/node_modules/.bin/git
49sprocessexec /tmp/ks-detonate-lUmZCu/later/home/work/acme-api/.claude/skills/anti-slop-engineering/node_modules/.bin/git
49sprocessexec /tmp/ks-detonate-lUmZCu/later/home/work/acme-api/.claude/skills/node_modules/.bin/git
49sprocessexec /tmp/ks-detonate-lUmZCu/later/home/work/acme-api/.claude/node_modules/.bin/git
49sprocessexec /tmp/ks-detonate-lUmZCu/later/home/work/acme-api/node_modules/.bin/git
49sprocessexec /tmp/ks-detonate-lUmZCu/later/home/work/node_modules/.bin/git
49sprocessexec /tmp/ks-detonate-lUmZCu/later/home/node_modules/.bin/git
49sprocessexec /tmp/ks-detonate-lUmZCu/later/node_modules/.bin/git
49sprocessexec /tmp/ks-detonate-lUmZCu/node_modules/.bin/git
49sprocessexec /tmp/node_modules/.bin/git
49sprocessexec /node_modules/.bin/git
49sprocessexec /usr/local/lib/node_modules/npm/node_modules/@npmcli/run-script/lib/node-gyp-bin/git
49sprocessexec /app/apps/web/node_modules/.bin/git
49sprocessexec /root/.cache/node/corepack/v1/pnpm/10.28.0/dist/node-gyp-bin/git
49sprocessexec /app/node_modules/.bin/git
49sprocessexec /pnpm/git
49sprocessexec /usr/local/sbin/git
49sprocessexec /usr/local/bin/git
49sprocessexec /usr/sbin/git
49sprocessexec /usr/bin/git
49sprocessexec /usr/lib/git-core/git
49sprocessexec /usr/lib/git-core/git-remote-https
49sprocessexec /usr/lib/git-core/git-submodule
49sprocessexec /usr/bin/basename
49sprocessexec /usr/bin/sed
49sprocessexec /usr/lib/git-core/git-sh-i18n--envsubst
49sprocessexec /usr/bin/uname

Static findings

HIGH
Credential pass-through configurationscripts/styleseed_guard.py:762 · Credential pass-through configuration — agent relays sensitive credentialspassFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
AST02
MEDIUM
npx invocation of non-well-known packageinstall.sh:114 · npx invocation of non-well-known package — may execute untrusted codeecho " • CLI triage: npx anti-slop-engineering --base HEAD"Fix: Pin versions and sources; vendor anything fetched at install time.
AST06
CRITICAL
Pipe-to-shell patterninstall.sh:21 · Pipe-to-shell pattern — downloads and immediately executes remote code# Determine source directory (local clone or fresh clone via curl | bash)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST06
MEDIUM
npx invocation of non-well-known packageSKILL.md:50 · npx invocation of non-well-known package — may execute untrusted code….4x 1h/5m for paging; 6.0x 6h/30m for ticketing). Audit telemetry records with `npx anti-slop-engineering observability audit <record.json> [--source <file>] --json`. 26. **Repo Memory …Fix: Pin versions and sources; vendor anything fetched at install time.
AST06
MEDIUM
File permission modification commandinstall.sh:48 · File permission modification command — agent changes file ownership/permissionschmod +x "$dest/scripts/decision_guard.py" 2>/dev/null || trueFix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.
AST05
HIGH
Access to sensitive file pathsscripts/forensic_hunter.py:427 · Access to sensitive file paths — SSH keys, AWS credentials, env files, or system filesr"(?i)(?:process\.env\.[A-Z0-9_]+|os\.getenv\([^)]+\))\s*(?:\|\||\?\?|,)\s*['\"](?:secret|password|admin|default|changeme|123456|dev)"Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
AST05
MEDIUM
File permission modification commandinstall.sh:47 · File permission modification command — agent changes file ownership/permissionschmod +x "$dest/scripts/sre_guard.py" 2>/dev/null || trueFix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.
AST05
MEDIUM
Python subprocess execution detectedscripts/attention_guard.py:427 · Python subprocess execution detectedproc = subprocess.run(cmd, cwd=repo_root, capture_output=True, text=True, check=False)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
MEDIUM
Python subprocess execution detectedscripts/ast_slop_guard.py:178 · Python subprocess execution detectedres = subprocess.run(cmd, capture_output=True, text=True)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
MEDIUM
File permission modification commandinstall.sh:46 · File permission modification command — agent changes file ownership/permissionschmod +x "$dest/scripts/diff_guard.py" 2>/dev/null || trueFix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.
AST05
MEDIUM
File permission modification commandinstall.sh:49 · File permission modification command — agent changes file ownership/permissionschmod +x "$dest/scripts/root_fix_guard.py" 2>/dev/null || trueFix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.
AST05
MEDIUM
npx invocation of non-well-known packageSKILL.md:47 · npx invocation of non-well-known package — may execute untrusted code…erministic machine codes and remediation guidance. Audit contract records with `npx anti-slop-engineering contract audit <record.json> --json`. 23. **UI Craftsmanship, Copywriting & WCA…Fix: Pin versions and sources; vendor anything fetched at install time.
AST06
MEDIUM
File permission modification commandinstall.sh:45 · File permission modification command — agent changes file ownership/permissionschmod +x "$dest/bin/cli.js" 2>/dev/null || trueFix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.
AST05
MEDIUM
npx invocation of non-well-known packagebin/cli.js:185 · npx invocation of non-well-known package — may execute untrusted codenpx anti-slop-engineering [command] [options]Fix: Pin versions and sources; vendor anything fetched at install time.
AST06
MEDIUM
Remote installer piped to shellinstall.sh:21 · Remote installer piped to shell# Determine source directory (local clone or fresh clone via curl | bash)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST07
MEDIUM
npx invocation of non-well-known packageSKILL.md:49 · npx invocation of non-well-known package — may execute untrusted code…ing tabindex for composite controls, and ARIA live regions. Audit records with `npx anti-slop-engineering apple-craft audit <record.json> --json`. 25. **Observability & SLO Architect (G…Fix: Pin versions and sources; vendor anything fetched at install time.
AST06
MEDIUM
npx invocation of non-well-known packagebin/postinstall.js:34 · npx invocation of non-well-known package — may execute untrusted codelog("Tip: Run 'npx skills add imMamdouhaboammar/anti-slop-engineering' to connect manually.");Fix: Pin versions and sources; vendor anything fetched at install time.
AST06
MEDIUM
Python subprocess execution detectedscripts/audit_runner.py:81 · Python subprocess execution detectedproc = subprocess.run(cmd, capture_output=True, text=True, timeout=60)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
MEDIUM
Python subprocess execution detectedscripts/ast_slop_guard.py:173 · Python subprocess execution detectedres = subprocess.run(cmd, capture_output=True, text=True, check=True)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
MEDIUM
Python subprocess execution detectedscripts/bump_version.py:270 · Python subprocess execution detectedsubprocess.run(["git", "-C", args.repo, "add", "-A"], check=False)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
MEDIUM
Python subprocess execution detectedscripts/forensic_hunter.py:562 · Python subprocess execution detectedproc = subprocess.run(cmd, capture_output=True, text=True, check=False)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
MEDIUM
Python subprocess execution detectedscripts/tagore_guard.py:675 · Python subprocess execution detectedres = subprocess.run(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True, check=True)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
MEDIUM
Python subprocess execution detectedscripts/build_plugin_release.py:73 · Python subprocess execution detectedproc = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
MEDIUM
Python subprocess execution detectedscripts/invariant_steward_guard.py:418 · Python subprocess execution detectedname_proc = subprocess.run(["git", "diff", "--name-only", base], capture_output=True, text=True, check=False)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
MEDIUM
Python subprocess execution detectedscripts/comment_budget_guard.py:254 · Python subprocess execution detectedproc = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
MEDIUM
Python subprocess execution detectedscripts/demock_guard.py:71 · Python subprocess execution detectedres = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
MEDIUM
Python subprocess execution detectedscripts/pr_boundary_guard.py:70 · Python subprocess execution detectedproc = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
MEDIUM
Python subprocess execution detectedscripts/root_fix_guard.py:146 · Python subprocess execution detectedresult = subprocess.run(["git", "-C", str(repo), *git_args], capture_output=True, check=False)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
MEDIUM
Python subprocess execution detectedscripts/bump_version.py:182 · Python subprocess execution detectedsubprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
MEDIUM
Python subprocess execution detectedscripts/bump_version.py:275 · Python subprocess execution detectedsubprocess.run(["git", "-C", args.repo, "tag", "-a", f"v{ver}", "-m", f"Release v{ver}"], check=False)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
MEDIUM
Python subprocess execution detectedscripts/sre_guard.py:116 · Python subprocess execution detectedp = subprocess.run(['git', '-C', str(repo), *args], capture_output=True, text=True)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
MEDIUM
Python subprocess execution detectedscripts/comment_budget_guard.py:259 · Python subprocess execution detectedproc = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
MEDIUM
Python subprocess execution detectedscripts/bump_version.py:271 · Python subprocess execution detectedsubprocess.run(["git", "-C", args.repo, "commit", "-m", f"chore(release): v{ver}"], check=False)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
MEDIUM
Python subprocess execution detectedscripts/diff_guard.py:78 · Python subprocess execution detectedexists = subprocess.run(['git', '-C', str(repo), 'cat-file', '-e', f'{base}:{path}'], capture_output=True).returncode == 0Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
MEDIUM
Process kill commandscripts/rollout_guard.py:299 · Process kill command — agent can terminate processes# 2. Hardcoded feature flags without kill switch or expirationFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.
AST05
MEDIUM
Python subprocess execution detectedscripts/invariant_steward_guard.py:415 · Python subprocess execution detectedproc = subprocess.run(cmd, capture_output=True, text=True, check=False)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
MEDIUM
Python subprocess execution detectedscripts/diff_guard.py:64 · Python subprocess execution detectedp = subprocess.run(['git', '-C', str(repo), *args], capture_output=True)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
MEDIUM
Python subprocess execution detectedscripts/diff_guard.py:87 · Python subprocess execution detectedexists = subprocess.run(['git', '-C', str(repo), 'cat-file', '-e', f'{base}:{path}'], capture_output=True).returncode == 0Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
AST05
LOW
Instructs the agent to modify its persistent memory or instruction filesbin/cli.js:521 · Instructs the agent to modify its persistent memory or instruction files · informational: not an instruction file2. Update SKILL.md & AGENTS.md with concise agent directivesFix: Remove the text that addresses the agent rather than the reader; describe behavior, do not instruct.
AST01

Cost to the agent

Instructions loaded
≈10,172 tok
1 file · 80 in bundle

Tokens estimated at four characters each. Skills load their instruction text when triggered; the figure is what that costs.

Known vulnerabilities

No advisories in OSV for anti-slop-engineering@1.7.0 as of 2d ago. This is the package itself, not its dependencies.

What would make this Verified

55 points to 80 · weights: behavior 45%, static 25%, prompt 15%, publisher 15%

An override rule (credential_read_plus_egress) caps this verdict regardless of the score. The first item below has to go before anything else counts.

  1. Reads credential files≈ +27 on the totalThe sandbox saw reads under ~/.ssh, ~/.aws, ~/.npmrc, ~/.config or similar. Read only files inside the project, and only the ones the task needs.
  2. Contacts a host you did not declare≈ +23 on the totalList every host you talk to in SKILL.md frontmatter (`network: [api.example.com]`), or stop contacting the ones you cannot justify.
  3. Pipe-to-shell pattern≈ +9 on the totalBuild commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
  4. Unclaimed publisher≈ +8 on the totalClaim immamdouhaboammar: a verified publisher gets +50 on publisher trust. It is free and usually instant with GitHub sign-in.
  5. Touches files outside the project≈ +7 on the totalKeep reads and writes inside the working directory, or declare the exact paths in `filesystem:` and explain why in the README.
  6. Credential pass-through configuration≈ +4 on the totalStop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
Publish a new version to npm, then queue it here. Not your skill? Claim the handle to get verdict changes by email.Claim immamdouhaboammarPropose a patch to the maintainer