Agent skill · Audited from source
Gear
skill · ghbalf/freecad-aiLGPL-2.1 licenceAudited 19 Oct 2026 · source 24034f36bad7
Is it safe? Yes — SAFE, grade B (89/100). We read this skill's source at commit 24034f36bad7 and found no filesystem, network or shell access and no hard-coded secrets. What it does: Create an involute spur gear using FreeCAD's Part module.
Cite
Cite this page
ModelsAtlas. “Gear (ghbalf/freecad-ai)”. Retrieved 19 Oct 2026. https://modelsatlas.com/skills/ghbalf/gear
Trust audit
Audit 0.4.1 · source read 19 Oct 2026
SAFE means nothing in the source contradicts what the skill says it does. Grade B is shared by 16,667 of 17,602 audited skills.
What the source does
- FilesystemNone observedNo reads or writes in the source
- NetworkNone observedNo outbound calls in the source
- ShellNone observedNo commands run in the source
- DependenciesPinnedNothing floats
- SecretsNone foundNo keys in source
Five audit layers
| Layer | What we check | Result | Findings |
|---|---|---|---|
L0 Provenance | Repo owner, licence, archive status, activity | PASS | 0 |
L1 Static source | Secrets, path traversal, supply chain, hidden code | NA | 0 |
L2 Instructions | Prompt injection, authority framing, hidden directives | PASS | 0 |
L3 Inventory | The files and declarations match the source | PASS | 0 |
L4 Sandbox | Run in isolation and watch behaviour | SKIPPED why | 0 |
Gates applied: no behavioural pass.
Findings (0)
No findings at any severity. We re-audit when the source changes.
Audit 0.4.1 · source sha 24034f36bad7 · 19 Oct 2026Report an issue or request a re-scan
Provenance
Who published it, and what the verdict is pinned to
- Publisherghbalf GitHub userOwner of the repository this skill is read from
- Source folderghbalf/freecad-ai/skills/gearThe exact folder we audited
- LicenceLGPL-2.1As the repository states it
- Commit pinned for this verdict24034f36bad7A new audit runs when the source changes
- Repository statusNot archivedLast push 2 days ago
- Sandboxed runNot runSkills are read, not executed; layer L4 is skipped
What it tells the agent
Full source on GitHub ↗Its description: Create an involute spur gear using FreeCAD's Part module.
---
name: gear
description: "Create an involute spur gear using FreeCAD's Part module."
---
# Spur Gear Generator
Create an involute spur gear using FreeCAD's Part module.
## Parameters to extract from user request
- **Module** (m): tooth size parameter, default 2.0mm
- **Number of teeth** (z): default 20
- **Pressure angle**: default 20 degrees
- **Face width** (thickness): default 10mm
- **Bore diameter**: center hole, default 5mm (0 = no bore)
## Derived dimensions
- Pitch diameter: d = m * z
- Tip diameter: da = m * (z + 2)
- Root diameter: df = m * (z - 2.5)
## Construction
Use `execute_code` with the complete gear generation code below.
Replace the parameter values at the top with the user's requested values.
```python
import math
import Part
import FreeCAD as App
# === PARAMETERS (replace with user values) ===
module = 2.0
teeth = 20
pressure_angle_deg = 20
face_width = 10.0
bore_dia = 5.0
# === DERIVED ===
pitch_r = module * teeth / 2.0
base_r = pitch_r * math.cos(math.radians(pressure_angle_deg))
tip_r = pitch_r + module
root_r = pitch_r - 1.25 * module
def involute_pts(base_r, tip_r, n=20):
max_angle = math.sqrt((tip_r / base_r) ** 2 - 1)
pts = []
for i in range(n):
t = i * max_angle / (n - 1)
x = base_r * (math.cos(t) + t * math.sin(t))
y = base_r * (math.sin(t) - t * math.cos(t))
pts.append(App.Vector(x, y, 0))
return pts
def rotate_pt(pt, angle_rad):
c, s = math.cos(angle_rad), math.sin(angle_rad)
return App.Vector(c * pt.x - s * pt.y, s * pt.x + c * pt.y, 0)
def pt_angle(pt):
return math.atan2(pt.y, pt.x)
# Involute half-tooth thickness angle
inv_alpha = math.tan(math.radians(pressure_angle_deg)) - math.radians(pressure_angle_deg)
half_thick_angle = math.pi / (2 * teeth) + inv_alpha
# Generate involute profile for one tooth, centered on +Y axis
right_involute = involute_pts(base_r, tip_r, 20)
right_side = [rotate_pt(p, -half_thick_angle + math.pi / 2) for p in right_involute]
left_side = [App.Vector(-p.x, p.y, 0) for p in right_side]
# Key points
left_base, left_tip = left_side[0], left_side[-1]
right_base, right_tip = right_side[0], right_side[-1]
lb_a, rb_a = pt_angle(left_base), pt_angle(right_base)
# Points on root circle at flank angles
lb_on_root = App.Vector(root_r * math.cos(lb_a), root_r * math.sin(lb_a), 0)
rb_on_root = App.Vector(root_r * math.cos(rb_a), root_r * math.sin(rb_a), 0)
# Build closed tooth profile: root → left involute → tip arc → right involute → root arc
tooth_edges = []
# Radial: left root → left base
if lb_on_root.distanceToPoint(left_base) > 0.01:
tooth_edges.append(Part.LineSegment(lb_on_root, left_base).toShape())
# Left involute BSpline (base → tip)
bs_left = Part.BSplineCurve()
bs_left.interpolate(left_side)
tooth_edges.append(bs_left.toShape())
# Tip arc (left tip → right tip)
tip_mid_a = (pt_angle(left_tip) + pt_angle(right_tip)) / 2
tip_mid = App.Vector(tip_r * math.cos(tip_mid_a), tip_r * math.sin(tip_mid_a), 0)
tooth_edges.append(Part.Arc(left_tip, tip_mid, right_tip).toShape())
# Right involute BSpline (tip → base)
bs_right = Part.BSplineCurve()
bs_right.interpolate(list(reversed(right_side)))
tooth_edges.append(bs_right.toShape())
# Radial: right base → right root
if right_base.distanceToPoint(rb_on_root) > 0.01:
tooth_edges.append(Part.LineSegment(right_base, rb_on_root).toShape())
# Root arc (right root → left root, closing the profile)
root_mid_a = (lb_a + rb_a) / 2
root_mid = App.Vector(root_r * math.cos(root_mid_a), root_r * math.sin(root_mid_a), 0)
tooth_edges.append(Part.Arc(rb_on_root, root_mid, lb_on_root).toShape())
# Create one tooth solid
tooth_wire = Part.Wire(tooth_edges)
tooth_face = Part.Face(tooth_wire)
tooth_solid = tooth_face.extrude(App.Vector(0, 0, face_width))
# Build gear: base cylinder + all teeth fused together
gear = Part.makeCylinder(root_r, face_width)
for t in range(teeth):
rotated = tooth_solid.copy()
if t > 0:
rotated.rotate(App.Vector(0, 0, 0), App.Vector(0, 0, 1), t * 360.0 / teeth)
gear = gear.fuse(rotated)
gear = gear.removeSplitter()
# Cut bore hole
if bore_dia > 0:
bore = Part.makeCylinder(bore_dia / 2, face_width + 2, App.Vector(0, 0, -1))
gear = gear.cut(bore)
# Add to document
gear_obj = App.ActiveDocument.addObject("Part::Feature", "Gear_M{}_Z{}".format(module, teeth))
gear_obj.Label = "Gear M{} Z{}".format(module, teeth)
gear_obj.Shape = gear
App.ActiveDocument.recompute()
print("Gear created: pitch dia={:.1f}mm, tip dia={:.1f}mm, root dia={:.1f}mm".format(
pitch_r * 2, tip_r * 2, root_r * 2))
```
## Important
- Copy the COMPLETE code block above into `execute_code`, only changing the parameter values at the top
- Do NOT try to use PartDesign Body/Sketch for the gear — use Part::Feature directly
- Do NOT use `App.Gui` — it may not be available in the sandbox
- Label the gear clearly with its parameters: "Gear M2 Z24"
- The gear is centered at the originExcerpt, first 4,966 characters of SKILL.md, verbatim from the audited commit. It is text from someone else’s repository, quoted so you can judge it before your agent reads it.
Install
Pinned to the audited commit 24034f3
git clone https://github.com/ghbalf/freecad-ai git -C freecad-ai checkout 24034f36bad7
The author documents no install command, so this uses the repository directly. Our verdict covers commit 24034f36bad7 only.
Works in
The author has not said which agents this skill supports, and we have not tested it in any.
Audit history
Every audit, every source change
- ✓SAFE B 89 / 100
first audit · source
24034f36bad7
Similar skills
ghbalf/freecad-ai
Generate a draft VALIDATION.md for a skill by analyzing its SKILL.md construction steps
ghbalf/freecad-ai
Generate a parametric electronics enclosure with a base and lid.
ghbalf/freecad-ai
Create standard fastener holes: clearance, counterbore, or countersink.
ghbalf/freecad-ai
Generate a 3D lattice or infill pattern inside a bounding region. Useful for lightweight structural parts.
ghbalf/freecad-ai
Automatically optimize a skill's SKILL.md by running test cases, scoring results, and iteratively improving instructions
ghbalf/freecad-ai
Extract 2D geometry from an attached image and create a FreeCAD sketch from it.
Questions about Gear
What does the Gear skill do?
Is Gear safe to install?
What can Gear access on my machine?
How current is this page?
Sources
- github.com/ghbalf/freecad-ai/tree/master/skills/gear — the audited source at commit 24034f36bad7 and every finding aboveObserved · 19 Oct 2026
Spotted something wrong? Report a correction · Methodology
Keep going in your AI
Opens with this page as the source. We add nothing else to the prompt.
- What does the Gear skill do?
- Is Gear safe to install?
- What can Gear access on my machine?