concinno-skills-chat
Chat-platform agent skills for Concinno.
Native Python API, MCP fallback optional. MIT / Apache-2.0 licensed SDKs only
— we deliberately skip python-telegram-bot (GPL-3.0) to avoid copy-left
contamination of the Concinno ecosystem.
Status
MVP (0.1.0) — four one-shot tools:
| Tool class | Platform | Underlying SDK | SDK licence |
|---|---|---|---|
SlackPost |
Slack | slack-sdk |
MIT |
DiscordPost |
Discord | discord.py |
MIT |
TelegramSend |
Telegram | aiogram |
MIT |
LineSend |
LINE | line-bot-sdk (v3) |
Apache-2.0 |
WhatsApp / Microsoft Teams are intentionally deferred until a maintained Python SDK with a permissive licence exists (as of 2026-04 the ecosystem is either unofficial or AGPL-adjacent).
Install
pip install concinno-skills-chat
All four SDKs are hard dependencies and pulled in automatically.
Credentials
Each platform's bot token lives under a well-known key in the Concinno
CredentialStore, which reads (in order):
- Process runtime overrides via
CredentialStore.set(...). - Env var
CONCINNO_CRED_<UPPER_KEY>. ~/.concinno/credentials.json.
| Key | Env var |
|---|---|
slack_bot_token |
CONCINNO_CRED_SLACK_BOT_TOKEN |
discord_bot_token |
CONCINNO_CRED_DISCORD_BOT_TOKEN |
telegram_bot_token |
CONCINNO_CRED_TELEGRAM_BOT_TOKEN |
line_channel_access_token |
CONCINNO_CRED_LINE_CHANNEL_ACCESS_TOKEN |
Example ~/.concinno/credentials.json:
{
"slack_bot_token": "xoxb-...",
"discord_bot_token": "...",
"telegram_bot_token": "123456:AAA...",
"line_channel_access_token": "..."
}
If a token is missing the tool returns
{"error": "no <service> credentials — set via CredentialStore or env ..."}
rather than crashing.
Usage via Concinno ToolRegistry
When the consumer sets CONCINNO_LOAD_PLUGINS=1, the default registry
auto-mounts every chat tool:
import os
os.environ["CONCINNO_LOAD_PLUGINS"] = "1"
from concinno.tools.registry import get_default_registry
reg = get_default_registry()
assert {"SlackPost", "DiscordPost", "TelegramSend", "LineSend"} <= set(
reg.list_deferred()
)
slack = reg.get("SlackPost")
slack.call(action="send", channel="#general", text="hi from concinno")
Direct Python usage
from concinno_skills_chat import (
SlackPost,
DiscordPost,
TelegramSend,
LineSend,
)
SlackPost().call(action="send", channel="C12345", text="hi")
DiscordPost().call(action="send", channel_id=12345, content="hi")
TelegramSend().call(action="send", chat_id=12345, text="hi")
LineSend().call(action="push", user_id="U1234", text="hi")
All tools return {"ok": True, ...} on success or {"error": "..."}
on failure — same shape as the other Concinno built-in tools. No
exceptions escape the call() surface.
Concurrency
All four tools set is_concurrency_safe = False. Chat platform rate
limits make serial calls the sane default; the Concinno scheduler will
honour this automatically.
License
Apache-2.0. See LICENSE in the Concinno monorepo.
Metadata
Release files for concinno-skills-chat 0.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| concinno_skills_chat-0.1.0.tar.gz | 40.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| concinno_skills_chat-0.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 54.6 kB
Release files / concinno_skills_chat-0.1.0.tar.gz
| Download URL | concinno_skills_chat-0.1.0.tar.gz |
|---|---|
| Size | 40.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
21049c33d1591655bcdc71b15e8c27c7711cdf10a719f628cc828b955dc95d77
|
|
BLAKE2b-256 checksum How to use checksums |
fca2a637cab4e7a162db687e84ba707c90edf80d5b9db19bee4496396eed0bea
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.9
|
Release files / concinno_skills_chat-0.1.0-py3-none-any.whl
| Download URL | concinno_skills_chat-0.1.0-py3-none-any.whl |
|---|---|
| Size | 14.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
f07bf44db1ef7aeeef16dd5ca897ccdf319e6c06db2ca3fee116f79809b4559a
|
|
BLAKE2b-256 checksum How to use checksums |
98b995466c23635d167bd3867c783a0f7e5fa80e66f08c39deabb5660ee6a607
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.11.9
|