惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
Tenable Blog
MyScale Blog
MyScale Blog
罗磊的独立博客
Hugging Face - Blog
Hugging Face - Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
爱范儿
爱范儿
博客园 - 司徒正美
D
Darknet – Hacking Tools, Hacker News & Cyber Security
量子位
N
News | PayPal Newsroom
S
Secure Thoughts
酷 壳 – CoolShell
酷 壳 – CoolShell
L
LINUX DO - 热门话题
有赞技术团队
有赞技术团队
V
Visual Studio Blog
T
Tailwind CSS Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Project Zero
Project Zero
B
Blog RSS Feed
J
Java Code Geeks
Google Online Security Blog
Google Online Security Blog
Last Week in AI
Last Week in AI
Cyberwarzone
Cyberwarzone
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
小众软件
小众软件
博客园 - 【当耐特】
Latest news
Latest news
T
Threat Research - Cisco Blogs
aimingoo的专栏
aimingoo的专栏
博客园_首页
博客园 - 三生石上(FineUI控件)
Engineering at Meta
Engineering at Meta
D
Docker
Forbes - Security
Forbes - Security
Help Net Security
Help Net Security
Apple Machine Learning Research
Apple Machine Learning Research
P
Proofpoint News Feed
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Simon Willison's Weblog
Simon Willison's Weblog
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
V2EX - 技术
V2EX - 技术
N
Netflix TechBlog - Medium
The Last Watchdog
The Last Watchdog
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
T
Threatpost
Cloudbric
Cloudbric
T
The Exploit Database - CXSecurity.com
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
博客园 - 叶小钗
Webroot Blog
Webroot Blog

Все публикации подряд на Хабре

Ловим музу за клавиатуру: как айтишнику стать автором Что умеет Midjourney в 2026? Мой немного грустный разбор этого шикарного инструмента Никто не любит писать тесты, но ИИ может исправить это IPv8 выглядит как мечта. Поэтому почти наверняка не взлетит Производители вернули в продажу материнки с DDR3. Что происходит? Управление агентом с телефона через Telegram теперь в KodaCode От координации к лидерству: как меняется роль руководителя разработки Я сделала родителям бизнес вместо пенсии: зарабатываем 70 тысяч, мама не даёт продать В три раза быстрее приемка товара и оптимизация трудозатрат на 73%: как «РСТ-Инвент» помог Gulliver Group ИИ-шечный мир победил? О влиянии искусственного интеллекта на игропром Кремль снижает давление на Телеграмм пока Европа строит интернет по паспорту Как CEO, CTO и CIO за 8 часов собрали ИИ-директора, который умеет держать позицию под давлением Как (не) потерять домен за выходные Вместо 8 разных VPS: как я организовал практику студентам на одном сервере Почему твой Open Source проект не замечают? R&D: искусство управления неопределенностью в разработке AI-дефляция: вакансий для разработчиков больше, а рост зарплат — худший за 15 лет Мы отдали управление роботами OpenClaw. Что из этого вышло Галактический ID: система идентификации для всех форм разумной жизни Шесть основ бизнес-анализа: начинаем с вопроса «Кто в игре?» Код-ревью, в котором дело не в коде Данные переехали. Команда — нет Системной подход к сдаче OSWE в 2025 Почему комната управления реактором покрашена в цвет морской пены 4 YAML-файла вместо PySpark: как аналитикам строить пайплайны без разработчиков LLM-агент для поиска свободных доменов: автоматизируем подбор Когда, зачем и как правильно начинать новую сессию в Claude Code? Как я заставил нейросеть писать макросы для FreeCAD Анатомия ИИ‑агента для подбора персонала. От тысячи резюме к топ‑10 за минуты Опыт разработчика как экономика внимания Автономность как точка невозврата: кто будет субъектом в цифровом будущем Обучение ИИ в «диких» условиях: как рутинные действия превращаются в датасеты Как измерить LLM для задач кибербеза: обзор открытых бенчмарков Где хранить код? Сравнение GitHub, GitLab и Bitbucket Математика объясняет, почему нормальное распределение встречается повсюду Почему ваш FinOps не работает: 12 тезисов от практиков Как подписать проектную документацию УКЭП с использованием бесплатных лицензий Pilot Адаптивное администрирование Sigla Vision Я грузил уран в бочки, а потом 20 лет строил ИТ в атомной отрасли Чем позвонить с Эвереста? История и обзор спутниковой связи. Часть 2 Как языковая модель помогает контролировать качество инструктажей по охране труда в металлургии Как не передать на desktop свой IP в РКН Анатомия SAP Privileges: как устроено управление правами в macOS MoneyDev: Сказка про три главных слова Обновлённый токенизатор видео K-VAE 2.0 от Сбера Как сделать диспетчеризацию дома на 1284 квартиры почти бесплатно Как мы разогнали железную дорогу Мы дали агентам рутину. Теперь надо решить — что делать с освободившимся временем Токсичный контент, промпт-хакинг и защита ИИ — всё о Guardrails для LLM Умный город начинается с точного взгляда: как «Фалькон Тех» меняет пространство к лучшему Навайбкодил приложение для анализа графов Почему Дюну так интересно читать? Упрощаем работу с рутиной или как стать Гендальфом Белым Деконструкция Go: CPU, RAM и что там происходит. Go Assembler база. Часть 1.1 Какие профессии исчезнут из-за ИИ, а какие появятся? И что с этим делать Как мы построили IT-отдел, где хочется расти: архитектурные встречи, прозрачные метрики и книжные подарки Rufler: Делаем из Claude Code автономный рой через один YAML-конфиг Sing-box и белый список приложений Как построить надёжный обмен сообщениями в микросервисах: лучшие практики для enterprise OpenAI строит MLM-пирамиду, а McKinsey и Accenture помогают ей в этом Дом, который не построил Фишер (Часть 2) «Сверхзвуковой математик» против «Вдумчивого логиста»: битва алгоритмов 3D-упаковки Мультимодальные модели – грубый и дорогой инструмент Разговоры ничего не стоят. Код тоже Проверки физических лиц: с кого начнет ФНС Топ-10 бесплатных нейросетей для создания видео в 2026 году Первые слои кода: как наши решения сегодня определяют архитектуру ИИ на десятилетия Разработка нового статического анализатора: PVS-Studio JavaScript Поиск уязвимостей ПО: базовый минимум или роскошный максимум Почему оценка персонала не работает как инструмент управления Как мы разработали ИИ-ассистента и сократили рутину продуктовой команды на 50% Как я ушел из найма, нажарил косточек и продал на маркетплейсах на 168 млн в год Когда 1С:ERP уже внедрена, а нормального производственного плана всё ещё нет Как я сделал Claude мультимодальным, подключив к нему Qwen Omni Как приглашение на вакансию мечты превращается в атаку Infrastructure as Code: философия и лучшие практики IaC Тестируем Yandex Code Assistant на задаче, в которой нужно хранить секреты nxs-universal-chart v3.0: новое поколение универсального Helm-чарта Callback Injection: Техника, которая отправила Microsoft Defender в глухой нокаут «Все идеи на стол»: митап как способ вывести проект из тупика Сегодня я узнал нечто новое о GPU благодаря багу в своей игре Как заставить LLM ̶ ̶г̶а̶л̶л̶ю̶ ̶ эволюционировать Карта событий как фундамент аналитики: практический кейс для E-commerce Что выбрать для AI: x86, ARM или RISC-V? Дайджест железа за март Роль соматических мутаций в развитии аутоиммунных заболеваний: путь к избирательной терапии Mythos от Anthropic — тревожный сигнал для всех, а не только для банков Guardrails для LLM на Java: как приручить промпт‑инъекции и токсичные ответы Green-VLA: как мы собрали VLA-модель для реального антропоморфного робота и не потеряли обобщение Финансовая гонка вооружений: почему умные люди добровольно в ней участвуют Эра ИИ-агентов наступила: выбираем лучшего цифрового сотрудника # Практический опыт внедрения WinCC Redundancy на производственном предприятии Сделал MVP за 3 дня, а потом неделю прикручивал оплату. Оно того стоило? Физика против Маска: почему Starship V3 может оказаться ещё одной катастрофой Нефть Венесуэлы: крупнейшие запасы в мире, но не крупнейшая нефтяная держава JPA 4. Переосмысление Hibernate Почему зеркальная фотокамера Nikon D5 десятилетней давности идеально подошла для миссии «Артемида-2» Проект «Уровень-Спутник» или как мы сделали платформу для гидрологов «Замедлиться, чтобы ускориться»: почему ИИ повышает цену ошибок в требованиях и архитектуре Как с нуля поднять трафик IT-компании на 1657% при бюджете 55 тыс. и выжить Pixel-perfect Downsampling — идеальная отрисовка 50 миллионов точек без потерь
Как я перестал терять скилы в Claude Code и превратил ~/.claude в Git-репозиторий
Prog-Time · 2026-05-04 · via Все публикации подряд на Хабре

Время на прочтение6 мин

Охват и читатели606

В последнее время я активно использую Claude Code в своей разработке. По мере роста числа агентов я столкнулся с неожиданной проблемой — стало сложно синхронизировать их правила между разными системами.

Кроме того, появилось вполне рациональное опасение: в случае блокировки аккаунта можно потерять все наработки — команды, скилы и правила агентов, которые я собирал и оттачивал на протяжении нескольких месяцев. Это подтолкнуло меня к созданию удобной системы хранения конфигурации. Здесь важно зафиксировать простую мысль: директория ~/.claude/ — это такой же код. А код должен храниться в Git.

Так появился claude-config-template — репозиторий-шаблон, в котором живут скилы, агенты, команды, хуки и MCP-конфигурации. При этом сама папка ~/.claude/ собирается из него с помощью симлинков.

Если кратко, этот подход решает сразу три ключевые проблемы:

  • конфигурация хранится в Git и легко переносится на любую машину;

  • команда работает с единым набором агентов и скилов;

  • набор линтеров (в pre-push хуках и GitHub Actions) отлавливает ошибки во frontmatter, YAML и JSON ещё до попадания в main.

Дальше расскажу, как устроен шаблон и почему именно симлинки, а не копирование, оказались оптимальным решением.

Структура репозитория

Если вы хотя бы раз заглядывали в ~/.claude/, структура этого шаблона вас не удивит.

skills/      пользовательские скилы (SKILL.md + ресурсы)
agents/      субагенты (отдельные .md с frontmatter)
commands/    слеш-команды
mcp/         примеры конфигов MCP-серверов
hooks/       PreToolUse / PostToolUse и прочие хуки
docs/        конвенции, гайды, changelog
scripts/     утилиты: линтер, генератор новых скилов
linting/     pre-push-хук и набор проверок

И это сделано намеренно: чем меньше различий между репозиторием и реальной рабочей директорией, тем проще всё переносится и поддерживается.

Например, вы просто кладёте SKILL.md в skills/my-skill/ — и уже через минуту он доступен в Claude Code так, будто всегда там и находился.

Сам репозиторий по умолчанию пустой: никаких готовых скилов или агентов. Есть только agents/example.md — в качестве минимальной заглушки.

По сути, claude-config-template — это ваш персональный конфиг. Вы форкаете его и наполняете под свои задачи.

Использование симлинков

Самое интересное в этом шаблоне — не структура, а способ подключения.

Механика максимально простая:

  1. Клонируете репозиторий

  2. Добавляете правила Claude Code в нужные директории

  3. Запускаете make install

  4. Скрипт создаёт симлинки в ~/.claude/, указывающие на файлы из репозитория

make install        # создаёт ссылки в ~/.claude/
make uninstall      # удаляет только наши ссылки, родные скилы не трогает

Важно: все ваши текущие файлы в ~/.claude/ остаются нетронутыми. make install ничего не копирует и не перезаписывает — он только создаёт ссылки.

Под капотом install.sh проходит по категориям (skills, agents, commands, hooks) и линкует каждый элемент отдельно.

ln -s "$REPO/skills/my-skill" "$CLAUDE_HOME/skills/my-skill"
ln -s "$REPO/agents/example.md" "$CLAUDE_HOME/agents/example.md"

Это принципиальный момент. Если бы мы линковали директории целиком (например, skills/), то затёрли бы встроенные скилы, которые Anthropic добавляет автоматически.
Поэлементная линковка позволяет избежать этого: системные и пользовательские файлы спокойно сосуществуют в одной директории.

Это важно. Если бы мы линковали целиком папку skills/, то затёрли бы встроенные скилы, которые Anthropic кладёт туда сама. Поэлементная линковка оставляет родные файлы в покое — наш репозиторий и встроенные скилы мирно живут в одной директории.

Что это даёт на практике:

  • Изменения подхватываются мгновенно. Поправили SKILL.md в репозитории — Claude Code видит новую версию при следующем запуске. Не нужно копировать, переустанавливать, перезапускать что-то ещё.

  • Один источник правды. Файл лежит в одном месте — в репозитории.

  • Git-история — это история ваших скилов. Можно git blame по агенту, откатиться на старую версию, открыть PR на скил от коллеги.

  • Чистый uninstall. install.sh --uninstall удаляет ровно те ссылки, которые создал, и проверяет, что они до сих пор указывают на репозиторий. Чужие файлы в ~/.claude/ не трогает.

Разумеется, у такого подхода есть и ограничения.

Если вы переместите репозиторий, симлинки «сломаются» — нужно будет снова запустить make install. Кроме того, если поверх симлинка вручную положить реальный файл, скрипт не станет его перезаписывать — он просто пропустит его.

Это осознанный компромисс: лучше ничего не трогать и избежать потери данных, чем случайно затереть чужую работу.

Пример вывода make install:

[skills]
  + /home/me/.claude/skills/my-skill -> /home/me/code/claude-config/skills/my-skill
  = /home/me/.claude/skills/hello-test (already linked)
  ! /home/me/.claude/skills/manual-skill exists and is not a symlink. Skipping.
  • + — создана новая ссылка

  • = — ссылка уже существует

  • ! — файл не наш, пропускаем

Перенос на новую машину

Когда скилы превращаются в обычный Git-репозиторий, перенос на новую машину становится тривиальной задачей:

git clone <repo>
cd <repo>
make install

И всё. Уже через несколько секунд в ~/.claude/ появляются симлинки на ваши скилы, агенты и команды.

Бонусом автоматически подключается и pre-push хук — install.sh создаёт ссылку из linting/pre-push-check.sh в .git/hooks/pre-push.

Если что-то пошло не так, есть команда make doctor. Скрипт scripts/doctor.sh проверяет:

  • на месте ли симлинки

  • установлены ли нужные версии Python, ruff, shfmt и других линтеров

  • корректно ли читаются конфиги

На выходе — понятный отчёт: что работает, а что нужно доустановить или поправить.

Для ускорения работы есть ещё одна удобная команда: make new-skill name=my-skill desc="Что делает"

Она создаёт каркас нового скила с готовым frontmatter. Не нужно вспоминать структуру и обязательные поля — всё уже настроено, и шаблон сразу проходит линтер.

Линтеры и проверки

Скилы и агенты — это всего лишь Markdown с frontmatter. Казалось бы, что тут можно сломать.

На практике — очень многое. Достаточно:

  • опечататься в имени поля

  • забыть description

  • нарушить YAML-синтаксис

И Claude Code просто молча проигнорирует часть файла — без ошибок и предупреждений.

Именно поэтому в шаблоне заложен довольно строгий (и местами параноидальный) набор проверок.

Они запускаются локально (через pre-push хук в linting/pre-push-check.sh) и в CI:

  • lint_skills.py — проверяет frontmatter во всех SKILL.md и agents/*.md

  • lint_commands.py — валидирует структуру commands/task_*.md по контракту

  • shellcheck — анализирует shell-скрипты в linting/

  • markdownlint — следит за стилем Markdown (.markdownlint.yml)

  • yamllint — проверяет YAML (.yamllint.yml)

  • ruff — линтинг Python-скриптов

  • shfmt — форматирование shell-скриптов

  • codespell — ищет опечатки в документации

  • jsonschema — валидирует JSON и схемы .claude/settings*.json

  • gitleaks — проверяет утечки секретов (опционально)

Каждая проверка оформлена как отдельный скрипт в linting/check_scripts/: check_shellcheck_all.sh, check_codespell_all.sh и так далее.

pre-push хук просто запускает их последовательно, а CI использует те же самые скрипты в виде отдельных джоб.

В результате — один источник правды для локальной разработки и для GitHub Actions.

Когда подход подойдёт, а когда нет

Я не считаю этот шаблон серебряной пулей или обязательным стандартом. Это просто инструмент, который хорошо решает конкретный класс задач — но не все подряд.

Он действительно начинает приносить пользу, если:

  • у вас больше пары скилов или агентов, и вы хотите их системно хранить и развивать

  • вы работаете с Claude Code на нескольких машинах и устали вручную переносить конфиги

  • вам важно делиться наработками с командой — через pull request’ы, с историей изменений и обсуждением

  • вы периодически переустанавливаете систему, меняете аккаунты или переключаетесь между устройствами

В этих сценариях Git + симлинки дают предсказуемость: конфигурация всегда под рукой, изменения отслеживаются, а окружение легко восстановить.

С другой стороны, этот подход может быть избыточным.

Если у вас:

  • один-два простых скила

  • работа только с одной машины

  • и нет потребности в версионировании

— то обычный файл в ~/.claude/skills/ решит задачу быстрее и проще.

Не стоит поднимать инфраструктуру ради инфраструктуры. Если всё помещается в один SKILL.md, Git-репозиторий и набор линтеров, скорее всего, только усложнят жизнь, а не упростят её.

Итог

В итоге получился не просто шаблон, а удобный способ навести порядок в своей работе с Claude Code: хранить конфигурацию как код, контролировать изменения и не зависеть от конкретной машины или аккаунта.

Если вам откликнулась эта идея — поддержите проект ⭐️ на GitHub. Это действительно помогает другим разработчикам находить его и экономить время.

Важно: этот шаблон задумывался не как готовое решение «из коробки», а как отправная точка. Форкните репозиторий, адаптируйте под себя и соберите свой собственный конфиг — такой, который идеально ложится в ваш процесс.

Если захотите поучаствовать в развитии — буду рад: багрепорты, идеи для новых проверок и pull request’ы с улучшениями только приветствуются. Процесс описан в CONTRIBUTING.md.