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.

cross

Blocked

Something is wrong or missing. Fix what is named; nothing was prepared or sent.

Nothing was signed, sent, stored or paid.

Why

  • An AI agent may not be the signer without a standing grant or registered representation.
  • The request reaches someone outside your workspace.
  • The document carries sensitive data.
  • The signature level is not stated.
  • Your approval of this exact request is missing.

What to add

  • Record the standing grant or registered representation under which signer:security-bot acts, with scope and expiry.
  • State the signature level the request will use (simple, advanced or qualified).
  • Ask the owner to approve action hash cf64614dfc0d37367eddc5b11b741a95a1eff03c55a1540d10d291a1cccc9e2a before the expiry.

What your agent may do now

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 2.50 · Within the budget; nothing is charged by this check.

Signature level

Unknown level. Jithox policy asks at least "advanced" for a other document before an agent prepares it; whether a level is legally sufficient is not assessed here.

Signers

  • signer:security-bot · An AI agent acting on behalf of someone · ✕
  • signer:customer-ciso · The other party · outside your company

Approval reference (the exact request you would approve)

cf64614dfc0d37367eddc5b11b741a95a1eff03c55a1540d10d291a1cccc9e2a

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": "other",
    "hash": "bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb",
    "version": "draft-3",
    "title": "Authorisation to test",
    "dataClass": "confidential"
  },
  "signers": [
    {
      "role": "agent_on_behalf",
      "ref": "signer:security-bot",
      "external": false,
      "authority": {
        "kind": "owner_instruction",
        "ref": "instruction:sec-2026-09"
      }
    },
    {
      "role": "counterparty",
      "ref": "signer:customer-ciso",
      "organisationRef": "org:customer-EXAMPLE",
      "external": true,
      "authority": {
        "kind": "none"
      }
    }
  ],
  "agent": {
    "id": "security-bot",
    "client": "chatgpt"
  },
  "owner": {
    "ref": "owner:jithox",
    "workspaceRef": "ws:security"
  },
  "jurisdiction": {
    "country": "NL",
    "signatureLevel": "unknown"
  },
  "expiry": {
    "requestedExpiresAt": "2026-09-17T12:00:00Z",
    "reminderPolicy": {
      "enabled": true,
      "everyDays": 3,
      "maxReminders": 3
    }
  },
  "provider": {
    "id": "dropbox_sign",
    "estimatedCostMinor": 250,
    "currency": "EUR"
  },
  "budget": {
    "maxAmountMinor": 1000,
    "currency": "EUR"
  },
  "revocable": "yes",
  "requiredEvidence": [
    {
      "id": "ev-scope-letter",
      "kind": "authority_proof",
      "ref": "artifact:scope-letter-v3",
      "supplied": true
    }
  ],
  "humanApproval": null,
  "idempotencyKey": "security-pentest-auth-2026-09-10"
}

Result

{
  "schemaVersion": "jithox.agreement-preflight-result/v1",
  "policyVersion": "jithox.agreement-preflight-policy/v1",
  "status": "preview_local_build",
  "preflightId": "agp_cf64614dfc0d3736",
  "decision": "BLOCKED",
  "reasonCodes": [
    "signer_role_unsupported_for_agent",
    "external_recipients",
    "data_class_requires_approval",
    "signature_level_unknown",
    "approval_missing"
  ],
  "reasons": [
    {
      "code": "signer_role_unsupported_for_agent",
      "message": "\"signer:security-bot\" is an agent acting on behalf of someone without a standing grant or registered representation. An agent never signs by itself."
    },
    {
      "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": "data_class_requires_approval",
      "message": "The document carries confidential data; the owner approves who receives it."
    },
    {
      "code": "signature_level_unknown",
      "message": "The signature level is unknown. The owner decides which level this document needs; a preflight does not."
    },
    {
      "code": "approval_missing",
      "message": "The owner has not approved this exact request yet."
    }
  ],
  "missingRequirements": [
    {
      "code": "authority_missing",
      "requirement": "Record the standing grant or registered representation under which signer:security-bot acts, with scope and expiry."
    },
    {
      "code": "signature_level_unknown",
      "requirement": "State the signature level the request will use (simple, advanced or qualified)."
    },
    {
      "code": "approval_missing",
      "requirement": "Ask the owner to approve action hash cf64614dfc0d37367eddc5b11b741a95a1eff03c55a1540d10d291a1cccc9e2a before the expiry."
    }
  ],
  "allowedPreparationSteps": [],
  "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": "missing",
  "cost": {
    "relevant": true,
    "estimatedMinor": 250,
    "currency": "EUR",
    "budgetMinor": 1000,
    "withinBudget": true,
    "source": "caller",
    "note": "Within the budget; nothing is charged by this check."
  },
  "signatureLevel": {
    "requested": "unknown",
    "policyMinimum": "advanced",
    "meetsPolicy": null,
    "note": "Unknown level. Jithox policy asks at least \"advanced\" for a other document before an agent prepares it; whether a level is legally sufficient is not assessed here."
  },
  "signers": [
    {
      "ref": "signer:security-bot",
      "role": "agent_on_behalf",
      "external": false,
      "authorityOk": false
    },
    {
      "ref": "signer:customer-ciso",
      "role": "counterparty",
      "external": true,
      "authorityOk": true
    }
  ],
  "expiresAt": "2026-09-17T12:00:00.000Z",
  "actionHash": "cf64614dfc0d37367eddc5b11b741a95a1eff03c55a1540d10d291a1cccc9e2a",
  "evidence": {
    "required": [
      "ev-scope-letter"
    ],
    "supplied": [
      "ev-scope-letter"
    ],
    "missing": []
  },
  "replayProtection": {
    "scope": "process_memory",
    "durable": false,
    "idempotencyKey": "security-pentest-auth-2026-09-10"
  },
  "receipt": {
    "kind": "agent_agreement_preflight_receipt",
    "signature": "unsigned_hash_bound",
    "algorithm": "sha256-canonical-json",
    "digest": "848384367e4c0561e487db5b5f104732ce29c0ecf3f02f57a7263c2edd6cb0a1",
    "boundTo": {
      "actionHash": "cf64614dfc0d37367eddc5b11b741a95a1eff03c55a1540d10d291a1cccc9e2a",
      "decision": "BLOCKED",
      "policyVersion": "jithox.agreement-preflight-policy/v1",
      "evaluatedAt": "2026-09-10T12:00:00.000Z",
      "preflightId": "agp_cf64614dfc0d3736"
    },
    "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