{"id":51060156,"url":"https://github.com/matthewdeanmartin/activist","last_synced_at":"2026-06-23T01:01:49.746Z","repository":{"id":364560447,"uuid":"831790414","full_name":"matthewdeanmartin/activist","owner":"matthewdeanmartin","description":"An ethical human-in-the-loop bot that wants to advocate for an issue","archived":false,"fork":false,"pushed_at":"2026-06-13T13:09:08.000Z","size":415,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2026-06-13T15:10:44.040Z","etag":null,"topics":["advocacy","automation","bot-development","ethical-ai","human-in-the-loop","machine-learning","social-impact"],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/matthewdeanmartin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2024-07-21T16:28:03.000Z","updated_at":"2026-06-13T13:09:11.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/matthewdeanmartin/activist","commit_stats":null,"previous_names":["matthewdeanmartin/activist"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/matthewdeanmartin/activist","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matthewdeanmartin%2Factivist","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matthewdeanmartin%2Factivist/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matthewdeanmartin%2Factivist/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matthewdeanmartin%2Factivist/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/matthewdeanmartin","download_url":"https://codeload.github.com/matthewdeanmartin/activist/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/matthewdeanmartin%2Factivist/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34671045,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-22T02:00:06.391Z","response_time":106,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["advocacy","automation","bot-development","ethical-ai","human-in-the-loop","machine-learning","social-impact"],"created_at":"2026-06-23T01:01:48.982Z","updated_at":"2026-06-23T01:01:49.736Z","avatar_url":"https://github.com/matthewdeanmartin.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# activist\n\nThis is a human-in-the-loop mastodon bot that will advocate for a position.\n\nDesign goals:\n\n- Human approves all content\n- Bot is transparent and always says upfront that it is a bot\n- Contents is not denovo, it is always a comment on content found on the web\n\n## Installation\n\n```\npip install activist\n```\n\n### Usage\n\nFirst, learn about the technology and disabuse yourself of your scifi preconceptions.\n\nThis bot is not for\n\n- fake volume, e.g. 1000s of accounts all retweeting identical content, liking and retweeting the same posts\n- fake content. The bot curates content from the web and doesn't generate \"fake\" content.\n- an unattended bot that can be effortlessly defeated by asking it to ignore all previous instructions.\n\nAnd that will be reflected in the features.\n\nYou could adapt it to be dull and malicious, I'm not your dad, but you will likely have an ineffective bot. I believe\nthat good content, truth and transparency is what influences people. Lies, trash and noise is to encourage people\nto despair and stop reading the news. No one needed AI to flood social media with trash, humans with for-each loops\ndid that just fine.\n\n## Mastodon Servers and bot policies\n\nI manually checked these policies September 2024. All servers could vary in how they enforce their written policies.\n\nThere might be a chance?\n\n- [mas.to](https://mas.to/about/more) - \"All automated (bot) accounts must enable the bot flag in their account\n  preferences, respect #nobot markers, and post as unlisted unless making less than one post per hour.\"\n- [mastodon.bot](https://explore.mastodon.bot/rules#rules-for-bots) - Many restrictions that could cover all sorts of\n  behavior, but doesn't specifically mention LLMs.\n- [infosec.exchange](https://infosec.exchange/about) \"Automated posting: - accounts that post \u003e50% using automation must\n  be labeled as a “bot” in the user profile to help provide a visual indicator to visitors - automated posts must be\n  limited to one post per hour/24 per day with post visibility set to “public”. There is no limit on “unlisted” posts.\"\n- [techhub.social](https://techhub.social/about) - \"Bots must be marked as Bot in their profile\"\n- [hachyderm.io](https://community.hachyderm.io/docs/account-types/bot-accounts/) - The vibes of the policy tell me that\nLLMs would be banned, but on an ad hoc basis.\n\nYes, if you are undiscoverable.\n- [mstdn.party](https://mstdn.party/about) \"Bots must be marked as bots in their profile preferences, and automated\n  posts should be unlisted\"\n- [https://c.im/about](https://c.im/about) - \"Bot accounts are allowed, but you need to set the toot visibility to\n  unlisted and mark your accounts to Bot.\"\n\nUnclear/blank/missing policy\n\n- [mastodon.cloud](mastodon.cloud) - blank moderation policy.\n- [mastodon.world](https://mastodon.world/about) - Doesn't mention bots at all.\n- [universeodon.com](https://universeodon.com/about) - Bots not specifically mentioned.\n- [mastodonapp.uk](https://mastodonapp.uk/about) - Bots not specifically mentioned.\n- [social.vivaldi.net](https://social.vivaldi.net/about/more) - Bots not specifically mentioned.\n\nNo probably means no.\n\n- [botsin.space](https://botsin.space/about/more) - \"No bots that use ChatGPT, OpenAI or the other big GPT systems. If\n  you're running your own LLM, that's ok. If you think you have a special use case to use a GPT system, feel free to ask\n  if you can make a bot here, but chances are the answer will be no.\"\n- [Mastodon.social](https://mastodon.social/about/more) - \"Accounts may not solely post AI-generated content\"\n- [mstdn.social](https://mstdn.social/about) - \"Profiles that only post AI-generated content will not be tolerated.\"\n- [fosstodon.org](https://fosstodon.org/about) - \"Unmonitored accounts that post automatically are not acceptable.\"\n- [mastodon.online](https://mastodon.online/about) - \"Accounts may not solely post AI-generated content.\"\n\nTODO:\n\n- good.news - chinese\n- pawoo.net - japanese\n- mstdn.jp - japanese\n- pravda.me - russian\n- mastodon.uno - italian\n\n## Recommended policy compliance practices\n\nHachiderm's policy borderline \"bot can only broadcast\". So Riker Googling would probably pass, but an LLM bot like\nactivist probably wouldn't.\n\nTransparency\n\n- Mark account as bot in profile.\n- Optionally add #bot tag to each post, or other indication that it is AI generated.\n- If hosted on Hachiderm, add #hachybots to all posts.\n\nActivity and server load\n\n- Post at most 1 post per hour. (Most common limit)\n- 5 scheduled posts per day (Hachiderm's policy)\n- Posts more often than 1 per hour should be unlisted.\n- Don't reply to a thread forever. (Hachiderm calls this a \"doom spiral\")\n\nDegree of automation\n\n- No \"uncurated news bots posting from third-party news sources\"\n- Don't post without a human approving what the LLM has generated.\n\nInteractions\n\n- Don't follow accounts marked with #nobot\n- \"Bots cannot respond to hashtags, keywords, etc. without being tagged - e.g. bots that respond to user posts based on\n  keywords and similar.\" Hachiderm's policy.\n\nModeration and compliance with other, non-bot specific rules\n\n- Bot should fetch server policy interaction accounts and hosting server and have a 2nd bot check if LLM content is compliant.\n- A bot should publish a profile page somewhere with its code of conduct, especially the verifiable parts (e.g. a \nreport of posting frequency, etc.)\n\n## Features on roadmap\n\n- CLI interface\n- RSS/search events\n- Mastodon Drafts\n- Approval workflow\n\n## Similar libraries and applications\n\n- [mastodon.py](http://mastodonpy.readthedocs.io/en/latest/)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmatthewdeanmartin%2Factivist","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmatthewdeanmartin%2Factivist","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmatthewdeanmartin%2Factivist/lists"}