AI Cut My Writing 90% — But I Still Couldn't Leave My Desktop
Hi, I'm Eddy. I'm writing this post from abroad, replying only through Telegram. After two months of running this setup, my conclusion is simple: wire Claude Code to a Telegram bot and you can basically leave your desktop off.
4 sparks that pushed me to build the bot
Bottom line. I hit a moment where being glued to my desktop felt wildly inefficient. Four things had stacked up at once.
- Captcha block — jobs stall. If a Tistory captcha pops up while I'm out, I can't see it. Publishing halts and I have no way to know.
- Overnight failures — caught late. If a job fails at 3am, I only find out the next morning. A whole publish slot, gone.
- Daily review — stuck at the desk. Every publish meant coming back to the desk for review. No freedom to actually leave the house.
- Ideas — lost on the go (biggest). Topics and ops ideas that hit me out walking died as memos. No way to apply them in the moment.
The biggest one for me was #4. I had to break the memo-it-then-forget pattern. When a topic hit me on the street, I wanted to apply it right there.
4 moments where the bot really earns its keep
After installing the bot, four moments delivered the biggest payoff. These four, I'd argue, are the bot's real value.
Moment 1 — Captcha reply: Claude Code ships captcha screenshots to Telegram
When a captcha image lands in Telegram, I reply with the text. The bot auto-fills it and publishing continues. Jobs don't stall even while I'm out. One glance at my phone, one-line reply, done.
🔒 Tistory captcha detected
Time: 2026-05-10 14:22 KST
Post: AI Update — Claude Mythos Preview...
Session: jessyt
[Image attached — captcha]
Reply with just the captcha text.
No reply within 30 min → auto-abort + draft preserved.
Moment 2 — Interview from abroad: I'm writing this very post via Telegram interview
The bot fires 5–6 questions per topic and I just answer. Those answers become a first-person draft as-is.
I've written posts this way from planes, airports, cafés. No desktop needed.
🤖 BOT: Today's topic — "Running 30 Claude Code slash commands"
Q 1/6: What pushed you to make your first slash command?
👤 ME : Got tired of copy-pasting the same prompt every time. Once I
forgot a line and the output came back completely different.
🤖 BOT: Q 2/6: How many are you running now? Any naming convention?
...
Interview answers → first-person draft conversion prompt:
# interview-to-draft.md (Claude Code slash command)
---
description: "Convert Telegram interview answers into a first-person draft"
---
Take the interview Q&A below and write:
1. Don't quote answers verbatim — restructure as first-person flow
2. Match voice.md tone ("I tried ~", "I found ~")
3. CLAUDE.md soft rules — 80%+ first-person / cite external sources
4. Apply blog-style-guide §A~§Q
5. Save HTML to drafts/ + send Telegram preview alert
Moment 3 — Overnight failures: "3am failures? I'm just going to sleep through them."
24/7 alerts don't mean 24/7 response capability — I learned that the hard way.
I decided to just pass on overnight failures. Batch them the next day. Accepting my own limits turned out to be the healthier ops mode.
Moment 4 — Instant feature & quality tweaks: the second an idea hits, I instruct the bot
When Claude Code ships a good new feature, I push the apply-it instruction through Telegram immediately. Post quality? I grade and decide through the bot too.
The biggest shift was getting an apply-on-the-spot cycle. Fastest way I found to escape the procrastinate-then-forget loop.
My alert policy evolved with the scale of automation
When I first installed the bot, every job result became an alert. At the time I was running 7 blogs, and so many alerts came in that I stopped looking altogether.
Now I've trimmed alerts down to just two streams.
- ⚠ Failures batched and reported twice daily. No instant alerts — I'm going to be asleep at 3am anyway.
- 📥 Drafts trigger instant alerts every time. That's the exact moment my action (quality review & publish) is needed.
- ✕ Successes & progress = no alert — "still running fine" pings are just noise.
- 💡 Once I scaled ops down to one focus, alerts stabilized on their own. Cutting automation, I learned, is also a skill.
Alert taxonomy:
| Event | Alert policy | Why |
|---|---|---|
| Job failure (publish) | Batched 2x/day | I sleep at 3am |
| Captcha detected | Instant | Reply needed in 30 min |
| Draft saved | Instant | User review + publish needed |
| Success / progress | No alert | "Still running" = noise |
| Captcha quota near | Instant + pause publish | Block captcha pile-up |
| Session corrupted | Instant + alert channel | Recovery procedure needed |
How my way of working changed
Comparing before and after the bot, the biggest change is being able to operate, write, and decide anywhere, anytime.
Before — desktop hostage (stuck at my desk daily):
- 📍 Back at the desk daily for review
- 🖥 Monitor on 24/7
- ⛔ Captcha mid-outing stalls publishing
- 💭 Ideas become memos, then evaporate
After — bot integrated (phone is enough):
- 📱 Desktop barely opens
- 🌍 Operating & writing from abroad
- ⚡ Quality & ops decisions instant
- 💡 Apply ideas on the spot (no evaporation)
The biggest payoff, for me, is being able to make quality and ops decisions instantly. Turning the monitor off and saving electricity is a side effect at best.
My setup started with one line
I didn't actually write a single line of code myself. I gave Claude Code one line of instruction and it worked.
First prompt: "Make it so I can respond via Telegram!" — the exact one line I first typed.
That's the only line I typed. Claude Code walked me through bot token issuance, then dropped in the alert module, captcha image relay, and the interview polling loop, one step at a time.
#!/usr/bin/env python3
# lib/telegram_send.py — alert module dropped in from the first one-liner
import os, requests
def send(message: str, category: str = "blog") -> None:
token = os.environ['TELEGRAM_BOT_TOKEN']
chat_id_map = {
'blog': os.environ.get('TELEGRAM_CHAT_BLOG'),
'alert': os.environ.get('TELEGRAM_CHAT_ALERT'),
'briefing': os.environ.get('TELEGRAM_CHAT_BRIEFING'),
}
chat_id = chat_id_map.get(category) or os.environ['TELEGRAM_CHAT_ID']
requests.post(
f'https://api.telegram.org/bot{token}/sendMessage',
json={'chat_id': chat_id, 'text': message},
timeout=10,
)
I didn't try to make it perfect from the start. I asked for one missing piece at a time and grew it. Starting with alerts, then captcha replies, interviews, ops instructions — I grew the cycle by iterating.
# lib/telegram_bot.py — publish review reply handling (excerpt)
COMMAND_ROUTER = {
'/publish': handle_publish_now, # Publish immediately
'/skip': handle_skip_draft, # Keep as draft, don't publish
'/cancel': handle_cancel_draft, # Delete post + return to queue
'/schedule': handle_schedule, # /schedule 14:30 → schedule at 14:30
}
def handle_telegram_reply(msg):
"""30-min timeout polling — review possible even while out."""
cmd = msg.get('text', '').strip().split()[0]
handler = COMMAND_ROUTER.get(cmd)
if handler:
return handler(msg)
# No command match → treat as captcha reply
return handle_captcha_answer(msg)
Bot feature evolution timeline:
- Day 1 — Alert module (publish success/failure alerts)
- Day 7 — Captcha image relay + reply handling
- Day 14 — Interview polling loop (5–6 Qs → answers → draft)
- Day 21 — Batched failure reports 2x/day (kill instant alerts)
-
Day 30 — Ops instruction reply handling (
/publish/skip/schedule HH:MM) - Day 45 — Quality review gate (pre-publish card + reply branch)
- Day 60 — Alerts compressed 7 streams → 2 (normalized)
You don't need every feature on day one — that was my biggest lesson.
If I had to land it in one line
Build the environment that lets you work anywhere, anytime — first. That's how your hours getting smarter alongside Claude Code actually grow.
— Eddy, replying from abroad
I realized the desktop isn't something to keep on — turning it off is the right answer. That's how your time working with AI grows.
The essence of automation isn't working 24 hours — it's that work keeps rolling even when you go to sleep.
Sources & References
Tools used
- Claude Code (Opus 4.7) — official AI agent docs
- Telegram Bot API — alerts / captcha relay / interview polling
- BotFather — bot token issuance
Series & Related posts
- 5 real Claude Code tips I learned in 2 months (previous post)
- Context Engineering 3-file pattern — Claude writing in my voice
- How to fully use Claude Code memory
Disclaimer: My personal 2-month ops log. No ads, no affiliates.
Originally published at jessinvestment.com.
Original with full infographics and visual structure: https://jessinvestment.com/how-a-telegram-bot-lets-me-run-my-blog-from-anywhere/

Top comments (0)