A scheduling assistant's system prompt said 'all times are PST.' The book_meeting tool accepted ISO 8601 strings. The model produced UTC strings. Calendar API parsed them as UTC. Meetings booked 7-8 hours wrong, every time.
What happened
Scheduling agent. System prompt:
You are a scheduling assistant. The user is in Pacific Time (PST).
Always interpret their requests in PST.
Tool:
{
"name": "book_meeting",
"input_schema": {
"properties": {
"start_time": { "type": "string", "format": "date-time" },
"duration_minutes": { "type": "integer" }
}
}
}
User: "book a meeting at 3pm tomorrow."
Model's tool call:
{ "start_time": "2026-03-19T15:00:00Z", "duration_minutes": 30 }
Z = UTC. The model produced ISO 8601 with the UTC suffix because that's the most-trained-on format. The calendar API parsed it as 15:00 UTC = 8am PST.
Every meeting booked at 8 hours too early.
Diagnosis
The system prompt's "user is in PST" instruction is a request to the model, not a constraint on the output format. The model honored it semantically (it understood "3pm" as 3pm Pacific) but produced an ISO string with Z because that's the canonical format.
The fix is in the tool schema, not the prompt.
The fix
"start_time": {
"type": "string",
- "format": "date-time"
+ "format": "date-time",
+ "description": "ISO 8601 with timezone offset, e.g. 2026-03-19T15:00:00-08:00. Do NOT use 'Z' suffix unless the user explicitly specified UTC."
},
+ "timezone": {
+ "type": "string",
+ "description": "IANA timezone name (e.g. America/Los_Angeles). Required.",
+ "enum": ["America/Los_Angeles", "America/New_York", ...]
+ }
And tool-side validation:
def book_meeting(start_time: str, timezone: str, duration_minutes: int):
if start_time.endswith("Z"):
raise ValueError("start_time must include explicit timezone offset, not Z")
dt = parse(start_time)
if dt.tzinfo is None:
raise ValueError("start_time must include timezone")
...
Takeaway
The tool schema is the contract. Anything ambiguous in the schema gets resolved by the model's training distribution, which doesn't know your user's timezone. Constrain at the schema level — descriptions, enums, validation — not via prose in the system prompt.