The systems, in detail.

All three projects serve trivago's content data operations team, which looks after the quality of a very large catalogue of accommodation listings aggregated from many external supply partners. The recurring work — duplicate listings arriving from several partners, listings attached to the wrong catalogue entry, stale master data — arrives continuously in batches of hundreds to thousands. It used to mean a person writing warehouse queries by hand, cross-checking several systems, and calling internal APIs one record at a time.

Six tools in one web app that put a team's scattered manual work behind purpose-built screens.

The actual value is unification: before the Hub, the work meant moving between systems by hand. One place now fronts several internal APIs, and it cut the team's manual effort substantially — duplicate handling, catalogue search without SQL, nearest-destination lookup by coordinates, bulk duplicate processing, mismatch inspection, each a focused screen.

Some tools are LLM-backed to make the judgement calls easier: a model evaluates candidates and returns a structured decision with a one-line reason, so the reviewer has something to audit. The model assists the reviewer — it does not decide.

The bulk tool is a workflow system rather than a script: batches are uploaded, slices assigned to team members, progress on long-running runs streams live to the browser, and failed operations are tracked and retried without re-running the batch.

An agent platform for the same operations work, built around a hand-written tool-calling runtime — the agent picks the work up itself.

The progression is the story. The Hub proved the tooling could exist; it still needed a human to open it, feed it and drive it. The Agent removes that: work arrives, and the agent takes it end to end. Sessions enter through four surfaces — chat, a Jira issue, a Slack thread, or a schedule — into one runtime; a session doesn't care where it came from. Around 48 domain tools are available, and invokable skills loaded at runtime carry the domain instructions and unlock the tools each job needs, so a session's write access is defined by which skills it holds.

Per-tool deadlines on a composited abort signal

Every tool call and every subagent races a timeout merged with the parent job's cancellation. On timeout the model gets a structured “this timed out” result and keeps going — a slow warehouse query degrades the turn instead of killing it — while a genuine cancellation still breaks the loop immediately.

Bounded tool results with a reply reserve

Every result is canonicalised against byte and token budgets, holding headroom back for the model's own response. Oversized or unserialisable results become compact envelopes rather than blowing the context window mid-turn.

Subagents as real queue jobs

A child agent is its own queue job with its own message thread and its own session row linked to the parent. A fan-out across ten pages of data is ten independently retryable, independently auditable units of work — not ten nested calls inside one context.

Every turn also writes an immutable, cache-aware cost record in nano-USD, so the cost per ticket is an exact number rather than an estimate. 103 test files and 10 database tables underneath.

Around 300 GraphQL operations, within reach of AI agents across the company — as four tools rather than 300.

The team that owns the graph brought me in for my agent engineering and LLM knowledge. I designed the tool schema and steered the design decisions; I wrote none of the server's production code. A design consult on someone else's production system is the honest description — and it's the part that made the difference.

One tool per operation would spend the whole context window on a menu before the agent does any work. So the surface is a discovery chain — list the operations, ask what one is for, introspect its schema, execute — and the graph can keep growing without the tool surface growing with it. Business context is its own step, because an operation name tells a model almost nothing about whether it's the right one; a dedicated step answers that in domain terms.

It runs in production today, and employees reach those services from their own agent applications.

The home setup came first.

The systems above weren't designed from a blank page. Multiple entry points including Slack, persistent memory, skills, subagents — I ran that shape on my own machine before building it properly in production. Hermes Agent and OpenClaw are the direct inspiration for the runtime I built at work.

At work

The daily pair at trivago.

  • Claude Code
    daily driver
  • Cursor
    editor

At home — my own hardware

A Mac mini runs 24/7 in my flat. Hermes Agent orchestrates my Claude Code sessions — agents driving coding agents, unattended — automating everything from university admin to my own apps and websites. None of this is company infrastructure.

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

The short version.

  • 2025 — nowBackend Software Engineer (working student), trivago
  • 2024 — nowBSc Computer Science, Hochschule Bonn-Rhein-Sieg
  • 2023 — 2024Project Coordinator / first-level support (working student), trivago

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