Pull requests show that code changed. Deeds tries to show what got better.
curl -fsSL https://raw.githubusercontent.com/danielmiessler/deeds/main/install.sh | sh /plugin marketplace add danielmiessler/deeds/plugin install deeds@workdeedsRuns on your machine. All you need is a Jev key. Source on GitHub
The pull request has been the unit of software work for a long time, and it has earned that. It gives a team one clean place to discuss a change and review it before it merges. I'm not trying to replace it for that.
But as a way to measure how much work got done, especially work done with AI, I see two problems.
A PR exists so someone else can review your change. One person working with agents, testing and pushing straight to production, often never opens one. The share of code written that way is rising fast.
A PR tells you code changed. A refactor, a typo fix and a revert count the same as a new capability, and a change that made things worse counts too.
I don't think the PR is the right unit of measurement anymore.
Deeds is my attempt to address both problems. It's a proposal, not a finished answer, and I expect parts of it to be wrong. If you see where, I'd like to hear it.
commits, and zero pull requests. It says a lot happened. It can't say what.
Fourteen new things the product can do, nine things that work now, and the upkeep that kept it standing.
Deeds is a proposed alternative for measuring valuable work rather than collaborative code modifications. It works whether or not anyone opens a PR, and it only counts a change when the product got better. Each of those changes is a deed, and every deed is one of three kinds.
A capability gained or deepened. Someone can now do a thing they couldn't, or do an existing thing more fully.
src/reports/export.ts + export function toCSV(rows: Invoice[]): string { + return [HEADER, ...rows.map(toLine)].join("\n"); + }
Something moved from broken to sound. Security fixes count here too.
src/server/session.ts - log.info("session", req.headers.cookie); + log.info("session", redact(req.headers.cookie));
Upkeep nobody sees: refactors, dependencies, performance, tests.
package.json - "hono": "^4.5.1", + "hono": "^4.6.0",
Every commit is read from what it actually changed, never from its message. Renames, reverts and busywork add no caps.
Nine caps, four fixes and six tends tells a story one blended score would hide.
A recipe app and a payments system meet on the same ground. A team that wants one number can apply its own weights on top.
Real output: all 717 commits of LifeOS, judged by Jev on 2026-10-04. Add --html report.html for the full page.
Deeds ships as a Claude Code plugin. It installs the deeds command and a skill that knows how to use it, so you can ask in plain words and get the report back.
curl -fsSL https://raw.githubusercontent.com/danielmiessler/deeds/main/install.sh | sh /plugin marketplace add danielmiessler/deeds/plugin install deeds@workdeedsshow me deeds progress
deeds analyze . --since 7d
how many caps did maria land this month?
deeds analyze . --since 30d
Deeds runs on your machine, and all you need is a Jev key: no OpenAI or Anthropic key. Each commit's diff goes only to Jev, with anything shaped like a secret stripped out first. There is no account and no telemetry.
curl -fsSL https://raw.githubusercontent.com/danielmiessler/deeds/main/install.sh | sh /plugin marketplace add danielmiessler/deeds/plugin install deeds@workdeeds