Skip to content
View hhagenbuch's full-sized avatar

Block or report hhagenbuch

Block user

Prevent this user from interacting with your repositories and sending you notifications. Learn more about blocking users.

You must be logged in to block users.

Maximum 250 characters. Please don’t include any personal information such as legal names or email addresses. Markdown is supported. This note will only be visible to you.
Report abuse

Contact GitHub support about this user’s behavior. Learn more about reporting abuse.

Report abuse
hhagenbuch/README.md

Heyward Hagenbuch

AI/agent engineering on an enterprise JVM stack. I build the unglamorous parts that make LLM systems shippable: bounded tool-calling loops, MCP integrations, eval gates in CI, and the reactive plumbing underneath.

Day job: platform & AI tooling for a 60+ microservice fleet (Java/Spring WebFlux, Kubernetes, GraphQL federation) — including an internal code-intelligence MCP server with 50+ tools that gives coding agents whole-workspace context.

The platform

These repos aren't seven demos — they compose. A production-shaped agent core, and the layers you actually need to run one: observe its cost, record what it did, survive a dead link, deploy it safely, gate it on evals, and contract-test its tools.

flowchart TB
    starter["<b>spring-ai-agent-starter</b><br/>reactive tool-calling agent core"]

    meter["<b>agent-meter</b><br/>OTel cost attribution + budgets"]
    blackbox["<b>agent-blackbox</b><br/>flight recorder + trace export"]
    castaway["<b>castaway</b><br/>runtime for disconnected environments"]
    operator["<b>agent-operator</b><br/>k8s operator: prompt-version canaries"]
    evals["<b>agent-evals</b><br/>JUnit for agents — CI exit-code gate"]
    mcppact["<b>mcp-pact</b><br/>contract tests for MCP servers"]
    medic["<b>agent-medic</b><br/>incident &rarr; gated prompt repair"]
    slo["<b>agent-slo</b><br/>behavioral SLOs + promotion freeze"]
    fathom["<b>fathom</b><br/>agnostic verified context + impact engine"]
    conductor["<b>conductor</b><br/>cross-repo change-awareness daemon"]

    meter -. "wraps LlmClient (cost)" .-> starter
    blackbox -. "wraps LlmClient (record)" .-> starter
    mcppact -->|"guards the MCP tool boundary"| starter
    castaway -->|"reuses the core, adds link-failover"| starter
    operator ==>|"deploys + rolls prompt versions"| starter
    operator -. "canary gate runs" .-> evals
    evals ==>|gates| starter
    evals ==>|gates| castaway
    evals ==>|gates| operator
    medic -->|"diagnoses from traces"| blackbox
    medic ==>|"repairs ship as gated prompt canaries"| operator
    slo -->|"continuous evals are the SLI"| evals
    slo ==>|"budget burn freezes promotions"| operator
    fathom -. "mounts as MCP context tools" .-> starter
    mcppact -->|"contract-tests"| fathom
    conductor -->|"Flock consumes impact graph"| fathom

    classDef core fill:#1f6feb,stroke:#0b3d91,color:#fff;
    class starter core;
Loading

Legend: dotted = non-invasive decorator seam (add a dependency, no code change); solid = builds on / guards; thick = eval gate.

Repos

Core

  • spring-ai-agent-starter — what an agent looks like in a production JVM service: a bounded, reactive tool-calling loop with retries, MCP mounting, and a unit-tested core.

Observability & cost (decorator seams on the core)

  • agent-meter — OpenTelemetry-native token/cost attribution (per feature/session/prompt-version) with budgets that degrade before they deny. Add the dependency, get cost telemetry.
  • agent-blackbox — the flight recorder: what the agent actually did, exportable for diffing and eval.

Resilience

  • castaway — an agent runtime for disconnected/degraded environments: local-model failover, queued side-effects with revalidation, honesty under degradation.

Delivery

  • agent-operator — a Kubernetes operator that treats a prompt like code: canary a new prompt version, gate the promotion on an eval Job, roll back on failure.
  • agent-medic — the immune system: a production failure becomes a regression case, a gated prompt repair, and a human-approved promotion. Every incident permanently hardens the eval suite.

Quality gates & contracts

  • agent-evals — JUnit for LLM agents: golden datasets, LLM-as-judge, exit-code CI gates (used across the platform).
  • mcp-pact — Pact-style contract testing for MCP servers, so a tool schema change can't silently break its consumers.
  • agent-slo — behavioral SLOs: error budgets for honesty, tool discipline, and cost, where budget burn freezes prompt promotions. RFC + proving slice.

Context & coordination

  • fathom — an agnostic, verified, local-first context engine: the same tools answer "what breaks if I rename this class?" and "what breaks if I drop this column?" over one typed graph, it verifies every answer against the source before returning it (a stale index says so instead of guessing), and it marks contract surface + cross-repo impact. No vector database. Contract-tested by mcp-pact.
  • conductor — a cross-repo change-awareness daemon. Its Flock feature consumes fathom's impact graph to warn a live agent session when a contract surface another repo depends on is about to change ... coordination before the break, not after.

Method

  • agent-engineering-playbook — the method behind the repos: the specs, review gates, and quality bars used to direct AI agents through building everything above.

📫 heyward360@gmail.com

Pinned Loading

  1. halo halo Public

    HALO AI Coding Agent

    Java 1

  2. castaway castaway Public

    Agent runtime for disconnected environments: local-model failover, deferred side-effects with revalidation, offline-aware evals

    Java 1

  3. mcp-pact mcp-pact Public

    Consumer-driven contract testing for MCP servers: record tool interactions, verify in CI, catch breaking changes

    Java 1

  4. agent-operator agent-operator Public

    Kubernetes operator for agents: eval-gated prompt/model canary deploys with automatic rollback

    Java

  5. agent-medic agent-medic Public

    The immune system for agents: production failure → regression case → gated repair → human-approved promotion

    Java 1

  6. conductor conductor Public

    Session orchestration for Claude Code: a bus, leases, and helper spawning across coding sessions

    Java 1