audio-dispatch — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited audio-dispatch (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.
Transcribes a multi-speaker audio recording with Voxtral diarization, classifies each turn, and produces structured action items and decisions per speaker.
Profile requirements:
voxtral_transcribe — available in core profile (default)mistral_chat (for classification fallback) — available in core profilefiles_upload (to upload a local audio file) — requires MISTRAL_MCP_PROFILE=fullmistral_classify (optimized classification) — requires MISTRAL_MCP_PROFILE=fullbatch_create (bulk processing of many speakers) — requires MISTRAL_MCP_PROFILE=fullCore-compatible path: if running on the default profile, classification uses mistral_chat with json_schema instead of mistral_classify — same quality, slightly different call shape (see Step 3).
Ask the user for one of:
files_upload (requires MISTRAL_MCP_PROFILE=full), note the file_id"fr", "en") — optional, improves accuracyCall voxtral_transcribe with diarization enabled:
{
"audio": {
"type": "file_url",
"fileUrl": "<URL>"
},
"diarize": true,
"timestampGranularities": ["segment"],
"language": "<ISO 639-1 code, or omit for auto-detection>"
}For uploaded files: "type": "file", "fileId": "<file_id>" instead.
structuredContent.segments contains turns with speakerId, text, start, end, score.
Group segments by speakerId. For each speaker, concatenate their text.
Option A — `mistral_classify` (requires `MISTRAL_MCP_PROFILE=full`):
{
"model": "ministral-3b-latest",
"inputs": "<speaker text>",
"labels": ["action_item", "decision", "open_question", "context", "social"]
}For >5 speakers or very long transcripts, use batch_create (requires full) to process all speakers concurrently.
Option B — `mistral_chat` with `json_schema` (core profile, no extra flags needed):
{
"model": "mistral-small-latest",
"temperature": 0,
"response_format": {
"type": "json_schema",
"json_schema": {
"name": "speaker_classification",
"schema": {
"type": "object",
"properties": {
"action_items": { "type": "array", "items": { "type": "string" } },
"decisions": { "type": "array", "items": { "type": "string" } },
"open_questions": { "type": "array", "items": { "type": "string" } }
},
"required": ["action_items", "decisions", "open_questions"]
}
}
},
"messages": [
{
"role": "user",
"content": "<speaker text>\n\nExtract: (1) action items — tasks explicitly committed to, with any deadlines. (2) decisions — choices confirmed or made. (3) open questions — unresolved questions raised. Base your extraction only on the text above."
}
]
}Aggregate results into a per-speaker structure:
Present a summary table followed by a flat TODO list:
MEETING DISPATCH
────────────────────────────────────────
Duration: [Xmin] Speakers: [N] Segments: [N]
| Speaker | Action Items | Decisions | Open Questions |
|---------|-------------|-----------|----------------|
| spk_0 | 2 | 1 | 1 |
| spk_1 | 1 | 0 | 2 |
ACTIONS BY SPEAKER
──────────────────
[spk_0]
□ [action item text] [deadline if mentioned]
DECISIONS
─────────
• [decision text] (spk_X)
OPEN QUESTIONS
──────────────
? [question text] (spk_X)Offer to pass the action items to french_meeting_minutes for a formatted compte-rendu, or to mistral_chat to draft follow-up emails per speaker.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.