Skip to main content
This page lists every entry an agent can have. Each entry’s section holds its settings, its shape in a config file, and, for an entry handler, the variables a prompt can read. servflowai resource handler describe --all prints the same catalog. For what entries are and how to choose one, see Entries and entry handlers. The keys every entry shares, type and start, and the rules for an agent with several entries are in the CLI reference.

Entries without a handler

Trigger

Starts the agent on a schedule, by hand from the editor, or when another agent hands it a task.

Webhook

Answers POST requests on its path. Nothing about the request is checked in advance. Prompts read the request with the body, param, header, and urlparam functions. See the Dynamic content reference. Every response carries an X-Conversation-Id header naming the conversation the run used. A request that sends the same header continues that conversation. A request without it starts a new one. When a request is refused with 429, that same header still names the conversation it would have continued. Set the limit on the agent itself:
A value of 0 means no limit, which is the default. The limit applies only to runs that continue a conversation, so a test run or any run with no conversation id is not counted.

streamable_http_webhook

Answers POST requests on its path the same way as a webhook entry, but as a stream of Server-Sent Events instead of one response at the end. Use it when your application should receive the agent’s messages as they are written. Prompts read the request with the same body, param, header, and urlparam functions. The stream opens only when the run adds its first message. A refusal before that still comes back as an ordinary HTTP response. Once the stream is open, ServFlow sends keepalive comments so idle proxies do not cut the connection. Like a webhook, the response carries an X-Conversation-Id header naming the conversation the run used. Send the same header on the next request to continue that conversation.

Entry handlers

An entry handler receives from one outside service and delivers the agent’s reply to it. A prompt reads a handler’s variables as {{ .<namespace>.<key> }}, such as {{ .github.comment_body }}. A handler’s settings are read once, when the agent loads. The only template function they accept is secret.

github_webhook

Runs on a delivery from a GitHub App: an issue or pull request comment, a review comment, a new pull request, a push. When respond_to says so, the agent’s answer is posted on the pull request or issue that started the run. Namespace: github. Needs a path. Integration type: github_app. A delivery is answered 202 at once, and the run continues after the response. Each delivery runs in a conversation of its own. A delivery that the settings filter out, or that comes from an installation other than the integration’s, is answered 202 with {"status":"ignored"} and starts no run. Settings In a config file
Variables

gitea_webhook

Runs on a delivery from a Gitea server: an issue or pull request comment, a new pull request, a push. Receiving needs only the secret the webhook was created with in Gitea. When respond_to says so, the agent’s answer is posted on the pull request or issue that started the run, which needs an integration. Namespace: gitea. Needs a path. Integration type: gitea, needed only to reply. Settings In a config file
Variables

telegram_webhook

Runs on a message delivered by the Telegram Bot API, and sends the agent’s answer back to the chat it came from. Each chat keeps one conversation, so the agent remembers earlier messages in that chat. Namespace: telegram. Needs a path. Integration type: telegram_bot. Settings In a config file
Variables

discord_gateway

Connects to Discord as a bot and runs on the messages it hears, answering in the channel that asked. It connects out to Discord, so it has no path and needs no address Discord can reach. The bot needs the Message Content intent turned on in the Discord developer portal. Each channel keeps one conversation, and a Discord thread counts as a channel of its own. Namespace: discord. No path. Integration type: discord. Settings In a config file
Variables

Entries and entry handlers

What entries are, and how to choose one.

Available integrations

The integration each handler needs.

CLI reference

The keys every entry shares, and the rules for several entries.

Dynamic content reference

The functions a webhook entry reads the request with.