CtrlK
BlogDocsLog inGet started
Tessl Logo
SkillPublic

ms-teams-apps

Microsoft Teams bots and AI agents - Claude/OpenAI, Adaptive Cards, Graph API

48

Quality

61%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide
SecuritybySnyk

Low

Low-risk findings worth noting

Fix and improve this skill with Tessl

tessl review fix ./skills/ms-teams-apps/SKILL.md
SKILL.md
Quality
Evals
Security

Quality

Content

46%Weight 40%Scale 1-5

Reviews the quality of instructions and guidance provided to agents. Good implementation is clear, handles edge cases, and produces reliable results.

The body is rich with concrete, largely executable examples and covers the domain broadly, but it is a monolithic ~1250-line reference that buries Teams-specific knowledge under generic SDK boilerplate Claude already knows. There is no progressive disclosure (no reference files, no pointers), and workflows lack proactive validation checkpoints, relying instead on a reactive troubleshooting table.

Suggestions

Split the body into one-level-deep reference files (e.g., references/cards.md, references/graph.md, references/rag.md, references/deployment.md) and keep SKILL.md as a concise overview with clearly signaled links.

Delete or compress generic SDK boilerplate Claude already knows — the full Anthropic tool-use loop, basic messages.create calls, docker-compose, and .env listings — keeping only the Teams-specific wiring (manifest, app.on handlers, Teams Toolkit commands).

Add explicit validation checkpoints to the workflow, e.g., validate the manifest against the schema and test the bot locally via ngrok/Teams Toolkit preview before deploying, rather than only offering a reactive troubleshooting table.

Move time-sensitive specifics (SDK landscape 2025, model names, manifest version, Node runtime) into a clearly labeled versions/deprecations section so they can be maintained without penalizing the evergreen content.

DimensionReasoningScore

Conciseness

At ~1250 lines, the body inlines large amounts of material Claude already knows — the generic Anthropic tool-use agent loop, basic messages.create calls, boilerplate Adaptive Card JSON, a docker-compose file, and .env variable listings — and scatters time-sensitive specifics ('SDK LANDSCAPE (2025)', 'claude-sonnet-4-6', manifest v1.17, NODE:18-lts) with no deprecated/versions section. This matches 'Noticeably verbose; several unnecessary explanations or padded sections'; it is not 1 because the padding is dense code rather than tutorial prose, and not 3 because the removable volume is substantial, not incidental.

2 / 5

Actionability

Mostly executable, copy-paste-quality guidance: install commands, a complete manifest JSON, TypeScript handlers, az CLI provisioning, Docker, ngrok testing, and unit tests. It falls short of 5 due to fragments (the message-extension manifest is only a composeExtensions block), placeholder implementations ('// Implement your search logic'), an empty app.on('message') handler claiming 'AI automatically handles the conversation', and handleAuth referencing an undefined CardFactory import.

4 / 5

Workflow Clarity

Sections are organized by topic rather than workflow; a create→develop→deploy→test sequence is only implicit, and validation is reactive (a troubleshooting table) rather than proactive — there is no 'validate the manifest/card before publishing' checkpoint. This matches 'Steps listed but validation gaps; sequence present but checkpoints missing or implicit'.

3 / 5

Progressive Disclosure

There are no bundle files at all; the entire reference library — three card templates, a full Graph operations class, RAG setup, deployment guides, and project templates — is inlined in a single ~1250-line SKILL.md. Section headers are clear, but content that clearly belongs in separate files is entirely inline with zero references, matching 'content that clearly belongs in separate files is inlined'; it does not reach 3 because that anchor assumes references are at least present.

2 / 5

Total

11

/

20

Passed

Description

60%Weight 40%Scale 1-5

Based on the skill's description, can an agent find and select it at the right time? Clear, specific descriptions lead to better discovery.

The description identifies a distinctive, well-scoped niche and includes strong natural keywords, but it reads as a topic list rather than a capability statement — there are no verbs describing what the skill does, and no 'use when' trigger guidance in the description field itself. Rewriting it as actions plus an explicit trigger clause would raise both specificity and completeness.

Suggestions

Lead with concrete third-person actions, e.g., 'Build and deploy Microsoft Teams bots, tabs, and message extensions with Adaptive Cards, Microsoft Graph, and Claude/OpenAI integration.'

Add an explicit trigger clause to the description, e.g., 'Use when creating, debugging, or deploying Teams apps, bots, message extensions, or Teams AI agents.'

Include the other app surfaces the skill covers (tabs, message extensions, webhooks/connectors) so users asking about those naturally match this skill.

DimensionReasoningScore

Specificity

The description is a noun-phrase list ("Microsoft Teams bots and AI agents - Claude/OpenAI, Adaptive Cards, Graph API") with no action verbs at all — it names the domain and technologies but describes no concrete actions, matching the anchor 'Names the domain but actions are minimal or generic'. It is not 3 because no 1-2 concrete actions (e.g., 'Build', 'Create', 'Deploy') are stated, and not 1 because the domain is specifically named.

2 / 5

Completeness

The 'what' is reasonably clear (Teams bot/agent development across named stacks), but the description field contains no 'Use when...' clause or equivalent trigger guidance, which caps completeness at 3 per the judging guidelines. It is not 4/5 because 'when' is entirely absent from the evaluated description text.

3 / 5

Trigger Term Quality

Terms like "Microsoft Teams", "bots", "AI agents", "Adaptive Cards", and "Graph API" are natural phrases users would say when needing this skill. It falls short of 5 because common variations the skill itself covers — "tabs", "message extensions", "Teams app", "connectors" — are missing.

4 / 5

Distinctiveness Conflict Risk

"Microsoft Teams" anchors a clear, well-defined niche with distinct triggers; the risk of firing for an unrelated skill is minimal. The LLM mentions (Claude/OpenAI) are framed within the Teams context, so they do not create meaningful overlap with generic LLM skills.

5 / 5

Total

14

/

20

Passed

Validation

87%

Checks the skill against the spec for correct structure and formatting. All validation checks must pass before discovery and implementation can be scored.

Validation — 14 / 16 Passed

Validation for skill structure

CriteriaDescriptionResult

skill_md_line_count

SKILL.md is long (1253 lines); consider splitting into references/ and linking

Warning

frontmatter_unknown_keys

Unknown frontmatter key(s) found; consider removing or moving to metadata

Warning

Total

14

/

16

Passed

Repository

alinaqi/maggy

Path

skills/ms-teams-apps/SKILL.md

Reviewed

Table of Contents

Is this your skill?

If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.