sekia

Multi-agent event bus for workflow automation

brew install sekia-ai/tap/sekia
Event-driven workflows
Lua scripts react to events from GitHub, Slack, Linear, and Gmail
Built-in AI
Call LLMs from workflows with sekia.ai()
Zero config
Embedded NATS, hot-reload workflows, run sekiad and go
MCP server
Works with Claude Desktop, Claude Code, and Cursor

Install

brew install sekia-ai/tap/sekia
go install github.com/sekia-ai/sekia/cmd/sekiad@latest
go install github.com/sekia-ai/sekia/cmd/sekiactl@latest
go install github.com/sekia-ai/sekia/cmd/sekia-github@latest
go install github.com/sekia-ai/sekia/cmd/sekia-slack@latest
go install github.com/sekia-ai/sekia/cmd/sekia-linear@latest
go install github.com/sekia-ai/sekia/cmd/sekia-gmail@latest
go install github.com/sekia-ai/sekia/cmd/sekia-mcp@latest
git clone https://github.com/sekia-ai/sekia.git
cd sekia
docker compose up
git clone https://github.com/sekia-ai/sekia.git
cd sekia
go build ./cmd/sekiad ./cmd/sekiactl ./cmd/sekia-github \
         ./cmd/sekia-slack ./cmd/sekia-linear ./cmd/sekia-gmail \
         ./cmd/sekia-mcp

Quick start

1 Start the daemon
sekiad
2 Write a workflow
-- ~/.config/sekia/workflows/auto-label.lua

sekia.on("sekia.events.github", function(event)
    if event.type ~= "github.issue.opened" then return end

    local title = string.lower(event.payload.title or "")

    if string.find(title, "bug") then
        sekia.command("github-agent", "add_label", {
            owner  = event.payload.owner,
            repo   = event.payload.repo,
            number = event.payload.number,
            label  = "bug",
        })
    end
end)
3 Connect an agent
export GITHUB_TOKEN=ghp_...
sekia-github
4 Check status
sekiactl status
sekiactl agents

Lua API

FunctionDescription
sekia.on(pattern, fn)Register handler for NATS subject pattern
sekia.publish(subj, type, data)Emit an event
sekia.command(agent, cmd, data)Send command to an agent
sekia.log(level, msg)Log a message
sekia.ai(prompt [, opts])Call an LLM, returns (result, err)
sekia.ai_json(prompt [, opts])Call an LLM, returns parsed Lua table
sekia.nameThe workflow's name

Agents

GitHub
Webhooks and REST API polling for issues, PRs, pushes
GITHUB_TOKEN
Slack
Socket Mode for messages, reactions, mentions
SLACK_BOT_TOKEN SLACK_APP_TOKEN
Linear
GraphQL polling for issues, comments, state changes
LINEAR_API_KEY
Gmail
IMAP polling for incoming mail, SMTP for sending
GMAIL_ADDRESS GMAIL_APP_PASSWORD
MCP Server
Expose Sekia to Claude Desktop, Claude Code, Cursor
sekia-mcp (stdio)