
Project Graveyard
FreeRevive your abandoned projects with data-driven insights.
Free · Opens the source repo
What Project Graveyard does
Project Graveyard is a specialized tool designed for developers who find themselves surrounded by unfinished or abandoned projects. It scans your local machine for repositories that have not been actively maintained, analyzing their git histories to determine the reasons behind their stagnation. By identifying personal patterns of project abandonment, it highlights the most promising candidates for revival, helping you decide which project is worth resurrecting and shipping. This tool operates entirely locally, ensuring that your data remains private and secure.
The skill runs a comprehensive analysis by examining the commit history of each project, categorizing the causes of death, and providing insights into your development habits. It generates a detailed report that includes a census of dead projects, a breakdown of their lifespans, and a list of the top candidates for resurrection based on their potential for success. The report also features a unique autopsy interview process, allowing you to reflect on why certain projects failed and how you can avoid similar pitfalls in the future.
Project Graveyard is particularly useful when you find yourself asking questions about what to finish or when you are about to embark on a new project that may overlap with previous efforts. It serves as a reminder of the work you've already done and encourages you to leverage existing resources rather than starting from scratch. The tool is designed for developers who want to maximize their productivity by focusing on projects that have the potential to succeed, rather than getting lost in a sea of unfinished work.
In summary, Project Graveyard helps you reclaim your past efforts, turning abandoned projects into opportunities for future success. Whether you're a solo developer or part of a larger team, this skill can provide valuable insights into your development process and help you make informed decisions about your project portfolio.
When to use it
Use this skill when you want to assess abandoned projects or determine which unfinished work is worth completing.
When not to use it
This tool is not suitable for cleaning up disk space or archiving projects on remote repositories like GitHub.
What you can build with it
Reviving a Stalled Project
You have a project that was left unfinished due to technical challenges. Use Project Graveyard to analyze its history and determine if it's worth picking up again.
Avoiding Duplicate Efforts
Before starting a new project, run Project Graveyard to see if you've already tackled a similar idea, saving time and resources.
Understanding Personal Development Patterns
Gain insights into your development habits by reviewing the patterns of project abandonment identified by Project Graveyard.
How to install Project Graveyard
View source1. Install with the skills CLI
npx skills add shubhamsaboo/awesome-llm-apps/project-graveyard --agent claude-code2. Or install it manually
Download the skill folder and drop it into ~/.claude/skills/ for all projects, or .claude/skills/ to scope it to one repo. Restart Claude Code so it picks up the new skill.
Anthropic's agentic coding CLI, and the reference implementation of Agent Skills. Drop a skill folder into ~/.claude/skills and Claude Code loads it automatically whenever a task matches the skill's description. Claude Code docs
Inside SKILL.md
Written by shubhamsabooProject Graveyard
Every developer has a folder full of dead projects. Nobody has ever gotten an autopsy report. This skill scans the machine for abandoned repos, works out why each one died from its git history, finds the user's personal death patterns, and picks the one corpse worth digging up — then helps ship it.
Everything runs locally. No API, no network, nothing leaves the machine.
When to use
- The user asks about abandoned/unfinished/old side projects, or what to finish
- The user wants to revive, resurrect, or "finally ship" something
- The user asks why they never finish projects
- The user proposes a new project — check the graveyard first (see Necromancer mode). There's a decent chance they already built half of it.
When not to use
- Cleaning up disk space or node_modules — that's
kondo/npkill, not this - Archiving repos on GitHub — this works on local clones and never-pushed work
- Analyzing one specific repo's history in depth — just read the git log
Run it
python3 scripts/graveyard.py ~/dev ~/projects
Point it at wherever projects actually live. If you don't know where that is, ask — one question beats sweeping someone's home directory uninvited. No args scans the usual suspects (~/dev, ~/projects, ~/code, ~/Desktop, ...). Useful flags:
--days 90— how long silent before a repo counts as dead (default 45)--json report.json— full machine-readable data--me work@email.com— claim commits made under other emails (repeatable); without it, projects committed via a work identity or a builder tool get skipped as "not yours"--include-foreign— also include repos the user barely committed to (skipped by default: clones, forks, work checkouts are not their corpses)--state FILE— remember scans and resurrections; enables relapse watch
The script is read-only. It never writes inside a scanned repo.
Reading the report
The script gives you four blocks: census, the dead (with cause of death),
patterns, and the top 3 by "pulse" (resurrectability score). Causes are
evidence-based guesses, not verdicts — each comes with the evidence line that
justifies it. If a cause looks wrong, check the evidence before repeating it.
The cause taxonomy and what each one means for resurrection is in
references/causes-of-death.md — read it before writing the report.
The autopsy interview
The script can only read git. You can ask. For corpses whose primary cause is
unknown or slow_fade — the low-confidence verdicts — ask the user one
question each, two or three total at most:
"
recipe-scraper— the history just shows it drifting. Do you remember what actually stopped you?"
Blend the answers in, and label verdicts honestly in the report: (forensic) for what git showed, (confirmed) for what the user told you. Testimony beats a forensic guess — update the tombstone, not just the prose. Two questions is a conversation; five is a deposition.
Writing the tombstone report
Turn the script output into a report the user will actually feel. Format:
- The census. Deaths, combined lifespan, oldest corpse. Plain numbers — they land on their own.
- Tombstones. One per dead project, worst-to-best pulse. Name, lifespan, commit count, cause of death with its evidence, and a one-line epitaph. Above ~10 corpses, give full tombstones only to the 6-8 most interesting (highest pulse, most distinctive deaths) and bury the rest together in one line — "...plus 11 one-day experiments, buried in a shared plot." A wall of 23 tombstones kills the funeral.
- The patterns. This is the part they'll remember. "Your projects die at day 19." "Four of six were killed by a newer project." Quote the script's numbers; add anything you can see that it can't.
- The resurrection. One project. Not three. See below.
Carve the resurrection pick (and only it) as an ASCII tombstone card — stone is earned, not sprayed; every other corpse stays a line in the table:
.------------------------.
/ \
| tab-sensei |
| Apr — May 2026 |
| 54 commits · 12 days |
| |
| died of deploy fear |
| |
| "It worked. It just |
| never shipped." |
___|____________________________|___
~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~
Center the text, keep the card under 44 columns so it never wraps, epitaph last. If the graveyard is empty, no card — don't carve a stone for nobody.
Epitaph rules — this is where the whole thing lives or dies:
- Every epitaph must be traceable to evidence from the scan. "Died as it lived: configuring webpack" works because the config ratio was 78%. Made-up jokes about code you haven't seen don't work and the user will know.
- Punch at the pattern, not the person. "It worked. It just never shipped" is fine. "You were too scared to ship" is not.
- Dry beats wacky. One sentence. No puns unless they're earned.
- If a project deserves respect, give it. A 26-commit repo with a finished README that never shipped is a small tragedy, not a punchline.
Offer --redact framing if the user wants to share the report: project names
swapped for project-1..n, causes and patterns intact.
The resurrection
Pick ONE corpse. Highest pulse wins unless its idea is dead in the world too. Before deciding, read the top candidate's README and skim the code — then do the world-check, the part only you can do because the script can't see the present:
- Search whether what blocked it got easier since it died: the API it fought may have an official SDK now, the model that was too expensive may be 20x cheaper, the thing it hand-rolled may be a library today.
- Search whether the world shipped the idea. If three funded products do exactly this now, say so — that changes the plan from "ship it" to "ship it for yourself," or to "let it rest."
Cite what you find in the plan. "This got easier: X exists now" is the strongest argument for digging; "the window closed" is the strongest for leaving it buried.
Then write the resurrection plan. The per-cause dig strategy is in
references/causes-of-death.md (each cause has a "resurrection angle" —
deploy-fear corpses need shipping steps only, wall deaths need the managed
alternative, scope explosions get one feature extracted). Plan rules:
- At most 7 concrete steps, ending at shipped (a URL, a release, a published package — not "keep working on it")
- Step 0 is always: confirm it still runs. Deps rot; prove the install and the entry point before promising anything.
- Step 1 must be completable today — the first session has to end with visible progress
- Ask before touching the repo. Then offer to start on step 1 right now — that offer is the entire point of running this inside an agent.
When to leave it buried — say it plainly when it's true: the user doesn't care anymore (a shrug at the interview is closure, not a project); the window closed and the world shipped the idea; or every candidate is weak. "Nothing here is worth digging up, and that's fine — here's what the patterns say about the next project" is a legitimate and useful ending.
When the user commits to a resurrection, record it (ask once where to keep
the state file — ~/.project-graveyard.json is a sane default):
python3 scripts/graveyard.py --state ~/.project-graveyard.json \
--mark-resurrected /path/to/the/corpse
Relapse watch
Scans run with --state hold past resurrections to their promise: the report
gains a RELAPSE WATCH block showing whether each resurrected project is
holding or going silent again. When one relapses, say it plainly and make the
user choose — recommit or bury it honestly. A second silent death is an
answer, not a failure; close the loop instead of prescribing a third attempt.
No tool follows up on its own prescription. This one does — that's the point
of keeping state.
Necromancer mode
When the user proposes building something new, check the graveyard for prior
attempts before scaffolding anything — grep the state file (or a fresh
--json report) for name and README overlap. If there's a match:
"You already built about 60% of this. It's called
project-14, it died in March at the auth step, and its parser still works. Resurrect instead?"
Don't be preachy about it. Mention it once, let them choose, drop it.
Gotchas
- ~/Desktop might itself be a git repo (accidental
git init, backup tools). The scanner handles nested repos, but if the census looks absurd, that's usually why. - Ownership filter uses git email. If the user commits under multiple
emails (work address, GitHub web edits, builder tools), real corpses get
skipped as "not yours" — the census names what it skipped; claim yours with
--me that@email.com. - "Dead" is a threshold, not a truth. A stable finished tool looks dead at
45 days. The script separates
finished(deploy config + pushed + README) from dead, but the heuristic is rough — ask before eulogizing anything the user considers done. - One-day corpses are usually vibe-coded bursts, not failures — a project built in one sitting and never reopened. The pattern worth surfacing is how many of them there are, not that each one "died."
- Don't resurrect by default. The report is the product; the resurrection is an offer. Some corpses should stay buried — see "When to leave it buried" above.
Files
scripts/graveyard.py— scanner + autopsy + pulse ranking (stdlib, offline, read-only)references/causes-of-death.md— the taxonomy: signals, confidence, and the per-cause resurrection strategy
Frequently asked questions about Project Graveyard
Similar skills
Canva Creator
Streamline your content campaign from brief to HubSpot.
Cowork Plugin Customization
Tailor your Claude Code plugin to fit your organization.
Impediment Prioritization
Rank and prioritize impediments effectively.
Chronicle
Streamline your Copilot session analysis and reporting.
Idea Refine
Transform vague ideas into actionable concepts.
App Store Optimization
Optimize your mobile app's visibility and performance.
