agentleFS
ccheneyccheney/robust-skills/skills/teams-adaptive-cards/SKILL.md

teams-adaptive-cards

Skill60 starsChanged 2 months agoMITView on GitHub

Build, validate, or repair Adaptive Card layouts, actions, forms, and delivery wrappers for Microsoft Teams. Use when Teams is the target host, including bot, webhook, Graph, and MessageCard migration tasks. Exclude Windows/custom card hosts and Teams text-only formatting.

The file

We split this skill into the rules it gives an agent

3 rules. About 0 are common, 2 are distinctive, and 1 is very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈2

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 1

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Distinctive:

    Use the requested content/actions, delivery code or payload, and target clients as input.

    line 12
  2. Distinctive:

    If delivery is unspecified, a raw card can be prepared while clarifying the transport.

    line 21
  3. Very specific:

    Use card elements for layout: TextBlock, FactSet, Table, inputs, and actions as appropriate.

    line 27

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Teams Adaptive Cards

Build the requested card for its actual Teams transport and client capabilities. The user's explicit instructions take precedence over this skill's guidelines.

Select the transport

Use the requested content/actions, delivery code or payload, and target clients as input. A card's JSON and its delivery wrapper are separate contracts.

TransportRequired shape
Bot / Teams SDKActivity attachments[], card content as an object
Workflows webhook{ "type": "message", "attachments": [...] }
Graph chatMessageHTML attachment placeholder with matching ID; attachment content as a JSON string
Message extensionAttachment and preview appropriate to the extension type

If delivery is unspecified, a raw card can be prepared while clarifying the transport. Do not invent a webhook URL, recipient, or bot backend. An approval/form needs a transport that handles its actions; a notification webhook is not a bot.

Match capabilities

The references use a Teams baseline of card versions through 1.5, with 1.2 as a conservative mobile fallback. Select the minimum version needed by the requested elements and verify current host support when newer features matter. A schema version alone does not guarantee a Teams client renders an element.

Use card elements for layout: TextBlock, FactSet, Table, inputs, and actions as appropriate. TextBlock Markdown is limited; HTML, Markdown tables, and code fences are not substitutes for supported card elements. Provide wrapping, meaningful fallback text, and consistent mention metadata.

References

Load only the transport, element, or interaction needed.

TaskReference
Delivery path, bots, message extensionsSURFACES.md
Inputs, tables, code, charts, people pickerELEMENTS.md
Submit/Execute, refresh, user-specific viewsACTIONS.md
Webhook notifications or requested connector migrationWEBHOOKS-WORKFLOWS.md
Graph attachment IDs, encoding, permissionsGRAPH-ATTACHMENTS.md
Width, mobile layout, accessibilityRESPONSIVE-DESIGN.md
Compact wrapper/version/limit lookupCHEATSHEET.md

Validate and deliver

For generated or changed payload files, run scripts/check-teams-card.mjs with Node.js. Resolve the script relative to this skill's directory, not the user's working directory:

node /path/to/teams-adaptive-cards/scripts/check-teams-card.mjs --target webhook /path/to/payload.json

Targets: auto, card, bot, webhook, graph. Exit 0 means no errors (warnings can remain), 1 means errors/invalid JSON, and 2 means invalid CLI usage. Interpret warnings against the requested client/transport; the linter is a local check, not proof of live rendering. If Node is unavailable, inspect the wrapper and fields and state that the linter was not run.

Deliver the requested JSON or integration fix and verification outcome. Test live delivery only when requested or already authorized; payload creation does not require posting. Consult Teams card documentation for host capabilities not established by the bundled references.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.