For a maritime analyst tracking illegal fishing, a single wrong answer from an AI doesn’t mean a bad spreadsheet. It means a patrol vessel burning scarce fuel in the wrong ocean, or worse. That’s the reliability problem the Skylight team confronted when building Shippy, their AI for real-time ocean monitoring, and their solution is a masterclass in architectural humility.
Shippy is architected around three components: a soul, skills, and config. The ‘soul’ is the system prompt, which draws hard behavioral boundaries—it won’t make legal determinations about a vessel and it won’t speculate beyond its data. The ‘skills’ are markdown files that define specific workflows, like querying the Skylight API for fishing events. The ‘config’ covers the runtime, which currently uses the OpenClaw agent harness and Claude Opus 4.6. The team learned the hard way that letting an agent make raw API calls is a recipe for disaster. Early prototypes produced a ‘steady stream of subtle bugs’ like malformed pagination that silently dropped results.
The fix was a deterministic wrapper. They built a purpose-built CLI that Shippy talks to instead of the raw API. A question like “show me fishing activity in Panama’s EEZ” triggers a structured skill that first resolves the boundary via Skylight’s regions API, then queries for events, formats results with map links, and attributes data from partners like Global Fishing Watch. This not only eliminates a class of parsing errors but makes the system’s work auditable; every answer shows its sources and a link back to the live map for verification.
This architecture turns a non-deterministic agent into a verifiable one. The agent decides what to do, but the tools it uses are predictable and self-documenting. The CLI outputs to a local JSON file and includes extensive --help text so both the agent and human developers can recover from errors without guessing. It’s a blueprint for moving AI out of the chat sandbox and into operational domains where being right isn’t a feature—it’s the entire job.