Our approach
Quietly thorough.
Two people who read all of your policies so you don't have to, and who would rather tell you something uncomfortable than round it off. Here is what that actually commits us to, because the phrase on its own is worth nothing.
What it means in practice
Six commitments, each one checkable.
Every one of these is either enforced by code, visible in the report, or something you can test us on during an engagement. None of them require you to trust us.
-
Read-only is a property of the code, not a promise in a proposal
Marketing says read-only; we make it structurally true. Warden's collector only ever issues read calls, the HTTP layer exposes no write verbs at all, and a test fails the build the moment anyone adds one. Then, before collecting, the tool decodes the token it was actually issued and refuses to run if that token carries write permissions it did not ask for. That second part is the one that catches reality, because the usual cause of over-privileged access is a well-meaning admin granting a role instead of a scope.
-
Filtering is a responsibility, not a favour
The reason assessments get ignored is volume. So we take ownership of the noise budget: a finding has to earn its place by being both true and actionable in your tenant, and the report records what we chose not to raise. What we never do is filter by quietness. The full report sits behind the summary, always, including the findings we thought were noise, because a summary that cannot be audited is a press release.
-
Absence of evidence is a finding
If we could not read something, that becomes a numbered Limitation with the reason attached. A 403 on role definitions is reported as "we could not read role definitions", never as "no privileged roles found". Empty results are treated as suspicious until proven otherwise, because zero Conditional Access policies can mean a tenant with none, or a token that cannot see them, and guessing in the flattering direction is precisely how a broken assessment reads as a pass.
-
AI does the reading; humans do the judging
Language models are good at exactly the part humans cannot sustain: holding several hundred policies in mind at once, noticing that an exclusion appears in a policy nobody mentioned, reading a whole tenant's group structure for a naming convention. They are not good at deciding what your organisation should prioritise, so they do not. The AI analyses and drafts. A person signs it off. When the AI stage cannot run, the output degrades to an explicit template instead of going silent, so you always know which kind of text you are holding.
-
Evidence must survive a disagreement
Findings carry dated evidence blocks with the exact Graph request that produced them, so your identity team can run the query themselves. This exists for the moment a finding is contested internally, which is the moment most assessment reports die. A finding you can independently confirm is a finding that gets fixed.
-
Say the uncomfortable thing early
If your identity posture is worse than expected, you will hear it in the first conversation, not in a paid deliverable at the end. If your tenant is genuinely in decent shape we will say that too and we will not stretch a Medium into a High to justify the invoice. Two people building a reputation on identity assurance do not get a second chance at this.
How an engagement runs
Small steps, each one cheap to abandon.
Nothing here requires a large commitment up front. If a stage tells you enough, stopping is a legitimate outcome and we will say so.
-
A conversation with a question in it
You tell us the specific thing you are worried about, and we tell you honestly whether an assessment is the right answer or whether a two-hour investigation would do. We have talked people out of engagements. It is cheaper for you and better for us than selling the wrong work.
-
Access, and a look at what we'd be reading
You set up read-only access on your own tenant — we never ask for admin rights, and we can work from a lab tenant first if you would rather not start with production. Once connected, Warden reports what it can and cannot read before any analysis runs, so scope surprises land on day one instead of week three.
-
Collection, then offline analysis
One collection pass, cached. Everything after that happens against the local cache, which means no repeated API traffic against your tenant and no throttling your production sign-ins. This is also why re-analysis after a change is nearly free.
-
Findings, reviewed by a human
Each rating gets a reason. Anything that rests on an assumption says what the assumption is. Anything needing business context goes into the client-questions list rather than being guessed at in either direction.
-
The short answer and the full report
A summary you can put in front of an exec committee, plus the register, evidence and limitations behind it. We would rather you read the summary and challenge it than file the full report unread.
-
Revoke us, then re-run us
Delete the credential when we are done. When you want a re-run after remediation, that is a fresh ten-minute setup and a cached comparison, and the report will show what actually moved rather than what we hoped would move.
We are two people. We cannot staff a twelve-week programme, we have no 24/7 desk, and if one of us is ill your engagement moves by a week. If you need a logo on the front page or a delivery office in six countries, buy that — it is a real need and we are not competing with it. What you are buying from us is the specific attention of the person who actually did the reading.