Teams & Tenants¶
The Teams & Tenants section (/teams) manages the hierarchical knowledge governance model. It controls which users share access to AI-generated knowledge and how knowledge can be promoted through organizational layers.
Knowledge Hierarchy¶
MoE Sovereign organizes knowledge across four levels:
Knowledge created during a conversation is assigned to the user's private namespace (user:{id}) by default. It remains invisible to all other users until explicitly promoted by a privileged role.
| Level | Namespace Pattern | Visible to |
|---|---|---|
| Private | user:{user_id} |
Only the creating user |
| Team | team:{team_id} |
All team members |
| Tenant | tenant:{tenant_id} |
All tenant members |
| Global | (null) | Everyone |
How Namespaces Work
When a user is added to a team, the system automatically grants a graph_tenant permission for team:{team_id}. This means the Neo4j GraphRAG engine includes that team's knowledge in all future queries for that user — without any code changes required.
Teams¶
Creating a Team¶
Click Team erstellen and fill in:
| Field | Required | Description |
|---|---|---|
| Name | ✓ | Display name (e.g. "Backend Engineering") |
| Slug | ✓ | URL-safe identifier, auto-filled from name |
| Tenant | – | Optionally assign the team to a Mandant |
When a team is assigned to a tenant, all members of that team automatically receive access to the tenant's knowledge namespace as well.
Team Roles¶
| Role | Capabilities |
|---|---|
member |
Reads team knowledge; contributes own knowledge to team via promotion |
lead |
All member capabilities + can promote team knowledge to tenant namespace |
Adding Members¶
Click Mitglied hinzufügen on a team card. Enter the User ID (e.g. usr_abc123) and select a role.
Finding User IDs
User IDs are shown on the Users page next to each user's name.
When a member is added:
- A graph_tenant: team:{id} permission is granted automatically
- The user's Valkey/Redis cache is invalidated so the new namespace takes effect immediately (next request)
Team Budget¶
Each team can have a shared token budget. When a team budget is configured:
- Every request by a team member checks the team's remaining budget before routing to any LLM
- Tokens are deducted from both the individual user's budget and the team pool
- If the team pool is exhausted, requests return HTTP 429 regardless of individual user limits
Configure budgets via the wallet icon (⊙) on the team card.
| Field | Description |
|---|---|
| Monthly limit | Max tokens per calendar month across all team members |
| Daily limit | Max tokens per calendar day across all team members |
Tenants (Mandanten)¶
Tenants represent organizational units (e.g. a client, department, or subsidiary). A tenant groups multiple teams under a shared knowledge namespace.
Creating a Tenant¶
Click Mandant erstellen. Provide a name and slug. The tenant gets a unique tenant:{id} namespace in Neo4j.
Tenant Roles¶
| Role | Capabilities |
|---|---|
member |
Reads tenant knowledge |
admin |
All member capabilities + can promote tenant knowledge to Global |
Adding Members¶
A tenant can receive members in two ways:
- Direct user: Add a single user directly with a role
- Entire team: Add all current members of a team at once — each team member receives
graph_tenant: tenant:{id}
Team membership changes after adding
Users added to a team after the team was added to a tenant do not automatically receive tenant access. Add them directly to the tenant, or remove and re-add the team membership.
Promoting Knowledge¶
The Wissen promoten tab transfers entities from one namespace to the next level in the hierarchy.
Who Can Promote?¶
| Action | Required Role |
|---|---|
| Own namespace → any team/tenant | Any authenticated user |
| Team namespace → tenant or global | Team lead |
| Tenant namespace → global | Tenant admin |
| Any → any | Platform admin |
How to Promote¶
- Enter the source namespace (e.g.
user:abc123orteam:xyz) - Enter the target namespace (e.g.
team:xyz,tenant:def456, or leave empty for Global) - Optionally list comma-separated entity names to promote only specific knowledge
- Click Promoten and confirm the dialog
The number of updated Neo4j entities is shown in the result.
Promotion is not reversible via the UI
Once entities are promoted to a wider namespace, they are visible to all members of that namespace immediately. To revert, use the Knowledge Management page or the Neo4j browser directly.
Technical Reference¶
Permission Flow¶
add_team_member(team_id, user_id)
→ INSERT team_memberships
→ grant_permission(user_id, "graph_tenant", "team:{team_id}")
→ sync_user_to_redis(user_id) # invalidates Valkey cache
GraphRAG Query-Time Filtering¶
Every GraphRAG context query receives the user's tenant_ids list:
The Cypher query filters accordingly:
Global entities (tenant_id IS NULL) are always included.
Database Tables¶
| Table | Purpose |
|---|---|
teams |
Team definitions with optional tenant assignment |
team_memberships |
User ↔ Team with role |
tenants |
Tenant (Mandant) definitions |
tenant_memberships |
User or Team ↔ Tenant with role |
team_budgets |
Shared token pool per team |