Static Scan Results
scanned 4h ago · by rust-scannerStatic analysis flagged 11 finding(s) at 86.0% confidence. This version is warn-only unless an AI or security-team review confirms malicious behavior.
Static reason
High-risk behavior combination matched malicious policy.
Decision evidence
public snapshotBehavioral surface
EnvironmentVarsFilesystemNetwork
HighEntropyStringsUrlStrings
NoLicense
Source & flagged code
3 flagged · loading sourcepackage.jsonView file
•scripts.postinstall = node scripts/link-skills.mjs
High
Install Time Lifecycle Scripts
Package defines install-time lifecycle scripts.
package.jsonView on unpkgplugins/linear/skills/linear/bin/linear.mjsView file
11// Recommended: add `export LINEAR_API_KEY=lin_api_xxx` to ~/.zshenv (zsh) or
L12: // ~/.bashrc (bash) so it's available in every shell — including the
L13: // non-interactive ones spawned by Claude Code.
...
L23: import { createInterface } from "node:readline/promises";
L24: import { stdin as input, stdout as output } from "node:process";
L25:
L26: const API_URL = "https://api.linear.app/graphql";
L27: const API_KEY = process.env.LINEAR_API_KEY;
L28: const WORKSPACE_FILE =
L29: process.env.LINCTL_WORKSPACE_FILE ||
L30: join(homedir(), ".config", "linctl", "workspace.json");
L31:
Medium
Install Persistence
Source writes installer persistence such as shell profile or service configuration.
plugins/linear/skills/linear/bin/linear.mjsView on unpkg · L11scripts/link-skills.mjsView file
5Install-time AI-agent control hijack evidence:
L5: //
L6: // skills -> .claude/skills/<name> (Claude Code; a dir with SKILL.md)
L7: // skills -> .agents/skills/<name> (Codex; same SKILL.md format)
L8: // commands -> .claude/commands/<rel>.md (Claude Code only; a .md under commands/)
L9: //
...
L28: const UNLINK = process.argv.includes('--unlink')
L29: const SKIP_DIRS = new Set(['node_modules', '.git', '.claude'])
L30:
...
L44: // or the workspace root in a monorepo, which is exactly where the shared
L45: // .claude directory should live. Fall back to climbing out of node_modules.
L46: function resolveProjectRoot() {
...
L181: // Nothing to link: only tidy up previously-created links (if the dir exists),
Payload evidence from plugins/contribute-skill/skills/contribute-skill/SKILL.md:
L9: You are turning something learned in this session into a PR against
L10: https://github.com/gallop-systems/agent-skills, the public repo behind the
L11: installed skills.
Critical
Ai Agent Control Hijack
Install-time source drops package-supplied AI-agent/MCP control files or instructions.
scripts/link-skills.mjsView on unpkg · L5Findings
1 Critical1 High4 Medium5 Low
CriticalAi Agent Control Hijackscripts/link-skills.mjs
HighInstall Time Lifecycle Scriptspackage.json
MediumNetwork
MediumEnvironment Vars
MediumInstall Persistenceplugins/linear/skills/linear/bin/linear.mjs
MediumStructural Risk Force Deep Review
LowScripts Present
LowFilesystem
LowHigh Entropy Strings
LowUrl Strings
LowNo License