ConfigDeck
Hugging Face Articles
Hugging Face

What building Shippy taught us about building agents

Commentary on a Hugging Face Blog announcement

Summary

Allen AI's Skylight team shares the architecture behind Shippy, a maritime AI agent, breaking down their approach to agent reliability through layered deterministic tooling, skill/soul/config separation, and per-user sandboxed Kubernetes sessions.

Allen AI published a detailed technical post on the Hugging Face Blog walking through the architecture of Shippy, their maritime domain awareness agent built on top of the Skylight platform. The post focuses less on model selection and more on the engineering scaffolding required to make an agent trustworthy in a high-stakes operational environment.

What’s actually new

This isn’t a product launch — it’s an architecture post, and a good one. The core decomposition is worth internalizing: an agent is a soul (system prompt with behavioral boundaries), skills (markdown files with structured frontmatter, following the same agent-skills spec used by Claude Code and Codex), and config (runtime choices like which LLM and which agent harness to use). The soul and skills are baked into a Docker image; config is injected at deploy time, meaning you can swap the model or harness without rebuilding.

The most practically interesting pattern is their approach to deterministic tooling. Early prototypes let the agent construct raw API calls, which produced subtle bugs — malformed pagination, geometry encoding errors, silently wrong results. Their fix was a purpose-built CLI (skylight events search with typed flags) that handles auth, pagination, and output. The CLI writes results to local JSON files instead of piping through the shell, which avoids buffer limits and makes multi-step analyses more reliable. Each layer — typed API schema, deterministic CLI, agent skill referencing CLI commands — can be tested independently.

Their hosting layer, called Mothership, provisions isolated Kubernetes deployments per user session, injecting JWTs at provision time so all API calls are scoped to that user’s data. Files written during analysis are ephemeral and session-scoped.

What it means for your config

This post doesn’t introduce a new library or config format you need to adopt. But the patterns are directly relevant if you’re wiring agents into your own tooling. The soul/skills/config split maps cleanly onto how you’d structure a Docker-based agent deployment: skills and system prompts versioned in the image, model selection and secrets as runtime environment variables or injected config. If you’re already using agent-skills-style markdown files (as seen in Claude Code or Codex setups), Shippy validates that pattern at production scale.

The post doesn’t detail the specifics of their OpenClaw agent harness configuration or publish any reusable config schemas. If you’re hoping for a drop-in Kubernetes manifest or Helm chart for the Mothership hosting pattern, that’s not included — this is a lessons-learned piece, not a quickstart.

If you’re building agents that call complex APIs, the biggest takeaway here is concrete: wrap your API behind a deterministic CLI with typed inputs, self-documenting help text, and file-based output before you let an agent anywhere near it. Read the full post for the specifics of how their layered testing strategy works across API, CLI, and skill levels — it’s one of the better write-ups on agent reliability engineering available right now.


Read the full announcement on Hugging Face BlogWhat building Shippy taught us about building agents