0.0 / 30
What changed in the harness
Selection accuracy 95→98, token cost up 21%, unconfirmed writes 0%→0%.
Category breakdown
Where the score comes from.
Earned points across the four signals Gradable measures. Safety and Legibility are scored out of 30; Economics and Discoverability are scored out of 20.
01Safety
02Legibility
19.8 / 30
03Economics
18.2 / 20
04Discoverability
9.8 / 20
Highest-impact fix
Estimated gain +30 pointsAdd explicit identity and permission preflight tools
Expose machine-readable principal/tenant confirmation and a non-mutating permission check so agents can verify both before destructive actions.
Description evidence
Defects and rewrites.
28 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 |
|---|---|---|
list_namespaces |
no_return_description |
Lists all namespaces in the Flipt instance, which are used to group flags and segments. Returns an array of namespace objects (key, name, description). |
create_namespace |
params_unexplained no_return_description |
Creates a new namespace to group related flags and segments. 'key' is the unique identifier for the namespace, 'name' is its human-readable display name, and 'description' is optional free-text documentation. Returns the created namespace object. |
update_namespace |
params_unexplained no_return_description |
Updates the namespace identified by 'key', setting its display 'name' and optional 'description'. Returns the updated namespace object. |
delete_namespace |
params_unexplained no_return_description |
Deletes the namespace identified by 'key'. Returns no content on success. |
list_flags |
params_unexplained no_return_description |
Lists all feature flags within the namespace identified by 'namespaceKey'. Returns an array of flag objects. |
get_flag |
params_unexplained no_return_description |
Retrieves the flag identified by 'flagKey' within the namespace 'namespaceKey'. Returns the flag object, including its variants and rules. |
create_flag |
params_unexplained no_return_description |
Creates a new feature flag in the namespace 'namespaceKey'. 'key' is the unique flag identifier, 'name' is its display name, 'description' is optional documentation, 'enabled' sets whether the flag is active, and 'type' specifies BOOLEAN_FLAG_TYPE or VARIANT_FLAG_TYPE. Returns the created flag object. |
update_flag |
params_unexplained no_return_description |
Updates the flag identified by 'key' in namespace 'namespaceKey', setting its 'name', optional 'description', and 'enabled' state. Returns the updated flag object. |
delete_flag |
params_unexplained no_return_description |
Deletes the flag identified by 'key' from namespace 'namespaceKey'. Returns no content on success. |
toggle_flag |
params_unexplained no_return_description |
Enables or disables the flag identified by 'flagKey' in namespace 'namespaceKey' by setting 'enabled' true or false. Returns the updated flag object. |
list_segments |
params_unexplained no_return_description |
Lists all segments within the namespace identified by 'namespaceKey'. Returns an array of segment objects. |
get_segment |
params_unexplained no_return_description |
Retrieves the segment identified by 'segmentKey' within namespace 'namespaceKey'. Returns the segment object, including its constraints. |
create_segment |
params_unexplained no_return_description |
Creates a segment in namespace 'namespaceKey' used to group entities by matching constraints for targeting. 'key' is the unique segment identifier, 'name' is its display name, 'description' is optional documentation, and 'matchType' sets whether ALL_MATCH_TYPE or ANY_MATCH_TYPE of its constraints must match. Returns the created segment object. |
update_segment |
params_unexplained no_return_description |
Updates the segment identified by 'key' in namespace 'namespaceKey', setting its 'name', optional 'description', and 'matchType' (whether all or any constraints must match). Returns the updated segment object. |
delete_segment |
params_unexplained no_return_description |
Deletes the segment identified by 'key' from namespace 'namespaceKey'. Returns no content on success. |
evaluate_boolean_flag |
params_unexplained no_return_description |
Evaluates a boolean flag identified by 'flagKey' in namespace 'namespaceKey' for the entity 'entityId', optionally using key-value 'context' attributes for rule matching. Returns the evaluation result, including whether the flag is enabled for that entity. |
evaluate_variant_flag |
params_unexplained no_return_description |
Evaluates a variant flag identified by 'flagKey' in namespace 'namespaceKey' for the entity 'entityId', optionally using key-value 'context' attributes for rule matching. Returns the evaluation result, including which variant, if any, matched. |
evaluate_batch |
params_unexplained no_return_description |
Evaluates multiple flag requests in one call. 'requests' is an array of objects, each with 'namespaceKey', 'flagKey', 'entityId', and optional 'context' attributes. Returns an array of evaluation results, one per request, in order. |
create_constraint |
params_unexplained no_return_description |
Adds a constraint to the segment 'segmentKey' in namespace 'namespaceKey', used to match entities based on context attributes. 'type' sets the comparison data type (string, number, boolean, datetime, or entity ID), 'property' is the context field compared, 'operator' is the comparison operator (e.g. eq, neq, contains), 'value' is the value compared against, and 'description' is optional documentation. Returns the created constraint object. |
delete_constraint |
params_unexplained no_return_description |
Deletes the constraint identified by 'constraintId' from segment 'segmentKey' in namespace 'namespaceKey'. Returns no content on success. |
create_variant |
params_unexplained no_return_description |
Creates a variant on the variant-type flag 'flagKey' in namespace 'namespaceKey'. 'key' is the unique variant identifier, 'name' is an optional display name, 'description' is optional documentation, and 'attachment' is an optional JSON payload returned with the variant. Returns the created variant object. |
delete_variant |
params_unexplained no_return_description |
Deletes the variant identified by 'variantId' from flag 'flagKey' in namespace 'namespaceKey'. Returns no content on success. |
create_rule |
params_unexplained no_return_description |
Creates a targeting rule on flag 'flagKey' in namespace 'namespaceKey' that matches entities in segment 'segmentKey'. 'rank' sets the rule's evaluation order, and 'segmentOperator' sets whether OR_SEGMENT_OPERATOR or AND_SEGMENT_OPERATOR logic applies across referenced segments. Returns the created rule object. |
delete_rule |
params_unexplained no_return_description |
Deletes the rule identified by 'ruleId' from flag 'flagKey' in namespace 'namespaceKey'. Returns no content on success. |
create_distribution |
params_unexplained no_return_description |
Attaches a variant distribution to the rule 'ruleId' on flag 'flagKey' in namespace 'namespaceKey'. 'variantId' is the variant being distributed, and 'rollout' is the percentage (0-100) of matching entities that receive it. Returns the created distribution object. |
delete_distribution |
params_unexplained no_return_description |
Removes the distribution identified by 'distributionId' (for variant 'variantId') from rule 'ruleId' on flag 'flagKey' in namespace 'namespaceKey'. Returns no content on success. |
create_rollout |
params_unexplained no_return_description |
Creates a rollout rule for the boolean flag 'flagKey' in namespace 'namespaceKey', evaluated in order of 'rank' with optional 'description'. Provide either 'segment' ('segmentKey' plus the boolean 'value' returned when it matches) or 'threshold' ('percentage' plus the boolean 'value' returned for that percentage of entities). Returns the created rollout object. |
delete_rollout |
params_unexplained no_return_description |
Deletes the rollout identified by 'rolloutId' from flag 'flagKey' in namespace 'namespaceKey'. Returns no content on success. |
Selection evidence
Confusable tool pairs.
8 pairs where similar names or overlapping descriptions may send an agent toward the wrong tool.
| Tool A | Tool B | Confidence | Why they collide |
|---|---|---|---|
evaluate_boolean_flag |
evaluate_variant_flag |
high | Identical schemas (namespaceKey/flagKey/entityId/context) with empty descriptions; the agent must already know whether the target flag is BOOLEAN_FLAG_TYPE or VARIANT_FLAG_TYPE to pick correctly, and a task like 'evaluate flag X for user Y' gives no such signal. |
create_distribution |
create_rollout |
high | Both implement percentage-based delivery of a flag value to users (distribution assigns % of a rule's matches to a variant; rollout assigns % threshold/segment for a flag), so a task like 'roll out this value to 50% of users' plausibly maps to either tool depending on flag type, which isn't stated. |
update_flag |
toggle_flag |
medium | update_flag's optional 'enabled' field duplicates toggle_flag's purpose; a task like 'enable flag X' could be satisfied by either tool, with toggle_flag being simpler (no required name) but update_flag also capable of the same state change. |
create_constraint |
create_rule |
medium | Both define targeting conditions (constraint = property match criteria on a segment; rule = attaching a segment to a flag) with empty descriptions to disambiguate, so a task like 'add a targeting condition based on country=US' could plausibly trigger either call. |
list_flags |
get_flag |
low | A task naming a specific flag ('show me flag X') could be handled by listing all flags and filtering instead of calling get_flag directly, especially with no description clarifying get_flag's single-item purpose. |
list_segments |
get_segment |
low | Same list-vs-get ambiguity as flags: a task referencing one segment by name could be resolved via list_segments plus filtering rather than the more direct get_segment call. |
evaluate_boolean_flag |
evaluate_batch |
low | evaluate_batch's request items omit any type field and can serve a single evaluation wrapped in an array, so a single-flag evaluation task could plausibly be routed through the batch tool instead of the dedicated boolean evaluator. |
evaluate_variant_flag |
evaluate_batch |
low | Same overlap as with evaluate_boolean_flag: evaluate_batch can trivially handle a single variant flag evaluation, creating mild ambiguity over which tool a single-evaluation task should use. |
Compare the field