Let an agent ask before it acts
Publish the question with inline buttons. A tap comes back as an app.command event, with who pressed it, on your app's topic. The agent reads it over SSE or a webhook and carries on.
hooka is a self-hosted, Telegram-first notification bus for people and agents. Publish to a topic, and its routes deliver to Telegram chats and forum threads, webhooks, and SMS. Every message is stored, along with the outcome of each delivery.
Open source under Apache-2.0. The repository goes public soon.
POST /publish/deploys
{"title":"Release",
"delivered": 3, "failed": 0
A publish is one HTTP request with a bearer token. The response tells you where the message went, and the message stays in history with each route's outcome.
Idempotency-Key header and a retried request returns the original message instead of sending twice.hk_ token that can only publish to deploys*, and keep the master key to yourself.curl https://api.tryhooka.xyz/publish/deploys \
-H "Authorization: Bearer hk_your_token" \
-H "Content-Type: application/json" \
-d '{"title":"Release","text":"api@a1b2c3 is live on prod"}'
{
"ok": true,
"message": "published",
"message_id": 4711,
"topic": "deploys",
"delivered": 3,
"failed": 0,
"idempotency_hit": false,
"destinations": [
{
"provider": "telegram",
"chat_id": "-1001234567890",
"message_thread_id": "42",
"status": "sent"
},
{ "provider": "webhook", "status": "sent" },
{ "provider": "sms", "status": "sent" }
],
"store_only": false
}
Placeholder token. Use your own instance URL when you self-host.
The server is a single Go binary backed by Postgres. The MCP server, agent bridge, and dashboard are optional companions that talk to it over HTTP.
/capture deploys in a Telegram chat or thread, and what people type there is stored on that topic too.app.command event on a topic, and the app answers by publishing./in/{token} URL: one topic, rate-limited, revocable. GitHub webhooks sent to it arrive rendered, and Alertmanager has its own endpoint.hooka-mcp gives MCP-capable agents publish, search, reminders, and forms. The agent bridge connects a topic to OpenCode or Pi.hk_ tokens per topic pattern for everything else, and an audit topic that reports token, route, and login changes.Four common jobs, all handled by the server and its own clients.
Publish the question with inline buttons. A tap comes back as an app.command event, with who pressed it, on your app's topic. The agent reads it over SSE or a webhook and carries on.
Publish from any job with a scoped token. The idempotency key makes a re-run return the original message instead of posting twice. For GitHub itself, register a capability URL as the webhook, and pushes, PRs, reviews, releases, and CI failures arrive rendered.
Point Alertmanager at /alertmanager/{topic}. Severity sets the priority, watchdog alerts arrive silently, and a topic for critical alerts can post to its own forum thread.
An agent can create a form through MCP or the CLI and share one public link. Respondents need no account, and you read responses in the dashboard, as CSV, or over the API. The waitlist on this page is a hooka form.
Join the waitlist for the hosted beta, or run the open-source server yourself.
Waitlist open
We run hooka for you, so there is no server or database to look after. The hosted tier isn't open yet. Join the waitlist and we'll tell you when it is.
The waitlist is itself a hooka form. It asks for your email and, if you like, what you'd use hooka for.
Apache-2.0
One Go binary and Postgres on your own infrastructure. Telegram updates arrive by long-polling, so you don't need a public URL to start.
A Railway template that starts hooka, Postgres, and the dashboard from your bot token. It builds from the source, so it opens when the repository does.
A compose file for hooka and Postgres, with the dashboard behind a profile. The clone-and-run steps appear here when the source goes public.