You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
This commit was created on GitHub.com and signed with GitHub’s verified signature.
Added
Slack MCP tools for agents. Agents (Claude / Codex / Gemini) can now list Slack channels (slack_list_channels) and post messages (slack_post_message) through an agent-scoped MCP endpoint. Pagination is capped so large workspaces don't exhaust Slack's Tier 2 rate limit.
Slack DM file attachments. Files sent to the bot via DM are downloaded to the shared upload directory and surfaced to the agent with a [Attached files] block. Failed downloads are reported via [File download errors] instead of being silently dropped.
Embedding model selector. Configure the Gemini embedding model from Global Settings. Saved models are persisted in a dedicated settings table; existing embeddings are cleared automatically when the effective model changes.
Configurable send key. Choose whether Enter sends (with Shift+Enter for newline) or the other way around, from Global Settings.
KOJO_LOG_LEVEL env var (debug / info / warn / error) — set log level without --dev.
Code copy button on fenced code blocks, with a fallback for non-secure contexts / older browsers.
Fixed
Single newlines in Markdown now render as <br> (via remark-breaks).
Japanese IME composition Enter no longer triggers submit in agent chat, session input, and related forms.
Group DM agent display names update in real time after a rename.
Group DM long member lists truncate to "A, B +N" when there are four or more members.
Default embedding model is now gemini-embedding-001 (the old text-embedding-004 is retired).
Improved
Group DM style switcher is now an icon button with a popover instead of a <select>, reclaiming horizontal space.
MCP handler no longer logs request or response bodies — only method / status / latency / byte counts — to avoid leaking Slack data.
Slack attachments saved to the shared temp dir are now 0600 and bounded by an enforced 20 MB cap (partial downloads are cleaned up).
slackListChannelsHandler split into pure helpers (parseListChannelsArgs, matchChannel, listSlackChannels) with full unit coverage.
GlobalSettings split into three hooks + three presentational sections.
Embedding requests use the shared Gemini HTTP client (60 s timeout) instead of http.DefaultClient.
Requirements
Go 1.25+
Node 22+ for building the web UI
Tailscale for the default (tsnet) listener; use --local to bind to 127.0.0.1 instead