01Safety
30.0 / 30
What changed in the harness
Selection accuracy 100→100, token cost up 13%, unconfirmed writes 100%→100%.
Category breakdown
Earned points across the four signals Gradable measures. Safety and Legibility are scored out of 30; Economics and Discoverability are scored out of 20.
30.0 / 30
24.0 / 30
19.9 / 20
19.7 / 20
Highest-impact fix
Estimated gain +1 pointState each tool's behavior, explain every parameter, and declare return semantics, prioritizing tools exercised by failed selection tasks.
Description evidence
10 defects found across the exposed tool descriptions. Suggested rewrites make purpose, inputs, boundaries, and returns easier for an agent to understand.
| Tool | Defect types | Suggested rewrite |
|---|---|---|
get_colors_and_type |
params_unexplained |
Return colors and typography as CSS custom properties from agent/visual/colors_and_type.css (with optional artifact override). The context parameter selects which context variant to load: base, web, or product (defaults to base). |
get_assets |
params_unexplained |
Return logos and other binary assets from agent/visual/assets/. Replaces v1 get_logos + get_textures. The context parameter selects which context variant of assets to load: base, web, or product (defaults to base). |
get_fonts |
params_unexplained |
Return font faces declared in agent/visual/fonts/ (binary files + optional fonts.yaml manifest). The context parameter selects which context variant's fonts to load: base, web, or product (defaults to base). |
get_components |
params_unexplained |
Return UI component specifications from agent/visual/components/. Optionally filter by a single component name. The context parameter selects the context variant (base | web | product, defaults to base). |
get_tokens |
params_unexplained |
Return design tokens from agent/visual/tokens/ specimens. The context parameter selects the variant (base|web|product, defaults to base). The format parameter selects the output serialization (json|css|scss|tailwind|w3c, defaults to json). Optionally filter by token type (color, font, radius, spacing, etc.). |
get_motion |
params_unexplained |
Return the motion system: parsed motion.json tokens + motion.css text. The context parameter selects which context variant to load: base, web, or product (defaults to base). |
get_css |
params_unexplained |
Return raw CSS text from agent/visual/colors_and_type.css and agent/visual/motion/motion.css for the requested context. The context parameter selects which context variant's CSS to return: base, web, or product (defaults to base). |
search_brand |
params_unexplained no_return_description |
Full-text search across all brand atomic system content: verbal docs, magic_trick, components, tokens, assets, and CSS files. The query parameter is a case-insensitive substring to search for. The limit parameter caps the number of results returned (defaults to 20). Returns the matching search results for the query, up to the specified limit. |
validate_usage |
params_unexplained no_return_description |
Validate that an HTML/CSS snippet uses brand tokens (rather than literal values) and references known components. The snippet parameter is the HTML or CSS to validate. The format parameter indicates the snippet type (html or css, defaults to css). Returns a validation result indicating whether the snippet conforms and any token/component violations found. |
get_context_diff |
params_unexplained no_return_description |
Diff two contexts (base | web | product) across colors_and_type custom properties, components, and tokens. The a and b parameters specify the two contexts to compare (defaults: a=web, b=product). Returns the set of differences found between the two contexts. |
Selection evidence
10 pairs where similar names or overlapping descriptions may send an agent toward the wrong tool.
| Tool A | Tool B | Confidence | Why they collide |
|---|---|---|---|
get_positioning |
get_differentiation |
high | 'Positioning' and 'differentiation' are near-synonymous in brand strategy tasks like 'how is our brand positioned vs competitors', and both return identical-shaped verbal docs with a taste primer, so an agent could pick either. |
get_colors_and_type |
get_tokens |
high | A query like 'give me our color tokens' or 'what fonts/colors does the brand use' matches both get_tokens(type=color|font) and get_colors_and_type, since both expose color and typography data with a context parameter. |
get_messaging |
get_voice |
medium | 'Brand voice' and 'brand messaging' overlap heavily; a task like 'what tone do we use in our messaging' could plausibly land on either of the two similar verbal documents. |
get_positioning |
get_messaging |
medium | Positioning documents usually drive messaging, so a task like 'what do we tell customers' or 'our brand message' is ambiguous between the positioning and messaging docs. |
get_assets |
get_components |
medium | 'Get the visual/brand assets' can point to get_assets (logos, textures) or get_components (UI component specs), since both are described as visual brand deliverables. |
get_assets |
get_fonts |
medium | A request for 'brand asset files' is ambiguous: get_fonts returns binary font files from agent/visual/fonts/, while get_assets returns binary assets from agent/visual/assets/, with no clear boundary. |
get_fonts |
get_css |
medium | A task like 'get the CSS for our fonts/type' could cause the agent to pick get_css (raw CSS of colors_and_type) rather than get_fonts (font faces + manifest), since both look like style/typography retrieval. |
get_colors_and_type |
get_context_diff |
medium | Context-scoped color tasks like 'compare colors between web and product' or 'what colors are defined for product' fit both context_diff (diffs colors_and_type properties) and get_colors_and_type (returns color props per context). |
get_messaging |
get_differentiation |
low | A task like 'what makes our messaging stand out' overlaps the messaging and differentiation docs, though each description is distinct enough that confusion is only occasional. |
get_components |
get_css |
low | 'Get the component styling/css' could point to Component specs or raw CSS text, but the descriptions clarify components are specs not css, so wrong picks are uncommon. |
Compare the field