asd-meeting-translator-beb2ab — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited asd-meeting-translator-beb2ab (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.
This skill takes a meeting transcript and produces a four-section brief: decisions reached, explicit asks of the user, explicit asks of others, and ambiguous items quoted verbatim from the transcript. It also surfaces prior decisions already recorded against the project and writes the new decisions back into the cognitive graph. It does not interpret motivation, infer subtext, or fabricate asks — the brief_meeting server enforces verbatim anchoring on every ambiguous span and rejects fabrications with VERBATIM_ANCHOR_FAILED.
Activate when any of the following is true:
/brief or /meeting.summarize this meeting, summarise this meeting, what did we agree, what did I commit to.*.transcript.txt or *.meeting.md.Name:) AND the message contains no other specific instruction. In this case the skill offers the brief rather than running silently — one short line: Looks like a transcript. Want a brief? (decisions, asks, ambiguous items).Do not activate inside an ongoing conversation that already has the brief on screen. Do not activate on chat logs that are not meeting transcripts (e.g. PR review threads, Slack DMs) — those are translation-layer work, not meeting-brief work.
The skill requires two things before it can call brief_meeting:
me label that identifies the user in the transcript. Resolve as follows, in order:profile.identity.display_name is set, use that string.Which name in this transcript is you? Do not guess. Do not pick the most-quoted speaker. The verbatim-anchor enforcement downstream will reject fabricated attributions, so ambiguity here is silently fatal.If the user supplies the answer, proceed. If they do not, stop. Do not call brief_meeting without me.
Follow these steps in order. Do not improvise extra tool calls.
/brief neurodock) or in the first 1000 characters of the transcript (subject lines like Project: or Re:). If found, remember it as project. If not, leave project unset — do not invent one.mcp-translation.brief_meeting(transcript=<full transcript>, me=<resolved name>, project=<project or omitted>). Pass speakers only if the user supplied a roster; do not fabricate one from the transcript.VERBATIM_ANCHOR_FAILED: surface this verbatim and stop: I couldn't anchor one of the ambiguous items to the transcript. This usually means the transcript wasn't captured verbatim, or the model paraphrased a span. Want to retry with a cleaner transcript, or skip the ambiguous-items section? Do not retry silently. Do not fall back to a non-verbatim brief.TRANSCRIPT_TOO_LONG: tell the user the cap is 90 minutes / 200,000 characters and to chunk.ME_REQUIRED: ask the clarifying question from "Required inputs" and re-run.MODEL_UNAVAILABLE: tell the user the configured LLM is unreachable; do not retry automatically.project is set, call mcp-cognitive-graph.recall_decisions(project=<project>, since=<30 days ago, ISO date>) once. Keep up to three most-recent. If project is not set, skip this step — do not query an unscoped graph.output.decisions, call mcp-cognitive-graph.record_fact exactly once:subject = { type: "decision", name: <decision.text truncated to 200 chars> }predicate = "decided_in"object = { type: "project", name: <project> } if project is set, otherwise skip the entire write (do not invent a project name to satisfy the predicate).source = "meeting transcript via asd-meeting-translator"confidence = 0.85Do not write asks, ambiguous items, or my_asks rows. Decisions only. Cap at 10 writes per invocation; if the brief contains more decisions, write the first 10 in transcript order and note the truncation count in the closing line.
6a. Fractionate the asks of you into atomic tasks. For each entry in output.my_asks, call mcp-task-fractionator.decompose exactly once, passing the ask text as the goal argument. The tool returns a list of atomic tasks sized 5–90 minutes each. Render the returned tasks back to the user under their parent ask, appended to the brief in a new section titled ### Atomic tasks from asks of you, grouped one block per ask:
### Atomic tasks from asks of you
**<ask.text>**
- <task.title> · <task.estimate_minutes> min
- <task.title> · <task.estimate_minutes> minRules:
mcp-task-fractionator is not configured or the tool is unavailable, skip this step entirely. Do not block the brief. Do not mention the missing tool in the output. The asks already appear in the ### Asks of you section — that is the fallback surface.output.my_asks is empty, skip this step. Do not render the section header.(N further asks not fractionated).mcp-cognitive-graph.record_fact is available, persist each fractionation once per parent ask: subject = { type: "task_group", name: <ask.text truncated to 200 chars> }, predicate = "fractionated_from", object = { type: "meeting", name: <project or "untitled meeting"> }, source = "asd-meeting-translator step 6a", confidence = 0.8. If mcp-cognitive-graph is not configured, skip the persistence — do not block on it.decompose are surfaced literally by error code on a single trailing line (e.g. Fractionator error: GOAL_TOO_VAGUE). Do not retry. Do not fall back to a paraphrase.Strict "Answer First" structure. The first sentence must fit in 80 characters and must state the count of decisions, asks-of-you, asks-of-others, and ambiguous items in plain prose.
<One sentence, ≤ 80 chars, plain prose, e.g.: "Brief: 4 decisions, 2 asks of you, 3 asks of others, 2 ambiguous items.">
### Decisions
- <decision.text> · decided by <decided_by joined with ", "> (or "unattributed")
- <decision.text> · ...
### Asks of you
- <ask.text> · due <ask.due> (or "(no deadline stated)") · asked by <ask.asker or "unattributed">
- ...
### Asks of others
- <ask.text> · asked by <ask.asker or "unattributed"> · due <ask.due> (or "(no deadline stated)")
- ...
### Ambiguous items
- "<quoted_span.text>" — <ambiguous_item.reason>
- ...
### Prior decisions on this project (last 30 days)
- <decision name> (<decided_on>)
- ...Rules:
0 — do not omit the section header in the body either; render - (none) under that header so the structure stays predictable.quoted_span.text returned by the server, character-for-character. Wrap in double quotes. Do not paraphrase, do not normalise punctuation, do not strip speaker labels.vague_timeline, unassigned_owner, hedged_commitment). If the server returns an unknown reason code, render it as other.project is unset OR when recall_decisions returned an empty list. Do not render an empty header.Source: meeting transcript. Model: <model_provenance.provider>/<model_provenance.model> (<model_provenance.mode>). Decisions written to graph: <N>. If model_provenance.mode == "cloud", prepend Cloud mode. to that line so the user can see where their transcript was sent.If the user's invoking message contains overwhelm phrases — I can't, too much, overwhelmed, I'm stuck, exhausted, burned out — keep the brief but trim each section to 3 bullets maximum (transcript order, drop the rest into an (N further items in the transcript) line), and replace the closing line's Model: portion with Model: configured LLM. Do not lecture. Do not diagnose. Do not refuse the brief.
brief_meeting.decided_by, asker, and speaker labels come from the server response; if they are null, render unattributed.VERBATIM_ANCHOR_FAILED. Surface it; the user decides whether to try again.decided_in, only when project is set.autistic, neurodivergent, spectrum, executive function, neurotype, clinical, or symptom in user-facing output.superpower, crusher, smash, you got this, let's go, differently abled.brief_meeting without a resolved me. Ask one question; if no answer, stop.recall_decisions with an empty or guessed project name.translate_incoming in the same MCP server, on individual messages — not meetings.adhd-daily-planner plans the day; this skill briefs one meeting.Direct, plain, non-clinical. Speaker names, decision text, timestamps, project names — those are concrete and welcome. Adjectives about people's emotional states are not. The user is the authority on what the meeting meant; the skill is responsible only for what the meeting said.
See tests/01-30min-product-meeting.md, tests/02-ambiguous-revisit-language.md, and tests/03-multi-stakeholder-decision.md for the full invocation traces. CI replays these against a reference MCP client on every PR.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.