Skip to content
Centriu
Centriu Axis

Internal AI-Agent System Access Triage Automation: Routing Fixed by Real Tool Inventory, Not by Job Title

Centriu runs an internal multi-agent team chat where each specialist agent has its own role and its own specific set of tools. Asking that chat "who has access to [a given system]?" used to route to whichever agent's job title sounded closest to the topic — and a real incident exposed exactly why that's unreliable: a security-focused agent, asked who had access to a marketing-strategy module, answered that it did, despite holding zero tools for that module. The fix gives the routing decision a real, computed fact to work from instead of a plausible-sounding title: every agent's roster entry now carries the actual modules its available tools touch, derived directly from its tool list rather than guessed from its job description, and a new triage rule requires that a question about a specific system be routed only to an agent whose computed list actually contains it — regardless of how closely a different agent's role might sound related. The correction is proven by an executed test at migration time confirming the security-role agent's own computed list does not include the module in question, while the agent that actually holds the relevant tool does.
Computed from real tool access
Proven against the real incident
Team collaborating around a table with a laptop
Routed by real tool access, not by job title.

Why routing "who has access to X" by job title is a plausible guess, not a fact

A multi-agent team chat that routes questions to whichever specialist sounds most relevant is a genuinely useful shortcut most of the time — most questions really do belong to the agent whose role obviously covers them. The shortcut breaks down precisely on the question type where it matters most to get right: "who has access to this system?" is a factual question with one correct answer, and a role description was never meant to answer it. A security specialist reasonably sounds like it might have broad access to many systems by virtue of the job — but sounding relevant and actually holding the tool are two different things, and only one of them is true.

How the underlying problem shows up before you fix it

A team-chat routing decision picks the agent whose title sounds closest to the topic, rather than the one that can actually demonstrate access to it.

An agent answers a direct question about its own access confidently and incorrectly, because nothing in its own prompt or its own roster data distinguishes "sounds like my job" from "is literally in my tool list."

A follow-up request gets passed from the wrongly-chosen agent to a second agent, who discovers the real gap only by trying to act on the request, wasting a full round trip before the actual problem surfaces.

A roster used for routing decisions lists each agent's title and a general summary, but nothing that reflects what that agent's tools actually touch — so a routing decision has no factual data to check itself against.

The same misrouting risk exists for every system in the roster, not just one — nothing in the original design prevented the identical mistake from happening again for any other module.

Why a role-based roster is the wrong data source for a system-access question

A roster built to describe agents in human terms — title, summary, general area of ownership — is the right data for routing a general question about who handles a topic area. It's the wrong data for a question with a hard factual answer, because a title is a description someone chose, while actual tool access is a fact recorded in the system's own permission tables. Any routing decision built entirely on the descriptive layer will occasionally produce a wrong answer that sounds completely reasonable, precisely because titles are written to sound reasonable — the gap only becomes visible when someone asks the specific factual question the description was never meant to answer.

How Centriu Axis gave the triage decision a fact to route on instead of a guess

The defect surfaced through a real conversation, not a test case: an owner asked the internal team chat who had access to a specific module, and triage handed the question to the security specialist agent, who answered that it had access — while holding zero tools for that module. The very next message, asking that same agent to actually use the access, forced the truth out: it had none, and passed the request along to a second agent, who confirmed the same thing a second time before anything could actually happen.

The fix changes what data the routing decision has available, not just the prompt wording around it. A new database function computes, for every agent in the roster, the real list of modules its currently available tools touch — read directly from the same permission tables that decide what an agent can actually call, not from any manually maintained description. The computation deliberately excludes the handful of baseline modules every agent shares, so the resulting list only shows what actually distinguishes one agent's access from another's. That computed list is attached to each roster entry as a new field the triage model sees on every routing decision, alongside the existing title and summary it already had.

The triage prompt then adds one explicit rule addressing exactly the failure that occurred: a question about a specific system should be routed only to whichever agent's computed list actually contains it, and an agent without that system in its list should not be chosen to answer — even when its job title sounds like a reasonable fit. This is paired with a matching rule in each individual agent's own instructions: an agent may only claim it has access to a system if a tool for that system is literally present in its own tool list, never inferred from how closely its job description sounds related to the topic.

The fix doesn't rely on the prompt rule alone to hold up over time — an executed proof embedded in the same migration checks the real, computed output directly: it looks up the security-role agent's own roster entry and asserts its module list does not contain the module from the original incident, then looks up the agent that actually holds the relevant tool and asserts its list does contain it, raising an exception if either check fails. That means a future change that accidentally broke the computation, not just the prompt, would be caught the next time this migration's tests run.

What is actually built today

A database function computing each agent's real accessible-modules list directly from its current tool permissions, excluding the small set of baseline modules every agent shares.

That computed list attached to every roster entry the triage decision sees, alongside the existing title and general summary.

A triage prompt rule requiring a system-specific question to route only to an agent whose computed module list actually contains that system — a role description alone is not sufficient.

A matching rule in each agent's own instructions: claim access to a system only when a tool for it is literally present in that agent's own tool list, never inferred from job title.

An executed proof at migration time confirming the specific real-world failure (a security-role agent wrongly appearing to have access) cannot recur silently — checked directly against the computed data, not just described in a prompt.

The same mechanism applying uniformly to every system in the roster (Vesper, Orbit, Atlas, Run, Dash, Helix and beyond), rather than a one-off patch scoped to the single module involved in the original incident.

The same question, asked again after the fix (illustrative scenario, not a real client)

Someone asks the internal team chat who has access to a given system. Before the fix, the answer depended on which agent's job title sounded closest to the topic. After the fix, the routing decision checks each agent's actual, computed tool-derived access list — and an agent whose role sounds related but whose tool list doesn't include that system is passed over in favor of the one whose list actually does.

What changes operationally

A question about which specialist can actually act on a given system gets an answer grounded in the same permission data that governs what an agent can really do, not in how convincing its job title sounds. That removes a specific, already-observed failure mode — an agent confidently claiming access it doesn't have — and does it for every system in the roster at once, rather than only for the one module involved in the incident that surfaced the gap.

When this is not the right fit

This fix is specific to routing questions about system-level access inside Centriu's own internal multi-agent team chat — it is not a general-purpose access-control mechanism for a client-facing product, and it does not change what tools any individual agent actually holds, only how correctly a routing decision reflects those existing tools. A team looking for a general recommendation engine that suggests which agent to talk to for open-ended, non-system-specific questions will find that this rule is scoped narrowly to the "who has access to X system" case, not a wholesale replacement of the existing role-based routing for every other kind of question.

Routing on a job title vs. routing on a computed, tool-derived fact

Routing a factual access question by job title treats a human-written description as if it were a permission record — reasonable most of the time, and silently wrong exactly when it matters most. Centriu's fix replaces that guess with a value computed directly from the same tool-permission data that governs what an agent can actually call, checked by an executed test against the specific real incident that exposed the gap, so the routing decision for a system-access question is now grounded in a fact rather than a plausible-sounding title.

Related systems

Main system: Centriu Axis. Complementary when relevant: Centriu Vesper.

What it does NOT do

  • Does not let an agent's job title alone determine whether it is routed a system-access question — the routing decision requires that system to appear in the agent's own computed, tool-derived access list.
  • Does not allow an agent to claim access to a system in its own responses unless a tool for that system is literally present in its own tool list — access is never inferred from role description.
  • Does not compute the accessible-modules list from a manually maintained description — it is derived directly from the same permission tables that decide what an agent can actually call.
  • Does not scope the fix to only the one module involved in the original incident — the same computed-access rule applies uniformly across every system in the roster.
  • Does not change what tools any individual agent actually holds — this fix corrects how accurately a routing decision reflects those existing tools, not the tools themselves.
  • Does not leave the fix unproven — an executed test at migration time checks the real computed output for both the agent that was wrongly chosen and the agent that should have been chosen.

Security and governance

The accessible-modules computation reads directly from the same tool-permission tables that govern what each agent can actually call, so a routing decision can never grant more apparent access than an agent genuinely has. Every agent action remains subject to the platform's existing organization-scoped audit trail. Any personal or business data referenced in a routed conversation remains subject to Brazil's LGPD (Law No. 13,709/2018). Full detail on access control lives at /governanca and /iso.

Pricing and contracting

Included at no extra cost with any Centriu contract. Values and terms come from the official pricing table at /precos (Centriu's central source — never restated here).

Frequently asked questions

What was the actual incident that exposed this defect?

An owner asked the internal team chat who had access to a specific module. Triage routed the question to a security-specialist agent, who answered that it had access despite holding zero tools for that module — discovered only when asked to actually act on it.

How does the fix know which modules an agent really has access to?

A database function computes each agent's accessible-modules list directly from its current tool permissions — the same data that governs what it can actually call — rather than from any manually written job description.

Does this fix apply to every system, or just the one from the original incident?

Every system in the roster. The rule requiring a computed match, not a role guess, is not scoped to any single module.

Is the fix just a prompt instruction, or is it actually checked?

Both — the triage prompt carries the new routing rule, and an executed proof at migration time checks the real computed data directly for the specific agent involved in the original incident, raising an exception if the check fails.

Does this change what tools any agent actually has?

No — it changes how accurately the routing decision reflects the tools an agent already has, not the tools themselves.

What does Centriu Axis cost?

It is sold by subscription with a published starting price — exact current values are on the central pricing page.

See how Centriu Axis routes internal AI-agent questions by real access, not job title

Reach our commercial team directly, or leave your details below — we'll follow up with guidance for your case.

Sources

  1. Centriu Axis — public product page — Centriu, 2026-07-20 · link(primária)
  2. Centriu Axis — public factsheet (API, JSON) — Centriu, 2026-07-21 · link
  3. Centriu Vesper — public product page — Centriu, 2026-07-20 · link(primária)
  4. Law No. 13,709/2018 — Brazil’s General Data Protection Law (LGPD) — Presidência da República (Brazil), 2018-08-14 · link

Last material update on .

By · AI-assisted production, with human review