---
title: "Works-council mode"
description: "Usage and cost figures about people only for teams of five or more, a person's own figures to that person, and tenant totals otherwise. On by default."
canonical_url: "https://docs.oz0.ai/govern/works-council-mode"
---
# Works-council mode

> Usage and cost figures about people only for teams of five or more, a person's own figures to that person, and tenant totals otherwise. On by default.

For: tenant admins and governance reviewers.

Works-council mode limits access to figures aggregated over people. Each job is still charged to its starter and team, as described in [quotas per user and team](https://docs.oz0.ai/spend/budgets-and-quotas). The mode starts on for every tenant and stays on until a tenant admin turns it off.

## What is hidden, and from whom

A *figure about people* is a number summed or counted over a person's jobs, spend, approvals, questions or chats. While the mode is on:

<table>
<thead>
  <tr>
    <th>
      Figure
    </th>
    
    <th>
      Who sees it
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      A person's own figures (<code>
        user:
      </code>
      
      , an API key, an operator certificate)
    </td>
    
    <td>
      Only that person
    </td>
  </tr>
  
  <tr>
    <td>
      A team's figures
    </td>
    
    <td>
      Everyone who may read the tenant, when the team has at least the threshold's <strong>
        people
      </strong>
      
       now (five by default)
    </td>
  </tr>
  
  <tr>
    <td>
      A smaller team's figures
    </td>
    
    <td>
      Nobody; they are in the tenant's totals
    </td>
  </tr>
  
  <tr>
    <td>
      A service identity's figures, such as a flow's webhook (<code>
        service:webhook/&lt;flow>
      </code>
      
      )
    </td>
    
    <td>
      Everyone who may read the tenant: it is not a person
    </td>
  </tr>
  
  <tr>
    <td>
      The tenant's totals
    </td>
    
    <td>
      Everyone who may read the tenant
    </td>
  </tr>
</tbody>
</table>

A team's size counts its `user:` members at the time you look, not its API keys or service identities. A team that drops below the threshold is hidden at the next query.

Where a figure needs that many people to have done something, such as the deciders behind the approver statistics, the quality scorecard's decision figures, an evidence pack's decision figures or a rollout's denial signal, only accounts (`user:`) count: an API key or an operator's certificate is never one of them. Their decisions stay in the figures, so a figure made of decisions with fewer people than the threshold behind it, none included, is hidden.

This applies to:

- `oz0 quota usage`, which lists your own row, the teams that are large enough and service identities, then a `(tenant total)` line and a note that the mode is on;
- the console's *Cost* page (*By user and team*, with a *Tenant total* row) and its *Teams* page, where a hidden team's or person's spending shows as *hidden*;
- the admin API's `GetOwnerUsage`, which answers the rows the caller may see, the tenant's `total` and the mode as it applied (`works_council`);
- every figure about people added later: budget warnings, scorecards, exports. They all ask the same rule.

### What is counted about approvals

[Approvals](https://docs.oz0.ai/agents/approvals/statistics#approver-statistics) are figures about people too, and stricter than spending: while the mode is on, a group's approval figures need at least the threshold's people **among those who decided**, not only among its members.

<table>
<thead>
  <tr>
    <th>
      Figure
    </th>
    
    <th>
      Who sees it
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      A team's approver statistics (decisions, approval and edit rates, decision times, the share decided within seconds of being shown, streaks, load, test approvals caught)
    </td>
    
    <td>
      Readers of the tenant's usage, when the team has at least the threshold's people and at least that many of them decided in the period; test approvals caught also need that many people among those who decided the team's test cards
    </td>
  </tr>
  
  <tr>
    <td>
      The tenant's approver statistics
    </td>
    
    <td>
      The same readers, once at least the threshold's people decided in the period
    </td>
  </tr>
  
  <tr>
    <td>
      Your own approver statistics
    </td>
    
    <td>
      Only you
    </td>
  </tr>
  
  <tr>
    <td>
      Another person's
    </td>
    
    <td>
      Nobody, ever: no list, export or finding names a person
    </td>
  </tr>
  
  <tr>
    <td>
      An agent's test approvals caught, and its agreement per action class (its deployment profile and scorecard)
    </td>
    
    <td>
      Readers of the inventory or the scorecard, when at least the threshold's people decided them
    </td>
  </tr>
  
  <tr>
    <td>
      The approval pattern finding
    </td>
    
    <td>
      Readers of findings: it names the team's queue (while the team passes the rule), never a person
    </td>
  </tr>
</tbody>
</table>

Test approvals themselves are off by default, and turning them on is a governance change with a reason; whether your employee representatives must agree first is for you to find out.

## What it does not cover

- Records. The audit trail, a budget request with who asked and who decided, who started a job on its page, and lists of jobs are records, not figures, and are shown as before. The audit trail stays complete in this mode: a refused start's entry keeps the quota that stopped it and its figures as the limit wrote them, a small team's too.<br />

So `audit.read` is the control: give it, through the admin role or a custom role, only to the people your agreement with the employee representatives names, such as the tenant's administrators or an auditor, and never as a way for team leads to read their teams' figures.
- Enforcement. Quotas per person and per team are still enforced. A [spend refusal](https://docs.oz0.ai/reference/spend-refusals) names the quota it hit and its figures only to a caller who may read them: a team under the threshold is withheld from its own members too.
- Figures that are not about people, such as cost by agent, model or node and the [insights](https://docs.oz0.ai/fleet/queues).

The mode does not stop someone from working a person's figure out of two groups built for it, such as a team of five and the same team with one more person, or the tenant's totals minus the teams shown. Changes to teams are in the [audit trail](https://docs.oz0.ai/govern/audit-trail) as `team.member`.

## Show or change it

```bash [Terminal]
oz0 tenant works-council default                       # show it
oz0 tenant works-council default --threshold 10        # teams of ten or more
oz0 tenant works-council default --off --reason "agreed with the employee representatives on 2026-10-01"
oz0 tenant works-council default --on                  # on again
```

In the console: **Govern › Privacy › Works council**. The tenant's readers see the setting; only its admins change it.

- The threshold is at least five. Raising it applies at once; lowering it needs a reason.
- Turning it off needs a reason (at most 500 characters). With the mode off, the tenant's readers see what each person's and each team's jobs spent and started, as before this mode existed.

## What is audited

<table>
<thead>
  <tr>
    <th>
      Action
    </th>
    
    <th>
      When
    </th>
    
    <th>
      Detail
    </th>
  </tr>
</thead>

<tbody>
  <tr>
    <td>
      <code>
        tenant.works_council
      </code>
    </td>
    
    <td>
      Every change
    </td>
    
    <td>
      on and the threshold before and after, whether it loosened, the reason given
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        tenant.works_council.off
      </code>
    </td>
    
    <td>
      Turning it off
    </td>
    
    <td>
      the reason
    </td>
  </tr>
  
  <tr>
    <td>
      <code>
        tenant.works_council.on
      </code>
    </td>
    
    <td>
      Turning it on again
    </td>
    
    <td>
      the threshold
    </td>
  </tr>
</tbody>
</table>

```bash [Terminal]
oz0 audit --action tenant.works_council.
```

## After an upgrade

Tenants that existed before the upgrade get the mode on, so admins no longer see per-person rows on the Cost page, Budgets' quotas or in `quota usage` until one of them turns it off with a reason. See [Upgrades](https://docs.oz0.ai/fleet/upgrades/data-migrations#works-council-mode-is-on-after-the-upgrade).

<note>

Works-council mode is a setting the product offers. Whether it, or the mode turned off, meets the rules on employee representation that apply to you is for you and your advisers to decide.

</note>


## Sitemap

See the full [sitemap](https://docs.oz0.ai/sitemap.md) for all pages.
