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}}
RuleWhat it does
closed_throughNo journal may be dated on or before this date.
locked_accountsAccount codes, or the start of codes, the agent may not post to. Bank accounts and equity are the usual ones.
protect_bank_detailsOn 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_belowJournals below this amount post without review. The default, 0, sends every journal to review.
approval_limitsThe largest journal each reviewer may approve, measured on its debit side. * covers everyone not named.
fresh_signin_aboveOff 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_dutiesA reviewer may not approve a draft the agent made on their behalf.
allow_ledger_toolsNames 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.