Skip to content

Labs · preview

Check before your AI agent acts

Before your agent sends, publishes, buys, submits, changes or tests something, ask Jithox whether that exact action is permitted and what is still missing. You get one of four plain answers, the reasons, and a receipt you can recompute. Jithox checks; it never executes.

Nothing is executed here

This is a preview. The decision is a deterministic rule, not a model, and it runs in your browser with the same code the API uses. Sending, publishing, paying, submitting, testing and changing stay with your official connector, after your approval.

Step 1 of 5. No account, nothing is sent, nothing is executed.

What does the agent want to do?

Action

Jithox checks; it never executes. Status: preview local build.

Developer / Advanced: the JSON and the curl

The request exactly as the API receives it, the result when you have run the preflight, and the same call as curl.

{
  "request": {
    "schemaVersion": "jithox.agent-action-preflight-request/v1",
    "action": {
      "type": "send_message",
      "target": {
        "kind": "send_message",
        "id": ""
      }
    },
    "agent": {
      "id": "my-agent",
      "client": "claude"
    },
    "owner": {
      "ref": "owner:me"
    },
    "requestedPermissions": [
      "read",
      "draft_messages",
      "send_external_messages"
    ],
    "dataClassification": "internal",
    "money": null,
    "externalSideEffect": true,
    "reversible": "no",
    "authority": {
      "kind": "none"
    },
    "humanApproval": null,
    "idempotencyKey": "preflight-2026-09-05-001",
    "requestedExpiresAt": "2026-09-05T23:45Z"
  }
}
curl -s https://jithox.com/api/agent-preflight/v1/evaluate \
  -H 'content-type: application/json' \
  -d '{"schemaVersion":"jithox.agent-action-preflight-request/v1","action":{"type":"send_message","target":{"kind":"email","id":"customer:EXAMPLE-1"},"summary":"Reply to the customer's question."},"agent":{"id":"my-agent","client":"claude"},"owner":{"ref":"owner:me"},"requestedPermissions":["read","draft_messages","send_external_messages"],"dataClassification":"internal","money":null,"externalSideEffect":true,"reversible":"no","authority":{"kind":"none"},"humanApproval":null,"idempotencyKey":"reply-customer-1-2026-09-10","requestedExpiresAt":"2026-09-10T14:00:00Z"}'

The four answers

ALLOWED_TO_PREPARE
Every requirement is met. The agent may prepare; anything external still needs a connector after approval.
HUMAN_APPROVAL_REQUIRED
Preparation may go ahead, but the action leaves the workspace and waits for the owner to approve its exact hash.
BLOCKED
A requirement is missing or wrong: authority, permission, budget, currency, target, expiry, scope, a mismatched or expired approval, or a replayed key.
UNAVAILABLE
The check itself could not complete (for example the replay store did not answer). Not a permission.

Never a generic “safe” or “approved”: every answer names its reason codes, and an answer the evidence does not justify is not given.

What it looks at

  • The action type (twelve, closed), the target reference and a one-sentence summary.
  • The agent, its client, and the owner or workspace it works for.
  • The permissions it asks for, against the ones the action needs.
  • The data classification, the maximum amount and currency when money is involved, whether the action leaves the workspace, and whether it can be undone.
  • The authority that already exists: an owner instruction or a standing grant with scope, expiry and budget.
  • An owner approval bound to the action hash, an action key against replay, the requested expiry, and optional evidence references.

Each action type carries its own policy facts: which permissions it needs, whether it leaves the workspace, whether money is involved, and which authority it requires.

  • Read data · local · authority none
  • Change local files · local · authority none
  • Inspect an artifact offline · local · authority required
  • Send a message · external · authority none
  • Publish content · external · authority none
  • Publish a product · external · money · authority required
  • Buy something · external · money · authority required
  • Issue a refund · external · money · authority required
  • Submit a proposal · external · authority none
  • Accept a contract · external · money · authority required
  • Test a system for weaknesses · external · authority standing grant required
  • Change a live system · external · authority required

How Jithox’s own four teams use it

Deterministic demonstrations, evaluated on a fixed clock. Nothing here was published, submitted, tested or paid.

  • Commerce

    Publish a EUR 29 product on Payhip

    The Commerce bot has assembled the listing. Publishing puts a price in front of the public, so the owner approves the exact listing hash first.

    HUMAN_APPROVAL_REQUIRED

    external_execution_unsupported · no_standing_budget · approval_missing · reversibility_unknown

  • First Cash

    Prepare a freelance proposal

    Drafting a proposal changes nothing outside the workspace, so the bot may prepare it now.

    ALLOWED_TO_PREPARE

    no reason codes

  • First Cash

    Submit the proposal

    Submission reaches a real client and cannot be unsent; it waits for the owner's approval of that exact submission.

    HUMAN_APPROVAL_REQUIRED

    external_execution_unsupported · approval_missing · irreversible_requires_approval

  • Security

    Inspect a customer's ZIP offline

    Inspection is allowed only because the customer's scope is recorded and immutable; nothing live is touched.

    ALLOWED_TO_PREPARE

    no reason codes

  • Security

    Test a customer target without authorization

    No standing grant with a recorded scope and expiry exists, so external testing is blocked outright.

    BLOCKED

    external_execution_unsupported · authority_missing · approval_missing · reversibility_unknown · data_classification_requires_approval

  • Growth

    Draft a social post

    A draft stays in the workspace, so the Growth bot may prepare it.

    ALLOWED_TO_PREPARE

    no reason codes

  • Growth

    Publish the post automatically

    The bot holds no publish permission and no standing grant, so automatic publication is blocked, not merely queued for approval.

    BLOCKED

    permission_missing · external_execution_unsupported · approval_missing · reversibility_unknown

What it never does

  • It never executes the action. The best answer an external action can get is "allowed to prepare"; the execution step stays with an official connector after your approval.
  • It never stores your request, and it never accepts a key, a token, a private key or a personal detail.
  • It never signs: the receipt is unsigned and hash-bound, and it says so. Only the fleet's Ed25519 key could sign it.
  • It never asks a model. Every decision is a deterministic rule; if every model in the world is down, it still answers.

Price: the interactive and local preflight is free. API pricing is not published; two evidence-based proposals await the owner. Status: preview local build.

For developers and agents

Three versioned, compute-only routes. The schema document carries the closed request and result schemas, the twelve action types with their policy facts, the reason codes, the MCP tool contract for the fleet, and the client snippets below.

GET /api/agent-preflight/v1/schema
Schemas, action types, decisions, reason codes, limits, MCP tool contract, client exports.
POST /api/agent-preflight/v1/evaluate
One planned action in; one bounded decision with reasons, missing requirements and a hash-bound receipt out. no-store.
GET /api/agent-preflight/v1/fixtures
The seven team demonstrations with their evaluated results.

Connect the result to the agent you use

  • Claude Code CONFIG READY

    Add the rule below to the project's CLAUDE.md. Claude Code runs the curl through its Bash tool and reads the decision before it drafts or asks for approval.

    CLAUDE.md
    ## Jithox Agent Action Preflight
    
    Before any action that sends, publishes, buys, submits, accepts, tests or changes something outside the workspace:
    1. POST the planned action to https://jithox.com/api/agent-preflight/v1/evaluate (schema: https://jithox.com/api/agent-preflight/v1/schema).
    2. Act only on ALLOWED_TO_PREPARE. On HUMAN_APPROVAL_REQUIRED, show the owner the actionHash and stop. On BLOCKED or UNAVAILABLE, stop and report the reason codes.
    3. Never execute the external step yourself; Jithox does not execute either. Hand an approved hash to the official connector.
    4. Never put a credential, key or personal detail in the request; the endpoint refuses them.
    
    Command:
    
    ```bash
    curl -s https://jithox.com/api/agent-preflight/v1/evaluate \
      -H 'content-type: application/json' \
      -d '{"schemaVersion":"jithox.agent-action-preflight-request/v1","action":{"type":"send_message","target":{"kind":"email","id":"customer:EXAMPLE-1"},"summary":"Reply to the customer's question."},"agent":{"id":"my-agent","client":"claude"},"owner":{"ref":"owner:me"},"requestedPermissions":["read","draft_messages","send_external_messages"],"dataClassification":"internal","money":null,"externalSideEffect":true,"reversible":"no","authority":{"kind":"none"},"humanApproval":null,"idempotencyKey":"reply-customer-1-2026-09-10","requestedExpiresAt":"2026-09-10T14:00:00Z"}'
    ```
  • Codex CLI CONFIG READY

    Add the rule to AGENTS.md at the repository root; Codex reads it at the start of every session and can run the curl in its sandbox.

    AGENTS.md
    # Agent Action Preflight (Jithox)
    
    Before any action that sends, publishes, buys, submits, accepts, tests or changes something outside the workspace:
    1. POST the planned action to https://jithox.com/api/agent-preflight/v1/evaluate (schema: https://jithox.com/api/agent-preflight/v1/schema).
    2. Act only on ALLOWED_TO_PREPARE. On HUMAN_APPROVAL_REQUIRED, show the owner the actionHash and stop. On BLOCKED or UNAVAILABLE, stop and report the reason codes.
    3. Never execute the external step yourself; Jithox does not execute either. Hand an approved hash to the official connector.
    4. Never put a credential, key or personal detail in the request; the endpoint refuses them.
    
    ```bash
    curl -s https://jithox.com/api/agent-preflight/v1/evaluate \
      -H 'content-type: application/json' \
      -d '{"schemaVersion":"jithox.agent-action-preflight-request/v1","action":{"type":"send_message","target":{"kind":"email","id":"customer:EXAMPLE-1"},"summary":"Reply to the customer's question."},"agent":{"id":"my-agent","client":"claude"},"owner":{"ref":"owner:me"},"requestedPermissions":["read","draft_messages","send_external_messages"],"dataClassification":"internal","money":null,"externalSideEffect":true,"reversible":"no","authority":{"kind":"none"},"humanApproval":null,"idempotencyKey":"reply-customer-1-2026-09-10","requestedExpiresAt":"2026-09-10T14:00:00Z"}'
    ```
  • Gemini CLI CONFIG READY

    Add the rule to GEMINI.md in the project; Gemini CLI loads it as context and can execute the curl with its shell tool.

    GEMINI.md
    # Jithox Agent Action Preflight
    
    Before any action that sends, publishes, buys, submits, accepts, tests or changes something outside the workspace:
    1. POST the planned action to https://jithox.com/api/agent-preflight/v1/evaluate (schema: https://jithox.com/api/agent-preflight/v1/schema).
    2. Act only on ALLOWED_TO_PREPARE. On HUMAN_APPROVAL_REQUIRED, show the owner the actionHash and stop. On BLOCKED or UNAVAILABLE, stop and report the reason codes.
    3. Never execute the external step yourself; Jithox does not execute either. Hand an approved hash to the official connector.
    4. Never put a credential, key or personal detail in the request; the endpoint refuses them.
    
    ```bash
    curl -s https://jithox.com/api/agent-preflight/v1/evaluate \
      -H 'content-type: application/json' \
      -d '{"schemaVersion":"jithox.agent-action-preflight-request/v1","action":{"type":"send_message","target":{"kind":"email","id":"customer:EXAMPLE-1"},"summary":"Reply to the customer's question."},"agent":{"id":"my-agent","client":"claude"},"owner":{"ref":"owner:me"},"requestedPermissions":["read","draft_messages","send_external_messages"],"dataClassification":"internal","money":null,"externalSideEffect":true,"reversible":"no","authority":{"kind":"none"},"humanApproval":null,"idempotencyKey":"reply-customer-1-2026-09-10","requestedExpiresAt":"2026-09-10T14:00:00Z"}'
    ```
  • Cursor / Grok CONFIG READY

    Save the rule as a Cursor rule file so every agent session in the project applies it; a Grok-based client that reads project rules uses the same file.

    .cursor/rules/jithox-agent-preflight.mdc
    ---
    description: Check every external action with Jithox Agent Action Preflight before acting
    alwaysApply: true
    ---
    
    Before any action that sends, publishes, buys, submits, accepts, tests or changes something outside the workspace:
    1. POST the planned action to https://jithox.com/api/agent-preflight/v1/evaluate (schema: https://jithox.com/api/agent-preflight/v1/schema).
    2. Act only on ALLOWED_TO_PREPARE. On HUMAN_APPROVAL_REQUIRED, show the owner the actionHash and stop. On BLOCKED or UNAVAILABLE, stop and report the reason codes.
    3. Never execute the external step yourself; Jithox does not execute either. Hand an approved hash to the official connector.
    4. Never put a credential, key or personal detail in the request; the endpoint refuses them.
    
    ```bash
    curl -s https://jithox.com/api/agent-preflight/v1/evaluate \
      -H 'content-type: application/json' \
      -d '{"schemaVersion":"jithox.agent-action-preflight-request/v1","action":{"type":"send_message","target":{"kind":"email","id":"customer:EXAMPLE-1"},"summary":"Reply to the customer's question."},"agent":{"id":"my-agent","client":"claude"},"owner":{"ref":"owner:me"},"requestedPermissions":["read","draft_messages","send_external_messages"],"dataClassification":"internal","money":null,"externalSideEffect":true,"reversible":"no","authority":{"kind":"none"},"humanApproval":null,"idempotencyKey":"reply-customer-1-2026-09-10","requestedExpiresAt":"2026-09-10T14:00:00Z"}'
    ```
  • Any HTTP or CLI agent CONFIG READY

    One JSON request, one JSON answer. No key in this build; the response is no-store and carries the decision, the reason codes and the hash-bound receipt.

    curl
    curl -s https://jithox.com/api/agent-preflight/v1/evaluate \
      -H 'content-type: application/json' \
      -d '{"schemaVersion":"jithox.agent-action-preflight-request/v1","action":{"type":"send_message","target":{"kind":"email","id":"customer:EXAMPLE-1"},"summary":"Reply to the customer's question."},"agent":{"id":"my-agent","client":"claude"},"owner":{"ref":"owner:me"},"requestedPermissions":["read","draft_messages","send_external_messages"],"dataClassification":"internal","money":null,"externalSideEffect":true,"reversible":"no","authority":{"kind":"none"},"humanApproval":null,"idempotencyKey":"reply-customer-1-2026-09-10","requestedExpiresAt":"2026-09-10T14:00:00Z"}'
  • MCP tool (fleet handoff) NOT CERTIFIED

    The MCP fleet lives in another repository owned by another team. The exact tool contract (name, input schema, output schema, decisions) is published in this build's schema document and in docs/handoffs/AGENT_ACTION_PREFLIGHT_MCP_HANDOFF.md, so the fleet can add the tool without inventing anything.

    MCP tool contract
    {
      "name": "evaluate_action_preflight",
      "inputSchema": "https://jithox.com/api/agent-preflight/v1/schema#/request",
      "outputSchema": "https://jithox.com/api/agent-preflight/v1/schema#/result",
      "decisions": [
        "ALLOWED_TO_PREPARE",
        "HUMAN_APPROVAL_REQUIRED",
        "BLOCKED",
        "UNAVAILABLE"
      ],
      "executes": false
    }

Also on the developer hub; in Team Builder (Labs) a plan can require every external action to pass this preflight first.