What’s Mankuthimmana Kagga

Mankuthimmana Kagga — often called the Kannada Gita — is a collection of 945 philosophical verses by D.V. Gundappa (DVG). Written in the 1940s, it wrestles with life’s biggest questions with a rare combination of humility and depth. It deserves a wider audience.

KaggaBot

It’s a small automation that does one simple thing: post two verses from the Kagga every day to Mastodon (an ad-free social media platform), automatically, without anyone pressing a button.

What’s in the code

The core of the bot is a Python file containing all the verses of the Kagga, individually scraped and stored as structured data.

A script picks from this collection and formats each verse for posting. GitHub Actions handles the scheduling — no server required, no ongoing cost.

Verses in .py file → bot script → GitHub Actions cron → Mastodon post

The scheduling magic

A GitHub Actions workflow file defines two daily triggers — morning and evening. When the schedule fires, GitHub spins up a clean environment, checks out the code, and runs the bot. That’s the entire pipeline.

Two posts a day, every day

on: schedule: - cron: ‘0 6 * * *’ # morning - cron: ‘0 18 * * *’ # evening No cloud bill. No server to maintain. No babysitting.

Why Mastodon?

Mastodon is open, ad-free, and has a clean API — ideal for a bot that exists purely to share literature, not to game an algorithm. The posts are public and readable by anyone, no account needed.

What Broke

GitHub Actions cron doesn’t mean “exactly at this time.” The workflow is scheduled for 6am and 6pm, but GitHub runs scheduled workflows when capacity is available — which during busy periods can mean a delay of 15–30 minutes. For a poetry bot, that’s fine. For anything time-sensitive, it would be a problem worth knowing about upfront.

The ephemeral environment forgets everything. GitHub Actions spins up a clean runner for each job. There’s no persistent file system between runs. This matters for state tracking — knowing which verse was posted last. The solution is committing the current verse index back to the repository after each run. If you forget this, the bot picks a verse randomly (or always posts verse #1) on every run. First version did exactly that.

GitHub disables scheduled workflows on inactive repos. If a repository has no activity for 60 days, GitHub automatically disables scheduled workflows. The bot will simply stop posting with no notification. The fix is either a periodic commit to keep the repo active, or enabling the workflow manually when it gets disabled. Worth knowing before you rely on it as a daily habit.

The Mastodon API token in GitHub Secrets. Storing the token as a repository secret works, but if the secret is misconfigured (wrong variable name in the workflow YAML) the bot fails silently — no post, no obvious error in the logs unless you know to look at the environment variable step. Naming the secret MASTODON_ACCESS_TOKEN and double-checking the ${{ secrets.MASTODON_ACCESS_TOKEN }} reference in the YAML saved a lot of confusion.

Why this matters

At two posts a day, it takes over a year to work through all 945 verses of Mankuthimmana Kagga.

That’s the right pace for philosophy — slow enough to sit with, regular enough to build a habit. KaggaBot transforms reading a classic Kannada text into a daily practice, entirely on autopilot.

The whole project is open source. If you want to adapt it — for a different text, a different language, a different platform — the bones are all there.

🐘 Read the postsView source code