From fabrik
Scans projects for maintenance issues starting with stale docs, picks one, fixes it in a git worktree, self-reviews with competing agents, and opens a PR. Use to tidy codebases.
npx claudepluginhub maragudk/fabrik --plugin fabrikThis skill uses the workspace's default tool permissions.
A single-shot autonomous maintenance agent. You invoke it, it finds one thing worth fixing, fixes it well, and opens a PR. Then it stops. Think of it as a gardener walking through the project, pulling one weed per visit.
Guides Next.js Cache Components and Partial Prerendering (PPR): 'use cache' directives, cacheLife(), cacheTag(), revalidateTag() for caching, invalidation, static/dynamic optimization. Auto-activates on cacheComponents: true.
Processes PDFs: extracts text/tables/images, merges/splits/rotates pages, adds watermarks, creates/fills forms, encrypts/decrypts, OCRs scans. Activates on PDF mentions or output requests.
Share bugs, ideas, or general feedback.
A single-shot autonomous maintenance agent. You invoke it, it finds one thing worth fixing, fixes it well, and opens a PR. Then it stops. Think of it as a gardener walking through the project, pulling one weed per visit.
Inspired by the "doc-gardening" and "garbage collection" concepts from agent-first engineering: steady, small-batch tending beats painful cleanup sprints.
garden/-prefixed branchCreate a worktree and branch:
git worktree add .worktrees/garden-$(date +%Y%m%d-%H%M%S) -b garden/<descriptive-slug>
cd .worktrees/garden-*
The branch name should reflect the issue you end up fixing (you can rename it after the scan). Use the garden/ prefix always.
Survey the project for maintenance issues. The scan is intentionally broad -- you're a gardener walking through the plot, noticing what needs attention. You don't need to find everything. Some things you catch this time, others next time.
Read the project's documentation, cross-reference it against actual code, and build a list of findings.
Look for these kinds of issues in documentation:
Do not modify log-like or append-only documentation. These are historical records, not living docs. Specifically:
docs/decisions.md produced by the decisions skill. These are chronological records of past decisions. Even if they reference things that no longer exist, that's intentional -- they record what was decided at the time.docs/diary/ produced by the diary skill. These are implementation narratives. They capture what happened, including failures and dead ends. Do not "fix" them.If you're unsure whether something is a living doc or a historical record, leave it alone.
These are natural extensions for the future. Don't act on them now, but the scan architecture is designed to accommodate them:
From your findings, pick the single most worthwhile issue to fix. Use your judgment -- consider severity, your confidence in the fix, and how cleanly it can be resolved. There's no rigid prioritization formula.
State what you picked and why before proceeding.
Make the change. Keep it minimal and focused -- one issue, one PR. Don't redesign the flower bed while pulling a weed. If fixing one thing reveals three others, note them mentally but only address the one you selected.
Respect the project's existing conventions. Read CLAUDE.md, check for linters, understand the project's style. Don't impose your own preferences -- tidy according to the standards already in place.
Commit the change with a clear message.
Dispatch two sub-agents to review the change. Tell them:
If the reviewers find problems:
Cap at 3 iterations. If after 3 rounds there are still concerns, proceed to shipping but include the unresolved concerns in the PR description.
Open a PR against the main branch. The PR description should have this structure:
## What was found
<the issue and where it was found>
## What was fixed
<the change and why>
## Review notes
<any unresolved concerns from self-review, or "Clean review -- no concerns raised.">
After opening the PR, remove the worktree and stop.
cd /path/to/original/repo
git worktree remove .worktrees/garden-*