What I built.

These three projects support trivago's content data operations team. The team keeps a very large catalogue of accommodation listings from many supply partners accurate. Duplicate listings, incorrect catalogue links and stale master data arrive in batches of hundreds or thousands. Handling them used to involve hand-written warehouse queries, checks across several systems and one API call per record.

Six focused tools in one web app for work that used to be spread across several systems.

Before the Hub, the team moved between systems by hand. The app now provides one place to use several internal APIs and has substantially reduced that manual work. It covers duplicate handling, catalogue search without SQL, coordinate-based destination lookup, bulk processing and mismatch inspection.

Some tools use an LLM to evaluate candidates. The model returns a structured suggestion with a one-line reason that the reviewer can check. A person still makes the decision.

The bulk tool handles a full team workflow. Users upload a batch and assign parts of it to team members. Progress streams to the browser, and failed operations can be retried without running the whole batch again.

An agent platform for the same operations work, running on a tool-calling runtime I wrote myself.

The Hub still needs someone to open it and drive each tool. The Agent starts when work arrives and handles the job from there. Chat, Jira, Slack and scheduled tasks all feed into the same runtime. Sessions can use about 48 domain tools. At runtime they load named skills that provide instructions and grant access to the tools a job needs, so each session only gets the write access tied to its skills.

Per-tool deadlines on a composited abort signal

Each tool call and subagent gets a timeout combined with the parent job's cancellation signal. If a call times out, the model receives a structured result and can continue. A slow warehouse query does not kill the whole turn, but cancelling the parent job still stops the loop immediately.

Bounded tool results with a reply reserve

The runtime checks every result against byte and token limits, with space reserved for the model's reply. If a result is too large or cannot be serialised, the runtime replaces it with a compact envelope instead of filling the context window.

Subagents as real queue jobs

Each child agent is a separate queue job with its own message thread and a session linked to its parent. When a task fans out across ten pages of data, each page can be retried and audited on its own instead of becoming another nested call in one context.

Every turn writes an immutable, cache-aware cost record in nano-USD, which gives the exact cost of each ticket. The project has 103 test files and 10 database tables.

Four tools give AI agents across the company access to around 300 GraphQL operations.

The team that owns the graph asked me to help because of my agent engineering and LLM experience. I designed the tool schema and helped set the direction. I did not write the server's production code.

Giving every operation its own tool would fill the context window before the agent started working. Instead, the agent follows four steps: list operations, ask what one does, inspect its schema, then run it. The graph can grow without adding more tools. Business context has its own step because an operation name alone rarely tells a model whether it is the right choice.

The server is in production, and employees use it from their own agent applications.

I ran agents at home first.

Before I built the work system, I was already running the same basic setup on my own machine: several entry points, persistent memory, skills and subagents. Hermes Agent and OpenClaw directly influenced the runtime I later built at work.

At work

The two tools I use every day at trivago.

  • Claude Code
    daily driver
  • Cursor
    editor

At home, on my own hardware

A Mac mini runs around the clock in my flat. Hermes Agent starts and coordinates unattended Claude Code sessions for university admin, my apps and this website. This setup is entirely separate from trivago's infrastructure.

  • Claude Code
    driven by Hermes
  • Codex
    second opinion
  • Hermes Agent
    the orchestrator
  • OpenClaw
    always listening

A bit about me.

  • Since 2025Backend Software Engineer (working student), trivago
  • Since 2024BSc Computer Science, Hochschule Bonn-Rhein-Sieg
  • 2023 to 2024Project Coordinator / first-level support (working student), trivago

German and Japanese national · German (native) · Japanese · English (C1) · Based in Cologne