A codeflow
Codeflow streams coding agent sessions (Claude Code, Codex, Gemini CLI, etc.) to Discord or Telegram in real-time. Use when invoking coding agents and wanting transparent, observable dev sessions — no black box. Parses Claude Code's stream-json output into clean formatted messages showing tool calls, file writes, bash commands, and results with zero AI token burn. Use when asked to "stream to Discord", "stream to Telegram", "relay agent output", or "make dev sessions visible".
Codeflow streams coding agent sessions (Claude Code, Codex, Gemini CLI, etc.) to Discord or Telegram in real-time. Use when invoking coding agents and wanting…
- Безопасность 60%
- Качество 40%
- Тесты бонус
Чем это грозит
Находки средней серьёзности: скорее всего скилл честный, но прочитайте, что именно насторожило сканер.
Ниже описан худший случай для этой категории. Здесь находка средней серьёзности: guard увидел признак, но не доказательство.
В файлах лежит чужой ключ или токен. Если он живой, ваш агент начнёт ходить в чужие сервисы от чужого имени; если ключ уже отозван, скрипты скилла просто сломаются. Такой ключ мог попасть в скилл вместе с целым рабочим пространством автора, включая личные данные.
Ключ виден всем, кто скачал скилл, и уже мог быть скопирован ботами, которые сканируют каталоги. Отзовите его сейчас, проверьте счета и логи доступа, а потом перевыпустите.
Как улучшить
- Добавьте evals/evals.json с 4–6 реальными запросами и ожидаемыми ответами: тогда полная проверка использует ваши кейсы, а не черновик модели.
- Добавьте spec.yaml с триггерами и утверждениями (skilltest init): это контракт поведения для CI.
Находки guard · 9
✓ Критических и высоких находок нет
Средние и низкие: 9
-
средняя Секреты в коде
secret-private-keyscripts/_internal/py/redaction.py:53Приватный ключ (определение детектора / чёрного списка; заголовок ключа без тела)"-----BEGIN PRIVATE KEY----- …", out
детектортолько заголовок -
низкая Утечка данных
exfil-webhook-urlreferences/setup.md:44URL вебхука / коллбэка, типичный для эксфильтрации (проверьте адрес) (значение-заглушка)echo "https://discord.com/api/webhooks/<ID>/<TOKEN>" > {baseDir}/scripts/.webhook-urlзаглушка -
низкая Утечка данных
exfil-webhook-urlscripts/_internal/bin/dev-relay.sh:250URL вебхука / коллбэка, типичный для эксфильтрации (проверьте адрес) (хост вендора самого скилла; в кавычках — упоминание, а не команда)echo " Create it: echo 'https://discord.com/api/webhooks/ID/TOKEN' > $ROOT_DIR/.webhook-url" >&2
vendor-hostв кавычках -
низкая Утечка данных
exfil-webhook-urlscripts/_internal/bin/dev-relay.sh:337URL вебхука / коллбэка, типичный для эксфильтрации (проверьте адрес) (хост вендора самого скилла; в кавычках — упоминание, а не команда)url = f"https://api.telegram.org/bot{tok}/getMe"vendor-hostв кавычках -
низкая Утечка данных
exfil-webhook-urlscripts/_internal/bin/parallel-tasks.sh:125URL вебхука / коллбэка, типичный для эксфильтрации (проверьте адрес) (хост вендора самого скилла; в кавычках — упоминание, а не команда)echo " Create it: echo 'https://discord.com/api/webhooks/ID/TOKEN' > $ROOT_DIR/.webhook-url" >&2
vendor-hostв кавычках -
низкая Утечка данных
exfil-webhook-urlscripts/_internal/bin/test-smoke.sh:133URL вебхука / коллбэка, типичный для эксфильтрации (проверьте адрес) (тестовый файл / пример; хост вендора самого скилла; в кавычках — упоминание, а не команда)url = f"https://api.telegram.org/bot{tok}/getMe"тестовый файлvendor-hostв кавычках -
низкая Утечка данных
exfil-webhook-urlscripts/_internal/py/platforms/telegram.py:140URL вебхука / коллбэка, типичный для эксфильтрации (проверьте адрес) (значение-заглушка)url = f"https://api.telegram.org/bot{BOT_TOKEN}/{method}"заглушка -
низкая Утечка данных
exfil-webhook-urlscripts/_internal/py/platforms/telegram.py:196URL вебхука / коллбэка, типичный для эксфильтрации (проверьте адрес) (значение-заглушка)url = f"https://api.telegram.org/bot{BOT_TOKEN}/{method}"заглушка -
низкая Секреты в коде
secret-github-tokenscripts/_internal/py/tests/test_parse_stream_output_mode_and_state_window.py:86Токен GitHub (значение-заглушка)secret = "ghp_…789"
заглушка
Просканировано файлов: 35. Улики замаскированы. Пометки в серых чипах объясняют, почему серьёзность понижена.
Lint
✓ Lint: замечаний нет
Процессная зрелость 64/100
- 0Входы и предусловия. Не сказано, что нужно иметь на входе
- 20Когда включается. Не сказано, при каком запросе скилл включается
- 30Повторный запуск. Изменяющих операций: 10, без проверки текущего состояния
- 60Инструменты и файлы. Используются инструменты (bash, web, python), но во frontmatter они не объявлены
- 60Результат и критерий готовности. Формат результата описан, критерия завершения нет
- 100Шаги. Шагов: 74
- 100Ошибки и развилки. Развилок: 2, есть раздел про ошибки
- 100Согласованность. Имя и обязательные поля на месте
- 100Стоимость исполнения. Тело инструкции 2982 токенов
- 100Отчётность по ходу. Скилл сообщает о ходе работы
- low Разделов верхнего уровня: 10. Похоже на несколько доменов в одном скилле
- low Ответ описан самодельной разметкой (8 тегов): типизированный вызов надёжнее
Всё перечисленное измерено по тексту скилла, а не оценено моделью: цифры проверяемы. Вес параметра тем больше, чем чаще из-за него процесс встаёт.
Сигналы качества
- +4Описание не говорит, когда скилл НЕ применять (ложные срабатывания)
- +1Лицензия не указана
- +2Инструкции на одном языке
- +5В description 4 примера фраз-триггеров в кавычках
- +3Длина description 481 символов: достаточно сигнала, не съедает бюджет
- +4Структура: 17 заголовков
- +3Пошаговые инструкции: 74 пунктов
- +3Формат ответа описан явно
- +4Есть примеры (6 блоков кода)
- +4Справочные файлы упоминаются в инструкциях (3 из 3)
База качества 70; замечания lint вычитаются, сигналы прибавляют до 100. Итог: 96.