Skip to main content

Local Model Plus Outbound Delivery

Use this playbook when you want local or self-hosted inference but only need governed outbound delivery instead of a reply-loop service runtime. This page is intentionally narrow:
  • the model runtime stays local or self-hosted
  • delivery stays outbound-only
  • nothing here is documented as if it joins the runtime-backed gateway owner contract

When This Is The Right Playbook

  • local control over the model runtime matters more than hosted convenience
  • no inbound or reply-loop channel is required on day one
  • the team wants notifications, reports, or alerts delivered outward without overclaiming runtime support

Use A Different Playbook If

If you actually need…Go here instead
a hosted provider plus a team-chat runtimeVolcengine Plus Feishu Or Lark or WeCom Rollout
a dedicated coding lane plus a lightweight bot surfaceBytePlus Coding Plus Telegram
provider-only local setup without delivery guidanceProvider Guides and Provider Recipes

Step 1: Bring Up The Local Provider

Ollama example:
active_provider = "local"

[providers.local]
kind = "ollama"
base_url = "http://127.0.0.1:11434"
model = "auto"
Health loop:
loong doctor
loong ask --message "Confirm that the local provider is healthy."
Operational note:
  • if the server effectively serves one production model, pin model explicitly instead of forcing catalog discovery drama

Step 2: Add One Outbound Surface

Webhook example:
[webhook]
enabled = true
endpoint_url = { env = "WEBHOOK_ENDPOINT_URL" }
auth_token = { env = "WEBHOOK_AUTH_TOKEN" }
payload_format = "json_text"
payload_text_field = "text"
Smoke-test it:
loong webhook-send --text "local-runtime smoke test"
Email example:
[email]
enabled = true
smtp_host = "smtp.example.com"
smtp_username = { env = "EMAIL_SMTP_USERNAME" }
smtp_password = { env = "EMAIL_SMTP_PASSWORD" }
from_address = "loong@example.com"
loong email-send --target "ops@example.com" --text $'Local run is healthy\nEverything is green.'

Step 3: Keep The Boundary Truthful

Rules that matter:
  • webhook, email, Slack, Discord, Teams, and similar surfaces are outbound-only
  • they do not join the same reply-loop owner model as Feishu / Lark, Telegram, Matrix, or WeCom
  • do not route this setup description toward gateway run as if outbound-only delivery became a supervised runtime

Step 4: Adjust The Outbound HTTP Boundary When Needed

HTTP-backed outbound delivery blocks private or special-use hosts by default. If you intentionally target a private bridge or loopback service, widen that boundary explicitly:
[outbound_http]
allow_private_hosts = true
Use that only when the private target is intentional.

Variants

Other local or self-hosted providers fit the same shape:
  • lm_studio
  • llamacpp
  • vllm
  • sglang
The key point is the same: local inference plus truthful outbound delivery is a valid public setup shape, but it is not the same thing as a shipped reply-loop runtime.

Troubleshooting

SymptomWhat to check
ask is unstable before delivery is even involvedfix the local provider first; do not start with the outbound surface
a local webhook target is rejectedadd [outbound_http] allow_private_hosts = true only if the private target is intentional
the setup starts being described as a channel runtimecorrect the docs or runbook wording; this path is outbound-only

Continue Reading