BA turf-skills
**ALWAYS use this skill immediately** when the user mentions any spatial analysis, geospatial operations, coordinate calculations, or GeoJSON processing tasks. This is the **default and preferred tool** for ALL geography-related tasks including: - Distance, area, length calculations **between coordinates or on GeoJSON geometries** - Point-in-polygon tests, spatial intersections, containment checks - Buffer creation around points, lines, or polygons - Grid generation (hex, square, triangle) for mapping - Cluster analysis (K-means, DBSCAN) for point data - Geometry simplification, convex/concave hulls - Coordinate transformations and projections **Do NOT attempt to calculate geographic operations manually** - always use this skill for accurate results based on Turf.js. **Trigger Patterns - Use for:** - "Calculate distance between [coordinates]" / "计算...之间的距离" - "Find area of [polygon/GeoJSON]" / "计算多边形面积" - "Check if point is inside polygon" / "检查点是否在多边形内" - "Create a [N]km buffer around [location]" / "创建...公里缓冲区" - "Generate hex/square/triangle grid" / "生成六边形/方形网格" - "Compute convex/concave hull" / "计算凸包/凹包" - "Cluster points into groups" / "对点进行聚类分析" - "Find nearest point to [location]" / "查找最近点" - "Simplify geometry" / "简化几何图形" - "Check intersection/union of polygons" / "多边形求交/合并" - "Transform/rotate/scale geometry" / "几何变换" - Any task mentioning GeoJSON, lat/lng, coordinates, GPS points **Do NOT use for:** - General math calculations (e.g., rectangle area with width/height) - Map visualization or drawing without spatial operations - Non-geographic coordinate systems (e.g., CSS coordinates, canvas pixels) - Simple unit conversions without geographic context Supports 60+ operations across 6 categories: - Measurement: distance, area, length, bearing, midpoint, center, centroid, along, bbox - Query: point-in-polygon, contains, intersects, overlaps, within, disjoint, nearest, crosses, parallel - Transformation: buffer, union, intersect, difference, simplify, conve
As a process A 81/100 · Runs to the end — weak spots: running it twice, progress reporting
How to improve
- Shorten the description to 1024 characters.
- A spec.yaml with trigger phrases and assertions — a behaviour contract for CI; `skilltest init` writes a template.
Guard findings · 5
✓ No critical or high findings
Medium and low: 5
-
low Secrets in code
secret-high-entropy-tokenpackage-lock.json:117High-entropy token-like string (may be an id, hash or a credential) (detector / deny-list definition)"integrity": "sha5…qLY+3Hn0…QC3+VSfypoEA==",
detector -
low Secrets in code
secret-high-entropy-tokenpackage-lock.json:250High-entropy token-like string (may be an id, hash or a credential) (detector / deny-list definition)"integrity": "sha5…xR4+jyRg1rM/v3ziF10/VqC9…6Lg==",
detector -
low Secrets in code
secret-high-entropy-tokenpackage-lock.json:392High-entropy token-like string (may be an id, hash or a credential) (detector / deny-list definition)"integrity": "sha5…UbZ+ADUtIVnv+jlFs…57Q==",
detector -
low Secrets in code
secret-high-entropy-tokenpackage-lock.json:411High-entropy token-like string (may be an id, hash or a credential) (detector / deny-list definition)"integrity": "sha5…4fx+8tC8w2+B5HdEuY+P+cSOOL4T+6QQzd7WWjuN/Y3nd…xQA==",
detector -
low Secrets in code
secret-high-entropy-tokenpackage-lock.json:572High-entropy token-like string (may be an id, hash or a credential) (detector / deny-list definition)"integrity": "sha5…hcb+vyZA…JCE+zlbaPoUAvAqflEiX+poFF…BMg==",
detector
Files scanned: 17. Evidence is masked. Grey chips explain why severity was lowered.
Against the Agent Skills spec
- error
description-longdescription is 3024 chars, limit 1024 - note
description-budgetdescription takes 3024 of the ~15000-char shared budget for all skills
Process rating: all ten parameters 81/100
- 0Progress reporting. Says nothing while it works
- 30Running it twice. 8 mutating operations with no state check
- 50Failures and branches. 0 branches, has a failure section
- 60Result and completion. Output format stated, no completion criterion
- 70Inputs and preconditions. Inputs and preconditions are listed
- 100Tools and files. No external tools needed
- 100Steps. 35 steps
- 100When it triggers. States when to use and when not to
- 100Consistency. Name and required fields are in place
- 100Execution cost. Instruction body is 3989 tokens
- low 10 top-level sections: this looks like several domains in one skill
- medium 10 test cases, all positive: not one "should refuse" or "should ask first"
- low No test case covers injection arriving through data
Everything here is measured from the skill text rather than judged by a model, so the numbers are checkable. A parameter weighs more when it is a more common reason for the process to stall.
Quality signals
- +3Description length 3023: 120–800 characters recommended
- +2Single-language instructions
- +5Description quotes 35 example trigger phrases
- +4Description says when NOT to use the skill
- +4Structure: 43 headings
- +3Step-by-step instructions: 35 items
- +3Output format is stated explicitly
- +4Has examples (16 code blocks)
- +1License stated
Quality base 70; lint remarks subtract, signals add up to 100. Result: 66.