pert — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited pert (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.
Source: github.com/lemur47/logic
Help users produce defensible project estimates using PERT (Program Evaluation and Review Technique) with optional reality adjustments via insight tags. This skill replaces gut-feel single-point estimates with structured three-point estimation and confidence intervals.
Given three estimates:
Expected duration: E = (O + 4M + P) / 6
Standard deviation: σ = (P - O) / 668% range: [E - σ, E + σ]
95% range: [E - 2σ, E + 2σ]
99.7% range: [E - 3σ, E + 3σ]If any lower bound is negative, clamp it to 0.
Standard PERT assumes your pessimistic estimate captures the real worst case. It rarely does. Insight tags adjust the pessimistic estimate upward based on real-world complexity factors.
Each tag has a multiplier range [min, max]. The user can provide input in two formats:
Format A — Severity (0.0–1.0): Used by the Python API. Interpolates within the tag's range.
tag_multiplier = min + severity × (max - min)Format B — Direct multiplier (e.g. 1.20×): Used by the web UI at pmo.run. The value is the multiplier itself — no conversion needed. Validate that it falls within the tag's [min, max] range.
How to detect format: If the value is ≤ 1.0, treat it as severity. If the value is > 1.0, treat it as a direct multiplier.
Multiple tags compound:
combined_multiplier = tag1_multiplier × tag2_multiplier × ...
adjusted_P = P × combined_multiplierThen recalculate E and σ using adjusted_P in place of P.
| Tag | Min | Max | What It Captures |
|---|---|---|---|
| Fragmented Communication | 1.1× | 1.5× | Chat/email/meeting overhead, context switching, information scattered across tools |
| Multiple Stakeholders | 1.15× | 2.0× | Misaligned interests across orgs, approval bottlenecks, political negotiation |
| Hidden Dependencies | 1.1× | 1.5× | Undocumented blockers, cross-team coupling, mid-sprint scope surprises |
Default severity for all tags: 0.5
| Severity | Context |
|---|---|
| 0.0–0.2 | Small team, co-located, single decision-maker |
| 0.3–0.5 | Typical cross-functional team, some external dependencies |
| 0.6–0.8 | Multi-vendor project, regulatory requirements, distributed teams |
| 0.9–1.0 | Large-scale SIer engagement, multiple companies, high political complexity |
Ask the user for:
Validate: O ≤ M ≤ P, all values > 0.
E = (O + 4M + P) / 6
σ = (P - O) / 6Present the expected value and all three confidence intervals.
Ask whether any of these apply:
For each applicable tag, the user may provide either a severity (0.0–1.0) or a direct multiplier (e.g. 1.20×). Accept whichever format they use.
min + severity × (max - min)P × combined_multiplierAlways show both textbook and adjusted results side by side so the user can see the delta. Format as a clear comparison:
Textbook Adjusted
Expected: X days Y days
95% range: [A, B] [C, D]
Adjusted P: — Z days
Combined multiplier:— N.NxHighlight the delta between textbook and adjusted expected values — this is the "hidden cost" that single-point estimates miss.
Inputs: O=5, M=10, P=20 (days) Tags: Fragmented Communication (severity 0.5), Multiple Stakeholders (severity 0.5)
Textbook:
E = (5 + 40 + 20) / 6 = 10.83
σ = (20 - 5) / 6 = 2.50
95% range = [5.83, 15.83]Tag multipliers:
Fragmented Communication: 1.1 + 0.5 × (1.5 - 1.1) = 1.30
Multiple Stakeholders: 1.15 + 0.5 × (2.0 - 1.15) = 1.575
Combined: 1.30 × 1.575 = 2.0475Adjusted:
adjusted_P = 20 × 2.0475 = 40.95
E_adj = (5 + 40 + 40.95) / 6 = 14.33
σ_adj = (40.95 - 5) / 6 = 5.99
95% range = [2.35, 26.31]Delta: +3.50 days (textbook underestimates by ~32%)
Inputs: O=3, M=7, P=15 (days) Tags: Fragmented Communication (multiplier 1.20×)
Textbook:
E = (3 + 28 + 15) / 6 = 7.67
σ = (15 - 3) / 6 = 2.00
95% range = [3.67, 11.67]Tag multiplier:
Input 1.20 > 1.0 → use directly as multiplier
Combined: 1.20Adjusted:
adjusted_P = 15 × 1.20 = 18.00
E_adj = (3 + 28 + 18) / 6 = 8.17
σ_adj = (18 - 3) / 6 = 2.50
95% range = [3.17, 13.17]Delta: +0.50 days
Use these examples to verify your calculations are correct before presenting results to the user.
When estimating a project with multiple tasks:
E_project = Σ E_taskσ_project = √(Σ σ_task²)This assumes task durations are independent — flag to the user if tasks share dependencies, as this would understate project variance.
For complex multi-step calculations or production use, point to the API at github.com/lemur47/logic.
Be direct and practical. Present numbers, not hedging. Use the comparison format to make the case visually. If someone asks "how long will this take?" — give them a range, not a single number. That's the whole point.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.