01Safety
0.0 / 30
What changed in the harness
Selection accuracy 100→100, token cost up 1%, 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
20.3 / 30
8.1 / 20
16.2 / 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
16 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 |
|---|---|---|
execute_custom_workflow |
params_unexplained |
Execute a custom workflow definition. Provide the 'definition' object that describes the sequence of Linked API actions to run. Linked API actions are queued into a cloud-browser workflow and may take several minutes; the server returns immediately after starting the workflow with {status: 'pending'|'running', workflowId, operationName, message}. Call get_workflow_result with the returned workflowId and operationName to retrieve the final result. Do not retry this tool while the workflow is still running; retrying can duplicate any write actions inside the custom workflow. |
get_api_usage |
no_return_description |
Retrieve Linked API usage statistics for the date range from start to end, which must not exceed 30 days. Returns the usage statistics for the requested period. |
admin_get_subscription_status |
name_restates_behavior no_return_description |
Returns the current subscription status for the account, including trial eligibility (whether a trial can still be used) and the cancellation schedule, so you can determine the account's current billing state without modifying it. |
admin_get_seats |
no_return_description |
Returns the active subscription seats for the account. Each seat allows one connected LinkedIn account; seat types are core (standard) and plus (includes Sales Navigator). |
admin_set_seats |
params_unexplained |
Set the number of subscription seats for the account. quantity is the number of seats (1-1000); seatType 'core' is standard and 'plus' unlocks Sales Navigator actions; billingPeriod is the billing cadence, 'month' for monthly billing or 'year' for annual billing. Returns a checkout link if there is no active subscription, otherwise the change is applied immediately. |
admin_get_accounts |
no_return_description |
Returns all connected LinkedIn accounts and any pending connection sessions, including their current status. |
admin_get_connection_session |
name_restates_behavior no_return_description |
Returns the current status and details of a connection or reconnection session, looked up by sessionId. Use the sessionId returned by admin_connect_account or admin_create_reconnection_session to check whether the browser-based connection flow has completed. |
admin_cancel_connection_session |
name_restates_behavior no_return_description |
Cancels a pending connection or reconnection session identified by sessionId, aborting the session before it completes. Returns confirmation that the session was cancelled. |
admin_disconnect_account |
no_return_description |
Disconnects the LinkedIn account identified by accountId. This action is irreversible; the account must be reconnected from scratch. Returns confirmation that the account was disconnected. |
admin_regenerate_token |
no_return_description |
Regenerates the identification token for the account identified by accountId. The old token becomes invalid immediately. Returns the new token for the account. |
admin_get_limits_defaults |
name_restates_behavior no_return_description |
Returns the system-wide default rate limits, which apply to accounts that do not have account-specific overrides, keyed by limit category and period. |
admin_get_limits |
no_return_description |
Returns the rate limits currently configured for the account identified by accountId, including any account-specific overrides and the categories and periods they apply to. |
admin_get_limits_usage |
name_restates_behavior no_return_description |
Returns the current usage against each configured rate limit for the account identified by accountId, so remaining quota can be determined. |
admin_set_limits |
no_return_description |
Sets rate limits for the account identified by accountId. Only the limits specified in the request are created or updated; other limits remain unchanged. Each limit specifies a category (one of: stPersonProfileViews, stCompanyPageViews, stConnectionRequests, stMessages, stSearchQueries, stReactions, stComments, stPosts, nvPersonProfileViews, nvCompanyPageViews, nvMessages), a period (daily, weekly, or monthly), a maximum allowed value, and whether it is enforced. Returns the updated limits. |
admin_delete_limits |
no_return_description |
Deletes the specified rate limits for the account identified by accountId, identified by category and period. Deleted limits fall back to the system defaults. Returns confirmation of the deletion. |
admin_reset_limits |
no_return_description |
Resets all rate limits for the account identified by accountId to the system defaults. Returns confirmation that the limits were reset. |
Selection evidence
17 pairs where similar names or overlapping descriptions may send an agent toward the wrong tool.
| Tool A | Tool B | Confidence | Why they collide |
|---|---|---|---|
sync_inbox |
nv_sync_inbox |
high | Descriptions are near-identical ('enable whole-inbox monitoring'), differing only by 'in Sales Navigator'; a task like 'turn on inbox syncing' gives no product signal. |
fetch_company |
nv_fetch_company |
high | Both 'open a company page to retrieve basic information'; only Sales Navigator branding differs, so 'fetch company info' selects either without intent signal. |
fetch_person |
nv_fetch_person |
high | Both open a person page for basic info; identical descriptions except 'in Sales Navigator', so a plain 'get this person's profile' task is ambiguous. |
get_conversation |
nv_get_conversation |
high | Same retrieval behavior; only difference is standard vs Sales Navigator messaging, which a task like 'get my conversation with John' does not specify. |
manage_conversation |
nv_manage_conversation |
high | Both archive/star/mute by threadId with near-identical descriptions; a generic 'archive this thread' task does not indicate which messaging product. |
search_companies |
nv_search_companies |
high | Identical 'search companies applying filtering criteria' semantics; only Sales Navigator branding differs, so 'find companies in X' is ambiguous. |
search_people |
nv_search_people |
high | Identical search semantics except Sales Navigator scope; a task like 'search for sales engineers in Austin' gives no indication of product. |
send_message |
nv_send_message |
high | Both send a 1900-char message to a person with personUrl/threadId; descriptions differ only by Sales Navigator branding, so 'message John' is ambiguous. |
admin_get_limits |
admin_get_limits_usage |
medium | Names differ only by the 'usage' suffix and both read rate-limit state for an account; 'what are my rate limits' may pick configured limits when the user means current usage. |
admin_get_limits_defaults |
admin_get_limits |
medium | Both are 'get rate limits'; 'get the limits' is ambiguous between system defaults (no accountId) and per-account configured limits, especially without account context. |
admin_delete_limits |
admin_reset_limits |
medium | Both destructively clear rate limits for an account; 'clear my custom limits so I use defaults' fits either deleting specific limits or resetting all to defaults. |
sync_inbox |
sync_network |
medium | Both are zero-arg 'enable background monitoring, run once' tools; 'turn on syncing/monitoring for my account' is ambiguous between inbox conversations and network events. |
nv_fetch_company |
nv_fetch_person |
medium | Both take an indistinguishable hashed LinkedIn URL and 'open page to retrieve basic information'; 'get info on this Sales Navigator profile' with a hashed URL is ambiguous. |
retrieve_ssi |
retrieve_performance |
low | Both are zero-arg 'retrieve your metrics' tools, and SSI is itself a sales-performance score, so a vague 'how am I performing on LinkedIn' may select the wrong one. |
send_message |
send_connection_request |
low | Both are 'send to a person' tools; vague outreach wording like 'reach out to John about our call' could map to a DM when a connection request (with note) is intended. |
admin_set_limits |
admin_reset_limits |
low | A task phrased 'set my limits back to the defaults' contains 'set' (set_limits) though reset_limits better matches the semantics; both change the account's rate-limit configuration. |
admin_set_seats |
admin_set_limits |
low | Both are 'set'-prefixed with the word 'limit' in scope; 'set a limit of 5' is ambiguous between subscription seats (quantity) and a rate-limit maxValue. |
Compare the field