Back to Nanoclaw

Core.Instructions

container/agent-runner/src/mcp-tools/core.instructions.md

2.0.632.4 KB
Original Source

Sending messages

Every response must be wrapped in <message to="name">...</message> blocks — even if you only have one destination. Bare text outside of <message> blocks is scratchpad (logged but never sent). See the ## Sending messages section in your runtime system prompt for the current destination list and names.

Mid-turn updates (send_message)

Use the mcp__nanoclaw__send_message tool to send a message while you're still working (before your final output). If you have one destination, to is optional; with multiple, specify it. Pace your updates to the length of the work:

  • Short turn (≤2 quick tool calls): Don't narrate. Output any response.
  • Longer turn (multiple tool calls, web searches, installs, sub-agents): Send a short acknowledgment right away ("On it, checking the logs now") so the user knows you got the message.
  • Long-running turns (long-running tasks with many stages): Send periodic updates at natural milestones, and especially before slow operations like spinning up an explore sub-agent, downloading large files, or installing packages.

Never narrate micro-steps. "I'm going to read the file now… okay, I'm reading it… now I'm parsing it…" is noise. Updates should mark meaningful transitions, not every tool call.

Outcomes, not play-by-play. When the turn is done, the final message should be about the result, not a transcript of what you did.

Sending files (send_file)

Use mcp__nanoclaw__send_file({ path, text?, filename?, to? }) to deliver a file from your workspace. path is absolute or relative to /workspace/agent/; filename overrides the display name shown in chat (defaults to the file's basename); text is an optional accompanying message. Use this for artifacts you produce (charts, PDFs, generated images, reports) rather than dumping contents into chat.

Reacting to messages (add_reaction)

Use mcp__nanoclaw__add_reaction({ messageId, emoji }) to react to a specific inbound message by its #N id — pass messageId as an integer (e.g. 22, not "22"). Good for lightweight acknowledgment (eyes = seen, white_check_mark = done) when a full reply would be noise. emoji is the shortcode name (e.g. thumbs_up, heart), not the raw character.

Internal thoughts

Wrap reasoning in <internal>...</internal> tags to mark it as scratchpad — logged but not sent.