Automation · IT and security
How to build IT service desk fulfilment
Half the queue is the same six requests and each one is done by hand. Below is the model behind fulfilling them automatically, the prompts that build it, and the parts that only bite once it is live.
Built with Tray Headless
- System Slack
- Step Catalogue item
- Step Check eligibility
- Step Fulfil or route
- System Okta
Only requests that are safe, reversible and fully specified fulfil automatically; everything else routes with the context already gathered.
The short answer
What is IT service desk fulfilment?
There are four parts to IT service desk fulfilment: a catalogue of request types with the fields each one needs, eligibility checked before anything is granted, automatic fulfilment for the requests that are safe and reversible, and everything else routed with the context already gathered. The mistake that costs most is trying to automate everything. Two thirds of a queue is usually six request types, and automating those well beats automating all of them badly.
What matters here
- Automate the top six request types properly, not everything partially. Volume concentrates far more than people expect.
- Only auto-fulfil what is safe, reversible and fully specified. Everything else routes to a person with the context attached.
- Check eligibility before granting. Entitlement by role beats an approval nobody can judge.
- Deflect before you fulfil. If the answer is written down, showing it costs less than doing the work.
- Measure the share fulfilled without a human, not tickets closed. That is the number that changes the queue.
Who this is for
You run IT operations or service management. The queue is full of password resets, access requests and software installs, each one handled manually by somebody who could be doing something harder.
How it works in practice
The path from somebody needing something to having it.
- 1
The request is raised from a catalogue
Each item asking for exactly what fulfilment needs, so the first reply is never a question.
- 2
Deflection runs first
If the answer exists in documentation, show it rather than paying somebody to paste the link.
- 3
Eligibility is checked against role and policy
Entitled by role fulfils; not entitled routes for approval with the reason.
- 4
Safe requests fulfil end to end
Group added, licence assigned, distribution list joined, with the change recorded.
- 5
Everything else routes with context attached
Requester, role, manager, asset, history. Not a bare description.
- 6
The outcome is recorded against the catalogue item
So the automation rate per item is visible and improvable.
What fulfilment is made of
Four, and the third is where the judgement sits.
A request catalogue
One entry per request type, with the fields fulfilment needs. A free text box guarantees the first reply is a clarifying question.
An eligibility check
Role, policy and licence availability, evaluated before anything is granted. Entitlement beats an approval nobody can assess.
Safe auto-fulfilment
Reversible, low blast radius, fully specified. Anything else routes, and that boundary is the design.
Enriched routing
Everything the fixer would have looked up, attached. Most handling time is research rather than resolution.
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
Set up, then find where the volume actually is
Volume concentrates far more than anybody expects.
Headless skills
build-workflowUse build-workflow. The systems in play are Jira Service Management and Okta, or whatever we run in those seats. Before building anything, analyse the last six months of tickets and group them by what they were actually about, not by the category somebody selected. Show me the top twenty by volume, with median handling time and how often each was reassigned. Automating the top six properly beats automating twenty badly, and the list is almost always shorter and more boring than people expect.
Sort by volume times handling time, not volume alone. A rare request that takes an hour can be worth more than a frequent one that takes two minutes.
- 2
Build a catalogue that asks for what fulfilment needs
A free text box guarantees a round trip.
Headless skills
build-workflowUse build-workflow. Build a catalogue item per request type in the top list, each asking for exactly what fulfilment requires: Access to a system: which system, which level, for how long, why Software install: which software, which machine, business justification if licensed Distribution list: which list, and whether they need to post or only receive New starter kit: start date, role, location, manager Pre-fill everything from the directory: requester, manager, team, location, device. Never ask for something the system already knows, and never present a field somebody has to guess at. Let me add catalogue items without a deployment. The list changes constantly and it is the part everybody else wants to change.
- 3
Deflect, then check eligibility
If the answer is written down, showing it is cheaper than doing the work.
Before fulfilling anything, search the documentation and recently resolved requests and show the likely answer. Track how often that deflects, because that number decides whether the documentation is worth maintaining. Then check eligibility instead of asking for approval: Is this role entitled to this by policy Is a licence available, and what does it cost Does the request conflict with anything, such as segregation of duties Has this person had it before and had it revoked Entitled by role fulfils immediately. Not entitled routes to the system owner with the reason and the policy quoted, which is a far better conversation than a bare approval request.
- 4
Fulfil only what is safe to fulfil
The boundary between automatic and routed is the whole design.
Headless skills
tray-gotchasUse tray-gotchas, then auto-fulfil only where all of these hold: Reversible: the change can be undone in minutes Low blast radius: it affects one person, not a group or a system Fully specified: every field needed is present and valid Entitled: policy already permits it for this role Within limits: licence available, spend below a threshold Everything else routes. Do not stretch the boundary to raise the automation rate. An automatically granted permission somebody should not have costs far more than the ten minutes it saved. Record every automatic fulfilment as a change, with what was granted and under which entitlement, because these are still access changes and they appear in an access review.
- 5
Route the rest with the research already done
Most handling time is looking things up, not fixing.
For anything that routes to a person, attach everything they would have looked up: requester, role, manager, location, their devices, their current access to the system in question, their last five requests, and whether anybody else asked for the same thing this week. Then report by catalogue item: volume, share fulfilled without a human, median time to fulfil, deflection rate, and reassignment count. Automation rate per item is the number that matters. Tickets closed rises with headcount and tells you nothing, and the item with high volume and low automation is always the next thing to build.
- 6
Validate, then hand the catalogue to IT
Because the catalogue is never finished.
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 add catalogue items, change eligibility rules and move the auto-fulfil boundary in the visual canvas. New request types appear every month and none of them should need an engineer.
What it connects to
Requests arrive where people are and fulfilment happens where the access lives.
ServiceNow
Read the service catalogue and its request templates, create the request, and close it with the fulfilment recorded against the item.
Reads and writes
Slack
Take the request where people already ask, deflect with an answer, and confirm fulfilment in the thread.
Reads and writes
Jira
Create and track anything that routes to a person, in the queue the team already works from.
Reads and writes
Okta
Check entitlement, then grant group and application access for real instead of raising a task about it.
Reads and writes
Google Workspace
Handle distribution lists, shared drives and mailbox delegation, which are a large share of the queue.
Reads and writes
Jamf
Read device state and push software, so an install request is fulfilled rather than scheduled.
Reads and writes
Notion
Search the documentation at request time, which is what makes deflection work rather than being a nice idea.
Reads
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, Jira Service Desk, Databricks or Google Chat.
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
This grants access and installs software automatically. It is an access control as much as a convenience.
It runs on the platform, not on your laptop
Requests arrive at any hour and fulfil immediately instead of waiting for somebody in one timezone to open a queue.
Automatic fulfilment is still a change record
What was granted, to whom, under which entitlement. These appear in an access review exactly like a manual grant does.
Credentials are managed, never written into the build
Installing software and adding group members needs write access to the device fleet and the directory at once. Those are separate authentications in your workspace, so one is not a route to the other.
IT owns the catalogue and the boundary
Items, eligibility rules and the auto-fulfil threshold open in Tray Build, moved deliberately instead of to improve a metric.
The boundary is not stretched for the number
A permission granted automatically to somebody who should not have it costs far more than the ten minutes it saved.
Questions people ask
Why automate only the top few request types?
Because volume concentrates. Two thirds of a queue is usually six request types, and automating those properly beats automating twenty of them partially and having each fail differently.
What should never be auto-fulfilled?
Anything irreversible, anything affecting more than one person, anything not fully specified, and anything the requester is not already entitled to by role.
Why check eligibility, not ask for approval?
Because an approver who cannot judge the request will approve it. Entitlement by role is a policy decision made once, instead of a judgement made badly under time pressure.
Is deflection worth building?
Yes, if you measure it. The deflection rate is what tells you whether writing the documentation paid for itself, and without the measurement it is a guess.
What should a service desk measure instead of tickets closed?
Share fulfilled without a human, per catalogue item. Tickets closed rises with headcount and says nothing, whereas a high-volume item with low automation is always the next thing to build.
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 internal helpdesk (opens helix.tray.ai in a new tab)
Further reading
Background on the same subject, for the case rather than the build.
Related guides
IT and security
How to build access request and approval
Route to the system owner, grant with an expiry by default, provision automatically, and produce the access review as a by-product. The prompts that build it.
People operations
How to build employee onboarding provisioning
Drive it from the HRIS, derive access from the role instead of a copied colleague, sequence around the start date, and prove it happened. The prompts that build it.
Last reviewed September 2026.