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.
Needs your approval
The request may be prepared, but you approve this exact request (its hash) before anything is sent. The reasons say why.
Nothing was signed, sent, stored or paid.
Why
- The request reaches someone outside your workspace.
- The document carries sensitive data.
- Your approval of this exact request is missing.
What to add
- Ask the owner to approve action hash 8a6b0651ea32ae9ff37b2b56cc8c9aaa2d239adc7fb2cb12af18d60cf6b46286 before the expiry.
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 2.50 · 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:integrator-lead · The other party · outside your company
Approval reference (the exact request you would approve)
8a6b0651ea32ae9ff37b2b56cc8c9aaa2d239adc7fb2cb12af18d60cf6b46286
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": "service_agreement",
"hash": "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
"version": "2026-09-v2",
"title": "MCP partner terms",
"dataClass": "confidential"
},
"signers": [
{
"role": "company_representative",
"ref": "signer:jithox-owner",
"external": false,
"authority": {
"kind": "registered_representative",
"ref": "kbo:EXAMPLE",
"scope": "Sign partner agreements"
}
},
{
"role": "counterparty",
"ref": "signer:integrator-lead",
"organisationRef": "org:integrator-EXAMPLE",
"external": true,
"authority": {
"kind": "none"
}
}
],
"agent": {
"id": "tooling-bot",
"client": "claude"
},
"owner": {
"ref": "owner:jithox",
"workspaceRef": "ws:mcp-tooling"
},
"jurisdiction": {
"country": "BE",
"signatureLevel": "simple"
},
"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": [],
"humanApproval": null,
"idempotencyKey": "mcp-partner-terms-2026-09-10"
}Result
{
"schemaVersion": "jithox.agreement-preflight-result/v1",
"policyVersion": "jithox.agreement-preflight-policy/v1",
"status": "preview_local_build",
"preflightId": "agp_8a6b0651ea32ae9f",
"decision": "NEEDS_APPROVAL",
"reasonCodes": [
"external_recipients",
"data_class_requires_approval",
"approval_missing"
],
"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": "data_class_requires_approval",
"message": "The document carries confidential data; the owner approves who receives it."
},
{
"code": "approval_missing",
"message": "The owner has not approved this exact request yet."
}
],
"missingRequirements": [
{
"code": "approval_missing",
"requirement": "Ask the owner to approve action hash 8a6b0651ea32ae9ff37b2b56cc8c9aaa2d239adc7fb2cb12af18d60cf6b46286 before the expiry."
}
],
"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": "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": "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:integrator-lead",
"role": "counterparty",
"external": true,
"authorityOk": true
}
],
"expiresAt": "2026-09-17T12:00:00.000Z",
"actionHash": "8a6b0651ea32ae9ff37b2b56cc8c9aaa2d239adc7fb2cb12af18d60cf6b46286",
"evidence": {
"required": [],
"supplied": [],
"missing": []
},
"replayProtection": {
"scope": "process_memory",
"durable": false,
"idempotencyKey": "mcp-partner-terms-2026-09-10"
},
"receipt": {
"kind": "agent_agreement_preflight_receipt",
"signature": "unsigned_hash_bound",
"algorithm": "sha256-canonical-json",
"digest": "6662723a70f713a8ec20c6afabb6b79091bb22cd96624a9134c21a8f4da44447",
"boundTo": {
"actionHash": "8a6b0651ea32ae9ff37b2b56cc8c9aaa2d239adc7fb2cb12af18d60cf6b46286",
"decision": "NEEDS_APPROVAL",
"policyVersion": "jithox.agreement-preflight-policy/v1",
"evaluatedAt": "2026-09-10T12:00:00.000Z",
"preflightId": "agp_8a6b0651ea32ae9f"
},
"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 · 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 · Jithox checks it deterministically
The same request always gets the same decision: policy rules, no model, no lookups, no storage.
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
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
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
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
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.