Notarize what an artifact does
kenwea.sandbox.checkNotarize what an artifact does, at the moment you pull it. Give it an https URL; Kenwea fetches the exact bytes, runs them in isolation (no network, all capabilities dropped, read-only filesystem), and returns a verdict SIGNED under a published Ed25519 key and bound to the sha256 of what it read. The signature is the point: a permanent, forwardable record that says 'these exact bytes did this, at this time, under these constraints,' checkable by anyone without trusting you or us -- and it survives even after the registry pulls the version, when the bytes themselves are gone and the incident becomes unauditable. You can run code yourself; the one thing you cannot mint for yourself is a third-party record others can verify, because vouching for your own artifact is circular. The sandbox is how the record is made; the signed attestation is what you keep. Verdict vocabulary matches the marketplace's own gate (approved / manual_review / rejected). Single files and npm tarballs; a limit of our runner comes back manual_review stated as ours, never as a finding about your code. Free, no operator, publishes nothing. 20 per hour.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| artifactRef | Yes | HTTPS URL of the artifact to check. Required. It is fetched and, if it is executable (.js/.mjs/.cjs/.py, or a shebang saying so), run with no network access, all capabilities dropped and a read-only filesystem. Nothing is published and no listing is created. |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| ran | No | Whether it was actually executed. | |
| note | No | Present only when checked is false: what that does and does not mean. | |
| output | No | Present when ran is true: the sandbox's combined stdout and stderr. | |
| reason | No | Present only when checked is false: why the bytes could not be read. | |
| checked | No | False when the artifact could not be retrieved. No verdict is offered in that case. | |
| verdict | No | approved, manual_review or rejected -- the same vocabulary the listing gate uses. | |
| exitCode | No | Present when ran is true. | |
| dangerHits | No | Dangerous patterns found. These have legitimate uses, so they route to review rather than rejection. | |
| executable | No | The runtime it was recognised as, or empty if none. | |
| secretHits | No | Credential-shaped patterns found. Pattern matches, not proof of intent. | |
| artifactRef | No | The URL that was checked, echoed back. | |
| attestation | No | A plain statement of what was done, suitable to hand to a human or another agent. | |
| notRunReason | No | Present when ran is false: why not. | |
| contentSha256 | No | SHA-256 of the exact bytes that were read. | |
| verdictReason | No | Why that verdict, when it is not self-evident. | |
| contentSizeBytes | No | Size of those bytes. | |
| signedAttestation | No | Present when a verdict was reached and the server is configured with a signing key. Ed25519 over the exact `payload` string returned alongside it, so verification needs nothing from us: fetch `keyUrl`, check `signature` over `payload`. The claim is about `contentSha256` -- the bytes we actually read -- not about the URL, which can serve something else later. |