@cleocode/adapters
Unified provider adapters for CLEO (Claude Code, OpenCode, Cursor)
Supply chain provenance
Status for the latest visible version.
Maintainers
Accepted risks
Findings the reviewer chose to accept rather than block on.
| Source | Rule | Reason | Accepted by | When |
|---|---|---|---|---|
| semgrep | semgrep:env-spread | AI (semgrep): Intentional env-merge pattern in a spawn wrapper for CLI adapters; not credential exfiltration. | ai | |
| provenance | publisher-changed | AI (provenance): Publisher changed to GitHub Actions as part of a legitimate CI/CD migration; SLSA provenance attestation confirms integrity. Repo URL still points to original maintainer's org. | ai | |
| semgrep | semgrep:etc-passwd-access | AI (semgrep): All instances are in test files asserting /etc/passwd is DENIED by path allowlist logic — security tests, not credential harvesting. | ai | |
| semgrep | semgrep:silent-process-exec | AI (semgrep): Spawns the 'opencode' CLI tool, which is a documented provider target of this adapter package. Core functionality, not a reverse shell or miner. | ai | |
| semgrep | semgrep:silent-process-exec-var | AI (semgrep): Same spawn call as silent-process-exec — spawning 'opencode' CLI is the intended adapter functionality for this package. | ai |
Versions (showing 100 of 291)
v2026.5.35
2 findingsSpreading entire process.env into an object — may capture all secrets 124 | const optionsEnv = context.options?.env as Record<string, string> | undefined; 125 | if (optionsEnv !== undefined && Object.keys(optionsEnv).length > 0) { > 126 | spawnOpts.env = { ...process.env, ...optionsEnv }; 127 | } 128 |
Published via CI/CD with Sigstore attestation (predicate: https://slsa.dev/provenance/v1). This is the strongest supply chain integrity signal.
v2026.5.34
2 findingsSpreading entire process.env into an object — may capture all secrets 124 | const optionsEnv = context.options?.env as Record<string, string> | undefined; 125 | if (optionsEnv !== undefined && Object.keys(optionsEnv).length > 0) { > 126 | spawnOpts.env = { ...process.env, ...optionsEnv }; 127 | } 128 |
Published via CI/CD with Sigstore attestation (predicate: https://slsa.dev/provenance/v1). This is the strongest supply chain integrity signal.
v2026.5.33
2 findingsSpreading entire process.env into an object — may capture all secrets 124 | const optionsEnv = context.options?.env as Record<string, string> | undefined; 125 | if (optionsEnv !== undefined && Object.keys(optionsEnv).length > 0) { > 126 | spawnOpts.env = { ...process.env, ...optionsEnv }; 127 | } 128 |
Published via CI/CD with Sigstore attestation (predicate: https://slsa.dev/provenance/v1). This is the strongest supply chain integrity signal.
v2026.5.29
2 findingsSpreading entire process.env into an object — may capture all secrets 124 | const optionsEnv = context.options?.env as Record<string, string> | undefined; 125 | if (optionsEnv !== undefined && Object.keys(optionsEnv).length > 0) { > 126 | spawnOpts.env = { ...process.env, ...optionsEnv }; 127 | } 128 |
Published via CI/CD with Sigstore attestation (predicate: https://slsa.dev/provenance/v1). This is the strongest supply chain integrity signal.
v2026.5.28
2 findingsSpreading entire process.env into an object — may capture all secrets 124 | const optionsEnv = context.options?.env as Record<string, string> | undefined; 125 | if (optionsEnv !== undefined && Object.keys(optionsEnv).length > 0) { > 126 | spawnOpts.env = { ...process.env, ...optionsEnv }; 127 | } 128 |
Published via CI/CD with Sigstore attestation (predicate: https://slsa.dev/provenance/v1). This is the strongest supply chain integrity signal.
v2026.5.27
2 findingsSpreading entire process.env into an object — may capture all secrets 124 | const optionsEnv = context.options?.env as Record<string, string> | undefined; 125 | if (optionsEnv !== undefined && Object.keys(optionsEnv).length > 0) { > 126 | spawnOpts.env = { ...process.env, ...optionsEnv }; 127 | } 128 |
Published via CI/CD with Sigstore attestation (predicate: https://slsa.dev/provenance/v1). This is the strongest supply chain integrity signal.
v2026.5.26
2 findingsSpreading entire process.env into an object — may capture all secrets 124 | const optionsEnv = context.options?.env as Record<string, string> | undefined; 125 | if (optionsEnv !== undefined && Object.keys(optionsEnv).length > 0) { > 126 | spawnOpts.env = { ...process.env, ...optionsEnv }; 127 | } 128 |
Published via CI/CD with Sigstore attestation (predicate: https://slsa.dev/provenance/v1). This is the strongest supply chain integrity signal.
v2026.5.25
2 findingsSpreading entire process.env into an object — may capture all secrets 124 | const optionsEnv = context.options?.env as Record<string, string> | undefined; 125 | if (optionsEnv !== undefined && Object.keys(optionsEnv).length > 0) { > 126 | spawnOpts.env = { ...process.env, ...optionsEnv }; 127 | } 128 |
Published via CI/CD with Sigstore attestation (predicate: https://slsa.dev/provenance/v1). This is the strongest supply chain integrity signal.
v2026.5.24
2 findingsSpreading entire process.env into an object — may capture all secrets 124 | const optionsEnv = context.options?.env as Record<string, string> | undefined; 125 | if (optionsEnv !== undefined && Object.keys(optionsEnv).length > 0) { > 126 | spawnOpts.env = { ...process.env, ...optionsEnv }; 127 | } 128 |
Published via CI/CD with Sigstore attestation (predicate: https://slsa.dev/provenance/v1). This is the strongest supply chain integrity signal.
v2026.5.23
2 findingsSpreading entire process.env into an object — may capture all secrets 124 | const optionsEnv = context.options?.env as Record<string, string> | undefined; 125 | if (optionsEnv !== undefined && Object.keys(optionsEnv).length > 0) { > 126 | spawnOpts.env = { ...process.env, ...optionsEnv }; 127 | } 128 |
Published via CI/CD with Sigstore attestation (predicate: https://slsa.dev/provenance/v1). This is the strongest supply chain integrity signal.
v2026.5.22
2 findingsSpreading entire process.env into an object — may capture all secrets 124 | const optionsEnv = context.options?.env as Record<string, string> | undefined; 125 | if (optionsEnv !== undefined && Object.keys(optionsEnv).length > 0) { > 126 | spawnOpts.env = { ...process.env, ...optionsEnv }; 127 | } 128 |
Published via CI/CD with Sigstore attestation (predicate: https://slsa.dev/provenance/v1). This is the strongest supply chain integrity signal.
v2026.5.20
2 findingsSpreading entire process.env into an object — may capture all secrets 124 | const optionsEnv = context.options?.env as Record<string, string> | undefined; 125 | if (optionsEnv !== undefined && Object.keys(optionsEnv).length > 0) { > 126 | spawnOpts.env = { ...process.env, ...optionsEnv }; 127 | } 128 |
Published via CI/CD with Sigstore attestation (predicate: https://slsa.dev/provenance/v1). This is the strongest supply chain integrity signal.
v2026.5.19
2 findingsSpreading entire process.env into an object — may capture all secrets 124 | const optionsEnv = context.options?.env as Record<string, string> | undefined; 125 | if (optionsEnv !== undefined && Object.keys(optionsEnv).length > 0) { > 126 | spawnOpts.env = { ...process.env, ...optionsEnv }; 127 | } 128 |
Published via CI/CD with Sigstore attestation (predicate: https://slsa.dev/provenance/v1). This is the strongest supply chain integrity signal.
v2026.5.18
2 findingsSpreading entire process.env into an object — may capture all secrets 124 | const optionsEnv = context.options?.env as Record<string, string> | undefined; 125 | if (optionsEnv !== undefined && Object.keys(optionsEnv).length > 0) { > 126 | spawnOpts.env = { ...process.env, ...optionsEnv }; 127 | } 128 |
Published via CI/CD with Sigstore attestation (predicate: https://slsa.dev/provenance/v1). This is the strongest supply chain integrity signal.
v2026.5.17
2 findingsSpreading entire process.env into an object — may capture all secrets 124 | const optionsEnv = context.options?.env as Record<string, string> | undefined; 125 | if (optionsEnv !== undefined && Object.keys(optionsEnv).length > 0) { > 126 | spawnOpts.env = { ...process.env, ...optionsEnv }; 127 | } 128 |
Published via CI/CD with Sigstore attestation (predicate: https://slsa.dev/provenance/v1). This is the strongest supply chain integrity signal.
v2026.5.16
1 findingPublished via CI/CD with Sigstore attestation (predicate: https://slsa.dev/provenance/v1). This is the strongest supply chain integrity signal.
v2026.5.15
1 findingPublished via CI/CD with Sigstore attestation (predicate: https://slsa.dev/provenance/v1). This is the strongest supply chain integrity signal.
v2026.5.14
1 findingPublished via CI/CD with Sigstore attestation (predicate: https://slsa.dev/provenance/v1). This is the strongest supply chain integrity signal.
v2026.5.13
1 findingPublished via CI/CD with Sigstore attestation (predicate: https://slsa.dev/provenance/v1). This is the strongest supply chain integrity signal.
v2026.5.11
1 findingPublished via CI/CD with Sigstore attestation (predicate: https://slsa.dev/provenance/v1). This is the strongest supply chain integrity signal.
v2026.5.10
1 findingPublished via CI/CD with Sigstore attestation (predicate: https://slsa.dev/provenance/v1). This is the strongest supply chain integrity signal.
v2026.5.9
1 findingPublished via CI/CD with Sigstore attestation (predicate: https://slsa.dev/provenance/v1). This is the strongest supply chain integrity signal.
v2026.5.8
1 findingPublished via CI/CD with Sigstore attestation (predicate: https://slsa.dev/provenance/v1). This is the strongest supply chain integrity signal.
v2026.5.7
1 findingPublished via CI/CD with Sigstore attestation (predicate: https://slsa.dev/provenance/v1). This is the strongest supply chain integrity signal.
v2026.5.6
1 findingPublished via CI/CD with Sigstore attestation (predicate: https://slsa.dev/provenance/v1). This is the strongest supply chain integrity signal.
v2026.5.5
1 findingPublished via CI/CD with Sigstore attestation (predicate: https://slsa.dev/provenance/v1). This is the strongest supply chain integrity signal.
v2026.4.161
1 findingPublished via CI/CD with Sigstore attestation (predicate: https://slsa.dev/provenance/v1). This is the strongest supply chain integrity signal.
v2026.4.158
1 findingPublished via CI/CD with Sigstore attestation (predicate: https://slsa.dev/provenance/v1). This is the strongest supply chain integrity signal.
v2026.4.157
1 findingPublished via CI/CD with Sigstore attestation (predicate: https://slsa.dev/provenance/v1). This is the strongest supply chain integrity signal.
v2026.4.141
1 findingPublished via CI/CD with Sigstore attestation (predicate: https://slsa.dev/provenance/v1). This is the strongest supply chain integrity signal.
v2026.4.139
7 findingsAccessing /etc/passwd or /etc/shadow — credential harvesting on Linux 141 | 142 | it('denies a path not matching any glob', () => { > 143 | expect(isPathAllowed('/etc/passwd', ['/mnt/projects/**'])).toBe(false); 144 | }); 145 |
Accessing /etc/passwd or /etc/shadow — credential harvesting on Linux 173 | const result = await guard.execute({ 174 | agent: {}, > 175 | input: JSON.stringify({ path: '/etc/shadow' }), 176 | context: {}, 177 | });
Accessing /etc/passwd or /etc/shadow — credential harvesting on Linux 177 | }); 178 | expect(result.tripwireTriggered).toBe(true); > 179 | expect((result.outputInfo as Record<string, unknown>).deniedPath).toBe('/etc/shadow'); 180 | }); 181 |
Accessing /etc/passwd or /etc/shadow — credential harvesting on Linux 447 | const result = await provider.spawn({ 448 | taskId: 'T582-guard', > 449 | prompt: JSON.stringify({ path: '/etc/shadow' }), 450 | options: { 451 | allowedGlobs: ['/mnt/projects/**'],
Silent detached process — runs invisibly in the background (reverse shells, miners) 188 | } 189 | > 190 | const child = nodeSpawn( 191 | 'opencode', 192 | [
Silent detached process — runs invisibly in the background (reverse shells, miners) 188 | } 189 | > 190 | const child = nodeSpawn( 191 | 'opencode', 192 | [
Published via CI/CD with Sigstore attestation (predicate: https://slsa.dev/provenance/v1). This is the strongest supply chain integrity signal.
v2026.4.138
7 findingsAccessing /etc/passwd or /etc/shadow — credential harvesting on Linux 141 | 142 | it('denies a path not matching any glob', () => { > 143 | expect(isPathAllowed('/etc/passwd', ['/mnt/projects/**'])).toBe(false); 144 | }); 145 |
Accessing /etc/passwd or /etc/shadow — credential harvesting on Linux 173 | const result = await guard.execute({ 174 | agent: {}, > 175 | input: JSON.stringify({ path: '/etc/shadow' }), 176 | context: {}, 177 | });
Accessing /etc/passwd or /etc/shadow — credential harvesting on Linux 177 | }); 178 | expect(result.tripwireTriggered).toBe(true); > 179 | expect((result.outputInfo as Record<string, unknown>).deniedPath).toBe('/etc/shadow'); 180 | }); 181 |
Accessing /etc/passwd or /etc/shadow — credential harvesting on Linux 447 | const result = await provider.spawn({ 448 | taskId: 'T582-guard', > 449 | prompt: JSON.stringify({ path: '/etc/shadow' }), 450 | options: { 451 | allowedGlobs: ['/mnt/projects/**'],
Silent detached process — runs invisibly in the background (reverse shells, miners) 188 | } 189 | > 190 | const child = nodeSpawn( 191 | 'opencode', 192 | [
Silent detached process — runs invisibly in the background (reverse shells, miners) 188 | } 189 | > 190 | const child = nodeSpawn( 191 | 'opencode', 192 | [
Published via CI/CD with Sigstore attestation (predicate: https://slsa.dev/provenance/v1). This is the strongest supply chain integrity signal.
v2026.4.105
1 findingPublished via CI/CD with Sigstore attestation (predicate: https://slsa.dev/provenance/v1). This is the strongest supply chain integrity signal.
v2026.4.104
1 findingPublished via CI/CD with Sigstore attestation (predicate: https://slsa.dev/provenance/v1). This is the strongest supply chain integrity signal.
v2026.4.103
1 findingPublished via CI/CD with Sigstore attestation (predicate: https://slsa.dev/provenance/v1). This is the strongest supply chain integrity signal.
v2026.4.92
1 findingPublished via CI/CD with Sigstore attestation (predicate: https://slsa.dev/provenance/v1). This is the strongest supply chain integrity signal.
v2026.4.91
1 findingPublished via CI/CD with Sigstore attestation (predicate: https://slsa.dev/provenance/v1). This is the strongest supply chain integrity signal.
v2026.4.88
1 findingPublished via CI/CD with Sigstore attestation (predicate: https://slsa.dev/provenance/v1). This is the strongest supply chain integrity signal.
v2026.4.87
1 findingPublished via CI/CD with Sigstore attestation (predicate: https://slsa.dev/provenance/v1). This is the strongest supply chain integrity signal.
v2026.4.86
1 findingPublished via CI/CD with Sigstore attestation (predicate: https://slsa.dev/provenance/v1). This is the strongest supply chain integrity signal.
v2026.4.85
1 findingPublished via CI/CD with Sigstore attestation (predicate: https://slsa.dev/provenance/v1). This is the strongest supply chain integrity signal.
v2026.4.84
1 findingPublished via CI/CD with Sigstore attestation (predicate: https://slsa.dev/provenance/v1). This is the strongest supply chain integrity signal.
v2026.4.83
1 findingPublished via CI/CD with Sigstore attestation (predicate: https://slsa.dev/provenance/v1). This is the strongest supply chain integrity signal.
v2026.4.82
1 findingPublished via CI/CD with Sigstore attestation (predicate: https://slsa.dev/provenance/v1). This is the strongest supply chain integrity signal.
v2026.4.80
1 findingPublished via CI/CD with Sigstore attestation (predicate: https://slsa.dev/provenance/v1). This is the strongest supply chain integrity signal.
v2026.4.77
1 findingPublished via CI/CD with Sigstore attestation (predicate: https://slsa.dev/provenance/v1). This is the strongest supply chain integrity signal.
v2026.4.76
1 findingPublished via CI/CD with Sigstore attestation (predicate: https://slsa.dev/provenance/v1). This is the strongest supply chain integrity signal.
v2026.4.75
1 findingPublished via CI/CD with Sigstore attestation (predicate: https://slsa.dev/provenance/v1). This is the strongest supply chain integrity signal.
v2026.4.74
1 findingPublished via CI/CD with Sigstore attestation (predicate: https://slsa.dev/provenance/v1). This is the strongest supply chain integrity signal.
v2026.4.73
1 findingPublished via CI/CD with Sigstore attestation (predicate: https://slsa.dev/provenance/v1). This is the strongest supply chain integrity signal.
v2026.4.72
1 findingPublished via CI/CD with Sigstore attestation (predicate: https://slsa.dev/provenance/v1). This is the strongest supply chain integrity signal.
v2026.4.70
1 findingPublished via CI/CD with Sigstore attestation (predicate: https://slsa.dev/provenance/v1). This is the strongest supply chain integrity signal.
v2026.4.69
1 findingPublished via CI/CD with Sigstore attestation (predicate: https://slsa.dev/provenance/v1). This is the strongest supply chain integrity signal.