Skip to content

Labs · advanced

Plan a safe team of bots around Jithox tools

Most people only need to connect the AI they already use. This workshop is for the rest: say what you want to achieve, get up to four specialised bots with a job each, choose verified tools for them, set what they may do, and test the plan safely before anything real happens.

External actions never run automatically

Sending, publishing, changing production, security testing and spending money always wait for your explicit approval of that exact action. This builder designs, validates and simulates a plan. It does not host one, and it executes nothing.

Step 1 of 5. 4 things still need an answer before the plan can be built.

1. Your goal

Say what you want to achieve. A template proposes the bots and the safe rules; you can change everything after.

Start from a template, or start blank

One or two sentences. Say what done looks like. Up to 600 characters.

Only used to warn when a tool’s rules may not apply to you.

External actions never run automatically. This builder starts no bot, sends nothing, changes nothing, tests nothing, pays nothing and calls no tool. Status: preview local build.

Developer / Advanced: the JSON behind this plan

The design as the API receives it, and the compiled blueprint once it is valid. Nothing here is required on the main path.

{
  "schemaVersion": "jithox.agent-team-design/v1",
  "templateId": "blank",
  "teamName": "",
  "goal": "",
  "roles": [],
  "approvalRules": {
    "ownerApprovalFor": [
      "send_external_messages",
      "publish",
      "change_production",
      "run_security_tests",
      "spend_money"
    ],
    "internalApproverRoleId": null
  },
  "budgets": {
    "currency": null,
    "totalBudgetMinor": null,
    "perActionBudgetMinor": null
  },
  "limits": {
    "timeLimitMinutes": 240,
    "maxAttempts": 3
  },
  "stopConditions": [],
  "securityAuthorization": null
}

What this page never does

  • It never starts a bot, and it never runs one for you. Your existing AI agent stays the brain.
  • It never sends a message, publishes anything, changes a live system, tests a target or pays anyone.
  • It never stores your plan: the blueprint exists only in your browser and in the file you download.
  • It never asks for an account, an organisation or a card, and it never embeds a credential.

Later, and not available today

The five things below are not built. They are listed so you know where this could go, not because you can have them. There is nothing to buy on this page.

  • Jithox Hosted Team not available

    Running a designed team on Jithox infrastructure. Not built.

  • Always-on execution not available

    A team that keeps working while you are away, day and night. Not built.

  • Shared team monitoring not available

    One view of what every bot did, for you and your team. Not built.

  • Automatic receipts and recovery not available

    Signed receipts per action and restart after failure. Not built.

  • Extra bots and extended policies not available

    More than four roles and richer rules. Not built.

Would a hosted team that keeps working while you are away be useful to you? Say so through the contact page. It is the only way we measure interest, and it commits you to nothing.

Tell us you would use a hosted team

For developers and agents

Five versioned, compute-only routes; the same schema the wizard uses; status preview_local_build. Execution is not enabled: every route designs, validates, compiles, lists or simulates, and none can run a bot, call a tool, send, pay or store.

Five-minute quickstart

  1. 1. Read the schema and the shelf: GET /api/agent-team/schema/v1 and GET /api/agent-team/tools/v1.
  2. 2. Start from a template design (the wizard’s JSON, or the example below), add a live tool by capability id, assign it to a bot.
  3. 3. POST /api/agent-team/validate/v1 until valid: true; every blocker has a stable code and a field path.
  4. 4. POST /api/agent-team/compile/v1: the hashed blueprint, the mission prompt and the download name come back. Same input, same hash.
  5. 5. POST /api/agent-team/simulate/v1 with the blueprint and one task; read the seven steps and the simulation receipt.

Capability selection and compile (curl)

curl -s https://jithox.com/api/agent-team/compile/v1 \
  -H 'content-type: application/json' \
  -d '{"schemaVersion":"jithox.agent-team-design/v1","templateId":"research_decision","teamName":"Research and decision team","goal":"Compare suppliers and let me approve the best choice.","roles":[{"roleId":"researcher","kind":"researcher","name":"Researcher","why":"Someone has to gather the facts before anyone acts on them. The researcher reads and reports; it changes nothing.","responsibilities":["Collect the facts the goal needs, with a source and a date for each.","Say plainly what could not be found or verified.","Hand findings to the builder or reviewer; never act on them directly."],"permissions":["read"],"ownsActions":[]},{"roleId":"reviewer","kind":"reviewer","name":"Reviewer","why":"No result leaves the team unreviewed. The reviewer checks the work against the goal and the rules, and never executes an external action itself.","responsibilities":["Review every result against the goal, the constraints and the evidence.","Refuse anything unverified, contradictory or outside the allowed actions.","Approve internally before any request goes to the owner."],"permissions":["read"],"ownsActions":[]},{"roleId":"operator","kind":"operator","name":"Decision preparer","why":"The decision is yours. This role writes it up as a proposal with the evidence attached and waits for your answer.","responsibilities":["Write the decision proposal with the options, the trade-offs and the evidence.","Draft any message that the decision needs; never send it.","Ask the owner to approve the choice and record the answer."],"permissions":["read","draft_messages"],"ownsActions":[]}],"approvalRules":{"ownerApprovalFor":["send_external_messages","publish","change_production","run_security_tests","spend_money"],"internalApproverRoleId":null},"budgets":{"currency":"EUR","totalBudgetMinor":2000,"perActionBudgetMinor":100},"limits":{"timeLimitMinutes":240,"maxAttempts":3},"stopConditions":["The owner has approved or rejected the proposal.","The owner says stop."],"securityAuthorization":null,"capabilitySelections":[{"capabilityId":"einvoice","assignedRoleId":"researcher"}]}'

Validate (curl)

curl -s https://jithox.com/api/agent-team/validate/v1 \
  -H 'content-type: application/json' \
  -d '{"schemaVersion":"jithox.agent-team-design/v1","templateId":"research_decision","teamName":"Research and decision team","goal":"Compare suppliers and let me approve the best choice.","roles":[{"roleId":"researcher","kind":"researcher","name":"Researcher","why":"Someone has to gather the facts before anyone acts on them. The researcher reads and reports; it changes nothing.","responsibilities":["Collect the facts the goal needs, with a source and a date for each.","Say plainly what could not be found or verified.","Hand findings to the builder or reviewer; never act on them directly."],"permissions":["read"],"ownsActions":[]},{"roleId":"reviewer","kind":"reviewer","name":"Reviewer","why":"No result leaves the team unreviewed. The reviewer checks the work against the goal and the rules, and never executes an external action itself.","responsibilities":["Review every result against the goal, the constraints and the evidence.","Refuse anything unverified, contradictory or outside the allowed actions.","Approve internally before any request goes to the owner."],"permissions":["read"],"ownsActions":[]},{"roleId":"operator","kind":"operator","name":"Decision preparer","why":"The decision is yours. This role writes it up as a proposal with the evidence attached and waits for your answer.","responsibilities":["Write the decision proposal with the options, the trade-offs and the evidence.","Draft any message that the decision needs; never send it.","Ask the owner to approve the choice and record the answer."],"permissions":["read","draft_messages"],"ownsActions":[]}],"approvalRules":{"ownerApprovalFor":["send_external_messages","publish","change_production","run_security_tests","spend_money"],"internalApproverRoleId":null},"budgets":{"currency":null,"totalBudgetMinor":null,"perActionBudgetMinor":null},"limits":{"timeLimitMinutes":240,"maxAttempts":3},"stopConditions":["The owner has approved or rejected the proposal.","The owner says stop."],"securityAuthorization":null}'

Simulate (TypeScript)

const compiled = await fetch("https://jithox.com/api/agent-team/compile/v1", {
  method: "POST",
  headers: { "content-type": "application/json" },
  body: JSON.stringify(design), // the same shape the schema document describes
}).then((r) => r.json());

const simulated = await fetch("https://jithox.com/api/agent-team/simulate/v1", {
  method: "POST",
  headers: { "content-type": "application/json" },
  body: JSON.stringify({
    blueprint: compiled.blueprint,
    task: { description: "Check the counterparty's VAT number.", action: "read", capabilityId: "einvoice" },
  }),
}).then((r) => r.json());

// simulated.simulation.status is "allowed" | "blocked" | "ready_for_approval";
// simulated.simulation.guarantees.externalActionsPerformed is always 0.

Blueprint JSON, abridged

{
  "schemaVersion": "jithox.agent-team-blueprint/v1",
  "teamId": "team_<16 hex>",
  "teamName": "...", "goal": "...", "templateId": "research_decision",
  "roles": [{ "roleId": "researcher", "kind": "researcher", "allowedActions": ["read"], "forbiddenActions": [...] }],
  "approvalRules": { "ownerApprovalFor": [...], "selfApproval": "forbidden", "externalActionsAutomatic": false },
  "capabilities": { "schemaVersion": "jithox.agent-team-capabilities/v1", "items": [{
    "capabilityId": "einvoice", "productId": "einvoice", "assignedRoleId": "researcher",
    "operationClass": "read_only_lookup", "availability": "live", "costClass": "trial_then_paid",
    "verifiedPrice": { "amountMinor": 10, "currency": "EUR", "per": "accepted_call", "source": "tool-pricing-catalog ..." },
    "budgetRequired": true, "approvalRequired": false, "receiptRequired": true,
    "limitations": [...], "sourceOfTruth": [...], "lastVerifiedAt": "..."
  }] },
  "createdAt": "<iso>", "blueprintHash": "<sha256>"
}

Stable error codes

invalid_body · payload_too_large · invalid_input · too_many_roles · unknown_permission · unknown_capability · capability_unavailable · blueprint_invalid · invalid_team_id · invalid_blueprint_hash · rate_limited

Versioning

  • routes: Every route carries /v1 in its path. A breaking change ships as /v2 beside it; /v1 keeps answering for at least six months after.
  • design: jithox.agent-team-design/v1
  • blueprint: jithox.agent-team-blueprint/v1
  • capabilities: jithox.agent-team-capabilities/v1 — an optional, additive section; blueprints without it stay valid and keep their hash.
  • tools: jithox.agent-team-tools/v1
  • hash: sha256 over canonical JSON (sorted keys, no whitespace) of the blueprint without createdAt and blueprintHash.

Limitations

  • Compute-only: nothing is stored, nothing is executed, no model provider is called, no credential is embedded.
  • At most four roles, nine permissions and eight curated tools per plan; one request body is at most 32 KB.
  • Rate limit per origin (see the schema document); a 429 carries Retry-After.
  • A tool reference copies the shelf's truth at compile time (availability, price, verification instant); re-compile to refresh it.
  • The simulation proves what the plan would decide, never that anything ran.

Also documented on the developer hub; the machine-readable contract is in /api/agent-context/v1 and /api/capabilities/v1.