Make it yours
Your agent's the brain. touchgrass is the body.
Your bot runs from your own copy of the code. So you don't wait for us to add a feature: ask Claude Code or Codex to build it, look it over, ship it. New moves, new lines, whole new commands.
Optional. The bot works fine without any of this.
> add kettlebell swings, and when I skip one, roast me like my PE teacher
Added "kettlebell swings" (5 / 10 / 20 reps) to src/custom/index.ts
Added 3 skip lines for your personality.
Ship it? (y/n)
> y
Pushed. Your bot rebuilds in ~1 min.
ᕦ[▮_▮]ᕤ 10 kettlebell swings. Don't make me get the whistle.
Things to ask for
Copy one, paste it into your agent.
custom = a small edit to your one personal file, safe across updates. code = a real new feature, your agent writes it.
> add kettlebell swings: 5, 10 or 20 reps depending on my level
> only give me moves I can do at my desk, no burpees
> when I skip a nudge, have Moss answer like a disappointed football coach
> start me on max 6 nudges a day with 40 minutes between them
> add a /stretch command that walks me through a 3-step neck stretch with a timer
> every Friday at 5pm, send me my week in one line and a joke
> log my walks when I send a screenshot of my step count
> show me what you changed, then deploy it
How it works
Four steps, mostly talking.
- [▮_▮]1. Open your copy
The Deploy button made you your own copy of touchgrass on GitHub. Clone it and open Claude Code or Codex in that folder.
- [▮o▮]!2. Say what you want
Plain words. "Gentler nudges after 9pm." "Add a stretch move." Your agent reads the code and makes the change.
- [¬_¬]3. Check it
Ask it to show you the change before it ships. It is your bot and your Cloudflare account.
- [▮‿▮] ✓4. Ship it
Push to GitHub and your bot rebuilds itself in about a minute. Didn't like it? One command puts the old version back.
Small tweaks live in one file meant just for you, bot/src/custom/index.ts:
moves (add exercises, or replaceMoves to swap the whole list),
lines (your own words per personality and message) and defaults (starting settings;
anything you set in /settings still wins). Every setting is defined in bot/src/env.ts,
so your agent knows exactly what can change. It's all open source (MIT): your agent can change anything else too.
Before you start
Set this up once.
The Deploy button put it in your GitHub account. Clone it:
git clone https://github.com/<you>/touchgrass
Easiest: push to GitHub and your copy rebuilds itself. Or let your agent deploy directly: run
npx wrangler login once, or add Cloudflare's connector in Claude. Give it the one Cloudflare
account your bot lives on, nothing more.
Your bot token and keys are already saved as secrets on Cloudflare. Your agent never needs them. Don't paste them into a chat, and never commit them to git.
FAQ
Do I need Claude Code or Codex?
No. /settings in Telegram covers the basics: name, personality, hours, timezone, exercises. This is for everything past that.
Do I have to know how to code?
No. You describe the change, your agent writes it. It helps to read the summary it gives you before you ship.
Will updates wipe my changes?
Not if they live in bot/src/custom/. We never touch that folder, so pulling a new touchgrass release stays a clean merge. Bigger changes elsewhere are fine too, they just need a merge when you update.
Does it cost anything?
We charge nothing. Your agent subscription is your own. If a change adds AI calls (more photo checks, say), that uses Cloudflare's free daily AI allowance on your account, and past it Cloudflare bills you, not us.
Can my agent break the bot?
It can ship whatever you approve, so look before you ship. If something goes wrong, npx wrangler rollback puts the previous version back in seconds.
Does my agent see my Telegram token?
No. Your bot token and keys are stored as secrets on your Cloudflare account. Your agent can redeploy without ever reading them. Never paste them into a chat.
Does this work with sudo and root?
Yes. Your licence file stays in your copy, so every rebuild keeps the paid features. Your changes sit on top.
Built something good? Show us: open a discussion on GitHub or tag #sudotouchgrass.