sonichi/sutando/skills/task-progress/SKILL.md
task-progress
Sends mid-task progress updates to the channel a task came from (Slack, Discord, or Telegram).
- Source repository stars
- 359
- Declared platforms
- 0
- Static risk flags
- 2
- Last source update
- 2026-07-28
- Source checked
- 2026-07-28
Decision brief
What it does—and where it fits
Sends mid-task progress updates to the channel a task came from (Slack, Discord, or Telegram).
Not for
- Tasks that require unconfirmed production actions or broad system permissions.
- Environments where the pinned source and install steps cannot be inspected.
Compatibility matrix
Platform support, with evidence labels
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
Inspect first. Install second.
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/sonichi/sutando --skill "skills/task-progress"Inspect the Agent Skill "task-progress" from https://github.com/sonichi/sutando/blob/6a8f0fccd32e5aa620a3572c8885544f144bb6fe/skills/task-progress/SKILL.md at commit 6a8f0fccd32e5aa620a3572c8885544f144bb6fe. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
What the source asks the agent to do
- 01
How to use
Read the task file to get source and channelid (or chatid for Telegram), then call immediately after reading the task:
Read the task file to get source and channelid (or chatid for Telegram), then call immediately after reading the task:For research tasks, be specific about what you're doing:For a Slack @mention (threaded reply), add --thread-ts to keep the update in-thread. - 02
Critical rule — if you notify, notify BEFORE any work begins
For tasks that need a progress update, call notify.py as the FIRST action after reading the task — before transcription, web searches, code reads, or any other tool call. The user's first signal that you received a long-running task must be the notification, not silence followed…
For tasks that need a progress update, call notify.py as the FIRST action after reading the task — before transcription, web searches, code reads, or any other tool call. The user's first signal that you received a long… - 03
Critical rule — progress only, never final answers
notify.py is only for short progress/status updates. Do not use it to send the answer, findings, recommendations, completed list, PR summary, or any other final result. Final task delivery must go through the authoritative task result file (results/task-.txt, or the channel-spec…
Read task (sees voice attachment)Call transcribe.py ← 20s of silenceProcess transcript - 04
Voice message tasks (most common failure case)
When a task contains a voice attachment ([File attached: ...]), notify BEFORE calling the transcription script. Transcription takes 10–30 seconds — the user should not wait in silence.
Read task (sees voice attachment)Call transcribe.py ← 20s of silenceProcess transcript - 05
All other long-running tasks
Wrong order: 1. Read task 2. Do research (WebSearch, WebFetch, file reads, analysis...) 3. ← user waits 2 min with no signal 4. Notify "on it" 5. Return result
Read taskDo research (WebSearch, WebFetch, file reads, analysis...)← user waits 2 min with no signal
Permission review
Static risk signals and limitations
Reads files
The documentation asks the agent to read local files, directories, or repositories.
Read the task file to get `source` and `channel_id` (or `chat_id` for Telegram), then callRuns scripts
The documentation asks the agent to run terminal commands or scripts.
python3 $CLAUDE_CONFIG_DIR/skills/task-progress/scripts/notify.py \Runs scripts
The documentation asks the agent to run terminal commands or scripts.
python3 $CLAUDE_CONFIG_DIR/skills/task-progress/scripts/notify.py \Evidence record
Why each signal appears
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 63/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 359 | Source | Repository attention, not individual Skill quality |
| Compatibility | 0 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
Provenance and original SKILL.md
- Repository
- sonichi/sutando
- Skill path
- skills/task-progress/SKILL.md
- Commit
- 6a8f0fccd32e5aa620a3572c8885544f144bb6fe
- License
- MIT
- Collected
- 2026-07-28
- Default branch
- main
View the original SKILL.md
task-progress
Sends mid-task progress updates to the channel a task came from (Slack, Discord, or Telegram).
Critical rule — if you notify, notify BEFORE any work begins
For tasks that need a progress update, call notify.py as the FIRST action after reading the task — before transcription, web searches, code reads, or any other tool call. The user's first signal that you received a long-running task must be the notification, not silence followed by a result minutes later.
Critical rule — progress only, never final answers
notify.py is only for short progress/status updates. Do not use it to send the
answer, findings, recommendations, completed list, PR summary, or any other final result.
Final task delivery must go through the authoritative task result file
(results/task-<id>.txt, or the channel-specific result path named in the task).
Keep notify bodies short: at most 280 characters and 4 non-empty lines. The script rejects longer messages so a final answer cannot accidentally be sent directly and then duplicated by the bridge when it delivers the result file.
If you already sent the final answer through another approved path, write [REPLIED]
to the task result file so the bridge archives the task without sending a duplicate.
Voice message tasks (most common failure case)
When a task contains a voice attachment ([File attached: ...]), notify BEFORE calling the
transcription script. Transcription takes 10–30 seconds — the user should not wait in silence.
Wrong order:
- Read task (sees voice attachment)
- Call transcribe.py ← 20s of silence
- Process transcript
- Return result ← user waited 60+ seconds with no signal
Correct order:
- Read task (sees voice attachment)
- Notify: "Got your voice message, give me a moment." ← user knows within seconds
- Call transcribe.py
- Process — if research needed, notify again before starting
- Return result
All other long-running tasks
Wrong order:
- Read task
- Do research (WebSearch, WebFetch, file reads, analysis...)
- ← user waits 2 min with no signal
- Notify "on it"
- Return result
Correct order:
- Read task
- Notify immediately ← user knows you got it within seconds
- Do research / work
- Notify at key checkpoints
- Return result
When to notify
Notify at task-start when any of these apply:
- Research questions (web search, reading files, looking things up)
- Code changes (editing, writing, testing)
- PRs (opening, reviewing, updating)
- Multi-step analysis (GTM strategy, architecture review, brainstorming)
- Anything that will take more than ~60 seconds before the result appears
No notification needed for:
- A factual answer you can give immediately from memory
- A one-sentence reply
When in doubt, notify. A false positive (notifying for a 30-second task) is far less annoying than silence for 2 minutes on a research task.
How to use
Read the task file to get source and channel_id (or chat_id for Telegram), then call
immediately after reading the task:
python3 $CLAUDE_CONFIG_DIR/skills/task-progress/scripts/notify.py \
--source slack \
--channel-id D0B5L7X2TK2 \
--message "On it — looking into that now. Back in a minute."
For research tasks, be specific about what you're doing:
--message "Researching Trigify setup time now — back in a minute."
For a Slack @mention (threaded reply), add --thread-ts <ts> to keep the update in-thread.
Mid-task checkpoint update:
python3 $CLAUDE_CONFIG_DIR/skills/task-progress/scripts/notify.py \
--source slack \
--channel-id D0B5L7X2TK2 \
--message "Done with the research — writing up the summary now."
Field mapping from task files
| source | field in task file | CLI flag |
|---|---|---|
| slack | channel_id: | --channel-id |
| discord | channel_id: | --channel-id |
| telegram | chat_id: | --chat-id |
Optional for Slack @mentions: reply_thread_ts: → --thread-ts
Supported channels
- Slack —
chat.postMessage, token from$CLAUDE_CONFIG_DIR/channels/slack/.env(SLACK_BOT_TOKEN) - Discord — REST v10 messages, token from
$CLAUDE_CONFIG_DIR/channels/discord/.env(DISCORD_BOT_TOKEN) - Telegram —
sendMessage, token from$CLAUDE_CONFIG_DIR/channels/telegram/.env(TELEGRAM_BOT_TOKEN)
Discord mentions
Discord mention validation is on by default. Use a resolved user snowflake
(<@USER_ID>), not a GitHub-style @handle. Before posting, notify.py
checks each user ID through Discord; after posting, it verifies the response's
mentions array. An unresolved mention exits 1 with an agent-visible error.
For intentional plain-text handles that should not ping anyone, pass
--no-validate-mentions.
Fail-open
A failed send (missing token, network error) prints a warning to stderr and exits 1. Always continue working on the task regardless of exit code. The notification is best-effort — task delivery via the result file is the authoritative path.