Northstar Services is fictional, but the problem is ordinary. People hunt through policies and procedures for answers that should be easy to find. I would not start by asking how to build an agent. I would start with the smallest useful question: can an employee get a reliable explanation of the leave policy without exposing data they should not see?
For the examples in this guide, a fictional policy says: “Employees may request one day of annual leave with five working days of notice. Requests require manager approval. Operational exceptions must be referred to HR.” A separate HR record holds each employee's available balance.
Manual use. An employee supplies the permitted policy extract and asks, “Can I take Friday off?” A useful answer explains the notice and approval rules, then says that eligibility cannot be settled without the intended date, current balance and manager decision. It does not invent a balance or treat a policy summary as approval.
Structured output. The same task can return fields such as rule, evidence, missing information and next step. The schema should permit an unknown value, rather than forcing the model to manufacture a complete record. A sample result might include approval_required: true and available_days: null.
An API. When the company needs repeatable handling, an application submits the request through an application programming interface. It supplies versioned instructions, permitted context and an output schema. The following is pseudocode, not a runnable provider SDK example:
identity = authenticate(request) evidence = load_permitted_policy(identity) result = model.generate(question, evidence, schema) check_shape_and_business_rules(result) return answer_with_evidence(result)
A response that parses as valid JSON has passed only the first check. The application still has to verify that the evidence was appropriate, the interpretation matches the policy and the result makes sense under the business rules. Timeouts, refusals, incomplete responses and provider errors are part of the same design, not exceptions to it.
From there, add one capability at a time. Retrieval addresses the many-document problem. A read tool obtains the current balance. A write tool submits a defined request. An agent becomes useful only if the sequence genuinely benefits from model-directed choice. For a leave request, a fixed workflow may remain the simpler and more defensible design.