{ pkgs, lib, ... }: {
  home.file.".pi/agent/extensions/rpiv-todo" = {
    source = pkgs.buildNpmPackage {
      name = "rpiv-todo";
      src = pkgs.applyPatches {
        name = "rpiv-mono-slim";
        src = pkgs.npinsed.ai.pi.rpiv-mono;
        # Trim monorepo to only rpiv-todo's workspace deps so npm fetches less.
        # Strip devDeps from root and peerDeps from workspace packages — Pi
        # provides @earendil-works/* at runtime.
        postPatch = ''
          ${lib.getExe pkgs.jq} '
            .workspaces = ["packages/rpiv-todo", "packages/rpiv-config", "packages/rpiv-i18n"]
            | .devDependencies = {}
            | del(.scripts.prepare)
          ' package.json > package.json.tmp && mv package.json.tmp package.json
          for p in packages/rpiv-{todo,config,i18n}; do
            ${lib.getExe pkgs.jq} 'del(.peerDependencies, .devDependencies)' \
              "$p/package.json" > "$p/package.json.tmp" && mv "$p/package.json.tmp" "$p/package.json"
          done
          cp ${./lockfile.json} package-lock.json
        '';
      };
      npmDepsHash = "sha256-WM82ZnPyKsmm7Y/QpmqbjIhq8DRyQgWIlkMQOUF+Jac=";
      forceEmptyCache = true;
      dontNpmBuild = true;
    } + /lib/node_modules/rpiv-mono/packages/rpiv-todo;
  };
}