Let AI agents act for your company. Within your rules, with proof.

Himmel is the infrastructure layer for AI agents to check business rules before they act. Plug it in wherever your agents live, in any app and on any model, through our SDK, MCP server or API.

Why Himmel

Today, companies can’t trust AI agents to act for them.

So their agents only suggest, and a person does the work again. Here is what changes with Himmel.

Prompts drift.
Your playbook’s owner confirms what each rule means, once. The same facts always get the same answer.
Limits hide in code.
Your playbook’s rules, in plain words, in one place every agent checks, counted across all of them.
Mistakes repeat at machine speed.
Each action is checked before it happens. Above a limit, the person your rules name decides.
Nothing proves what an agent did.
Every answer is kept: which agent, for whom, under which rule and version, and who approved it.
No one sees every agent.
One map of your agents: who answers for each, where it acts, and how each action was answered.

Step 1

Upload your playbook. Confirm its rules.

Send it as PDF, Word or Markdown, or start from our template for an online shop’s support. Himmel drafts each rule with worked examples, and you confirm each one in plain words. Nothing runs until you do.

  • Each rule cites its clause
  • Names are hidden before anything is drafted
  • A changed rule is confirmed again
  • Your rule owner writes no code

Step 2

Your agent asks first.

Before a refund, a discount or a credit, it sends the facts: what, how much, for which customer. Himmel answers from your rules, with the clause it rests on. Four answers, never a guess.

Step 3

A person approves where your rules say.

When a rule names your team lead, Himmel emails them. They approve or refuse, signed in, and the agent asking again gets their answer.

  • Only the person named decides
  • The email itself decides nothing
  • A request waits a week at most

Step 4

Every action, on the record.

When anyone asks why an agent did something, from your auditor to your customer, one record answers: which agent, for whom, under which rule and version, and who approved it. Keep the check_id with what you did: years later, it gives back the same answer.

Same facts. Same rules. Same answer.

  • Every agent tied to the person who answers for it, and switched off in one step
  • One map of your agents: who answers for each, where it acts, how each action was answered
  • The answers as a file for your auditor, with the facts each was checked on
  • An action taken against your rules is flagged to you

Why did the agent refund this?

For builders

Your agent works for many companies. Each on its own playbook.

Without Himmel, you hard-code each customer’s limits or trust a prompt. With it, you connect once: each customer’s owner confirms their own rules, and you code none of them.

An account per customer

Open one for every company you serve. Its owner joins from one email.

A playbook to start from

Our template for an online shop’s support. Each shop sets its own limits and approvers.

Their rules, their people

Each owner confirms their own rules. The people those rules name are asked by email.

Proof for every customer

Every action your agent took for them, kept in their own account.

Setup

One call in your tool. Or no code at all.

Put one check inside the tool that acts, add the MCP server by configuration, or call the API from any language. Your agent reads its rules at the start of each run, asks before each action, and reports what it did.

The SDK, inside your tools

Python or JavaScript. The check sits in the code of the tool that acts, so your agent cannot act without asking. For anything that moves money.

MCP, no code

Add Himmel’s MCP server with your agent’s own key. Quickest to try, though the model chooses whether to ask.

Or the API

POST /v1/check from any language: facts in, one of four answers out.

A key per agent

Every check says which agent asked, and in which run.

Facts, not opinions

Send amounts, dates and order numbers, never “this seems reasonable”.

Safe retries

Send it again with the same Idempotency-Key: the same answer, counted once.

PythonThe tool that gives a refund asks first
from datetime import date

from himmel import Determined, Himmel

himmel = Himmel()
PLAYBOOK = "policy.example_shop.customer_support"


def give_refund(ticket, order, amount_minor):
    answer = himmel.check(
        PLAYBOOK,
        {
            "action_date": date.today().isoformat(),
            "action": "refund",
            "customer": {"customer_number": order.customer_number},
            "amount": {"amount": amount_minor, "currency": "EUR"},
            "order_total": {"amount": order.total_minor, "currency": "EUR"},
            "delivered_on": order.delivered_on.isoformat(),
            "reported_damaged": ticket.reported_damaged,
        },
        ref=ticket.number,
        run=ticket.id,
        on_behalf_of=ticket.assignee_id,
    )
    if isinstance(answer, Determined) and answer.outcome == "allowed":
        refund = payments.refund(order, amount_minor)
        himmel.report(answer, executed=True, ref=refund.id)
        return "refunded"
    himmel.report(answer, executed=False, reason="refused_by_caller")
    return f"not given: {answer.state}"
MCP serverAdded by configuration: a URL and the agent’s own key
https://api.gethimmel.com/v1/mcp

Authorization: Bearer hk_live_...
Himmel-Run: ticket-4471
POST /v1/checkYour support assistant asks before it refunds €25
SHORT_NAME=example_shop   # your account's short name
TODAY=$(date -u +%F)
curl https://api.gethimmel.com/v1/check \
  -H "Authorization: Bearer $HIMMEL_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: case-4471-refund" \
  -d @- <<EOF
{
  "rule_set": "policy.$SHORT_NAME.customer_support",
  "transaction": {
    "ref": "CASE-4471",
    "status": "proposed"
  },
  "facts": {
    "action_date": "$TODAY",
    "action": "refund",
    "customer": { "name": "Kim Example", "customer_number": "C-1002" },
    "amount": { "amount": 2500, "currency": "EUR" },
    "order_total": { "amount": 6000, "currency": "EUR" },
    "delivered_on": "$TODAY",
    "reported_damaged": false
  }
}
EOF

With the template switched on: allowed, with a check_id. Ask about €35 and it goes to a person.

Ask us for access

Any playbook

Not only refunds.

Anything a playbook says about what may be done, by whom, how much and how often, counted across every chat and every agent.

  • Support

    A customer who wants to cancel: up to 30 free days first, up to 60 if they say no. More needs the head of retention.

  • Sales

    Payment terms beyond 30 days need finance. Beyond 60 days, never.

  • Marketing

    At most three emails a week to one customer.

  • Finance

    A supplier whose bank details changed in the last 30 days is paid only after a named person confirms.

  • HR

    An offer above the salary band needs the head of HR.

  • Engineering

    No changes to production during a freeze.

See every use case

What it is not

It checks. It never advises.

No advice

Every answer cites a rule you confirmed. The opinions stay yours.

No actions

Himmel answers. Your agent’s own code acts on the answer.

No AI in the answer

The same facts always give the same answer. AI only helps draft.

FAQs

The short answers.

Do we have to change our systems?
No. One check for each kind of action your agent takes, inside the tool that takes it.
How does the agent know about Himmel?
You connect it once: the SDK in its tools, the MCP server, or the API. It reads its rules from Himmel at the start of each run.
Can the agent skip the check?
Not where the SDK’s check sits inside the tool that acts. Through MCP alone, the model chooses whether to ask.
What if the agent goes ahead anyway?
What it reports is checked too, and an action taken against your rules is flagged to you.
Can we show an auditor why an agent did something?
Yes. Every answer is kept with its facts, the rule and its version, the day and who approved it, and an admin downloads the answers as a file. Read again by its check_id, an answer gives the same result.
Can an answer be changed afterwards?
Never. A changed rule is a new version, and earlier answers keep citing theirs. When a later action changes an earlier answer, Himmel gives a new one and keeps the old.
Why not put the playbook in the prompt?
An agent reading your playbook decides what it means every time, and may decide differently twice. Here you decide once, and every answer cites it.
What about our people?
They confirm the rules, approve where the rules name them, and see everything the agents did.
What if our playbook is wrong?
What it does not cover, and a rule that keeps sending cases to a person, show up in your review queue. You decide what to change.
Who acts on Himmel’s answer?
Your agent’s own code. Himmel answers, and never takes an action itself.

Your agents are ready. Are your rules?

Bring one playbook to a call. We show you a check from request to receipt.