maintenance
Use when running an infra-only health audit across Pylot systems — LaunchAgent, cron, secrets, labels, branches, and issues.
How do I install this agent skill?
npx skills add https://github.com/fellowship-dev/dogfooded-skills --skill maintenanceIs this agent skill safe to install?
- Gen Agent Trust Hubwarn
The skill performs infrastructure maintenance including secret scanning, GitHub issue management, and system health checks. It accesses a GitHub token from a local environment file and queues shell commands for later execution.
- Socketwarn
1 alert: gptAnomaly
- Snykpass
Risk: LOW · No issues
What does this agent skill do?
Maintenance
Infra health audit. Investigate → Flag → Create issues. Never modify code, configs, or repo contents.
Install via npx:
npx skills add fellowship-dev/dogfooded-skills/ops/maintenance
Architecture/doc checks have moved to
/entropy-check. This skill covers infrastructure only: processes, secrets, labels, branches, dependencies, system health, and memory hygiene.
When to Use
- Weekly scheduled run (cron) — full infra sweep
- After a system change (new LaunchAgent, new cron job)
- When an automated task seems to have stopped working
- When disk or brew issues are suspected
Guiding Principle
Maintenance takes 10x more effort than building. This job surfaces problems Max can't see day-to-day. Output: a report + GitHub issues for anything worth tracking.
Instructions
Run ALL checks. Each finding either becomes a GitHub issue in fellowship-dev/claude-buddy or is noted as clean.
# Set GH_TOKEN at the start of every run
export GH_TOKEN=$(grep GH_TOKEN_FELLOWSHIP /home/ubuntu/projects/fellowship-dev/claude-buddy/.env | cut -d= -f2)
1. Memory Consolidation (always)
wc -l /home/ubuntu/projects/fellowship-dev/claude-buddy/memory/MEMORY.md
ls ~/.claude/projects/-Users-maxfindel-Projects-claude-buddy/*.jsonl | wc -l
- MEMORY.md >180 lines → compact, run
/save-memory - JSONL session files: ignore accumulation — ~5MB each is fine, no action needed
2. Secrets Scan
grep -r "ghp_\|ghs_\|sk-\|xoxb-\|AAEi\|AAAA[a-zA-Z0-9]" \
/home/ubuntu/projects/fellowship-dev/claude-buddy/ \
--include="*.md" --include="*.sh" --include="*.py" --include="*.mjs" \
-l 2>/dev/null | grep -v ".git"
Flag any file with a live-looking token/key that is git-tracked.
3. Dependabot Coverage
Read PROJECTS.md. For every active repo (Products + Tooling, skip FVL):
GH_TOKEN=$GH_TOKEN gh api repos/{org}/{repo}/contents/.github/dependabot.yml 2>&1
- Missing config → flag as issue
- Config present but silent >30 days → flag
4. Stale Branches
For active repos, check for branches that are merged but not deleted:
GH_TOKEN=$GH_TOKEN gh api repos/{org}/{repo}/branches --paginate \
--jq '.[].name' 2>/dev/null
# Cross-reference against merged PRs
Flag repos with >5 stale merged branches.
5. LaunchAgent Health
ls ~/Library/LaunchAgents/fry.*.plist | while read f; do
target=$(grep -o '/[^<]*' "$f" | grep -E '\.sh|\.py|\.mjs' | head -1)
[ -f "$target" ] || echo "MISSING: $f → $target"
done
launchctl list | grep fry
Flag any plist pointing to a missing file, or any fry agent not loaded.
6. Cron Log Errors (last 7 days)
ls -t ~/.local/share/fry-bot/cron-logs/*.log | head -20 | xargs grep -l "FAILED\|ERROR\|timeout" 2>/dev/null
Recurring failures in the same job = flag as issue with log excerpt.
7. PROJECTS.md Accuracy
- Check repos listed as active: do they still exist on GitHub?
- Check repos listed as Dormant: any commits in last 30 days?
- Any new repos Max created that aren't in PROJECTS.md?
GH_TOKEN=$GH_TOKEN gh repo list {org} --json name,isArchived,pushedAt --limit 50
Run for: maxfindel, fellowship-dev, Lexgo-cl, CLAPES-UC, Energia-UC.
8. Spacestation System Health
brew outdated --quiet | wc -l
df -h / | tail -1
- Brew packages outdated >20 → flag
- Disk >85% used → flag
9. Label Sync
Verify standard labels across active repos.
For each active fellowship-dev repo (farmesa, inbox-angel, booster-pack, mtg-lotr, commander):
STANDARD="ready-to-work in-progress needs-manual-review reviewed double-checked ready-to-merge groundwork dependencies bug enhancement documentation"
for repo in farmesa inbox-angel booster-pack mtg-lotr commander; do
existing=$(GH_TOKEN=$GH_TOKEN gh label list --repo fellowship-dev/$repo \
--json name --jq '.[].name' 2>/dev/null | tr '\n' ' ')
for label in $STANDARD; do
echo "$existing" | grep -q "$label" || echo "MISSING: fellowship-dev/$repo → $label"
done
done
- Any missing labels → run
gh label createto add them (idempotent, safe to do inline) - Report how many were created vs already present
10. Booster-Pack Sync
Pull changes into dependent sites.
Find all local repos that have a booster git remote:
for dir in ~/Projects/fellowship-dev/*/; do
if git -C "$dir" remote | grep -q '^booster$' 2>/dev/null; then
repo=$(basename "$dir")
BEHIND=$(git -C "$dir" rev-list HEAD..booster/main --count 2>/dev/null || echo "?")
echo "fellowship-dev/$repo: $BEHIND commits behind booster-pack"
fi
done
- If any site is >0 commits behind → queue a task in overnight-tasks.md:
pull-booster-{repo-slug}, typemaintenance, executor{project-path}, promptgit pull booster main --no-edit && git push. - If there are conflicts → flag for Max instead, do not pull autonomously.
11. Open Issues in fellowship-dev/claude-buddy
List all open issues — no action, just surface in report so Max sees the backlog.
GH_TOKEN=$GH_TOKEN gh issue list --repo fellowship-dev/claude-buddy --state open \
--json number,title,labels,createdAt
Creating Issues
Before creating any issue, check for duplicates:
# Fetch open + closed issue titles (closed catches older attempts at the same problem)
GH_TOKEN=$GH_TOKEN gh issue list --repo fellowship-dev/claude-buddy \
--state all --limit 200 --json number,title,state \
--jq '.[] | "\(.state) #\(.number): \(.title)"'
- If a matching open issue already exists → add a comment or just note it in the report. Do NOT create a duplicate.
- If a matching closed issue exists → only re-open or create a new one if the problem has clearly recurred. Note the previous issue number in the body.
For each new finding with no existing issue:
GH_TOKEN=$GH_TOKEN gh issue create \
--repo fellowship-dev/claude-buddy \
--title "Maintenance: {finding}" \
--label "maintenance" \
--body "..."
Output
Save report to reports/maintenance/YYYY-MM-DD.md:
# Maintenance Report — YYYY-MM-DD
## Checks Run
- [x] Memory consolidation
- [x] Secrets scan
- [x] Dependabot coverage
- [x] Stale branches
- [x] LaunchAgent health
- [x] Cron log errors
- [x] PROJECTS.md accuracy
- [x] Spacestation system health
- [x] Label sync
- [x] Booster-pack sync
- [x] Open issues review
> Note: Architecture/doc drift checks have moved to /entropy-check (separate skill)
## Findings
### Issues Created
- issue [fellowship-dev/claude-buddy#N](url): {title}
### Clean
- {area}: nothing flagged
### Noted (no issue, low severity)
- {finding}
## Memory
- MEMORY.md: {N} lines
- JSONL sessions: {N} files
Then output a short Telegram summary:
🔧 Maintenance — YYYY-MM-DD
{N} issues created: [list with links]
{N} areas clean
Memory: {N}/200 lines
Full report: reports/maintenance/YYYY-MM-DD.md
What Was Removed from This Skill
Section 11 (Imported lib drift — speckit and toolkit) was extracted to /entropy-check.
Why: Checking whether speckit commands match the source of truth is an architecture/doc check — it measures whether the tooling knowledge layer is current. Entropy-check owns all doc/architecture freshness signals. This skill owns infra only.
To check speckit drift: run /entropy-check against the target repo.
How can the creator link this skill?
Add the canonical catalog link to the repository README so users can inspect current installs and available audits. The publishing guide covers the complete discovery path.
<a href="https://skillzs.dev/skills/fellowship-dev/dogfooded-skills/maintenance">View maintenance on skillZs</a>