01Safety
0.0 / 30
What changed in the harness
Selection accuracy 95→98, token cost up 4%, 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
24.5 / 30
16.4 / 20
15.7 / 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 |
Adds one or more new entities to the knowledge graph in a single batch call, where each entry in the required 'entities' array specifies a unique name, an entityType label, and an array of observation strings describing it; returns the entities that were created. |
create_relations |
name_restates_behavior params_unexplained |
Adds one or more directed relations linking existing entities, where each entry in the required 'relations' array specifies a 'from' entity name, a 'to' entity name, and a relationType phrased in active voice (e.g. 'works_at'); returns the relations that were created. |
add_observations |
name_restates_behavior params_unexplained |
Appends new observation strings to already-existing entities, where each entry in the required 'observations' array specifies the target entityName and a 'contents' array of observation strings to add to it; returns, per entity, the list of observations that were added. |
delete_entities |
name_restates_behavior |
Removes the entities named in the required 'entityNames' array from the knowledge graph and cascades the deletion to any relations referencing them; returns a success flag and a status message. |
delete_observations |
name_restates_behavior params_unexplained |
Removes specific observation strings from entities without deleting the entities themselves, where each entry in the required 'deletions' array specifies an entityName and the 'observations' array of exact strings to remove from it; returns a success flag and a status message. |
delete_relations |
name_restates_behavior |
Removes specific relations from the knowledge graph, where the required 'relations' array lists relation objects (each with from, to, and relationType) matching existing relations to remove; returns a success flag and a status message. |
read_graph |
name_restates_behavior |
Takes no parameters and returns the full current knowledge graph, including every entity with its observations and every relation between entities. |
open_nodes |
name_restates_behavior |
Looks up the entities matching the required 'names' array of entity names and returns those entities along with the relations that connect them to each other. |
Selection evidence
7 pairs where similar names or overlapping descriptions may send an agent toward the wrong tool.
| Tool A | Tool B | Confidence | Why they collide |
|---|---|---|---|
search_nodes |
open_nodes |
high | A task like 'look up what we know about X' is ambiguous: if the agent treats X as a known entity name it may call open_nodes, but if it treats X as a search term it may call search_nodes — both are plausible without explicit instruction on whether the name is exact. |
delete_entities |
delete_observations |
medium | A task like 'remove the information that X is a manager' is ambiguous between deleting the whole entity X (delete_entities) versus deleting just that specific fact/observation from X (delete_observations). |
delete_observations |
delete_relations |
medium | A task like 'remove the fact that X reports to Y' could be modeled either as a relation between two entities (delete_relations) or as a free-text observation on an entity (delete_observations), so the agent may pick the wrong deletion tool depending on how it assumes the fact was stored. |
create_entities |
add_observations |
medium | A task like 'record that John is a senior engineer' is ambiguous between creating a brand-new entity with that observation (create_entities) versus adding it as a new observation to an already-existing 'John' entity (add_observations), especially when the agent is unsure if the entity already exists. |
create_relations |
add_observations |
low | A task like 'note that X likes Y' could be captured as a relation (X -likes-> Y) or as a textual observation on entity X, so the agent might choose the wrong tool depending on whether it models the fact relationally or descriptively. |
create_entities |
create_relations |
low | Both are 'create multiple new X' calls in the same graph, but the required schemas (entity name/type/observations vs from/to/relationType) are distinct enough that most natural-language tasks clearly indicate whether a new node or a new connection is being added. |
delete_entities |
delete_relations |
low | Both delete graph elements, but a task about removing a node versus removing a connection between two nodes is usually unambiguous from wording (e.g. 'delete X' vs 'X no longer works at Y'), keeping confusion risk low. |
Compare the field