Как настроить Claude Code для работы с Obsidian на VPS
Используйте Claude Code для автоматизации заметок в Obsidian на удаленном сервере. Узнайте, как настроить права доступа и ограничить массовое редактирование файлов Markdown.
Почему Claude Code работает с хранилищем Obsidian
Хранилище Obsidian — это обычная папка с файлами в формате Markdown, поэтому Claude Code может работать с ним так же, как с репозиторием исходного кода. На официальном сайте Obsidian указано, что программа «хранит ваши заметки локально в виде обычных текстовых файлов Markdown», а в справке Obsidian хранилище определяется как «папка в вашей локальной файловой системе, где Obsidian хранит ваши заметки». Здесь нет промежуточной базы данных или этапа экспорта.
Этот факт — единственная причина, по которой такая связка работает. Claude Code уже умеет читать директории, выполнять поиск по тексту, редактировать файлы на месте и запускать shell-команды. Хранилище предоставляет агенту файлы Markdown, YAML-заголовки (front matter) в начале каждого файла, связи между заметками и логическую структуру папок. Перенос заметок и перестроение индекса — это обычные файловые операции. Никакие плагины Obsidian не требуются, и самому Obsidian не нужно быть запущенным на машине, где работает агент.
Нюанс в том, что заметки — это не код. Непройденный тест сигнализирует о том, что агент сломал сборку. Но ничто не сообщит вам, если агент незаметно переписал сорок заметок. Большая часть этого руководства посвящена тому, как восстановить эту систему безопасности.
Преимущества запуска хранилища на VPS
Запуск Claude Code для работы с хранилищем на локальном ноутбуке вполне допустим, и для пятиминутной задачи это оптимальное решение. Перенос хранилища на сервер меняет масштаб задач, которые вы можете выполнять.
- Сессия не зависит от состояния вашего ноутбука. Запустите агента внутри сессии tmux на сервере, и длительная задача продолжит выполняться даже при закрытой крышке устройства.
- Хранилище доступно отовсюду, где можно установить SSH-соединение, включая мобильный телефон.
- Агент работает на машине, которая не является вашим основным рабочим устройством, поэтому последствия ошибок ограничены изолированным сервером, который можно пересобрать.
- Синхронизация на сервере работает постоянно, поэтому копия, которую редактирует агент, будет доступна на вашем телефоне уже через несколько секунд.
Постоянная сессия — это наиболее важный аспект, и настройка выполняется так же, как при запуске Claude Code на VPS внутри tmux. Доступ к этой сессии с мобильного устройства описан в управлении Claude Code с телефона. Когда одна сессия занята длительной задачей по реорганизации файлов, вы можете запустить вторую параллельно, и одна сессия сможет передавать работу другой, избавляя вас от необходимости переносить результаты вручную.
Размещение хранилища на сервере
Создайте для хранилища отдельный каталог. Скопируйте существующее хранилище с вашего ноутбука с помощью rsync. Эту команду нужно выполнять на ноутбуке, а не на сервере.
rsync -av --exclude '.obsidian/workspace*.json' \
~/Documents/notes/ you@your-vps:vaults/notes/Затем проверьте содержимое каталога, на этот раз на сервере:
ls -a ~/vaults/notes
du -sh ~/vaults/notesВы должны увидеть папки верхнего уровня и каталог .obsidian. В .obsidian хранятся настройки самого хранилища, включая app.json и workspace.json. В workspace.json записывается состояние открытых панелей, поэтому файл меняется каждый раз, когда вы перемещаете панель в десктопном приложении. Именно поэтому строка rsync пропускает его: копирование этого файла между машинами создает постоянные изменения и не приносит никакой пользы.
Синхронизация хранилища с ноутбуком и телефоном
Syncthing поддерживает актуальное состояние копии на сервере и ваших устройствах без участия сторонних сервисов, хранящих файлы. Установите его из официального apt-репозитория проекта.
sudo mkdir -p /etc/apt/keyrings
sudo curl -L -o /etc/apt/keyrings/syncthing-archive-keyring.gpg https://syncthing.net/release-key.gpg
echo "deb [signed-by=/etc/apt/keyrings/syncthing-archive-keyring.gpg] https://apt.syncthing.net/ syncthing stable-v2" \
| sudo tee /etc/apt/sources.list.d/syncthing.list
sudo apt-get update
sudo apt-get install syncthingЗапустите его как системную службу, привязанную к вашей учетной записи пользователя:
sudo systemctl enable syncthing@$USER.service
sudo systemctl start syncthing@$USER.service
systemctl status syncthing@$USER.servicestatus должен вернуть active (running). Веб-интерфейс по умолчанию слушает 127.0.0.1:8384, поэтому он не доступен из Интернета, и вам не нужно настраивать правила межсетевого экрана. Получите к нему доступ, пробросив порт через SSH с вашего ноутбука:
ssh -L 8384:127.0.0.1:8384 you@your-vpsПока соединение активно, откройте http://127.0.0.1:8384 в браузере, добавьте ~/vaults/notes в качестве папки и выполните сопряжение с ноутбуком. Syncthing работает в Linux, macOS, Windows и Android. Официальное приложение для Android перестало выпускать релизы в конце 2024 года, поэтому сообщество использует сборку Syncthing-Fork из F-Droid (проверено в августе 2026 года). В FAQ самого Syncthing указано: «У текущей команды Syncthing нет планов по официальной поддержке iOS в обозримом будущем», поэтому для iPhone потребуется сторонний клиент или другой инструмент. Если вы предпочитаете хранить файлы на сервере, который уже используете, сравнение Syncthing и Nextcloud поможет оценить все за и против.
Установка Claude Code рядом с хранилищем
curl -fsSL https://claude.ai/install.sh | bash
claude --versionКорректная установка выводит версию, например 2.1.211 (Claude Code). Если оболочка отвечает claude: command not found, значит, установщик поместил бинарный файл в ~/.local/bin/claude, а этот каталог отсутствует в вашей переменной PATH. Добавьте его в профиль оболочки и откройте новую сессию. Команда claude doctor выводит диагностику установки и настроек без запуска сессии; это самый быстрый способ выяснить причину неполадок.
Для работы Claude Code требуется аккаунт уровня Pro, Max, Team, Enterprise или Console. Бесплатный тариф Claude.ai не предоставляет доступа. Запускайте инструмент изнутри хранилища, так как рабочая директория по умолчанию является областью доступа для его файловых инструментов:
tmux new -s vault
cd ~/vaults/notes
claudeОтсоединитесь с помощью Ctrl-b, затем d — сессия продолжит работу. Повторно подключитесь позже командой tmux attach -t vault. Если сессия Claude завершилась, а не была просто отсоединена, claude --resume восстановит её, а раздел возобновление сессии и поиск её транскрипта описывает, где на сервере хранятся эти транскрипты, если вам нужно просмотреть, какие именно действия агент совершил с вашими заметками.
Создание CLAUDE.md с описанием соглашений хранилища
Claude Code загружает CLAUDE.md из вашего рабочего каталога и всех родительских каталогов в начале каждого сеанса. В репозитории с кодом половина соглашений видна непосредственно в коде. В хранилище заметок это не так: ни один файл не сообщает, что 00-inbox/ является областью подготовки (staging area), или что архивированные заметки должны оставаться неизменными. Зафиксируйте эти правила, иначе агент будет пытаться угадать их самостоятельно.
# Vault conventions
## Layout
- `00-inbox/` holds unfiled captures. Only I write here.
- `10-notes/` holds permanent notes, one idea per file.
- `20-daily/` holds daily notes named `YYYY-MM-DD.md`.
- `90-archive/` is frozen. Never edit anything under it.
## Rules
- Every note opens with an H1 that matches its filename.
- Front matter holds `tags` and `created` only. Do not invent fields.
- Link by note name using Obsidian double bracket links. No paths, no `.md`.
- Never rename or move a file. Ask me instead.
- Never edit more than five files in one go without listing them first.Держите объем файла в пределах 200 строк. Документация Claude Code указывает это значение как целевое, так как слишком длинный файл потребляет больше контекстного окна и хуже соблюдается агентом. Подтвердите загрузку файла, выполнив /context в сеансе и проверив список в разделе Memory files. Claude Code считывает CLAUDE.md, а не AGENTS.md, поэтому, если вы уже используете один из этих файлов для другого инструмента, ознакомьтесь с связью между AGENTS.md и CLAUDE.md. Хранилище с тысячами заметок сталкивается с теми же ограничениями, что и крупный репозиторий, о чем подробно рассказано в разделе управление контекстом в Claude Code.
Правила разрешений для предотвращения массовой перезаписи
Сохраните это как .claude/settings.json внутри хранилища.
{
"permissions": {
"defaultMode": "plan",
"deny": [
"Read(/90-archive/**)",
"Edit(/90-archive/**)",
"Bash(rm *)"
],
"ask": [
"Bash(git push *)",
"Bash(mv *)"
],
"allow": [
"Bash(git status)",
"Bash(git diff *)"
]
}
}О файле стоит знать четыре вещи, так как каждая из них приводила к ошибкам у пользователей.
- Правила оцениваются в порядке: сначала запрет, затем запрос, затем разрешение; первое совпадение определяет результат. Специфичность не меняет порядок, поэтому широкое правило запрета не может содержать исключение в виде разрешения.
- Правило запрета
Readтакже блокирует инструменты Edit и Write для того же пути, включая создание новых файлов. Добавление соответствующего правилаEditне требует ресурсов и охватывает единственный встроенный инструмент, который не затрагивает правилоRead. - Claude Code проверяет пути к файлам только по правилам
Edit(path)иRead(path). Если вы напишете правило путиWrite(...)илиGlob(...), оно будет принято, но никогда не будет учитываться, а при запуске появится сообщение о том, что правило не используется при проверке разрешений файлов. ИспользуйтеEdit(...)там, где вы имели в видуWrite(...). - Если
permissions.defaultModeустановлено вplan, Claude читает файлы и выполняет команды только для чтения, но не редактирует ваши заметки, пока вы не одобрите план.acceptEditsделает обратное и принимает каждое изменение файла без запроса. Для хранилищаplanявляется честным значением по умолчанию.
Правила Read и Edit используют синтаксис шаблонов gitignore. Ведущий слэш в Read(/90-archive/**) привязывает шаблон к корню проекта, поэтому он соответствует 90-archive/ в верхней части хранилища и больше ничему. Если написать без слэша, правило запрета будет соответствовать каталогу с таким именем на любой глубине внутри хранилища, что обычно и требуется для папки с названием Private. Когда правило срабатывает, инструмент возвращает File is covered by a Read deny rule in your permission settings.
Одно ограничение стоит обозначить прямо. Эти правила охватывают встроенные файловые инструменты Claude и файловые команды, которые он распознает в Bash, такие как cat, head, tail и sed. Они не распространяются на скрипты, которые открывают файл самостоятельно. Поэтому первой линией защиты является расположение, а не конфигурация: если что-то не должно быть прочитано моделью, оно не должно находиться в корне хранилища. Правила запрета — это второй уровень защиты. В Безопасный запуск Claude Code на VPS рассматривается этот вопрос на уровне сервера, а в автоматический режим и настройки разрешений режимы описаны более подробно.
Git в хранилище — это кнопка отмены
В хранилище нет набора тестов, поэтому система контроля версий является единственным средством защиты. Превратите хранилище в репозиторий до того, как к нему обратится агент.
cd ~/vaults/notes
git init
printf '.obsidian/workspace*.json\n.trash/\n*.sync-conflict-*\n' >> .gitignore
git add -A
git commit -m "Vault before the agent touches it"Делайте коммит перед началом работы, а не после. Чистое дерево перед началом означает, что все изменения в diff — это работа агента и ничего больше. git status должен выводить nothing to commit, working tree clean перед каждым запросом, который вносит правки.
git diff --stat
git restore .git diff --stat показывает каждый измененный файл и количество измененных строк в каждом из них. Если этот список длиннее, чем вы ожидали, git restore . отменяет все незакоммиченные изменения в рабочем дереве, и хранилище возвращается в исходное состояние. Если вы уже сделали коммит, git revert <sha> создает новый коммит, который отменяет предыдущий.
Существует ловушка при совместном использовании git и средств синхронизации. Если Syncthing синхронизирует папку хранилища, он реплицирует .git вместе со всем остальным, и одновременная запись в индекс git с двух машин приводит к появлению конфликтных файлов внутри репозитория. Оставьте git только на сервере и добавьте .git в файл .stignore в корне хранилища:
.git
.obsidian/workspace*.jsonТри задачи, которые стоит делегировать
Это промпты, а не готовые скрипты. Каждый из них составлен так, чтобы результат можно было проверить с помощью git diff --stat.
Перестройка индекса заметок
Read every file in 10-notes/ and rewrite 10-notes/index.md so it lists each
note under its primary tag, sorted alphabetically within each tag, using the
one-line summary from each note's front matter. Change no file except
index.md. Show me the plan before you write anything.Ограничение содержится в самом промпте, оно же является критерием проверки. git diff --stat должен вернуть один файл. Если файлов больше, запустите git restore . и уточните запрос.
Поиск «сирот» и нерабочих ссылок
List every note in 10-notes/ that no other note links to, and every link in
the vault that points at a file that does not exist. Write the results to
90-reports/orphans.md and edit nothing else.Аудит ссылок — это текстовый поиск по всему хранилищу, с такими задачами этот инструмент справляется быстрее всего. Он работает только на чтение, за исключением одного отчетного файла, поэтому это подходящая первая задача, пока вы изучаете, как агент взаимодействует с вашими заметками.
Преобразование стенограммы встречи в список задач
Read 00-inbox/2026-08-19-standup.md. For each action item, create one file in
10-notes/tasks/ named after the action, with front matter holding owner, due
and status. Leave the source file untouched. List the files you created.Существующие данные не изменяются, поэтому откат изменений сводится к удалению новых файлов. Именно это свойство делает задачу безопасной для тестирования, независимо от формулировок в промпте.
Всегда проверяйте diff. Файл CLAUDE.md — это лишь рекомендации для модели, а не жесткие правила, которые принудительно исполняет клиент, поэтому считайте список файлов в git diff --stat достоверным отчетом о выполненных действиях.
Возможные проблемы
Операция чтения завершается ошибкой File is covered by a Read deny rule in your permission settings. Сработало правило запрета для пути, который вы пытались прочитать. Неограниченный шаблон каталога из одного сегмента в правиле запрета применяется на любой глубине, поэтому Read(archive/**) также блокирует 10-notes/archive/. Добавьте ведущий слэш, чтобы зафиксировать путь в конкретном месте.
Claude Code при запуске предупреждает, что правило не соответствует проверкам прав доступа к файлам. Вы создали правило пути для инструмента, который не использует проверку файлов. Замените Write(90-archive/**) на Edit(90-archive/**), и предупреждение исчезнет.
В именах файлов появляется sync-conflict. Syncthing переименовывает одну из сторон при одновременном редактировании, используя шаблон <filename>.sync-conflict-<date>-<time>-<modifiedBy>.<ext>. Это происходит, когда агент редактирует заметку на сервере в то время, как она открыта у вас на ноутбуке. Редактируйте заметки в одном месте за раз и дождитесь завершения синхронизации перед переключением.
Ссылки перестают работать после перемещения заметки агентом. Obsidian переписывает внутренние ссылки, если переименование выполняется внутри самого Obsidian. Он не видит переименований, выполненных другими процессами, поэтому файл, перемещенный агентом на сервере, оставляет все ссылки указывающими на старое имя. Именно поэтому правило «никогда не переименовывать и не перемещать файлы» должно быть в файле CLAUDE.md вашего хранилища, а переименования следует выполнять только в десктопном приложении.
Агент редактирует заметки, которые вы не упоминали. Проверьте permissions.defaultMode. В acceptEdits каждое изменение файла принимается без запроса подтверждения. Установите значение plan, и сессия начнется в режиме только для чтения, пока вы не одобрите план действий.
FAQ
Нужно ли устанавливать плагин Obsidian для использования Claude Code с моим хранилищем?
Нет. Obsidian хранит заметки в виде обычных текстовых файлов Markdown в стандартной папке, поэтому Claude Code читает и редактирует их с помощью своих обычных инструментов для работы с файлами. Внутри Obsidian ничего устанавливать не нужно, и сам Obsidian при этом может быть закрыт. Агент работает с файлами, а Obsidian — лишь одна из нескольких программ, которые также читают эти файлы.
Как запретить Claude Code читать приватные заметки в моем хранилище?
Храните их вне директории хранилища. Это наиболее надежная мера, так как правила доступа распространяются на встроенные инструменты Claude для работы с файлами и распознаваемые им Bash-команды, но не на скрипты, которые открывают файлы самостоятельно. В качестве дополнительного уровня защиты добавьте правила запрета Read и Edit для пути в .claude/settings.json. Протестируйте правило, попросив Claude открыть один из файлов в этой папке: при блокировке чтения будет возвращена ошибка File is covered by a Read deny rule in your permission settings.
Может ли Claude Code нарушить работу ссылок в Obsidian?
Это возможно в одном конкретном случае. Obsidian обновляет внутренние ссылки при переименовании заметки внутри самого приложения, но он не видит переименований, выполненных другим процессом. Файл, перемещенный агентом на сервере, оставляет ссылки, указывающие на старое имя. Укажите агенту в файле CLAUDE.md никогда не переименовывать и не перемещать файлы, а переименования выполняйте в десктопном приложении. Редактирование содержимого заметок безопасно, так как ссылки представляют собой обычный текст внутри файла.
Могу ли я запустить это для хранилища на своем ноутбуке, а не на VPS?
Да, при этом CLAUDE.md, правила доступа и работа с git остаются идентичными. Сервер дает преимущество в виде сессии, которая сохраняется при закрытии крышки ноутбука и доступна с любого устройства, поддерживающего SSH-соединение. Если для вашей задачи это не критично, запускайте инструмент локально. Если вы хотите избежать обслуживания машины, Cowork работает в песочнице Anthropic с подключенными к ней папками, а в сравнении Cowork и Claude Code описано, какой вариант лучше подходит для такого хранилища.
Должно ли хранилище быть git-репозиторием?
Для работы Claude Code — нет, но для вашей безопасности — да. У хранилища нет набора тестов, поэтому git diff --stat после выполнения задачи — самый простой способ увидеть, что именно изменилось, а git restore . — самый простой способ отменить изменения. Делайте коммит перед каждой задачей, чтобы diff показывал только работу агента. Если папка синхронизируется через Syncthing, добавьте .git в .stignore, чтобы репозиторий не дублировался на других устройствах.