Okta's free Integrator org is documented with ten active users, reduced per minute rate limits and no paid support, and it deactivates after ninety consecutive days without a sign in (Org defaults). Okta also says that neither the older Developer Edition org nor the Integrator org is meant for production use. So an agent that provisions and deprovisions people is tested against ten users at most, in an org that can switch itself off, with none of the groups, apps and policies of the directory it will actually run against. The Okta world is a stateful Okta mock built for testing agents: the same URLs, the same errors and the same lifecycle rules as the real API, on your machine, verified against the real system.
Okta developer org limits
Offboarding is where an agent's mistakes are quiet and expensive. The user with the same name as the one leaving, the contractor whose access was supposed to end last month, the group that grants an app nobody remembers: none of that fits in ten users, and a developer org has to be rebuilt by hand after every run that deactivates someone. A world is a pseudonymized copy of your own directory, taken when you ask for it: the same users in the same lifecycle states, the same groups and memberships, the same app assignments, under new names. Every run starts from those bytes, in milliseconds, and ends by throwing the world away.
A stateful Okta mock: users, groups, app assignments, lifecycle policies
The world keeps users with their profile and lifecycle state, groups and their memberships, applications and their assignments to users and groups, and the lifecycle policies that govern the transitions. It keeps Okta's rules with them. A user moves from staged to provisioned to active, and from active to suspended or deprovisioned; a user has to be deactivated before it can be deleted, and the agent that skips the step gets the real refusal. An app assigned through a group cannot be unassigned from the user directly. A suspended user keeps every membership. Everything the agent creates or changes stays in the world, so the second request sees what the first one did.
Test your AI agent against Okta
Point the agent's Okta client at the world. Nothing in the agent changes. The path is three commands: the first copies the directory and writes the worlds folder, the second turns your own ticket export into tasks, one per row, with the expected outcome on the rows where you know it, and the third runs the agent three times on fresh copies and writes the report. The three steps take about ten minutes; the GET ACCESS form on this page is where the Okta world starts.
Grade what the agent did, not what it said
A run starts from a mark and ends with a diff: every user whose state changed, every membership added or removed, every app assigned or unassigned, every password reset. The transcript says access was revoked; the diff shows the user deactivated and still assigned to the payroll app through a group. The transcript says the leaver was offboarded; the diff shows the other person with that name deactivated instead. The transcript says the contractor was extended; the diff shows a new user created beside the old one. The report gives every task a verdict and a reason, and replays the worst run to the byte.
Break it on purpose
Okta rate limits by the minute and by endpoint, and an agent working a queue of joiners and leavers will hit the limit at the worst moment. In the world that moment is on your schedule: a 429 on every third call, an outage in the middle of an offboarding, a slow API, an expired token. Does the retry logic deactivate the user twice and delete on the second pass? Does the agent report access revoked when the call never landed? Then move the clock, so the contractor's end date passes, and read the diff again.
Okta test environment for agents, in CI
The same command that runs on a laptop is the CI step the first command wrote. No org to keep alive, no ten user cap: the world starts fresh inside the job, the agent runs every task, the report is the artifact, and nothing leaves the machine. Every world in the catalog takes the same path; Workday, Gmail and Stripe are three more of them, and the docs are the path in full.