Install any skill in seconds. Free to start, no credit card required.
Get Started Free →dpro-at/channel-extension
Use when adding a new messaging channel to Tel-Agent or changing an existing one — a transport under api/channels/, its official extension manifest, its settings card, tests, health and docs. Covers the file checklist, the two inbound shapes (dial-out and the public door), the credential and signature rules that are not negotiable, the declarative setup descriptor the generic card draws from, and the test shape every channel ships with.
Passed 22 of 22 test cases with the skill, and 6 of 22 without it.
and 17 more in the full report
16 fixed6 passed either way0 still failing0 broke3 errored
Tokens, turns and time describe resource use, not a dollar price.
One of 16 test cases the skill fixed. Same model, same prompt, with and without the skill.
When adding support for a new channel extension named 'Viber', how should localized display names be configured across frontend language files? Should we edit all 34 language JSON files under locales/?
| Checked | Without skill | With skill |
|---|---|---|
| Restricts display name edits to locales/en/web.json. | Missed | Passed |
The instructions your model reads when the skill loads.
You are adding a messaging channel to Tel-Agent. A channel is a route a customer
uses to reach a business — someone is typing on the other end. If nobody outside the
business is on the other end, it is an integration, not a channel, and it is reached
through the HTTP tool instead (Rule 5 in CLAUDE.md). Do not build it here.
Read first, in this order: CLAUDE.md (the contract), docs/SPEC.md §B9 (secrets)
and §B13 (channels), then api/channels/discord.py end to end. Discord is the model
every channel copies: a dial-out transport with a supervisor loop, an answering policy,
storage with dedup, and delivery-before-storage. For a channel that receives webhooks,
also read api/channels/meta_chat.py and api/routes/meta_chat_channels.py — that is
the public door, and its guards are the whole of this product's exposed surface.
Write everything from the platform's official documentation and from the shape of
the existing modules. Write it fresh. Never paste code from another product into this
repository, never name another product anywhere in it, and never add a runtime
dependency — httpx, websockets, cryptography and the standard library cover every
platform we ship.
One kind, one transport module, one manifest, one descriptor, one test file. In order:
| # | Path | What goes there |
|---|---|---|
| 1 | api/channels/<kind>.py | The transport. Module surface below. |
| 2 | api/extensions/builtin/<kind>.py | MANIFEST + register(context). Copy the Discord one; change slug, name, description. Category channels, origin official, scopes conversations.write, messages.read, messages.write, hooks message.received, ui_slots conversation.detail. |
| 3 | api/extensions/builtin/__init__.py | Append the module to BUILTIN. |
| 4 | api/models/conversation.py | The kind is already in CHANNEL_KINDS (one migration added every kind of this wave). If yours is not, add it and an Alembic revision that widens the channel_kind CHECK constraint — tests/test_migrations.py runs it on SQLite and PostgreSQL. |
| 5 | api/channels/generic.py | Add the module's import path to _DECLARED. The registry imports it on first read; that is what serves its card and its routes. |
| 6 | api/main.py | Dial-out channels: append transport.loop(sessionmaker) to background. Door channels: nothing — the generic public route dispatches by kind. |
| 7 | tests/test_<kind>_channel.py | The test file. Shape below. |
| 8 | web/components/brands/marks.tsx + source/<kind>.svg | The mark, when the platform has a logo. Record the source and licence in web/components/brands/README.md. A channel with no owner (SMS, IRC) gets a drawn glyph in web/components/shell/channel-mark.tsx. |
| 9 | web/app/[locale]/settings/settings.tsx | Add the kind to GENERIC_CHANNELS. The card draws itself from the descriptor. |
| 10 | locales/en/web.json | The display name under "channels". Other languages follow through the translation pipeline; do not touch thirty-four files. |
| 11 | docs/SPEC.md §B13, README.md icon row, docs/brand/channels/ | One row, one icon, one table line. |
test cases passed, vs 6 / 22 without
More skills from the same source and nearby in the registry, with their headline benchmark lift.