# Jazyk politiky

> Pravidla, která rozhodují o allow, hold a veto, plus rozpočty a podmínky.

Reading time: 12 min. Source: https://www.voidagent.tech/cs/docs/policy

Politika je běžný modul, nikoli DSL. Exportuje výchozí objekt politiky, kontrolují ho typy z vašeho vlastního toolchainu a může si importovat, co potřebuje. Pravidla se vyhodnocují v pořadí a rozhoduje první shoda.

> Import na začátku této ukázky pojmenovává balíček uvnitř produktového repozitáře, ve verzi 0.1.0, který je soukromý a nepublikovaný. Vyřeší se z klonu toho repozitáře a nedá se nainstalovat z registru, takže ukázka ukazuje tvar, ne řádek, který by se dal překopírovat.

## Tvar

```void.policy.ts
import { policy, R } from "@void/policy";

export default policy({
  skip: (call) => call.effect === "read",
  rules: [ /* ... */ ],
  budget: { irreversible: { perAgentPerDay: 2 }, onExhausted: "read_only" },
});
```

## Objekt volání

| pole | typ | význam |
| --- | --- | --- |
| call.tool | string | plně kvalifikované id nástroje, například stripe.refunds.create |
| call.effect | read \| write | vypočteno z mapy nástrojů adaptéru |
| call.class | R0 \| R1 \| R2 \| R3 | třída vratnosti vypočtená v preflight |
| call.domain | string | logické seskupení, například payments nebo crm |
| call.records | number | odhadovaný počet dotčených záznamů |
| call.systems | string[] | systémy, které volání změní |
| call.agent | string | identita agenta, který volání provedl |
| call.args | object | argumenty po redakci |

## Rozhodnutí

- allow: propustíte volání, zaznamenáte ho a plán kompenzace zůstane v platnosti.
- hold: běh se zastaví a vyžaduje schválení. Volání se nikdy neodešle, dokud nerozhodne člověk.
- veto: odmítnutí před zápisem. Agent dostane strukturované odmítnutí, s kterým může dále pracovat.

## Podmínky

Pravidlo může vyžadovat, aby něco platilo, než volání dovolí. Nejčastější podmínkou je pořízený snímek, který z jinak riskantní hromadné aktualizace udělá R0.

```void.policy.ts
{
  when: (call) => call.records > 100 && call.class <= R.R1,
  then: "allow",
  require: ["snapshot"],
  reason: "wide write, snapshot first",
}
```

## Rozpočty

```void.policy.ts
budget: {
  irreversible: {
    perAgentPerDay: 2,
    perWorkspacePerDay: 8,
    // optional: a different cap for a specific agent
    overrides: { "growth-outbound": 6 },
  },
  onExhausted: "read_only",   // or hold_for_human, veto
}
```

> Rozpočty se vynucují už v preflight, takže se agent nikdy neobjeví, že je mimo rozpočet, až uprostřed vícekrokového zápisu.

## Testování politiky

```shell
$ void policy test --fixtures ./fixtures
  + 42 fixtures, 42 decisions matched expectations
  + 0 rules unreachable
  ! rule 'bulk external send' never matched in fixtures
```

---

This document is the markdown form of https://www.voidagent.tech/cs/docs/policy, published for agents that read
text rather than a rendered page. It is generated from the same data the page
renders, so the two cannot disagree.

