Automation · People operations
How to build employee onboarding provisioning
Somebody starts on Monday and spends Tuesday asking for access to things nobody thought to grant. This is the design behind provisioning that does not do that, the prompts that build it, and what production adds.
Built with Tray Headless
- System Workday
- Step Role profile
- Step Sequence to start date
- System Okta
- System Google Workspace
Access comes from a role profile instead of a copied colleague, and grants are timed against day one.
The short answer
What is onboarding provisioning?
Onboarding provisioning breaks into four parts: the HRIS as the trigger instead of a form somebody remembers to fill in, access derived from the role rather than copied from a colleague, a sequence tied to the start date rather than fired all at once, and evidence that each grant happened. Most of these come apart on copying a colleague. Cloning access from whoever sits nearby propagates every over-permission in the company, quietly, forever.
What matters here
- Never clone access from an existing employee. It propagates every over-permission that person accumulated, and nobody ever audits the copy.
- Derive access from a role profile held as data. When the role changes, the profile changes, not a script.
- Sequence around the start date. An account created three weeks early is an unused credential sitting in the open.
- Record evidence per grant, not per person. Audit asks which system, when, and on whose authority.
- Handle the amendments, because start dates move. A plan that cannot absorb a date change becomes a manual process again.
Who this is for
You run IT operations or people operations. Onboarding runs on a checklist somebody maintains, provisioning happens the morning somebody starts, and access requests trickle in for a fortnight afterwards.
How it works in practice
The sequence, from a signed contract to a productive first day.
- 1
The HRIS is the trigger, not a form
A new hire record with a start date begins the process. Nothing depends on somebody remembering to raise a ticket.
- 2
A role profile resolves what access is needed
Department, level and location map to a set of systems and entitlements, held as data rather than in code.
- 3
Grants are sequenced against the start date
Identity and email a few days ahead, everything else on day one, elevated access only after the training it depends on.
- 4
Hardware and licences are reserved, not just requested
A laptop ordered on day one arrives in week three, so it is ordered when the contract is signed.
- 5
Each grant records evidence
System, entitlement, timestamp and the role profile that authorised it, ready for the access review that will ask.
- 6
Date changes replan instead of break
A start date moving by a week moves the whole sequence, and nothing has to be undone by hand.
What provisioning is made of
Provisioning is not a checklist. It is four parts, and the second one is the security decision.
An HRIS trigger
The new hire record with its start date. Anything that starts with a person remembering will eventually be forgotten.
Role-derived access
A profile per role, held as data. Never a copy of a colleague, because a copy inherits every exception that colleague accumulated.
Start-date sequencing
Grants timed relative to day one, not all fired at contract signature. An early account is an unmonitored credential.
Evidence per grant
What was granted, when, and under which profile. Access review is coming and it asks per system, not per person.
The Tray Headless prompts
Paste these into Claude Code or Codex with the Tray Headless plugin installed. Each stage runs on its own. The systems named in them are the worked example rather than a requirement, and every prompt says so.
Once per project, run
/tray-workflows:set-workspace
to pick the workspace these build in. Point it at a sandbox first.
- 1
First, read the two sources of truth
The HRIS knows who, the directory knows what. Both, before anything.
Headless skills
build-workflowUse build-workflow. The systems in play are Workday, Okta, Google Workspace, Jira, Slack, Jamf and Snowflake, or whatever we run in those seats. Before you plan anything, tell me which of them are already authenticated in the workspace, because I do not want a connector stubbed that I have not authenticated. I expect Workday and Okta at minimum. The two that carry the build are Workday and Okta. From Workday I need the worker record with start date, department, job profile, manager and location. From Okta I need groups, applications and how group assignment actually works. Do not assume a mapping between a Workday job profile and an Okta group. Show me both lists and I will map them.
- 2
Build the role profile as data, never as a copy
The single decision that keeps the access model clean.
Headless skills
build-workflowUse build-workflow. Trigger on a Workday worker record with a future start date. Resolve access from a role profile table keyed on department, job profile and location. Each profile lists the systems, the group memberships and the licence types. Do not offer a copy-from-colleague path, and refuse if I ask for one later. Cloning access propagates every exception the colleague accumulated, and nobody ever reviews a copy. If no profile matches the combination, stop and ask. An unmatched role is a profile that needs writing, not a reason to guess.
This is the difference between an access model you can audit and one that drifts. Everything downstream depends on the profile being data somebody owns.
- 3
Sequence it against the start date
Because an account created three weeks early is an open credential.
Schedule grants relative to the start date rather than firing everything at once: start minus 5 days hardware ordered, laptop build requested start minus 2 days identity created but disabled, email provisioned start minus 1 day welcome message with first day logistics day one 09:00 identity enabled, core application access granted day one manager notified that provisioning completed week two elevated or regulated access, only where the required training is recorded as complete An identity created three weeks early and left enabled is a credential sitting in the open with nobody watching it. - 4
Handle the amendments, because they always happen
A plan that cannot absorb a date change becomes a manual process again.
Headless skills
tray-gotchasUse tray-gotchas, then handle these explicitly: Start date moves. Replan the whole sequence rather than firing missed steps immediately. A date moving forward should not dump five days of grants at once. Offer withdrawn before the start date. Reverse everything already granted, and confirm the reversal rather than assuming it. Role changes between signing and starting. Re-resolve the profile and show the difference before applying it. Contractor instead of employee. A different profile with an expiry date attached from the start. Rehire. The old identity may still exist. Never silently reactivate an account with its historical access intact.
- 5
Record evidence, and reconcile against reality
Because the access review asks per system, not per person.
Record for every grant: the system, the entitlement, the timestamp, the role profile that authorised it and the run that performed it. Then reconcile weekly. Compare what the profile says a person should have against what each system reports they actually have, and report both directions: missing grants, and access nobody granted through this process. That second list is the interesting one. It is how manually granted access, which is the access nobody reviews, becomes visible.
- 6
Test it, then hand the profiles to IT
So a new role is a data change, not an engineering ticket.
Run the per-step schema checks and the whole-workflow audit before this touches production. Then open the same workflow in Tray Build so IT operations can maintain the role profiles and the sequence timings in the visual canvas. New roles appear monthly, and none of them should need a coding assistant.
What it connects to
Provisioning reads the people system and writes to everything a person needs.
Workday
Read the new hire with start date, department, job profile, manager and location. The trigger for everything else.
Reads
Okta
Create the identity, assign groups and applications from the role profile, and enable it on day one instead of at signature.
Reads and writes
Google Workspace
Provision the mailbox, calendar and shared drive access the role profile calls for.
Reads and writes
Slack
Create the account, add the role channels, and tell the manager when provisioning is complete.
Reads and writes
Jamf
Pre-stage and enrol the device so it is configured before the start date. Ordering it is procurement, and a laptop ordered on day one arrives in week three.
Reads and writes
Snowflake
Land every grant with its evidence, so the access review is a query rather than six exports.
Writes
Same build, other stacks
The design does not change if you run something else in one of these seats. The same prompts build it against Google BigQuery, Microsoft Teams, Azure Active Directory, SAP SuccessFactors, ServiceNow or Databricks.
Named systems are the ones most teams run, not the only ones that work. Each is an authentication in your Tray workspace, referenced by name, so the workflow never holds a credential. Where we have a connector page, the name links to it.
Running it in production
Provisioning grants access to production systems. It is audited, and it is a security control.
It lives on the platform, not in a terminal window
Grants scheduled days ahead of a start date have to actually fire. They run on the platform with retries, not on a cron somebody set up once.
Every grant is evidence
System, entitlement, timestamp and authorising profile, with the platform audit trail behind it. That is what an access review needs.
Credentials are managed, never in code
Provisioning holds admin rights across the estate. Every one is an authentication in your workspace, and none of them belong in code.
IT owns the role profiles
Profiles and sequence timings open in Tray Build, maintained by the team that owns the access model.
The reconciliation is the control
Weekly comparison of intended against actual access. Manually granted access is the access nobody reviews, and this is how it surfaces.
Questions people ask
Why not copy access from an existing employee?
Because it propagates every exception that person accumulated over years. The copy inherits access nobody remembers granting, nobody reviews it, and the pattern compounds with each new hire.
Why sequence rather than provision everything at once?
Because an identity created at contract signature and left enabled is an unmonitored credential, sometimes for weeks. Identity a couple of days ahead, access on day one, elevated access after the training it requires.
What happens when a start date moves?
The sequence replans. Grants scheduled relative to day one shift with it, and a date moving forward does not dump a week of missed steps at once.
What evidence should provisioning record?
Per grant: the system, the entitlement, the timestamp, the role profile that authorised it and the run that performed it. Access reviews ask per system, so per person is not enough.
Can IT maintain the role profiles without engineering?
Yes. Profiles and timings open in Tray Build, so a new role or a changed entitlement is a data edit by the team that owns the access model.
Vibe-coding app guides
Vibe-code an entire app with Helix
This moves the data between systems. It does not give anybody a screen to work in. Build that app in Claude Code, Codex or Cursor, then deploy and run it governed on Tray Helix. Same kind of guide, same kind of prompts.
How to build an onboarding and offboarding tracker (opens helix.tray.ai in a new tab)
Further reading
Background on the same subject, for the case rather than the build.
Related guides
People operations
How to build employee offboarding deprovisioning
Revoke on the leave date, cover every system instead of the ones you remember, transfer what they owned, and prove it. The Headless prompts that build it.
Customer success
How to build a closed-won to onboarding handoff
Carry what was promised, not only what was sold. Generate the plan from the deal, and start the clock at close. The Headless prompts that build it.
People operations
How to build an HRIS to payroll sync
Sync effective-dated changes, respect the payroll cutoff, hold anything ambiguous instead of guessing, and reconcile every cycle. The prompts that build it.
IT and security
How to build IT service desk fulfilment
Catalogue the requests worth automating, fulfil the safe ones end to end, and route the rest with everything already gathered. The prompts that build it.
People operations
How to build an org hierarchy sync
Propagate a reporting change everywhere it decides something, handle the reorganisation, and never leave an approval routed to somebody who left. The prompts.
Legal and compliance
How to build policy attestation tracking
Assign from the HRIS continuously, version what was accepted, chase without nagging everybody, and keep evidence a person can point at. The prompts.
People operations
How to build an ATS to HRIS sync
Move a signed offer into a worker record without rekeying, keep candidate data out of HR, and trigger onboarding from the start date. The prompts.
People operations
How to build a training completion sync
Assign from role rather than a spreadsheet, carry completions into the HRIS, and produce evidence per person instead of a percentage. The Headless prompts.
Last reviewed September 2026.