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.
How it works
Playbook in. Checked actions out.
- 1
Upload your playbook
Himmel turns it into rules. You confirm each one in plain words.
- 2
Your agent asks first
Before each action it sends the facts, and Himmel answers from your rules.
- 3
A person approves
Where your rules name someone, Himmel emails them to decide.
- 4
Every action on the record
Which agent did what, for whom, under which rule, and who approved it.
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
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.
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}"https://api.gethimmel.com/v1/mcp
Authorization: Bearer hk_live_...
Himmel-Run: ticket-4471SHORT_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
}
}
EOFWith the template switched on: allowed, with a check_id. Ask about €35 and it goes to a person.
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.
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.