Skip to content

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

  1. System Slack
  2. Step Catalogue item
  3. Step Check eligibility
  4. Step Fulfil or route
  5. System Okta
Also Jira

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. 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. 2

    Deflection runs first

    If the answer exists in documentation, show it rather than paying somebody to paste the link.

  3. 3

    Eligibility is checked against role and policy

    Entitled by role fulfils; not entitled routes for approval with the reason.

  4. 4

    Safe requests fulfil end to end

    Group added, licence assigned, distribution list joined, with the change recorded.

  5. 5

    Everything else routes with context attached

    Requester, role, manager, asset, history. Not a bare description.

  6. 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. 1

    Set up, then find where the volume actually is

    Volume concentrates far more than anybody expects.

    Headless skills build-workflow

    Use 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. 2

    Build a catalogue that asks for what fulfilment needs

    A free text box guarantees a round trip.

    Headless skills build-workflow

    Use 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. 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. 4

    Fulfil only what is safe to fulfil

    The boundary between automatic and routed is the whole design.

    Headless skills tray-gotchas

    Use 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. 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. 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

Snowflake

Land fulfilment outcomes, so automation rate per catalogue item is measurable.

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, 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.

Last reviewed September 2026.