skill-eng-manager-1on1 — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited skill-eng-manager-1on1 (Agent Skill) and scored it 96/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 1 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 1 flagged
The text {match} tells the agent to skip the normal "ask the user first" gate. Used adversarially it removes the human-in-the-loop check before destructive or sensitive actions, turning a normally-gated agent into a fire-and-forget executor.
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.
Three flows an engineering manager (or tech lead, or staff+ IC with mentees) actually does: prep a recurring 1:1 from the last few conversations, decompose unstructured sprint-review notes into atomic items grouped by owner, walk a blameless postmortem on an incident without ever pointing at a person. The trigger phrases are unambiguous on purpose — they will not steal activation from adhd-daily-planner or any general planning skill.
This is not a performance-management tool. It does not score reports, rank them, summarise their tone, or feed anything into a performance cycle. It is a working tool for the person running the meeting.
Activate when the user's message contains one of the trigger phrases verbatim. The trigger phrase determines which of the three flows runs:
prep my 1:1 with <name> / prep my one-on-one with <name> / prep my 1-on-1 with <name> / 1:1 prep for <name> → Flow A: 1:1 prep.decompose this sprint review / decompose this retro / decompose these sprint notes → Flow B: sprint-review decomposition.blameless postmortem on <incident> / blameless post-mortem on <incident> / walk a postmortem on <incident> → Flow C: postmortem.Do not activate on partial matches ("can we 1:1 sometime"), past tense ("the postmortem went well"), or third-person reports about meetings the user is not running. Do not activate if a separate skill — for example audhd-context-recovery or adhd-daily-planner — is already running its flow in this turn; let the more general skill finish.
The user says some variant of prep my 1:1 with Sarah. Goal: a one-page brief built from what the graph remembers about Sarah and any open threads tagged to her.
with (or after for for the 1:1 prep for variant) is the person's name. Trim. Treat the parsed string verbatim — do not normalise capitalisation, do not expand nicknames.mcp-cognitive-graph is available; otherwise skip to step 6 with the empty-graph fallback). Call recall_entity({ "name_or_alias": "<parsed name>" }).resolution.method is alias, fuzzy, or embedding, surface the resolved entity name and the resolution score before continuing. Ask one question: I read "<parsed name>" as the entity "<resolved>" (<method> match, score <score>). Continue? Wait for confirmation. Do not assume.No entity in the graph matches "<parsed name>". I can still help you prep — what's on your mind for this conversation? Stop and wait for the user.entity.last_interaction_at (or the most recent facts[].recorded_at if the entity lacks a last_interaction_at field) — this is the "last conversation" timestamp.facts[] filtered to predicates mentioned_in, decided_in, blocked_by — these become "open topics".neighbours[] — these are the projects and decisions Sarah is connected to.The user says decompose this sprint review (or one of the equivalent triggers) and either pastes notes directly, or says they will paste them.
Paste the notes. I'll group atomic action items by owner. Wait. Do not editorialise.decompose({ "goal": "<the pasted notes, verbatim>", "time_budget": "PT45M" }). The 45-minute time budget is the default — it maps to roughly one working block. If the notes themselves state a different budget (e.g. "we have a week for this"), parse that and pass it as ISO 8601 (e.g. P5D). The task-fractionator interprets P5D as five working blocks of 4h, not 120h calendar — see ADR 0003 §3.The notes describe more work than fits in the time budget. Try a longer budget, or break the review into two passes. Stop.decompose (the task-fractionator tags atomic tasks with role/owner hints when the source text contains them). If a task has no owner tag, group it under Unassigned.The user says blameless postmortem on <incident>. This flow walks 5 Whys plus a small system-factors checklist. It MUST NEVER name a person as the cause and MUST NEVER use blaming language ("X should have", "Y failed to", "Z dropped the ball").
Walking a blameless postmortem on: <incident as stated>. I'll ask five Whys, then map system factors. We will not name a person as cause.Examples of acceptable Why phrasings:
Why did the system enter that state?Why was that condition possible in the first place?Why did the alerting/runbook/deployment process allow it?Banned Why phrasings (these are blaming dressed up as Whys):
Why didn't <name> notice? — restate as Why did the alerting not surface it?Why did <name> push that change? — restate as Why did the change-gate allow it through?Why didn't anyone catch this? — restate as Why did the review process not flag it?If the user's own answer names a person, accept the answer but rephrase the next Why to target the system around that person, not the person.
Which of these system factors were in play? (You can name more than one.) Then list six candidates:Documentation gap — runbook missing, stale, or wrong.Observability gap — the system did not surface the problem in time.Change-gate gap — the deploy/review/test process let the issue through.Capacity gap — the team was stretched; the work could not get the attention it needed.Tool gap — the available tools made the safe path harder than the unsafe path.Context gap — the person doing the work did not have the information they would have needed (and this is the system's job to fix, not theirs).mcp-cognitive-graph is available AND the user explicitly opts in (record this in the graph?), call record_fact once per identified system factor with predicate: "tagged" and object.literal: "<factor-key>", subject scoped to a postmortem entity named after the incident. Skip silently if the user does not opt in.Strict "Answer First". First sentence ≤ 100 characters.
1:1 prep — <person name>. Last interaction: <relative timestamp, e.g. "8 days ago, 2026-05-12">.
### Open topics
- <fact 1, one line, with date>
- <fact 2, one line, with date>
- <fact 3, one line, with date>
### Recent context
- <neighbour 1: project or decision name> (<relationship>)
- <neighbour 2: project or decision name> (<relationship>)
Suggested opener: "<one short, concrete opener drawn from the most recent open topic>."
This brief is for you, not for sharing. It is not a performance summary.Rules:
Empty-graph fallback (used when mcp-cognitive-graph is unavailable or the entity is null):
1:1 prep — <person name>. No prior context in the graph.
I can still help. What's on your mind for this conversation? If you'd like me to capture anything for next time, say "record this" once we're done.Sprint-review decomposition — <N> atomic items, <M> owners.
### <Owner name>
- <task title> (<estimated_minutes> min)
Acceptance: <first acceptance criterion>
- <task title> (<estimated_minutes> min)
Acceptance: <first acceptance criterion>
### <Owner name>
- ...
### Unassigned
- <task title> (<estimated_minutes> min)
Acceptance: <first acceptance criterion>
These items are decomposed from your notes. I did not invent owners or estimates.Rules:
Postmortem skeleton — <incident as stated>
### Why chain
1. Why? <user's answer>
2. Why? <user's answer>
3. Why? <user's answer>
4. Why? <user's answer>
5. Why? <user's answer (or "chain terminated earlier at a system root cause")>
### System factors in play
- <factor 1>
- <factor 2>
- <factor 3>
### What this postmortem does NOT contain
- A person named as cause.
- A remediation action list (that is a follow-up conversation).
- A judgement about whether the incident was avoidable.The "does NOT contain" block is mandatory. It is the user's reminder, when they share the skeleton, of what is and is not in scope.
If the user's invoking message contains phrases like I'm furious, someone needs to be held accountable, this is on <name>, the skill MUST acknowledge the feeling but MUST NOT shift the flow toward naming a person. One sentence: Understood. The postmortem still won't name a person — that's the point of it being blameless. We can route accountability conversations separately if you want. Then continue with Flow C as defined.
recall_entity — quote the literal text.decompose in Flow A or Flow C. It is a Flow B tool.record_fact without explicit user opt-in. The cognitive graph is the user's notebook, not the skill's logbook.See tests/:
tests/01-prep-1on1.md — Flow A with two mocked facts in the graph.tests/02-decompose-sprint-review.md — Flow B with pasted notes and a 45-minute budget.tests/03-blameless-postmortem.md — Flow C walking 5 Whys without ever naming a person.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.