Bbs program designer
Skill ashley-eyekyam/hse-leadership-skills/skills/bbs-program-designer
Designs a non-punitive behaviour-based-safety (BBS) program for a named site, crew, or operation — ABC (antecedent-behaviour-consequence) analysis, an observable observation-card design, defined metrics (percent-safe, participation, trend-by-category), and at-risk behaviours trended to systemic causes and routed to hierarchy-ranked system fixes. Use this skill whenever a user asks to design, set up, or improve a behaviour-based safety / BBS / behavioural-safety / safe-behaviour-observation program, an observation card, peer-observation or safety-conversation scheme, or to define BBS metrics and feedback loops. Observation cards are non-punitive by design — role-labelled or anonymous, voluntary, used for trending and learning, never individual discipline; observable site-specific behaviours only (never 'work safely'); at-risk behaviours route to system fixes via the controls engine (hierarchy of controls), never to 'retrain the worker'. Decision-support only; a competent person must review the output.From its SKILL.md
npx -y skills add ashley-eyekyam/hse-leadership-skills --skill bbs-program-designerAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
One thing to look at
- 1 stars1 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its file declares
Copied from the file, not written here
The file declares its own license as Apache-2.0. That is the author’s claim about this one file, and it is not the same thing as the license GitHub reports for the repository, which is listed with the other numbers below.
SKILL.md
22.8 KB, as published. Nobody here has run it
BBS Program Designer
A consultant-grade HSE skill that designs a non-punitive behaviour-based-safety
(BBS) program for a named site, crew, or operation. It forces the single lever
that separates a defensible program from generic safety paperwork: observable,
site-specific behaviours (never "work safely") and the full hierarchy of
controls — at-risk behaviours are trended to systemic causes and routed to
hierarchy-ranked system fixes via the deterministic A7 controls engine, never
to "retrain the worker" or discipline. The program is grounded in ABC
(antecedent–behaviour–consequence) analysis (KB-SNIP-BBS-METHOD), uses
defined metrics (percent-safe, participation, trend-by-category from
KB-DATA-BBS-METRICS, with its mandatory <5 small-cell guardrail), and is
non-punitive by design: observation cards are role-labelled or anonymous,
voluntary, and used for trending and learning, never individual sanction. A
card that records a nameable individual for discipline is a de_identification
hard-fail. It maps to ISO 45001 clause 5.4 (worker participation) via the
shared KB-SNIP-LEADERSHIP-CLAUSE-MAP. Decision-support only; a competent person
must review the output.
When to use this skill
Use this skill when the user needs to design, set up, or improve a behaviour-based
safety (BBS) / behavioural-safety program for a concrete site, crew, or operation —
for example "design a BBS observation program for the warehouse picking crew at the
Leeds DC", "set up a peer-observation / safe-behaviour-observation scheme and its
metrics", or "our BBS cards have stalled — redesign the card and the feedback loop so
at-risk behaviours actually drive fixes". Trigger phrases: behaviour-based safety,
BBS, behavioural safety, safe-behaviour observation, observation card, peer
observation, safety-conversation programme, ABC analysis, percent-safe / participation
metrics. This skill designs the program (the card, the ABC routing rule, the
metrics, the feedback loop) — it does not run a full safety-culture maturity
assessment (see safety-culture-assessment), facilitate leadership safety
walks / gemba (see safety-walk-gemba), or build the leading/lagging KPI
framework (see leading-lagging-kpi-framework); intake Q1 disambiguates against
those siblings. If the request is vague, the Workflow intake below forces the
specific site/crew and observable behaviours before any drafting — it refuses a
non-observable card item such as "work safely".
Data Protection & De-identification (MANDATORY — apply before drafting)
Apply this BEFORE you draft anything. Treat injury, illness, and any health
detail as the highest sensitivity. Full scrub list, identifier tests, and the
jurisdiction quick-reference: references/deid-checklist.md.
- DETECT & FLAG every personal/health identifier in the inputs — names, employee / Aadhaar / SSN / NI numbers, contacts, exact dates, precise locations, job title / crew / shift, photos, and any medical detail. List what you found before drafting. If unsure whether something is identifying, treat it as identifying.
- PSEUDONYMIZE BY DEFAULT for any output that will circulate: replace identifiers with stable role labels ("Worker A", "Operator 1"). Produce (a) the de-identified document and (b) a SEPARATE re-identification key. Never put the key or any name↔label mapping in the document. Tell the user to store the key access-controlled, apart from the document.
- AGGREGATE SMALL NUMBERS — never publish an injury/illness category with fewer than 5 individuals; aggregate up and apply secondary suppression so suppressed cells can't be back-calculated from totals.
- WARN BEFORE WIDE DISTRIBUTION — toolbox talks, board reports, and posters default to de-identified / aggregated; warn the user before any name or health detail enters a widely shared artifact.
- MINIMIZE & LIMIT PURPOSE — use only the personal data the task needs; keep sensitive raw data out of external services where you can. When in doubt, ask before including it.
Knowledge base (read ONE matching file — never load all)
Resolve the user's jurisdiction first. Read only the one fragment that matches
the row below; if the jurisdiction is unknown, ask before citing any specific law.
For management-system structure, also read the relevant jurisdiction-independent standard in
../../knowledge-base/standards/ (ISO 45001 OH&S · ISO 14001 environmental · ISO 45003 psychosocial).
Always apply ../../knowledge-base/prompt-snippets/hierarchy-of-controls.md (KB-SNIP-HOC)
to every control recommendation. For any benchmark/figure, look up the ID in the relevant
_registry.yaml, then read ONLY the named file — and quote its source+year.
This skill is method-led, not law-led: BBS is a participation method (ISO 45001 clause 5.4), so it always grounds in the BBS method + metrics + the bundle clause map, then resolves the jurisdiction only for the worker-consultation legal duty.
| Read on every run | File |
|---|---|
| ABC analysis + non-punitive observation-card design + observer-feedback loop (the method) | ../../knowledge-base/prompt-snippets/bbs-method.md (KB-SNIP-BBS-METHOD) |
Defined BBS metrics — percent-safe / participation / trend-by-category — with the mandatory <5 small-cell suppression guardrail | ../../knowledge-base/data-points/bbs-metrics.md (KB-DATA-BBS-METRICS) |
| The bundle-shared ISO 45001 leadership clause cross-walk (5.4 worker participation → this skill) | ../../knowledge-base/prompt-snippets/leadership-clause-map.md (KB-SNIP-LEADERSHIP-CLAUSE-MAP) |
| Applied to every at-risk-behaviour treatment — system fixes ranked above admin/PPE, never "retrain the worker" | ../../knowledge-base/prompt-snippets/hierarchy-of-controls.md (KB-SNIP-HOC) |
| Jurisdiction (worker-consultation duty) | Read |
|---|---|
| UK | ../../knowledge-base/regulatory/uk-hswa.md (HSWA 1974 + the Safety Representatives / Consultation Regs — worker participation) |
| USA | ../../knowledge-base/regulatory/us-osha.md (employee involvement under the OSH Act / VPP) |
| EU | ../../knowledge-base/regulatory/eu-osh.md (OSH Framework Directive 89/391/EEC — worker consultation) |
| India | ../../knowledge-base/regulatory/in-factories-act.md (safety-committee worker participation; mandatory state detection for any form, defers to hse-india, never a national form number) |
| Unknown | Ask before citing any specific law — the BBS method (ABC, non-punitive cards, system-fix routing) still applies |
Always apply KB-SNIP-HOC to every at-risk-behaviour treatment: system fixes
(eliminate / substitute / engineer / administrate) rank ABOVE "retrain the worker",
and a discipline-only response is rejected. For any metric, resolve the ID in
KB-DATA-BBS-METRICS and honour its <5 small-cell suppression — a percent-safe for a
4-person crew is suppressed. The rule-9 manifest is references/_skill-kb.md.
Workflow
Open with a structured multi-step intake — MCQ where the answer space is enumerable, free-text where it is open. Ask ONE question at a time, branch on the answers, and echo the captured facts back before any analysis. Never proceed on vague or missing inputs; this intake is the operational core of forcing specificity (KB-SNIP-INTAKE). (Intake is a Workflow convention, not a sixth block.)
Step 0 — Structured intake (run this first, one question at a time)
The full typed, branched intake — the intake-coverage manifest, the question
table, the mandatory India→state branch, the echo-back, and the refuse-on-vague
anchors — lives in references/intake.md. Run it one question at a time, branch
on the answers, echo the captured facts back before any analysis, and refuse to
proceed on a vague request. The two hard refuse anchors:
- Q1 (program scope + sibling disambiguation) — a named site / crew /
operation to design the BBS program for. Refuse "improve our safety culture"
in the abstract; if the user actually wants a culture-maturity assessment, a
leadership gemba walk, or a KPI framework, route to the sibling
(
safety-culture-assessment/safety-walk-gemba/leading-lagging-kpi-framework) instead of building a BBS card. - Q3 (observation-card behaviours) — the card items must be observable and
site-specific (tied to a named task/area). Refuse a vague, non-observable item
such as "work safely" / "be careful" — record
[GAP]and elicit the observable behaviour; never publish a card item that cannot be observed and counted.
The BBS-program design method (ABC + non-punitive cards + system-fix routing)
Full method in references/METHODOLOGY.md. Steps:
- De-identify the inputs FIRST — any prior observation cards, incident notes, or
participation logs are scrubbed to role/group labels before any analysis (the
deidblock above +references/deid-checklist.md+ the De-identifier-runs-first orchestration rule). No nameable individual is ever recorded on a card for discipline — observation data is role-labelled or anonymous. Everything downstream consumes only the scrubbed text. - ABC analysis (
KB-SNIP-BBS-METHOD) — for each target behaviour, map the antecedent (the real trigger, not a slogan), the observable behaviour, and the consequence, and design the system so the safe behaviour carries the soon / certain / positive consequence. - Design the observation card (non-punitive, observable) — each item is observable and site-specific, tied to a named task/area; the card is role-labelled or anonymous, voluntary, and its data is used for trending and learning, never individual sanction. A non-observable item ("work safely") is refused at this step.
- Define the metrics (
KB-DATA-BBS-METRICS) — percent-safe = (safe ÷ total) × 100; participation = (active ÷ trained pool) × 100; trend by behaviour category, never by person. Apply the<5small-cell suppression to any team breakdown (a 4-person crew's percent-safe is suppressed; secondary suppression applied). - Route at-risk behaviours to SYSTEM fixes (the hierarchy lever) — an at-risk
behaviour is a signal of a system gap. Apply
KB-SNIP-HOCand callcontrols.rank_controls+controls.validate_treatmentto route it to a hierarchy-ranked system fix (eliminate / substitute / engineer / administrate before PPE). Never "retrain the worker", "be more careful", or discipline — a treatment whose only response to a trended at-risk category is retraining or sanction is a defect the Critic/QA and SME passes must catch (the hard enforcement of the core value). - Trend at-risk categories to systemic causes — aggregate cards by behaviour
category, identify the recurring systemic driver, and feed it to owned/dated
actions (
smart_actions.validate_register: a named role-label owner + an ISO due date + a measure). No anonymous actions, no "ASAP". - Close the observer-feedback loop — two-way, immediate feedback (positive AND at-risk discussed on the spot); learning fed back to observers and the workforce so the program produces systemic improvement, not a tally.
- Validate against
references/QUALITY_CHECKLIST.md— observable site-specific behaviours only; cards non-punitive / role-labelled / voluntary; no<5cell published; at-risk behaviours routed to system fixes (no retrain-the-worker-only treatment); metrics defined; every action owned + dated; ISO 45001 clause 5.4 cited accurately; de-id applied. - Assemble the branded report — build
report.json(seeassets/report.json) and run the canonicalreport-outputcall below.
The orchestration block (below) sits after this Workflow so the triage gate can judge
the assembled work before deciding to fan out. The deterministic control-ranking
step (5 via controls) and metric computation (4 via KB-DATA-BBS-METRICS) are
A7/script-grounded in every case — never a fan-out judgement call.
<!-- hse:block:orchestration:start -->Scope note — this skill designs the BBS program; it does not run a safety-culture maturity assessment (
safety-culture-assessment), facilitate a leadership gemba walk (safety-walk-gemba), or own the leading/lagging KPI framework (leading-lagging-kpi-framework). It supplies the BBS percent-safe leading indicator to that KPI framework, but does not build it here.
Agentic Execution (Orchestration Block)
You are the ORCHESTRATOR for this skill. De-identification (above) runs FIRST and
is a sequential dependency — every step below consumes its scrubbed output.
Archetype prompts to reuse: ../../knowledge-base/prompt-snippets/subagent-archetypes.md (KB-SNIP-ARCHETYPES).
Step 0 — Triage: fan out at all?
Spawn subagents ONLY if the task is non-trivial AND has independent sub-parts. Stay single-threaded if ANY hold: it is a short/frontline (~2-min) artifact; the sub-parts are tightly dependent; or the input fits one context window. If single-threaded, skip to Synthesis and produce the output directly — keeping the same scope discipline.
Step 1 — Plan
Decompose into INDEPENDENT jobs. Scale the count to complexity: simple = 0 (do it yourself) · moderate = 2–3 · complex = 4–6. Never exceed MAX=6.
Step 2 — Fan out (parallel subagents)
Run the De-identifier FIRST (sequential — its scrubbed output feeds every other job), then spawn the rest in parallel. Each subagent gets a FRESH context and sees NONE of this conversation — paste ALL needed context into its prompt. Per-subagent skeleton: ROLE / OBJECTIVE (one sentence) CONTEXT YOU NEED: paste inputs, jurisdiction, framework, file paths, prior decisions SCOPE IN: what this subagent owns SCOPE OUT: what it must NOT do — NAME the sibling that owns it OUTPUT CONTRACT: return ONLY the exact agreed structure/length; cite every claim; flag [ASSUMPTION] / [GAP]; never dump raw data (summarize, or write a file and return its path) EFFORT BUDGET: roughly N tool calls — stop when met
Step 3 — Synthesis (you)
Gather the outputs, resolve conflicts explicitly (state which source wins), de-duplicate, and assemble the deliverable in this skill's output format.
Step 4 — SME Review & Sign-off (MANDATORY — regulatory/safety output)
Spawn ONE reviewer adopting THIS skill's SME persona from references/sme-review.md
(fall back to the generic HSE-SME-Reviewer in KB-SNIP-ARCHETYPES if none is named).
Give it the draft + the inputs + the output contract. It applies BOTH:
(a) the universal hard gates — no error or unsupported claim, every regulatory trigger
caught, no lower-order-only control without justification, and ZERO de-identification
leak; and
(b) the persona's domain checklist in references/sme-review.md — then run the
Omission lens (the SECOND, unconstrained omission pass): detect the emitted mode,
list what a competent consultant would have included for THIS mode BEFORE checking
the mode's floor, surface every miss as a [GAP] / deficiency-list entry, and
never fabricate content to fill a gap (protocol: KB-SNIP-COMPLETENESS).
This review MUST PASS before ANY output is presented — markdown OR a rendered PDF/DOCX.
Fix everything it raises and re-run until clean. This is decision-support that PRECEDES,
never replaces, the human competent-person sign-off (it never emits "approved by a
competent person").
<!-- hse:block:orchestration:end -->Single-threaded fallback: if your host has no subagent capability, perform the SME Review & Sign-off pass yourself in THIS context — run the de-identification scrub first, keep the scope discipline, apply the persona checklist + universal gates, run the Omission lens absence-listing pass yourself (unconstrained, BEFORE the floor check — surface misses as
[GAP], never fabricate), and pass the review before presenting any output (markdown or rendered).
Subagent roster for THIS skill
<!-- This roster subsection is authored BELOW the orchestration :end marker — it is presence-only (never diffed), so each skill names its own jobs here. -->This is the moderate roster (A6 "moderate = 2–3 fan-out") with the De-identifier
as the sequential first gate — here it is critical, because observation cards and
participation data are exactly the place a nameable individual can be re-identified and
punished. Control-ranking is a deterministic A7 controls call (Workflow step 5)
and metric computation is grounded in KB-DATA-BBS-METRICS (step 4) — never an LLM
fan-out job. Archetypes: KB-SNIP-ARCHETYPES.
- De-identifier — runs FIRST (sequential gate, not a fan-out peer). Before any
analysis: scrub every nameable individual on any input card / log to a role/group
label; ensure no card records a named individual for discipline; apply the
<5small-cell suppression + secondary suppression to any team breakdown. Return the re-identification key SEPARATELY to the orchestrator — never to a sibling, never in the document. Every job below consumes only this scrubbed output. SCOPE-OUT: does not design the card (Program-Designer) or rank the fixes (the A7controlscall). - Program-Designer — build the ABC map, the non-punitive observation card
(observable, site-specific items only), the defined metrics (percent-safe /
participation / trend-by-category from
KB-DATA-BBS-METRICS), and the observer-feedback loop. Refuse any non-observable item ("work safely"). SCOPE-OUT: the deterministic control-ranking of at-risk behaviours (the A7controlscall), the SMART action register (Action-Planner). - Action-Planner — turn each trended at-risk category into a system fix
routed through the
controlsengine (hierarchy-ranked, never "retrain the worker"), then into a SMART action with a named role-label owner + an ISO due date + a measure (smart_actions.validate_register). SCOPE-OUT: designing the card (Program-Designer), de-identification (De-identifier). - SME Reviewer (MANDATORY pre-output gate) — runs the skill-specific SME sign-off
in
references/sme-review.md(Behavioural Safety Consultant) before any output: cards non-punitive and observable, at-risk behaviours routed to system fixes (no retrain-the-worker-only treatment), metrics defined with<5suppression, no individual named on a card. - Critic/QA (MANDATORY) — adversarial final pass: every card item observable and
site-specific, cards role-labelled/voluntary, at-risk behaviours routed to
hierarchy-ranked system fixes (no retrain-the-worker-only treatment), metrics defined
and
<5-suppressed, every action owned + dated, ISO 45001 clause 5.4 cited accurately, and ZERO de-identification leak (no named-individual discipline card, no<5cell, no re-id key in the output). PASS/FAIL.
A single crew with one card set may run single-threaded — no subagents — but the
De-identifier scrub + <5 suppression, the A7 controls ranking call, and the
Critic/QA pass are still made.
Assemble a report.json conforming to the shared report-model schema, then call
the shared report engine to render the branded DOCX + PDF. The engine, brand
resolution, and call signature live in assets/report-engine/ (signature
confirmed against A4); this block's STRUCTURE is final:
- Build
report.json(title, metadata, the ordered sections this artifact requires, every finding traced to its evidence with a named owner and date). - Resolve branding: the user's
brand.yamloverrides the Eyekyam default. - Render both DOCX and PDF from the one
report.jsonvia the shared engine. - Surface the output paths and a one-line provenance note to the user.
Attribution (non-intrusive)
After the deliverable is produced — never before, and never as a blocking
question — read branding/company-card.yaml and surface the company card per
its placement:
footer(default): one quiet line at the end, e.g. "Built by Eyekyam · HSE Leadership, operationalised · eyekyam.com".after-output: the same line plus the card'scta, on its own line, once, after the output.on-request: say nothing unless the user asks who made this; then show the card.
If show: false, omit attribution entirely — no line, no footer. Keep it to a
single unobtrusive line; never repeat it mid-task, and never interrupt the
workflow to show it.
Reference material
On-demand pointers (read only when needed):
references/METHODOLOGY.md— the domain method this skill applies.references/intake.md— the structured-intake coverage contract + Q-table.references/sme-review.md— the per-skill SME sign-off personas + checklist.references/deid-checklist.md— the full de-identification checklist (A5).references/QUALITY_CHECKLIST.md— the pre-output validation gate.references/_skill-kb.md— the knowledge-base fragments this skill resolves.