Rules
Rules refuse a journal before it reaches the ledger. They are fixed checks, so the same journal is always refused for the same reason. The agent is told why, in words it can act on.
On the Team plan an admin sets the rules in the dashboard. Without a team account they live in books-policy.json in ~/.Koncernify:
{"books": {"closed_through": "2026-09-30",
"locked_accounts": ["19", "2081"],
"protect_bank_details": true,
"auto_post_below": 0,
"approval_limits": {"anna.lind@nordvik.se": 250000, "*": 50000},
"separate_duties": true}}
| Rule | What it does |
|---|---|
closed_through | No journal may be dated on or before this date. |
locked_accounts | Account codes, or the start of codes, the agent may not post to. Bank accounts and equity are the usual ones. |
protect_bank_details | On by default. The agent may not create or change the bank details of a supplier, customer or employee. The Claude Code hook enforces this. Agents on the hosted service can only send journals, so it cannot happen there. |
auto_post_below | Journals below this amount post without review. The default, 0, sends every journal to review. |
approval_limits | The largest journal each reviewer may approve, measured on its debit side. * covers everyone not named. |
fresh_signin_above | Off by default. A journal, or a standing approval, above this amount is approved in the browser by someone who signed in within the last 15 minutes. |
separate_duties | A reviewer may not approve a draft the agent made on their behalf. |
allow_ledger_tools | Names ledger tools, such as create-invoice, that may write without review. The Claude Code hook enforces this. Agents on the hosted service can only send journals, so it cannot happen there. |
Amounts with more than two decimals are always refused, since the ledger would round them and the posted figure would differ from the reviewed one.