Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Design a delivery team's communication system — channel routing, meeting-load reduction, status structure, escalation SLAs, timezone norms. Use when the calendar is full, updates go unread, or blockers surface late.
.claude/skills/borghei-team-communications/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-06 | ✗→✓ | ▲ Improved | 339% | 0% |
| case-07 | ✗→✓ | ▲ Improved | 457% | 0% |
| case-08 | ✗→✓ | ▲ Improved | 304% | 0% |
| case-23 | ✗→✓ | ▲ Improved | 342% | 0% |
| case-17 | ✗→✓ | ▲ Improved | 198% | 0% |
The operating system a delivery team runs its information on: which channel a given message belongs in, how much the recurring calendar actually costs, how a status update survives a 20-second executive skim, and what happens when someone is blocked. Most teams never design this — it accretes, one well-intentioned meeting at a time, until 30% of the week is gone and blockers still surface three days late.
measured in person-hours and dollars before you can argue about it
already answered, which means it is not skimmable
Thursday's status, because there is no escalation path with an SLA
that worked co-located silently taxes one region
the team agreed to in advance, not a per-case negotiation
fills with rituals nobody will later feel able to cancel
day and start time (UTC)
has an agenda and written notes
Before generating, confirm these inputs. If any is unknown or vague, ASK — do not assume:
Stop rule: ask only the 2-3 that most change the output. If the user says "just draft it," proceed and list your assumptions at the top of the artifact.
assets/sample_calendar.json): people with hourly cost and timezone, meetings with duration, cadence, attendees, day, start time.
whether each has an agenda and written notes. This is the input the audit turns on — estimate it with the meeting owner rather than skipping it.
verdicts, and per-person maker hours.
is too high has to precede the argument about any specific meeting.
KILL outright, convert every ASYNC to a written update witha comment window, then merge the 60%+ audience overlaps.
bashpython3 project-management/team-communications/scripts/meeting_load_auditor.py \ --input project-management/team-communications/assets/sample_calendar.json \ --maker-hours-target 24 --format text
each in assets/sample_messages.json shape.
one_way /two_way), stakeholder count, shared context (low / medium / high), and hours until it is needed.
the reason — which is what makes the routing defensible when someone disagrees.
compensate for thin written context; fix the writing, not the calendar.
argument resolves by reference instead of by seniority.
bashpython3 project-management/team-communications/scripts/channel_router.py \ --input project-management/team-communications/assets/sample_messages.json \ --core-overlap-hours 3 --format text
assets/status_update_template.md.decision needed, ask), executive readability, and skimmability.
ask costs more than a long sentence.
reporting problem, not a bad week.
bashpython3 project-management/team-communications/scripts/status_update_scorer.py \ --input project-management/team-communications/assets/sample_status_update.json \ --format text
| Rank | Condition | Channel | |------|-----------|---------| | 1 | Emotional load: performance, pay, conflict, standing | Live 1:1 | | 2 | Irreversible (one-way door) + a decision needed | Written decision record with a named approver | | 3 | 8+ people and no decision to make | Broadcast | | 4 | Low shared context + a decision needed | Live meeting with agenda and pre-read | | 5 | Decision needed within 8 hours | Live meeting — faster than one async round trip | | 6 | Everything else | Async thread |
Seniority of the requester never appears in this table. A VP wanting a meeting is not a reason; a VP lacking context is (rank 4).
| Verdict | Trigger | Action | |---------|---------|--------| | KEEP | Produces decisions, has agenda and notes | Leave it alone | | TRIM | Produces decisions but leaks structure | Fix the agenda or notes, or cut duration 25% | | ASYNC | Under 1 decision/month, or 8+ people in a "working session" | Written update + comment window | | KILL | Under 1 decision/month and no agenda | Cancel; announce the replacement channel |
Decisions per month is the best available proxy for value: countable, hard to game without actually deciding things, and it correctly kills status meetings, which produce zero decisions by design.
| Metric | Healthy | Danger | |--------|---------|--------| | IC meeting hours per week | under 6h (15%) | over 10h (25%) | | Uninterrupted maker hours per week | 24h+ | under 20h | | Sync share of routed traffic | under 34% | over 50% | | Status update length | under 400 words | over 600 words | | Average sentence length | 18-22 words | over 28 words | | Quantified claims per update | 3+ | 0 |
Acknowledgement is not resolution — "seen it, answer Thursday" fully satisfies an acknowledge SLA and stops the requester re-pinging. Escalation is a process failure signal, not an interpersonal act; say so in the charter, or the team develops silent blockers, which cost far more than the discomfort they avoid.
The full SLA ladder by urgency band and the three-strike escalation rule are in references/channel-selection-and-meeting-load.md; the charter template ships them ready to fill in.
Mistake: Reporting green week after week, then going red two weeks before the deadline. Why it happens: Each individual week genuinely feels recoverable, and a yellow invites questions the author does not yet have answers to. Optimism compounds silently. Instead: Go yellow the week a risk becomes plausible, not the week it becomes certain, and attach an owner and a mitigation date. One defensible red buys more credibility than a quarter of unearned greens — and the scorer's risk element exists precisely to force the disclosure.
Mistake: Cancelling the status meeting and the alignment sync in the same week the audit lands, with nothing replacing them. Why it happens: The audit makes the waste vivid and the cuts feel like the whole intervention. The written replacement is unglamorous and gets deferred. Instead: Install the weekly written status first, run both for one cycle, then cancel. The meetings were carrying real information badly; removing the carrier before building a new one converts a load problem into a late-blocker problem, which is more expensive.
Mistake: A team where going to a manager about a blocker is read as tattling, so people wait and hint instead. Why it happens: Nobody wrote down what escalation is for, so everyone infers it from the one time it went badly. Instead: Write in the charter that escalation is a process failure signal, not an interpersonal act, and specify the three strikes by role. Making the ladder public converts strike 3 into a paperwork step rather than a confrontation, because the record already exists.
Mistake: Declaring the team async-first, then watching decisions take two weeks and quietly reinstating the meetings. Why it happens: Async is treated as a channel choice rather than a skill. High Slack volume is mistaken for async maturity, when it is often level-1 verbal culture conducted in writing. Instead: Standardise the decision record shape — decision, approver, options with costs, consequences, comment deadline — before removing sync time. Escalate to a 20-minute call after two unresolved comment rounds, and post the outcome back into the doc.
Mistake: A meeting created for a launch three years ago that still runs weekly with six attendees. Why it happens: Nobody has standing to cancel someone else's meeting, and the original owner has left, so it has no one to defend or kill it. Instead: Give every recurring meeting an expiry date 3-6 months out at creation, plus a named owner. At expiry it is re-justified or it dies by default. Where one already exists with no owner, trial-cancel it for four weeks and ask what broke — roughly two-thirds never come back.
| File | Purpose | |------|---------| | scripts/meeting_load_auditor.py | Person-hours, annual cost, KEEP/TRIM/ASYNC/KILL verdicts, double bookings, consolidation proposal | | scripts/channel_router.py | Routes each message to sync / async / written decision / 1:1 / broadcast with reasons and an SLA | | scripts/status_update_scorer.py | Scores a draft 0-100 on completeness, executive readability and skimmability | | references/channel-selection-and-meeting-load.md | Routing model, cost arithmetic, verdict rubric, consolidation, timezone regimes, escalation ladder, status thresholds, instrumentation | | references/operating-rhythm-and-charter.md | Six-ritual minimum rhythm, ritual design rules, async writing standards, channel taxonomy, maturity model, rollout sequence, failure modes | | assets/communication_charter_template.md | One-page charter: core hours, channel and meeting rules, SLAs, escalation, decision protocol, timezone norms | | assets/status_update_template.md | Update skeleton built for a 20-second executive skim | | assets/sample_calendar.json | Runnable 8-person, 8-meeting calendar export | | assets/sample_messages.json | Runnable set of 7 pending communications | | assets/sample_status_update.json | Runnable mid-quality draft (scores 50 — REVISE) |
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→fail | 22,498 | 33,656 | +50% | 1 | 1 | 0% | 3,871 | 8,851 | +129% | 0 | 0 | — |
case-02 | fail→fail | 15,999 | 29,793 | +86% | 1 | 1 | 0% | 2,795 | 7,791 | +179% | 0 | 0 | — |
case-03 | pass→pass | 14,884 | 15,707 | +6% | 1 | 1 | 0% | 2,353 | 5,317 | +126% | 0 | 0 | — |
case-04 | pass→pass | 24,813 | 38,186 | +54% | 1 | 1 | 0% | 4,075 | 7,655 | +88% | 0 | 0 | — |
case-05 | pass→pass | 21,618 | 26,821 | +24% | 1 | 1 | 0% | 3,738 | 7,323 | +96% | 0 | 0 | — |
case-06 | fail→pass | 5,639 | 5,950 | +6% | 1 | 1 | 0% | 908 | 3,988 | +339% | 0 | 0 | — |
case-07 | fail→pass | 3,932 | 4,113 | +5% | 1 | 1 | 0% | 667 | 3,717 | +457% | 0 | 0 | — |
case-08 | fail→pass | 4,918 | 2,533 | -48% | 1 | 1 | 0% | 844 | 3,408 | +304% | 0 | 0 | — |
case-09 | pass→pass | 6,335 | 7,253 | +14% | 1 | 1 | 0% | 963 | 4,159 | +332% | 0 | 0 | — |
case-10 | pass→pass | 11,229 | 10,813 | -4% | 1 | 1 | 0% | 1,589 | 4,537 | +186% | 0 | 0 | — |
case-11 | pass→pass | 7,936 | 8,435 | +6% | 1 | 1 | 0% | 1,252 | 4,253 | +240% | 0 | 0 | — |
case-12 | pass→pass | 20,682 | 9,602 | -54% | 1 | 1 | 0% | 2,007 | 4,424 | +120% | 0 | 0 | — |
case-13 | pass→pass | 10,135 | 9,114 | -10% | 1 | 1 | 0% | 1,424 | 4,380 | +208% | 0 | 0 | — |
case-14 | pass→pass | 7,412 | 6,931 | -6% | 1 | 1 | 0% | 1,204 | 4,040 | +236% | 0 | 0 | — |
case-23 | fail→pass | 5,728 | 5,155 | -10% | 1 | 1 | 0% | 864 | 3,823 | +342% | 0 | 0 | — |
case-15 | pass→pass | 6,668 | 5,465 | -18% | 1 | 1 | 0% | 938 | 3,735 | +298% | 0 | 0 | — |
case-16 | pass→pass | 7,538 | 8,650 | +15% | 1 | 1 | 0% | 928 | 4,294 | +363% | 0 | 0 | — |
case-17 | fail→pass | 9,429 | 7,176 | -24% | 1 | 1 | 0% | 1,359 | 4,054 | +198% | 0 | 0 | — |
case-18 | fail→pass | 7,375 | 5,739 | -22% | 1 | 1 | 0% | 1,090 | 3,935 | +261% | 0 | 0 | — |
case-19 | fail→pass | 6,412 | 9,951 | +55% | 1 | 1 | 0% | 1,008 | 4,572 | +354% | 0 | 0 | — |
case-20 | pass→pass | 10,795 | 7,038 | -35% | 1 | 1 | 0% | 1,650 | 4,153 | +152% | 0 | 0 | — |
case-21 | pass→pass | 9,897 | 6,392 | -35% | 1 | 1 | 0% | 1,483 | 4,003 | +170% | 0 | 0 | — |
case-22 | fail→pass | 10,615 | 7,999 | -25% | 1 | 1 | 0% | 1,556 | 4,248 | +173% | 0 | 0 | — |
case-24 | fail→pass | 8,634 | 10,991 | +27% | 1 | 1 | 0% | 1,253 | 4,518 | +261% | 0 | 0 | — |
case-25 | pass→pass | 13,014 | 10,839 | -17% | 1 | 1 | 0% | 1,728 | 4,611 | +167% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 25 cases were attempted. The headline lift of +36 percentage points is the difference between those two pass rates over the 25 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.