Skip to main content
The stack started as five self-hosted tools. Only one still carries production work. The other four earned a demotion the hard way: they were deployed and never used. The homelab runs a self-hosted layer for building LLM workflows and agents on top of its private model serving. Repository events and external agent intake carry production work today. The stateful graph service needs a host-level status check before a flow depends on it:
  • Scheduled event automation for repository events: a pull request opened or updated, a review comment, a merge, or a timed sweep.
  • An agent intake service for scheduled and agentic work: signed webhooks and a job API queue the work, and a self-hosted agent runs it. See the self-hosted agent.
  • A declared LangGraph server for a stateful, multi-step agent that needs to carry state between steps, behind a self-hosted chat UI. Its host-layout page still marks it as a seed, so check its live state before using it.
What else is deployed but not load-bearingTwo visual workflow builders are running as platforms, for prototyping only: no authored production workflow is committed to either. A general workflow automation role exists in Ansible, but its live deployment and event flows were not verified. GitHub Actions remains the selected repository-event path. A separate execution host still runs a small multi-agent Python framework as a seed script; it is not the primary agent runtime.

How they fit together

Build-time infrastructure-as-code declares and provisions the guest, firewall rules, and ACME certificate. Run-time is the request path. An event or signed webhook arrives, the agent runs, and its model calls and traces flow through the shared fabric and observability pipeline. Every piece is configured to its own model provider per its standard install: the local OpenAI-compatible endpoint, an external API, or both. It is never forced onto a shared backend that belongs to another stack. Each call is instrumented, and traces fan out to the LLM observability pipeline.

Choosing an orchestration path

  • Repository events (a PR opened, a review comment, a merge) → scheduled event automation. That is what it exists for.
  • Scheduled or externally triggered agent work → the agent intake service. Send it a signed webhook or a job, and the self-hosted agent runs it.
  • A durable, stateful, multi-step agent that needs to carry state between steps, behind a UI, with no cloud tracing account → LangGraph after its current host state is verified.
  • A visual workflow builder for prototyping only → either of the two deployed platforms. Neither carries a committed production workflow today, so treat time spent there as throwaway.

Where to go next

Local LLM

The private GPU model serving these tools call.

LLM observability

How every LLM call gets traced, costed, and evaluated.

LXC vs Docker

Why the compose-based tools run as Docker-in-LXC.

ansible-proxmox-ai

Deploys Dify, LangFlow, and LangGraph. n8n stays in ansible-proxmox-apps as a general app payload.