OverviewLast 7 days · updated just now

You're protected.

This week Aggrete checked 1,284 requests from your team's AI assistants and prevented 12 that would have crossed a line. 6 protection packs are on, covering 214 people across Drive, Slack, HR and finance. Nothing needs you.

All clear
Requests checked
1,284
Prevented
12
would have leaked or over-shared
Protection packs
6 / 8
on and enforcing
Coverage
100%
of connected systems

Trends

Last 30 days
Requests checked per day
Refusals per day
Decision split
Requests by domain
Refusals by rule
Prevented by pack

What we prevented this week

12 eventsView all
A layoff list was stopped before it formed
M. Okafor's assistant had already opened budget and personnel records for the same 4 people, then asked for the on-call rota. Aggrete refused it. Nothing was fetched.
Code of conductCOC-HR-004 · pre-call deny
2h ago
A trading-desk assistant was kept off deal documents
Someone on the trading desk asked their assistant to open the advisory folder for an active deal. Aggrete blocked it: the two sides must stay separated.
Financial info-barrierwall · research↔trading
6h ago
3 ID numbers were hidden from an answer
A benefits query returned records containing social-security numbers. Aggrete masked them before the assistant could read them.
Secrets & PIIredact · ssn ×3
Yesterday
A private repo leak was blocked after a poisoned message
An assistant read a public issue that tried to trick it into copying a private repository out. Aggrete stopped the export.
Prompt-injection shieldflow · tainted→egress
Yesterday
An export-controlled design file was withheld
A contractor account requested a controlled engineering document. Aggrete refused it: that account is not cleared to receive it.
Export controlwall · person-status
2d ago

Needs your attention

Nothing right now. Aggrete handled everything automatically. We'll surface anything that needs a human decision here.

Turn on what you need to protect.

Each pack is a set of rules written for you. Switch one on and the proxy enforces it immediately, across every assistant. No policy to write.

6 on

Advanced · what a pack is

A pack is a named set of rules in coc.yaml, drawn from real regulation and incidents. Toggling one writes pack_state.json and the proxy reloads; enforcement is deterministic, no model in the path. Each card above shows its rule count and pack id. The rules use the engine types:
domain_joinself_comparisonwallmin_groupentity_budgetflow
Every decision is recorded in a tamper-evident log.
People and how close they got

CSV for spreadsheets, JSON for your SIEM, an evidence pack (summary, tamper-evident chains and policy versions) for auditors, or print to PDF for leadership.

Turn a policy document into rules.

Drop an employee handbook, code of conduct or any policy document (PDF, DOCX, Markdown, any language). Aggrete drafts rules you can edit, preview against your real history, and publish. Nothing is enforced until you publish.

New here?Download the exampleA sample code of conduct you can drop in.
Published versions

Advanced · rule types

Drafted rules use the engine's enforce types:
domain_joinself_comparisonwallmin_groupentity_budgetflow
Preview replays each candidate against your real decision history; publish snapshots the live policy so you can diff and roll back. The generated coc.yaml is exactly what the proxy enforces.

Connectors

Put a system behind the proxy from here. Add a connector, store its token (encrypted, never shown again), test the connection, and enable it. Reads are fenced to a boundary and governed by your packs; a write is governed as egress.

Add a connector

Advanced · under the hood

Each connector is an MCP server the proxy launches over stdio. Reads become <type>__search_<boundary> and read_ tools; a write is named with a write verb so the proxy governs it as egress. Secrets are encrypted at rest with Fernet and injected only into the connector process. Wire it in proxy.config.yaml under upstreams: and map its tools to a policy domain under domains:.
WhenPersonToolAsked forDecisionRuleHash
Admin actions

Advanced · tamper evidence

Both logs are hash-chained: each row stores the prior row's SHA-256 and its own. Verify the decision log with aggrete-audit audit.jsonl and the admin log with the Verify button above. CSV/JSON export carries ts, user, tool, domain, stage, decision, rule, write, hash for your SIEM.

Alerts

Notify a webhook when a threshold trips. A Slack incoming-webhook URL works directly. The highest-value trigger is a refusal spike.

Add an alert

Advanced · channels

Metrics evaluate over the current day:
denieswarningschecked
Webhook and Teams POST JSON to an incoming-webhook URL; email uses SMTP set on the host via ALERT_SMTP_HOST/PORT/USER/PASS/FROM. A Slack incoming-webhook works as a plain webhook.

Exceptions

Request a time-boxed exception to a rule. An approver who is not the requester decides it; approved exceptions auto-expire. Break-glass grants immediately for an emergency and is fully logged.

Request an exception

Advanced · segregation of duties

The requester can never approve their own exception (enforced per row). Approved exceptions are time-boxed and auto-expire; break-glass grants immediately but is logged as exception.break_glass in the admin action chain. Only Approver and Owner can decide.

API tokens

Named, scoped tokens for automation. A token carries a role and is shown once at creation. Use it as a Bearer token on the API described below.

Create a token

Advanced · scopes

A token is a non-human principal carrying one role, checked by the same permission matrix as a user. Only the SHA-256 hash is stored; the value is shown once. Revoke instantly with DELETE /api/tokens/{id}. Prefer a narrow role (Auditor for read-only pipelines).

API reference

openapi.json

Users & roles

Add people, set a password, and assign a role to restrict what they can see and do. When any user has a password (or you set AGGRETE_CONSOLE_AUTH=1), the console requires sign-in.

Add a user

Roles & permissionswhat each role can do

Advanced · how passwords are stored

Passwords are hashed with PBKDF2-SHA256 (200k iterations, per-user salt); only the hash is stored in users.json, never the password. Every request re-checks the role against the permission matrix. Seed the first owner with AGGRETE_CONSOLE_ADMIN=email:password, or require sign-in even before a password with AGGRETE_CONSOLE_AUTH=1.

SSO & social login

Let people sign in with your company identity provider or a social account, and map their groups to console roles. Configure Google, Microsoft, GitHub, or any OIDC provider.

Connector integrity

Every upstream tool is fingerprinted the first time the proxy sees it. A later change to its description or schema (a rug pull), or a description carrying hidden instructions (poisoning), is flagged here. Re-trust a change to accept the new definition.

Advanced · how re-trust works

Fingerprints live in the proxy's pins file. Re-trusting drops a tool's pin, so the proxy re-pins its current definition on its next reconnect. This is separate from the audit chain integrity shown on the Audit page.

Policy simulator

Try a sequence of data-domain accesses against the current policy and see what the proxy would decide, without touching any system. This runs the same engine the proxy runs.

Advanced · what this checks

The simulator replays your steps through pre_call then post_call on a throwaway state, exactly as the proxy would, and stops at the first refusal. It answers "would this be allowed?" without fetching anything. Entity-overlap rules assume the steps concern the same people.