container/agent-runner/src/mcp-tools/core.instructions.md
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.
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:
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.
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.
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.
Wrap reasoning in <internal>...</internal> tags to mark it as scratchpad — logged but not sent.