elliot@0.7.3
CAUTION· static onlyPublisher claims: "Enables AI agents and developers to independently verify code and documentation claims against the repository, producing evidence-backed audit reports and pull-request checks." Observed in sandbox: static analysis only — behavior not yet observed.
Coverage
Static only; nothing was run yet.The label rests on the code, the instruction files and the publisher. The honeypot run replaces this verdict when it completes.
Before you give it your token
- It will ask for
ELLIOT_REVIEW_TOKENELLIOT_SIGNING_KEYGITHUB_TOKENConfiguration, not credentials: ELLIOT_ACTION_PATH, ELLIOT_ALLOW_PRIVATE_URLS, ELLIOT_DIR, ELLIOT_GITHUB_API, ELLIOT_INIT_HOME, ELLIOT_MODE, ELLIOT_NPM_REGISTRY, ELLIOT_ROLE, ELLIOT_SIGNER_ID, ELLIOT_VERDICT, GITHUB_EVENT_PATH, GITHUB_REPOSITORY, GITHUB_SERVER_URL, WORK- Where it talks to
- no vendor host named in the codeAlso shields.io — not the publisher's domain; check what for before connecting.
- What the honeypot saw
- nothing has run yet
- What we could not test
- everything: the server has not run yet
Run it before you trust it. Nothing has run yet: the code was read, the server was not. `vet-skills try` runs this exact version in the honeypot in about a minute.
Never paste a credential into a chat, a ticket or a report, including ours. How the guard holds it.
Is [email protected] safe to install?
KillerSkills analysed it statically (a sandbox run is pending) on 2026-11-11 and scored it 63/100 (Caution). It is not known to be malicious, but it has behaviour or code a security policy should decide on before install. Summary: static analysis only — behavior not yet observed.
Behavior trace
Queued for honeypot run · static analysis onlyThis version has not been detonated yet. The score above counts behavior as unknown (50/100), so it cannot read Verified until the honeypot run completes and replaces this verdict.
Static findings
fix = subprocess.run(["git", "-C", f"/home/claude/elliot-runs/done-bench/src/{t['repo']}", "archive", t["commit"], *t["hidden_tests"]], capture_output=True, check=True)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.log("No coding agent found. Run `npx elliot-mcp init --claude`, `--cursor`, `--codex` or `--all`.");Fix: Pin versions and sources; vendor anything fetched at install time.RUN apt-get update && apt-get install -y --no-install-recommends git bubblewrap && rm -rf /var/lib/apt/lists/*Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.sudo apt-get updateFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.sudo apt-get install --yes bubblewrapFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.// `npx elliot-mcp init`: register Elliot in the coding agents found on this machineFix: Pin versions and sources; vendor anything fetched at install time.…n agent to verify its own completion claims. Users may also use the documented `npx -y github:EmanueleCell4/elliot-mcp init` setup for supported environments. ## Age…Fix: Pin versions and sources; vendor anything fetched at install time.r = subprocess.run([sys.executable, "-m", "pytest", "-q", "-p", "no:cacheprovider", *t["hidden_tests"]], cwd=c, capture_output=True, text=True, timeout=300, env=env)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.subprocess.run(["tar", "-x", "-C", c], input=fix.stdout, check=True)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.subprocess.run(["tar", "-x", "-C", d], input=a.stdout, check=True)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.a = subprocess.run(["git", "-C", f"/home/claude/elliot-runs/done-bench/src/{t['repo']}", "archive", t["commit"] + "^"], capture_output=True, check=True)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.for (const url of ["http://127.0.0.1:1/", "http://localhost/", "http://169.254.169.254/latest/meta-data/", "http://10.0.0.1/", "http://[::1]/"]) {Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.subprocess.run(["git", "-C", dst, "-c", "user.name=bench", "-c", "user.email=b@b", "commit", "-qam", "bench mutations"], check=False)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.// Some hosts kill the sandbox wrapper before it can report an exit code.Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.for (const url of ["http://127.0.0.1:1/", "http://localhost/", "http://169.254.169.254/latest/meta-data/", "http://10.0.0.1/", "http://[::1]/"]) {Fix: Replace encoded or assembled strings with plain literals and remove undeclared network calls.return subprocess.run(cmd, cwd=cwd, capture_output=True, text=True, timeout=timeout, env=env)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.subprocess.run(["tar", "-x", "-C", dst], input=a.stdout, check=True)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.g = lambda *x: subprocess.run(["git", *x], cwd=d, check=True, capture_output=True)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.catch { console.log(JSON.stringify({ systemMessage: "ELLIOT: invalid hook input; no verification was performed." })); process.exit(0); }Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.// The process group inherits the sandbox; kill background descendants too.Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.a = subprocess.run(["git", "-C", repo, "archive", rev], capture_output=True, check=True)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.Cost to the agent
Tokens estimated at four characters each. Skills load their instruction text when triggered; the figure is what that costs.
Known vulnerabilities
Vulnerability advisories (OSV) cover npm and PyPI packages; this registry has no advisory database.
What would make this Verified
17 points to 80 · weights: behavior 45%, static 25%, prompt 15%, publisher 15%- Unclaimed publisher≈ +8 on the totalClaim actions-marketplace-validations: a verified publisher gets +50 on publisher trust. It is free and usually instant with GitHub sign-in.
- Python subprocess execution detected≈ +2 on the totalBuild commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
- npx invocation of non-well-known package≈ +2 on the totalPin versions and sources; vendor anything fetched at install time.
- Destructive file system command detected≈ +2 on the totalBuild commands from fixed arguments; do not interpolate untrusted strings into a shell.
- Privileged sudo command≈ +2 on the totalBuild commands from fixed arguments; do not interpolate untrusted strings into a shell.
- URL to the cloud instance metadata address≈ +2 on the totalStop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.