Skip to content
Skip to content

Labs · Agent Agreement Preflight

Check a signature request before your agent sends it

Your agent drafts an NDA, a service agreement, a lease. Before anyone is asked to sign, this check says whether the request is ready, needs your approval, or is blocked — and exactly why. It never signs, never sends, and never says whether a signature is legally valid.

Not an e-signature service

Jithox does not sign, does not send, does not store your document and does not talk to a signature provider. Only the document's fingerprint (a sha256 hash) and opaque references travel. The decision is a deterministic policy check, not legal advice.

Step 4 of 4 · Result. Nothing is signed or sent by this page.

Result

Evaluated on the fixed clock 2026-09-10T12:00:00Z, so everyone sees the same answer.

check mark

Ready to prepare

Your agent may assemble the signature request and fill the provider's form without sending it. Sending stays with you.

Nothing was signed, sent, stored or paid.

Why

  • The request reaches someone outside your workspace.
  • Your approval covers exactly this request.

What to add

What your agent may do now

  • Assemble the signature request draft: document hash and version, signer roles and signing order.
  • Fill the provider's request form locally without sending it.
  • Record the action hash next to the draft so the owner approves exactly this request.
  • Ask the owner to approve the action hash before the expiry.

What never happens here

  • Send the signature request (never here; only the owner, through the chosen provider, after approval)
  • Sign or apply any signature or seal
  • Declare a signature or the document legally valid
  • Consent, accept or waive anything on anyone's behalf
  • Store or transmit the raw document
  • Call the provider's API

Provider cost

EUR 3.00 · Within the budget; nothing is charged by this check.

Signature level

Meets the policy floor "simple". Legal sufficiency is not assessed here.

Signers

  • signer:jithox-owner · Signs for your company
  • signer:shop-owner · The other party · outside your company

Approval reference (the exact request you would approve)

b954d27a9ec8b94370ac82a097c28bb0edeadefad892234f49c622fca50c8f8a

Unsigned and hash-bound: anyone can recompute it. It is not a signature and says nothing about legal validity.

Developer details

Request as evaluated

{
  "schemaVersion": "jithox.agreement-preflight-request/v1",
  "document": {
    "type": "sales_contract",
    "hash": "cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc",
    "version": "2026-09-v1",
    "title": "Reseller agreement",
    "dataClass": "internal"
  },
  "signers": [
    {
      "role": "company_representative",
      "ref": "signer:jithox-owner",
      "external": false,
      "authority": {
        "kind": "registered_representative",
        "ref": "kbo:EXAMPLE",
        "scope": "Sign sales contracts"
      }
    },
    {
      "role": "counterparty",
      "ref": "signer:shop-owner",
      "organisationRef": "org:shop-EXAMPLE",
      "external": true,
      "authority": {
        "kind": "none"
      }
    }
  ],
  "agent": {
    "id": "commerce-bot",
    "client": "gemini"
  },
  "owner": {
    "ref": "owner:jithox",
    "workspaceRef": "ws:commerce"
  },
  "jurisdiction": {
    "country": "BE",
    "signatureLevel": "simple"
  },
  "expiry": {
    "requestedExpiresAt": "2026-09-17T12:00:00Z",
    "reminderPolicy": {
      "enabled": true,
      "everyDays": 3,
      "maxReminders": 3
    }
  },
  "provider": {
    "id": "docusign",
    "estimatedCostMinor": 300,
    "currency": "EUR"
  },
  "budget": {
    "maxAmountMinor": 500,
    "currency": "EUR"
  },
  "revocable": "yes",
  "requiredEvidence": [],
  "humanApproval": {
    "ref": "approval:commerce-2026-09-10",
    "approvedBy": "owner:jithox",
    "approvedAt": "2026-09-10T11:00:00Z",
    "expiresAt": "2026-09-17T12:00:00Z",
    "actionHash": "b954d27a9ec8b94370ac82a097c28bb0edeadefad892234f49c622fca50c8f8a"
  },
  "idempotencyKey": "commerce-reseller-2026-09-10"
}

Result

{
  "schemaVersion": "jithox.agreement-preflight-result/v1",
  "policyVersion": "jithox.agreement-preflight-policy/v1",
  "status": "preview_local_build",
  "preflightId": "agp_b954d27a9ec8b943",
  "decision": "READY_TO_PREPARE",
  "reasonCodes": [
    "external_recipients",
    "approval_valid"
  ],
  "reasons": [
    {
      "code": "external_recipients",
      "message": "The request would reach at least one party outside the workspace. The owner approves this exact request (its hash) before anything is sent."
    },
    {
      "code": "approval_valid",
      "message": "Approved by owner:jithox (approval:commerce-2026-09-10) for exactly this hash."
    }
  ],
  "missingRequirements": [],
  "allowedPreparationSteps": [
    "Assemble the signature request draft: document hash and version, signer roles and signing order.",
    "Fill the provider's request form locally without sending it.",
    "Record the action hash next to the draft so the owner approves exactly this request.",
    "Ask the owner to approve the action hash before the expiry."
  ],
  "prohibitedSteps": [
    "Send the signature request (never here; only the owner, through the chosen provider, after approval)",
    "Sign or apply any signature or seal",
    "Declare a signature or the document legally valid",
    "Consent, accept or waive anything on anyone's behalf",
    "Store or transmit the raw document",
    "Call the provider's API"
  ],
  "approvalRequired": true,
  "approvalStatus": "valid",
  "cost": {
    "relevant": true,
    "estimatedMinor": 300,
    "currency": "EUR",
    "budgetMinor": 500,
    "withinBudget": true,
    "source": "caller",
    "note": "Within the budget; nothing is charged by this check."
  },
  "signatureLevel": {
    "requested": "simple",
    "policyMinimum": "simple",
    "meetsPolicy": true,
    "note": "Meets the policy floor \"simple\". Legal sufficiency is not assessed here."
  },
  "signers": [
    {
      "ref": "signer:jithox-owner",
      "role": "company_representative",
      "external": false,
      "authorityOk": true
    },
    {
      "ref": "signer:shop-owner",
      "role": "counterparty",
      "external": true,
      "authorityOk": true
    }
  ],
  "expiresAt": "2026-09-17T12:00:00.000Z",
  "actionHash": "b954d27a9ec8b94370ac82a097c28bb0edeadefad892234f49c622fca50c8f8a",
  "evidence": {
    "required": [],
    "supplied": [],
    "missing": []
  },
  "replayProtection": {
    "scope": "process_memory",
    "durable": false,
    "idempotencyKey": "commerce-reseller-2026-09-10"
  },
  "receipt": {
    "kind": "agent_agreement_preflight_receipt",
    "signature": "unsigned_hash_bound",
    "algorithm": "sha256-canonical-json",
    "digest": "53388c92c11b9731b2ada756c74bdc41fb11ea80f4e717a38bf38da0e7b51ac6",
    "boundTo": {
      "actionHash": "b954d27a9ec8b94370ac82a097c28bb0edeadefad892234f49c622fca50c8f8a",
      "decision": "READY_TO_PREPARE",
      "policyVersion": "jithox.agreement-preflight-policy/v1",
      "evaluatedAt": "2026-09-10T12:00:00.000Z",
      "preflightId": "agp_b954d27a9ec8b943"
    },
    "note": "This receipt is NOT signed, is NOT a signature, and says nothing about legal validity. It is bound by a sha256 digest over the canonical decision; anyone can recompute it."
  },
  "signed": false,
  "sent": false,
  "legalValidity": "not_assessed",
  "executed": false,
  "evaluatedAt": "2026-09-10T12:00:00.000Z"
}

How it works

  1. 1 · Your agent describes the request

    Document fingerprint and version, who signs with which authority, data class, country and signature level, expiry, provider and budget, evidence.

  2. 2 · Jithox checks it deterministically

    The same request always gets the same decision: policy rules, no model, no lookups, no storage.

  3. 3 · You decide

    Ready, needs approval, or blocked — with reasons and an approval reference you can approve. Sending stays with you and your provider.

How Jithox's own teams use it

Four teams, four requests, four decisions on a fixed clock. Demonstrations, not live requests.

Evaluated on the fixed clock 2026-09-10T12:00:00Z, so everyone sees the same answer.

MCP/Agent Tooling

Partner terms for a new MCP integrator

The tooling bot prepared partner terms for an integrator. The counterparty is external and the document is confidential, so the owner approves this exact request before it leaves.

exclamation markNeeds your approval

external_recipients · data_class_requires_approval · approval_missing

Open

Security

Pentest authorisation letter drafted by the agent

The security bot wanted to be recorded as the signer of a customer's authorisation letter. An agent never signs by itself: without a standing grant with scope and expiry the request is blocked.

crossBlocked

signer_role_unsupported_for_agent · external_recipients · data_class_requires_approval · signature_level_unknown · approval_missing

Open

Commerce

Reseller agreement with a web shop, approved

The commerce bot prepared a reseller agreement; the owner already approved this exact hash. External and within budget, so it is ready to prepare — sending stays with the owner.

check markReady to prepare

external_recipients · approval_valid

Open

First Cash

Statement of work with a client, over budget

The first-cash bot prepared a statement of work and picked a provider whose estimated cost is above the stated budget. Blocked until the budget or the provider changes; nothing is charged.

crossBlocked

external_recipients · budget_exceeded · approval_missing

Open

What is true about this check

  • It is a policy check, not legal advice: it says nothing about whether a signature is legally valid.
  • Only the document's sha256 fingerprint travels; the document itself never does.
  • Signers are opaque references; an e-mail address, phone number or bank account is refused.
  • An AI agent is never the signer: it may act only under a recorded standing grant or representation, with scope and expiry.
  • Anything that reaches someone outside your workspace needs your approval of the exact request hash.
  • The provider cost is estimated beforehand and compared with your budget; nothing is charged by this check.
  • The receipt is unsigned and hash-bound; anyone can recompute it.
  • It is a free Labs preview: not sold, not in the sitemap, not a promise.

What this never does

  • Sign a document.
  • Claim a legal identity.
  • Send a signature request.
  • Consent on anyone's behalf.
  • Store a raw document.
  • Call an external provider.
  • Claim a signature is legally valid.
  • Send customer data to a model.

Free. The interactive check, the API and the connection tool cost nothing in this build; a paid receipted check is a proposal for the owner, not a price. Status: preview local build.

Developer details

Three free routes and one connection tool. The request and result schemas are closed; every decision, reason code and error code is listed in the schema document.

Developer details
Schema:
GET https://jithox.com/api/agreement-preflight/v1/schema
Evaluate:
POST https://jithox.com/api/agreement-preflight/v1/evaluate
Fixtures:
GET https://jithox.com/api/agreement-preflight/v1/fixtures
Policy:
jithox.agreement-preflight-policy/v1 · 60/min
MCP:
agreement_preflight @ https://jithox.com/api/agent-connection/v1/mcp · CONFIG_READY
Decisions:
READY_TO_PREPARE · NEEDS_APPROVAL · BLOCKED · UNAVAILABLE

Through your Jithox connection the tool is called agreement_preflight and needs the scope actions:prepare:agent-agreement-preflight. CONFIG_READY: listed and callable; no client is CERTIFIED against it until a production canary has run.

Agent Action Preflight · Connect your AI