From 7e425a83e7a34c9cee5e7628a8beca0c947cd87e Mon Sep 17 00:00:00 2001 From: Chuck D'Antonio Date: Mon, 20 Oct 2025 12:49:58 -0400 Subject: [PATCH 1/2] Add claude-memory-extractor package MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Creates a Nix package for obra's claude-memory-extractor tool, which processes Claude Code conversation logs to extract transferable lessons using multi-dimensional analysis. - Add package definition in pkgs/claude-memory-extractor/default.nix - Register package in pkgs/default.nix - Add to AI home manager module package list - Uses mkDerivation with npm install during build (requires __noChroot) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- flake.nix | 8 ++-- home/modules/ai/default.nix | 3 +- pkgs/claude-memory-extractor/default.nix | 56 ++++++++++++++++++++++++ pkgs/default.nix | 3 +- 4 files changed, 64 insertions(+), 6 deletions(-) create mode 100644 pkgs/claude-memory-extractor/default.nix diff --git a/flake.nix b/flake.nix index 766c3fc4..a0412bdf 100644 --- a/flake.nix +++ b/flake.nix @@ -22,12 +22,12 @@ }; - outputs = { self, nixpkgs, home-manager, darwin, ...}@inputs: + outputs = { self, nixpkgs, home-manager, darwin, ...}@inputs: let inherit (self) outputs; system = builtins.currentSystem; isDarwin = nixpkgs.legacyPackages.${system}.stdenv.isDarwin; - + pkgs = import nixpkgs { inherit system; overlays = [ @@ -36,11 +36,11 @@ }; # Helper function to create home configurations with profiles - mkHomeConfig = { username, homeDirectory, gitEmail, profile ? "full" }: + mkHomeConfig = { username, homeDirectory, gitEmail, profile ? "full" }: home-manager.lib.homeManagerConfiguration { inherit pkgs; extraSpecialArgs = {inherit inputs outputs username homeDirectory gitEmail profile;}; - modules = [ + modules = [ ./home/users/crdant/home.nix ]; }; diff --git a/home/modules/ai/default.nix b/home/modules/ai/default.nix index 0ac85244..68976e58 100644 --- a/home/modules/ai/default.nix +++ b/home/modules/ai/default.nix @@ -5,12 +5,13 @@ let isLinux = pkgs.stdenv.isLinux; in { # AI and coding assistant tools - home = { + home = { packages = with pkgs; [ aider-chat-full amp-cli nur.repos.charmbracelet.crush claude-code + claude-memory-extractor unstable.fabric-ai gemini-cli goose-cli diff --git a/pkgs/claude-memory-extractor/default.nix b/pkgs/claude-memory-extractor/default.nix new file mode 100644 index 00000000..f7beec60 --- /dev/null +++ b/pkgs/claude-memory-extractor/default.nix @@ -0,0 +1,56 @@ +{ lib, stdenv, fetchFromGitHub, nodejs, makeWrapper }: + +stdenv.mkDerivation rec { + pname = "claude-memory-extractor"; + version = "unstable-2025-01-20"; + + src = fetchFromGitHub { + owner = "obra"; + repo = "claude-memory-extractor"; + rev = "main"; + hash = "sha256-lvYit/IZwbHhxU3/jlzHL1AMkJ46BGpoYRnSuovDNhs="; + }; + + nativeBuildInputs = [ nodejs makeWrapper ]; + + # Disable sandbox to allow npm install from registry + # This is a temporary workaround for npm package builds + __noChroot = true; + + buildPhase = '' + runHook preBuild + + export HOME=$TMPDIR + npm install --legacy-peer-deps + npm run build + + runHook postBuild + ''; + + installPhase = '' + runHook preInstall + + mkdir -p $out/lib/node_modules/claude-memory + cp -r . $out/lib/node_modules/claude-memory + + mkdir -p $out/bin + makeWrapper ${nodejs}/bin/node $out/bin/claude-memory \ + --add-flags "$out/lib/node_modules/claude-memory/dist/cli.js" + + runHook postInstall + ''; + + meta = with lib; { + description = "Multi-dimensional memory extraction system for Claude Code conversation logs"; + longDescription = '' + A tool that processes Claude Code conversation logs to extract transferable lessons + using multi-dimensional analysis including root cause analysis, psychological driver + identification, and prevention strategies. + ''; + homepage = "https://github.com/obra/claude-memory-extractor"; + license = licenses.mit; + maintainers = []; + mainProgram = "claude-memory"; + platforms = platforms.unix; + }; +} diff --git a/pkgs/default.nix b/pkgs/default.nix index 2c5cdb7a..b2a2c983 100644 --- a/pkgs/default.nix +++ b/pkgs/default.nix @@ -1,8 +1,9 @@ # Custom packages, that can be defined similarly to ones from nixpkgs # You can build them using 'nix build .#example' -{ pkgs ? import {} } : +{ pkgs ? import {} } : rec { + claude-memory-extractor = pkgs.callPackage ./claude-memory-extractor { }; mbta-mcp-server = pkgs.callPackage ./mbta-mcp-server { }; tunnelmanager = pkgs.callPackage ./tunnelmanager { }; From 5f0d4ea07608ab761e379543c023d9cceaea2393 Mon Sep 17 00:00:00 2001 From: Chuck D'Antonio Date: Mon, 20 Oct 2025 12:59:38 -0400 Subject: [PATCH 2/2] Pin claude-memory-extractor to specific commit MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Changes rev from "main" to specific commit SHA 384e0302088639cf9a3d40d92cf57e44e25f9044 to ensure reproducible builds. The hash remains the same as it was already correct for this commit. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- pkgs/claude-memory-extractor/default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pkgs/claude-memory-extractor/default.nix b/pkgs/claude-memory-extractor/default.nix index f7beec60..d3cd2add 100644 --- a/pkgs/claude-memory-extractor/default.nix +++ b/pkgs/claude-memory-extractor/default.nix @@ -7,7 +7,7 @@ stdenv.mkDerivation rec { src = fetchFromGitHub { owner = "obra"; repo = "claude-memory-extractor"; - rev = "main"; + rev = "384e0302088639cf9a3d40d92cf57e44e25f9044"; hash = "sha256-lvYit/IZwbHhxU3/jlzHL1AMkJ46BGpoYRnSuovDNhs="; };