Autonomous GitHub repository maintenance powered by Copilot
Project description
Caretaker
Autonomous GitHub repository management powered by Copilot and github app.
Documentation: https://ianlintner.github.io/caretaker/
One issue. No CLI. No tooling. Paste a setup issue into your repo, assign it to @copilot, walk away. Your repo is now autonomously maintained.
How It Works
- You paste a setup issue into your repo and assign it to
@copilot - Copilot reads our SETUP_AGENT.md, analyzes your repo, and opens a PR with everything configured
- You merge the PR
- The orchestrator runs daily via GitHub Actions, managing PRs, issues, and upgrades
The orchestrator uses Copilot as its execution engine — it observes your repo state, decides what needs to happen, and delegates code changes to Copilot via structured comments.
Setup
1. Create a new issue in your repo:
Tip: Visit the Getting Started docs and use the copy button on the code block below to copy the issue template in one click.
## Setup Caretaker
@copilot Please set up the caretaker system for this repository.
### Instructions
1. Read the setup guide at:
https://github.com/ianlintner/caretaker/blob/main/setup-templates/SETUP_AGENT.md
2. Follow the instructions in that guide exactly.
3. After creating all files, open a single PR with the changes.
Title: "chore: setup caretaker"
### Context
This repo uses the caretaker system for automated repo management.
See: https://github.com/ianlintner/caretaker
2. Assign the issue to @copilot
3. Review and merge the PR that Copilot opens
4. Add COPILOT_PAT from a write-capable user for Copilot hand-offs, and ANTHROPIC_API_KEY for enhanced AI features
COPILOT_PAT should be a fine-grained PAT that belongs to a real user or machine user with write access to the repository.
Caretaker uses that token for:
- API-based assignment of issues to GitHub Copilot
- PR comments that
@copilotmust see as coming from a write-capable identity rather thangithub-actions[bot]
What Gets Installed
After setup, your repo has:
.github/
copilot-instructions.md ← Copilot project memory (appended)
agents/
maintainer-pr.md ← PR agent persona
maintainer-issue.md ← Issue agent persona
maintainer-upgrade.md ← Upgrade agent persona
maintainer/
config.yml ← Repo-specific settings
.version ← Pinned version
workflows/
maintainer.yml ← Orchestrator workflow
No Python. No Node. No vendored code. Just config and Copilot instructions.
Features
Core Agents
PR Agent
- Monitors all open PRs in real-time
- Detects and triages CI failures (test, lint, build, type errors)
- Requests fixes from Copilot via structured comments
- Retry loop with escalation after max attempts
- Auto-merge for Copilot, Dependabot, and human PRs (configurable)
- Handles flaky test detection and CI re-runs
- Review state analysis and auto-approval (configurable)
Issue Agent
- Triages incoming issues (bug, feature, question, duplicate, stale)
- Dispatches implementable issues to Copilot
- Tracks issue → PR → merge lifecycle
- Auto-closes answered questions and stale issues (configurable)
- Escalates complex issues to repo owners
DevOps Agent
- Monitors default-branch CI failures
- Automatically creates fix issues for build/test failures
- Deduplicates similar issues with cooldown periods
- Assigns work to Copilot for resolution
Self-Heal Agent
- Detects caretaker's own workflow failures
- Creates self-diagnosis issues
- Reports bugs to upstream caretaker repository (configurable)
- Ensures the system can maintain itself
Security Agent
- Triages Dependabot alerts
- Monitors code scanning findings
- Tracks secret scanning alerts
- Filters by severity thresholds
- Creates remediation issues with context
Dependency Agent
- Reviews Dependabot PRs
- Auto-merges patch and minor updates (configurable)
- Posts dependency update digests
- Smart merge strategies by update type
Docs Agent
- Reconciles merged PRs into changelog updates
- Maintains documentation freshness
- Configurable lookback period
- Optional README updates
Charlie Agent
- Cleans up duplicate caretaker-managed issues and PRs
- Closes abandoned work after 14-day default window
- Prevents operational clutter accumulation
- Exempt label support for critical work
Stale Agent
- Warns and closes stale issues and PRs (60+ days default)
- Deletes merged branches automatically
- Configurable stale thresholds
- Exempt labels for pinned or security work
Escalation Agent
- Creates human escalation digest issues
- Aggregates work requiring maintainer attention
- Configurable targets and notification
- Tracks escalation age and priority
Upgrade Agent
- Detects new caretaker releases
- Creates upgrade issues for Copilot execution
- Supports multiple strategies: auto-minor, auto-patch, latest, pinned
- Handles breaking vs. non-breaking upgrades
- Version pinning via
.versionfile - Preview channel support
Advanced Features
Goal Engine (Experimental)
- Quantitative goal-based agent dispatch
- Measures repository health across dimensions:
- CI health (green builds on main and PRs)
- PR lifecycle velocity
- Security posture
- Self-health monitoring
- Scores each goal from 0.0 (unmet) to 1.0 (satisfied)
- Prioritizes agents based on goal impact
- Detects divergence and critical states
- Tracks goal history for trend analysis
Memory Store
- Disk-backed SQLite storage for agent memory
- Persistent deduplication across runs
- Namespaced memory for different agent concerns
- Automatic snapshot generation for auditing
- Bounded storage with configurable limits
Optional: Claude Integration
Add ANTHROPIC_API_KEY to unlock enhanced AI features:
- CI log analysis — better at parsing long, noisy logs
- Architectural review — understands complex code review comments
- Issue decomposition — breaks down multi-faceted bugs
- Upgrade impact analysis — assesses breaking change risk
What's new
Fleet registry (opt-in)
Each consumer repo's successful caretaker run can POST a small
heartbeat to a central caretaker backend so an operator sees every
managed repository in one dashboard — without running an org-wide
GitHub crawl.
Enable in .github/maintainer/config.yml:
fleet_registry:
enabled: true
endpoint: https://<your-caretaker-backend>/api/fleet/heartbeat
See docs/fleet-registry.md for architecture, payload shape, and HMAC-signed delivery.
Custom coding agent
Small tasks (lint fixes, trivial test failures, review comments) no
longer have to go to copilot-swe-agent[bot]. A configurable
executor routes them to caretaker's own Foundry tool-loop or to an
anthropics/claude-code-action hand-off, with a size-budget guard
and an explicit escalation path back to Copilot.
Three routing labels let operators steer individual items:
agent:custom— force the custom executor.agent:copilot— force the legacy path.agent:quarantine— refuse dispatch (for hostile or confusing issues).
On AKS deployments, the MCP backend exposes
POST /api/admin/agent-tasks which spawns a short-lived
batch/v1 Job per dispatch. See
docs/custom-coding-agent-plan.md
for the full design, phased rollout, size budget, and security model;
docs/custom-coding-agent-e2e.md
for the operator runbook.
Configuration
See setup-templates/templates/config-default.yml for the full config schema.
Key settings:
pr_agent:
auto_merge:
copilot_prs: true # Auto-merge Copilot PRs
dependabot_prs: true # Auto-merge dependency updates
copilot:
max_retries: 2 # Fix attempts before escalation
issue_agent:
auto_assign_bugs: true # Auto-assign simple bugs to Copilot
auto_assign_features: false
devops_agent:
target_branch: main # Monitor default branch CI
max_issues_per_run: 3 # Prevent issue spam
dedup_open_issues: true
security_agent:
min_severity: medium # Filter by severity
include_dependabot: true
include_code_scanning: true
include_secret_scanning: true
dependency_agent:
auto_merge_patch: true
auto_merge_minor: true
post_digest: true
charlie_agent:
stale_days: 14 # Short janitorial window for caretaker-managed work
close_duplicate_issues: true
close_duplicate_prs: true
stale_agent:
stale_days: 60 # General stale threshold
close_after: 14
delete_merged_branches: true
upgrade_agent:
strategy: auto-minor # auto-minor | auto-patch | latest | pinned
channel: stable # stable | preview
goal_engine:
enabled: false # Experimental: goal-driven dispatch
goal_driven_dispatch: false # Reorder agents by goal impact
divergence_threshold: 3 # Runs before triggering alerts
memory_store:
enabled: true # Persistent agent memory
db_path: .caretaker-memory.db
max_entries_per_namespace: 1000
Architecture
Orchestrator (Python, runs in GitHub Actions)
│
├── Reads config.yml
├── Reads repo state (open PRs, issues, CI status)
├── Decides what needs to happen
│
├── For code changes → creates/updates issues → assigns to @copilot
├── For PR fixes → posts structured comments as the `COPILOT_PAT` identity → @mentions copilot
└── For escalation → labels + tags repo owner
The orchestrator never writes code. It manages Copilot, which does.
Development
# Clone and install
git clone https://github.com/ianlintner/caretaker.git
cd caretaker
pip install -e ".[dev]"
# Run tests
pytest tests/ -v
# Lint
ruff check src/ tests/
ruff format --check src/ tests/
# Type check
mypy src/
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file caretaker_github-0.26.0.tar.gz.
File metadata
- Download URL: caretaker_github-0.26.0.tar.gz
- Upload date:
- Size: 710.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a697519c81da372b425492ee1b88d48b2294228e9aae6c278eb87868a2379cd5
|
|
| MD5 |
d975ef7181a8f1bd066ce318599d3700
|
|
| BLAKE2b-256 |
c0c52c008606c22248edadd9e9e1691a445b5dd1433e757d5c6379dca9855942
|
File details
Details for the file caretaker_github-0.26.0-py3-none-any.whl.
File metadata
- Download URL: caretaker_github-0.26.0-py3-none-any.whl
- Upload date:
- Size: 801.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ba729f8997ac4221c200af87f4fb3ea5dc4ccb95f1993d4710f8812ec5202bc7
|
|
| MD5 |
c3ce0102f9c857cff2d9c6700164e198
|
|
| BLAKE2b-256 |
b24b9162c608f47a78874a65be3a934c7768a8046d066aa35c22a4d04c4b1c4e
|