Install
$ agentstack add skill-dewil-claude-toolkit-redmine-snapshot ✓ scanned · ✓ verified, works with Claude Code, Cursor, and more.
Security review
✓ PassedNo issues found. Passed automated security review. · v0.1.0 How review works →
- ✓ Prompt-injection patterns
- ✓ Secret / credential exfiltration
- ✓ Dangerous shell & filesystem operations
- ✓ Untrusted network calls
- ✓ Known-malicious package signatures
What it can access
- ● Network access Used
- ✓ Filesystem access No
- ● Shell / process execution Used
- ✓ Environment & secrets No
- ✓ Dynamic code execution No
From automated source analysis of v0.1.0. “Used” means the capability is present in the source — more access means more to trust, not that it’s unsafe.
Verified badge
Passed review? Show it. Paste this badge into your README, it links to the public security report.
Reliability & compatibility
Declared compatibility
Compatibility is declared by the source manifest. End-to-end runtime verification is coming, see below.
We're building live execution health for every listing: tool-call success rate, median latency, uptime, and last-checked timestamps, measured, not self-reported. It isn't live yet, so we don't show numbers we can't stand behind.
How agent discovery & health will work →About
redmine-snapshot
Скилл для первой настройки или починки локального snapshot открытых задач из Redmine через REST API. Пара скриптов держит зеркало задач команды на диске - для расчета дельт, вставки сводки в дейлики и работы без живого доступа к web-UI.
Скрипты-эталоны лежат в каноне в scripts/redmine-snapshot.py и scripts/redmine-deltas.py (top-level папка scripts/, не внутри папки скилла). Bootstrap-03-management копирует их в scripts/ в корне проекта - оттуда же, где их ожидает запуск (python3 scripts/redmine-snapshot.py).
Архитектура повторяет telegram-snapshot: общие секреты на устройстве, проектные указатели - в репозитории проекта.
Когда применять
- Пользователь впервые настраивает скрипты
scripts/redmine-snapshot.py/redmine-deltas.pyна новом устройстве. - Подключается новый проект - нужно создать
.redmine-snapshot.jsonи проверить, что общая авторизация на устройстве уже есть. - Первый запуск падает на SSL (
CERTIFICATE_VERIFY_FAILED) - Redmine за корпоративным CA. - Нужно узнать
project_idилиuser_idисполнителей для проектного конфига.
Когда НЕ применять
- Обычный регулярный pull (запуск
redmine-snapshot.pyза свежими задачами) - это просто Bash-команда из шаблона дейлика, отдельный скилл не нужен. - Анализ самих задач - они уже в
_redmine-snapshot.json, читай напрямую.
Алгоритм
Шаг 1. Проверить общую авторизацию устройства
ls ~/.config/redmine-snapshot/
Должен быть auth.json (redmineurl, apikey, опционально use_curl) с правами 600. Если файла нет - идем к шагу 2.
Шаг 2. Получить API-ключ Redmine
API-ключ привязан к аккаунту пользователя:
- Залогиниться в Redmine в браузере.
- Открыть "My account" (
/my/account). - Справа - блок "API access key", нажать "Show". Если ключа нет - "Reset".
- Скопировать ключ (40 hex-символов).
Если блока "API access key" нет - REST API выключен администратором (Administration -> Settings -> API -> "Enable REST web service"). Без него скрипт работать не будет, нужен админ инстанса.
Шаг 3. Заполнить auth.json
mkdir -p ~/.config/redmine-snapshot
chmod 700 ~/.config/redmine-snapshot
Содержимое ~/.config/redmine-snapshot/auth.json (выставить права 600):
{
"redmine_url": "https://redmine.example.com",
"api_key": "",
"use_curl": false
}
redmine_url- базовый URL инстанса без хвостового слеша.use_curl- оставитьfalse. Поднять вtrueтолько если первый pull упал на SSL (см. шаг 5).
chmod 600 ~/.config/redmine-snapshot/auth.json
Шаг 4. Подключить проект (.redmine-snapshot.json)
В корне проекта создать .redmine-snapshot.json:
{
"tasks_root": "tasks",
"project_id": 123,
"users": {
"2551": "Иванов Иван",
"2982": "Петров Петр"
}
}
tasks_root- папка под снапшот относительно корня проекта (дефолтtasks/). Файлы_redmine-snapshot.jsonи_redmine-snapshot.prev.jsonлягут туда.project_id- числовой id проекта. Узнать: открыть проект в web-UI, GET/projects.json(с заголовкомX-Redmine-API-Key), найти проект поidentifier, взять егоid. Идентификатор-строку из URL тоже принимает Redmine, но числовойidнадежнее.users- карта{user_id: "Отображаемое имя"}. Ключи - строки (JSON), значения - как удобно читать в дельтах.user_idисполнителя: открыть его профиль в Redmine, id виден в URL (/users/2551); либо GET/users.json(нужны права видеть пользователей). Имя в значении - произвольная подпись, в API не уходит, только для вывода.
Этот файл - не секрет (ключа в нем нет), можно коммитить в репозиторий проекта.
Шаг 5. Первый запуск и типичные ошибки
cd
python3 scripts/redmine-snapshot.py
Зависимостей нет - чистый stdlib (urllib). На выходе - /_redmine-snapshot.json и построчный отчет по исполнителям.
ssl.SSLCertVerificationError: CERTIFICATE_VERIFY_FAILED. Redmine за корпоративным CA, которого нет в хранилище Python. На macOS системный/корпоративный CA обычно лежит в keychain, откуда его берет curl, но не urllib. Лечение - в ~/.config/redmine-snapshot/auth.json выставить "use_curl": true: скрипт пойдет через curl-subprocess, который этот CA подхватывает. Перезапустить.
401 Unauthorized / пустой ответ. Неверный или отозванный api_key - перевыпустить в "My account" (шаг 2). Проверить, что ключ скопирован целиком (40 символов).
403 Forbidden на конкретном исполнителе. У аккаунта-владельца ключа нет прав видеть задачи этого пользователя в проекте. Скрипт пропускает такого исполнителя (!! в stderr) и продолжает с остальными.
0 задач у всех. Чаще всего неверный project_id или фильтр status_id=open не совпадает с настройкой статусов инстанса. Проверь, что в проекте действительно есть открытые задачи на этих исполнителей, и что project_id числовой и верный.
Шаг 6. Дельты
После второго и последующих запусков рядом появляется _redmine-snapshot.prev.json (архив предыдущего сбора). Блок изменений для дейлика:
python3 scripts/redmine-deltas.py
Выведет markdown "Дельты со вчера": закрытые / новые задачи, смена статуса, смена исполнителя. Ссылки на issue строятся по redmine_url, записанному внутрь снапшота, - секретный auth.json этому скрипту не нужен.
Шаг 7. Апгрейд скриптов в существующем проекте
Скрипты эволюционируют (новые поля, фиксы). Для апгрейда - migrations/sync-from-canon.prompt.md:
- Открой Claude Code в корне проекта.
- Скажи "сделай синк с canon" (или "sync canon").
- Sync найдет, что
scripts/redmine-snapshot.py/redmine-deltas.pyразошлись с каноном, по каждому спросит "обновить?". - Согласишься - локальная копия перезаписывается каноном, executable-бит сохраняется. Проектные правки скрипта (если были) затрутся.
Не копировать скрипты вручную из других проектов - версии могут расходиться.
Жесткие правила
- auth.json - НЕ кладем в проектную папку. Если проектная папка синхронизируется через облако (Yandex.Disk, Dropbox, iCloud), утечка api_key в облако недопустима. Только в
~/.config/redmine-snapshot/(локально на каждом устройстве отдельно). - api_key - секрет. В
.redmine-snapshot.json, который коммитится, ключа быть не должно - толькоproject_id,users,tasks_root. - use_curl - крайняя мера. Дефолт -
urllib. Подниматьuse_curlтолько при реальной SSL-ошибке корпоративного CA, не "на всякий случай".
Связанные файлы
scripts/redmine-snapshot.pyв корне проекта - сбор открытых задач команды в_redmine-snapshot.json(urllib по умолчанию, curl-фолбэк для корпоративного CA, пейджинг по 100).scripts/redmine-deltas.pyв корне проекта - расчет дельт между текущим и предыдущим snapshot для блока в дейликах.~/.config/redmine-snapshot/auth.json- локальные credentials на устройство (redmineurl, apikey, use_curl). Не в проекте..redmine-snapshot.jsonв корне проекта - проектные указатели{tasks_root, project_id, users}. Не секрет.
Source & license
This open-source skill is cataloged on AgentStack and links to its original source — we do not rehost the code.
- Author: dewil
- Source: dewil/claude-toolkit
- License: MIT
Install and usage instructions live in the source repository linked above.
Reviews
No reviews yet, be the first.
Write a review
Versions
- v0.1.0 Imported from the upstream source.