fai-tune-08-copilot-studio-bot — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited fai-tune-08-copilot-studio-bot (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
solution-plays/08-copilot-studio-bot/config/
├── topics.json # Topic routing and trigger phrases
├── generative.json # Generative answers (GPT) settings
├── handoff.json # Live agent handoff configuration
├── channels.json # Teams, Web, Slack channel config
└── guardrails.json # Safety and quality thresholds// config/topics.json
{
"fallback_behavior": "generative_answers",
"topic_confidence_threshold": 0.75,
"max_topic_suggestions": 3,
"disambiguation_enabled": true,
"greeting_topic": "Welcome",
"escalation_topic": "Transfer to Agent",
"custom_topics": [
{
"name": "Order Status",
"trigger_phrases": ["where is my order", "track package", "delivery status"],
"action": "api_call",
"api_endpoint": "/api/orders/{orderId}/status"
},
{
"name": "Return Request",
"trigger_phrases": ["return item", "refund", "exchange"],
"action": "guided_flow",
"require_authentication": true
}
]
}// config/generative.json
{
"enabled": true,
"model": "gpt-4o-mini",
"temperature": 0.5,
"max_tokens": 1024,
"knowledge_sources": [
{ "type": "sharepoint", "url": "https://contoso.sharepoint.com/kb" },
{ "type": "website", "url": "https://help.contoso.com" },
{ "type": "dataverse", "table": "kb_articles" }
],
"citation_style": "inline",
"no_answer_response": "I don't have information about that. Let me connect you with a support agent.",
"content_moderation": "strict"
}Tuning checklist:
| Parameter | Range | Default | Guidance |
|---|---|---|---|
temperature | 0.3-0.7 | 0.5 | Lower = more factual; higher = more conversational |
max_tokens | 256-2048 | 1024 | Keep short for chat; increase for detailed answers |
content_moderation | strict/medium | strict | Always strict for customer-facing bots |
citation_style | inline/footnote/none | inline | Inline builds trust with source links |
// config/handoff.json
{
"handoff_triggers": [
{ "condition": "user_requests_agent", "phrases": ["talk to human", "agent please"] },
{ "condition": "sentiment_negative", "threshold": -0.5 },
{ "condition": "topic_not_found", "after_attempts": 2 },
{ "condition": "authentication_required", "and_user_not_authed": true }
],
"handoff_target": "dynamics_omnichannel",
"context_transfer": {
"include_conversation_history": true,
"include_topic_detected": true,
"include_sentiment_score": true,
"max_history_messages": 10
},
"queue_message": "Connecting you with a support agent. Estimated wait: {wait_time}."
}// config/guardrails.json
{
"quality": {
"topic_resolution_rate": 0.80,
"user_satisfaction_target": 4.0,
"avg_turns_to_resolution": 5
},
"safety": {
"content_moderation": "strict",
"block_competitor_mentions": true,
"pii_masking_in_logs": true,
"max_consecutive_bot_messages": 3
},
"cost": {
"max_tokens_per_conversation": 8192,
"max_generative_calls_per_hour": 1000,
"cache_common_responses": true
}
}| Check | Expected | Command | |
|---|---|---|---|
| Content moderation | strict | jq '.content_moderation' config/generative.json | |
| Handoff triggers defined | >=2 | `jq '.handoff_triggers | length' config/handoff.json` |
| PII masking | true | jq '.safety.pii_masking_in_logs' config/guardrails.json | |
| Token budget | <=8192/conversation | jq '.cost.max_tokens_per_conversation' config/guardrails.json |
| Issue | Cause | Fix |
|---|---|---|
| Bot gives wrong answers | Knowledge source outdated | Refresh SharePoint/website index |
| Too many handoffs | Topic threshold too high | Lower topic_confidence_threshold to 0.65 |
| Users frustrated | No disambiguation | Enable disambiguation_enabled: true |
| High token costs | Long conversations | Reduce max_tokens to 512 for simple topics |
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.