import { CodeTabs } from '../views/docs/CodeTabs';
import { Callout, NextLink, PropTable } from '../views/docs/prose';
export const SEND_INSTRUCTION_SIG_PY = `call.send_instruction(instruction: str) -> None`;

export const SEND_INSTRUCTION_SIG_TS = `await call.sendInstruction(instruction: string): Promise<void>`;

export const SEND_INSTRUCTION_EX_PY = `@agent.on_task_complete("collect_order_id")
def on_order_id_collected(call: guava.Call):
    order = lookup_order(call.get_field("order_id"))
    call.send_instruction(
        f"Order #{order['id']} is {order['status']} "
        f"with an estimated delivery of {order['eta']}. "
        f"Share this with the caller naturally."
    )`;

export const SEND_INSTRUCTION_EX_TS = `agent.onTaskComplete("collect_order_id", async (call: guava.Call) => {
  const order = await lookupOrder(await call.getField("order_id") as string);
  await call.sendInstruction(
    \`Order #\${order.id} is \${order.status} \`
    + \`with an estimated delivery of \${order.eta}. \`
    + \`Share this with the caller naturally.\`
  );
})`;

## send\_instruction()

`call.send_instruction(instruction)` sends a real-time instruction to the agent without changing the current task. Use it for context injection and behavioral nudges.

### Signature

<CodeTabs
  python={{ code: SEND_INSTRUCTION_SIG_PY, filename: "signature" }}
  typescript={{ code: SEND_INSTRUCTION_SIG_TS, filename: "signature" }}
/>

<PropTable rows={[
  {
    name: "instruction",
    type: "str",
    desc: "A real-time instruction to pass to the agent. Does not change the current task.",
  },
]} />

**Return value:** `None` / `Promise<void>`

### Example

<CodeTabs
  python={{ code: SEND_INSTRUCTION_EX_PY, filename: "example.py" }}
  typescript={{ code: SEND_INSTRUCTION_EX_TS, filename: "example.ts" }}
/>

<Callout>
  <span className="text-primary font-semibold">Tip:</span> Unlike `call.set_task()`, `call.send_instruction()` doesn't replace the agent's current objective. Use it to inject context or steer behavior mid-conversation — for example, after a database lookup reveals something the agent should know.
</Callout>

<NextLink section="field" label="Field" />
