Inspiration

AI agents can now draft contracts. The dangerous step is the last one: sending a document to be signed. We wanted an agent that does everything up to that point and is structurally unable to take the last step without a person.

What it does

You type one sentence ("Draft a mutual NDA with Northwind Labs, two-year term..."). Consent Gate extracts the intent, checks the counterparty exists, drafts the clauses, renders a PDF, and audits it twice. Every value the model supplied on your behalf is listed. Then the agent stops. Sending requires a person to approve those exact bytes with a one-time token that is printed once and stored nowhere; any edit to the PDF invalidates the approval.

How we built it on Nebius Token Factory and NVIDIA Nemotron

Three Nemotron models, each sized to its job:

Stage Model
intent extraction nvidia/NVIDIA-Nemotron-3-Nano-30B-A3B
drafting nvidia/nemotron-3-super-120b-a12b
independent second opinion nvidia/Nemotron-3-Ultra-550b-a55b

The client is Python standard library only, against Token Factory's OpenAI-compatible endpoint. Prices are read live from /v1/models?verbose=true, so every run ends with tokens and dollars per model, written to a tamper-evident ledger together with which model ran which stage. One full run costs about one cent ($0.0108 in the recorded run).

What the second opinion caught

On the same one-sentence prompt, Ultra flagged that the draft labelled one party "Disclosing" and the other "Receiving" in what the request called a mutual NDA, and followed the defect through the obligations. None of the rule-based checks can see that. The reviewer is fenced in: it can only add warn/info findings, a "block" it asks for is downgraded, and it can never clear a block or approve. The deterministic COUNTERPARTY_NOT_FOUND block stood regardless.

What was significantly updated during the Submission Period

Consent Gate existed before this hackathon (built on Claude for the Foxit challenge at DevNetwork 2026). During this Submission Period we:

  1. added --backend nebius, a dependency-free Token Factory client;
  2. split the pipeline across Nemotron Nano / Super / Ultra by stage;
  3. added the fenced second-opinion reviewer (a new stage);
  4. recorded per-stage model provenance in the ledger;
  5. added per-run token and dollar accounting, priced live from Token Factory;
  6. added 8 tests (64 total, all passing from a fresh clone) and a demo page with a narrated tour.

Challenges

Keeping the reviewer useful without letting it become a second way for a model to talk its way past the human. The answer was to make its output strictly additive and to keep blocks in rules a person can read.

What we learned

Tiering by model size is a real lever: the smallest model handled intent in about two seconds, and the largest model's cost was still under a cent, which is the argument for spending it on review.

Feedback on Nebius Token Factory and NVIDIA models

  • The OpenAI-compatible endpoint meant a working client in about 60 lines of stdlib.
  • /v1/models?verbose=true exposing per-token pricing let us print exact cost per run with no hard-coded price table.
  • Rough edge: the console Usage page showed "No usage" right after our calls, so the API usage block was the only immediate source of truth.
  • Rough edge: the promo-code form errors with "no event name found" unless opened via the exact event link.

Disclosure: built with AI assistance (Claude); the narration in the demo video is the Windows built-in text-to-speech voice.

Built With

Share this project:

Updates

Submission history