If this connection lists call_platform_tool instead of the tools this workflow names, find each named tool with search_platform_tools, describe it with describe_platform_tool, then run it with call_platform_tool and the same arguments. Whether a tool exists for you is decided by describe_platform_tool with its exact name, not by tools/list or one page of search results: a name returned in not_found is unavailable to you, so say so rather than guess. The call itself still checks your access. When execute is also listed, a multi-step read may run in execute with tools.search, tools.describe and tools.call on platform--<tool name> paths. End each execute run at a confirmation point and ask the user before any write.
Use authenticated Speakeasy AI Control Plane tools to answer a bounded question
about captured activity. First successfully call list_projects through this
client's own connection and select the exact project requested by the user.
- Call
describe_analytics_catalogwith that project ID.signal_metricsdescribes the entitled signal-measurement contract and supplies current sensor names, modes, ordered signal membership and signal names. Availability requires Signals Intelligence and project read access; Explore's rollout is independent. - Select the sensor answering the user's question and its signal. Shared signal
identity does not make different sensors equivalent. State the time window and
explicit match rule: a multi-label probability threshold, the exclusive selected
signal, or cumulative probability at/above a zero-based ordered level. For an
exploratory threshold use 0.5 only when stated clearly; it is not a universal
quality or severity standard. Never threshold or average
expected_index. - Discover labels with
list_analytics_dimension_values: usedataset: signals,signal_scopecontaining the sensor and trigger/run, anddimension: attribute_keys. To discover values, usedimension: attributeand the exactattributekey.present: falsemeans absent; present empty strings are a different group. Names such asdepartment,model_family,inference_providerandmodel_nameare starting labels, not a closed vocabulary. - Call
run_analytics_querywithdataset: signals, explicitfrom/to,grain: auto(or an admitted UTC interval) andsignal_query:selection:sensor_id,signal_idorminimum_level, andthreshold;trigger:stream, ormanualwith one exactrun_id;group_by: structured{attribute: key}or{field: name}references;filters: ANDed dimension/operator/value objects;existsandmissingtake no values;- optional
groupsandpointsbudgets. Use this semantic request rather than composed measures/dimensions. If a physical read is refused, narrow the window. Coarser output alone does not reduce the canonical input scanned.
- Explain the result using
signal_result.metadata,signal_result.summary,signal_result.groupsand the complete top-levelrows(joined byseries_id). Distinguish matching messages, exact distinct sessions, share among measured answers,failed/not_applicable/draft/unmeasuredcompanions, and unknown census coverage. Gaps are unknown, not supported zeroes. Report partial edge buckets and top-group selection. A session can belong to several attribute groups, so distinct-session counts are not additive. Terminal event-level failures such asinvalid_evaluation_contextemit no sensor outcome. They contribute to unknown census coverage, not to thefailedcounter or any other sensor-outcome companion. - When definitions are mixed or an interpretation needs inspection, call
get_signal_definitionfor an exact contributing sensor and fingerprint. Historical snapshots may be unavailable; current configuration is not a reconstruction of a past measurement. Treat definition, classifier and input changes as possible explanations for a trend. - For cross-session questions call
find_signal_sessionswith the same window, source and predicate, omittinggroup_by. Presence and breadth count exact conversations; concentration divides top-session hits by all hits linked to conversations. Apeerpredicate produces separate same-message and same-session joint-answer denominators. Do not interchange those units.compare_previous: trueretains the previous values, descriptive share difference and failed comparability gates. Recent windows, sparse observations or changed definitions cannot support an unqualified trend claim. Unknown census coverage remains a limitation even when those gates pass. - Request
evidence: trueonly when supporting conversation references help. Results contain bounded permitted examples, never transcripts or an exhaustive session list. Open the referenced conversation in the dashboard for content; an absent example does not establish absence of matching activity.
Return the scope, chosen rule, numerator/denominator, supporting measures, query time and limitations together. These are descriptive observations, not task counts, time worked, verified agent errors or causal findings. Live reads can change with corrections and imports; retain the actual result and request when reproducibility matters. Do not ask for credentials or propose raw SQL access.