honeybee-aperture-adder — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited honeybee-aperture-adder (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.
Before adding apertures, you must:
query to discover them. Face identifiers are auto-generated and cannot be guessed.type == "Wall" and boundary_condition containing "Outdoors". Interior faces and floors cannot receive meaningful window ratios.remove(operation="face_objects", ...) first.# Step 1: Query all faces
query(
target_type="face",
fields=["identifier", "type", "boundary_condition", "azimuth",
"area", "aperture_ratio", "parent"],
output_mode="list"
)
# Step 2: Filter client-side for exterior walls
# type == "Wall" AND boundary_condition contains "Outdoors"
# Use azimuth for orientation: 0=N, 90=E, 180=S, 270=W
# Step 3: Clear existing apertures if any
remove(
operation="face_objects",
identifiers=["Face_1", "Face_2"],
options={"apertures": True}
)addArgs
operation: strtarget_type: stridentifiers: list | None = Noneparams: dict | None = NoneReturns
success: boolmessage: strresults: listnot_found: listauto_save: dict when relevantaperture_by_width_heightUse for one centered aperture per face.
Params
width — Window width (m)height — Window height (m)sill_height — Distance from face bottom to window bottom (m, default 0.8)aperture_identifier — Optional custom identifierapertures_by_ratioUse for quick WWR-driven glazing. Simplest method.
Params
ratio — Window-to-wall ratio (0.0–1.0)tolerance — Geometry tolerance (default from model)rect_split — Whether to split into rectangular sub-aperturesapertures_by_ratio_rectangleUse when WWR and rectangular window behavior both matter.
Params
ratio — Window-to-wall ratioaperture_height — Height of each window (m)sill_height — Sill height (m)horizontal_separation — Horizontal gap between windows (m)vertical_separation — Vertical gap (m, if stacked)tolerance — Geometry toleranceapertures_by_ratio_griddedUse for modular or repetitive facade grids.
Params
ratio — Window-to-wall ratiox_dim — Grid cell width (m)y_dim — Grid cell height (m)tolerance — Geometry toleranceapertures_by_width_height_rectangleUse for repeated equal-size windows.
Params
aperture_height — Height of each window (m)aperture_width — Width of each window (m)sill_height — Sill height (m)horizontal_separation — Horizontal gap between windows (m)tolerance — Geometry toleranceadd(
operation="aperture_by_width_height",
target_type="face",
identifiers=["Face_1"],
params={"width": 2.0, "height": 1.5, "sill_height": 0.9}
)add(
operation="apertures_by_ratio",
target_type="face",
identifiers=["Face_1", "Face_2"],
params={"ratio": 0.4}
)add(
operation="apertures_by_ratio_gridded",
target_type="face",
identifiers=["Face_1", "Face_2"],
params={"ratio": 0.35, "x_dim": 1.2, "y_dim": 1.5}
)# 1. Find south-facing exterior walls
faces = query(target_type="face",
fields=["identifier", "type", "boundary_condition", "azimuth", "area"],
output_mode="list")
# Filter for: type=="Wall", boundary_condition containing "Outdoors", azimuth ~180
# 2. Clear existing apertures
remove(operation="face_objects", identifiers=south_face_ids,
options={"apertures": True})
# 3. Add new apertures by ratio
add(operation="apertures_by_ratio", target_type="face",
identifiers=south_face_ids, params={"ratio": 0.4})
# 4. Verify
query(target_type="face", identifiers=south_face_ids,
fields=["identifier", "aperture_ratio", "apertures"])not_found when face identifiers may be incomplete.results to report what was added on each face.apply or query steps will target them.results[i].error for per-face failure messages.~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.