AI-generated text is no longer distinguishable from human text. That's not a hot
take, it's a measurable fact at this point, and it quietly breaks a lot of the
trust assumptions the internet runs on — messaging, marketplaces, escrow, forums.
If you can no longer tell what was written by a bot, the obvious next question is: can you tell how it was written?
That's the premise behind PoHI (Proof of Human Intent), a protocol I've been
building on my own: instead of analyzing text content, it measures the physical
rhythm of typing — dwell time, flight time between keys, the skew of your s,
how you correct mistakes — and proves, via a zero-knowledge SNARK, that the
resulting score clears a threshold, without ever revealing the raw keystroke data.
@pohi-protocol/core-math
— the reference math engine implementing the
behavioral equations (skewness, cognitive-latency ratio, error-recalibration
variance). 74 unit tests.circuits/
— a Circom circuit compiling to Groth16 over BN254, ~12,500
constraints, with a real multi-party trusted-setup ceremony tool. 21 tests
checking it agrees numerically with the reference engine packages/sdk-web
— the browser-side capture SDK.experiments/
— an adversarial evaluation harness with six attacker models,
from "constant-delay macro" up to "an attacker with full knowledge of the
scoring function trying to fake the rhythm."Everything is open: [https://github.com/ProjectOne2020/pohi-protocol-poc](https://github.com/ProjectOne2020/pohi-protocol-poc)
I'm not here to tell you this is unbreakable. It probably isn't, at least not yet.
A zk-SNARK proves you know a witness satisfying the relation — it does not
prove that witness came from an actual human hand. That's a real, documented gap
(I wrote it up in the threat model instead of hiding it — see
docs/THREAT_MODEL.md §5), To test that, I need real human typing data — which is the actual ask here.
👉 https://pohi-protocol-poc.vercel.app You type a few short prompts, that's it. Available in English and Spanish. What
gets recorded is only keystroke press/release timestamps in milliseconds and
whether a key was Backspace — never the text itself. That's not just a privacy
promise: the database schema itself has a constraint that rejects any record
containing character data, so it holds even if someone tampers with the client.
You can check that directly in
[ experiments/schema.sql](https://github.com/ProjectOne2020/pohi-protocol-poc/blob/main/experiments/schema.sql).
If you're more interested in poking at the code than typing, I'd take that too —
issues, PRs, "your fixed-point division is still wrong here" comments, all
welcome. Especially if you can break the scoring.
Repo: [https://github.com/ProjectOne2020/pohi-protocol-poc](https://github.com/ProjectOne2020/pohi-protocol-poc)
LinkedIn: [https://www.linkedin.com/in/alejandro-guti%C3%A9rrez-9a0318107/](https://www.linkedin.com/in/alejandro-guti%C3%A9rrez-9a0318107/)