@ai-plugins-cc/ai
Umbrella Claude Code plugin: dispatches /ai:review|rescue|gater across codex, gemini, grok and adds /ai:compare for fan-out.
Supply chain provenance
Status for the latest visible version.
Without SLSA provenance there is no cryptographic link between this tarball and the public source — the axios compromise (March 2026) relied on exactly this gap.
Maintainers
Accepted risks
Findings the reviewer chose to accept rather than block on.
| Source | Rule | Reason | Accepted by | When |
|---|---|---|---|---|
| typosquat | typosquat.levenshtein:hapi | AI (typosquat): Scoped package @ai-plugins-cc/ai; Levenshtein match to 'hapi' is a false positive with no impersonation intent. | ai | |
| typosquat | typosquat.levenshtein:pg | AI (typosquat): Scoped package @ai-plugins-cc/ai; Levenshtein match to 'pg' is a false positive with no impersonation intent. | ai | |
| typosquat | typosquat.levenshtein:qs | AI (typosquat): Scoped package @ai-plugins-cc/ai; Levenshtein match to 'qs' is a false positive with no impersonation intent. | ai | |
| typosquat | typosquat.levenshtein:joi | AI (typosquat): Scoped package @ai-plugins-cc/ai; Levenshtein match to 'joi' is a false positive with no impersonation intent. | ai | |
| typosquat | typosquat.levenshtein:ajv | AI (typosquat): Scoped package @ai-plugins-cc/ai; Levenshtein match to 'ajv' is a false positive with no impersonation intent. | ai | |
| semgrep | semgrep:env-spread | AI (semgrep): env-spread is behind an explicit unsafeRawEnv opt-in flag; intentional escape hatch, not accidental secret leakage. | ai | |
| phantom-deps | phantom-dep:@ai-plugins-cc/core | AI (phantom-deps): Same-org scoped dep; likely consumed transitively or via monorepo resolution, stable false positive. | ai | |
| phantom-deps | phantom-dep:@ai-plugins-cc/shared-prompts | AI (phantom-deps): Same-org scoped dep; likely consumed transitively or via monorepo resolution, stable false positive. | ai |
v0.2.1
2 findingsSpreading entire process.env into an object — may capture all secrets Source: https://github.com/dysfunc/ai-plugins-cc/blob/96bb869df351494ada19ffe3391a016df6077d6e/scripts/lib/dispatch.mjs#L252 250 | // the spawnInHouseCompanion fixtures, which spawn fake-companion.mjs). 251 | const env = options.unsafeRawEnv > 252 | ? { ...process.env, ...(options.env ?? {}) } 253 | : filteredEnvForProvider(provider.id, options.env ?? {}); 254 |
Package was published without Sigstore provenance. Only ~12% of npm packages have provenance, so this is common but not ideal.
v0.2.0
2 findingsSpreading entire process.env into an object — may capture all secrets Source: https://github.com/dysfunc/ai-plugins-cc/blob/175fa81430f60cfdf16be083249ace1208df7a70/scripts/lib/dispatch.mjs#L252 250 | // the spawnInHouseCompanion fixtures, which spawn fake-companion.mjs). 251 | const env = options.unsafeRawEnv > 252 | ? { ...process.env, ...(options.env ?? {}) } 253 | : filteredEnvForProvider(provider.id, options.env ?? {}); 254 |
Package was published without Sigstore provenance. Only ~12% of npm packages have provenance, so this is common but not ideal.
v0.1.0
2 findingsSpreading entire process.env into an object — may capture all secrets Source: https://github.com/dysfunc/ai-plugins-cc/blob/468b26667f7a9e2d4b0185807d6bb903bf7b99fd/scripts/lib/dispatch.mjs#L252 250 | // the spawnInHouseCompanion fixtures, which spawn fake-companion.mjs). 251 | const env = options.unsafeRawEnv > 252 | ? { ...process.env, ...(options.env ?? {}) } 253 | : filteredEnvForProvider(provider.id, options.env ?? {}); 254 |
Package was published without Sigstore provenance. Only ~12% of npm packages have provenance, so this is common but not ideal.