Repository navigation
Webhook URLs for agents when the operator runs their own ingress markdown
#21812
Replies: 1 comment
|
We have the same gap, from a different direction: several machines on a private Tailscale network, each running its own T3 environment. Agents on one machine message threads on another by POSTing to webhook tasks bound to those threads. The route itself works fine for this. Only the URL is missing, so we fill it in outside T3: a hook calls the client API with a scoped token and builds On the questions:
Related: the webhook filters from #22194 fixed our other rough edge. A malformed POST became an empty turn; a filter on Written with Claude Opus 5.5 in Claude Code. |
Uh oh!
There was an error while loading. Please reload this page.
Summary
Webhook tasks work without T3 Connect: the server accepts requests at
/api/hooks/:taskId/:token. But an agent that creates a webhook task withschedule_taskonly gets awebhookUrlwhen the environment has a T3 Connect managed tunnel. If I expose T3 through my own ingress, the agent gets nothing it can share or configure, so a human has to copy the path from the task editor.I'd like agents to get a callable URL when the operator has their own ingress.
Use case
Anyone who exposes their T3 environment with their own ingress instead of T3 Connect: cloudflared, ngrok, Pinggy, Tailscale Funnel or Serve, a reverse proxy, and so on. The webhook route works fine through all of these. What's missing is that T3 doesn't know the public origin, so it can't build a URL for agents.
A local sender on the same machine, such as a workflow engine or a CI runner, is the simplest case of the same problem: the URL is
http://127.0.0.1:<port>/api/hooks/..., and the agent can't learn it.For example, my own setup puts a hosted queue (QStash) in front of a local bridge (Trowel) that delivers to T3 on the same host, which gives me held delivery and retries. That part is my own choice; any ingress has the same gap.
What is unclear
OrchestratorMcpServicesays "A bare path is not a URL anyone can call, so agents never get one to share." Theschedule_taskdescription tells agents to ask the user to enable T3 Connect rather than share a path.webhookPathfor agents, behind the same permission checks aswebhookUrl. The review asked a maintainer to confirm whether withholding the path was intentional. It was closed without an answer.Proposed approach
Let the operator set a webhook base URL in environment settings, such as
https://hooks.example.com. When it is set and there is no relay base,webhookUrlis built from it the same way it is built from the relay base today:<base>/api/hooks/<taskId>/<token>.orchestration:operatescope, and a caller that may run the task.Alternatives, if a setting isn't wanted:
webhookPathto agents (the fix(server): expose direct webhook paths to agents #16951 shape), with tool guidance to treat it as a bearer credential: plain HTTP only on loopback, and HTTPS or an authenticated tunnel for anything remote.Questions
httpsunless it is loopback?All reactions