01Safety
0.0 / 30
What changed in the harness
Selection accuracy 100→100, token cost up 5%, unconfirmed writes 0%→0%.
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.
0.0 / 30
25.5 / 30
19.1 / 20
14.6 / 20
Highest-impact fix
Estimated gain +30 pointsExpose machine-readable principal/tenant confirmation and a non-mutating permission check so agents can verify both before destructive actions.
Description evidence
8 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 |
|---|---|---|
create_entities |
name_restates_behavior params_unexplained |
Add multiple new entities to the graph in a single batch. Each item in the entities array defines a new entity with a name, an entityType, and an array of observation contents, so a group of related entities can be created together. Returns the created entities with their names, types, and observations. |
create_relations |
name_restates_behavior params_unexplained |
Create one or more directed relations between existing entities in a single batch. Relations must be phrased in active voice; each item in the relations array gives the from entity name where the relation starts, the to entity name where it ends, and a relationType. Returns the created relations with their from and to entity names and relation types. |
add_observations |
name_restates_behavior params_unexplained |
Append new observation contents to existing entities. Each item in the observations array names the target entityName and provides an array of observation contents to add, leaving existing observations untouched. Returns one result per entity with the entity name and the added observations. |
delete_entities |
name_restates_behavior |
Remove multiple entities by name from the graph, along with any relations connected to them, so deleting an entity also cleans up the relations that reference it. Returns a success flag and a message describing the outcome. |
delete_observations |
name_restates_behavior params_unexplained |
Remove specific observation contents from existing entities while leaving the entities themselves intact. Each item in the deletions array identifies an entityName and the exact array of observations to remove from it. Returns a success flag and a message describing the outcome. |
delete_relations |
name_restates_behavior |
Remove one or more directed relations from the graph without affecting the underlying entities. Each relation is matched by its from entity name, to entity name, and relationType. Returns a success flag and a message describing the outcome. |
read_graph |
name_restates_behavior |
Return a complete snapshot of the knowledge graph, including every entity with its name, entityType, and observations, together with all relations between entities. Use this to inspect the full current state of the graph. |
open_nodes |
name_restates_behavior |
Retrieve full details for specific entities by name, where the names array is matched against entity names. The call returns each matching entity with its name, entityType, and observations, along with the relations it participates in. |
Selection evidence
5 pairs where similar names or overlapping descriptions may send an agent toward the wrong tool.
| Tool A | Tool B | Confidence | Why they collide |
|---|---|---|---|
create_entities |
add_observations |
high | A task like 'add the observation that X works at Acme' is ambiguous when the agent doesn't know if X already exists: create_entities embeds observations for new entities, while add_observations targets existing entityNames. The shared 'add/new/observations' vocabulary makes the wrong choice likely. |
delete_entities |
delete_observations |
medium | Natural tasks like 'remove X's data' or 'delete the records about entity X' are ambiguous between deleting the whole entity (which cascades to relations) and deleting only its observations; both share 'delete/entities/graph'. |
delete_observations |
delete_relations |
medium | A vague task like 'delete the fact that A and B are connected' or 'remove the statement that X <relates> Y' could be an observation or a relation, so the agent may pick the wrong deletion tool. |
search_nodes |
open_nodes |
medium | Tasks like 'look up these nodes', 'fetch information about X', or 'retrieve entity data' are ambiguous: open_nodes takes explicit names while search_nodes matches queries against names/types/observations, and both superficially 'get nodes'. |
create_relations |
add_observations |
medium | A task like 'record that X works at Y' or 'add the link between A and B' could be modeled either as a relation (active voice) or as an observation attached to an entity, so the agent may pick the wrong tool despite semantically similar intents. |
Compare the field