{"id":51083059,"url":"https://github.com/adityaarsharma/perch","last_synced_at":"2026-06-23T20:01:29.214Z","repository":{"id":346131772,"uuid":"1188617389","full_name":"adityaarsharma/perch","owner":"adityaarsharma","description":"Perch — Telegram bot + Claude Code plugin for RunCloud server management. Servers under one wing. Always free.","archived":false,"fork":false,"pushed_at":"2026-05-04T11:35:01.000Z","size":592,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-04T13:31:55.669Z","etag":null,"topics":["claude","claude-code","claude-desktop","devops","linux-server","mcp","mcp-server","model-context-protocol","nginx","runcloud","runcloud-api","self-healing","server-automation","server-health","server-management","server-monitoring","ssh","telegram-bot","typescript","wordpress"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/adityaarsharma.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2026-03-22T10:47:54.000Z","updated_at":"2026-05-04T11:35:04.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/adityaarsharma/perch","commit_stats":null,"previous_names":["adityaarsharma/runcloud-server-management-mcp","adityaarsharma/perch"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/adityaarsharma/perch","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adityaarsharma%2Fperch","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adityaarsharma%2Fperch/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adityaarsharma%2Fperch/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adityaarsharma%2Fperch/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/adityaarsharma","download_url":"https://codeload.github.com/adityaarsharma/perch/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/adityaarsharma%2Fperch/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34704748,"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-23T02:00:07.161Z","response_time":65,"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":["claude","claude-code","claude-desktop","devops","linux-server","mcp","mcp-server","model-context-protocol","nginx","runcloud","runcloud-api","self-healing","server-automation","server-health","server-management","server-monitoring","ssh","telegram-bot","typescript","wordpress"],"created_at":"2026-06-23T20:01:27.895Z","updated_at":"2026-06-23T20:01:29.213Z","avatar_url":"https://github.com/adityaarsharma.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# 🪶 Perch\n\n### The intelligence layer for your servers.\n\n**An AI-native, self-hosted, self-learning brain that watches every server you run, diagnoses what breaks in plain English, and lives wherever you want — Claude Code, Telegram, Slack, your terminal, anywhere that speaks HTTP.**\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow?style=flat-square)](LICENSE)\n[![Always Free](https://img.shields.io/badge/Always-Free-brightgreen?style=flat-square)]()\n[![No Per-Server Pricing](https://img.shields.io/badge/No%20Per--Server-Tax-blue?style=flat-square)]()\n[![RunCloud](https://img.shields.io/badge/RunCloud-API%20v3-0066CC?style=flat-square)](https://runcloud.io)\n[![MCP](https://img.shields.io/badge/Claude%20Code-Native-blueviolet?style=flat-square)](https://modelcontextprotocol.io)\n[![WordPress](https://img.shields.io/badge/WordPress-Expert%20Module-21759B?style=flat-square)](https://wordpress.org)\n\n[Install](#install-in-5-minutes) · [Why Perch](#why-this-exists) · [Comparison](#the-real-hosting-market) · [Commands](#the-perch-experience) · [Architecture](#whats-inside)\n\n\u003c/div\u003e\n\n---\n\n## The 30-Second Pitch\n\n- **AI-native, not retrofitted.** Built around Claude Code from day one. Your AI talks to your servers via 150+ MCP tools.\n- **Self-hosted intelligence.** Every server, every webapp, every problem, every fix — saved in a local SQLite brain on your hardware. Nobody else owns your operational history.\n- **Plain-English diagnosis.** Not \"ERROR 500.\" Try: *\"Plugin X just got updated and now conflicts with Theme Y. I deactivated X and the site is back up.\"*\n- **Connectors, not lock-in.** Telegram. Slack. Webhooks. Email. CLI. Anything that talks HTTP. Pick one or use them all.\n- **Free forever, no per-server tax.** Run it on 1 VPS or 100. Same price: zero. No \"Pro tier,\" no license keys, no rug-pull.\n\n---\n\n## Why This Exists\n\nIn April 2026, you have four ways to host a serious website. All of them are bad:\n\n### The Real Hosting Market\n\n| Option | Real cost / site | What's broken |\n|--------|------------------|---------------|\n| **GoDaddy / Bluehost** | $7.99–$25/mo | Oversold shared servers. Support reads scripts. Up-charges for SSL, backups, speed. Stuck in 2010. |\n| **Cloudways** | $14–$30/mo | [220% markup over raw DigitalOcean/Vultr](https://onlinemediamasters.com/cloudways-review/). No root access. Locked to 5 cloud providers. Bills jump when scaling RAM you don't need. |\n| **Kinsta** | $35–$115/mo | Beautiful UX. Container isolation. But $35/site adds up fast — and [no email hosting included](https://divicake.com/blog/kinsta-performance-and-pricing/). Vendor lock-in. |\n| **SiteGround** | $2.99–$15/mo | Cheap to start, oversells, slows you down at scale. Renewal pricing 3x intro. |\n| **Raw VPS** (Hetzner / DigitalOcean / Linode) | $4–$10/mo | Total power. Zero guardrails. One typo = client site gone. You're the sysadmin now. |\n| **RunCloud + your VPS** | $8–$15/mo + $4 VPS | The smart pick. GUI on top of any cloud. Root access. Auto-backups. But it *manages* — it doesn't *watch*, *diagnose*, or *heal*. |\n\n**Most people pick GoDaddy because they don't know better.** The smart ones pick Cloudways for ease — and pay 3x what they should. The rest go raw VPS and become accidental sysadmins.\n\n[**RunCloud**](https://runcloud.io) is genuinely the smartest piece of infrastructure no one's heard of:\n\n- **Provider freedom** — works with any cloud (Hetzner, DigitalOcean, AWS, Vultr, Linode, your own metal). Cloudways locks you to 5.\n- **You keep root.** Cloudways doesn't give you root. RunCloud does.\n- **Stop paying anytime.** Your VPS keeps running with all your sites. Cloudways = pay or lose everything.\n- **Stack flexibility.** Pure NGINX or hybrid Apache+NGINX. Your call. Cloudways = take what they give you.\n- **Real isolation.** Each web app runs as its own system user. Mistakes stay scoped.\n- **$8/mo flat for the panel.** No per-site tax.\n\nSo: **Hetzner CX21 ($5/mo) + RunCloud ($8/mo) = $13/mo total.** You get the equivalent of Kinsta ($35–$115) with WordPress + Laravel + Node + n8n + anything else on the same box. Your data on your hardware.\n\nThe catch? RunCloud is a **management panel**. It does not watch. It does not diagnose. It does not heal. It does not learn.\n\n**That's where Perch lives.**\n\n---\n\n## What No One Else Is Doing\n\n| | GoDaddy / Bluehost | Cloudways | Kinsta | SiteGround | RunCloud (alone) | **RunCloud + Perch** |\n|---|:---:|:---:|:---:|:---:|:---:|:---:|\n| Provider freedom | ❌ | Limited | ❌ | ❌ | ✅ | ✅ |\n| Root access | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ |\n| Run any stack (WP+Node+n8n) | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ |\n| **AI-native (Claude Code)** | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ |\n| **Self-learning brain** | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ |\n| **Plain-English diagnosis** | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ |\n| **WordPress deep-audit (DB, plugins, CVE, perf)** | Partial | Partial | ✅ | Partial | ❌ | ✅ |\n| **Auto-fix safe issues** | Limited | Limited | ✅ | Limited | ❌ | ✅ |\n| **Multi-channel alerts (Telegram/Slack/HTTP)** | ❌ | Email only | Email only | Email only | Email only | ✅ |\n| Cost (1 site) | $7.99 | $14 | $35 | $2.99 | $13 | **$13** |\n| Cost (10 sites) | $80+ | $140+ | $350+ | Plan upgrade | $13 | **$13** |\n| Cost (50 sites) | Unrealistic | $700+ | $1,750+ | Unrealistic | $25 | **$25** |\n| Lock-in | High | High | High | Medium | None | None |\n| Owns your data | They do | They do | They do | They do | You | **You** |\n\n**The thing nobody is shipping:** an open-source, AI-native intelligence layer that runs on your own server, learns your stack over time, talks to you in any channel you want, and never sends you a renewal email. That's Perch.\n\n---\n\n## The Perch Experience\n\n### From Claude Code\n\n```\nYou:    /perch wp audit mysite.com\nPerch:  📊 Running full audit on mysite.com...\n\n        Database: 8.4MB autoload (urgent — should be \u003c1MB)\n                  Top offender: elementor_data 2.1MB\n                  47 expired transients (1.8MB recoverable)\n\n        Plugins:  34 active, 6 need updates, 2 vulnerable\n                  🔴 Contact Form 7 v5.7 — CVE-2024-XXXX (CVSS 8.1)\n\n        Security: 71/100 (Grade C)\n                  Admin username is \"admin\" — change it\n                  xmlrpc.php is publicly accessible\n\n        Backup:   Last run 14h ago, 2.1GB to S3 ✓\n                  But: DB backup missing for 3 days (mysqldump connection error)\n\n        Want me to fix the safe stuff? (transients, sessions, CF7 update, DB backup creds)\n```\n\n### From Telegram\n\n```\n🪶 nginx had a moment on production-1\n\nI checked — config snippet added via RunCloud has a typo on line 47.\nI've restarted nginx-rc and the site is back up (took 8 seconds).\n\nWant me to fix that snippet so this doesn't happen again?\n\n[✅ Yes, fix it]  [📄 Show me]  [🔇 Not now]\n```\n\n### From your shell\n\n```bash\n$ perch status\nproduction-1   ✅  RAM 42%  Disk 67%  Load 0.21\nstaging-1      ⚠️  RAM 91%  Disk 78%  Load 0.84  ← memory pressure\ndev            ✅  RAM 33%  Disk 12%  Load 0.05\n\n$ perch wp errors mysite.com\nLikely cause: Plugin \"my-plugin\" updated 2h ago, now conflicts with theme.\nSuggested fix: wp plugin deactivate my-plugin --path=/home/user/public_html\nFixable by Perch: yes\n\n$ perch fix mysite.com\n[asks for confirmation, runs the fix, reports back]\n```\n\nSame intelligence. Three different surfaces. **Connectors are interchangeable.** Use what fits your day.\n\n---\n\n## Architecture\n\n```\n┌──────────────────────────────────────────────────────────────────┐\n│                    CONNECTORS (your choice)                      │\n│  Claude Code MCP · Telegram · Slack · HTTP API · CLI · webhook   │\n└──────────────────────────────────────────────────────────────────┘\n                              ▲\n                              │ same intelligence, multiple surfaces\n                              ▼\n┌──────────────────────────────────────────────────────────────────┐\n│                       PERCH CORE                                 │\n│  ┌──────────────┐  ┌──────────────┐  ┌──────────────────┐        │\n│  │   Brain      │  │   Gateway    │  │   SSH + RunCloud │        │\n│  │   SQLite KB  │  │   Alerts     │  │   API clients    │        │\n│  │   Self-learn │  │   Friendly   │  │   Safe execution │        │\n│  └──────────────┘  └──────────────┘  └──────────────────┘        │\n│                                                                  │\n│  ┌──────────────────────────────────────────────────────┐        │\n│  │            INTELLIGENCE MODULES                      │        │\n│  │  WordPress · Watcher · Diagnostician · Healer        │        │\n│  │  (DB · Plugins · Security · Backup · Images ·        │        │\n│  │   Performance · Errors · White Screen Diagnosis)     │        │\n│  └──────────────────────────────────────────────────────┘        │\n└──────────────────────────────────────────────────────────────────┘\n                              ▲\n                              │ SSH + RunCloud API v3\n                              ▼\n┌──────────────────────────────────────────────────────────────────┐\n│              YOUR INFRASTRUCTURE (you own everything)            │\n│  Hetzner · DigitalOcean · AWS · Vultr · Linode · bare metal      │\n│  WordPress · Laravel · Node · n8n · Python · static · anything   │\n└──────────────────────────────────────────────────────────────────┘\n```\n\nThe brain is the moat. Every audit, every fix, every problem gets logged to a SQLite database on **your** server. Over weeks, Perch learns your stack — what's normal for *your* memory baseline, which plugins are problem children on *your* PHP version, what fixes actually worked when *your* nginx crashed at 2am.\n\nNobody else has this data. Not RunCloud. Not Cloudways. Not Aditya. **You.**\n\n---\n\n## Install in 5 Minutes\n\n### Path A — As a Claude Code MCP (recommended)\n\nGet every `/perch_*` tool inside your Claude Code sessions.\n\n```bash\ngit clone https://github.com/adityaarsharma/perch\ncd perch\nnpm install \u0026\u0026 npm run build\n```\n\nAdd to `~/.claude/claude_desktop_config.json`:\n\n```json\n{\n  \"mcpServers\": {\n    \"perch\": {\n      \"command\": \"node\",\n      \"args\": [\"/absolute/path/to/perch/dist/index.js\"],\n      \"env\": {\n        \"RUNCLOUD_API_KEY\": \"your-runcloud-api-key\"\n      }\n    }\n  }\n}\n```\n\nRestart Claude Code. Type `/perch_brain` to verify. Done.\n\n### Path B — Connectors (Telegram / Slack / HTTP)\n\nRun on the server you want to watch. Provides 24/7 alerts when you're away from Claude Code.\n\n```bash\nssh root@your-server\ngit clone https://github.com/adityaarsharma/perch /opt/perch\ncd /opt/perch/telegram-bot\ncp config.example.env .env\n# Edit .env with your bot token, chat ID, fix-server token\n./setup.sh\n```\n\nThe setup wizard walks you through it. Telegram bot ready in under 5 minutes. (Slack guide: [docs/slack.md](docs/slack.md). Webhook + custom connector: [docs/install.md](docs/install.md).)\n\n### Path C — Both (the agency setup)\n\nClaude Code for deep work. Connector for 4am pages. Same brain, same data, same intelligence, two surfaces.\n\n**Full install guide with screenshots and troubleshooting → [docs/install.md](docs/install.md)**\n\n---\n\n## What's Inside\n\n\u003e **HTTP API tool catalog:** every tool exposed by `perch-api` over HTTP is documented in [`docs/api-tools.md`](./docs/api-tools.md) — 55 tools (brain · conversation · read-only diagnostics · WordPress audit · WordPress mutating · vault · SSH primitives), with required args, mutating-vs-not flags, and which scripts they shell out to.\n\n```\nperch/\n├── src/\n│   ├── index.ts                   ← MCP server (150+ tools — RunCloud + Perch)\n│   ├── core/\n│   │   ├── brain.ts               ← SQLite knowledge base (your data, your server)\n│   │   ├── gateway.ts             ← Alert formatter (friendly tone, multi-channel)\n│   │   └── ssh-enhanced.ts        ← SSH with password + private key + WP-CLI helper\n│   └── modules/\n│       └── wordpress/             ← The WordPress Audit Modules\n│           ├── db.ts              ← Autoload audit, transient cleanup, orphan detection\n│           ├── plugins.ts         ← Plugin audit + Wordfence Intelligence CVE scan\n│           ├── security.ts        ← 12-check hardening, scored 0–100\n│           ├── backup.ts          ← Backup health, last run age, destination check\n│           ├── images.ts          ← CLI image optimization (jpegoptim/optipng/cwebp)\n│           ├── perf.ts            ← Performance snapshot (cache, cron, PHP, TTFB)\n│           └── errors.ts          ← Error diagnosis + white screen root cause\n│\n├── telegram-bot/                  ← Telegram connector (one of many)\n│   ├── bot.py                     ← Polling bot with inline keyboards\n│   ├── fix-server.py              ← Local HTTP API (127.0.0.1 only)\n│   ├── monitor.sh                 ← Cron-based health alerting\n│   ├── setup.sh                   ← Interactive setup wizard\n│   └── scripts/                   ← Shell scripts for each fix action\n│\n├── docs/\n│   ├── runcloud.md                ← Full RunCloud server reference (nginx-rc, paths, gotchas)\n│   ├── install.md                 ← Setup guides — MCP, connectors, both\n│   ├── telegram.md                ← Telegram connector deep-dive\n│   ├── slack.md                   ← Slack connector setup\n│   └── safety.md                  ← What Perch will and won't do (read this)\n│\n└── README.md                      ← You are here\n```\n\n---\n\n## WordPress Audit Modules — what Perch sees on your sites\n\nNo plugin needed on the WordPress side. Everything runs via SSH and WP-CLI. RunCloud-aware (knows about `nginx-rc`, `/etc/nginx-rc/`, per-app users at `/home/{user}/webapps/`).\n\n| Module | Catches |\n|--------|---------|\n| **Database** | Autoload bloat (Elementor, expired transients, orphaned WC sessions, postmeta orphans, table fragmentation, slow queries) |\n| **Plugins** | Vulnerable plugins via Wordfence Intelligence (free, no API key), abandoned plugins (no updates 2+ years), hidden inactive plugins still on disk |\n| **Security** | Admin username = \"admin\", xmlrpc.php exposed, wp-config permissions, file editor enabled, debug.log publicly accessible, missing rate limits, WP version exposed in headers, core checksum mismatches |\n| **Backup** | Last run age, missing DB dumps, truncated backup files, S3/destination unreachable, mismatched retention |\n| **Images** | Lossless JPEG/PNG compression (jpegoptim, optipng, pngquant), WebP generation alongside originals, savings estimate before run, scheduled or on-demand |\n| **Performance** | PHP version EOL, object cache (Redis/Memcached) connected?, page cache type, WP cron health and backlog, TTFB from server, plugin count thresholds |\n| **Errors** | Parses PHP error logs, classifies by type, identifies offending plugin/theme, detects plugin conflicts, white screen root cause, suggests one-line WP-CLI fix |\n\nWhen something breaks, you get this:\n\n```\n🔴 White screen on mysite.com\n\nFatal error: Cannot redeclare 'my_custom_helper'\nConflict between:\n  wp-content/plugins/my-plugin/includes/helpers.php:23\n  wp-content/themes/mytheme/functions.php:89\n\nmy-plugin was updated 2 hours ago — likely introduced this.\n\n[🔇 Deactivate my-plugin]  [📋 Full Error Log]  [↩️ Roll Back Plugin]\n```\n\nNot a stack trace. Not \"Internal Server Error.\" A **diagnosis**.\n\n---\n\n## Automation Rules\n\nEvery Perch install ships with **14 built-in monitoring rules** that run via cron every 5 minutes. No n8n. No Zapier. No SaaS. The whole engine is a self-contained shell script (`telegram-bot/monitor.sh`) — about 400 lines, runs in under 2 seconds.\n\n| # | Rule | Default trigger | Auto-action |\n|---|---|---|---|\n| 1 | nginx / nginx-rc down | service inactive | Telegram alert + restart button |\n| 2 | PHP-FPM down (any version) | any `php*-fpm-rc` inactive | Restart button |\n| 3 | MySQL / MariaDB down | service inactive | Restart button + OOM context |\n| 4 | Disk usage tiered | 80% / 90% / 95% | Tiered alerts + cleanup button |\n| 5 | RAM usage tiered | 85% / 93% | Top consumers + smart fix |\n| 6 | CPU sustained load | 100% / 200% of cores | Top processes |\n| 7 | Orphan processes (PPID=1) | \u003e10 orphans | Smart fix |\n| 8 | Failed systemd services | any in `systemctl --failed` | Smart fix |\n| 9 | SSL expiry per site | 30d / 7d remaining | Renew SSL button |\n| 10 | Site HTTP availability | 5xx or unreachable | Diagnose + fix buttons |\n| 11 | Custom port checks | any configured port closed | Smart fix |\n| 12 | fail2ban ban-rate spike | \u003e50 bans/hour | Acknowledge |\n| 13 | Backup age | \u003e36h since last backup | Acknowledge |\n| 14 | Daily heartbeat | 09:00 local time | \"All systems good 🪶\" |\n\nEvery threshold is overridable in `~/.perch/.env`. Every alert is friendly, contextual, and ships with one-tap action buttons. Cooldown logic prevents alert spam (default: 30 min between identical alerts).\n\n`bash scripts/setup.sh` installs the cron line and prompts you for thresholds. Full reference: [docs/automation.md](docs/automation.md).\n\n---\n\n## Connectors\n\nConnectors are how Perch talks to you. Pick one. Pick all. Add your own — the gateway is just a function that takes a structured alert and returns a payload.\n\n| Connector | Status | Best for |\n|-----------|--------|----------|\n| **Claude Code MCP** | ✅ First-class | Deep work — auditing, planning, debugging |\n| **Telegram bot** | ✅ Ready | 24/7 alerts on your phone, inline-button fixes |\n| **Slack webhook** | ✅ Alerts work | Team channels, daily digests |\n| **Slack bot** (slash commands + buttons) | 🔜 Q2 2026 | Full Slack parity with Telegram |\n| **HTTP webhook** | ✅ Ready | Plug into anything (n8n, Zapier, Make, custom) |\n| **Email** | 🔜 Coming | Stakeholders who don't live in chat |\n| **Discord** | 🔜 Community PR welcome | Indie devs / community servers |\n| **Custom** | ✅ Build your own | Implement `formatAlert(opts)` — done |\n\nTelegram and Slack are working today. Slack inline buttons + slash commands ship Q2 2026. Other connectors are 50–200 lines each — PRs welcome.\n\n---\n\n## Safety\n\nPerch is paranoid by default. Read this before installing on a production box: **[docs/safety.md](docs/safety.md)**\n\n**The four promises:**\n1. **Never destructive without confirmation.** Plugin deactivation, file deletion, config changes — all require an explicit confirm tap.\n2. **Credentials never leak.** Passwords / SSH keys / API tokens are encrypted at rest with AES-256-GCM. Redacted from every log, every alert, every error message.\n3. **Always reversible.** Last 10 confirmed actions logged. `/perch undo` reverts the most recent. DB content modifications never auto-run.\n4. **Always honest.** When Perch fixes something, you get a complete report of what changed before, after, and why.\n\n**Auto-fix whitelist** (no confirm needed): restart crashed services, kill orphan processes, truncate logs \u003e50MB, renew SSL \u003c7d, clear expired transients, clear `/tmp` PHP sessions older than 24h.\n\n**Confirm-required**: anything that modifies content, deactivates plugins, edits configs, stops services, reboots.\n\n**Never auto, ever**: backup restoration, DB content `DELETE`/`UPDATE` on user data, file system `rm` outside `/tmp`, user account changes, Hetzner-level shutdown.\n\n---\n\n## Why Free Forever\n\nThree reasons, all of them honest:\n\n1. **The brain belongs to you.** A free tool that lives on your server can't be paywalled, ad-funded, or rug-pulled. The data is yours. The code is yours. The whole stack is yours.\n\n2. **Per-server tax is the wrong business model.** Cloudways charges 220% over the underlying VPS. Kinsta charges $35/site. Charging you per server you already own is rent-seeking. Perch refuses to play that game.\n\n3. **Free tools build trust.** Aditya runs other paid products ([Pickle](https://github.com/adityaarsharma/pickle), [RankReady](https://github.com/adityaarsharma/rankready), [Jyotisha](https://adityaarsharma.com/astrology)). The ones who try Perch and find it solid become the audience for those. That's the funnel — built on usefulness, not a paywall.\n\nNo \"Pro tier.\" No license keys. No telemetry by default. No SaaS dependency. **Forever.**\n\n---\n\n## Roadmap\n\n**Now (April 2026)** — Sprint 1 shipped\n- ✅ MCP server with 150+ tools\n- ✅ WordPress Audit Modules (7 deep modules)\n- ✅ SQLite self-learning brain\n- ✅ Telegram bot with inline buttons + fix-server\n- ✅ Slack alert delivery via webhook\n- ✅ RunCloud-aware paths (`nginx-rc`, `/etc/nginx-rc/`, per-app users)\n\n**Next 60 days**\n- 🔜 Credential vault (AES-256-GCM encryption)\n- 🔜 Undo system (`/perch undo`)\n- 🔜 Slack bot (slash commands + buttons, full Telegram parity)\n- 🔜 Multi-server dashboard (Telegram-first agency view)\n- 🔜 Uptime Kuma webhook integration\n- 🔜 Self-update flow (`/perch update`)\n\n**Q3 2026**\n- 🔜 Laravel module (queue health, schedule runner, artisan automation)\n- 🔜 Node.js module (PM2 deep monitoring, memory leak detection)\n- 🔜 n8n module (workflow health, execution audit)\n- 🔜 Pattern recognition v2 (Perch correlates issues across servers — \"this is the 3rd time this month, here's the permanent fix\")\n\n**2027**\n- Cross-server federated learning (opt-in, anonymized) — Perch learns from the network without anyone giving up their data\n\n---\n\n## Built by Aditya\n\nAditya Sharma — solo builder, open-source. Marketing \u0026 growth lead at [POSIMYTH Innovation](https://posimyth.com). Runs his own infrastructure. Built Perch because he was tired of the choice between $200/mo Kinsta and 4am SSH panic.\n\n[Website](https://adityaarsharma.com) · [Twitter/X](https://x.com/adityaarsharma) · [Pickle](https://github.com/adityaarsharma/pickle) · [RankReady](https://github.com/adityaarsharma/rankready)\n\nNot affiliated with RunCloud. Perch works **with** RunCloud — RunCloud is the safety layer (GUI + isolation + backups), Perch is the intelligence layer on top. Both are needed. Together they replace $35–$115/month managed hosting at $13/month.\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\n**Stop renting your server's intelligence. Start owning it.**\n\n[Install Perch](#install-in-5-minutes) · [Read the docs](docs/) · [Star on GitHub](https://github.com/adityaarsharma/perch) · [File an issue](https://github.com/adityaarsharma/perch/issues)\n\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadityaarsharma%2Fperch","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fadityaarsharma%2Fperch","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fadityaarsharma%2Fperch/lists"}