AI Security Review
scanned 3h ago · by lpm-firewall-aiLPM treats this as warn-only first-party agent extension lifecycle risk. Install-time behavior mutates Claude Code settings, but only to remove stale package-owned hooks. User-invoked install can configure package-owned Claude hooks and statusline, which is agent extension lifecycle risk rather than confirmed malware.
Decision evidence
public snapshot- package.json defines postinstall running build/src/cli/features/claude-code/hooks/cleanupLegacyHooks.js
- cleanupLegacyHooks.js auto-executes and rewrites ~/.claude/settings.json if stale nori-skillsets hooks are present
- hooks/loader.js can overwrite settings.hooks with package Claude Code hooks during user-run install
- statusline/loader.js can copy nori-statusline.sh into ~/.claude and set settings.statusLine during user-run install
- installTracking.js sends opt-out analytics to noriskillsets.dev on CLI launch/install flows
- Postinstall cleanup only removes commands containing nori-skillsets and fixed removed hook filenames
- No credential harvesting or arbitrary file exfiltration found in inspected lifecycle script
- Network endpoints are package-aligned registry/auth/analytics services
- child_process findings were in tests or explicit watch command daemon setup, not install-time payload execution
- Firebase apiKey appears to be standard public client config, not a private secret
Source & flagged code
38 flagged · loading sourcePackage defines install-time lifecycle scripts.
package.jsonView on unpkgInstall-time lifecycle script is not statically allowlisted and needs review.
package.jsonView on unpkgPackage contains a high-severity secret pattern.
build/src/providers/firebase.jsView on unpkg · L4Google API key in build/src/providers/firebase.js
build/src/providers/firebase.jsView on unpkg · L4Package source references child process execution.
build/src/cli/features/claude-code/statusline/loader.test.jsView on unpkg · L47Package source invokes a package manager install command at runtime.
build/src/cli/features/claude-code/statusline/loader.test.jsView on unpkg · L280Package source references dynamic require/import behavior.
build/src/cli/features/claude-code/hooks/config/context-usage-warning.jsView on unpkg · L1Package source references weak cryptographic algorithms.
build/src/cli/commands/watch/watch.jsView on unpkg · L6Install-time source drops package-supplied AI-agent/MCP control files or instructions.
build/src/cli/features/claude-code/hooks/cleanupLegacyHooks.jsView on unpkg · L3Package ships non-JavaScript build or shell helper files.
build/src/cli/features/claude-code/statusline/config/nori-statusline.shView on unpkgHardcoded password in build/src/cli/features/configLoader.test.js
build/src/cli/features/configLoader.test.jsView on unpkg · L179Hardcoded password in build/src/cli/features/configLoader.test.js
build/src/cli/features/configLoader.test.jsView on unpkg · L264Hardcoded password in build/src/cli/config.test.js
build/src/cli/config.test.jsView on unpkg · L71Hardcoded password in build/src/cli/config.test.js
build/src/cli/config.test.jsView on unpkg · L79Hardcoded password in build/src/cli/config.test.js
build/src/cli/config.test.jsView on unpkg · L91Hardcoded password in build/src/cli/config.test.js
build/src/cli/config.test.jsView on unpkg · L98Hardcoded password in build/src/cli/config.test.js
build/src/cli/config.test.jsView on unpkg · L185Hardcoded password in build/src/cli/config.test.js
build/src/cli/config.test.jsView on unpkg · L323Hardcoded password in build/src/cli/config.test.js
build/src/cli/config.test.jsView on unpkg · L350Hardcoded password in build/src/cli/config.test.js
build/src/cli/config.test.jsView on unpkg · L625Hardcoded password in build/src/cli/prompts/flows/login.test.js
build/src/cli/prompts/flows/login.test.jsView on unpkg · L58Hardcoded password in build/src/cli/commands/login/login.test.js
build/src/cli/commands/login/login.test.jsView on unpkg · L125Hardcoded password in build/src/cli/commands/login/login.test.js
build/src/cli/commands/login/login.test.jsView on unpkg · L189Hardcoded password in build/src/cli/commands/login/login.test.js
build/src/cli/commands/login/login.test.jsView on unpkg · L211Hardcoded password in build/src/cli/commands/login/login.test.js
build/src/cli/commands/login/login.test.jsView on unpkg · L250Hardcoded password in build/src/cli/commands/login/login.test.js
build/src/cli/commands/login/login.test.jsView on unpkg · L300Hardcoded password in build/src/cli/commands/login/login.test.js
build/src/cli/commands/login/login.test.jsView on unpkg · L345Hardcoded password in build/src/cli/commands/login/login.test.js
build/src/cli/commands/login/login.test.jsView on unpkg · L388Hardcoded password in build/src/cli/commands/login/login.test.js
build/src/cli/commands/login/login.test.jsView on unpkg · L449Google API key in build/src/api/refreshToken.js
build/src/api/refreshToken.jsView on unpkg · L14Hardcoded password in build/src/api/base.test.js
build/src/api/base.test.jsView on unpkg · L38Hardcoded password in build/src/api/base.test.js
build/src/api/base.test.jsView on unpkg · L56Hardcoded password in build/src/api/base.test.js
build/src/api/base.test.jsView on unpkg · L98Hardcoded password in build/src/api/base.test.js
build/src/api/base.test.jsView on unpkg · L105Hardcoded password in build/src/api/base.test.js
build/src/api/base.test.jsView on unpkg · L170Hardcoded password in build/src/api/base.test.js
build/src/api/base.test.jsView on unpkg · L182Hardcoded password in build/src/api/base.test.js
build/src/api/base.test.jsView on unpkg · L226Hardcoded password in build/src/api/base.test.js
build/src/api/base.test.jsView on unpkg · L240