Trust & AI safety

What the AI is allowed to do is a written list.

Karatry's assistant reads your workspace and drafts your work. Which operations it can reach at all isn't a matter of prompting or good behaviour — it can only call tools somebody wrote and registered, every operation in the product carries a written decision the build won't let you skip, and everything that moves money or stock is stopped behind a click you have to make. Here is that architecture, in plain terms, with every number counted from the code rather than remembered.

Where these numbers come from. Every figure on this page was counted from Karatry's own source on 11 August 2026, at commit 200cc04. They are the real counts, not rounded for effect — and they will drift as the product grows, which is exactly why the date and the commit are printed here rather than left off. If a number stops matching the product, tell us and we'll recount the page.

The list

Every operation in Karatry is classified. Most say no.

An ERP is a few hundred operations — void a payment, delete a customer, reprice a catalog, ship an order. The only useful question about an AI feature is which of those it can reach. Ours has an answer, because the answer is written down in two places somebody has to edit by hand: the list of tools that exist at all, and a decision recorded against every single operation.

220 operations, decided one at a time

Karatry has 220 server operations — the functions behind the buttons in the product. Each one carries an explicit line recording whether the assistant may reach it: 193 are blocked, 13 are exempt — sign-in, sessions and multi-factor, flows that are never an AI surface in any tier — and 14 are reachable. On every build, a test reads the operations straight off disk and fails if a single one is missing from that file, or if the file still names one that has been removed. So a new operation cannot arrive AI-callable by accident: someone has to write the decision down before it merges, and the standing instruction written into the file is to write blocked.

The count that matters is not the 14. Six of those fourteen are the money and stock ones — record a payment, ship an order, raise an invoice, confirm or create a sales order, register a piece into stock — and they are reachable only as proposals that a person approves on a card. They cannot execute inside a conversation.

  • 193 blocked — deletes, refunds, credit notes, voids, billing, catalog repricing, platform administration
  • 13 exempt — sign-in, sessions, MFA: never exposed to the assistant at all
  • 14 reachable, of which 6 are money or stock and need your click
  • No generic "run any function" call exists — the assistant can only invoke tools a person wrote and registered, 24 of them today
And how the data itself is isolated →
Server operations, classified
counted 11 Aug 2026
Total classified220
Blocked from the AI193
Auth / session / MFA13
Reachable by a tool14
…of which money or stock6 — your click only
What runs, and what waits

Three tiers. Only two of them move on their own.

Every registered tool has to declare a blast-radius tier, and the tier is mandatory — there is no default to fall back on. The tier, not the model's judgement, decides whether anything actually happens.

Reads and reversible drafts run. Money and stock never do.

Karatry registers 24 tools: ten read-only, eight reversible internal writes, and six that touch money or stock. In an ordinary conversation the read tools and the reversible-write tools execute directly — that's what makes the assistant useful — and every write of either kind lands in the same audit trail as a human's, attributed to the person who asked for it. The six money-and-stock tools do not execute in a conversation. Not on any turn, not under any prompt: the code returns a card instead of running them.

  • Read (10) — stock coverage by style, AR and credit exposure, open work orders, product, customer and vendor lookups, and its own saved notes
  • Reversible write (8) — log an interaction, create a customer, vendor, style, stock item or repair record, save a remembered fact, append a note to a dossier. Internal, undoable, no money and nothing sent outside
  • Human approval (6) — confirm a sales order, record a payment, raise an invoice, ship an order, create a sales order, register a piece into stock
  • Each tool is bounded by your role before it runs, and the operation underneath checks the same permission again
Registered tools by tier
24 total
Read-only10 — run directly
Reversible writes8 — run, and audited
Money or stock6 — card only
Tools with no declared tierNone — it won't compile
Money tools that self-executeZero

And when the turn has read something you didn't write

There is one case where even a reversible write shouldn't be trusted: a turn in which the assistant has ingested business data — a document you uploaded, the free text on a record, the result of an action just approved. Text like that can carry instructions aimed at the model. Karatry detects that condition on the server, from the message envelope it built itself, before the first model round; it is set once and never re-read, so nothing the model or a tool says later can switch it off. While it holds, the eight reversible-write tools stop running directly and stage for approval too — so on those turns, nothing writes without a click either.

  • Detected from the server-built envelope, not from anything the model says
  • Uploaded attachments count as untrusted, so any turn carrying one is treated the same way
  • The downgrade is deterministic — the same input always produces the same decision
  • The card you then see says plainly that it was held for approval
On a turn that ingested business data
automatic
Read toolsStill run
Reversible writesHeld for approval
Money or stockHeld, as always
Decided byThe server, before round one
Can the model clear it?No
The approval card

The card is a signed instruction, not a screenshot.

When the assistant proposes something that moves money or stock, you get a card describing exactly what will happen. Behind that card is a token — and the token, not the conversation, is what executes.

What you approve is what runs

The token is signed with HMAC-SHA256 against a server-side secret, and it carries the exact tool and the exact validated input you are approving. Where a tool has to resolve your request against the database first — which customer, which style, which piece — that resolution happens before the token is signed, and the summary you read is generated from the same resolved object that gets signed. There is no path where the card describes one thing and the token means another. When you approve, the endpoint re-checks the signature, re-checks your role, and re-validates the input against the tool's schema before anything is written.

Three independent limits sit on that token, and a card has to satisfy all three:

  • Ten minutes. The token carries an expiry ten minutes from issue and is refused after it. A card left open over lunch is already dead.
  • One use. Approving records the token's id in the database under a unique constraint, so replaying an approved card fails outright. Nothing runs twice.
  • One workspace. The token records the workspace it was minted in and is refused unless that still matches yours — so if an account is moved between workspaces inside those ten minutes, the old card cannot be redeemed in the new one.

Declining is recorded too: the decline and the token's consumption commit in a single transaction, so a rejected proposal leaves an audit row rather than leaving no trace at all.

Anatomy of one approval token
per proposal
SignatureHMAC-SHA256
Valid for10 minutes
Times redeemableOnce
Redeemable inOnly the issuing workspace
Re-checked on approvalSignature, role, input
The spend brake

A runaway loop costs you a day, not a quarter.

An assistant that can call tools can call a great many of them. Karatry meters every model call per workspace per day and stops when the day's budget is spent — a ceiling, not a surprise invoice.

One counter per workspace, reset every day

Workspaces running on Karatry's own AI key get a daily token ceiling: 2,000,000 tokens a day by default, and 200,000 a day during the free trial — the trial costs you nothing, so its downside is bounded separately. Embeddings, the background indexing that lets search understand what you meant rather than what you typed, run against their own separate counter of 2,000 a day, so a runaway re-index can never eat the conversation budget. Both reset at midnight UTC. When a ceiling is reached the assistant says so plainly, tells you it resets tomorrow, and nothing else in Karatry stops working.

  • 2,000,000 tokens a day by default; 200,000 a day while you're on the free trial
  • 2,000 embeddings a day, counted separately so the two can't starve each other
  • A workspace can carry its own ceiling that overrides the default — it's a lever on our side, not a switch in your settings, so ask if your shop needs more headroom
  • Every call that spends tokens is written to an append-only usage ledger — provider, model, tokens, estimated cost — including the ones that error out or get abandoned halfway, so partial spend still lands on the meter
Daily ceilings on the platform key
per workspace
Tokens, subscribed2,000,000 / day
Tokens, on trial200,000 / day
Embeddings2,000 / day
Counter resetsMidnight UTC
What happens at the ceilingAI pauses. Karatry doesn't.
Bring your own key

Or run the AI on your own account entirely.

You don't have to use ours. Point Karatry at your own provider with your own key, and the calls go out on your bill, at your provider's price, with no markup from us in between.

Your key, your provider, at cost

Karatry works with Anthropic, OpenAI, Google, or any OpenAI-compatible gateway. Your key is stored encrypted at rest with AES-256-GCM and never displayed back to you — the settings screen shows a masked hint of its last four characters and nothing more. Karatry still writes those calls to your own usage ledger so you can see the volume, but books them at zero cost, because you already paid your provider for them.

Two of the gates that apply to our key don't apply to yours. The tighter trial ceiling and the stop that comes with a read-only workspace both check first whether you have a key of your own, and skip if you do — bringing your own key is a feature of every plan, including a workspace whose trial has ended and gone read-only. That's about the AI budget only: a read-only workspace still can't make new business writes, and the assistant's write tools hit exactly the same block your own screens do. And a workspace with its own key is still metered against a daily ceiling of its own, so the brake stays a brake.

  • Anthropic, OpenAI, Google, or an OpenAI-compatible gateway
  • Stored with AES-256-GCM; shown back only as a masked four-character hint
  • Your calls, your provider's bill — ledgered at zero cost on our side
  • Included on every plan, and it's why one seat is $30 rather than $30 plus tokens we marked up
What a seat costs →
Your own provider key
every plan
Stored asAES-256-GCM, encrypted
Shown back to youMasked hint only
Billed by us at$0 — you paid the provider
Still ledgeredYes, for your visibility
Trial & read-only AI budget gatesSkipped for your key
Fair questions

What we are — and aren't — claiming.

Can the assistant move money on its own?

No. The six tools that touch money or stock are approval-tier, and an approval-tier tool never executes inside the conversation — the code returns a card instead of running it. The only route to execution is the approval endpoint, and that endpoint demands a token with a valid signature, an unexpired clock, an unused id, and a matching workspace. Fail any one of the four and nothing runs.

So nothing at all happens without me clicking?

That would be an overstatement, and we'd rather you had the accurate version. Read tools run on their own — that's the point of asking a question. So do the eight reversible internal writes: creating a customer record, logging an interaction, saving a note. They're audited, undoable, and they never touch money, stock, or anything that leaves the building. Money and stock are the line, and that line is absolute.

What stops a prompt hidden in one of my own documents from steering it?

Two things, and neither depends on the model noticing. First, the boundary is what's reachable: no prompt can conjure a tool that isn't registered, and no prompt can make an approval-tier tool self-execute. Second, when a turn has ingested business data or an attachment — exactly the case where a hidden instruction could arrive — the reversible writes are automatically downgraded to the approval rail too. That decision is made by the server before the model's first round, from the envelope the server built, so it isn't something a clever instruction can talk its way out of.

Does the assistant see other businesses' data?

No. Its tools go through the same tenant-scoped data layer and the same role permissions as the screens you use by hand — a tool inherits the permission of the operation it wraps, checked before it runs and again inside the operation. If your role can't do something manually, it can't be done through the assistant either. The security page covers the isolation itself.

What are you deliberately not claiming?

That the model is always right, and that no prompt could ever talk it into proposing something daft. We can't promise either, and a vendor who does is selling you a feeling. What we're claiming is narrower and checkable: the set of operations it can reach is fixed by a list of tools somebody had to write, and no operation reaches the product without a written decision the build refuses to let anyone skip; the ones that move money or stock cannot execute without your click; and the click is bound to a signed, ten-minute, single-use, single-workspace token. The safety is in the reach, not in the model's good judgement.

How do I verify any of this?

Karatry isn't open source, so we're not going to pretend you can go and read the file — which is precisely why this page carries the exact counts, the date they were counted, and the commit they were counted at, instead of adjectives. Ask us a pointed question by email and we'll answer with the code in front of us, or walk through it on a call. And every number here gets recounted from source when the page is revised — it is never copied forward from the previous version.

These numbers will change as you build. Then what?

The counts will, and this page gets recounted and re-dated when they do. The mechanism won't: a new operation fails the build until someone classifies it, a new tool won't compile without declaring its blast radius, and the tier — not the model — decides whether it can act.

One honest caveat about this page. Counts on a marketing page go stale the moment an engineer merges something, and a stale number is indistinguishable from a made-up one. That's the whole reason this page prints the date and the commit rather than a confident round figure — so you can see how fresh it is and ask us if it isn't. The mechanisms described above don't move; the four numbers do.

Try the assistant on your own books.

30 days of the full product, on your own data, with no credit card and nobody to call first.

Start free — no card →