maintenance
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.
More from fellowship-dev/dogfooded-skills
entropy-check
Sensor — checks doc freshness and computes domain quality grades. Never fixes. Detects staleness, missing coverage, and FlowChad gaps. Updates QUALITY_SCORE.md. Skips inapplicable signals per repo.
16distill
Post-mission audit and distillation — capture mode classifies a completed mission using an 8-code failure taxonomy and writes an audit JSON; analyze mode aggregates audit JSONs into a findings report and creates GitHub issues with recommendations.
14migrate-skill
Move a skill from claude-toolkit plugin (or local .claude/skills) into the dogfooded-skills library, then import it back. Use when consolidating skills into the shared repo.
14skill-builder
Write a high-quality agent skill — covers frontmatter spec, section structure, quality criteria, and common antipatterns.
13popsicle
Agent-native onboarding doc generator — builds coverage maps, health baselines, generated docs, and agent adapters so any AI tool can autonomously navigate your repo.
8setup-harness
Scaffold the knowledge layer for a repo — ARCHITECTURE.md, QUALITY_SCORE.md, enhanced docs/code-structure.md, docs/code-guidelines.md, and FlowChad flow stubs. Gives agents a map, not a 1,000-page manual.
8