Getting it into your agent
One page per mod, every tool's command on it. A separate URL per tool would split the same page into five that compete with each other.
npx agentmods add skills/jd20030807/touch-grass/touch-grassnpx skills add jd20030807/touch-grass --skill touch-grassgit clone --depth 1 https://github.com/jd20030807/touch-grassWrote this? Show the measurements
A badge with what this costs and how it scanned, read live from this page, so it follows the numbers instead of freezing them. Markdown for a README, HTML for a documentation site or a project page.
[](https://agentmods.dev/skills/jd20030807/touch-grass/touch-grass)<a href="https://agentmods.dev/skills/jd20030807/touch-grass/touch-grass"><img src="https://agentmods.dev/badge/skills/jd20030807/touch-grass/touch-grass.svg" alt="Measured on agentmods" height="20"></a>What it costs to keep this loaded
Counted locally with the o200k_base tokenizer, which is exact for GPT models; Claude uses its own tokenizer and its counts differ. Treat this as one consistent yardstick across the catalogue rather than a bill. Prices are per million input tokens.
| Model | Per session | Once invoked |
|---|---|---|
| Fable 5.1 | $0.00061 | $0.01617 |
| Opus 5 | $0.00030 | $0.00809 |
| Sonnet 5 | $0.00012 | $0.00323 |
| Haiku 4.5 | $0.00006 | $0.00162 |
Grade A, and why
touch-grass scanned grade A with 0 findings against 26 rules in 11 categories — prompt injection, anti-refusal, data exfiltration, privilege escalation, supply chain, agent snooping, system-prompt leakage, SSRF and excessive agency — measured 5d ago.
A static scan of the body, not an audit. Every finding is printed with the line that produced it so you can judge whether it matters here. A mod is markdown that instructs an agent; that is exactly why what it instructs is worth reading.
Nothing flagged
None of the 26 patterns this scan looks for appear in this file: no shell pipes, no recursive deletes, no credential paths, no hidden text, no instruction-override or anti-refusal phrasing, no agent-config snooping. That is not a guarantee, it is the absence of the things that are checkable.
How it starts
The opening of the file, as written. The whole thing — 63 lines — stays where its author put it; the contents beside it link to each section on GitHub.
Touch Grass
Translate the user's request into the bundled touch-grass CLI. Prefer the executable named touch-grass when it is on PATH. Otherwise run node <plugin-root>/bin/touch-grass.mjs, where <plugin-root> is the plugin directory containing this skill under skills/touch-grass/.
At the start of every Touch Grass interaction, run touch-grass welcome. It prints the first-use explanation only once. When it prints text, show that text before the requested outcome. When it prints nothing, continue normally.
Present welcome and settings output verbatim. Do not add companion names, rotation behavior, popup-delivery details, or other product facts to those introductions.
Do not edit ~/.touch-grass/config.json directly. The CLI validates and atomically saves changes.
The product vocabulary is intentionally human. Do not expose implementation labels such as idle reset, delivery, order, activeMs, state files, or raw configuration unless the user explicitly asks for developer diagnostics. When the user asks what they can change, run touch-grass settings and present its natural-language examples rather than a settings inventory.
Each reminder has its own schedule. Do not translate a reminder-specific request into one global interval.
Common requests:
- “Remind me to walk around every 40 minutes” →
touch-grass reminders interval walk 40 - “Remind me to drink water every 45 minutes” →
touch-grass reminders interval water 45 - “Move my snack reminders to 11 AM and 4 PM” →
touch-grass reminders times snack 11:00,16:00 - “My bedtime is 11:30 PM; warn me 30 minutes before” →
touch-grass reminders bedtime 23:30 --wind-down 30 - “Keep quiet from 10 PM to 8 AM” →
touch-grass config set quiet-hours 22:00-08:00 - “Turn snack reminders off” →
touch-grass reminders disable snack - “Turn bedtime reminders back on” →
touch-grass reminders enable bedtime - “Add a breathing reminder every 45 minutes” →
touch-grass reminders add breathing --title "Breathing break" --message "Take five slow breaths." --interval 45 - “Add a breathing reminder using this GIF” → the same command plus
--gif "/absolute/path/breathe.gif". Only pass--gifwhen the user supplies an animation; without one the reminder shows both bundled companions. - “Use my cat Juniper from this folder” →
touch-grass companions add juniper --name "Juniper" --dir "/absolute/path" - “Rotate my cats” →
touch-grass companions use rotate - “What can I customize?” →
touch-grass settings - “Pause reminders for 30 minutes” →
touch-grass snooze 30 - “Don't use Nian” / “only show my own cat” →
touch-grass companions remove nian(bundled cats are hidden, not deleted) - “Bring Nian back” →
touch-grass companions use nian, ortouch-grass companions add nianwith no--dir. A hidden bundled cat is never gone; do not ask the user for animation files to restore one.
When the user says reminders have stopped, are not appearing, or seem broken, run touch-grass doctor first. If popupReady is false, tell them the reminder companion is not running and to open “Touch Grass.app”. If helperVersionMatches is false, tell them the companion is an older build and needs rebuilding with npm run install:macos-helper. Do not guess at causes before running it.
When the user does not dictate the exact banner wording, write --title and --message yourself in the voice of the built-in reminders: a short plain title, then one warm sentence that says what to do. Read presets.json for the house voice rather than inventing a new one, and keep the user's own words when they supplied them.
For a companion folder, require animated .gif or .webp files named water, stretch, snack, walk, eyes, and bedtime. Those six cover every reminder: the bedtime animation serves both the wind-down and bedtime stages, and the snack animation covers lunch and dinner unless the folder also has lunch and dinner files of its own. Do not invent asset paths; inspect the supplied folder first when needed.
What this file has done since we first saw it
Hashed on every crawl. A supply-chain change to an agent config is a question of when, not whether, so the history is kept rather than the latest state alone.
- 5d ago First seen · 63 lines · 61 tokens per session scan A d16444f1b9f5
touch-grass is a skill published in the GitHub repository jd20030807/touch-grass (3 stars, last pushed 9d ago), licensed MIT. It adds 61 tokens to every session and 1,617 once invoked, about $0.0003 per session on Opus 5. A static security scan graded it A with 0 findings. No closer match exists in the catalogue, so it is treated as the original; first seen 2026-08-31.
Other skills, from other repositories
pages
List or open distilled Wenlan pages from Codex by delegating to the local wenlan pages CLI. Invoked as /pages [query].
brief
Read the current Space-owned project Brief from Wenlan for Codex. With an optional topic, appends separately labeled related context from the same Space. Invoked as /brief [topic] when resuming work or asking to catch up.
mailbridge
Work safely with email accounts configured in macOS Mail through the Mailbridge MCP tools. Use when an assistant needs to list Mail accounts or mailboxes, search or read messages and attachments, change read or flagged state, create drafts, preview outbound mail, or explicitly send an approved attachment-free message…
imessage-inbox
Show the inbox/conversation list using imessage-tools.
codex-omnifocus
Use when the user asks Codex to inspect, plan, organize, create, edit, move, tag, review, or clean up OmniFocus tasks/projects through the codex-omnifocus MCP server.
janitor-claude
Audit and clean up a Claude Code working directory or Obsidian vault. Use this skill when the user asks to "clean up my session", "clean this directory", "tidy this up", "audit my CLAUDE.md", "is my CLAUDE.md stale", "scaffold a CLAUDE.md", "find broken wiki-links", "find dead files", "find orphaned notes", "what's…