Bridge kiro-cli to chat platforms (Telegram, Lark/Feishu, Discord, Web) via ACP protocol.
- ๐ ACP Protocol โ Communicates with kiro-cli via JSON-RPC 2.0 over stdio
- ๐ Web Chat โ Browser chat UI: streaming, inline permission card, message history, click-to-zoom images
- ๐ฑ Telegram Bot โ Streaming, tool call display, inline-keyboard permission approval, image I/O
- ๐ฌ Lark/Feishu Bot โ Topic-based sessions, @bot trigger, image I/O, feishu/lark domain switch
- ๐ฎ Discord Bot โ @bot trigger, image I/O, 2000-char auto-split
- ๐ฅ Admin Dashboard โ NiceGUI admin panel: adapter start/stop, live session stats, tabbed Settings (ACP / Workspaces / Adapters)
- ๐ Cross-platform session sharing โ Same workspace shares one kiro session across TG/Lark/Discord/Web
- ๐ Multi-workspace โ
per_chat(each user picks via/workspace) orfixed(all chats share one) - ๐ Permission Approval โ Inline keyboards (TG), inline card (Web), or text y/n/t fallback
- ๐ก๏ธ Authorization โ Per-adapter allowlist gated by a
Require authorizationswitch; new users onboard via one-time/claim <token> - โฐ Heartbeat tasks โ Schedule kiro prompts (interval or cron) and push the answer to any adapter; broadcast or targeted delivery
- ๐ค Agent & Model switching โ
/agentand/modelcommands across all adapters - โก On-demand startup โ kiro-cli starts when the first message arrives, idle sessions are reaped automatically
- ๐ผ๏ธ Image support โ Send images for visual analysis (JPEG, PNG, GIF, WebP); click thumbnails to preview full-size
- ๐งฐ Adapter enable/disable โ Flip each bot on/off from the dashboard without touching credentials
- ๐ Cancel & Reset โ
/cancelinterrupts a turn,/resetstarts a fresh session
Admin Dashboard โ adapter status, live session stats, per-adapter controls
Web Chat โ streaming replies, tool call indicators, Markdown rendering, click-to-zoom images
Settings โ tabbed config (ACP / Workspaces / Adapters / Heartbeat), per-tab save
Telegram Bot โ tool calls, inline-keyboard permission, Markdown rendering
โโโโโโโโโโโโโ โโโโโโโโโโโ โโโโโโโโโโโ โโโโโโโโโโโ
โ Telegram โ โ Lark/ โ โ Discord โ โ Web โ
โ Adapter โ โ Feishu โ โ Adapter โ โ Chat โ
โโโโโโโฌโโโโโโ โโโโโโฌโโโโโ โโโโโโฌโโโโโ โโโโโโฌโโโโโ
โโโโโโโโโโโโโโดโโโโโโโฌโโโโโดโโโโโโโโโโโโ
โโโโโโโโโโโดโโโโโโโโโโ
โ Bridge โ session management, permission routing
โโโโโโโโโโโฌโโโโโโโโโโ
โโโโโโโโโโโดโโโโโโโโโโ
โ ACPClient โ JSON-RPC 2.0 over stdio
โโโโโโโโโโโฌโโโโโโโโโโ
โโโโโโโโโโโดโโโโโโโโโโ
โ kiro-cli โ acp subprocess
โโโโโโโโโโโโโโโโโโโโโ
# Prerequisites: kiro-cli installed and logged in
git clone https://github.com/aleck31/Kiro2Chat.git
cd Kiro2Chat
uv sync
# Run in foreground (dev / debug)
uv run kiro2chat run
# Or deploy as a systemd user service
kiro2chat install # generate unit file, enable service
kiro2chat start # start daemon
kiro2chat status # show status
kiro2chat stop # stop daemonOpen http://127.0.0.1:7860 for the admin dashboard. Configure tokens at /settings.
For platform-specific bot setup (BotFather, Lark/Feishu developer console, Discord developer portal) and production operation tips, see docs/DEPLOYMENT.md.
All adapters support the following commands:
| Command | Description |
|---|---|
/model |
View/switch model |
/agent |
View/switch agent mode |
/workspace |
List workspaces, marking the active one |
/workspace <name> |
Switch to a workspace |
/context |
Show context usage |
/cancel |
Cancel current operation |
/reset |
Reset session |
/claim <token> |
Redeem a claim token to join the allowlist |
/help |
Show help |
Discord & Lark: @bot to trigger in group chats, DM for direct conversation.
All configuration is managed via ~/.config/kiro2chat/config.toml, or through the Web Admin Dashboard at /settings.
[telegram]
tg_bot_token = "your-token"
tg_enabled = true # disable to keep creds but not auto-start
[lark]
lark_app_id = "cli_xxx"
lark_app_secret = "xxx"
lark_domain = "feishu" # feishu | lark
lark_enabled = true
[discord]
discord_bot_token = "your-token"
discord_enabled = true
[web]
web_host = "127.0.0.1"
web_port = 7860
[acp]
kiro_cli_path = "kiro-cli"
workspace_mode = "per_chat" # per_chat | fixed
fixed_workspace = "default" # only used when workspace_mode = "fixed"
idle_timeout = 1200 # seconds before idle session reap; 0 disables
response_timeout = 3600 # max wait per prompt
[workspaces.default]
path = "~/.local/share/kiro2chat/workspaces/default"
# session_id = "..." # managed by kiro2chat, do not set manually
[workspaces.my-project]
path = "~/repos/my-project"Sessions are keyed by workspace, not chat_id. Messages sent via Telegram, Lark,
Discord, or Web that all target the same workspace land in the same kiro session โ
giving cross-platform context continuity. Each prompt is tagged with [platform/user]
so kiro can tell messages apart.
src/
โโโ app.py # Entry point, CLI
โโโ config.py # Configuration (dataclass with field factories)
โโโ config_manager.py # TOML config read/write
โโโ log_context.py # Logging context
โโโ manager.py # Adapter lifecycle manager
โโโ server.py # WebServer โ hosts NiceGUI, assembles pages, boots manager
โโโ acp/
โ โโโ client.py # ACP JSON-RPC client (kiro-cli subprocess)
โ โโโ bridge.py # Per-workspace session sharing, permission routing
โโโ adapters/
โ โโโ base.py # Adapter interface + shared /command dispatcher
โ โโโ telegram.py # Telegram adapter (aiogram)
โ โโโ lark.py # Lark/Feishu adapter (lark-oapi WebSocket)
โ โโโ discord.py # Discord adapter (discord.py)
โ โโโ web.py # Web Chat adapter โ send/receive, permission card
โโโ webui/
โโโ layout.py # Shared top-nav page shell
โโโ dashboard.py # / โ adapter status, sessions, live stats
โโโ settings.py # /settings โ tabbed config (ACP / Workspaces / Adapters)
โโโ chat.py # /chat โ chat page layout + rendering helpers
| Component | Technology |
|---|---|
| ACP Transport | JSON-RPC 2.0 over stdio |
| Web UI (Chat + Admin) | NiceGUI |
| Telegram Bot | aiogram 3 |
| Lark/Feishu Bot | lark-oapi (WebSocket) |
| Discord Bot | discord.py 2 |
| Config | TOML (config.toml) |
| Package Manager | uv + hatchling |
| Python | โฅ 3.13 |
- open-kiro โ OpenAI-compatible API gateway for Kiro (the API proxy counterpart)
MIT








