Faster feedback. Before the push.
Problem: agents push, wait minutes for CI, fail, and push again.
Solution: run your checks on the agent's machine and sign the result. Pushgate accepts the push in one try, or says exactly what's missing.
Paste this into your coding agentClaude Code, Codex, Cursor, or any agent with a shell. No account.
- Asks "Go?" once, then works in a new temp folder
- Downloads CI/lock v4.6.2, open source, SHA-256 checked
- Uploads nothing of yours unless you say yes
- Your sandbox deletes itself in 24 hours
Tip: start Claude Code with claude --safe-mode so your own hooks, skills, MCP servers and CLAUDE.md stay out of the run.
- Sample, in a new temp folder
TRY=$(mktemp -d) ...A new temp folder. Your current folder is not read.printf ... > check.shA two-line "test" that prints 1 check passed.printf ... > config.iniTwo FAKE keys (AWS-style, GitHub-style) for the secret scan to catch.git init && git commitOne commit as demo@example.invalid. Your git identity is not used.mkdir -p "$TRY/bin" && curl -fsSL https://cilock.dev/dl/v4.6.2/install.sh | CILOCK_VERSION=v4.6.2 CILOCK_BIN_DIR="$TRY/bin" shCI/lock v4.6.2 (Apache-2.0) from cilock.dev into the temp folder, SHA-256 checked against cilock.dev's release manifest. No sudo.openssl ecparam -name prime256v1 -genkey ...A throwaway signing key. It stays in the temp folder.git push https://try.pushgate.dev/<id>.git HEAD:mainPush 1, no evidence. Refused: no proof.cilock run --offline -k demo.key -a git -a secretscan -- sh check.shThe command the refusal names. Runs the check and a secret scan, signs the result to this commit, uploads it. Findings carry rule, file, line, SHA-256 and the first 8 characters, never the secret.git push https://try.pushgate.dev/<id>.git HEAD:mainPush 2. Refused: the proof exists and the scan in it failed.git rm config.ini && git commit --amendRemoves the fake keys from the commit itself.cilock run ... && git push https://try.pushgate.dev/<id>.git HEAD:mainClean scan, new evidence, push 3. Accepted. Stored, delivered nowhere.- Only if you say yes at the end
snapshot your folder into $TRY/own, one commit, push to branch ownOne commit of what HEAD contains, checked for what you picked below the prompt, with tools you already have. Your history never leaves; your folder and remotes are never changed. Up to 25 MB. A secret scan that finds anything uploads nothing.curl -X DELETE https://try.pushgate.dev/<id>Deletes the sandbox now instead of 24 hours after you opened this page.
Anonymous usage counts onlyAllow measurement
Refused twice, then accepted.
Every answer came back inside git push, with no CI run.
In your repo, Pushgate also checks who ran it: keyless signing tied to your CI identity →
Create a free accountFree for one private repository. Paid plans from $8.99 per developer / month.
Built by maintainers of Witness, part of the CNCF-graduated in-toto project.
Straight answers
You want me to paste a prompt that runs commands?
Yes, and you can read every one first under "Every command". Copy puts the prompt and every command on your clipboard, so nothing is fetched and followed. Your agent shows a three-line plan and asks "Go?" before it runs anything, prints each command before running it, works in a new temp folder, uses no credentials, and pushes to one URL: your sandbox.
Where does the speed come from?
From where the feedback happens. The checks run on the agent's machine, and the gate answers inside the git push, so a missing or failing check comes back in the same command instead of after a CI run.
Any key passes? Then what does this prove?
Nothing about who signed. It proves the uploader holds a key and that the run it signed reported pass. On a real repository the signer is your agent's enrolled identity or your CI's identity, and a human activates the policy.
What happens to what I push?
Nothing is forwarded or delivered. Uploads are capped at 25 MB per push and 50 MB per sandbox, and the sandbox is deleted 24 hours after you opened this page. Your code is read in memory during each push, to find the commit and check it, and is never stored. The sandbox keeps metadata only: commit ids, the verdicts and check results, and when each happened. That metadata is stored encrypted under a key only your sandbox link can open, so a deleted sandbox cannot be read back, even by us. If you let your agent try your own code, it pushes one snapshot commit with no history; its secret scan runs on your machine, a scan that finds anything uploads nothing, and a clean one uploads only its result. Download my data saves everything the sandbox holds as one file, and Delete removes it at once. We also cannot see the CI/lock download: your agent fetches it from cilock.dev directly.
Who is TestifySec?
A software supply-chain security company, founded by Cole Kennedy and Frederick Kautz. We maintain Witness and Archivista, open-source projects we donated to in-toto, the CNCF-graduated framework for attesting software supply chains. Both founders contributed to the CNCF Software Supply Chain Best Practices whitepaper. Pushgate.dev is our gate for agent pushes, and CI/lock, the tool this prompt installs, is open source under Apache-2.0 at aflock-ai/rookery.
Why should I trust pushgate.dev?
You can check most of it instead of trusting it. The prompt and every command are on this page before you copy them, and nothing is fetched and followed. CI/lock is open source, and its download is checked against the SHA-256 in the release manifest. The demo needs no account, no credential and no sudo, and it signs with a throwaway key in a temp folder. Your own code leaves your machine only if you say yes, as one commit, and is gone after 24 hours or when you press Delete now. From evidence the sandbox keeps only the result (pass or fail, and finding counts), never the evidence file. On your own repository, an accepted push leaves a signed record you can verify with open-source tools, so the proof does not rest on our word.
What do you track?
Anonymous counts, for everyone: page viewed, prompt copied, and from the sandbox itself: created, each refusal, accepted. We keep the site you came from (for example news.ycombinator.com), never the full link, and the campaign name in the address if there is one (/try/hn counts as "hn"). No IP address stored, no fingerprint, and no id that outlives the sandbox. Choose "Allow measurement" and we also keep where you came from under a first-party journey id, which takes one cookie; you can undo it. If your browser sends Global Privacy Control or Do Not Track, we don't offer that, and you stay anonymous.