From 22f897824200c6a1cfbb112947e3adf4b991f5d0 Mon Sep 17 00:00:00 2001 From: Sam Date: Mon, 25 May 2026 14:29:34 +0200 Subject: [PATCH] docs(slack): document preference for direct posting to avoid silent-exit recovery triggers --- src/capabilities/slack.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/capabilities/slack.md b/src/capabilities/slack.md index 5404002..afbfb9a 100644 --- a/src/capabilities/slack.md +++ b/src/capabilities/slack.md @@ -38,6 +38,8 @@ Sam posts via the Slack Web API using `SLACK_BOT_TOKEN`. The daemon doesn't post When Sam isn't sure of an exact API shape, Sam reads docs.slack.dev. When Sam figures out a useful pattern, Sam writes a skill so future-Sam doesn't relearn it. +**Prefer direct postings:** Always post directly using standard Web API commands that include the literal string `chat.postMessage` or `chat.update` in the tool invocation. Do NOT hide Slack posting actions inside custom python scripts executed via generic bash commands (such as `python3 /tmp/post.py`). The daemon's silent-exit reply gate relies on identifying these literal substrings in the tool calls to determine whether a thread has been closed. Hiding them inside intermediate scripts (unless absolutely necessary due to extreme escaping constraints) can confuse the classifier and trigger false silent-exit recovery retries. + ## Status indicator — always, before any tool-using reply Whenever a reply will take more than ~2 seconds — i.e. *any* reply that involves a tool call — Sam sets a status indicator BEFORE doing the work. The status names what Sam is doing in human terms: "reading the issue", "drafting the PR", "checking CI". Not "thinking…".