touch-grass
🌿 touch-grass
Плагин для Claude Code, который напоминает вам выйти на улицу.
Учет погоды · учет заката · учет сессий · никогда не прерывает ваш рабочий процесс.
Установка · Как это работает · Инструменты · Конфиденциальность · Сайт
Зачем это нужно
Таймеры Pomodoro прерывают ваш поток. Блоки в календаре игнорируются. Лучшее время, чтобы отойти от редактора — это переменная величина, зависящая от погоды, времени суток, вашей серии и того, чем вы заняты в данный момент — чего не знает обычный интервальный таймер.
Ваш AI-агент для кодинга уже знает, когда вы делаете естественную паузу. Он закончил задачу. Он ждет, пока вы ответите на вопрос. Тесты прошли успешно. Это идеальный момент для напоминания — а не каждые 25 минут ровно.
touch-grass превращает вашего агента в контекстно-зависимого напарника по отдыху. Хук SessionStart передает ему актуальную погоду и время заката в начале каждой сессии. Навык учит его тону «заботливой мамы» (теплый, конкретный, никогда не поучающий). MCP-сервер позволяет ему записывать, когда вы действительно вышли на улицу. Вы сохраняете поток. Он помогает вам оставаться честным с самим собой.
Что он делает
Как таймер Pomodoro, но он знает погоду, время заката и вашу серию кодинга — и общается с вашим AI-агентом, вместо того чтобы прерывать вас.
Хук SessionStart внедряет актуальную погоду, время заката и состояние серии в контекст вашего агента каждый раз, когда начинается сессия Claude Code.
MCP-сервер предоставляет четыре инструмента, которые ваш агент (Claude Code, Cursor, Claude Desktop, Codex) может вызвать по требованию.
Навык учит агента, когда стоит напомнить, когда лучше промолчать и какой тон использовать (заботливый, а не поучающий).
Это замена Pomodoro для Claude Code для тех, кто предпочитает, чтобы агент по кодингу советовал выйти на улицу, а не таймер, блокирующий экран, прерывал рабочий процесс.
Установка
Claude Code (полный функционал — хук + MCP + навык):
/plugin install nalediym/touch-grassВот и все. Откройте новую сессию — хук сработает, контекст будет добавлен, и ваш агент возьмет управление на себя.
git clone https://github.com/nalediym/touch-grass
cd touch-grass/plugin/mcp-server && npm installЗатем добавьте в конфигурацию MCP вашего клиента:
{
"mcpServers": {
"touch-grass": {
"command": "node",
"args": ["/absolute/path/to/touch-grass/plugin/mcp-server/index.mjs"]
}
}
}Вы получите четыре MCP-инструмента, но потеряете хук SessionStart, который специфичен для Claude Code. Ваш агент будет упоминать траву только тогда, когда вы прямо об этом спросите.
Как это работает
flowchart LR
A[Claude Code<br/>session starts] --> B[SessionStart hook fires]
B --> C[ip-api.com<br/>location]
B --> D[open-meteo.com<br/>weather + sunset]
B --> E[~/.touch-grass/state.json<br/>streak + sessions]
C --> F[Context injection]
D --> F
E --> F
F --> G[Agent<br/>decides when to nudge]
G -.calls.-> H[MCP tools]
H --> EПри запуске сессии выполняется скрипт-хук. Он определяет ваше местоположение по публичному IP (кэшируется на 24 часа), получает текущую погоду и время заката с open-meteo, считывает ваш локальный файл серии и синтезирует короткий блок контекста для агента. Агент считывает его и в момент естественной паузы — когда функция готова, баг исправлен или он ждет ввода — мягко подталкивает вас выйти на улицу, используя язык, соответствующий реальным условиям.
Когда вы подтверждаете, что вышли на улицу, агент вызывает log_touch_grass через MCP-сервер, который увеличивает вашу серию в локальном файле состояния.
MCP-инструменты
Инструмент | Цель | Возвращает |
| Погода, температура, минуты до заката и состояние серии пользователя. Контекст для принятия решения. | JSON-блок с |
| Рекомендация случайной активности, взвешенная по времени суток. В «золотой час» дает советы, связанные с закатом. | Обычный текст, например |
| Записывает, что пользователь вышел на улицу. Обновляет серию. Вызывать только после подтверждения. | Подтверждение с новым количеством дней в серии |
| Сырая телеметрия сессий и история серий. | JSON-блок |
Все четыре инструмента доступны для вызова из любого MCP-совместимого агента. В Claude Code агент в основном использует их через контекст, который внедряет хук — вам редко придется вызывать их вручную.
Примеры промптов
Плагин работает фоново, но эти фразы хорошо работают, если вы хотите поднять тему самостоятельно:
"Стоит ли мне выйти на улицу прямо сейчас?"
"Какая у меня серия?"
"Напомни мне выйти на улицу до заката."
"Я только что сходил на прогулку, запиши это."
"Хорошая ли погода на улице?"
Конфиденциальность
Все работает по принципу «локально прежде всего».
Хранится на вашем компьютере:
~/.touch-grass/state.json(серия, количество сессий, дата последнего выхода) и~/.touch-grass/config.json(кэшированное местоположение, порог погоды).Покидает ваш компьютер: ваш публичный IP отправляется на
ip-api.comраз в 24 часа для определения координат города, и эти координаты отправляются наapi.open-meteo.comпри запуске каждой сессии для получения погоды и времени заката.Никогда не покидает ваш компьютер: ваша серия, ваши заметки об активности, ваш график кодинга, ваши промпты, что угодно из вашей сессии Claude Code.
Никаких аккаунтов. Никаких API-ключей. Никакой телеметрии. Никакой аналитики. Никакой авторизации. Если вы хотите полностью отключить доступ к сети, закрепите "location" вручную в ~/.touch-grass/config.json, и поиск по IP никогда не будет выполнен.
Конфигурация
{
"location": {
"lat": 40.7128,
"lon": -74.0060,
"city": "New York",
"timezone": "America/New_York",
"fetchedAt": 9999999999999
},
"niceWeatherThresholdC": 15,
"breakIntervalHours": 2,
"enabled": true,
"customActivities": [
{ "label": "walk to the corner store", "emoji": "🛒" },
{ "label": "sit on the fire escape", "emoji": "🪜" }
]
}Ключ | По умолчанию | Описание |
| auto (ip-api) | Закрепить за конкретным местоположением. Установите |
|
| Температура (°C), ниже которой погода не считается «хорошей». |
|
| После стольких часов непрерывного кодинга напоминания становятся настойчивее. |
|
| Установите |
|
| Замените список активностей по умолчанию своим собственным. Каждая запись — это |
Устранение неполадок
Запустите хук вручную, чтобы убедиться, что он работает:
node plugin/hooks/session-start.mjsВы должны увидеть JSON-объект с hookSpecificOutput.additionalContext, содержащим напоминание. Если additionalContext — пустая строка, хук не смог связаться с ip-api.com или open-meteo.com — проверьте сеть. Если хук работает нормально, но Claude Code его не вызывает, плагин не подключен — перезапустите /plugin install nalediym/touch-grass в новой сессии.
Проверьте ~/.touch-grass/state.json. Поля sessionStart, lastSessionStart и totalCodingSessions обновляются каждый раз при запуске хука. Если sessionStart старше вашего последнего вызова claude, хук не работает.
Да. Закрепите свое местоположение вручную в ~/.touch-grass/config.json:
{
"location": {
"lat": 40.7128,
"lon": -74.0060,
"city": "New York",
"timezone": "America/New_York",
"fetchedAt": 9999999999999
}
}Высокая временная метка fetchedAt предотвращает истечение 24-часового кэша, поэтому поиск по IP никогда не запускается. Погода по-прежнему будет запрашиваться с open-meteo.com.
Установите "enabled": false в ~/.touch-grass/config.json. Хук по-прежнему будет записывать телеметрию сессий, но выдавать пустой контекст, поэтому агент перестанет видеть напоминания.
Удалите или отредактируйте ~/.touch-grass/state.json. Файл будет воссоздан при следующей сессии с настройками по умолчанию.
/plugin uninstall touch-grass
rm -rf ~/.touch-grassДиректория ~/.touch-grass содержит только ваше состояние и кэшированное местоположение — ее можно безопасно удалить.
Разработка
git clone https://github.com/nalediym/touch-grass
cd touch-grass/plugin/mcp-server && npm install
# Test the hook directly (outputs JSON context)
node ../hooks/session-start.mjs
# Test the MCP server with the inspector
npx @modelcontextprotocol/inspector node ./index.mjsТри движущиеся части:
plugin/hooks/session-start.mjs— Node-скрипт без зависимостей. Вызывается Claude Code при запуске сессии. Выводит JSON в stdout.plugin/mcp-server/index.mjs— MCP-сервер. Использует@modelcontextprotocol/sdk. Транспорт stdio.plugin/lib/grass.mjsиplugin/lib/nudge.mjs— общая логика (погода, закат, состояние, текст напоминания).
Хук и MCP-сервер читают один и тот же файл состояния, поэтому они остаются синхронизированными.
Связанные проекты
open-meteo.com — бесплатный API погоды без ключей
ip-api.com — бесплатная геолокация по IP без ключей
Лицензия
MIT · Создано в тени.
Поддержка
touch-grass бесплатен и распространяется по лицензии MIT. Если он помог вам отойти от экрана, подумайте о поддержке:
Поддержать на Polar → — $9 единоразово. Ваше имя попадет в список спонсоров, вы получите приоритет в решении проблем и разблокируете пользовательские списки активностей в конфигурации.
Спонсоры
Будьте первыми. Поддержать на Polar →
Latest Blog Posts
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/nalediym/touch-grass'
If you have feedback or need assistance with the MCP directory API, please join our Discord server