Skip to main content
Glama

send_message

Send follow-up prompts to an existing throng session by session_id; wait for the current turn, queue in background, or steer to interrupt and run next.

Instructions

Sends the next message into an earlier session (session_id from run_thronglet) and returns the same JSON as run_thronglet. A message to a session whose turn is still running waits for that turn to end: turns on one session never overlap. With background: true the call returns {session_id, state, queued} as soon as the turn runs; collect the result with wait_thronglet. steer: true interrupts the running turn and delivers this message next; queued messages follow it. A session whose harness cannot resume takes no further message, steer included: list_thronglets shows it as accepts_messages: false.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
steerNoInterrupt the running turn (session/cancel) and run this message as the very next turn, ahead of queued messages. The in-flight tool call is aborted; a half-applied edit may remain.
promptYesNext message for the agent
schemaNoJSON Schema (draft-07 or 2020-12) for structured output: the agent submits a matching result, returned as `structured` instead of `text`
timeout_sNoWall-clock limit for the run in seconds; default from config (21600)
backgroundNoReturn as soon as the turn is running (or queued behind the session's current turn); collect the result with wait_thronglet
session_idYessession_id from run_thronglet

Schema Changelog

Changes observed during successful MCP inspections.

  1. First observedv0.1.0

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the full behavioral burden and does so well: it discloses that turns on one session never overlap, that a message to a busy session blocks until the turn ends, that background mode changes the return shape and requires wait_thronglet to collect, that steer interrupts the running turn and jumps the queue, and that non-resumable sessions reject all messages including steer. These are exactly the traits an agent cannot infer from the schema.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Dense but front-loaded: the core purpose and the run_thronglet return-equivalence come first, followed by the blocking rule, then background, then steer, then the terminal limitation. Every clause carries information; there is no filler or restatement of the name.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 6-parameter mutating tool with nested schema input, no annotations, and no output schema, the description covers the hard parts: concurrency, interrupt semantics, async collection, and the dead-session case. Minor gaps remain — nothing on error/timeout behavior and only a pointer ('same JSON as run_thronglet') for the default return payload — but nothing critical to correct invocation is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3, but the description adds real semantics beyond the schema for two parameters: it explains what background:true actually returns and how to retrieve the result, and clarifies steer's queue-ordering effect relative to pending messages. session_id's provenance is also stated. timeout_s and schema remain schema-only, which keeps this from a 5.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb+resource ('Sends the next message into an earlier session') and immediately anchors it to the sibling it depends on ('session_id from run_thronglet'), which cleanly separates it from run_thronglet (start a session) and wait_thronglet (collect a result). An agent can pick this over its siblings without opening a schema.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit conditional guidance: use background:true when you want an early {session_id, state, queued} return and then wait_thronglet, use steer:true when you must interrupt the in-flight turn, and note that sessions showing accepts_messages: false in list_thronglets cannot receive messages at all. It does not spell out the inverse case (when to prefer run_thronglet over this), so it falls just short of fully explicit alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.