From bcee9f2ac8a5326e91653abb98c841ce3c9cb077 Mon Sep 17 00:00:00 2001 From: Ryan Yin Date: Fri, 18 Sep 2026 18:46:24 +0800 Subject: [PATCH] feat(agents): add Crush and disable usage tracking --- agents/README.md | 1 + agents/install-cli.md | 1 + agents/install-rules.py | 2 ++ agents/test_install_rules.py | 7 ++++--- home/base/gui/dev-tools.nix | 32 +++++++++++++++++++++++--------- home/base/tui/agent-env.nix | 18 ++++++++++++++++++ hosts/idols-ai/preservation.nix | 2 ++ hosts/idols-ruby/packages.nix | 32 +++++++++++++++++++++++--------- modules/base/codex.nix | 11 +++++++++++ 9 files changed, 85 insertions(+), 21 deletions(-) create mode 100644 home/base/tui/agent-env.nix create mode 100644 modules/base/codex.nix diff --git a/agents/README.md b/agents/README.md index 99d0eb51..a12487cc 100644 --- a/agents/README.md +++ b/agents/README.md @@ -35,6 +35,7 @@ Current targets: - OpenCode: `AGENTS.md` -> `${XDG_CONFIG_HOME:-~/.config}/opencode/AGENTS.md` - Pi: `AGENTS.md` -> `~/.pi/agent/AGENTS.md` - OMP: `AGENTS.md` -> `~/.omp/agent/AGENTS.md` +- Crush: `AGENTS.md` -> `${XDG_CONFIG_HOME:-~/.config}/crush/CRUSH.md` - Generic cross-tool (read by Kimi Code): `AGENTS.md` -> `~/.agents/AGENTS.md` Behavior: diff --git a/agents/install-cli.md b/agents/install-cli.md index 8e9a8115..1fc1277c 100644 --- a/agents/install-cli.md +++ b/agents/install-cli.md @@ -12,6 +12,7 @@ Installed via Nix: - kimi-code - pi - omp +- crush ## Optional tooling diff --git a/agents/install-rules.py b/agents/install-rules.py index 2f7ab317..912a5e35 100644 --- a/agents/install-rules.py +++ b/agents/install-rules.py @@ -47,12 +47,14 @@ def main() -> int: opencode_dir = xdg_config_home / "opencode" pi_dir = Path("~/.pi/agent").expanduser() omp_dir = Path("~/.omp/agent").expanduser() + crush_dir = xdg_config_home / "crush" agents_dir = Path("~/.agents").expanduser() targets = ( (codex_dir, "AGENTS.md"), (opencode_dir, "AGENTS.md"), (pi_dir, "AGENTS.md"), (omp_dir, "AGENTS.md"), + (crush_dir, "CRUSH.md"), (agents_dir, "AGENTS.md"), ) failed = False diff --git a/agents/test_install_rules.py b/agents/test_install_rules.py index 956816e9..b1c54df6 100644 --- a/agents/test_install_rules.py +++ b/agents/test_install_rules.py @@ -23,6 +23,7 @@ class InstallRulesTests(unittest.TestCase): (home / ".config" / "opencode", "AGENTS.md"), (home / ".pi" / "agent", "AGENTS.md"), (home / ".omp" / "agent", "AGENTS.md"), + (home / ".config" / "crush", "CRUSH.md"), (home / ".agents", "AGENTS.md"), ) for target_dir, _ in target_names: @@ -41,18 +42,18 @@ class InstallRulesTests(unittest.TestCase): patch.object( installer, "install_one", - side_effect=[PermissionError("denied"), None, None, None, None], + side_effect=[PermissionError("denied"), None, None, None, None, None], ) as install, patch("sys.stderr", new_callable=io.StringIO) as stderr, ): self.assertEqual(installer.main(), 1) - self.assertEqual(install.call_count, 5) + self.assertEqual(install.call_count, 6) self.assertIn("denied", stderr.getvalue()) def test_successful_targets_return_success(self): with patch.object(installer, "install_one") as install: self.assertEqual(installer.main(), 0) - self.assertEqual(install.call_count, 5) + self.assertEqual(install.call_count, 6) def test_existing_file_is_backed_up_without_overwriting_backup(self): with tempfile.TemporaryDirectory() as directory: diff --git a/home/base/gui/dev-tools.nix b/home/base/gui/dev-tools.nix index 0651c2b3..585247f7 100644 --- a/home/base/gui/dev-tools.nix +++ b/home/base/gui/dev-tools.nix @@ -1,4 +1,17 @@ { pkgs, llm-agents, ... }: +let + agentPackages = llm-agents.packages.${pkgs.stdenv.hostPlatform.system}; + codexNoAnalytics = pkgs.writeShellApplication { + name = "codex"; + text = '' + exec ${agentPackages.codex}/bin/codex \ + --config analytics.enabled=false \ + --config feedback.enabled=false \ + --config check_for_update_on_startup=false \ + "$@" + ''; + }; +in { home.packages = with pkgs; @@ -8,16 +21,17 @@ qrtool # decode/encode qr code ] # AI Agent Tools - ++ (with llm-agents.packages.${pkgs.stdenv.hostPlatform.system}; [ + ++ [ # Agents - codex - cursor-cli - opencode - kimi-code - pi - omp + codexNoAnalytics + agentPackages.cursor-agent + agentPackages.opencode + agentPackages.kimi-code + agentPackages.pi + agentPackages.omp + agentPackages.crush # Utilities - rtk # CLI proxy that reduces LLM token consumption - ]); + agentPackages.rtk # CLI proxy that reduces LLM token consumption + ]; } diff --git a/home/base/tui/agent-env.nix b/home/base/tui/agent-env.nix new file mode 100644 index 00000000..806542c3 --- /dev/null +++ b/home/base/tui/agent-env.nix @@ -0,0 +1,18 @@ +{ + home.sessionVariables = { + DO_NOT_TRACK = "1"; + + KIMI_DISABLE_TELEMETRY = "1"; + + PI_TELEMETRY = "0"; + PI_SKIP_VERSION_CHECK = "1"; + + CRUSH_DISABLE_METRICS = "1"; + CRUSH_DISABLE_PROVIDER_AUTO_UPDATE = "1"; + + OPENCODE_CONFIG_CONTENT = builtins.toJSON { + share = "disabled"; + }; + OPENCODE_DISABLE_AUTOUPDATE = "1"; + }; +} diff --git a/hosts/idols-ai/preservation.nix b/hosts/idols-ai/preservation.nix index fcd588d7..a1e56b36 100644 --- a/hosts/idols-ai/preservation.nix +++ b/hosts/idols-ai/preservation.nix @@ -164,6 +164,8 @@ in ".config/opencode" ".local/share/opencode" ".local/state/opencode" + ".config/crush" + ".local/share/crush" # herdr: plugin registry, plugin checkouts/config, session layout ".config/herdr" diff --git a/hosts/idols-ruby/packages.nix b/hosts/idols-ruby/packages.nix index 3c821f5b..3984d123 100644 --- a/hosts/idols-ruby/packages.nix +++ b/hosts/idols-ruby/packages.nix @@ -1,4 +1,17 @@ { pkgs, llm-agents, ... }: +let + agentPackages = llm-agents.packages.${pkgs.stdenv.hostPlatform.system}; + codexNoAnalytics = pkgs.writeShellApplication { + name = "codex"; + text = '' + exec ${agentPackages.codex}/bin/codex \ + --config analytics.enabled=false \ + --config feedback.enabled=false \ + --config check_for_update_on_startup=false \ + "$@" + ''; + }; +in { # https://github.com/Mic92/nix-ld # @@ -80,16 +93,17 @@ conda ] # AI Agent Tools - ++ (with llm-agents.packages.${pkgs.stdenv.hostPlatform.system}; [ + ++ [ # Agents - codex - cursor-cli - opencode - kimi-code - pi - omp + codexNoAnalytics + agentPackages.cursor-agent + agentPackages.opencode + agentPackages.kimi-code + agentPackages.pi + agentPackages.omp + agentPackages.crush # Utilities - rtk # CLI proxy that reduces LLM token consumption - ]); + agentPackages.rtk # CLI proxy that reduces LLM token consumption + ]; } diff --git a/modules/base/codex.nix b/modules/base/codex.nix new file mode 100644 index 00000000..a46c01e3 --- /dev/null +++ b/modules/base/codex.nix @@ -0,0 +1,11 @@ +{ + environment.etc."codex/config.toml".text = '' + check_for_update_on_startup = false + + [analytics] + enabled = false + + [feedback] + enabled = false + ''; +}