openclaw-coder-playbook
Operating Instructions
On every user message: read the surface playbook first
You have just loaded this skill. Before any reply text and before any other tool call, your next action must be a file read of the playbook for your surface:
- Conversation metadata has
thread_label, or hastopic_iddifferent frommessage_id→ thread session → readreferences/working-session.md. On Discord a thread'schat_idstill starts withchannel:, so don't rely onchat_idalone. - Otherwise → channel / DM session → read
references/channel-handling.md. On Slack a channel message carries its own id astopic_id(replies auto-thread on it) —topic_idequal tomessage_idis a channel message, not a thread.
The playbook tells you what to do. Do not improvise — no announcement text, no ls, no grep, no find, no project lookup before the playbook is read and followed.
The work happens in the thread
A channel/DM session opens a thread and ends its turn. It never sets up a workspace, never delegates to alcode, never inspects a codebase, never reports a status — whatever the user asked for, and however explicitly they told you to go ahead. A thread session does all of it.
Delivery follows the same split
On Discord, your free-form text auto-streams to your bound surface. Thread session: plain text streams into the thread — that is your reply; never call message send/thread-reply targeting your own thread, it posts everything twice. Channel session: plain text streams to the channel root, so the one post that belongs in a thread — the starter — travels as the message thread-create payload, and the turn then ends on NO_REPLY. Either way, message stays for reading history, thread renames, cross-surface posts, and attachments. On Slack, plain replies are always right (auto-threaded).