Control Troll watches every app linked on the project index site. It checks them every morning, keeps a history, and hands broken apps to a fix agent. The goal is to maintain far more apps than one person could by hand. Healthy apps cost nothing to keep. Only broken ones use Claude.
A GitHub workflow runs between 6:17 and 9:47 Arizona time. GitHub sometimes delays scheduled runs, so it tries every 30 minutes and stops after the first one lands. It also runs any time the check code or a test changes. It reads every vercel.app link on the project index site, so a new app gets watched the day it is linked there.
Each app loads in a headless browser. The check records the status code, load time, and browser errors, and saves a copy of the served code in the snapshots folder. Then it runs that app's tests. The check uses no Claude tokens.
Every app has a spec in the specs folder, a short plain list of what the app is supposed to do. Every app also gets a render test that confirms the page shows text or draws something. Many apps also have feature tests in the tests folder. These click buttons, fill forms, start games, and check the result, like a person using the app. A failing test names the step that broke.
The rules file lists app families that stay separate on purpose. The access terminal pages are one of them.
Green means healthy. Yellow means a feature test failed or the browser logged errors. Red means the app is down. Apps with problems sort to the top.
Every run is folded into history.json, one entry per app per day. A day keeps its worst moment, so an outage at 6 AM still shows even if the app came back by noon. The calendar shows each day with counts of down and failing apps. Tap a day to see which apps and what broke. Each app card has a 30 day strip. Tap a square to see that day.
After each check, every broken app becomes a job in fixes.json, down apps first and the longest broken first. A scheduled Claude task called Control Troll fixer runs at 10:20 each morning. It works up to three jobs, about 15 minutes each. It finds the app's repo, fixes the cause on a branch, and opens a pull request. It never pushes to main and never merges its own work, so nothing goes live until you merge it. If the app works and the test was wrong, it fixes the test instead. Backends with no home page get a health route. Every attempt is written to fix-log.json, and a phone notification arrives when it finishes.
A second scheduled Claude task called Control Troll scribe runs at 11:40 every night. For every repo that changed that day, it writes a changelog entry, publishes a GitHub release, refreshes the README, and fills in the repo description, website link, and topic tags. It then rebuilds the profile page in the sudosilo repo, grouping every app by category with recent changes. Its rules are in scribe/rules.md. It works through older repos 12 a night until every repo has its history written.
check.js runs the morning check. tests.js runs the scripted tests. history.js keeps the daily record. queue.js builds the fix list. status.json holds the latest results. history.json holds the daily record. fixes.json is the job list. fix-log.json records what the fix agent did. apps.json adds apps or health URLs the index site does not link.
A weekly merge pass that finds apps doing the same job and proposes combining them. Phone alerts when an app goes down or recovers. Health routes for every backend. Testing at phone size in Firefox. Daily screenshots. Secret scanning of the saved code. An uptime and speed report card for each app.