The Orchestration Engine for Homelab Systems

Discover your self-hosted apps, compose capabilities, and operate reliable automation across services from one runtime.

Chaos to Order

In a typical homelab, dozens of self-hosted apps run independently. Each has its own API, auth model, pagination convention, and data format.

Before Flowbot

  • Dozens of independent apps under /home/
  • Fragmented APIs with no unified interface
  • Different authentication models per app
  • Inconsistent pagination: offset, page, cursor, token
  • No cross-service automation
  • No audit trail for data operations
How do I make all these apps work together?

With Flowbot

  • Auto-discovery of apps via Homelab Scanner
  • Unified capability abstraction (bookmark, archive, reader, ...)
  • Single AuthContext across all surfaces
  • Standard pagination: limit + opaque cursor
  • Declarative Pipelines for cross-service data flow
  • Durable events, execution history, full audit trail

Modular. Orthogonal. Composable.

Each capability abstracts over one or more providers, exposing a unified invocation pattern regardless of the underlying app.

▷

Declarative Pipeline

Event-driven, idempotent, auditable cross-service data flows defined in YAML.

# When a new bookmark is saved, archive it & notify
trigger:
  event: "bookmark.created"
steps:
  - action: archive.submit
    input: $.event.url
  - action: notify.send
    input:
      channel: slack
      message: "Archived: $.event.url"
☍

App Discovery

Homelab Scanner automatically scans docker-compose.yaml and registers apps. Bind apps to capabilities with one command.

☷

Unified Interfaces

Every capability is accessible through every interaction surface. Chat is just one of many.

REST CLI Chat Form Webhook Cron Workflow
⚭

AuthContext

Single authentication context that spans REST, CLI, Chat, Webhook, Cron, Pipeline, and Workflow. No per-app auth fragmentation.

⚠

Standard Errors & Pagination

All providers wrapped in adapter layer with ErrNotFound, ErrForbidden, ErrProvider. Pagination unified as limit + opaque cursor.

✅

Audit Trail & Replay

Every event, pipeline run, and operation is persisted. Traceable, recoverable, and replayable.

2026-04-30T22:14:03Z [pipeline:archive-on-bookmark] triggered by bookmark.created
2026-04-30T22:14:03Z [pipeline:archive-on-bookmark] step 1/2 archive.submit -> OK
2026-04-30T22:14:04Z [pipeline:archive-on-bookmark] step 2/2 notify.send -> OK
2026-04-30T22:14:04Z [pipeline:archive-on-bookmark] completed in 1.2s
2026-04-30T22:15:00Z [pipeline:backup-weekly] step 4/5 archive.create -> ERR_PROVIDER

Composable Automation

Connect capabilities like building blocks. Each step invokes a capability through the unified ability layer. The DAG execution engine handles parallelism, error recovery, and idempotency.

cron trigger
reader.fetch
llm.summarize
bookmark.create
notify.send

Built-in step types: Capability, Message, Fetch, Feed, LLM, Docker, Grep, Unique, Torrent

// Every step invokes through the same pattern
result, err := ability.Invoke(ctx, "bookmark",
    ability.OpList,
    ability.Params{Limit: 20})